Name: series-workflowp7z5l Phase: Running StartedAt: 2026-07-26 11:43:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7z5l[0] Phase: Running StartedAt: 2026-07-26 11:43:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7z5l[0].run-triage Phase: Running StartedAt: 2026-07-26 11:43:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowp7z5l[0].run-triage(0) Phase: Running StartedAt: 2026-07-26 11:43:22 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjUyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmlybXdhcmUgZmxhc2ggc3VwcG9ydCBmb3IgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIHZpYSBkZXZsaW5rLiBUaGUgbXhsODYyeHggZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyB3aXRoIHRoZSBwaHlzaWNhbCBzd2l0Y2ggY2hpcCBvdmVyIGFuIE1ESU8gYnVzLiBEdXJpbmcgcHJvYmUsIGl0IHBlcmZvcm1zIGEgaGFyZHdhcmUgcHJlc2VuY2UgY2hlY2sgKG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCkgdGhhdCByZXF1aXJlcyB0aGUgcGh5c2ljYWwgY2hpcCB0byBsYXRjaCBhbmQgcmV0dXJuIHNwZWNpZmljIHZhbHVlcy4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgKHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VKSwgdGhlIGRyaXZlciBmYWlscyB0byBwcm9iZSwgbWFraW5nIHRoZSBuZXcgZGV2bGluayBmbGFzaCB1cGRhdGUgY29kZSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgZ2VuZXJpYyBEU0EgZGV2bGluayBwbHVtYmluZyBjaGFuZ2VzIG9ubHkgYWZmZWN0IGRyaXZlcnMgaW1wbGVtZW50aW5nIHRoZSBuZXcgb3AsIHdoaWNoIGlzIGN1cnJlbnRseSBvbmx5IG14bDg2Mnh4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDc5MzZkZjdhZjcwODk3NWM5ZDgzZWUyOTZiZjM2MTRkYzg2MjMxNjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxMTo1MjozNiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbmluZGV4IDQ3NDUxNDhmZWNmNGZlLi4wNTg5OTlkMGRjNTZmMiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG5AQCAtOTQsNiAmIzQzOzk0LDcgQEAgcGFyYW1ldGVycywgaW5mbyB2ZXJzaW9ucywgYW5kIG90aGVyIGZlYXR1cmVzIGl0IHN1cHBvcnRzLlxuICAgIG1seDVcbiAgICBtbHhzd1xuICAgIG12ODhlNnh4eFxuJiM0MzsgICBteGw4NjJ4eFxuICAgIG5ldGRldnNpbVxuICAgIG5mcFxuICAgIG9jdGVvbnR4MlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iM2U5ZjdkNGQ0OTY5ZVxuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XG5AQCAtMCwwICYjNDM7MSw2MyBAQFxuJiM0MzsuLiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuJiM0MztcbiYjNDM7PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO214bDg2Mnh4IGRldmxpbmsgc3VwcG9ydFxuJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7XG4mIzQzO1RoaXMgZG9jdW1lbnQgZGVzY3JpYmVzIHRoZSBkZXZsaW5rIGZlYXR1cmVzIGltcGxlbWVudGVkIGJ5IHRoZVxuJiM0MztgYG14bDg2Mnh4YGAgZGV2aWNlIGRyaXZlci5cbiYjNDM7XG4mIzQzO0luZm8gdmVyc2lvbnNcbiYjNDM7PT09PT09PT09PT09PVxuJiM0MztcbiYjNDM7VGhlIGBgbXhsODYyeHhgYCBkcml2ZXIgcmVwb3J0cyB0aGUgZm9sbG93aW5nIHZlcnNpb25zXG4mIzQzO1xuJiM0MzsuLiBsaXN0LXRhYmxlOjogZGV2bGluayBpbmZvIHZlcnNpb25zIGltcGxlbWVudGVkXG4mIzQzOyAgIDp3aWR0aHM6IDUgNSA1IDg1XG4mIzQzO1xuJiM0MzsgICAqIC0gTmFtZVxuJiM0MzsgICAgIC0gVHlwZVxuJiM0MzsgICAgIC0gRXhhbXBsZVxuJiM0MzsgICAgIC0gRGVzY3JpcHRpb25cbiYjNDM7ICAgKiAtIGBgYXNpYy5pZGBgXG4mIzQzOyAgICAgLSBmaXhlZFxuJiM0MzsgICAgIC0gODYyOFxuJiM0MzsgICAgIC0gVGhlIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycy4gTm90XG4mIzQzOyAgICAgICByZXBvcnRlZCBmb3IgYSBzd2l0Y2ggc2l0dGluZyBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlIGFzIHRoZVxuJiM0MzsgICAgICAgcmVnaXN0ZXJzIGFyZSBvbmx5IGFjY2Vzc2libGUgd2l0aCBhIHJ1bm5pbmcgZmlybXdhcmUuXG4mIzQzOyAgICogLSBgYGFzaWMucmV2YGBcbiYjNDM7ICAgICAtIGZpeGVkXG4mIzQzOyAgICAgLSAwXG4mIzQzOyAgICAgLSBUaGUgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMuIE5vdCByZXBvcnRlZFxuJiM0MzsgICAgICAgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSBlaXRoZXIuXG4mIzQzOyAgICogLSBgYGZ3YGBcbiYjNDM7ICAgICAtIHJ1bm5pbmcsIHN0b3JlZFxuJiM0MzsgICAgIC0gMS4wLjcwXG4mIzQzOyAgICAgLSBWZXJzaW9uIG9mIHRoZSBmaXJtd2FyZSBydW5uaW5nIG9uIHRoZSBzd2l0Y2gsIHJlcG9ydGVkIGFzIGJvdGhcbiYjNDM7ICAgICAgIHJ1bm5pbmcgYW5kIHN0b3JlZCBzaW5jZSB0aGUgc3dpdGNoIGJvb3RzIGl0IGZyb20gaXRzIG93biBmbGFzaC5cbiYjNDM7ICAgICAgIEluIE1DVWJvb3QgcmVzY3VlIG1vZGUgbm90aGluZyBpcyByZXBvcnRlZCB3aGlsZSBhbiBpbnRlcnJ1cHRlZFxuJiM0MzsgICAgICAgZG93bmxvYWQgaXMgc3RpbGwgYmVpbmcgcmVjb3ZlcmVkIGluIHRoZSBiYWNrZ3JvdW5kOyBvbmNlIHRoZVxuJiM0MzsgICAgICAgbG9hZGVyIGlzIHJlYWR5IHRvIGFjY2VwdCBhIG5ldyBpbWFnZSB0aGUgdmVyc2lvbiBpcyByZXBvcnRlZCAoYXNcbiYjNDM7ICAgICAgIGJvdGggcnVubmluZyBhbmQgc3RvcmVkKSwgd2hpY2ggaXMgdGhlIHNpZ25hbCB0aGF0IGEgZmxhc2ggd2lsbCBiZVxuJiM0MzsgICAgICAgYWNjZXB0ZWQuIEl0IHJlYWRzIFwmIzM0OzAuMC4wXCYjMzQ7IHdoZW4gdGhlIHN3aXRjaCBjYW1lIHVwIHN0cmFpZ2h0IGludG9cbiYjNDM7ICAgICAgIE1DVWJvb3Qgd2l0aG91dCBldmVyIHJ1bm5pbmcgZmlybXdhcmUuXG4mIzQzO1xuJiM0MztGbGFzaCB1cGRhdGVcbiYjNDM7PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztUaGUgYGBteGw4NjJ4eGBgIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGBgZGV2bGluayBkZXYgZmxhc2hgYC5cbiYjNDM7VGhlIHNpZ25lZCBmaXJtd2FyZSBpbWFnZSBpcyB0cmFuc2ZlcnJlZCB0byB0aGUgc3dpdGNoIG92ZXIgdGhlIHNhbWVcbiYjNDM7TURJTyBidXMgd2hpY2ggaXMgYWxzbyB1c2VkIHRvIG1hbmFnZSB0aGUgc3dpdGNoLCB0aGVuIHZlcmlmaWVkIGFuZFxuJiM0MztpbnN0YWxsZWQgYnkgdGhlIE1DVWJvb3QgYm9vdGxvYWRlciBydW5uaW5nIG9uIHRoZSBzd2l0Y2guIEFsbCBwb3J0c1xuJiM0MztvZiB0aGUgc3dpdGNoIGFyZSBjbG9zZWQgZm9yIHRoZSBkdXJhdGlvbiBvZiB0aGUgdXBkYXRlIGFuZCB0aGUgZHJpdmVyXG4mIzQzO3JlcHJvYmVzIHRoZSBzd2l0Y2ggYWZ0ZXIgaXQgaGFzIHJlYm9vdGVkIGludG8gdGhlIG5ldyBmaXJtd2FyZS4gQVxuJiM0Mztjb21wbGV0ZSBmbGFzaCBhbmQgcmVwcm9iZSBjeWNsZSB0YWtlcyBhYm91dCBvbmUgbWludXRlLlxuJiM0MztcbiYjNDM7QSBzd2l0Y2ggc3R1Y2sgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSwgZS5nLiBhZnRlciBhbiBpbnRlcnJ1cHRlZFxuJiM0Mzt1cGRhdGUsIGlzIHJlZ2lzdGVyZWQgd2l0aG91dCB1c2VyIHBvcnRzLiBJZiB0aGUgcHJldmlvdXMgZG93bmxvYWQgd2FzXG4mIzQzO2ludGVycnVwdGVkIG1pZC10cmFuc2ZlciB0aGUgbG9hZGVyIGlzIHdlZGdlZDsgdGhlIGRyaXZlciBkcmFpbnMgaXRcbiYjNDM7YmFjayB0byBhIGNsZWFuIHJlYWR5IHN0YXRlIGluIHRoZSBiYWNrZ3JvdW5kLCB3aGljaCBjYW4gZWFzaWx5IHRha2VcbiYjNDM7bW9yZSB0aGFuIDEwIG1pbnV0ZXMuIER1cmluZyB0aGF0IHJlY292ZXJ5IGBgZGV2bGluayBkZXYgaW5mb2BgIHJlcG9ydHNcbiYjNDM7bm8gZmlybXdhcmUgdmVyc2lvbiBhbmQgYGBkZXZsaW5rIGRldiBmbGFzaGBgIHJldHVybnMgYGAtRUJVU1lgYC5cbiYjNDM7T25jZSB0aGUgbG9hZGVyIGlzIHJlYWR5IHRoZSBmaXJtd2FyZSB2ZXJzaW9uIGFwcGVhcnMgYW5kIGZsYXNoaW5nIGFcbiYjNDM7ZmlybXdhcmUgaW1hZ2UgdGhyb3VnaCB0aGUgcmVndWxhciB1cGRhdGUgZmxvdyByZWNvdmVycyB0aGUgc3dpdGNoLlxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDYwY2ZmMDA5NTNkY2JlLi4zYTU1ZWQyYmFkOWNiYSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4mIzQzOyYjNDM7JiM0MzsgYi9NQUlOVEFJTkVSU1xuQEAgLTE2MTA3LDYgJiM0MzsxNjEwNyw3IEBAIE06XHREYW5pZWwgR29sbGUgXHUwMDNjZGFuaWVsQG1ha3JvdG9waWEub3JnXHUwMDNlXG4gTDpcdG5ldGRldkB2Z2VyLmtlcm5lbC5vcmdcbiBTOlx0TWFpbnRhaW5lZFxuIEY6XHREb2N1bWVudGF0aW9uL2RldmljZXRyZWUvYmluZGluZ3MvbmV0L2RzYS9tYXhsaW5lYXIsbXhsODYyeHgueWFtbFxuJiM0MztGOlx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XG4gRjpcdGRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9cbiBGOlx0bmV0L2RzYS90YWdfbXhsODYyeHguY1xuIFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZVxuaW5kZXggYTdiZTBlNjY2OWRmYTUuLmJjY2FjMGQwZjcwM2Y2IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcbkBAIC0xLDMgJiM0MzsxLDMgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSAmIzQzOz0gbXhsODYyeHhfZHNhLm9cbi1teGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm9cbiYjNDM7bXhsODYyeHhfZHNhLXkgOj0gbXhsODYyeHgubyBteGw4NjJ4eC1ob3N0Lm8gbXhsODYyeHgtcGh5bGluay5vIG14bDg2Mnh4LWZ3Lm9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmhcbmluZGV4IGExODBhNWRlY2ZmYzAxLi42Zjc3MTg5NTk4NGNiMyAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oXG5AQCAtMTIyNCw2ICYjNDM7MTIyNCwxNiBAQCBzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24ge1xuIFx0X19sZTMyIGl2X2J1aWxkX251bTtcbiB9IF9fcGFja2VkO1xuIFxuJiM0MzsvKipcbiYjNDM7ICogc3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgLSBTeXN0ZW0gcmVnaXN0ZXIgcmVhZC93cml0ZVxuJiM0MzsgKiBAYWRkcjogMzItYml0IHJlZ2lzdGVyIGFkZHJlc3NcbiYjNDM7ICogQHZhbDogcmVnaXN0ZXIgdmFsdWVcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBteGw4NjJ4eF9zeXNfcmVnX3J3IHtcbiYjNDM7XHRfX2xlMzIgYWRkcjtcbiYjNDM7XHRfX2xlMzIgdmFsO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiAvKipcbiAgKiBlbnVtIG14bDg2Mnh4X3BvcnRfdHlwZSAtIFBvcnQgVHlwZVxuICAqIEBNWEw4NjJYWF9MT0dJQ0FMX1BPUlQ6IExvZ2ljYWwgUG9ydFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxuaW5kZXggYzg3YTk1NWMxM2M0OGUuLmE4NjU0MjVhYTYxZTFmIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmhcbkBAIC03MCw3ICYjNDM7NzAsOSBAQFxuICNkZWZpbmUgSU5UX0dQSFlfUkVBRFx0XHRcdChHUFlfR1BZMlhYX01BR0lDICYjNDM7IDB4MSlcbiAjZGVmaW5lIElOVF9HUEhZX1dSSVRFXHRcdFx0KEdQWV9HUFkyWFhfTUFHSUMgJiM0MzsgMHgyKVxuIFxuJiM0MzsjZGVmaW5lIFNZU19NSVNDX0ZXX1VQREFURVx0XHQoU1lTX01JU0NfTUFHSUMgJiM0MzsgMHgxKVxuICNkZWZpbmUgU1lTX01JU0NfRldfVkVSU0lPTlx0XHQoU1lTX01JU0NfTUFHSUMgJiM0MzsgMHgyKVxuJiM0MzsjZGVmaW5lIFNZU19NSVNDX1JFR19SRFx0XHRcdChTWVNfTUlTQ19NQUdJQyAmIzQzOyAweDgpXG4gXG4gI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19DT05GSUdcdChNWEw4NjJYWF9YUENTX01BR0lDICYjNDM7IDB4MSlcbiAjZGVmaW5lIE1YTDg2MlhYX1hQQ1NfUENTX0dFVF9TVEFURVx0KE1YTDg2MlhYX1hQQ1NfTUFHSUMgJiM0MzsgMHgyKVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uZDI4Y2ViOThjZDU2NGVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXG5AQCAtMCwwICYjNDM7MSw4ODQgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcbiYjNDM7LypcbiYjNDM7ICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4XG4mIzQzOyAqXG4mIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNSBEYW5pZWwgR29sbGUgXHUwMDNjZGFuaWVsQG1ha3JvdG9waWEub3JnXHUwMDNlXG4mIzQzOyAqXG4mIzQzOyAqIFNCIFBESSAtIGZpcm13YXJlIGRvd25sb2FkIGludGVyZmFjZSBvdmVyIGNsYXVzZS0yMiBTTURJT1xuJiM0MzsgKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbiYjNDM7ICpcbiYjNDM7ICogVGhlIE14TDg2Mnh4IE1DVWJvb3QgbG9hZGVyIGFjY2VwdHMgYSBmaXJtd2FyZSBpbWFnZSB0aHJvdWdoIGZvdXIgXCYjMzQ7U0IgUERJXCYjMzQ7XG4mIzQzOyAqIHJlZ2lzdGVycyBpbiB0aGUgc3dpdGNoIFNNRElPIHJlZ2lzdGVyIHNwYWNlLiBJdCBydW5zIHdoZW5ldmVyIG5vIFdTUFxuJiM0MzsgKiBmaXJtd2FyZSBpcyBhY3RpdmU6IHRoZSBub3JtYWwgZmlybXdhcmUgdXBkYXRlIGVudGVycyBpdCBkZWxpYmVyYXRlbHkgLSB0aGVcbiYjNDM7ICogU1lTX01JU0NfRldfVVBEQVRFIEFQSSBjb21tYW5kIHNldHMgYSBzdGlja3kgcmVzY3VlIGJpdCBhbmQgcmVib290cyBpbnRvXG4mIzQzOyAqIE1DVWJvb3QgLSBhbmQgdGhlIGxvYWRlciBhbHNvIHN0YXlzIGhlcmUgd2hlbiB0aGUgc3RvcmVkIFdTUCBmaXJtd2FyZSBmYWlsc1xuJiM0MzsgKiBpdHMgYm9vdC10aW1lIGludGVncml0eSBjaGVjay4gVGhpcyBkcml2ZXIgZHJpdmVzIHRoZSBsb2FkZXImIzM5O3MgMHhjNTVjXG4mIzQzOyAqIFwmIzM0O2NvbnNvbGVcJiMzNDsgZG93bmxvYWQgcGF0aC5cbiYjNDM7ICpcbiYjNDM7ICogU01ESU8gcmVnaXN0ZXIgYWNjZXNzIChteGw4NjJ4eF9zbWRpb19yZWFkL3dyaXRlKTpcbiYjNDM7ICogICBNSUkgcmVnIDB4MWYgOj0gXHUwMDNjc2JfcGRpX3JlZ1x1MDAzZSAgICAgIDsgYWRkcmVzcy9wYWdlIGxhdGNoXG4mIzQzOyAqICAgTUlJIHJlZyAweDAwIDo9IC8gPVx1MDAzZSBcdTAwM2N1MTYgZGF0YVx1MDAzZSAgIDsgZGF0YSB3aW5kb3dcbiYjNDM7ICpcbiYjNDM7ICogU0IgUERJIHJlZ2lzdGVycyAoaG9zdCBuYW1lL2FkZHIgIC1cdTAwM2UgIE1DVSBtYWlsYm94KTpcbiYjNDM7ICogICBDVFJMIDB4ZTEwMCAtXHUwMDNlIDB4YzA5Mzg0MDAgICBtb2RlOiBSU1Q9MHgwMCAgUkQ9MHgwMSAgV1I9MHgwMlxuJiM0MzsgKiAgIEFERFIgMHhlMTAxIC1cdTAwM2UgMHhjMDkzODQwNCAgIFNCIHRhcmdldCB3b3JkIGFkZHJlc3MgKFNCMSBiYW5rID0gMHg3ODAwKVxuJiM0MzsgKiAgIERBVEEgMHhlMTAyIC1cdTAwM2UgMHhjMDkzODQwOCAgIDE2LWJpdCBkYXRhIC8gcmVwbHkgd29yZFxuJiM0MzsgKiAgIFNUQVQgMHhlMTAzIC1cdTAwM2UgMHhjMDkzODQwYyAgIGhhbmRzaGFrZTogYSBtYWdpYyAoYmVsb3cpIG9yIGEgYnl0ZSBjb3VudFxuJiM0MzsgKlxuJiM0MzsgKiBTVEFUIG1hZ2ljczpcbiYjNDM7ICogICBSRUFEWSAgMHhjNTVjICAgbG9hZGVyIGlkbGUgaW4gdGhlIGNvbnNvbGUgbG9vcCAgICAgICAgKHRoaXMgZHJpdmVyKVxuJiM0MzsgKiAgIERMX1JEWSAweGMzM2MgICBsb2FkZXIgaWRsZSBpbiB0aGUgZmxhc2hsZXNzIGxvb3BcbiYjNDM7ICogICBTVEFSVCAgMHhmNDhmICAgaG9zdCAgIC1cdTAwM2UgYmVnaW4gZG93bmxvYWQgc2Vzc2lvblxuJiM0MzsgKiAgIEFDSyAgICAweGY0OTAgICBsb2FkZXIgLVx1MDAzZSBTVEFSVCBhY2tub3dsZWRnZWQgKFNUQVJUICYjNDM7IDEpXG4mIzQzOyAqICAgRU5EICAgIDB4M2NjMyAgIGhvc3QgICAtXHUwMDNlIGVuZCBvZiB0cmFuc2ZlciAvIGZpbmFsaXNlXG4mIzQzOyAqICAgUkRSRUcgIDB4ZTJjMCAgIGhvc3QgICAtXHUwMDNlIHJlZ2lzdGVyLXJlYWQgY29tbWFuZCAofCBpbmRleCksIHNlZSBiZWxvd1xuJiM0MzsgKlxuJiM0MzsgKiBDb25zb2xlIGZsYXNoIHBhdGggKFNUQVQ9MHhjNTVjKSAtIG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKCk6XG4mIzQzOyAqXG4mIzQzOyAqICAgaG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyXG4mIzQzOyAqICAgLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tXG4mIzQzOyAqICAgcmVzZXQgKENUUkw9QUREUj1EQVRBPTApXG4mIzQzOyAqICAgcmVhZCBTVEFUIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMHhjNTVjICAgKFJFQURZLCBpZGxlKVxuJiM0MzsgKiAgIFNUQVQgOj0gU1RBUlQoMHhmNDhmKSAgLS0tLS0tLS0tLS0tLS1cdTAwM2VcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgIFx1MDAzYy0tLS0tLS0tLS0tLS0tIFNUQVQgPSAweGY0OTAgKEFDSylcbiYjNDM7ICogICBDVFJMIDo9IFdSXG4mIzQzOyAqICAgREFUQSA6PSBoZHJbMC4uOV0gICgyMC1ieXRlIGhlYWRlcjogdHlwZSxzaXplMSxjcmMxLHNpemUyLGNyYzIpXG4mIzQzOyAqICAgcmVzZXQ7IFNUQVQgOj0gMjAgKGhlYWRlciBsZW4pICAtLS0tLVx1MDAzZSBwYXJzZSBoZHI7IHJfcmVtYWluPXNpemUxJiM0MztzaXplMjtcbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkFTRSB0YXJnZXQgcmVnaW9uKHMpXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2MtLS0tLS0tLS0tLS0tLSBTVEFUPTIxIChsZW4mIzQzOzEpLCB0aGVuIFNUQVQ9MFxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcmFzZWQpXG4mIzQzOyAqICAgLS0gcGF5bG9hZCwgc3RyZWFtZWQgaW4gc2xpY2VzOiAtLVxuJiM0MzsgKiAgIENUUkwgOj0gV1JcbiYjNDM7ICogICBEQVRBIDo9IHdvcmQgeCBOIC4uLlxuJiM0MzsgKiAgICAgYXQgd29yZCAxNjM4NDogcmVzZXQ7IEFERFI6PTB4NzgwMDsgQ1RSTDo9V1IgICAoaGFsZi1iYW5rIC1cdTAwM2UgU0IxKVxuJiM0MzsgKiAgICAgYXQgd29yZCAzMjc2MDogZmx1c2ggc2xpY2U6XG4mIzQzOyAqICAgICAgICByZXNldDsgU1RBVCA6PSBcdTAwM2NieXRlc190aGlzX3NsaWNlXHUwMDNlIC0tLVx1MDAzZSByX3JlbWFpbiAtPSBieXRlczsgcHJvZ3JhbVxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjLS0tLS0tLS0tLS0tLS0tLS0tLSBTVEFUPTAgIChyZWFkeSBmb3IgbmV4dCBzbGljZSlcbiYjNDM7ICogICAuLi4gcmVwZWF0IHVudGlsIHRoZSB3aG9sZSBwYXlsb2FkIGlzIHNlbnQgLi4uXG4mIzQzOyAqICAgU1RBVCA6PSBFTkQoMHgzY2MzKSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHUwMDNlIGZpbmFsaXNlXG4mIzQzOyAqXG4mIzQzOyAqIFRoZSByX3JlbWFpbiA9PSAwIHJ1bGUgKGNyaXRpY2FsKTpcbiYjNDM7ICogICBFdmVyeSBob3N0IFNUQVQgd3JpdGUgaW4gdGhlIHBheWxvYWQgcGhhc2UgaXMgYSBieXRlIGNvdW50OyB0aGUgbG9hZGVyXG4mIzQzOyAqICAgZG9lcyByX3JlbWFpbiAtPSBjb3VudCBhbmQgc3RheXMgaW4gdGhlIHJlY2VpdmUgbG9vcCB3aGlsZSByX3JlbWFpbiAhPSAwLlxuJiM0MzsgKiAgIEl0IGxlYXZlcyB0aGUgbG9vcCwgdmFsaWRhdGVzLCBhbmQgLSBpZiBpdCB3YXMgaW4gcmVzY3VlIC0gY2xlYXJzIGl0c1xuJiM0MzsgKiAgIHJlc2N1ZS1lbmFibGUgYml0IHNvIGJvb3RfZ28gYm9vdHMgdGhlIG5ldyBpbWFnZSwgT05MWSB3aGVuIHJfcmVtYWluIGhpdHNcbiYjNDM7ICogICBFWEFDVExZIDAuIEEgY291bnQgbGFyZ2VyIHRoYW4gcl9yZW1haW4gdW5kZXJmbG93cyB0aGUgMzItYml0IGNvdW50ZXIgYW5kXG4mIzQzOyAqICAgd2VkZ2VzIHRoZSBsb2FkZXIgdW50aWwgYSBwb3dlciBjeWNsZS4gSGVuY2U6XG4mIzQzOyAqICAgICAtIG5ldmVyIHNlbmQgYSBzbGljZS9jaHVuayBjb3VudCBsYXJnZXIgdGhhbiB3aGF0IGlzIG91dHN0YW5kaW5nO1xuJiM0MzsgKiAgICAgLSBpbnRlcnJ1cHRlZC1kb3dubG9hZCByZWNvdmVyeSBmZWVkcyAxIGJ5dGUgYXQgYSB0aW1lIChzZWUgYmVsb3cpLlxuJiM0MzsgKlxuJiM0MzsgKiBJbnRlcnJ1cHRlZC1mbGFzaCByZWNvdmVyeSAobXhsODYyeHhfcmVzY3VlX2RyYWluKTpcbiYjNDM7ICogICBBIGhvc3QgdGhhdCBkaWVzIG1pZC1wYXlsb2FkIGxlYXZlcyB0aGUgbG9hZGVyIHNwaW5uaW5nIGluIHRoZSBzbGljZSBsb29wXG4mIzQzOyAqICAgaG9sZGluZyBTVEFUPTAgKG5vIG1hZ2ljKS4gRmVlZCBzaW5nbGUgMS1ieXRlIGNodW5rcyAob25lIERBVEEgd29yZCAmIzQzO1xuJiM0MzsgKiAgIFNUQVQ9MSkgdW50aWwgcl9yZW1haW4gcmVhY2hlcyAwLCB0aGVuIFNUQVQ9RU5EOyB0aGUgbG9hZGVyIGZpbmFsaXNlcyB0aGVcbiYjNDM7ICogICAobm93IGNvcnJ1cHQpIGltYWdlIGFuZCByZS1hcm1zIFJFQURZIGZvciBhIGNsZWFuIHJlZmxhc2guXG4mIzQzOyAqXG4mIzQzOyAqIFJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIChub24tZGVzdHJ1Y3RpdmUgbGl2ZW5lc3MgcHJvb2YpOlxuJiM0MzsgKiAgIERBVEEgOj0gMHg3YzIzIChtYXJrZXIpOyBTVEFUIDo9IDB4ZTJjMHxpZHhcbiYjNDM7ICogICAgIC1cdTAwM2UgbG9hZGVyIHJldHVybnMgYSBydW50aW1lIHdvcmQgaW4gREFUQSBhbmQgcmUtYXJtcyBTVEFUPTB4YzU1Yy5cbiYjNDM7ICogICBUaGUgcmVwbHkgc291cmNlIGlzIGxvYWRlciBCU1MsIG5vdCBhIGNoaXAgaWQ7IHVzZWQgb25seSB0byBwcm92ZSBhIGxpdmVcbiYjNDM7ICogICBtYWlsYm94IGluIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpLlxuJiM0MzsgKlxuJiM0MzsgKiBUaGUgb3RoZXIgU1RBVCByZWFkeSBtYWdpYywgMHhjMzNjLCBtYXJrcyB0aGUgbG9hZGVyJiMzOTtzIGZsYXNobGVzc1xuJiM0MzsgKiBjaGlwLXRvLWNoaXAgZG93bmxvYWQgbW9kZSAoTXhMODYyODFTIDE2LXBvcnQgdGllcik7IHRoaXMgZHJpdmVyIGRvZXMgbm90XG4mIzQzOyAqIHVzZSBpdC5cbiYjNDM7ICpcbiYjNDM7ICogUmVzY3VlIGxpZmVjeWNsZSAoZGV2bGluayk6IHByb2JlIHJ1bnMgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCk7IGEgd2VkZ2VkXG4mIzQzOyAqIGxvYWRlciBpcyBkcmFpbmVkIGJhY2sgdG8gUkVBRFkgYnkgYSBiYWNrZ3JvdW5kIHNlbGYtaGVhbCAocmVzY3VlX2hlYWxfd29yaykgc29cbiYjNDM7ICogdGhlIG11bHRpLW1pbnV0ZSByZWNvdmVyeSBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrLiBkZXZsaW5rIGRldiBpbmZvXG4mIzQzOyAqIGV4cG9zZXMgdGhlIGZ3IHZlcnNpb24gKHRoZSBcJiMzNDtmbGFzaGFibGVcJiMzNDsgc2lnbmFsKSBvbmx5IG9uY2UgYXQgUkVBRFk7XG4mIzQzOyAqIGZsYXNoX3VwZGF0ZSByZXR1cm5zIC1FQlVTWSB1bnRpbCB0aGVuLCBhbmQgcmVwcm9iZXMgdG8gV1NQIGZpcm13YXJlIG9uIHN1Y2Nlc3MuXG4mIzQzOyAqXG4mIzQzOyAqIE5vdGVzOlxuJiM0MzsgKiAgIC0gQ2hpcCBpZC9yZXZpc2lvbiAoMHhjMGQyODg4NC84OCkgYXJlIE5PVCByZWFjaGFibGUgb24gdGhpcyBjaGFubmVsOyB0aGV5XG4mIzQzOyAqICAgICBuZWVkIHRoZSBjbGF1c2UtNDUgTU1EIGZpcm13YXJlIG1haWxib3gsIHdoaWNoIGlzIGRlYWQgdW5kZXIgTUNVYm9vdC5cbiYjNDM7ICogICAgIFJlc2N1ZSBpZGVudGl0eSBpcyBieSBTQiBQREkgYmVoYXZpb3VyIG9ubHkgKG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCkuXG4mIzQzOyAqICAgLSBUaGUgU01ESU8gUEhZIGFkZHJlc3MgYW5kIHRoZSAweGUxeHggb2Zmc2V0cyBhcmUgT1RQLWNvbmZpZ3VyYWJsZTsgZGVyaXZlXG4mIzQzOyAqICAgICB0aGVtIGZyb20gdGhlIERUIGJpbmRpbmcsIGRvIG5vdCBhc3N1bWUgZml4ZWQgdmFsdWVzLlxuJiM0MzsgKi9cbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYzMyLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tb2R1bGUuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9vdmVyZmxvdy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3J0bmV0bGluay5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NuZXQvc3dpdGNoZGV2LmhcdTAwM2VcbiYjNDM7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtYXBpLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtY21kLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtZncuaFwmIzM0O1xuJiM0MzsjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1ob3N0LmhcJiMzNDtcbiYjNDM7XG4mIzQzOy8qIFNCIFBESSByZWdpc3RlcnMgKGNsYXVzZS0yMiBTTURJTyBhZGRyZXNzIHNwYWNlKSAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMXHRcdDB4ZTEwMFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9BRERSXHRcdDB4ZTEwMVxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9EQVRBXHRcdDB4ZTEwMlxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUXHRcdDB4ZTEwM1xuJiM0MztcbiYjNDM7LyogU0IgUERJIENUUkwgbW9kZXMgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1RcdDB4MDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUlx0XHQweDAyXG4mIzQzO1xuJiM0MzsvKiBTQiBQREkgaGFuZHNoYWtlIG1hZ2ljIChwdWJsaXNoZWQvY29uc3VtZWQgdmlhIFNUQVQpICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JFQURZXHRcdDB4YzU1Y1x0LyogbG9hZGVyIGlkbGUsIGNvbnNvbGUgbG9vcCAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9ETF9SRUFEWVx0MHhjMzNjXHQvKiBsb2FkZXIgaWRsZSwgZmxhc2hsZXNzIGxvb3AgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfU1RBUlRcdFx0MHhmNDhmXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0VORFx0XHQweDNjYzNcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkRSRUdcdFx0MHhlMmMwXHQvKiByZWdpc3Rlci1yZWFkIGNtZCAofCBpbmRleCkgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSS1x0MHg3YzIzXHQvKiBtYXJrZXIgcGxhY2VkIGluIERBVEEgZm9yIFJEUkVHICovXG4mIzQzO1xuJiM0MzsvKiBCZWhhdmlvdXJhbCBwcmVzZW5jZSBwcm9iZTogdHdvIGRpc3RpbmN0IDE2LWJpdCBsYXRjaGVzIG9uIEFERFIvREFUQS4gKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfQVx0XHQweDVhNWFcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRFx0XHQweGE1YTVcbiYjNDM7XG4mIzQzOy8qIEZpcm13YXJlIHRyYW5zZmVyIGdlb21ldHJ5ICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfSERSX1NJWkVcdFx0MjBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX0hBTEZcdFx0MTYzODRcdC8qIHdvcmRzIHBlciBoYWxmLWJhbmsgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19CQU5LX1NMSUNFXHRcdDMyNzYwXHQvKiB3b3JkcyBwZXIgZnVsbCBzbGljZSAqL1xuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX1NCMV9BRERSXHRcdDB4NzgwMFx0LyogU0IxIHdvcmQgYWRkcmVzcyAqL1xuJiM0MztcbiYjNDM7LyogVGltZW91dHMgKGdlbmVyb3VzIHVwcGVyIGJvdW5kcykgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TXHQzMDAwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVNcdDUwMDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TXHQzMDAwMDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TXHQxMjAwMDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVNcdDUwMDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19SRVBST0JFX0RFTEFZX01TXHQ1MDBcbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9SRVNDVUVfUkVBRFlfVElNRU9VVF9NUyAxMDAwXG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiYjNDM7e1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuJiM0MztcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcbiYjNDM7XHRcdFx0XHQgICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgZXhwZWN0ZWQsXG4mIzQzO1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKCh1MTYpcmV0ID09IGV4cGVjdGVkKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdHVzbGVlcF9yYW5nZSgxMDAwMCwgMTEwMDApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIC1FVElNRURPVVQ7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuJiM0MztcdFx0XHRcdCAgICAgICB1MzIgZGF0YV93cml0dGVuKVxuJiM0Mzt7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgZGF0YV93cml0dGVuKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCxcbiYjNDM7XHRcdFx0XHRcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxuJiM0MztcdFx0XHRcdCAgdTMyIGRvbmUsIHUzMiB0b3RhbClcbiYjNDM7e1xuJiM0MztcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIHN0YXR1cywgTlVMTCwgZG9uZSwgdG90YWwpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBCeXRlLWNvdW50IG9mIGVhY2ggY2h1bmsgZmVkIHRvIHRoZSBsb2FkZXIgZHVyaW5nIGRyYWluLiBJdCBNVVNUIGJlIDE6IHRoZVxuJiM0MzsgKiBsb2FkZXIgb25seSBsZXRzIHVzIG9ic2VydmUgXCYjMzQ7Y291bnRlciA9PSAwXCYjMzQ7LCBuZXZlciBcJiMzNDtjb3VudGVyIFx1MDAzYyBzdGVwXCYjMzQ7LCBzbyBhbnlcbiYjNDM7ICogc3RlcCBcdTAwM2UgMSBjYW4gc3VidHJhY3QgcGFzdCB6ZXJvLCB1bmRlcmZsb3cgdGhlIDMyLWJpdCBjb3VudGVyIGFuZCB3ZWRnZSB0aGVcbiYjNDM7ICogbG9hZGVyIGZvciB+Ml4zMiBtb3JlIGJ5dGVzIChhIHN0YXRlIG9ubHkgYSBwb3dlciBjeWNsZSBjbGVhcnMpLiBTdGVwcGluZyBieVxuJiM0MzsgKiAxIHdhbGtzIHRoZSBjb3VudGVyIHRocm91Z2ggZXZlcnkgdmFsdWUgYW5kIGlzIGd1YXJhbnRlZWQgdG8gbGFuZCBvbiB6ZXJvXG4mIzQzOyAqIHdoYXRldmVyIGl0cyAocG9zc2libHkgb2RkKSBzdGFydC4gQSAxLWJ5dGUgY2h1bmsgaXMgYSBwYXRoIHRoZSBsb2FkZXJcbiYjNDM7ICogYWxyZWFkeSBoYW5kbGVzOiB0aGUgbm9ybWFsIHRyYW5zZmVyIGVuZHMgd2l0aCBhIHNpbmdsZSB0cmFpbGluZyBieXRlIGZvclxuJiM0MzsgKiBvZGQtc2l6ZWQgaW1hZ2VzIChzZWUgU3RlcCA2KS5cbiYjNDM7ICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVNcdDFcbiYjNDM7XG4mIzQzOy8qIFBvbGwgU1RBVCB3aGlsZSBkcmFpbmluZyBhIHN0dWNrIGRvd25sb2FkOiAwIG1lYW5zIFwmIzM0O2ZlZWQgdGhlIG5leHQgY2h1bmtcJiMzNDssXG4mIzQzOyAqIFJFQURZIG1lYW5zIHRoZSBsb2FkZXIgbGVmdCB0aGUgcmVjZWl2ZSBsb29wIGFuZCByZS1hcm1lZCBpdHMgY29tbWFuZCBsb29wLFxuJiM0MzsgKiBhbnl0aGluZyBlbHNlIGlzIGEgdHJhbnNpZW50ICh0aGUgY291bnQgYmVpbmcgY29uc3VtZWQpIC0gQlVTWSBwYXN0IHRoZVxuJiM0MzsgKiB3aW5kb3cgbWVhbnMgdGhlIGNvdW50ZXIgaGFzIGhpdCB6ZXJvIGFuZCB0aGUgbG9hZGVyIGlzIGZpbmFsaXNpbmcuXG4mIzQzOyAqL1xuJiM0MztlbnVtIHsgTVhMODYyWFhfRFJBSU5fRkVFRCwgTVhMODYyWFhfRFJBSU5fUkVBRFksIE1YTDg2MlhYX0RSQUlOX0JVU1kgfTtcbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXG4mIzQzO3tcbiYjNDM7XHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0aWYgKCh1MTYpcmV0ID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSlcbiYjNDM7XHRcdFx0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX1JFQURZO1xuJiM0MztcdFx0aWYgKCh1MTYpcmV0ID09IDApXG4mIzQzO1x0XHRcdHJldHVybiBNWEw4NjJYWF9EUkFJTl9GRUVEO1xuJiM0MztcdFx0dXNsZWVwX3JhbmdlKDUwLCAxNTApO1xuJiM0MztcdH0gd2hpbGUgKHRpbWVfYmVmb3JlKGppZmZpZXMsIHRpbWVvdXQpKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX0JVU1k7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIFJlY292ZXIgYSBzd2l0Y2ggd2hvc2UgU0IgUERJIGRvd25sb2FkIHdhcyBpbnRlcnJ1cHRlZCBtaWQtdHJhbnNmZXIgLSB0aGVcbiYjNDM7ICogaG9zdCBkaWVkIGFmdGVyIE1DVWJvb3QgYmVnYW4gZXJhc2luZyBmbGFzaCwgd2hldGhlciBpdCBhYm9ydGVkIG1pZCBlcmFzZSBvclxuJiM0MzsgKiBtaWQgaW1hZ2Utd3JpdGUsIGJvdGggZW5kIHVwIGluIHRoZSBzYW1lIHBsYWNlOiB0aGUgcGF5bG9hZCByZWNlaXZlIGxvb3AuXG4mIzQzOyAqIFRoZXJlIHRoZSBsb2FkZXIgcHVibGlzaGVzIFNUQVQ9MCwgd2FpdHMgZm9yIHRoZSBob3N0IHRvIHdyaXRlIGEgYnl0ZS1jb3VudFxuJiM0MzsgKiB0byBTVEFULCBETUFzIHRoYXQgbWFueSBieXRlcyBhbmQgc3VidHJhY3RzIHRoZSBjb3VudCBmcm9tIGEgcmVtYWluaW5nLWJ5dGVzXG4mIzQzOyAqIGNvdW50ZXIsIGxlYXZpbmcgdGhlIGxvb3Agb25seSB3aGVuIHRoZSBjb3VudGVyIHJlYWNoZXMgZXhhY3RseSB6ZXJvLiBUaGVcbiYjNDM7ICogaW1hZ2Ugc2l6ZSBkaWVkIHdpdGggdGhlIGhvc3QsIHNvIHdlIGZlZWQgc2luZ2xlLWJ5dGUgY2h1bmtzIChzZWVcbiYjNDM7ICogTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVMpIHRvIHdhbGsgdGhlIGNvdW50ZXIgdG8gemVybyB3aXRob3V0IHVuZGVyZmxvdyxcbiYjNDM7ICogdGhlbiBzZW5kIEVORC4gVGhlIGxvYWRlciBydW5zIGl0cyAoZmFpbGVkKSBjaGVja3N1bSBhbmQgZWl0aGVyIHJlLWFybXNcbiYjNDM7ICogUkVBRFkgb3IsIGlmIGEgdmFsaWQgaW1hZ2Ugc3Vydml2ZWQgaW4gZmxhc2gsIGJvb3RzIGl0LiBSZXR1cm5zIDAgd2hlbiBSRUFEWVxuJiM0MzsgKiBpcyByZWFjaGVkICh0aGUgY2FsbGVyIGNhbiBmbGFzaCksIDEgd2hlbiB0aGUgbG9hZGVyIGJvb3RlZCBpbnN0ZWFkICh0aGVcbiYjNDM7ICogc3dpdGNoIGlzIHJlY292ZXJlZCBidXQgdGhlIGludGVuZGVkIGltYWdlIHdhcyBub3Qgd3JpdHRlbiksIFx1MDAzYzAgb24gZXJyb3IuXG4mIzQzOyAqIERvZXMgTk9UIHJlY292ZXIgYSBjb3VudGVyIGFscmVhZHkgdW5kZXJmbG93ZWQgYnkgYW4gZWFybGllciBvdmVyc2l6ZWQtY2h1bmtcbiYjNDM7ICogYXR0ZW1wdCAtIHRoYXQgbmVlZHMgYSBwb3dlciBjeWNsZS5cbiYjNDM7ICovXG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfcmVzY3VlX2RyYWluKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiYjNDM7XHQvKiBCb3VuZDogdHdpY2UgdGhlIGxvYWRlciYjMzk7cyAxNiBNaUIgaW1hZ2UgY2FwLCBvbmUgYnl0ZSBwZXIgY2h1bmsuICovXG4mIzQzO1x0dTMyIG1heF9jaHVua3MgPSAydSAqICgxNnUgXHUwMDNjXHUwMDNjIDIwKSAvIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTO1xuJiM0MztcdHUzMiBjaHVuayA9IDA7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0ZGV2X3dhcm4oZGV2LCBcJiMzNDtmbGFzaDogZHJhaW5pbmcgaW50ZXJydXB0ZWQgZG93bmxvYWRcXG5cJiMzNDspO1xuJiM0MztcbiYjNDM7XHR3aGlsZSAoY2h1bmsgXHUwMDNjIG1heF9jaHVua3MpIHtcbiYjNDM7XHRcdC8qIFRlYXJkb3duIGNhbiBpbnRlcnJ1cHQgdGhpcyBtaW51dGVzLWxvbmcgZHJhaW4uICovXG4mIzQzO1x0XHRpZiAodGVzdF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFx1MDAyNnByaXYtXHUwMDNlZmxhZ3MpKVxuJiM0MztcdFx0XHRyZXR1cm4gLUVDQU5DRUxFRDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9kcmFpbihwcml2LCAyMDAwKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRpZiAocmV0ID09IE1YTDg2MlhYX0RSQUlOX1JFQURZKVxuJiM0MztcdFx0XHRyZXR1cm4gMDtcbiYjNDM7XHRcdGlmIChyZXQgPT0gTVhMODYyWFhfRFJBSU5fQlVTWSlcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1xuJiM0MztcdFx0LyogRmVlZCBvbmUgemVybyBieXRlOyByZXNldCBjbGVhcmVkIHRoZSB3cml0ZSBsYXRjaC4gKi9cbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCAweDAwMDApO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbiYjNDM7XHRcdFx0XHRcdCAgIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTKTtcbiYjNDM7XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRjaHVuayYjNDM7JiM0Mzs7XG4mIzQzO1x0XHRjb25kX3Jlc2NoZWQoKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChjaHVuayBcdTAwM2U9IG1heF9jaHVua3MpIHtcbiYjNDM7XHRcdGRldl9lcnIoZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogaW50ZXJydXB0ZWQgZG93bmxvYWQgZGlkIG5vdCBkcmFpbiBhZnRlciAldSBjaHVua3NcXG5cJiMzNDssXG4mIzQzO1x0XHRcdGNodW5rKTtcbiYjNDM7XHRcdHJldHVybiAtRVRJTUVET1VUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4mIzQzO1x0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0VORCk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHJldHVybiBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSxcbiYjNDM7XHRcdFx0XHRcdCBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzOy8qIEJhY2tncm91bmQgc2VsZi1oZWFsOiBkcmFpbiBhIHdlZGdlZCBkb3dubG9hZCBiYWNrIHRvIFJFQURZIG9mZiB0aGUgZGV2bGlua1xuJiM0MzsgKiBmbGFzaCBwYXRoLCBzbyB0aGUgbWludXRlcy1sb25nIHJlY292ZXJ5IG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2suXG4mIzQzOyAqIFNjaGVkdWxlZCBmcm9tIHByb2JlOyBwdWJsaXNoZXMgcmVzY3VlX3JlYWR5IG9uIHN1Y2Nlc3MuXG4mIzQzOyAqL1xuJiM0Mzt2b2lkIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPVxuJiM0MztcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9wcml2LCByZXNjdWVfaGVhbF93b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2O1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdGRldl9pbmZvKGRldiwgXCYjMzQ7cmVjb3ZlcmluZyBpbnRlcnJ1cHRlZCBkb3dubG9hZCBpbiBiYWNrZ3JvdW5kXFxuXCYjMzQ7KTtcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9yZXNjdWVfZHJhaW4ocHJpdik7XG4mIzQzO1x0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRpZiAoIXJldCkge1xuJiM0MztcdFx0V1JJVEVfT05DRShwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSwgdHJ1ZSk7XG4mIzQzO1x0XHRkZXZfaW5mbyhkZXYsIFwmIzM0O3JlY292ZXJ5IGNvbXBsZXRlLCByZWFkeSB0byBmbGFzaFxcblwmIzM0Oyk7XG4mIzQzO1x0fVxuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBEZXRlY3QgTUNVYm9vdCByZXNjdWUgbW9kZSBvdmVyIGNsYXVzZS0yMiBTTURJTyBhbG9uZSwgc28gdGhlIGNhbGxlciBjYW4gcnVsZVxuJiM0MzsgKiB0aGUgbG9hZGVyIG91dCBiZWZvcmUgYW55IEM0NSBBUEkgcmVxdWVzdCAod2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vIFdTUFxuJiM0MzsgKiBmaXJtd2FyZSBhbnN3ZXJzKS4gQSBzY3JhdGNoIHdyaXRlIHRvIEFERFIvREFUQSBtdXN0IGxhdGNoIG9yIHRoZSBjaGlwIGlzXG4mIzQzOyAqIGFic2VudCAoLUVOT0RFVik7IFNUQVQgdGhlbiBjbGFzc2lmaWVzIHRoZSBzdGF0ZSwgcG9rZWQgZGVzdHJ1Y3RpdmVseSBvbmx5XG4mIzQzOyAqIHdoZW4gMCwgdGhlIG9uZSB2YWx1ZSBhIHJ1bm5pbmcgZmlybXdhcmUgbmV2ZXIgaG9sZHM6XG4mIzQzOyAqXG4mIzQzOyAqICAtIDB4YzMzYzogZmxhc2hsZXNzIGxvb3AsIHJlYWR5LlxuJiM0MzsgKiAgLSAweGM1NWM6IGNvbnNvbGUgbG9vcCwgaWYgdGhlIHJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIGlzIHNlcnZpY2VkLlxuJiM0MzsgKiAgLSBvdGhlciBub24temVybzogcnVubmluZyBmaXJtd2FyZSwgbGVmdCB1bnBva2VkLlxuJiM0MzsgKiAgLSAwOiB3ZWRnZWQgcmVjZWl2ZSBsb29wLCBpZiBhIDEtYnl0ZSBzbGljZS1hZHZhbmNlIGRyYWlucyBiYWNrIHRvIDAuXG4mIzQzOyAqXG4mIzQzOyAqIFJldHVybjogTVhMODYyWFhfSU5fUkVTQ1VFLCBNWEw4NjJYWF9OT1RfUkVTQ1VFLCBvciBuZWdhdGl2ZSAoLUVOT0RFVi9TTURJTykuXG4mIzQzOyAqL1xuJiM0MztpbnQgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuJiM0Mzt7XG4mIzQzO1x0aW50IHN0YXQsIGRhdCwgcmV0LCByYiwgYSwgZDtcbiYjNDM7XG4mIzQzO1x0LyogcmVzY3VlX3JlYWR5IGdhdGVzIGZsYXNoaW5nOyBhIHdlZGdlZCBsb2FkZXIgbmVlZHMgdGhlIGRyYWluIGZpcnN0LiAqL1xuJiM0MztcdHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5ID0gZmFsc2U7XG4mIzQzO1xuJiM0MztcdC8qIFByZXNlbmNlOiBhIGxpdmUgY2hpcCBsYXRjaGVzIHRoZSBzY3JhdGNoIHdyaXRlLCBhbiBhYnNlbnQgb25lIGZsb2F0cy4gKi9cbiYjNDM7XHRhID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsXG4mIzQzO1x0XHRcdFx0IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BKTtcbiYjNDM7XHRpZiAoYSBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiBhO1xuJiM0MztcdGQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcbiYjNDM7XHRcdFx0XHQgTVhMODYyWFhfU0JfUERJX1BST0JFX0QpO1xuJiM0MztcdGlmIChkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGQ7XG4mIzQzO1x0YSA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIpO1xuJiM0MztcdGlmIChhIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGE7XG4mIzQzO1x0ZCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpO1xuJiM0MztcdGlmIChkIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIGQ7XG4mIzQzO1x0aWYgKCh1MTYpYSAhPSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfQSB8fFxuJiM0MztcdCAgICAodTE2KWQgIT0gTVhMODYyWFhfU0JfUERJX1BST0JFX0QpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcbiYjNDM7XHRzdGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4mIzQzO1x0aWYgKHN0YXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gc3RhdDtcbiYjNDM7XG4mIzQzO1x0LyogRmxhc2hsZXNzLWRvd25sb2FkIGxvb3A6IHVuYW1iaWd1b3VzIHJlYWR5IG1hZ2ljLCBsZWF2ZSBpdCBhbG9uZS4gKi9cbiYjNDM7XHRpZiAoKHUxNilzdGF0ID09IE1YTDg2MlhYX1NCX1BESV9ETF9SRUFEWSkge1xuJiM0MztcdFx0cHJpdi1cdTAwM2VyZXNjdWVfcmVhZHkgPSB0cnVlO1xuJiM0MztcdFx0cmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIENvbnNvbGUgbG9vcCBhdCBSRUFEWTogY29uZmlybSB0aGUgbGl2ZSBtYWlsYm94IHdpdGggdGhlIHJlZ2lzdGVyLXJlYWRcbiYjNDM7XHQgKiBjaGFsbGVuZ2UgKGNvbnN1bWVzIHRoZSBtYXJrZXIgZnJvbSBEQVRBIGFuZCByZS1hcm1zIFJFQURZKS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoKHUxNilzdGF0ID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSkge1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsXG4mIzQzO1x0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSyk7XG4mIzQzO1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4mIzQzO1x0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfUkRSRUcpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJiID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksXG4mIzQzO1x0XHRcdFx0XHQgICAgICAgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMpO1xuJiM0MztcdFx0ZGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7XG4mIzQzO1x0XHRpZiAoZGF0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRyZXR1cm4gZGF0O1xuJiM0MztcdFx0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdFx0aWYgKCFyYiBcdTAwMjZcdTAwMjYgKHUxNilkYXQgIT0gTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUkspIHtcbiYjNDM7XHRcdFx0cHJpdi1cdTAwM2VyZXNjdWVfcmVhZHkgPSB0cnVlO1xuJiM0MztcdFx0XHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xuJiM0MztcdFx0fVxuJiM0MztcdFx0cmV0dXJuIC1FTk9ERVY7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBBbnkgb3RoZXIgbm9uLXplcm8gdmFsdWUgaXMgYSBydW5uaW5nIGZpcm13YXJlLCBub3QgYSBsb2FkZXIuICovXG4mIzQzO1x0aWYgKHN0YXQpXG4mIzQzO1x0XHRyZXR1cm4gTVhMODYyWFhfTk9UX1JFU0NVRTtcbiYjNDM7XG4mIzQzO1x0LyogU1RBVCA9PSAwOiBhIHdlZGdlZCByZWNlaXZlIGxvb3AgY29uc3VtZXMgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBiYWNrXG4mIzQzO1x0ICogdG8gMCAoZmVlZCBvbmUgREFUQSB3b3JkIGZpcnN0LCBsaWtlIGEgZHJhaW4gY2h1bmspLlxuJiM0MztcdCAqL1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgMHgwMDAwKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsIDEpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJiID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLCBNWEw4NjJYWF9SRVNDVUVfUkVBRFlfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKCFyYilcbiYjNDM7XHRcdHJldHVybiBNWEw4NjJYWF9JTl9SRVNDVUU7XG4mIzQzO1xuJiM0MztcdHJldHVybiAtRU5PREVWO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MzsvKiBQb3N0LWZsYXNoIHJlcHJvYmUuIFJ1bnMgZnJvbSBhIHNlbGYtY29udGFpbmVkIGhlYXAgd29yayAobm90IGEga3RocmVhZCBhbmRcbiYjNDM7ICogbm90IHRoZSBkZXZsaW5rIGNhbGxlciYjMzk7cyBjb250ZXh0KToga3RocmVhZF9jcmVhdGUoKSBpbiB0aGUgY2FsbGVyIGNvbnRleHRcbiYjNDM7ICogZmFpbHMgLUVJTlRSIGlmIHRoZSBkZXZsaW5rIGNvbW1hbmQgd2FzIEN0cmwtQyYjMzk7ZCwgYW5kIHNjaGVkdWxlX3dvcmsoKSBjYW5ub3QuXG4mIzQzOyAqIGRldmljZV9yZXByb2JlKCkgLVx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2LCBzbyB0aGlzIG11c3Qgbm90IHRvdWNoIHByaXY7IGl0IHVzZXNcbiYjNDM7ICogb25seSB0aGUgaGVsZCBkZXZpY2UgcmVmZXJlbmNlIGFuZCBkcm9wcyBpdHMgbW9kdWxlIHJlZmVyZW5jZSBhZnRlcndhcmRzLlxuJiM0MzsgKi9cbiYjNDM7c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfd29yayB7XG4mIzQzO1x0c3RydWN0IHdvcmtfc3RydWN0IHdvcms7XG4mIzQzO1x0c3RydWN0IGRldmljZSAqZGV2O1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHZvaWQgbXhsODYyeHhfcmVwcm9iZV93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yaylcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX3dvcmsgKnJ3ID1cbiYjNDM7XHRcdGNvbnRhaW5lcl9vZih3b3JrLCBzdHJ1Y3QgbXhsODYyeHhfcmVwcm9iZV93b3JrLCB3b3JrKTtcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBydy1cdTAwM2VkZXY7XG4mIzQzO1xuJiM0MztcdG1zbGVlcChNWEw4NjJYWF9GV19SRVBST0JFX0RFTEFZX01TKTtcbiYjNDM7XHRpZiAoZGV2aWNlX3JlcHJvYmUoZGV2KSlcbiYjNDM7XHRcdGRldl9lcnIoZGV2LCBcJiMzNDtyZXByb2JlIGZhaWxlZFxcblwmIzM0Oyk7XG4mIzQzO1x0cHV0X2RldmljZShkZXYpO1xuJiM0MztcdGtmcmVlKHJ3KTtcbiYjNDM7XHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyogTUNVYm9vdCBmaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi9cbiYjNDM7c3RydWN0IG14bDg2Mnh4X2Z3X2hkciB7XG4mIzQzO1x0X19sZTMyIGltYWdlX3R5cGU7XG4mIzQzO1x0X19sZTMyIGltYWdlX3NpemVfMTtcbiYjNDM7XHRfX2xlMzIgaW1hZ2VfY2hlY2tzdW1fMTtcbiYjNDM7XHRfX2xlMzIgaW1hZ2Vfc2l6ZV8yO1xuJiM0MztcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xuJiM0Mzt9IF9fcGFja2VkO1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbiYjNDM7XHRcdFx0XHQgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxuJiM0MztcdFx0XHRcdCAgIHUzMiAqcGF5bG9hZF9zaXplKVxuJiM0Mzt7XG4mIzQzO1x0Y29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqaGRyO1xuJiM0MztcdHUzMiBzaXplMSwgc2l6ZTIsIHRvdGFsO1xuJiM0MztcdGNvbnN0IHU4ICpwYXlsb2FkO1xuJiM0MztcdHUzMiBjcmM7XG4mIzQzO1xuJiM0MztcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcbiYjNDM7XHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4mIzQzO1x0cGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgJiM0MzsgTVhMODYyWFhfRldfSERSX1NJWkU7XG4mIzQzO1x0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2Vfc2l6ZV8xKTtcbiYjNDM7XHRzaXplMiA9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9zaXplXzIpO1xuJiM0MztcbiYjNDM7XHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUxLCBzaXplMiwgXHUwMDI2dG90YWwpIHx8XG4mIzQzO1x0ICAgIHRvdGFsIFx1MDAzZSBmdy1cdTAwM2VzaXplIC0gTVhMODYyWFhfRldfSERSX1NJWkUpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgdG9vIHNtYWxsIGZvciBkZWNsYXJlZCBzaXplXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKCF0b3RhbCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXG5cJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAoc2l6ZTEpIHtcbiYjNDM7XHRcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcbiYjNDM7XHRcdGlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWltYWdlX2NoZWNrc3VtXzEpKSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogaW1hZ2UgMSBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8xKSk7XG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHNpemUyKSB7XG4mIzQzO1x0XHRjcmMgPSB+Y3JjMzJfbGUofjBVLCBwYXlsb2FkICYjNDM7IHNpemUxLCBzaXplMik7XG4mIzQzO1x0XHRpZiAoY3JjICE9IGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8yKSkge1xuJiM0MztcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFx0XCYjMzQ7Zmxhc2g6IGltYWdlIDIgQ1JDIG1pc21hdGNoIChnb3QgJTA4eCwgZXhwZWN0ZWQgJTA4eClcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0Y3JjLCBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMikpO1xuJiM0MztcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdCpwYXlsb2FkX3NpemUgPSB0b3RhbDtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsXG4mIzQzO1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbiYjNDM7XHRcdFx0XHQgICB1MzIgcGF5bG9hZF9zaXplLCBzdHJ1Y3QgZGV2bGluayAqZGwpXG4mIzQzO3tcbiYjNDM7XHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgJiM0MzsgTVhMODYyWFhfRldfSERSX1NJWkU7XG4mIzQzO1x0dTMyIHdvcmRfaWR4ID0gMCwgZGF0YV93cml0dGVuID0gMCwgaWR4ID0gMDtcbiYjNDM7XHR1bnNpZ25lZCBsb25nIG5leHRfbm90aWZ5ID0gamlmZmllcyAtIDE7XG4mIzQzO1x0dTE2IHdvcmQsIGZkYXRhO1xuJiM0MztcdGludCByZXQsIGk7XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMTogcmVib290IHRoZSBmaXJtd2FyZSBpbnRvIE1DVWJvb3QgcmVzY3VlIG1vZGUgKi9cbiYjNDM7XHRpZiAoIXByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X2FwaV93cmFwKHByaXYsIFNZU19NSVNDX0ZXX1VQREFURSwgTlVMTCwgMCxcbiYjNDM7XHRcdFx0XHRcdGZhbHNlLCBmYWxzZSk7XG4mIzQzO1x0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHRcJiMzNDtmbGFzaDogRldfVVBEQVRFIGNvbW1hbmQgZmFpbGVkOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0RVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMjogd2FpdCBmb3IgYm9vdGxvYWRlciByZWFkeSAqL1xuJiM0MztcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCYjMzQ7V2FpdGluZyBmb3IgYm9vdGxvYWRlclwmIzM0OywgMCwgMCk7XG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuJiM0MztcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRnb3RvIHdyaXRlX2VycjtcbiYjNDM7XG4mIzQzO1x0LyogRmFpbHVyZXMgZnJvbSBoZXJlIG9uIG11c3QgZ28gdGhyb3VnaCBlbmRfbWFnaWMgc28gTUNVYm9vdFxuJiM0MztcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXG4mIzQzO1x0ICovXG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksXG4mIzQzO1x0XHRcdFx0XHRNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTtcbiYjNDM7XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4mIzQzO1x0XHRcdFwmIzM0O2ZsYXNoOiBib290bG9hZGVyIG5vdCByZWFkeTogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgMzogc3RhcnQgaGFuZHNoYWtlICovXG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4mIzQzO1x0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX1NUQVJUKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVJUICYjNDM7IDEsXG4mIzQzO1x0XHRcdFx0XHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogc3RhcnQgaGFuZHNoYWtlIGZhaWxlZDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgNDogdHJhbnNmZXIgaW1hZ2UgaGVhZGVyICovXG4mIzQzO1x0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcJiMzNDtFcmFzaW5nIGZsYXNoXCYjMzQ7LCAwLCAwKTtcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSAvIDI7IGkmIzQzOyYjNDM7KSB7XG4mIzQzO1x0XHR3b3JkID0gZnctXHUwMDNlZGF0YVtpICogMl0gfFxuJiM0MztcdFx0ICAgICAgICgodTE2KWZ3LVx1MDAzZWRhdGFbaSAqIDIgJiM0MzsgMV0gXHUwMDNjXHUwMDNjIDgpO1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIHdvcmQpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcbiYjNDM7XHQvKiB0aGUgYnl0ZSBjb3VudCBpbiBTVEFUIHRyaWdnZXJzIHRoZSBlcmFzZSAqL1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuJiM0MztcdFx0XHRcdCAgIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1xuJiM0MztcdC8qIEFDSyBpcyBieXRlIGNvdW50ICYjNDM7IDEgKi9cbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX0ZXX0hEUl9TSVpFICYjNDM7IDEsXG4mIzQzO1x0XHRcdFx0XHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogaGVhZGVyIEFDSyBmYWlsZWQ6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBTdGVwIDU6IHdhaXQgZm9yIGVyYXNlIHRvIGNvbXBsZXRlICovXG4mIzQzO1x0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLFxuJiM0MztcdFx0XHRcdFx0TVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NUyk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcJiMzNDtmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXFxuXCYjMzQ7LCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFN0ZXAgNjogdHJhbnNmZXIgcGF5bG9hZCAqL1xuJiM0MztcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuJiM0MztcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbiYjNDM7XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1xuJiM0MztcdHdoaWxlIChpZHggXHUwMDNjIHBheWxvYWRfc2l6ZSkge1xuJiM0MztcdFx0aWYgKGlkeCAmIzQzOyAxIFx1MDAzYyBwYXlsb2FkX3NpemUpIHtcbiYjNDM7XHRcdFx0ZmRhdGEgPSBwYXlsb2FkW2lkeF0gfFxuJiM0MztcdFx0XHRcdCgodTE2KXBheWxvYWRbaWR4ICYjNDM7IDFdIFx1MDAzY1x1MDAzYyA4KTtcbiYjNDM7XHRcdFx0aWR4ICYjNDM7PSAyO1xuJiM0MztcdFx0XHRkYXRhX3dyaXR0ZW4gJiM0Mzs9IDI7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHRmZGF0YSA9IHBheWxvYWRbaWR4XTtcbiYjNDM7XHRcdFx0aWR4JiM0MzsmIzQzOztcbiYjNDM7XHRcdFx0ZGF0YV93cml0dGVuJiM0MzsmIzQzOztcbiYjNDM7XHRcdH1cbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgZmRhdGEpO1xuJiM0MztcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1x0XHR3b3JkX2lkeCYjNDM7JiM0Mzs7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGlkeCBcdTAwM2U9IHBheWxvYWRfc2l6ZSkge1xuJiM0MztcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbiYjNDM7XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHR9XG4mIzQzO1xuJiM0MztcdFx0LyogSGFsZi1iYW5rIGJvdW5kYXJ5OiBzd2l0Y2ggdG8gU0IxIGFkZHJlc3MgKi9cbiYjNDM7XHRcdGlmICh3b3JkX2lkeCA9PSBNWEw4NjJYWF9GV19CQU5LX0hBTEYpIHtcbiYjNDM7XHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4mIzQzO1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0Z290byB3cml0ZV9lcnI7XG4mIzQzO1xuJiM0MztcdFx0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcbiYjNDM7XHRcdFx0XHRcdFx0ICAgTVhMODYyWFhfRldfU0IxX0FERFIpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcbiYjNDM7XHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4mIzQzO1x0XHRcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbiYjNDM7XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjNDM7XHRcdFx0XHRnb3RvIHdyaXRlX2VycjtcbiYjNDM7XHRcdH0gZWxzZSBpZiAod29yZF9pZHggXHUwMDNlPSBNWEw4NjJYWF9GV19CQU5LX1NMSUNFKSB7XG4mIzQzO1x0XHRcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pO1xuJiM0MztcdFx0XHRpZiAocmV0KSB7XG4mIzQzO1x0XHRcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuJiM0MztcdFx0XHRcdFx0XCYjMzQ7Zmxhc2g6IHdyaXRlIHRpbWVvdXQgYXQgJXUvJXU6ICVwZVxcblwmIzM0OyxcbiYjNDM7XHRcdFx0XHRcdGlkeCwgcGF5bG9hZF9zaXplLCBFUlJfUFRSKHJldCkpO1xuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdFx0d29yZF9pZHggPSAwO1xuJiM0MztcdFx0XHRkYXRhX3dyaXR0ZW4gPSAwO1xuJiM0MztcdFx0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbiYjNDM7XHRcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuJiM0MztcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuJiM0MztcdFx0XHRcdGdvdG8gd3JpdGVfZXJyO1xuJiM0MztcbiYjNDM7XHRcdFx0aWYgKHRpbWVfYWZ0ZXIoamlmZmllcywgbmV4dF9ub3RpZnkpKSB7XG4mIzQzO1x0XHRcdFx0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcJiMzNDtGbGFzaGluZ1wmIzM0OywgaWR4LFxuJiM0MztcdFx0XHRcdFx0XHQgICAgICBwYXlsb2FkX3NpemUpO1xuJiM0MztcdFx0XHRcdG5leHRfbm90aWZ5ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKDUwMCk7XG4mIzQzO1x0XHRcdH1cbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGlmIChyZXQpIHtcbiYjNDM7XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IGZpbmFsIHdyaXRlIHRpbWVvdXQ6ICVwZVxcblwmIzM0OywgRVJSX1BUUihyZXQpKTtcbiYjNDM7XHRcdGdvdG8gZW5kX21hZ2ljO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcJiMzNDtGbGFzaGluZ1wmIzM0OywgcGF5bG9hZF9zaXplLCBwYXlsb2FkX3NpemUpO1xuJiM0MztcdGdvdG8gZW5kX21hZ2ljO1xuJiM0MztcbiYjNDM7d3JpdGVfZXJyOlxuJiM0MztcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldiwgXCYjMzQ7Zmxhc2g6IFNNRElPIHdyaXRlIGZhaWxlZDogJXBlXFxuXCYjMzQ7LFxuJiM0MztcdFx0RVJSX1BUUihyZXQpKTtcbiYjNDM7ZW5kX21hZ2ljOlxuJiM0MztcdC8qIHJlYm9vdCBNQ1Vib290IGV2ZW4gYWZ0ZXIgYSBmYWlsZWQgdHJhbnNmZXIgKi9cbiYjNDM7XHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbiYjNDM7XHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfRU5EKTtcbiYjNDM7XHRtc2xlZXAoTVhMODYyWFhfRldfUkVCT09UX0RFTEFZX01TKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxuJiM0MztcdFx0XHQgICAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0Y2hhciBidWZbMTZdO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIE5vIGNoaXAtaWQvcmV2aXNpb24gaW4gTUNVYm9vdCAobmVlZHMgdGhlIGZpcm13YXJlIE1NRCBtYWlsYm94KS4gVGhlXG4mIzQzO1x0ICogZncgdmVyc2lvbiBkb3VibGVzIGFzIHRoZSBcJiMzNDtyZWFkeSB0byBmbGFzaFwmIzM0OyBzaWduYWw6IHJlcG9ydCBpdCBvbmx5XG4mIzQzO1x0ICogb25jZSB0aGUgbG9hZGVyIGlzIGF0IGEgY2xlYW4gUkVBRFksIG5vdGhpbmcgd2hpbGUgc3RpbGwgZHJhaW5pbmcuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbiYjNDM7XHRcdGlmICghUkVBRF9PTkNFKHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5KSlcbiYjNDM7XHRcdFx0cmV0dXJuIDA7XG4mIzQzO1xuJiM0MztcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7JXUuJXUuJXVcJiMzNDssXG4mIzQzO1x0XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vcixcbiYjNDM7XHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XG4mIzQzO1x0XHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFwmIzM0O2Z3XCYjMzQ7LCBidWYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRcdHJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0KHJlcSwgXCYjMzQ7ZndcJiMzNDssIGJ1Zik7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcJiMzNDslMDRYXCYjMzQ7LCBwcml2LVx1MDAzZWFzaWNfaWQpO1xuJiM0MztcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcbiYjNDM7XHRcdFx0XHRcdCAgICAgYnVmKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCYjMzQ7JXVcJiMzNDssIHByaXYtXHUwMDNlYXNpY19yZXYpO1xuJiM0MztcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsXG4mIzQzO1x0XHRcdFx0XHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19SRVYsXG4mIzQzO1x0XHRcdFx0XHQgICAgIGJ1Zik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwmIzM0OyV1LiV1LiV1XCYjMzQ7LFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuJiM0MztcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XG4mIzQzO1xuJiM0MztcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgXCYjMzQ7ZndcJiMzNDssIGJ1Zik7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1xuJiM0MztcdC8qIGJvb3RzIHRoaXMgaW1hZ2UgZnJvbSBpdHMgb3duIGZsYXNoOiBzdG9yZWQgPT0gcnVubmluZyAqL1xuJiM0MztcdHJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0KHJlcSwgXCYjMzQ7ZndcJiMzNDssIGJ1Zik7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfd29yayAqcnc7XG4mIzQzO1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbiYjNDM7XHR1MzIgcGF5bG9hZF9zaXplO1xuJiM0MztcdGludCByZXQsIGk7XG4mIzQzO1xuJiM0MztcdGlmIChwYXJhbXMtXHUwMDNlY29tcG9uZW50KSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcJiMzNDtjb21wb25lbnQgaXMgbm90IHN1cHBvcnRlZFwmIzM0Oyk7XG4mIzQzO1x0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShwcml2LCBwYXJhbXMtXHUwMDNlZncsIFx1MDAyNnBheWxvYWRfc2l6ZSk7XG4mIzQzO1x0aWYgKHJldCkge1xuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7ZmlybXdhcmUgaW1hZ2UgdmFsaWRhdGlvbiBmYWlsZWRcJiMzNDspO1xuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdC8qIFJlZnVzZSB0byBmbGFzaCB3aGlsZSB0aGUgYmFja2dyb3VuZCBzZWxmLWhlYWwgaXMgc3RpbGwgZHJhaW5pbmcuICovXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUgXHUwMDI2XHUwMDI2ICFSRUFEX09OQ0UocHJpdi1cdTAwM2VyZXNjdWVfcmVhZHkpKSB7XG4mIzQzO1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuJiM0MztcdFx0XHRcdCAgIFwmIzM0O3N3aXRjaCBpcyByZWNvdmVyaW5nIGFuIGludGVycnVwdGVkIGRvd25sb2FkLCByZXRyeSBzaG9ydGx5XCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiAtRUJVU1k7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHQvKiBUaGUgcmVmZXJlbmNlcyB0aGUgcmVwcm9iZSB3b3JrIG5lZWRzIHRvIHJlc3RvcmUgbm9ybWFsIG9wZXJhdGlvblxuJiM0MztcdCAqIG11c3QgYmUgaGVsZCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQ7IHRoZSB3b3JrIGl0c2VsZiBpc1xuJiM0MztcdCAqIHNjaGVkdWxlZCBvbmx5IG9uY2UgdGhlIGZsYXNoIGlzIGRvbmUgKHNlZSBiZWxvdykuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXG4mIzQzO1x0XHRyZXR1cm4gLUVOT0RFVjtcbiYjNDM7XG4mIzQzO1x0Z2V0X2RldmljZShkcy1cdTAwM2VkZXYpO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdGRldl9pbmZvKGRzLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0IFwmIzM0O2ZsYXNoOiBmbGFzaGluZyBzd2l0Y2ggdmlhIE1DVWJvb3QgcmVzY3VlIG1vZGVcXG5cJiMzNDspO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRldl9pbmZvKGRzLVx1MDAzZWRldiwgXCYjMzQ7Zmxhc2g6IHJ1bm5pbmcgZmlybXdhcmUgJXUuJXUuJXVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vcixcbiYjNDM7XHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XG4mIzQzO1xuJiM0MztcdC8qIENsb3NlIHBvcnRzIHdoaWxlIHRoZSBmaXJtd2FyZSBpcyBzdGlsbCBhbGl2ZSBzbyB0aGUgRFNBXG4mIzQzO1x0ICogY29yZSYjMzk7cyBNREIvRkRCIHRyYWNraW5nIGlzIGRyYWluZWQsIGFuZCBkZXRhY2ggdXNlciBwb3J0c1xuJiM0MztcdCAqIHNvIHVzZXJzcGFjZSBjYW5ub3QgcmVvcGVuIHRoZW0gZHVyaW5nIHRoZSBmbGFzaC4gVGhlXG4mIzQzO1x0ICogY29uZHVpdCBiZWxvbmdzIHRvIHRoZSBNQUMgZHJpdmVyIGFuZCBpcyBvbmx5IGNsb3NlZC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRydG5sX2xvY2soKTtcbiYjNDM7XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcbiYjNDM7XHRcdGlmIChkcC1cdTAwM2V1c2VyKSB7XG4mIzQzO1x0XHRcdGRldl9jbG9zZShkcC1cdTAwM2V1c2VyKTtcbiYjNDM7XHRcdFx0bmV0aWZfZGV2aWNlX2RldGFjaChkcC1cdTAwM2V1c2VyKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHR9XG4mIzQzO1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChkcCwgZHMpXG4mIzQzO1x0XHRkZXZfY2xvc2UoZHAtXHUwMDNlY29uZHVpdCk7XG4mIzQzO1x0LyogVGhlIGJyaWRnZSBkZWZlcnMgdGhlIFNUUCBzdGF0ZSBjaGFuZ2VzIHRyaWdnZXJlZCBieSBjbG9zaW5nXG4mIzQzO1x0ICogdGhlIHBvcnRzOyBsZXQgdGhlbSByZWFjaCB0aGUgZmlybXdhcmUgd2hpbGUgaXQgaXMgc3RpbGwgYWxpdmUuXG4mIzQzO1x0ICovXG4mIzQzO1x0c3dpdGNoZGV2X2RlZmVycmVkX3Byb2Nlc3MoKTtcbiYjNDM7XHRydG5sX3VubG9jaygpO1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrX25lc3RlZChcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzLVx1MDAzZW1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpO1xuJiM0MztcdHByaXYtXHUwMDNlYmxvY2tfaG9zdCA9IHRydWU7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XG4mIzQzO1x0c2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXHUwMDI2cHJpdi1cdTAwM2VmbGFncyk7XG4mIzQzO1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlc3RhdHNfd29yayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZWNyY19lcnJfd29yayk7XG4mIzQzO1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgZHMtXHUwMDNlbnVtX3BvcnRzOyBpJiM0MzsmIzQzOylcbiYjNDM7XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXS5ob3N0X2Zsb29kX3dvcmspO1xuJiM0MztcbiYjNDM7XHRyZXQgPSBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShwcml2LCBwYXJhbXMtXHUwMDNlZncsIHBheWxvYWRfc2l6ZSxcbiYjNDM7XHRcdFx0XHQgICAgICBkcy1cdTAwM2VkZXZsaW5rKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCYjMzQ7ZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkXCYjMzQ7KTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFyZXQpIHtcbiYjNDM7XHRcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLFxuJiM0MztcdFx0XHRcdCAgTURJT19NVVRFWF9ORVNURUQpO1xuJiM0MztcdFx0cHJpdi1cdTAwM2VyZXNjdWVfbW9kZSA9IGZhbHNlO1xuJiM0MztcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRcdC8qIFRoZSByZXByb2JlIGJlbG93IHJlLXJlYWRzIGFuZCBsb2dzIHRoZSBuZXcgdmVyc2lvbi4gKi9cbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4mIzQzO1x0cHJpdi1cdTAwM2Vza2lwX3RlYXJkb3duID0gdHJ1ZTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcbiYjNDM7XHQvKiBIYW5kIHRoZSByZXByb2JlIHRvIGEgc2VsZi1jb250YWluZWQgd29yaywgc2NoZWR1bGVkIGxhc3QuIERvaW5nIGl0XG4mIzQzO1x0ICogZnJvbSBhIHdvcmsgKHJhdGhlciB0aGFuIGEga3RocmVhZCBzcGF3bmVkIGhlcmUpIGF2b2lkcyBib3RoIHRoZVxuJiM0MztcdCAqIGh1bmctdGFzayBzcGxhdCBvZiBhIHRocmVhZCBwYXJrZWQgYWNyb3NzIHRoZSBmbGFzaCBhbmQgdGhlIC1FSU5UUlxuJiM0MztcdCAqIHRoYXQga3RocmVhZF9jcmVhdGUoKSByZXR1cm5zIGlmIHRoZSBkZXZsaW5rIGNvbW1hbmQgd2FzIEN0cmwtQyYjMzk7ZC5cbiYjNDM7XHQgKiBJdHMgbW9kdWxlIGFuZCBkZXZpY2UgcmVmZXJlbmNlcyBhcmUgYWxyZWFkeSBoZWxkIGFib3ZlLlxuJiM0MztcdCAqL1xuJiM0MztcdHJ3ID0ga3phbGxvY19vYmooKnJ3KTtcbiYjNDM7XHRpZiAoIXJ3KSB7XG4mIzQzO1x0XHRkZXZfZXJyKGRzLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XCYjMzQ7Zmxhc2g6IG91dCBvZiBtZW1vcnkgZm9yIHJlcHJvYmU7IHJlbG9hZCB0aGUgZHJpdmVyIHRvIHJlc3RvcmUgb3BlcmF0aW9uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHB1dF9kZXZpY2UoZHMtXHUwMDNlZGV2KTtcbiYjNDM7XHRcdG1vZHVsZV9wdXQoVEhJU19NT0RVTEUpO1xuJiM0MztcdFx0cmV0dXJuIHJldCA/IHJldCA6IC1FTk9NRU07XG4mIzQzO1x0fVxuJiM0MztcdElOSVRfV09SSyhcdTAwMjZydy1cdTAwM2V3b3JrLCBteGw4NjJ4eF9yZXByb2JlX3dvcmtfZm4pO1xuJiM0MztcdHJ3LVx1MDAzZWRldiA9IGRzLVx1MDAzZWRldjtcbiYjNDM7XHRzY2hlZHVsZV93b3JrKFx1MDAyNnJ3LVx1MDAzZXdvcmspO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmV0O1xuJiM0Mzt9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43Y2Q4N2M3YWQ4NzE2N1xuLS0tIC9kZXYvbnVsbFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcbkBAIC0wLDAgJiM0MzsxLDIwIEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovXG4mIzQzO1xuJiM0MzsjaWZuZGVmIF9fTVhMODYyWFhfRldfSFxuJiM0MzsjZGVmaW5lIF9fTVhMODYyWFhfRldfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcbiYjNDM7c3RydWN0IHdvcmtfc3RydWN0O1xuJiM0MztcbiYjNDM7aW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XG4mIzQzO3ZvaWQgbXhsODYyeHhfcmVzY3VlX2hlYWxfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xuJiM0MztpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4mIzQzO1x0XHRcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4mIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4mIzQzO1x0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spO1xuJiM0MztcbiYjNDM7I2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uMmRiZDA3NGMwZmUyNmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5AQCAtMTUsNiAmIzQzOzE1LDggQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC91bmFsaWduZWQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtY21kLmhcJiMzNDtcbiYjNDM7I2luY2x1ZGUgXCYjMzQ7bXhsODYyeHgtZncuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWhvc3QuaFwmIzM0O1xuIFxuICNkZWZpbmUgQ1RSTF9CVVNZX01BU0tcdFx0XHRCSVQoMTUpXG5AQCAtMzQwLDYgJiM0MzszNDIsMjEgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpfZGF0YSxcbiBcbiBcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4gXG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlc2tpcF90ZWFyZG93bikge1xuJiM0MztcdFx0cmV0ID0gcmVhZCA/IC1FTk9ERVYgOiAwO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuJiM0MztcdFx0cmV0ID0gLUVOT0RFVjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0aWYgKHByaXYtXHUwMDNlYmxvY2tfaG9zdCBcdTAwMjZcdTAwMjYgY21kICE9IFNZU19NSVNDX0ZXX1VQREFURSkge1xuJiM0MztcdFx0cmV0ID0gLUVCVVNZO1xuJiM0MztcdFx0Z290byBvdXQ7XG4mIzQzO1x0fVxuJiM0MztcbiBcdG1heCA9IChzaXplICYjNDM7IDEpIC8gMjtcbiBcbiBcdHJldCA9IG14bDg2Mnh4X2J1c3lfd2FpdChwcml2KTtcbkBAIC00OTUsMTIgJiM0Mzs1MTIsNDkgQEAgaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU01ESU9fQUREUl9SRUdcdFx0MHgxZlxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTS1x0MHhmZmYwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfU01ESU9fT0ZGX01BU0tcdFx0MHgwMDBmXG4mIzQzO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cztcbiYjNDM7XHRpbnQgcGh5ID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWFkZHI7XG4mIzQzO1x0aW50IHJldDtcbiYjNDM7XG4mIzQzO1x0bXV0ZXhfbG9jayhcdTAwMjZidXMtXHUwMDNlbWRpb19sb2NrKTtcbiYjNDM7XHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLFxuJiM0MztcdFx0XHQgICAgICBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xuJiM0MztcdGlmIChyZXQgXHUwMDNlPSAwKVxuJiM0MztcdFx0cmV0ID0gX19tZGlvYnVzX3JlYWQoYnVzLCBwaHksIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX09GRl9NQVNLKTtcbiYjNDM7XHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4mIzQzO1x0cmV0dXJuIHJldDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7aW50IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkciwgdTE2IHZhbClcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuJiM0MztcdGludCBwaHkgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcjtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgTVhMODYyWFhfU01ESU9fQUREUl9SRUcsXG4mIzQzO1x0XHRcdCAgICAgIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7XG4mIzQzO1x0aWYgKHJldCBcdTAwM2U9IDApXG4mIzQzO1x0XHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX09GRl9NQVNLLFxuJiM0MztcdFx0XHRcdCAgICAgIHZhbCk7XG4mIzQzO1x0bXV0ZXhfdW5sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuJiM0MztcdHJldHVybiByZXQ7XG4mIzQzO31cbiYjNDM7XG4gdm9pZCBteGw4NjJ4eF9ob3N0X2luaXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4ge1xuIFx0SU5JVF9XT1JLKFx1MDAyNnByaXYtXHUwMDNlY3JjX2Vycl93b3JrLCBteGw4NjJ4eF9jcmNfZXJyX3dvcmtfZm4pO1xuJiM0MztcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmssIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4pO1xuIH1cbiBcbiB2b2lkIG14bDg2Mnh4X2hvc3Rfc2h1dGRvd24oc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4ge1xuIFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZWNyY19lcnJfd29yayk7XG4mIzQzO1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuaW5kZXggNjZkNmFlMTk4YWZmNDUuLjRlMDU0YzZlNGMwZTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuQEAgLTE4LDUgJiM0MzsxOCw3IEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqZGF0YSwgdTE2IHNpemUsXG4gXHRteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgXHUwMDI2KGRhdGEpLCBzaXplb2YoKGRhdGEpKSwgdHJ1ZSwgdHJ1ZSlcbiBcbiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpO1xuJiM0MztpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKTtcbiBcbiAjZW5kaWYgLyogX19NWEw4NjJYWF9IT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuQEAgLTQwNiw2ICYjNDM7NDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcbiBcbiBcdHN3aXRjaCAocG9ydCkge1xuIFx0Y2FzZSA5IC4uLiAxNjpcbiYjNDM7XHRcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0aWYgKCFNWEw4NjJYWF9GV19WRVJfTUlOKHByaXYsIDEsIDAsIDg0KSkge1xuIFx0XHRcdGRldl93YXJuX29uY2UoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LFxuIFx0XHRcdFx0ICAgICAgXCYjMzQ7U2VyRGVzIFBDUyB1bnN1cHBvcnRlZCBvbiBvbGQgZmlybXdhcmUuXFxuXCYjMzQ7KTtcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXG5pbmRleCA0NWQyMzdiM2E0MGYxMC4uOWFjNjY4YzEzYzllNzAgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xuJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcbkBAIC0yMSw2ICYjNDM7MjEsNyBAQFxuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1hcGkuaFwmIzM0O1xuICNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWNtZC5oXCYjMzQ7XG4mIzQzOyNpbmNsdWRlIFwmIzM0O214bDg2Mnh4LWZ3LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1ob3N0LmhcJiMzNDtcbiAjaW5jbHVkZSBcJiMzNDtteGw4NjJ4eC1waHlsaW5rLmhcJiMzNDtcbiBcbkBAIC03MSw2ICYjNDM7NzIsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBteGw4NjJ4eF9ybW9uX3Jhbmdlc1tdID0ge1xuICNkZWZpbmUgTVhMODYyWFhfUkVBRFlfVElNRU9VVF9NU1x0MTAwMDBcbiAjZGVmaW5lIE1YTDg2MlhYX1JFQURZX1BPTExfTVNcdFx0MTAwXG4gXG4mIzQzOy8qIENoaXAgSUQgcmVnaXN0ZXJzLCByZWFkIHZpYSBTWVNfTUlTQ19SRUdfUkQgKi9cbiYjNDM7I2RlZmluZSBNWEw4NjJYWF9DSElQSURfTFx0XHQweGMwZDI4ODg0XG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01cdFx0MHhjMGQyODg4OFxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9MX1BOVU1MXHRcdEdFTk1BU0soMTUsIDEyKVxuJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NXHRcdEdFTk1BU0soMTEsIDApXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTlx0R0VOTUFTSygxNCwgMTIpXG4mIzQzO1xuICNkZWZpbmUgTVhMODYyWFhfVENNX0lOU1RfU0VMXHRcdDB4ZTAwXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fQ0JTXHRcdDB4ZTEyXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fRUJTXHRcdDB4ZTEzXG5AQCAtMjIyLDYgJiM0MzsyMzAsMzUgQEAgc3RhdGljIGludCBteGw4NjJ4eF9waHlfd3JpdGVfYzQ1X21paV9idXMoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXG4gXHRyZXR1cm4gbXhsODYyeHhfcGh5X3dyaXRlX21tZChidXMtXHUwMDNlcHJpdiwgYWRkciwgZGV2YWRkLCByZWdudW0sIHZhbCk7XG4gfVxuIFxuJiM0MzsvKiBSZWFkIHRoZSBzdGF0aWMgY2hpcCBwYXJ0IG51bWJlciBhbmQgdmVyc2lvbiBmcm9tIHRoZSBDSElQIElEXG4mIzQzOyAqIHJlZ2lzdGVycy4gT25seSBwb3NzaWJsZSB3aXRoIGEgcnVubmluZyBmaXJtd2FyZSwgc28gdGhlIHZhbHVlcyBhcmVcbiYjNDM7ICogY2FjaGVkIGF0IHNldHVwIGFuZCBsZWZ0IHplcm8gd2hlbiB0aGUgc3dpdGNoIGlzIGluIHJlc2N1ZSBtb2RlLlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9yZWFkX2NoaXBfaWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfc3lzX3JlZ19ydyByZWcgPSB7fTtcbiYjNDM7XHR1MTYgY2hpcGlkX2wsIGNoaXBpZF9tO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJlZy5hZGRyID0gY3B1X3RvX2xlMzIoTVhMODYyWFhfQ0hJUElEX0wpO1xuJiM0MztcdHJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIFNZU19NSVNDX1JFR19SRCwgcmVnKTtcbiYjNDM7XHRpZiAocmV0KVxuJiM0MztcdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRjaGlwaWRfbCA9IGxlMzJfdG9fY3B1KHJlZy52YWwpO1xuJiM0MztcbiYjNDM7XHRyZWcuYWRkciA9IGNwdV90b19sZTMyKE1YTDg2MlhYX0NISVBJRF9NKTtcbiYjNDM7XHRyZXQgPSBNWEw4NjJYWF9BUElfUkVBRChwcml2LCBTWVNfTUlTQ19SRUdfUkQsIHJlZyk7XG4mIzQzO1x0aWYgKHJldClcbiYjNDM7XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0Y2hpcGlkX20gPSBsZTMyX3RvX2NwdShyZWcudmFsKTtcbiYjNDM7XG4mIzQzO1x0cHJpdi1cdTAwM2Vhc2ljX2lkID0gRklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9MX1BOVU1MLCBjaGlwaWRfbCkgfFxuJiM0MztcdFx0XHRGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX01fUE5VTU0sIGNoaXBpZF9tKSBcdTAwM2NcdTAwM2MgNDtcbiYjNDM7XHRwcml2LVx1MDAzZWFzaWNfcmV2ID0gRklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9NX1ZFUlNJT04sIGNoaXBpZF9tKTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24gdmVyID0ge307XG5AQCAtMjU0LDYgJiM0MzsyOTEsMTEgQEAgc3RhdGljIGludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBcdFx0cHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1ham9yID0gdmVyLml2X21ham9yO1xuIFx0XHRwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWlub3IgPSB2ZXIuaXZfbWlub3I7XG4gXHRcdHByaXYtXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbiA9IGxlMTZfdG9fY3B1KHZlci5pdl9yZXZpc2lvbik7XG4mIzQzO1xuJiM0MztcdFx0cmV0ID0gbXhsODYyeHhfcmVhZF9jaGlwX2lkKHByaXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0ZGV2X3dhcm4oZHMtXHUwMDNlZGV2LCBcJiMzNDtmYWlsZWQgdG8gcmVhZCBjaGlwIElEOiAlcGVcXG5cJiMzNDssXG4mIzQzO1x0XHRcdFx0IEVSUl9QVFIocmV0KSk7XG4gXHRcdHJldHVybiAwO1xuIFxuIG5vdF9yZWFkeV95ZXQ6XG5AQCAtNjIyLDE1ICYjNDM7NjY0LDQ5IEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aW50IG5fdXNlcl9wb3J0cyA9IDAsIG1heF92bGFucztcbiBcdGludCBpbmdyZXNzX2ZpbmFscywgdmlkX3J1bGVzO1xuIFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbi1cdGludCByZXQsIGk7XG4mIzQzO1x0aW50IHJldCwgaSwgcmVzY3VlO1xuIFxuLVx0cmV0ID0gbXhsODYyeHhfcmVzZXQocHJpdik7XG4tXHRpZiAocmV0KVxuLVx0XHRyZXR1cm4gcmV0O1xuJiM0MztcdC8qIERldGVjdCB0aGUgbG9hZGVyIG92ZXIgU0IgUERJIGZpcnN0OiBpdCBuZWVkcyBubyBmaXJtd2FyZSwgdW5saWtlIHRoZVxuJiM0MztcdCAqIEM0NSBBUEkgKG14bDg2Mnh4X3Jlc2V0L3dhaXRfcmVhZHkpIHdoaWNoIHNwZXdzIENSQyBlcnJvcnMgd2hlbiBub25lXG4mIzQzO1x0ICogYW5zd2Vycy4gVG91Y2ggQzQ1IG9ubHkgb25jZSByZXNjdWUgaXMgcnVsZWQgb3V0LlxuJiM0MztcdCAqL1xuJiM0MztcdHJlc2N1ZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcbiYjNDM7XHRpZiAocmVzY3VlIFx1MDAzYyAwKVxuJiM0MztcdFx0cmV0dXJuIHJlc2N1ZTtcbiBcbi1cdHJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpO1xuLVx0aWYgKHJldClcbi1cdFx0cmV0dXJuIHJldDtcbiYjNDM7XHRpZiAocmVzY3VlID09IE1YTDg2MlhYX05PVF9SRVNDVUUpIHtcbiYjNDM7XHRcdHJldCA9IG14bDg2Mnh4X3Jlc2V0KHByaXYpO1xuJiM0MztcdFx0aWYgKHJldClcbiYjNDM7XHRcdFx0cmV0dXJuIHJldDtcbiYjNDM7XG4mIzQzO1x0XHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbiYjNDM7XHRcdGlmIChyZXQpIHtcbiYjNDM7XHRcdFx0LyogdGhlIHJlc2V0IG1heSBvbmx5IG5vdyBoYXZlIHRyaWdnZXJlZCByZXNjdWUgbW9kZSAqL1xuJiM0MztcdFx0XHRyZXNjdWUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XG4mIzQzO1x0XHRcdGlmIChyZXNjdWUgXHUwMDNjIDApXG4mIzQzO1x0XHRcdFx0cmV0dXJuIHJlc2N1ZTtcbiYjNDM7XHRcdFx0aWYgKHJlc2N1ZSA9PSBNWEw4NjJYWF9OT1RfUkVTQ1VFKVxuJiM0MztcdFx0XHRcdHJldHVybiByZXQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRwcml2LVx1MDAzZXJlc2N1ZV9tb2RlID0gcmVzY3VlO1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuJiM0MztcdFx0aWYgKHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5KSB7XG4mIzQzO1x0XHRcdGRldl93YXJuKGRzLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7c3dpdGNoIGluIE1DVWJvb3QgcmVzY3VlIG1vZGUsIHVzZSBkZXZsaW5rIHRvIGZsYXNoIG5ldyBmaXJtd2FyZVxcblwmIzM0Oyk7XG4mIzQzO1x0XHR9IGVsc2Uge1xuJiM0MztcdFx0XHQvKiBEcmFpbiB0aGUgd2VkZ2VkIGRvd25sb2FkIGluIHRoZSBiYWNrZ3JvdW5kIHNvIGl0XG4mIzQzO1x0XHRcdCAqIG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2s7IGluZm8gYW5kIGZsYXNoIGJlY29tZVxuJiM0MztcdFx0XHQgKiBhdmFpbGFibGUgb25jZSByZWFkeS5cbiYjNDM7XHRcdFx0ICovXG4mIzQzO1x0XHRcdGRldl93YXJuKGRzLVx1MDAzZWRldixcbiYjNDM7XHRcdFx0XHQgXCYjMzQ7c3dpdGNoIGluIE1DVWJvb3Qgd2l0aCBhbiBpbnRlcnJ1cHRlZCBkb3dubG9hZCwgcmVjb3ZlcmluZyBpbiBiYWNrZ3JvdW5kXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXHUwMDI2cHJpdi1cdTAwM2VyZXNjdWVfaGVhbF93b3JrKTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiBcbiBcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzZXJkZXNfbG9jayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlc2VyZGVzX3BvcnRzKTsgaSYjNDM7JiM0MzspXG5AQCAtNzE1LDExICYjNDM7NzkxLDIxIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zdGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBib29sIGVuYWJsZSlcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbiYjNDM7XHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4mIzQzO1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1xuIFx0cmV0dXJuIG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIHRydWUpO1xuIH1cbiBcbiBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X2Rpc2FibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiB7XG4mIzQzO1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuJiM0MztcbiYjNDM7XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4gXHRpZiAobXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgZmFsc2UpKVxuIFx0XHRkZXZfZXJyKGRzLVx1MDAzZWRldiwgXCYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcG9ydCAlZFxcblwmIzM0OywgcG9ydCk7XG4gfVxuQEAgLTEzMzcsNiAmIzQzOzE0MjMsMTIgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4gXHRib29sIGlzX2NwdV9wb3J0ID0gZHNhX3BvcnRfaXNfY3B1KGRwKTtcbiBcdGludCByZXQ7XG4gXG4mIzQzO1x0LyogRFNBIHJlaW5pdHMgZmFpbGVkIHVzZXIgcG9ydHMgYXMgdW51c2VkOyBzaGFyZWQgcG9ydHMgbXVzdFxuJiM0MztcdCAqIHN1Y2NlZWQgZm9yIHRoZSB0cmVlIHRvIHJlZ2lzdGVyLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0cmV0dXJuIGRzYV9wb3J0X2lzX3VzZXIoZHApID8gLUVOT0RFViA6IDA7XG4mIzQzO1xuIFx0cmV0ID0gbXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgZmFsc2UpO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbkBAIC0xNTcyLDYgJiM0MzsxNjY0LDExIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9tZGJfZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRldGhlcl9hZGRyX2NvcHkocXBhcmFtLm1hYywgbWRiLVx1MDAzZWFkZHIpO1xuIFxuIFx0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgTVhMODYyWFhfTUFDX1RBQkxFRU5UUllRVUVSWSwgcXBhcmFtKTtcbiYjNDM7XHQvKiAtRU5PREVWOiB0aGUgZmlybXdhcmUgYW5kIGl0cyBNQUMgdGFibGUgYXJlIGdvbmUsIG5vdGhpbmcgbGVmdFxuJiM0MztcdCAqIHRvIGRlbGV0ZVxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChyZXQgPT0gLUVOT0RFVilcbiYjNDM7XHRcdHJldHVybiAwO1xuIFx0aWYgKHJldClcbiBcdFx0cmV0dXJuIHJldDtcbiBcbkBAIC0xNjI4LDYgJiM0MzsxNzI1LDkgQEAgc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9zdHBfc3RhdGVfc2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVx1MDAzZXByaXY7XG4gXHRpbnQgcmV0O1xuIFxuJiM0MztcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiBcdHN3aXRjaCAoc3RhdGUpIHtcbiBcdGNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6XG4gXHRcdHBhcmFtLnBvcnRfc3RhdGUgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9TVFBfUE9SVF9TVEFURV9ESVNBQkxFKTtcbkBAIC0yMDg2LDYgJiM0MzsyMTg2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBteGw4NjJ4eF9zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF9wYXVzZV9zdGF0cyA9IG14bDg2Mnh4X2dldF9wYXVzZV9zdGF0cyxcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IG14bDg2Mnh4X2dldF9ybW9uX3N0YXRzLFxuIFx0LmdldF9zdGF0czY0ID0gbXhsODYyeHhfZ2V0X3N0YXRzNjQsXG4mIzQzO1x0LmRldmxpbmtfaW5mb19nZXQgPSBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0LFxuJiM0MztcdC5kZXZsaW5rX2ZsYXNoX3VwZGF0ZSA9IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlLFxuIH07XG4gXG4gc3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxuaW5kZXggNDMyYTVmM2YyZTA4ZTYuLjcyZGMzMWNjMmI2MmZhIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcbiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXG5AQCAtMTQsNiAmIzQzOzE0LDEwIEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2O1xuICNkZWZpbmUgTVhMODYyWFhfRklSU1RfU0VSREVTX1BPUlRcdDlcbiAjZGVmaW5lIE1YTDg2MlhYX1NFUkRFU19TTE9UU1x0XHQ0XG4gXG4mIzQzOy8qIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpIHJldHVybiBjb2RlcyAobmVnYXRpdmUgdmFsdWVzIGFyZSBlcnJvcnMpICovXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfTk9UX1JFU0NVRVx0XHQwXG4mIzQzOyNkZWZpbmUgTVhMODYyWFhfSU5fUkVTQ1VFXHRcdDFcbiYjNDM7XG4gI2RlZmluZSBNWEw4NjJYWF9ERUZBVUxUX0JSSURHRVx0XHQwXG4gI2RlZmluZSBNWEw4NjJYWF9NQVhfQlJJREdFU1x0XHQ0OFxuICNkZWZpbmUgTVhMODYyWFhfTUFYX0JSSURHRV9QT1JUU1x0MTI4XG5AQCAtMzAzLDYgJiM0MzszMDcsMTAgQEAgc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24ge1xuICAqICAgICAgICAgICAgICAgICAgICAgIGZsb29kaW5nKVxuICAqIEBmd192ZXJzaW9uOiAgICAgICAgIGNhY2hlZCBmaXJtd2FyZSB2ZXJzaW9uLCBwb3B1bGF0ZWQgYXQgcHJvYmUgYW5kXG4gICogICAgICAgICAgICAgICAgICAgICAgY29tcGFyZWQgd2l0aCBNWEw4NjJYWF9GV19WRVJfTUlOKClcbiYjNDM7ICogQGFzaWNfaWQ6ICAgICAgICAgICAgY2hpcCBwYXJ0IG51bWJlciByZWFkIGZyb20gdGhlIENISVAgSUQgcmVnaXN0ZXJzLFxuJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyB0aGUgZGV2bGluayBcJiMzNDthc2ljLmlkXCYjMzQ7IGZpeGVkIHZlcnNpb25cbiYjNDM7ICogQGFzaWNfcmV2OiAgICAgICAgICAgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMsXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGFzIHRoZSBkZXZsaW5rIFwmIzM0O2FzaWMucmV2XCYjMzQ7IGZpeGVkIHZlcnNpb25cbiAgKiBAc2VyZGVzX3BvcnRzOiAgICAgICBTZXJEZXMgaW50ZXJmYWNlcyBpbmNsLiBzdWItaW50ZXJmYWNlcyBpbiBjYXNlIG9mXG4gICogICAgICAgICAgICAgICAgICAgICAgMTBHX1FYR01JSSBvciBRU0dNSUlcbiAgKiBAc2VyZGVzX3JlZmNvdW50OiAgICBwZXItWFBDUyBjb3VudCBvZiBzdWItcG9ydHMgZW5hYmxlZCBieSBwaHlsaW5rO1xuQEAgLTMxOSw2ICYjNDM7MzI3LDE1IEBAIHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIHtcbiAgKiBAZXZsYW5faW5ncmVzc19zaXplOiBwZXItcG9ydCBpbmdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxuICAqIEBldmxhbl9lZ3Jlc3Nfc2l6ZTogIHBlci1wb3J0IGVncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemVcbiAgKiBAdmZfYmxvY2tfc2l6ZTogICAgICBwZXItcG9ydCBWTEFOIEZpbHRlciBibG9jayBzaXplXG4mIzQzOyAqIEBibG9ja19ob3N0OiAgICAgICAgIHJlamVjdCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgKGV4Y2VwdCBGV19VUERBVEUpXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGR1cmluZyBhIGZpcm13YXJlIGZsYXNoXG4mIzQzOyAqIEBza2lwX3RlYXJkb3duOiAgICAgIGRpc2NhcmQgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGR1cmluZyB0aGUgdGVhcmRvd25cbiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIGJ5IHRoZSBwb3N0LWZsYXNoIHJlcHJvYmVcbiYjNDM7ICogQHJlc2N1ZV9tb2RlOiAgICAgICAgc3dpdGNoIGlzIGluIE1DVWJvb3Q7IGZpcm13YXJlIEFQSSBjb21tYW5kcyBmYWlsIGZhc3QsXG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIG9ubHkgY2xhdXNlLTIyIFNNRElPIHdvcmtzXG4mIzQzOyAqIEByZXNjdWVfcmVhZHk6ICAgICAgIChyZXNjdWVfbW9kZSkgbG9hZGVyIGlzIGF0IGEgY2xlYW4gUkVBRFkgYW5kIHdpbGwgYWNjZXB0XG4mIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIGEgZmxhc2g7IGZhbHNlIHdoaWxlIHJlc2N1ZV9oZWFsX3dvcmsgaXMgZHJhaW5pbmdcbiYjNDM7ICogQHJlc2N1ZV9oZWFsX3dvcms6ICAgYmFja2dyb3VuZCBzZWxmLWhlYWwgZHJhaW5pbmcgYSB3ZWRnZWQgZG93bmxvYWQgdG8gUkVBRFlcbiAgKiBAc3RhdHNfd29yazogICAgICAgICBwZXJpb2RpYyB3b3JrIGl0ZW0gdGhhdCBwb2xscyBSTU9OIGhhcmR3YXJlIGNvdW50ZXJzXG4gICogICAgICAgICAgICAgICAgICAgICAgYW5kIGFjY3VtdWxhdGVzIHRoZW0gaW50byA2NC1iaXQgcGVyLXBvcnQgc3RhdHNcbiAgKi9cbkBAIC0zMjYsOSAmIzQzOzM0MywxMiBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7XG4gXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4gXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3JjX2Vycl93b3JrO1xuJiM0MztcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNjdWVfaGVhbF93b3JrO1xuIFx0dW5zaWduZWQgbG9uZyBmbGFncztcbiBcdHUxNiBkcm9wX21ldGVyO1xuIFx0c3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24gZndfdmVyc2lvbjtcbiYjNDM7XHR1MTYgYXNpY19pZDtcbiYjNDM7XHR1OCBhc2ljX3JldjtcbiBcdHN0cnVjdCBteGw4NjJ4eF9wY3Mgc2VyZGVzX3BvcnRzWzhdO1xuIFx0aW50IHNlcmRlc19yZWZjb3VudFsyXTtcbiBcdHN0cnVjdCBtdXRleCBzZXJkZXNfbG9jaztcbkBAIC0zMzcsNiAmIzQzOzM1NywxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7XG4gXHR1MTYgZXZsYW5faW5ncmVzc19zaXplO1xuIFx0dTE2IGV2bGFuX2VncmVzc19zaXplO1xuIFx0dTE2IHZmX2Jsb2NrX3NpemU7XG4mIzQzO1x0Ym9vbCBibG9ja19ob3N0O1xuJiM0MztcdGJvb2wgc2tpcF90ZWFyZG93bjtcbiYjNDM7XHRib29sIHJlc2N1ZV9tb2RlO1xuJiM0MztcdGJvb2wgcmVzY3VlX3JlYWR5O1xuIFx0c3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193b3JrO1xuIH07XG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaFxuaW5kZXggOGMxNmVmMjNjYzEwMmEuLmM5ZTE5MzQ4ZGU2MTkzIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9uZXQvZHNhLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2RzYS5oXG5AQCAtMTE3MCw2ICYjNDM7MTE3MCw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7XG4gXHRpbnRcdCgqZGV2bGlua19pbmZvX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbiYjNDM7XHRpbnRcdCgqZGV2bGlua19mbGFzaF91cGRhdGUpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbiYjNDM7XHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXHRpbnRcdCgqZGV2bGlua19zYl9wb29sX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9kc2EvZGV2bGluay5jIGIvbmV0L2RzYS9kZXZsaW5rLmNcbmluZGV4IGVkMzQyZjM0NTY5MmJiLi5kNjAyMjI2N2E4MzljZCAxMDA2NDRcbi0tLSBhL25ldC9kc2EvZGV2bGluay5jXG4mIzQzOyYjNDM7JiM0MzsgYi9uZXQvZHNhL2RldmxpbmsuY1xuQEAgLTIwLDYgJiM0MzsyMCwxNSBAQCBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiBcdHJldHVybiAtRU9QTk9UU1VQUDtcbiB9XG4gXG4mIzQzO3N0YXRpYyBpbnQgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCxcbiYjNDM7XHRcdFx0XHQgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuJiM0MztcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfZGV2bGlua190b19kcyhkbCk7XG4mIzQzO1xuJiM0MztcdHJldHVybiBkcy1cdTAwM2VvcHMtXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGUoZHMsIHBhcmFtcywgZXh0YWNrKTtcbiYjNDM7fVxuJiM0MztcbiBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiBcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXG4gXHRcdFx0XHQgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbylcbkBAIC0xNjcsMTggJiM0MzsxNzYsMzEgQEAgZHNhX2Rldmxpbmtfc2Jfb2NjX3RjX3BvcnRfYmluZF9nZXQoc3RydWN0IGRldmxpbmtfcG9ydCAqZGxwLFxuIFx0XHRcdFx0XHRcdFx0cF9tYXgpO1xuIH1cbiBcbi1zdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHtcbi1cdC5pbmZvX2dldFx0XHRcdD0gZHNhX2RldmxpbmtfaW5mb19nZXQsXG4tXHQuc2JfcG9vbF9nZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFxuLVx0LnNiX3Bvb2xfc2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX3NldCxcbi1cdC5zYl9wb3J0X3Bvb2xfZ2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX2dldCxcbi1cdC5zYl9wb3J0X3Bvb2xfc2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX3NldCxcbi1cdC5zYl90Y19wb29sX2JpbmRfZ2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX2dldCxcbi1cdC5zYl90Y19wb29sX2JpbmRfc2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX3NldCxcbi1cdC5zYl9vY2Nfc25hcHNob3RcdFx0PSBkc2FfZGV2bGlua19zYl9vY2Nfc25hcHNob3QsXG4tXHQuc2Jfb2NjX21heF9jbGVhclx0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY19tYXhfY2xlYXIsXG4tXHQuc2Jfb2NjX3BvcnRfcG9vbF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfcG9ydF9wb29sX2dldCxcbiYjNDM7LyogVGhlIGRldmxpbmsgY29yZSByZWplY3RzIGZsYXNoIHJlcXVlc3RzIHVwIGZyb250IHdoZW4gdGhlIGZsYXNoX3VwZGF0ZVxuJiM0MzsgKiBvcCBpcyBhYnNlbnQsIGJlZm9yZSBmZXRjaGluZyB0aGUgZmlybXdhcmUgZmlsZSBmcm9tIHVzZXJzcGFjZS4gT25seVxuJiM0MzsgKiBpbnN0YWxsIHRoZSBvcCBmb3Igc3dpdGNoZXMgd2hvc2UgZHJpdmVyIGltcGxlbWVudHMgaXQsIHNvIHRoYXRcbiYjNDM7ICogdW5zdXBwb3J0ZWQgcmVxdWVzdHMga2VlcCBmYWlsaW5nIGVhcmx5LlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBEU0FfREVWTElOS19PUFNcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0LmluZm9fZ2V0XHRcdFx0PSBkc2FfZGV2bGlua19pbmZvX2dldCxcdFx0XFxcbiYjNDM7XHQuc2JfcG9vbF9nZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0LFx0XFxcbiYjNDM7XHQuc2JfcG9vbF9zZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LFx0XFxcbiYjNDM7XHQuc2JfcG9ydF9wb29sX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9nZXQsXHRcXFxuJiM0MztcdC5zYl9wb3J0X3Bvb2xfc2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX3NldCxcdFxcXG4mIzQzO1x0LnNiX3RjX3Bvb2xfYmluZF9nZXRcdFx0PSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfZ2V0LCBcXFxuJiM0MztcdC5zYl90Y19wb29sX2JpbmRfc2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX3NldCwgXFxcbiYjNDM7XHQuc2Jfb2NjX3NuYXBzaG90XHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LFx0XFxcbiYjNDM7XHQuc2Jfb2NjX21heF9jbGVhclx0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY19tYXhfY2xlYXIsXHRcXFxuJiM0MztcdC5zYl9vY2NfcG9ydF9wb29sX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY19wb3J0X3Bvb2xfZ2V0LCBcXFxuIFx0LnNiX29jY190Y19wb3J0X2JpbmRfZ2V0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY190Y19wb3J0X2JpbmRfZ2V0LFxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19vcHMgPSB7XG4mIzQzO1x0RFNBX0RFVkxJTktfT1BTXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX2ZsYXNoX29wcyA9IHtcbiYjNDM7XHREU0FfREVWTElOS19PUFNcbiYjNDM7XHQuZmxhc2hfdXBkYXRlXHRcdFx0PSBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUsXG4gfTtcbiBcbiBpbnQgZHNhX2RldmxpbmtfcGFyYW1fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgdTMyIGlkLFxuQEAgLTM3OCwxMiAmIzQzOzQwMCwxNiBAQCB2b2lkIGRzYV9zd2l0Y2hfZGV2bGlua191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBpbnQgZHNhX3N3aXRjaF9kZXZsaW5rX2FsbG9jKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgZHNhX2RldmxpbmtfcHJpdiAqZGxfcHJpdjtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcztcbiBcdHN0cnVjdCBkZXZsaW5rICpkbDtcbiBcbiYjNDM7XHRvcHMgPSBkcy1cdTAwM2VvcHMtXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGUgPyBcdTAwMjZkc2FfZGV2bGlua19mbGFzaF9vcHNcbiYjNDM7XHRcdFx0XHRcdCAgICA6IFx1MDAyNmRzYV9kZXZsaW5rX29wcztcbiYjNDM7XG4gXHQvKiBBZGQgdGhlIHN3aXRjaCB0byBkZXZsaW5rIGJlZm9yZSBjYWxsaW5nIHNldHVwLCBzbyB0aGF0IHNldHVwIGNhblxuIFx0ICogYWRkIGRwaXBlIHRhYmxlc1xuIFx0ICovXG4tXHRkbCA9IGRldmxpbmtfYWxsb2MoXHUwMDI2ZHNhX2Rldmxpbmtfb3BzLCBzaXplb2YoKmRsX3ByaXYpLCBkcy1cdTAwM2VkZXYpO1xuJiM0MztcdGRsID0gZGV2bGlua19hbGxvYyhvcHMsIHNpemVvZigqZGxfcHJpdiksIGRzLVx1MDAzZWRldik7XG4gXHRpZiAoIWRsKVxuIFx0XHRyZXR1cm4gLUVOT01FTTtcbiBcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1MjwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBmaXJtd2FyZSBmbGFzaCBzdXBwb3J0IGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggdmlhIGRldmxpbmsuIFRoZSBteGw4NjJ4eCBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIHdpdGggdGhlIHBoeXNpY2FsIHN3aXRjaCBjaGlwIG92ZXIgYW4gTURJTyBidXMuIER1cmluZyBwcm9iZSwgaXQgcGVyZm9ybXMgYSBoYXJkd2FyZSBwcmVzZW5jZSBjaGVjayAobXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KSB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBjaGlwIHRvIGxhdGNoIGFuZCByZXR1cm4gc3BlY2lmaWMgdmFsdWVzLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSAod2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUpLCB0aGUgZHJpdmVyIGZhaWxzIHRvIHByb2JlLCBtYWtpbmcgdGhlIG5ldyBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBjb2RlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBnZW5lcmljIERTQSBkZXZsaW5rIHBsdW1iaW5nIGNoYW5nZXMgb25seSBhZmZlY3QgZHJpdmVycyBpbXBsZW1lbnRpbmcgdGhlIG5ldyBvcCwgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgbXhsODYyeHguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzkzNmRmN2FmNzA4OTc1YzlkODNlZTI5NmJmMzYxNGRjODYyMzE2NgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTdW4gSnVsIDI2IDExOjUyOjM2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0CmluZGV4IDQ3NDUxNDhmZWNmNGZlLi4wNTg5OTlkMGRjNTZmMiAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0CiYjNDM7JiM0MzsmIzQzOyBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdApAQCAtOTQsNiAmIzQzOzk0LDcgQEAgcGFyYW1ldGVycywgaW5mbyB2ZXJzaW9ucywgYW5kIG90aGVyIGZlYXR1cmVzIGl0IHN1cHBvcnRzLgogICAgbWx4NQogICAgbWx4c3cKICAgIG12ODhlNnh4eAomIzQzOyAgIG14bDg2Mnh4CiAgICBuZXRkZXZzaW0KICAgIG5mcAogICAgb2N0ZW9udHgyCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9teGw4NjJ4eC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9teGw4NjJ4eC5yc3QKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAuLmIzZTlmN2Q0ZDQ5NjllCi0tLSAvZGV2L251bGwKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0CkBAIC0wLDAgJiM0MzsxLDYzIEBACiYjNDM7Li4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKJiM0MzsKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MztteGw4NjJ4eCBkZXZsaW5rIHN1cHBvcnQKJiM0Mzs9PT09PT09PT09PT09PT09PT09PT09PT0KJiM0MzsKJiM0MztUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGV2bGluayBmZWF0dXJlcyBpbXBsZW1lbnRlZCBieSB0aGUKJiM0MztgYG14bDg2Mnh4YGAgZGV2aWNlIGRyaXZlci4KJiM0MzsKJiM0MztJbmZvIHZlcnNpb25zCiYjNDM7PT09PT09PT09PT09PQomIzQzOwomIzQzO1RoZSBgYG14bDg2Mnh4YGAgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyB2ZXJzaW9ucwomIzQzOwomIzQzOy4uIGxpc3QtdGFibGU6OiBkZXZsaW5rIGluZm8gdmVyc2lvbnMgaW1wbGVtZW50ZWQKJiM0MzsgICA6d2lkdGhzOiA1IDUgNSA4NQomIzQzOwomIzQzOyAgICogLSBOYW1lCiYjNDM7ICAgICAtIFR5cGUKJiM0MzsgICAgIC0gRXhhbXBsZQomIzQzOyAgICAgLSBEZXNjcmlwdGlvbgomIzQzOyAgICogLSBgYGFzaWMuaWRgYAomIzQzOyAgICAgLSBmaXhlZAomIzQzOyAgICAgLSA4NjI4CiYjNDM7ICAgICAtIFRoZSBjaGlwIHBhcnQgbnVtYmVyIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMuIE5vdAomIzQzOyAgICAgICByZXBvcnRlZCBmb3IgYSBzd2l0Y2ggc2l0dGluZyBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlIGFzIHRoZQomIzQzOyAgICAgICByZWdpc3RlcnMgYXJlIG9ubHkgYWNjZXNzaWJsZSB3aXRoIGEgcnVubmluZyBmaXJtd2FyZS4KJiM0MzsgICAqIC0gYGBhc2ljLnJldmBgCiYjNDM7ICAgICAtIGZpeGVkCiYjNDM7ICAgICAtIDAKJiM0MzsgICAgIC0gVGhlIGNoaXAgdmVyc2lvbiByZWFkIGZyb20gdGhlIENISVAgSUQgcmVnaXN0ZXJzLiBOb3QgcmVwb3J0ZWQKJiM0MzsgICAgICAgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSBlaXRoZXIuCiYjNDM7ICAgKiAtIGBgZndgYAomIzQzOyAgICAgLSBydW5uaW5nLCBzdG9yZWQKJiM0MzsgICAgIC0gMS4wLjcwCiYjNDM7ICAgICAtIFZlcnNpb24gb2YgdGhlIGZpcm13YXJlIHJ1bm5pbmcgb24gdGhlIHN3aXRjaCwgcmVwb3J0ZWQgYXMgYm90aAomIzQzOyAgICAgICBydW5uaW5nIGFuZCBzdG9yZWQgc2luY2UgdGhlIHN3aXRjaCBib290cyBpdCBmcm9tIGl0cyBvd24gZmxhc2guCiYjNDM7ICAgICAgIEluIE1DVWJvb3QgcmVzY3VlIG1vZGUgbm90aGluZyBpcyByZXBvcnRlZCB3aGlsZSBhbiBpbnRlcnJ1cHRlZAomIzQzOyAgICAgICBkb3dubG9hZCBpcyBzdGlsbCBiZWluZyByZWNvdmVyZWQgaW4gdGhlIGJhY2tncm91bmQ7IG9uY2UgdGhlCiYjNDM7ICAgICAgIGxvYWRlciBpcyByZWFkeSB0byBhY2NlcHQgYSBuZXcgaW1hZ2UgdGhlIHZlcnNpb24gaXMgcmVwb3J0ZWQgKGFzCiYjNDM7ICAgICAgIGJvdGggcnVubmluZyBhbmQgc3RvcmVkKSwgd2hpY2ggaXMgdGhlIHNpZ25hbCB0aGF0IGEgZmxhc2ggd2lsbCBiZQomIzQzOyAgICAgICBhY2NlcHRlZC4gSXQgcmVhZHMgJiMzNDswLjAuMCYjMzQ7IHdoZW4gdGhlIHN3aXRjaCBjYW1lIHVwIHN0cmFpZ2h0IGludG8KJiM0MzsgICAgICAgTUNVYm9vdCB3aXRob3V0IGV2ZXIgcnVubmluZyBmaXJtd2FyZS4KJiM0MzsKJiM0MztGbGFzaCB1cGRhdGUKJiM0Mzs9PT09PT09PT09PT0KJiM0MzsKJiM0MztUaGUgYGBteGw4NjJ4eGBgIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGBgZGV2bGluayBkZXYgZmxhc2hgYC4KJiM0MztUaGUgc2lnbmVkIGZpcm13YXJlIGltYWdlIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBzd2l0Y2ggb3ZlciB0aGUgc2FtZQomIzQzO01ESU8gYnVzIHdoaWNoIGlzIGFsc28gdXNlZCB0byBtYW5hZ2UgdGhlIHN3aXRjaCwgdGhlbiB2ZXJpZmllZCBhbmQKJiM0MztpbnN0YWxsZWQgYnkgdGhlIE1DVWJvb3QgYm9vdGxvYWRlciBydW5uaW5nIG9uIHRoZSBzd2l0Y2guIEFsbCBwb3J0cwomIzQzO29mIHRoZSBzd2l0Y2ggYXJlIGNsb3NlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB1cGRhdGUgYW5kIHRoZSBkcml2ZXIKJiM0MztyZXByb2JlcyB0aGUgc3dpdGNoIGFmdGVyIGl0IGhhcyByZWJvb3RlZCBpbnRvIHRoZSBuZXcgZmlybXdhcmUuIEEKJiM0Mztjb21wbGV0ZSBmbGFzaCBhbmQgcmVwcm9iZSBjeWNsZSB0YWtlcyBhYm91dCBvbmUgbWludXRlLgomIzQzOwomIzQzO0Egc3dpdGNoIHN0dWNrIGluIE1DVWJvb3QgcmVzY3VlIG1vZGUsIGUuZy4gYWZ0ZXIgYW4gaW50ZXJydXB0ZWQKJiM0Mzt1cGRhdGUsIGlzIHJlZ2lzdGVyZWQgd2l0aG91dCB1c2VyIHBvcnRzLiBJZiB0aGUgcHJldmlvdXMgZG93bmxvYWQgd2FzCiYjNDM7aW50ZXJydXB0ZWQgbWlkLXRyYW5zZmVyIHRoZSBsb2FkZXIgaXMgd2VkZ2VkOyB0aGUgZHJpdmVyIGRyYWlucyBpdAomIzQzO2JhY2sgdG8gYSBjbGVhbiByZWFkeSBzdGF0ZSBpbiB0aGUgYmFja2dyb3VuZCwgd2hpY2ggY2FuIGVhc2lseSB0YWtlCiYjNDM7bW9yZSB0aGFuIDEwIG1pbnV0ZXMuIER1cmluZyB0aGF0IHJlY292ZXJ5IGBgZGV2bGluayBkZXYgaW5mb2BgIHJlcG9ydHMKJiM0MztubyBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBgYGRldmxpbmsgZGV2IGZsYXNoYGAgcmV0dXJucyBgYC1FQlVTWWBgLgomIzQzO09uY2UgdGhlIGxvYWRlciBpcyByZWFkeSB0aGUgZmlybXdhcmUgdmVyc2lvbiBhcHBlYXJzIGFuZCBmbGFzaGluZyBhCiYjNDM7ZmlybXdhcmUgaW1hZ2UgdGhyb3VnaCB0aGUgcmVndWxhciB1cGRhdGUgZmxvdyByZWNvdmVycyB0aGUgc3dpdGNoLgpkaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSUwppbmRleCA2MGNmZjAwOTUzZGNiZS4uM2E1NWVkMmJhZDljYmEgMTAwNjQ0Ci0tLSBhL01BSU5UQUlORVJTCiYjNDM7JiM0MzsmIzQzOyBiL01BSU5UQUlORVJTCkBAIC0xNjEwNyw2ICYjNDM7MTYxMDcsNyBAQCBNOglEYW5pZWwgR29sbGUgJmx0O2RhbmllbEBtYWtyb3RvcGlhLm9yZyZndDsKIEw6CW5ldGRldkB2Z2VyLmtlcm5lbC5vcmcKIFM6CU1haW50YWluZWQKIEY6CURvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21heGxpbmVhcixteGw4NjJ4eC55YW1sCiYjNDM7RjoJRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0CiBGOglkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvCiBGOgluZXQvZHNhL3RhZ19teGw4NjJ4eC5jCiAKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZQppbmRleCBhN2JlMGU2NjY5ZGZhNS4uYmNjYWMwZDBmNzAzZjYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZQomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUKQEAgLTEsMyAmIzQzOzEsMyBAQAogIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMAogb2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSAmIzQzOz0gbXhsODYyeHhfZHNhLm8KLW14bDg2Mnh4X2RzYS15IDo9IG14bDg2Mnh4Lm8gbXhsODYyeHgtaG9zdC5vIG14bDg2Mnh4LXBoeWxpbmsubwomIzQzO214bDg2Mnh4X2RzYS15IDo9IG14bDg2Mnh4Lm8gbXhsODYyeHgtaG9zdC5vIG14bDg2Mnh4LXBoeWxpbmsubyBteGw4NjJ4eC1mdy5vCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmgKaW5kZXggYTE4MGE1ZGVjZmZjMDEuLjZmNzcxODk1OTg0Y2IzIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmgKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oCkBAIC0xMjI0LDYgJiM0MzsxMjI0LDE2IEBAIHN0cnVjdCBteGw4NjJ4eF9zeXNfZndfaW1hZ2VfdmVyc2lvbiB7CiAJX19sZTMyIGl2X2J1aWxkX251bTsKIH0gX19wYWNrZWQ7CiAKJiM0MzsvKioKJiM0MzsgKiBzdHJ1Y3QgbXhsODYyeHhfc3lzX3JlZ19ydyAtIFN5c3RlbSByZWdpc3RlciByZWFkL3dyaXRlCiYjNDM7ICogQGFkZHI6IDMyLWJpdCByZWdpc3RlciBhZGRyZXNzCiYjNDM7ICogQHZhbDogcmVnaXN0ZXIgdmFsdWUKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgbXhsODYyeHhfc3lzX3JlZ19ydyB7CiYjNDM7CV9fbGUzMiBhZGRyOwomIzQzOwlfX2xlMzIgdmFsOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiAvKioKICAqIGVudW0gbXhsODYyeHhfcG9ydF90eXBlIC0gUG9ydCBUeXBlCiAgKiBATVhMODYyWFhfTE9HSUNBTF9QT1JUOiBMb2dpY2FsIFBvcnQKZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaAppbmRleCBjODdhOTU1YzEzYzQ4ZS4uYTg2NTQyNWFhNjFlMWYgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmgKQEAgLTcwLDcgJiM0Mzs3MCw5IEBACiAjZGVmaW5lIElOVF9HUEhZX1JFQUQJCQkoR1BZX0dQWTJYWF9NQUdJQyAmIzQzOyAweDEpCiAjZGVmaW5lIElOVF9HUEhZX1dSSVRFCQkJKEdQWV9HUFkyWFhfTUFHSUMgJiM0MzsgMHgyKQogCiYjNDM7I2RlZmluZSBTWVNfTUlTQ19GV19VUERBVEUJCShTWVNfTUlTQ19NQUdJQyAmIzQzOyAweDEpCiAjZGVmaW5lIFNZU19NSVNDX0ZXX1ZFUlNJT04JCShTWVNfTUlTQ19NQUdJQyAmIzQzOyAweDIpCiYjNDM7I2RlZmluZSBTWVNfTUlTQ19SRUdfUkQJCQkoU1lTX01JU0NfTUFHSUMgJiM0MzsgMHg4KQogCiAjZGVmaW5lIE1YTDg2MlhYX1hQQ1NfUENTX0NPTkZJRwkoTVhMODYyWFhfWFBDU19NQUdJQyAmIzQzOyAweDEpCiAjZGVmaW5lIE1YTDg2MlhYX1hQQ1NfUENTX0dFVF9TVEFURQkoTVhMODYyWFhfWFBDU19NQUdJQyAmIzQzOyAweDIpCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwLi5kMjhjZWI5OGNkNTY0ZQotLS0gL2Rldi9udWxsCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jCkBAIC0wLDAgJiM0MzsxLDg4NCBAQAomIzQzOy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyCiYjNDM7LyoKJiM0MzsgKiBGaXJtd2FyZSBmbGFzaCBhbmQgZGV2bGluayBzdXBwb3J0IGZvciBNYXhMaW5lYXIgTXhMODYyeHgKJiM0MzsgKgomIzQzOyAqIENvcHlyaWdodCAoQykgMjAyNSBEYW5pZWwgR29sbGUgJmx0O2RhbmllbEBtYWtyb3RvcGlhLm9yZyZndDsKJiM0MzsgKgomIzQzOyAqIFNCIFBESSAtIGZpcm13YXJlIGRvd25sb2FkIGludGVyZmFjZSBvdmVyIGNsYXVzZS0yMiBTTURJTwomIzQzOyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQomIzQzOyAqCiYjNDM7ICogVGhlIE14TDg2Mnh4IE1DVWJvb3QgbG9hZGVyIGFjY2VwdHMgYSBmaXJtd2FyZSBpbWFnZSB0aHJvdWdoIGZvdXIgJiMzNDtTQiBQREkmIzM0OwomIzQzOyAqIHJlZ2lzdGVycyBpbiB0aGUgc3dpdGNoIFNNRElPIHJlZ2lzdGVyIHNwYWNlLiBJdCBydW5zIHdoZW5ldmVyIG5vIFdTUAomIzQzOyAqIGZpcm13YXJlIGlzIGFjdGl2ZTogdGhlIG5vcm1hbCBmaXJtd2FyZSB1cGRhdGUgZW50ZXJzIGl0IGRlbGliZXJhdGVseSAtIHRoZQomIzQzOyAqIFNZU19NSVNDX0ZXX1VQREFURSBBUEkgY29tbWFuZCBzZXRzIGEgc3RpY2t5IHJlc2N1ZSBiaXQgYW5kIHJlYm9vdHMgaW50bwomIzQzOyAqIE1DVWJvb3QgLSBhbmQgdGhlIGxvYWRlciBhbHNvIHN0YXlzIGhlcmUgd2hlbiB0aGUgc3RvcmVkIFdTUCBmaXJtd2FyZSBmYWlscwomIzQzOyAqIGl0cyBib290LXRpbWUgaW50ZWdyaXR5IGNoZWNrLiBUaGlzIGRyaXZlciBkcml2ZXMgdGhlIGxvYWRlciYjMzk7cyAweGM1NWMKJiM0MzsgKiAmIzM0O2NvbnNvbGUmIzM0OyBkb3dubG9hZCBwYXRoLgomIzQzOyAqCiYjNDM7ICogU01ESU8gcmVnaXN0ZXIgYWNjZXNzIChteGw4NjJ4eF9zbWRpb19yZWFkL3dyaXRlKToKJiM0MzsgKiAgIE1JSSByZWcgMHgxZiA6PSAmbHQ7c2JfcGRpX3JlZyZndDsgICAgICA7IGFkZHJlc3MvcGFnZSBsYXRjaAomIzQzOyAqICAgTUlJIHJlZyAweDAwIDo9IC8gPSZndDsgJmx0O3UxNiBkYXRhJmd0OyAgIDsgZGF0YSB3aW5kb3cKJiM0MzsgKgomIzQzOyAqIFNCIFBESSByZWdpc3RlcnMgKGhvc3QgbmFtZS9hZGRyICAtJmd0OyAgTUNVIG1haWxib3gpOgomIzQzOyAqICAgQ1RSTCAweGUxMDAgLSZndDsgMHhjMDkzODQwMCAgIG1vZGU6IFJTVD0weDAwICBSRD0weDAxICBXUj0weDAyCiYjNDM7ICogICBBRERSIDB4ZTEwMSAtJmd0OyAweGMwOTM4NDA0ICAgU0IgdGFyZ2V0IHdvcmQgYWRkcmVzcyAoU0IxIGJhbmsgPSAweDc4MDApCiYjNDM7ICogICBEQVRBIDB4ZTEwMiAtJmd0OyAweGMwOTM4NDA4ICAgMTYtYml0IGRhdGEgLyByZXBseSB3b3JkCiYjNDM7ICogICBTVEFUIDB4ZTEwMyAtJmd0OyAweGMwOTM4NDBjICAgaGFuZHNoYWtlOiBhIG1hZ2ljIChiZWxvdykgb3IgYSBieXRlIGNvdW50CiYjNDM7ICoKJiM0MzsgKiBTVEFUIG1hZ2ljczoKJiM0MzsgKiAgIFJFQURZICAweGM1NWMgICBsb2FkZXIgaWRsZSBpbiB0aGUgY29uc29sZSBsb29wICAgICAgICAodGhpcyBkcml2ZXIpCiYjNDM7ICogICBETF9SRFkgMHhjMzNjICAgbG9hZGVyIGlkbGUgaW4gdGhlIGZsYXNobGVzcyBsb29wCiYjNDM7ICogICBTVEFSVCAgMHhmNDhmICAgaG9zdCAgIC0mZ3Q7IGJlZ2luIGRvd25sb2FkIHNlc3Npb24KJiM0MzsgKiAgIEFDSyAgICAweGY0OTAgICBsb2FkZXIgLSZndDsgU1RBUlQgYWNrbm93bGVkZ2VkIChTVEFSVCAmIzQzOyAxKQomIzQzOyAqICAgRU5EICAgIDB4M2NjMyAgIGhvc3QgICAtJmd0OyBlbmQgb2YgdHJhbnNmZXIgLyBmaW5hbGlzZQomIzQzOyAqICAgUkRSRUcgIDB4ZTJjMCAgIGhvc3QgICAtJmd0OyByZWdpc3Rlci1yZWFkIGNvbW1hbmQgKHwgaW5kZXgpLCBzZWUgYmVsb3cKJiM0MzsgKgomIzQzOyAqIENvbnNvbGUgZmxhc2ggcGF0aCAoU1RBVD0weGM1NWMpIC0gbXhsODYyeHhfZmxhc2hfZmlybXdhcmUoKToKJiM0MzsgKgomIzQzOyAqICAgaG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyCiYjNDM7ICogICAtLS0tICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLS0tLS0KJiM0MzsgKiAgIHJlc2V0IChDVFJMPUFERFI9REFUQT0wKQomIzQzOyAqICAgcmVhZCBTVEFUIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMHhjNTVjICAgKFJFQURZLCBpZGxlKQomIzQzOyAqICAgU1RBVCA6PSBTVEFSVCgweGY0OGYpICAtLS0tLS0tLS0tLS0tLSZndDsKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICAgICAgJmx0Oy0tLS0tLS0tLS0tLS0tIFNUQVQgPSAweGY0OTAgKEFDSykKJiM0MzsgKiAgIENUUkwgOj0gV1IKJiM0MzsgKiAgIERBVEEgOj0gaGRyWzAuLjldICAoMjAtYnl0ZSBoZWFkZXI6IHR5cGUsc2l6ZTEsY3JjMSxzaXplMixjcmMyKQomIzQzOyAqICAgcmVzZXQ7IFNUQVQgOj0gMjAgKGhlYWRlciBsZW4pICAtLS0tLSZndDsgcGFyc2UgaGRyOyByX3JlbWFpbj1zaXplMSYjNDM7c2l6ZTI7CiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkFTRSB0YXJnZXQgcmVnaW9uKHMpCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgICAgICZsdDstLS0tLS0tLS0tLS0tLSBTVEFUPTIxIChsZW4mIzQzOzEpLCB0aGVuIFNUQVQ9MAomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVyYXNlZCkKJiM0MzsgKiAgIC0tIHBheWxvYWQsIHN0cmVhbWVkIGluIHNsaWNlczogLS0KJiM0MzsgKiAgIENUUkwgOj0gV1IKJiM0MzsgKiAgIERBVEEgOj0gd29yZCB4IE4gLi4uCiYjNDM7ICogICAgIGF0IHdvcmQgMTYzODQ6IHJlc2V0OyBBRERSOj0weDc4MDA7IENUUkw6PVdSICAgKGhhbGYtYmFuayAtJmd0OyBTQjEpCiYjNDM7ICogICAgIGF0IHdvcmQgMzI3NjA6IGZsdXNoIHNsaWNlOgomIzQzOyAqICAgICAgICByZXNldDsgU1RBVCA6PSAmbHQ7Ynl0ZXNfdGhpc19zbGljZSZndDsgLS0tJmd0OyByX3JlbWFpbiAtPSBieXRlczsgcHJvZ3JhbQomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgICAgICAmbHQ7LS0tLS0tLS0tLS0tLS0tLS0tLSBTVEFUPTAgIChyZWFkeSBmb3IgbmV4dCBzbGljZSkKJiM0MzsgKiAgIC4uLiByZXBlYXQgdW50aWwgdGhlIHdob2xlIHBheWxvYWQgaXMgc2VudCAuLi4KJiM0MzsgKiAgIFNUQVQgOj0gRU5EKDB4M2NjMykgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLSZndDsgZmluYWxpc2UKJiM0MzsgKgomIzQzOyAqIFRoZSByX3JlbWFpbiA9PSAwIHJ1bGUgKGNyaXRpY2FsKToKJiM0MzsgKiAgIEV2ZXJ5IGhvc3QgU1RBVCB3cml0ZSBpbiB0aGUgcGF5bG9hZCBwaGFzZSBpcyBhIGJ5dGUgY291bnQ7IHRoZSBsb2FkZXIKJiM0MzsgKiAgIGRvZXMgcl9yZW1haW4gLT0gY291bnQgYW5kIHN0YXlzIGluIHRoZSByZWNlaXZlIGxvb3Agd2hpbGUgcl9yZW1haW4gIT0gMC4KJiM0MzsgKiAgIEl0IGxlYXZlcyB0aGUgbG9vcCwgdmFsaWRhdGVzLCBhbmQgLSBpZiBpdCB3YXMgaW4gcmVzY3VlIC0gY2xlYXJzIGl0cwomIzQzOyAqICAgcmVzY3VlLWVuYWJsZSBiaXQgc28gYm9vdF9nbyBib290cyB0aGUgbmV3IGltYWdlLCBPTkxZIHdoZW4gcl9yZW1haW4gaGl0cwomIzQzOyAqICAgRVhBQ1RMWSAwLiBBIGNvdW50IGxhcmdlciB0aGFuIHJfcmVtYWluIHVuZGVyZmxvd3MgdGhlIDMyLWJpdCBjb3VudGVyIGFuZAomIzQzOyAqICAgd2VkZ2VzIHRoZSBsb2FkZXIgdW50aWwgYSBwb3dlciBjeWNsZS4gSGVuY2U6CiYjNDM7ICogICAgIC0gbmV2ZXIgc2VuZCBhIHNsaWNlL2NodW5rIGNvdW50IGxhcmdlciB0aGFuIHdoYXQgaXMgb3V0c3RhbmRpbmc7CiYjNDM7ICogICAgIC0gaW50ZXJydXB0ZWQtZG93bmxvYWQgcmVjb3ZlcnkgZmVlZHMgMSBieXRlIGF0IGEgdGltZSAoc2VlIGJlbG93KS4KJiM0MzsgKgomIzQzOyAqIEludGVycnVwdGVkLWZsYXNoIHJlY292ZXJ5IChteGw4NjJ4eF9yZXNjdWVfZHJhaW4pOgomIzQzOyAqICAgQSBob3N0IHRoYXQgZGllcyBtaWQtcGF5bG9hZCBsZWF2ZXMgdGhlIGxvYWRlciBzcGlubmluZyBpbiB0aGUgc2xpY2UgbG9vcAomIzQzOyAqICAgaG9sZGluZyBTVEFUPTAgKG5vIG1hZ2ljKS4gRmVlZCBzaW5nbGUgMS1ieXRlIGNodW5rcyAob25lIERBVEEgd29yZCAmIzQzOwomIzQzOyAqICAgU1RBVD0xKSB1bnRpbCByX3JlbWFpbiByZWFjaGVzIDAsIHRoZW4gU1RBVD1FTkQ7IHRoZSBsb2FkZXIgZmluYWxpc2VzIHRoZQomIzQzOyAqICAgKG5vdyBjb3JydXB0KSBpbWFnZSBhbmQgcmUtYXJtcyBSRUFEWSBmb3IgYSBjbGVhbiByZWZsYXNoLgomIzQzOyAqCiYjNDM7ICogUmVnaXN0ZXItcmVhZCBjaGFsbGVuZ2UgKG5vbi1kZXN0cnVjdGl2ZSBsaXZlbmVzcyBwcm9vZik6CiYjNDM7ICogICBEQVRBIDo9IDB4N2MyMyAobWFya2VyKTsgU1RBVCA6PSAweGUyYzB8aWR4CiYjNDM7ICogICAgIC0mZ3Q7IGxvYWRlciByZXR1cm5zIGEgcnVudGltZSB3b3JkIGluIERBVEEgYW5kIHJlLWFybXMgU1RBVD0weGM1NWMuCiYjNDM7ICogICBUaGUgcmVwbHkgc291cmNlIGlzIGxvYWRlciBCU1MsIG5vdCBhIGNoaXAgaWQ7IHVzZWQgb25seSB0byBwcm92ZSBhIGxpdmUKJiM0MzsgKiAgIG1haWxib3ggaW4gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCkuCiYjNDM7ICoKJiM0MzsgKiBUaGUgb3RoZXIgU1RBVCByZWFkeSBtYWdpYywgMHhjMzNjLCBtYXJrcyB0aGUgbG9hZGVyJiMzOTtzIGZsYXNobGVzcwomIzQzOyAqIGNoaXAtdG8tY2hpcCBkb3dubG9hZCBtb2RlIChNeEw4NjI4MVMgMTYtcG9ydCB0aWVyKTsgdGhpcyBkcml2ZXIgZG9lcyBub3QKJiM0MzsgKiB1c2UgaXQuCiYjNDM7ICoKJiM0MzsgKiBSZXNjdWUgbGlmZWN5Y2xlIChkZXZsaW5rKTogcHJvYmUgcnVucyBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QoKTsgYSB3ZWRnZWQKJiM0MzsgKiBsb2FkZXIgaXMgZHJhaW5lZCBiYWNrIHRvIFJFQURZIGJ5IGEgYmFja2dyb3VuZCBzZWxmLWhlYWwgKHJlc2N1ZV9oZWFsX3dvcmspIHNvCiYjNDM7ICogdGhlIG11bHRpLW1pbnV0ZSByZWNvdmVyeSBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrLiBkZXZsaW5rIGRldiBpbmZvCiYjNDM7ICogZXhwb3NlcyB0aGUgZncgdmVyc2lvbiAodGhlICYjMzQ7Zmxhc2hhYmxlJiMzNDsgc2lnbmFsKSBvbmx5IG9uY2UgYXQgUkVBRFk7CiYjNDM7ICogZmxhc2hfdXBkYXRlIHJldHVybnMgLUVCVVNZIHVudGlsIHRoZW4sIGFuZCByZXByb2JlcyB0byBXU1AgZmlybXdhcmUgb24gc3VjY2Vzcy4KJiM0MzsgKgomIzQzOyAqIE5vdGVzOgomIzQzOyAqICAgLSBDaGlwIGlkL3JldmlzaW9uICgweGMwZDI4ODg0Lzg4KSBhcmUgTk9UIHJlYWNoYWJsZSBvbiB0aGlzIGNoYW5uZWw7IHRoZXkKJiM0MzsgKiAgICAgbmVlZCB0aGUgY2xhdXNlLTQ1IE1NRCBmaXJtd2FyZSBtYWlsYm94LCB3aGljaCBpcyBkZWFkIHVuZGVyIE1DVWJvb3QuCiYjNDM7ICogICAgIFJlc2N1ZSBpZGVudGl0eSBpcyBieSBTQiBQREkgYmVoYXZpb3VyIG9ubHkgKG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCkuCiYjNDM7ICogICAtIFRoZSBTTURJTyBQSFkgYWRkcmVzcyBhbmQgdGhlIDB4ZTF4eCBvZmZzZXRzIGFyZSBPVFAtY29uZmlndXJhYmxlOyBkZXJpdmUKJiM0MzsgKiAgICAgdGhlbSBmcm9tIHRoZSBEVCBiaW5kaW5nLCBkbyBub3QgYXNzdW1lIGZpeGVkIHZhbHVlcy4KJiM0MzsgKi8KJiM0MzsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3JjMzIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGVsYXkuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvZGV2aWNlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L21vZHVsZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9uZXRkZXZpY2UuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvb3ZlcmZsb3cuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvcnRuZXRsaW5rLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3dvcmtxdWV1ZS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O25ldC9zd2l0Y2hkZXYuaCZndDsKJiM0MzsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtYXBpLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtY21kLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtZncuaCYjMzQ7CiYjNDM7I2luY2x1ZGUgJiMzNDtteGw4NjJ4eC1ob3N0LmgmIzM0OwomIzQzOwomIzQzOy8qIFNCIFBESSByZWdpc3RlcnMgKGNsYXVzZS0yMiBTTURJTyBhZGRyZXNzIHNwYWNlKSAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkwJCTB4ZTEwMAomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0FERFIJCTB4ZTEwMQomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0RBVEEJCTB4ZTEwMgomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVQJCTB4ZTEwMwomIzQzOwomIzQzOy8qIFNCIFBESSBDVFJMIG1vZGVzICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QJMHgwMAomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IJCTB4MDIKJiM0MzsKJiM0MzsvKiBTQiBQREkgaGFuZHNoYWtlIG1hZ2ljIChwdWJsaXNoZWQvY29uc3VtZWQgdmlhIFNUQVQpICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkVBRFkJCTB4YzU1YwkvKiBsb2FkZXIgaWRsZSwgY29uc29sZSBsb29wICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfRExfUkVBRFkJMHhjMzNjCS8qIGxvYWRlciBpZGxlLCBmbGFzaGxlc3MgbG9vcCAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVJUCQkweGY0OGYKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9FTkQJCTB4M2NjMwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JEUkVHCQkweGUyYzAJLyogcmVnaXN0ZXItcmVhZCBjbWQgKHwgaW5kZXgpICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSwkweDdjMjMJLyogbWFya2VyIHBsYWNlZCBpbiBEQVRBIGZvciBSRFJFRyAqLwomIzQzOwomIzQzOy8qIEJlaGF2aW91cmFsIHByZXNlbmNlIHByb2JlOiB0d28gZGlzdGluY3QgMTYtYml0IGxhdGNoZXMgb24gQUREUi9EQVRBLiAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0EJCTB4NWE1YQomIzQzOyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0QJCTB4YTVhNQomIzQzOwomIzQzOy8qIEZpcm13YXJlIHRyYW5zZmVyIGdlb21ldHJ5ICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19IRFJfU0laRQkJMjAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0JBTktfSEFMRgkJMTYzODQJLyogd29yZHMgcGVyIGhhbGYtYmFuayAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19TTElDRQkJMzI3NjAJLyogd29yZHMgcGVyIGZ1bGwgc2xpY2UgKi8KJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX1NCMV9BRERSCQkweDc4MDAJLyogU0IxIHdvcmQgYWRkcmVzcyAqLwomIzQzOwomIzQzOy8qIFRpbWVvdXRzIChnZW5lcm91cyB1cHBlciBib3VuZHMpICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TCTMwMDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0FDS19USU1FT1VUX01TCTUwMDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX0VSQVNFX1RJTUVPVVRfTVMJMzAwMDAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TCTEyMDAwMAomIzQzOyNkZWZpbmUgTVhMODYyWFhfRldfUkVCT09UX0RFTEFZX01TCTUwMDAKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFUFJPQkVfREVMQVlfTVMJNTAwCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9SRVNDVUVfUkVBRFlfVElNRU9VVF9NUyAxMDAwCiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUiwKJiM0MzsJCQkJICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlyZXR1cm4gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsCiYjNDM7CQkJCSAgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUxNiBleHBlY3RlZCwKJiM0MzsJCQkJICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpCiYjNDM7ewomIzQzOwl1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICYjNDM7IG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7CiYjNDM7CWludCByZXQ7CiYjNDM7CiYjNDM7CWRvIHsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmICgodTE2KXJldCA9PSBleHBlY3RlZCkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsJCXVzbGVlcF9yYW5nZSgxMDAwMCwgMTEwMDApOwomIzQzOwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7CiYjNDM7CiYjNDM7CXJldHVybiAtRVRJTUVET1VUOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgICAgIHUzMiBkYXRhX3dyaXR0ZW4pCiYjNDM7ewomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsIGRhdGFfd3JpdHRlbik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJcmV0dXJuIG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCwKJiM0MzsJCQkJCSBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLAomIzQzOwkJCQkgIHUzMiBkb25lLCB1MzIgdG90YWwpCiYjNDM7ewomIzQzOwlkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBzdGF0dXMsIE5VTEwsIGRvbmUsIHRvdGFsKTsKJiM0Mzt9CiYjNDM7CiYjNDM7LyogQnl0ZS1jb3VudCBvZiBlYWNoIGNodW5rIGZlZCB0byB0aGUgbG9hZGVyIGR1cmluZyBkcmFpbi4gSXQgTVVTVCBiZSAxOiB0aGUKJiM0MzsgKiBsb2FkZXIgb25seSBsZXRzIHVzIG9ic2VydmUgJiMzNDtjb3VudGVyID09IDAmIzM0OywgbmV2ZXIgJiMzNDtjb3VudGVyICZsdDsgc3RlcCYjMzQ7LCBzbyBhbnkKJiM0MzsgKiBzdGVwICZndDsgMSBjYW4gc3VidHJhY3QgcGFzdCB6ZXJvLCB1bmRlcmZsb3cgdGhlIDMyLWJpdCBjb3VudGVyIGFuZCB3ZWRnZSB0aGUKJiM0MzsgKiBsb2FkZXIgZm9yIH4yXjMyIG1vcmUgYnl0ZXMgKGEgc3RhdGUgb25seSBhIHBvd2VyIGN5Y2xlIGNsZWFycykuIFN0ZXBwaW5nIGJ5CiYjNDM7ICogMSB3YWxrcyB0aGUgY291bnRlciB0aHJvdWdoIGV2ZXJ5IHZhbHVlIGFuZCBpcyBndWFyYW50ZWVkIHRvIGxhbmQgb24gemVybwomIzQzOyAqIHdoYXRldmVyIGl0cyAocG9zc2libHkgb2RkKSBzdGFydC4gQSAxLWJ5dGUgY2h1bmsgaXMgYSBwYXRoIHRoZSBsb2FkZXIKJiM0MzsgKiBhbHJlYWR5IGhhbmRsZXM6IHRoZSBub3JtYWwgdHJhbnNmZXIgZW5kcyB3aXRoIGEgc2luZ2xlIHRyYWlsaW5nIGJ5dGUgZm9yCiYjNDM7ICogb2RkLXNpemVkIGltYWdlcyAoc2VlIFN0ZXAgNikuCiYjNDM7ICovCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUwkxCiYjNDM7CiYjNDM7LyogUG9sbCBTVEFUIHdoaWxlIGRyYWluaW5nIGEgc3R1Y2sgZG93bmxvYWQ6IDAgbWVhbnMgJiMzNDtmZWVkIHRoZSBuZXh0IGNodW5rJiMzNDssCiYjNDM7ICogUkVBRFkgbWVhbnMgdGhlIGxvYWRlciBsZWZ0IHRoZSByZWNlaXZlIGxvb3AgYW5kIHJlLWFybWVkIGl0cyBjb21tYW5kIGxvb3AsCiYjNDM7ICogYW55dGhpbmcgZWxzZSBpcyBhIHRyYW5zaWVudCAodGhlIGNvdW50IGJlaW5nIGNvbnN1bWVkKSAtIEJVU1kgcGFzdCB0aGUKJiM0MzsgKiB3aW5kb3cgbWVhbnMgdGhlIGNvdW50ZXIgaGFzIGhpdCB6ZXJvIGFuZCB0aGUgbG9hZGVyIGlzIGZpbmFsaXNpbmcuCiYjNDM7ICovCiYjNDM7ZW51bSB7IE1YTDg2MlhYX0RSQUlOX0ZFRUQsIE1YTDg2MlhYX0RSQUlOX1JFQURZLCBNWEw4NjJYWF9EUkFJTl9CVVNZIH07CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcG9sbF9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKQomIzQzO3sKJiM0MzsJdW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkbyB7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFUKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlpZiAoKHUxNilyZXQgPT0gTVhMODYyWFhfU0JfUERJX1JFQURZKQomIzQzOwkJCXJldHVybiBNWEw4NjJYWF9EUkFJTl9SRUFEWTsKJiM0MzsJCWlmICgodTE2KXJldCA9PSAwKQomIzQzOwkJCXJldHVybiBNWEw4NjJYWF9EUkFJTl9GRUVEOwomIzQzOwkJdXNsZWVwX3JhbmdlKDUwLCAxNTApOwomIzQzOwl9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7CiYjNDM7CiYjNDM7CXJldHVybiBNWEw4NjJYWF9EUkFJTl9CVVNZOwomIzQzO30KJiM0MzsKJiM0MzsvKiBSZWNvdmVyIGEgc3dpdGNoIHdob3NlIFNCIFBESSBkb3dubG9hZCB3YXMgaW50ZXJydXB0ZWQgbWlkLXRyYW5zZmVyIC0gdGhlCiYjNDM7ICogaG9zdCBkaWVkIGFmdGVyIE1DVWJvb3QgYmVnYW4gZXJhc2luZyBmbGFzaCwgd2hldGhlciBpdCBhYm9ydGVkIG1pZCBlcmFzZSBvcgomIzQzOyAqIG1pZCBpbWFnZS13cml0ZSwgYm90aCBlbmQgdXAgaW4gdGhlIHNhbWUgcGxhY2U6IHRoZSBwYXlsb2FkIHJlY2VpdmUgbG9vcC4KJiM0MzsgKiBUaGVyZSB0aGUgbG9hZGVyIHB1Ymxpc2hlcyBTVEFUPTAsIHdhaXRzIGZvciB0aGUgaG9zdCB0byB3cml0ZSBhIGJ5dGUtY291bnQKJiM0MzsgKiB0byBTVEFULCBETUFzIHRoYXQgbWFueSBieXRlcyBhbmQgc3VidHJhY3RzIHRoZSBjb3VudCBmcm9tIGEgcmVtYWluaW5nLWJ5dGVzCiYjNDM7ICogY291bnRlciwgbGVhdmluZyB0aGUgbG9vcCBvbmx5IHdoZW4gdGhlIGNvdW50ZXIgcmVhY2hlcyBleGFjdGx5IHplcm8uIFRoZQomIzQzOyAqIGltYWdlIHNpemUgZGllZCB3aXRoIHRoZSBob3N0LCBzbyB3ZSBmZWVkIHNpbmdsZS1ieXRlIGNodW5rcyAoc2VlCiYjNDM7ICogTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVMpIHRvIHdhbGsgdGhlIGNvdW50ZXIgdG8gemVybyB3aXRob3V0IHVuZGVyZmxvdywKJiM0MzsgKiB0aGVuIHNlbmQgRU5ELiBUaGUgbG9hZGVyIHJ1bnMgaXRzIChmYWlsZWQpIGNoZWNrc3VtIGFuZCBlaXRoZXIgcmUtYXJtcwomIzQzOyAqIFJFQURZIG9yLCBpZiBhIHZhbGlkIGltYWdlIHN1cnZpdmVkIGluIGZsYXNoLCBib290cyBpdC4gUmV0dXJucyAwIHdoZW4gUkVBRFkKJiM0MzsgKiBpcyByZWFjaGVkICh0aGUgY2FsbGVyIGNhbiBmbGFzaCksIDEgd2hlbiB0aGUgbG9hZGVyIGJvb3RlZCBpbnN0ZWFkICh0aGUKJiM0MzsgKiBzd2l0Y2ggaXMgcmVjb3ZlcmVkIGJ1dCB0aGUgaW50ZW5kZWQgaW1hZ2Ugd2FzIG5vdCB3cml0dGVuKSwgJmx0OzAgb24gZXJyb3IuCiYjNDM7ICogRG9lcyBOT1QgcmVjb3ZlciBhIGNvdW50ZXIgYWxyZWFkeSB1bmRlcmZsb3dlZCBieSBhbiBlYXJsaWVyIG92ZXJzaXplZC1jaHVuawomIzQzOyAqIGF0dGVtcHQgLSB0aGF0IG5lZWRzIGEgcG93ZXIgY3ljbGUuCiYjNDM7ICovCiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9yZXNjdWVfZHJhaW4oc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldjsKJiM0MzsJLyogQm91bmQ6IHR3aWNlIHRoZSBsb2FkZXImIzM5O3MgMTYgTWlCIGltYWdlIGNhcCwgb25lIGJ5dGUgcGVyIGNodW5rLiAqLwomIzQzOwl1MzIgbWF4X2NodW5rcyA9IDJ1ICogKDE2dSAmbHQ7Jmx0OyAyMCkgLyBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUzsKJiM0MzsJdTMyIGNodW5rID0gMDsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZGV2X3dhcm4oZGV2LCAmIzM0O2ZsYXNoOiBkcmFpbmluZyBpbnRlcnJ1cHRlZCBkb3dubG9hZFxuJiMzNDspOwomIzQzOwomIzQzOwl3aGlsZSAoY2h1bmsgJmx0OyBtYXhfY2h1bmtzKSB7CiYjNDM7CQkvKiBUZWFyZG93biBjYW4gaW50ZXJydXB0IHRoaXMgbWludXRlcy1sb25nIGRyYWluLiAqLwomIzQzOwkJaWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCAmYW1wO3ByaXYtJmd0O2ZsYWdzKSkKJiM0MzsJCQlyZXR1cm4gLUVDQU5DRUxFRDsKJiM0MzsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX2RyYWluKHByaXYsIDIwMDApOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWlmIChyZXQgPT0gTVhMODYyWFhfRFJBSU5fUkVBRFkpCiYjNDM7CQkJcmV0dXJuIDA7CiYjNDM7CQlpZiAocmV0ID09IE1YTDg2MlhYX0RSQUlOX0JVU1kpCiYjNDM7CQkJYnJlYWs7CiYjNDM7CiYjNDM7CQkvKiBGZWVkIG9uZSB6ZXJvIGJ5dGU7IHJlc2V0IGNsZWFyZWQgdGhlIHdyaXRlIGxhdGNoLiAqLwomIzQzOwkJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJCQkgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIDB4MDAwMCk7CiYjNDM7CQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQlyZXR1cm4gcmV0OwomIzQzOwkJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULAomIzQzOwkJCQkJICAgTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVMpOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCWNodW5rJiM0MzsmIzQzOzsKJiM0MzsJCWNvbmRfcmVzY2hlZCgpOwomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChjaHVuayAmZ3Q7PSBtYXhfY2h1bmtzKSB7CiYjNDM7CQlkZXZfZXJyKGRldiwKJiM0MzsJCQkmIzM0O2ZsYXNoOiBpbnRlcnJ1cHRlZCBkb3dubG9hZCBkaWQgbm90IGRyYWluIGFmdGVyICV1IGNodW5rc1xuJiMzNDssCiYjNDM7CQkJY2h1bmspOwomIzQzOwkJcmV0dXJuIC1FVElNRURPVVQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsCiYjNDM7CQkJCSAgIE1YTDg2MlhYX1NCX1BESV9FTkQpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXJldHVybiBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSwKJiM0MzsJCQkJCSBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7CiYjNDM7fQomIzQzOwomIzQzOy8qIEJhY2tncm91bmQgc2VsZi1oZWFsOiBkcmFpbiBhIHdlZGdlZCBkb3dubG9hZCBiYWNrIHRvIFJFQURZIG9mZiB0aGUgZGV2bGluawomIzQzOyAqIGZsYXNoIHBhdGgsIHNvIHRoZSBtaW51dGVzLWxvbmcgcmVjb3ZlcnkgbmV2ZXIgaG9sZHMgdGhlIGRldmxpbmsgbG9jay4KJiM0MzsgKiBTY2hlZHVsZWQgZnJvbSBwcm9iZTsgcHVibGlzaGVzIHJlc2N1ZV9yZWFkeSBvbiBzdWNjZXNzLgomIzQzOyAqLwomIzQzO3ZvaWQgbXhsODYyeHhfcmVzY3VlX2hlYWxfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9CiYjNDM7CQljb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3ByaXYsIHJlc2N1ZV9oZWFsX3dvcmspOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSAmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJZGV2X2luZm8oZGV2LCAmIzM0O3JlY292ZXJpbmcgaW50ZXJydXB0ZWQgZG93bmxvYWQgaW4gYmFja2dyb3VuZFxuJiMzNDspOwomIzQzOwlyZXQgPSBteGw4NjJ4eF9yZXNjdWVfZHJhaW4ocHJpdik7CiYjNDM7CWlmICh0ZXN0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgJmFtcDtwcml2LSZndDtmbGFncykpCiYjNDM7CQlyZXR1cm47CiYjNDM7CWlmICghcmV0KSB7CiYjNDM7CQlXUklURV9PTkNFKHByaXYtJmd0O3Jlc2N1ZV9yZWFkeSwgdHJ1ZSk7CiYjNDM7CQlkZXZfaW5mbyhkZXYsICYjMzQ7cmVjb3ZlcnkgY29tcGxldGUsIHJlYWR5IHRvIGZsYXNoXG4mIzM0Oyk7CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7LyogRGV0ZWN0IE1DVWJvb3QgcmVzY3VlIG1vZGUgb3ZlciBjbGF1c2UtMjIgU01ESU8gYWxvbmUsIHNvIHRoZSBjYWxsZXIgY2FuIHJ1bGUKJiM0MzsgKiB0aGUgbG9hZGVyIG91dCBiZWZvcmUgYW55IEM0NSBBUEkgcmVxdWVzdCAod2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vIFdTUAomIzQzOyAqIGZpcm13YXJlIGFuc3dlcnMpLiBBIHNjcmF0Y2ggd3JpdGUgdG8gQUREUi9EQVRBIG11c3QgbGF0Y2ggb3IgdGhlIGNoaXAgaXMKJiM0MzsgKiBhYnNlbnQgKC1FTk9ERVYpOyBTVEFUIHRoZW4gY2xhc3NpZmllcyB0aGUgc3RhdGUsIHBva2VkIGRlc3RydWN0aXZlbHkgb25seQomIzQzOyAqIHdoZW4gMCwgdGhlIG9uZSB2YWx1ZSBhIHJ1bm5pbmcgZmlybXdhcmUgbmV2ZXIgaG9sZHM6CiYjNDM7ICoKJiM0MzsgKiAgLSAweGMzM2M6IGZsYXNobGVzcyBsb29wLCByZWFkeS4KJiM0MzsgKiAgLSAweGM1NWM6IGNvbnNvbGUgbG9vcCwgaWYgdGhlIHJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIGlzIHNlcnZpY2VkLgomIzQzOyAqICAtIG90aGVyIG5vbi16ZXJvOiBydW5uaW5nIGZpcm13YXJlLCBsZWZ0IHVucG9rZWQuCiYjNDM7ICogIC0gMDogd2VkZ2VkIHJlY2VpdmUgbG9vcCwgaWYgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBkcmFpbnMgYmFjayB0byAwLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiBNWEw4NjJYWF9JTl9SRVNDVUUsIE1YTDg2MlhYX05PVF9SRVNDVUUsIG9yIG5lZ2F0aXZlICgtRU5PREVWL1NNRElPKS4KJiM0MzsgKi8KJiM0MztpbnQgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQomIzQzO3sKJiM0MzsJaW50IHN0YXQsIGRhdCwgcmV0LCByYiwgYSwgZDsKJiM0MzsKJiM0MzsJLyogcmVzY3VlX3JlYWR5IGdhdGVzIGZsYXNoaW5nOyBhIHdlZGdlZCBsb2FkZXIgbmVlZHMgdGhlIGRyYWluIGZpcnN0LiAqLwomIzQzOwlwcml2LSZndDtyZXNjdWVfcmVhZHkgPSBmYWxzZTsKJiM0MzsKJiM0MzsJLyogUHJlc2VuY2U6IGEgbGl2ZSBjaGlwIGxhdGNoZXMgdGhlIHNjcmF0Y2ggd3JpdGUsIGFuIGFic2VudCBvbmUgZmxvYXRzLiAqLwomIzQzOwlhID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsCiYjNDM7CQkJCSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfQSk7CiYjNDM7CWlmIChhICZsdDsgMCkKJiM0MzsJCXJldHVybiBhOwomIzQzOwlkID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsCiYjNDM7CQkJCSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRCk7CiYjNDM7CWlmIChkICZsdDsgMCkKJiM0MzsJCXJldHVybiBkOwomIzQzOwlhID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUik7CiYjNDM7CWlmIChhICZsdDsgMCkKJiM0MzsJCXJldHVybiBhOwomIzQzOwlkID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7CiYjNDM7CWlmIChkICZsdDsgMCkKJiM0MzsJCXJldHVybiBkOwomIzQzOwlpZiAoKHUxNilhICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BIHx8CiYjNDM7CSAgICAodTE2KWQgIT0gTVhMODYyWFhfU0JfUERJX1BST0JFX0QpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CiYjNDM7CXN0YXQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFUKTsKJiM0MzsJaWYgKHN0YXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHN0YXQ7CiYjNDM7CiYjNDM7CS8qIEZsYXNobGVzcy1kb3dubG9hZCBsb29wOiB1bmFtYmlndW91cyByZWFkeSBtYWdpYywgbGVhdmUgaXQgYWxvbmUuICovCiYjNDM7CWlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX0RMX1JFQURZKSB7CiYjNDM7CQlwcml2LSZndDtyZXNjdWVfcmVhZHkgPSB0cnVlOwomIzQzOwkJcmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBDb25zb2xlIGxvb3AgYXQgUkVBRFk6IGNvbmZpcm0gdGhlIGxpdmUgbWFpbGJveCB3aXRoIHRoZSByZWdpc3Rlci1yZWFkCiYjNDM7CSAqIGNoYWxsZW5nZSAoY29uc3VtZXMgdGhlIG1hcmtlciBmcm9tIERBVEEgYW5kIHJlLWFybXMgUkVBRFkpLgomIzQzOwkgKi8KJiM0MzsJaWYgKCh1MTYpc3RhdCA9PSBNWEw4NjJYWF9TQl9QRElfUkVBRFkpIHsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLAomIzQzOwkJCQkJICAgTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUkspOwomIzQzOwkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULAomIzQzOwkJCQkJICAgTVhMODYyWFhfU0JfUERJX1JEUkVHKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCXJldHVybiByZXQ7CiYjNDM7CQlyYiA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLAomIzQzOwkJCQkJICAgICAgIE1YTDg2MlhYX1JFU0NVRV9SRUFEWV9USU1FT1VUX01TKTsKJiM0MzsJCWRhdCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpOwomIzQzOwkJaWYgKGRhdCAmbHQ7IDApCiYjNDM7CQkJcmV0dXJuIGRhdDsKJiM0MzsJCW14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTsKJiM0MzsJCWlmICghcmIgJmFtcDsmYW1wOyAodTE2KWRhdCAhPSBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSykgewomIzQzOwkJCXByaXYtJmd0O3Jlc2N1ZV9yZWFkeSA9IHRydWU7CiYjNDM7CQkJcmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTsKJiM0MzsJCX0KJiM0MzsJCXJldHVybiAtRU5PREVWOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIEFueSBvdGhlciBub24temVybyB2YWx1ZSBpcyBhIHJ1bm5pbmcgZmlybXdhcmUsIG5vdCBhIGxvYWRlci4gKi8KJiM0MzsJaWYgKHN0YXQpCiYjNDM7CQlyZXR1cm4gTVhMODYyWFhfTk9UX1JFU0NVRTsKJiM0MzsKJiM0MzsJLyogU1RBVCA9PSAwOiBhIHdlZGdlZCByZWNlaXZlIGxvb3AgY29uc3VtZXMgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBiYWNrCiYjNDM7CSAqIHRvIDAgKGZlZWQgb25lIERBVEEgd29yZCBmaXJzdCwgbGlrZSBhIGRyYWluIGNodW5rKS4KJiM0MzsJICovCiYjNDM7CXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLAomIzQzOwkJCQkgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIDB4MDAwMCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpOwomIzQzOwlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCAxKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwlyYiA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgMCwgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMpOwomIzQzOwlpZiAoIXJiKQomIzQzOwkJcmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTsKJiM0MzsKJiM0MzsJcmV0dXJuIC1FTk9ERVY7CiYjNDM7fQomIzQzOwomIzQzOy8qIFBvc3QtZmxhc2ggcmVwcm9iZS4gUnVucyBmcm9tIGEgc2VsZi1jb250YWluZWQgaGVhcCB3b3JrIChub3QgYSBrdGhyZWFkIGFuZAomIzQzOyAqIG5vdCB0aGUgZGV2bGluayBjYWxsZXImIzM5O3MgY29udGV4dCk6IGt0aHJlYWRfY3JlYXRlKCkgaW4gdGhlIGNhbGxlciBjb250ZXh0CiYjNDM7ICogZmFpbHMgLUVJTlRSIGlmIHRoZSBkZXZsaW5rIGNvbW1hbmQgd2FzIEN0cmwtQyYjMzk7ZCwgYW5kIHNjaGVkdWxlX3dvcmsoKSBjYW5ub3QuCiYjNDM7ICogZGV2aWNlX3JlcHJvYmUoKSAtJmd0OyByZW1vdmUoKSBmcmVlcyBwcml2LCBzbyB0aGlzIG11c3Qgbm90IHRvdWNoIHByaXY7IGl0IHVzZXMKJiM0MzsgKiBvbmx5IHRoZSBoZWxkIGRldmljZSByZWZlcmVuY2UgYW5kIGRyb3BzIGl0cyBtb2R1bGUgcmVmZXJlbmNlIGFmdGVyd2FyZHMuCiYjNDM7ICovCiYjNDM7c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfd29yayB7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXY7CiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBteGw4NjJ4eF9yZXByb2JlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKQomIzQzO3sKJiM0MzsJc3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfd29yayAqcncgPQomIzQzOwkJY29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX3dvcmssIHdvcmspOwomIzQzOwlzdHJ1Y3QgZGV2aWNlICpkZXYgPSBydy0mZ3Q7ZGV2OwomIzQzOwomIzQzOwltc2xlZXAoTVhMODYyWFhfRldfUkVQUk9CRV9ERUxBWV9NUyk7CiYjNDM7CWlmIChkZXZpY2VfcmVwcm9iZShkZXYpKQomIzQzOwkJZGV2X2VycihkZXYsICYjMzQ7cmVwcm9iZSBmYWlsZWRcbiYjMzQ7KTsKJiM0MzsJcHV0X2RldmljZShkZXYpOwomIzQzOwlrZnJlZShydyk7CiYjNDM7CW1vZHVsZV9wdXQoVEhJU19NT0RVTEUpOwomIzQzO30KJiM0MzsKJiM0MzsvKiBNQ1Vib290IGZpcm13YXJlIGltYWdlIGhlYWRlciAqLwomIzQzO3N0cnVjdCBteGw4NjJ4eF9md19oZHIgewomIzQzOwlfX2xlMzIgaW1hZ2VfdHlwZTsKJiM0MzsJX19sZTMyIGltYWdlX3NpemVfMTsKJiM0MzsJX19sZTMyIGltYWdlX2NoZWNrc3VtXzE7CiYjNDM7CV9fbGUzMiBpbWFnZV9zaXplXzI7CiYjNDM7CV9fbGUzMiBpbWFnZV9jaGVja3N1bV8yOwomIzQzO30gX19wYWNrZWQ7CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkJICAgdTMyICpwYXlsb2FkX3NpemUpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICpoZHI7CiYjNDM7CXUzMiBzaXplMSwgc2l6ZTIsIHRvdGFsOwomIzQzOwljb25zdCB1OCAqcGF5bG9hZDsKJiM0MzsJdTMyIGNyYzsKJiM0MzsKJiM0MzsJaWYgKGZ3LSZndDtzaXplICZsdDsgTVhMODYyWFhfRldfSERSX1NJWkUpCiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsKJiM0MzsJaGRyID0gKGNvbnN0IHN0cnVjdCBteGw4NjJ4eF9md19oZHIgKilmdy0mZ3Q7ZGF0YTsKJiM0MzsJcGF5bG9hZCA9IGZ3LSZndDtkYXRhICYjNDM7IE1YTDg2MlhYX0ZXX0hEUl9TSVpFOwomIzQzOwlzaXplMSA9IGxlMzJfdG9fY3B1KGhkci0mZ3Q7aW1hZ2Vfc2l6ZV8xKTsKJiM0MzsJc2l6ZTIgPSBsZTMyX3RvX2NwdShoZHItJmd0O2ltYWdlX3NpemVfMik7CiYjNDM7CiYjNDM7CWlmIChjaGVja19hZGRfb3ZlcmZsb3coc2l6ZTEsIHNpemUyLCAmYW1wO3RvdGFsKSB8fAomIzQzOwkgICAgdG90YWwgJmd0OyBmdy0mZ3Q7c2l6ZSAtIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgdG9vIHNtYWxsIGZvciBkZWNsYXJlZCBzaXplXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoIXRvdGFsKSB7CiYjNDM7CQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IGZpcm13YXJlIGZpbGUgd2l0aCBlbXB0eSBwYXlsb2FkXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAoc2l6ZTEpIHsKJiM0MzsJCWNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTsKJiM0MzsJCWlmIChjcmMgIT0gbGUzMl90b19jcHUoaGRyLSZndDtpbWFnZV9jaGVja3N1bV8xKSkgewomIzQzOwkJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJCSYjMzQ7Zmxhc2g6IGltYWdlIDEgQ1JDIG1pc21hdGNoIChnb3QgJTA4eCwgZXhwZWN0ZWQgJTA4eClcbiYjMzQ7LAomIzQzOwkJCQljcmMsIGxlMzJfdG9fY3B1KGhkci0mZ3Q7aW1hZ2VfY2hlY2tzdW1fMSkpOwomIzQzOwkJCXJldHVybiAtRUlOVkFMOwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChzaXplMikgewomIzQzOwkJY3JjID0gfmNyYzMyX2xlKH4wVSwgcGF5bG9hZCAmIzQzOyBzaXplMSwgc2l6ZTIpOwomIzQzOwkJaWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItJmd0O2ltYWdlX2NoZWNrc3VtXzIpKSB7CiYjNDM7CQkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkJJiMzNDtmbGFzaDogaW1hZ2UgMiBDUkMgbWlzbWF0Y2ggKGdvdCAlMDh4LCBleHBlY3RlZCAlMDh4KVxuJiMzNDssCiYjNDM7CQkJCWNyYywgbGUzMl90b19jcHUoaGRyLSZndDtpbWFnZV9jaGVja3N1bV8yKSk7CiYjNDM7CQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJKnBheWxvYWRfc2l6ZSA9IHRvdGFsOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwKJiM0MzsJCQkJICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdywKJiM0MzsJCQkJICAgdTMyIHBheWxvYWRfc2l6ZSwgc3RydWN0IGRldmxpbmsgKmRsKQomIzQzO3sKJiM0MzsJY29uc3QgdTggKnBheWxvYWQgPSBmdy0mZ3Q7ZGF0YSAmIzQzOyBNWEw4NjJYWF9GV19IRFJfU0laRTsKJiM0MzsJdTMyIHdvcmRfaWR4ID0gMCwgZGF0YV93cml0dGVuID0gMCwgaWR4ID0gMDsKJiM0MzsJdW5zaWduZWQgbG9uZyBuZXh0X25vdGlmeSA9IGppZmZpZXMgLSAxOwomIzQzOwl1MTYgd29yZCwgZmRhdGE7CiYjNDM7CWludCByZXQsIGk7CiYjNDM7CiYjNDM7CS8qIFN0ZXAgMTogcmVib290IHRoZSBmaXJtd2FyZSBpbnRvIE1DVWJvb3QgcmVzY3VlIG1vZGUgKi8KJiM0MzsJaWYgKCFwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJcmV0ID0gbXhsODYyeHhfYXBpX3dyYXAocHJpdiwgU1lTX01JU0NfRldfVVBEQVRFLCBOVUxMLCAwLAomIzQzOwkJCQkJZmFsc2UsIGZhbHNlKTsKJiM0MzsJCWlmIChyZXQpIHsKJiM0MzsJCQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkmIzM0O2ZsYXNoOiBGV19VUERBVEUgY29tbWFuZCBmYWlsZWQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCUVSUl9QVFIocmV0KSk7CiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwomIzQzOwkvKiBTdGVwIDI6IHdhaXQgZm9yIGJvb3Rsb2FkZXIgcmVhZHkgKi8KJiM0MzsJbXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCAmIzM0O1dhaXRpbmcgZm9yIGJvb3Rsb2FkZXImIzM0OywgMCwgMCk7CiYjNDM7CXJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIHdyaXRlX2VycjsKJiM0MzsKJiM0MzsJLyogRmFpbHVyZXMgZnJvbSBoZXJlIG9uIG11c3QgZ28gdGhyb3VnaCBlbmRfbWFnaWMgc28gTUNVYm9vdAomIzQzOwkgKiByZWJvb3RzIGluc3RlYWQgb2Ygd2FpdGluZyBmb3JldmVyLgomIzQzOwkgKi8KJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksCiYjNDM7CQkJCQlNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTsKJiM0MzsJaWYgKHJldCkgewomIzQzOwkJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwKJiM0MzsJCQkmIzM0O2ZsYXNoOiBib290bG9hZGVyIG5vdCByZWFkeTogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU3RlcCAzOiBzdGFydCBoYW5kc2hha2UgKi8KJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsCiYjNDM7CQkJCSAgIE1YTDg2MlhYX1NCX1BESV9TVEFSVCk7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byB3cml0ZV9lcnI7CiYjNDM7CiYjNDM7CXJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVJUICYjNDM7IDEsCiYjNDM7CQkJCQlNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtmbGFzaDogc3RhcnQgaGFuZHNoYWtlIGZhaWxlZDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU3RlcCA0OiB0cmFuc2ZlciBpbWFnZSBoZWFkZXIgKi8KJiM0MzsJbXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCAmIzM0O0VyYXNpbmcgZmxhc2gmIzM0OywgMCwgMCk7CiYjNDM7CXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLAomIzQzOwkJCQkgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byB3cml0ZV9lcnI7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBNWEw4NjJYWF9GV19IRFJfU0laRSAvIDI7IGkmIzQzOyYjNDM7KSB7CiYjNDM7CQl3b3JkID0gZnctJmd0O2RhdGFbaSAqIDJdIHwKJiM0MzsJCSAgICAgICAoKHUxNilmdy0mZ3Q7ZGF0YVtpICogMiAmIzQzOyAxXSAmbHQ7Jmx0OyA4KTsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCB3b3JkKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwl9CiYjNDM7CiYjNDM7CXJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIHdyaXRlX2VycjsKJiM0MzsKJiM0MzsJLyogdGhlIGJ5dGUgY291bnQgaW4gU1RBVCB0cmlnZ2VycyB0aGUgZXJhc2UgKi8KJiM0MzsJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsCiYjNDM7CQkJCSAgIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKTsKJiM0MzsJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQlnb3RvIHdyaXRlX2VycjsKJiM0MzsKJiM0MzsJLyogQUNLIGlzIGJ5dGUgY291bnQgJiM0MzsgMSAqLwomIzQzOwlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX0ZXX0hEUl9TSVpFICYjNDM7IDEsCiYjNDM7CQkJCQlNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtmbGFzaDogaGVhZGVyIEFDSyBmYWlsZWQ6ICVwZVxuJiMzNDssIEVSUl9QVFIocmV0KSk7CiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFN0ZXAgNTogd2FpdCBmb3IgZXJhc2UgdG8gY29tcGxldGUgKi8KJiM0MzsJcmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLAomIzQzOwkJCQkJTVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NUyk7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CX0KJiM0MzsKJiM0MzsJLyogU3RlcCA2OiB0cmFuc2ZlciBwYXlsb2FkICovCiYjNDM7CXJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLAomIzQzOwkJCQkgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7CiYjNDM7CWlmIChyZXQgJmx0OyAwKQomIzQzOwkJZ290byB3cml0ZV9lcnI7CiYjNDM7CiYjNDM7CXdoaWxlIChpZHggJmx0OyBwYXlsb2FkX3NpemUpIHsKJiM0MzsJCWlmIChpZHggJiM0MzsgMSAmbHQ7IHBheWxvYWRfc2l6ZSkgewomIzQzOwkJCWZkYXRhID0gcGF5bG9hZFtpZHhdIHwKJiM0MzsJCQkJKCh1MTYpcGF5bG9hZFtpZHggJiM0MzsgMV0gJmx0OyZsdDsgOCk7CiYjNDM7CQkJaWR4ICYjNDM7PSAyOwomIzQzOwkJCWRhdGFfd3JpdHRlbiAmIzQzOz0gMjsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZmRhdGEgPSBwYXlsb2FkW2lkeF07CiYjNDM7CQkJaWR4JiM0MzsmIzQzOzsKJiM0MzsJCQlkYXRhX3dyaXR0ZW4mIzQzOyYjNDM7OwomIzQzOwkJfQomIzQzOwomIzQzOwkJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIGZkYXRhKTsKJiM0MzsJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwkJd29yZF9pZHgmIzQzOyYjNDM7OwomIzQzOwomIzQzOwkJaWYgKGlkeCAmZ3Q7PSBwYXlsb2FkX3NpemUpIHsKJiM0MzsJCQlyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTsKJiM0MzsJCQlicmVhazsKJiM0MzsJCX0KJiM0MzsKJiM0MzsJCS8qIEhhbGYtYmFuayBib3VuZGFyeTogc3dpdGNoIHRvIFNCMSBhZGRyZXNzICovCiYjNDM7CQlpZiAod29yZF9pZHggPT0gTVhMODYyWFhfRldfQkFOS19IQUxGKSB7CiYjNDM7CQkJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsCiYjNDM7CQkJCQkJICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTsKJiM0MzsJCQlpZiAocmV0ICZsdDsgMCkKJiM0MzsJCQkJZ290byB3cml0ZV9lcnI7CiYjNDM7CiYjNDM7CQkJcmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsCiYjNDM7CQkJCQkJICAgTVhMODYyWFhfRldfU0IxX0FERFIpOwomIzQzOwkJCWlmIChyZXQgJmx0OyAwKQomIzQzOwkJCQlnb3RvIHdyaXRlX2VycjsKJiM0MzsKJiM0MzsJCQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJCQkgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwkJfSBlbHNlIGlmICh3b3JkX2lkeCAmZ3Q7PSBNWEw4NjJYWF9GV19CQU5LX1NMSUNFKSB7CiYjNDM7CQkJcmV0ID0gbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHByaXYsIGRhdGFfd3JpdHRlbik7CiYjNDM7CQkJaWYgKHJldCkgewomIzQzOwkJCQlkZXZfZXJyKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7ZGV2LAomIzQzOwkJCQkJJiMzNDtmbGFzaDogd3JpdGUgdGltZW91dCBhdCAldS8ldTogJXBlXG4mIzM0OywKJiM0MzsJCQkJCWlkeCwgcGF5bG9hZF9zaXplLCBFUlJfUFRSKHJldCkpOwomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJCX0KJiM0MzsJCQl3b3JkX2lkeCA9IDA7CiYjNDM7CQkJZGF0YV93cml0dGVuID0gMDsKJiM0MzsJCQlyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCwKJiM0MzsJCQkJCQkgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7CiYjNDM7CQkJaWYgKHJldCAmbHQ7IDApCiYjNDM7CQkJCWdvdG8gd3JpdGVfZXJyOwomIzQzOwomIzQzOwkJCWlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG5leHRfbm90aWZ5KSkgewomIzQzOwkJCQlteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsICYjMzQ7Rmxhc2hpbmcmIzM0OywgaWR4LAomIzQzOwkJCQkJCSAgICAgIHBheWxvYWRfc2l6ZSk7CiYjNDM7CQkJCW5leHRfbm90aWZ5ID0gamlmZmllcyAmIzQzOyBtc2Vjc190b19qaWZmaWVzKDUwMCk7CiYjNDM7CQkJfQomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CWlmIChyZXQpIHsKJiM0MzsJCWRldl9lcnIoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtkZXYsCiYjNDM7CQkJJiMzNDtmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXG4mIzM0OywgRVJSX1BUUihyZXQpKTsKJiM0MzsJCWdvdG8gZW5kX21hZ2ljOwomIzQzOwl9CiYjNDM7CiYjNDM7CW14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgJiMzNDtGbGFzaGluZyYjMzQ7LCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7CiYjNDM7CWdvdG8gZW5kX21hZ2ljOwomIzQzOwomIzQzO3dyaXRlX2VycjoKJiM0MzsJZGV2X2VycigmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2RldiwgJiMzNDtmbGFzaDogU01ESU8gd3JpdGUgZmFpbGVkOiAlcGVcbiYjMzQ7LAomIzQzOwkJRVJSX1BUUihyZXQpKTsKJiM0MztlbmRfbWFnaWM6CiYjNDM7CS8qIHJlYm9vdCBNQ1Vib290IGV2ZW4gYWZ0ZXIgYSBmYWlsZWQgdHJhbnNmZXIgKi8KJiM0MzsJbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsCiYjNDM7CQkJICAgICBNWEw4NjJYWF9TQl9QRElfRU5EKTsKJiM0MzsJbXNsZWVwKE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUyk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CWNoYXIgYnVmWzE2XTsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJLyogTm8gY2hpcC1pZC9yZXZpc2lvbiBpbiBNQ1Vib290IChuZWVkcyB0aGUgZmlybXdhcmUgTU1EIG1haWxib3gpLiBUaGUKJiM0MzsJICogZncgdmVyc2lvbiBkb3VibGVzIGFzIHRoZSAmIzM0O3JlYWR5IHRvIGZsYXNoJiMzNDsgc2lnbmFsOiByZXBvcnQgaXQgb25seQomIzQzOwkgKiBvbmNlIHRoZSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSwgbm90aGluZyB3aGlsZSBzdGlsbCBkcmFpbmluZy4KJiM0MzsJICovCiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkgewomIzQzOwkJaWYgKCFSRUFEX09OQ0UocHJpdi0mZ3Q7cmVzY3VlX3JlYWR5KSkKJiM0MzsJCQlyZXR1cm4gMDsKJiM0MzsKJiM0MzsJCXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7JXUuJXUuJXUmIzM0OywKJiM0MzsJCQkgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5tYWpvciwgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5taW5vciwKJiM0MzsJCQkgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5yZXZpc2lvbik7CiYjNDM7CQlyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsICYjMzQ7ZncmIzM0OywgYnVmKTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsJCXJldHVybiBkZXZsaW5rX2luZm9fdmVyc2lvbl9zdG9yZWRfcHV0KHJlcSwgJiMzNDtmdyYjMzQ7LCBidWYpOwomIzQzOwl9CiYjNDM7CiYjNDM7CXNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICYjMzQ7JTA0WCYjMzQ7LCBwcml2LSZndDthc2ljX2lkKTsKJiM0MzsJcmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fZml4ZWRfcHV0KHJlcSwKJiM0MzsJCQkJCSAgICAgREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19BU0lDX0lELAomIzQzOwkJCQkJICAgICBidWYpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJc25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgJiMzNDsldSYjMzQ7LCBwcml2LSZndDthc2ljX3Jldik7CiYjNDM7CXJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsCiYjNDM7CQkJCQkgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19SRVYsCiYjNDM7CQkJCQkgICAgIGJ1Zik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwlzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAmIzM0OyV1LiV1LiV1JiMzNDssCiYjNDM7CQkgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5tYWpvciwgcHJpdi0mZ3Q7ZndfdmVyc2lvbi5taW5vciwKJiM0MzsJCSBwcml2LSZndDtmd192ZXJzaW9uLnJldmlzaW9uKTsKJiM0MzsKJiM0MzsJcmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLCAmIzM0O2Z3JiMzNDssIGJ1Zik7CiYjNDM7CWlmIChyZXQpCiYjNDM7CQlyZXR1cm4gcmV0OwomIzQzOwomIzQzOwkvKiBib290cyB0aGlzIGltYWdlIGZyb20gaXRzIG93biBmbGFzaDogc3RvcmVkID09IHJ1bm5pbmcgKi8KJiM0MzsJcmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCAmIzM0O2Z3JiMzNDssIGJ1Zik7CiYjNDM7fQomIzQzOwomIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiYjNDM7CQkJCSAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCQkgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CXN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX3dvcmsgKnJ3OwomIzQzOwlzdHJ1Y3QgZHNhX3BvcnQgKmRwOwomIzQzOwl1MzIgcGF5bG9hZF9zaXplOwomIzQzOwlpbnQgcmV0LCBpOwomIzQzOwomIzQzOwlpZiAocGFyYW1zLSZndDtjb21wb25lbnQpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssICYjMzQ7Y29tcG9uZW50IGlzIG5vdCBzdXBwb3J0ZWQmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVPUE5PVFNVUFA7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gbXhsODYyeHhfZmxhc2hfdmFsaWRhdGUocHJpdiwgcGFyYW1zLSZndDtmdywgJmFtcDtwYXlsb2FkX3NpemUpOwomIzQzOwlpZiAocmV0KSB7CiYjNDM7CQlOTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCAmIzM0O2Zpcm13YXJlIGltYWdlIHZhbGlkYXRpb24gZmFpbGVkJiMzNDspOwomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJfQomIzQzOwomIzQzOwkvKiBSZWZ1c2UgdG8gZmxhc2ggd2hpbGUgdGhlIGJhY2tncm91bmQgc2VsZi1oZWFsIGlzIHN0aWxsIGRyYWluaW5nLiAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUgJmFtcDsmYW1wOyAhUkVBRF9PTkNFKHByaXYtJmd0O3Jlc2N1ZV9yZWFkeSkpIHsKJiM0MzsJCU5MX1NFVF9FUlJfTVNHX01PRChleHRhY2ssCiYjNDM7CQkJCSAgICYjMzQ7c3dpdGNoIGlzIHJlY292ZXJpbmcgYW4gaW50ZXJydXB0ZWQgZG93bmxvYWQsIHJldHJ5IHNob3J0bHkmIzM0Oyk7CiYjNDM7CQlyZXR1cm4gLUVCVVNZOwomIzQzOwl9CiYjNDM7CiYjNDM7CS8qIFRoZSByZWZlcmVuY2VzIHRoZSByZXByb2JlIHdvcmsgbmVlZHMgdG8gcmVzdG9yZSBub3JtYWwgb3BlcmF0aW9uCiYjNDM7CSAqIG11c3QgYmUgaGVsZCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQ7IHRoZSB3b3JrIGl0c2VsZiBpcwomIzQzOwkgKiBzY2hlZHVsZWQgb25seSBvbmNlIHRoZSBmbGFzaCBpcyBkb25lIChzZWUgYmVsb3cpLgomIzQzOwkgKi8KJiM0MzsJaWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpCiYjNDM7CQlyZXR1cm4gLUVOT0RFVjsKJiM0MzsKJiM0MzsJZ2V0X2RldmljZShkcy0mZ3Q7ZGV2KTsKJiM0MzsKJiM0MzsJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKQomIzQzOwkJZGV2X2luZm8oZHMtJmd0O2RldiwKJiM0MzsJCQkgJiMzNDtmbGFzaDogZmxhc2hpbmcgc3dpdGNoIHZpYSBNQ1Vib290IHJlc2N1ZSBtb2RlXG4mIzM0Oyk7CiYjNDM7CWVsc2UKJiM0MzsJCWRldl9pbmZvKGRzLSZndDtkZXYsICYjMzQ7Zmxhc2g6IHJ1bm5pbmcgZmlybXdhcmUgJXUuJXUuJXVcbiYjMzQ7LAomIzQzOwkJCSBwcml2LSZndDtmd192ZXJzaW9uLm1ham9yLCBwcml2LSZndDtmd192ZXJzaW9uLm1pbm9yLAomIzQzOwkJCSBwcml2LSZndDtmd192ZXJzaW9uLnJldmlzaW9uKTsKJiM0MzsKJiM0MzsJLyogQ2xvc2UgcG9ydHMgd2hpbGUgdGhlIGZpcm13YXJlIGlzIHN0aWxsIGFsaXZlIHNvIHRoZSBEU0EKJiM0MzsJICogY29yZSYjMzk7cyBNREIvRkRCIHRyYWNraW5nIGlzIGRyYWluZWQsIGFuZCBkZXRhY2ggdXNlciBwb3J0cwomIzQzOwkgKiBzbyB1c2Vyc3BhY2UgY2Fubm90IHJlb3BlbiB0aGVtIGR1cmluZyB0aGUgZmxhc2guIFRoZQomIzQzOwkgKiBjb25kdWl0IGJlbG9uZ3MgdG8gdGhlIE1BQyBkcml2ZXIgYW5kIGlzIG9ubHkgY2xvc2VkLgomIzQzOwkgKi8KJiM0MzsJcnRubF9sb2NrKCk7CiYjNDM7CWRzYV9zd2l0Y2hfZm9yX2VhY2hfdXNlcl9wb3J0KGRwLCBkcykgewomIzQzOwkJaWYgKGRwLSZndDt1c2VyKSB7CiYjNDM7CQkJZGV2X2Nsb3NlKGRwLSZndDt1c2VyKTsKJiM0MzsJCQluZXRpZl9kZXZpY2VfZGV0YWNoKGRwLSZndDt1c2VyKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwlkc2Ffc3dpdGNoX2Zvcl9lYWNoX2NwdV9wb3J0KGRwLCBkcykKJiM0MzsJCWRldl9jbG9zZShkcC0mZ3Q7Y29uZHVpdCk7CiYjNDM7CS8qIFRoZSBicmlkZ2UgZGVmZXJzIHRoZSBTVFAgc3RhdGUgY2hhbmdlcyB0cmlnZ2VyZWQgYnkgY2xvc2luZwomIzQzOwkgKiB0aGUgcG9ydHM7IGxldCB0aGVtIHJlYWNoIHRoZSBmaXJtd2FyZSB3aGlsZSBpdCBpcyBzdGlsbCBhbGl2ZS4KJiM0MzsJICovCiYjNDM7CXN3aXRjaGRldl9kZWZlcnJlZF9wcm9jZXNzKCk7CiYjNDM7CXJ0bmxfdW5sb2NrKCk7CiYjNDM7CiYjNDM7CW11dGV4X2xvY2tfbmVzdGVkKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTsKJiM0MzsJcHJpdi0mZ3Q7YmxvY2tfaG9zdCA9IHRydWU7CiYjNDM7CW11dGV4X3VubG9jaygmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsKJiM0MzsJc2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgJmFtcDtwcml2LSZndDtmbGFncyk7CiYjNDM7CWNhbmNlbF9kZWxheWVkX3dvcmtfc3luYygmYW1wO3ByaXYtJmd0O3N0YXRzX3dvcmspOwomIzQzOwljYW5jZWxfd29ya19zeW5jKCZhbXA7cHJpdi0mZ3Q7Y3JjX2Vycl93b3JrKTsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IGRzLSZndDtudW1fcG9ydHM7IGkmIzQzOyYjNDM7KQomIzQzOwkJY2FuY2VsX3dvcmtfc3luYygmYW1wO3ByaXYtJmd0O3BvcnRzW2ldLmhvc3RfZmxvb2Rfd29yayk7CiYjNDM7CiYjNDM7CXJldCA9IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHByaXYsIHBhcmFtcy0mZ3Q7ZncsIHBheWxvYWRfc2l6ZSwKJiM0MzsJCQkJICAgICAgZHMtJmd0O2RldmxpbmspOwomIzQzOwlpZiAocmV0KQomIzQzOwkJTkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgJiMzNDtmaXJtd2FyZSB0cmFuc2ZlciBmYWlsZWQmIzM0Oyk7CiYjNDM7CiYjNDM7CWlmICghcmV0KSB7CiYjNDM7CQltdXRleF9sb2NrX25lc3RlZCgmYW1wO3ByaXYtJmd0O21kaW9kZXYtJmd0O2J1cy0mZ3Q7bWRpb19sb2NrLAomIzQzOwkJCQkgIE1ESU9fTVVURVhfTkVTVEVEKTsKJiM0MzsJCXByaXYtJmd0O3Jlc2N1ZV9tb2RlID0gZmFsc2U7CiYjNDM7CQltdXRleF91bmxvY2soJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CQkvKiBUaGUgcmVwcm9iZSBiZWxvdyByZS1yZWFkcyBhbmQgbG9ncyB0aGUgbmV3IHZlcnNpb24uICovCiYjNDM7CX0KJiM0MzsKJiM0MzsJbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpOwomIzQzOwlwcml2LSZndDtza2lwX3RlYXJkb3duID0gdHJ1ZTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7cHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzLSZndDttZGlvX2xvY2spOwomIzQzOwomIzQzOwkvKiBIYW5kIHRoZSByZXByb2JlIHRvIGEgc2VsZi1jb250YWluZWQgd29yaywgc2NoZWR1bGVkIGxhc3QuIERvaW5nIGl0CiYjNDM7CSAqIGZyb20gYSB3b3JrIChyYXRoZXIgdGhhbiBhIGt0aHJlYWQgc3Bhd25lZCBoZXJlKSBhdm9pZHMgYm90aCB0aGUKJiM0MzsJICogaHVuZy10YXNrIHNwbGF0IG9mIGEgdGhyZWFkIHBhcmtlZCBhY3Jvc3MgdGhlIGZsYXNoIGFuZCB0aGUgLUVJTlRSCiYjNDM7CSAqIHRoYXQga3RocmVhZF9jcmVhdGUoKSByZXR1cm5zIGlmIHRoZSBkZXZsaW5rIGNvbW1hbmQgd2FzIEN0cmwtQyYjMzk7ZC4KJiM0MzsJICogSXRzIG1vZHVsZSBhbmQgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGFscmVhZHkgaGVsZCBhYm92ZS4KJiM0MzsJICovCiYjNDM7CXJ3ID0ga3phbGxvY19vYmooKnJ3KTsKJiM0MzsJaWYgKCFydykgewomIzQzOwkJZGV2X2Vycihkcy0mZ3Q7ZGV2LAomIzQzOwkJCSYjMzQ7Zmxhc2g6IG91dCBvZiBtZW1vcnkgZm9yIHJlcHJvYmU7IHJlbG9hZCB0aGUgZHJpdmVyIHRvIHJlc3RvcmUgb3BlcmF0aW9uXG4mIzM0Oyk7CiYjNDM7CQlwdXRfZGV2aWNlKGRzLSZndDtkZXYpOwomIzQzOwkJbW9kdWxlX3B1dChUSElTX01PRFVMRSk7CiYjNDM7CQlyZXR1cm4gcmV0ID8gcmV0IDogLUVOT01FTTsKJiM0MzsJfQomIzQzOwlJTklUX1dPUksoJmFtcDtydy0mZ3Q7d29yaywgbXhsODYyeHhfcmVwcm9iZV93b3JrX2ZuKTsKJiM0MzsJcnctJmd0O2RldiA9IGRzLSZndDtkZXY7CiYjNDM7CXNjaGVkdWxlX3dvcmsoJmFtcDtydy0mZ3Q7d29yayk7CiYjNDM7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uN2NkODdjN2FkODcxNjcKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaApAQCAtMCwwICYjNDM7MSwyMCBAQAomIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyICovCiYjNDM7CiYjNDM7I2lmbmRlZiBfX01YTDg2MlhYX0ZXX0gKJiM0MzsjZGVmaW5lIF9fTVhMODYyWFhfRldfSAomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IG14bDg2Mnh4X3ByaXY7CiYjNDM7c3RydWN0IHdvcmtfc3RydWN0OwomIzQzOwomIzQzO2ludCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpOwomIzQzO3ZvaWQgbXhsODYyeHhfcmVzY3VlX2hlYWxfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspOwomIzQzO2ludCBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkgICAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLAomIzQzOwkJCSAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7aW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKJiM0MzsJCQkJICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJCSAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTsKJiM0MzsKJiM0MzsjZW5kaWYgLyogX19NWEw4NjJYWF9GV19IICovCmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuYwppbmRleCA0YWNkMjE2ZjdjYzAwOS4uMmRiZDA3NGMwZmUyNmMgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuYwpAQCAtMTUsNiAmIzQzOzE1LDggQEAKICNpbmNsdWRlICZsdDtsaW51eC91bmFsaWduZWQuaCZndDsKICNpbmNsdWRlICZsdDtuZXQvZHNhLmgmZ3Q7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtY21kLmgmIzM0OwomIzQzOyNpbmNsdWRlICYjMzQ7bXhsODYyeHgtZncuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWhvc3QuaCYjMzQ7CiAKICNkZWZpbmUgQ1RSTF9CVVNZX01BU0sJCQlCSVQoMTUpCkBAIC0zNDAsNiAmIzQzOzM0MiwyMSBAQCBpbnQgbXhsODYyeHhfYXBpX3dyYXAoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUxNiBjbWQsIHZvaWQgKl9kYXRhLAogCiAJbXV0ZXhfbG9ja19uZXN0ZWQoJmFtcDtwcml2LSZndDttZGlvZGV2LSZndDtidXMtJmd0O21kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpOwogCiYjNDM7CWlmIChwcml2LSZndDtza2lwX3RlYXJkb3duKSB7CiYjNDM7CQlyZXQgPSByZWFkID8gLUVOT0RFViA6IDA7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpIHsKJiM0MzsJCXJldCA9IC1FTk9ERVY7CiYjNDM7CQlnb3RvIG91dDsKJiM0MzsJfQomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7YmxvY2tfaG9zdCAmYW1wOyZhbXA7IGNtZCAhPSBTWVNfTUlTQ19GV19VUERBVEUpIHsKJiM0MzsJCXJldCA9IC1FQlVTWTsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJbWF4ID0gKHNpemUgJiM0MzsgMSkgLyAyOwogCiAJcmV0ID0gbXhsODYyeHhfYnVzeV93YWl0KHByaXYpOwpAQCAtNDk1LDEyICYjNDM7NTEyLDQ5IEBAIGludCBteGw4NjJ4eF9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdikKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9TTURJT19BRERSX1JFRwkJMHgxZgomIzQzOyNkZWZpbmUgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLCTB4ZmZmMAomIzQzOyNkZWZpbmUgTVhMODYyWFhfU01ESU9fT0ZGX01BU0sJCTB4MDAwZgomIzQzOwomIzQzO2ludCBteGw4NjJ4eF9zbWRpb19yZWFkKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkcikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LSZndDttZGlvZGV2LSZndDtidXM7CiYjNDM7CWludCBwaHkgPSBwcml2LSZndDttZGlvZGV2LSZndDthZGRyOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwltdXRleF9sb2NrKCZhbXA7YnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLAomIzQzOwkJCSAgICAgIGFkZHIgJmFtcDsgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLKTsKJiM0MzsJaWYgKHJldCAmZ3Q7PSAwKQomIzQzOwkJcmV0ID0gX19tZGlvYnVzX3JlYWQoYnVzLCBwaHksIGFkZHIgJmFtcDsgTVhMODYyWFhfU01ESU9fT0ZGX01BU0spOwomIzQzOwltdXRleF91bmxvY2soJmFtcDtidXMtJmd0O21kaW9fbG9jayk7CiYjNDM7CXJldHVybiByZXQ7CiYjNDM7fQomIzQzOwomIzQzO2ludCBteGw4NjJ4eF9zbWRpb193cml0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUxNiB2YWwpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YnVzOwomIzQzOwlpbnQgcGh5ID0gcHJpdi0mZ3Q7bWRpb2Rldi0mZ3Q7YWRkcjsKJiM0MzsJaW50IHJldDsKJiM0MzsKJiM0MzsJbXV0ZXhfbG9jaygmYW1wO2J1cy0mZ3Q7bWRpb19sb2NrKTsKJiM0MzsJcmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRywKJiM0MzsJCQkgICAgICBhZGRyICZhbXA7IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7CiYjNDM7CWlmIChyZXQgJmd0Oz0gMCkKJiM0MzsJCXJldCA9IF9fbWRpb2J1c193cml0ZShidXMsIHBoeSwgYWRkciAmYW1wOyBNWEw4NjJYWF9TTURJT19PRkZfTUFTSywKJiM0MzsJCQkJICAgICAgdmFsKTsKJiM0MzsJbXV0ZXhfdW5sb2NrKCZhbXA7YnVzLSZndDttZGlvX2xvY2spOwomIzQzOwlyZXR1cm4gcmV0OwomIzQzO30KJiM0MzsKIHZvaWQgbXhsODYyeHhfaG9zdF9pbml0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KQogewogCUlOSVRfV09SSygmYW1wO3ByaXYtJmd0O2NyY19lcnJfd29yaywgbXhsODYyeHhfY3JjX2Vycl93b3JrX2ZuKTsKJiM0MzsJSU5JVF9XT1JLKCZhbXA7cHJpdi0mZ3Q7cmVzY3VlX2hlYWxfd29yaywgbXhsODYyeHhfcmVzY3VlX2hlYWxfd29ya19mbik7CiB9CiAKIHZvaWQgbXhsODYyeHhfaG9zdF9zaHV0ZG93bihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdikKIHsKIAljYW5jZWxfd29ya19zeW5jKCZhbXA7cHJpdi0mZ3Q7Y3JjX2Vycl93b3JrKTsKJiM0MzsJY2FuY2VsX3dvcmtfc3luYygmYW1wO3ByaXYtJmd0O3Jlc2N1ZV9oZWFsX3dvcmspOwogfQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmgKaW5kZXggNjZkNmFlMTk4YWZmNDUuLjRlMDU0YzZlNGMwZTQwIDEwMDY0NAotLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmgKQEAgLTE4LDUgJiM0MzsxOCw3IEBAIGludCBteGw4NjJ4eF9hcGlfd3JhcChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGNtZCwgdm9pZCAqZGF0YSwgdTE2IHNpemUsCiAJbXhsODYyeHhfYXBpX3dyYXAoZGV2LCBjbWQsICZhbXA7KGRhdGEpLCBzaXplb2YoKGRhdGEpKSwgdHJ1ZSwgdHJ1ZSkKIAogaW50IG14bDg2Mnh4X3Jlc2V0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KTsKJiM0MztpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpOwomIzQzO2ludCBteGw4NjJ4eF9zbWRpb193cml0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIsIHUxNiB2YWwpOwogCiAjZW5kaWYgLyogX19NWEw4NjJYWF9IT1NUX0ggKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1waHlsaW5rLmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jCmluZGV4IGI2ODk2NTJhYTliOTIwLi5hNWI2OTQwYjU1MmU5ZSAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuYwomIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jCkBAIC00MDYsNiAmIzQzOzQwNiw4IEBAIG14bDg2Mnh4X3BoeWxpbmtfbWFjX3NlbGVjdF9wY3Moc3RydWN0IHBoeWxpbmtfY29uZmlnICpjb25maWcsCiAKIAlzd2l0Y2ggKHBvcnQpIHsKIAljYXNlIDkgLi4uIDE2OgomIzQzOwkJaWYgKHByaXYtJmd0O3Jlc2N1ZV9tb2RlKQomIzQzOwkJCXJldHVybiBOVUxMOwogCQlpZiAoIU1YTDg2MlhYX0ZXX1ZFUl9NSU4ocHJpdiwgMSwgMCwgODQpKSB7CiAJCQlkZXZfd2Fybl9vbmNlKGRwLSZndDtkcy0mZ3Q7ZGV2LAogCQkJCSAgICAgICYjMzQ7U2VyRGVzIFBDUyB1bnN1cHBvcnRlZCBvbiBvbGQgZmlybXdhcmUuXG4mIzM0Oyk7CmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jCmluZGV4IDQ1ZDIzN2IzYTQwZjEwLi45YWM2NjhjMTNjOWU3MCAxMDA2NDQKLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMKJiM0MzsmIzQzOyYjNDM7IGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMKQEAgLTIxLDYgJiM0MzsyMSw3IEBACiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtteGw4NjJ4eC1hcGkuaCYjMzQ7CiAjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWNtZC5oJiMzNDsKJiM0MzsjaW5jbHVkZSAmIzM0O214bDg2Mnh4LWZ3LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtteGw4NjJ4eC1ob3N0LmgmIzM0OwogI2luY2x1ZGUgJiMzNDtteGw4NjJ4eC1waHlsaW5rLmgmIzM0OwogCkBAIC03MSw2ICYjNDM7NzIsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBteGw4NjJ4eF9ybW9uX3Jhbmdlc1tdID0gewogI2RlZmluZSBNWEw4NjJYWF9SRUFEWV9USU1FT1VUX01TCTEwMDAwCiAjZGVmaW5lIE1YTDg2MlhYX1JFQURZX1BPTExfTVMJCTEwMAogCiYjNDM7LyogQ2hpcCBJRCByZWdpc3RlcnMsIHJlYWQgdmlhIFNZU19NSVNDX1JFR19SRCAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX0wJCTB4YzBkMjg4ODQKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NCQkweGMwZDI4ODg4CiYjNDM7I2RlZmluZSBNWEw4NjJYWF9DSElQSURfTF9QTlVNTAkJR0VOTUFTSygxNSwgMTIpCiYjNDM7I2RlZmluZSBNWEw4NjJYWF9DSElQSURfTV9QTlVNTQkJR0VOTUFTSygxMSwgMCkKJiM0MzsjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NX1ZFUlNJT04JR0VOTUFTSygxNCwgMTIpCiYjNDM7CiAjZGVmaW5lIE1YTDg2MlhYX1RDTV9JTlNUX1NFTAkJMHhlMDAKICNkZWZpbmUgTVhMODYyWFhfVENNX0NCUwkJMHhlMTIKICNkZWZpbmUgTVhMODYyWFhfVENNX0VCUwkJMHhlMTMKQEAgLTIyMiw2ICYjNDM7MjMwLDM1IEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcGh5X3dyaXRlX2M0NV9taWlfYnVzKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBhZGRyLAogCXJldHVybiBteGw4NjJ4eF9waHlfd3JpdGVfbW1kKGJ1cy0mZ3Q7cHJpdiwgYWRkciwgZGV2YWRkLCByZWdudW0sIHZhbCk7CiB9CiAKJiM0MzsvKiBSZWFkIHRoZSBzdGF0aWMgY2hpcCBwYXJ0IG51bWJlciBhbmQgdmVyc2lvbiBmcm9tIHRoZSBDSElQIElECiYjNDM7ICogcmVnaXN0ZXJzLiBPbmx5IHBvc3NpYmxlIHdpdGggYSBydW5uaW5nIGZpcm13YXJlLCBzbyB0aGUgdmFsdWVzIGFyZQomIzQzOyAqIGNhY2hlZCBhdCBzZXR1cCBhbmQgbGVmdCB6ZXJvIHdoZW4gdGhlIHN3aXRjaCBpcyBpbiByZXNjdWUgbW9kZS4KJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdikKJiM0Mzt7CiYjNDM7CXN0cnVjdCBteGw4NjJ4eF9zeXNfcmVnX3J3IHJlZyA9IHt9OwomIzQzOwl1MTYgY2hpcGlkX2wsIGNoaXBpZF9tOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZWcuYWRkciA9IGNwdV90b19sZTMyKE1YTDg2MlhYX0NISVBJRF9MKTsKJiM0MzsJcmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgU1lTX01JU0NfUkVHX1JELCByZWcpOwomIzQzOwlpZiAocmV0KQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJY2hpcGlkX2wgPSBsZTMyX3RvX2NwdShyZWcudmFsKTsKJiM0MzsKJiM0MzsJcmVnLmFkZHIgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9DSElQSURfTSk7CiYjNDM7CXJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIFNZU19NSVNDX1JFR19SRCwgcmVnKTsKJiM0MzsJaWYgKHJldCkKJiM0MzsJCXJldHVybiByZXQ7CiYjNDM7CWNoaXBpZF9tID0gbGUzMl90b19jcHUocmVnLnZhbCk7CiYjNDM7CiYjNDM7CXByaXYtJmd0O2FzaWNfaWQgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX0xfUE5VTUwsIGNoaXBpZF9sKSB8CiYjNDM7CQkJRklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NLCBjaGlwaWRfbSkgJmx0OyZsdDsgNDsKJiM0MzsJcHJpdi0mZ3Q7YXNpY19yZXYgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTiwgY2hpcGlkX20pOwomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKQogewogCXN0cnVjdCBteGw4NjJ4eF9zeXNfZndfaW1hZ2VfdmVyc2lvbiB2ZXIgPSB7fTsKQEAgLTI1NCw2ICYjNDM7MjkxLDExIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiAJCXByaXYtJmd0O2Z3X3ZlcnNpb24ubWFqb3IgPSB2ZXIuaXZfbWFqb3I7CiAJCXByaXYtJmd0O2Z3X3ZlcnNpb24ubWlub3IgPSB2ZXIuaXZfbWlub3I7CiAJCXByaXYtJmd0O2Z3X3ZlcnNpb24ucmV2aXNpb24gPSBsZTE2X3RvX2NwdSh2ZXIuaXZfcmV2aXNpb24pOwomIzQzOwomIzQzOwkJcmV0ID0gbXhsODYyeHhfcmVhZF9jaGlwX2lkKHByaXYpOwomIzQzOwkJaWYgKHJldCkKJiM0MzsJCQlkZXZfd2Fybihkcy0mZ3Q7ZGV2LCAmIzM0O2ZhaWxlZCB0byByZWFkIGNoaXAgSUQ6ICVwZVxuJiMzNDssCiYjNDM7CQkJCSBFUlJfUFRSKHJldCkpOwogCQlyZXR1cm4gMDsKIAogbm90X3JlYWR5X3lldDoKQEAgLTYyMiwxNSAmIzQzOzY2NCw0OSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIAlpbnQgbl91c2VyX3BvcnRzID0gMCwgbWF4X3ZsYW5zOwogCWludCBpbmdyZXNzX2ZpbmFscywgdmlkX3J1bGVzOwogCXN0cnVjdCBkc2FfcG9ydCAqZHA7Ci0JaW50IHJldCwgaTsKJiM0MzsJaW50IHJldCwgaSwgcmVzY3VlOwogCi0JcmV0ID0gbXhsODYyeHhfcmVzZXQocHJpdik7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJLyogRGV0ZWN0IHRoZSBsb2FkZXIgb3ZlciBTQiBQREkgZmlyc3Q6IGl0IG5lZWRzIG5vIGZpcm13YXJlLCB1bmxpa2UgdGhlCiYjNDM7CSAqIEM0NSBBUEkgKG14bDg2Mnh4X3Jlc2V0L3dhaXRfcmVhZHkpIHdoaWNoIHNwZXdzIENSQyBlcnJvcnMgd2hlbiBub25lCiYjNDM7CSAqIGFuc3dlcnMuIFRvdWNoIEM0NSBvbmx5IG9uY2UgcmVzY3VlIGlzIHJ1bGVkIG91dC4KJiM0MzsJICovCiYjNDM7CXJlc2N1ZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTsKJiM0MzsJaWYgKHJlc2N1ZSAmbHQ7IDApCiYjNDM7CQlyZXR1cm4gcmVzY3VlOwogCi0JcmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7Ci0JaWYgKHJldCkKLQkJcmV0dXJuIHJldDsKJiM0MzsJaWYgKHJlc2N1ZSA9PSBNWEw4NjJYWF9OT1RfUkVTQ1VFKSB7CiYjNDM7CQlyZXQgPSBteGw4NjJ4eF9yZXNldChwcml2KTsKJiM0MzsJCWlmIChyZXQpCiYjNDM7CQkJcmV0dXJuIHJldDsKJiM0MzsKJiM0MzsJCXJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpOwomIzQzOwkJaWYgKHJldCkgewomIzQzOwkJCS8qIHRoZSByZXNldCBtYXkgb25seSBub3cgaGF2ZSB0cmlnZ2VyZWQgcmVzY3VlIG1vZGUgKi8KJiM0MzsJCQlyZXNjdWUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7CiYjNDM7CQkJaWYgKHJlc2N1ZSAmbHQ7IDApCiYjNDM7CQkJCXJldHVybiByZXNjdWU7CiYjNDM7CQkJaWYgKHJlc2N1ZSA9PSBNWEw4NjJYWF9OT1RfUkVTQ1VFKQomIzQzOwkJCQlyZXR1cm4gcmV0OwomIzQzOwkJfQomIzQzOwl9CiYjNDM7CiYjNDM7CXByaXYtJmd0O3Jlc2N1ZV9tb2RlID0gcmVzY3VlOwomIzQzOwomIzQzOwlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpIHsKJiM0MzsJCWlmIChwcml2LSZndDtyZXNjdWVfcmVhZHkpIHsKJiM0MzsJCQlkZXZfd2Fybihkcy0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtzd2l0Y2ggaW4gTUNVYm9vdCByZXNjdWUgbW9kZSwgdXNlIGRldmxpbmsgdG8gZmxhc2ggbmV3IGZpcm13YXJlXG4mIzM0Oyk7CiYjNDM7CQl9IGVsc2UgewomIzQzOwkJCS8qIERyYWluIHRoZSB3ZWRnZWQgZG93bmxvYWQgaW4gdGhlIGJhY2tncm91bmQgc28gaXQKJiM0MzsJCQkgKiBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrOyBpbmZvIGFuZCBmbGFzaCBiZWNvbWUKJiM0MzsJCQkgKiBhdmFpbGFibGUgb25jZSByZWFkeS4KJiM0MzsJCQkgKi8KJiM0MzsJCQlkZXZfd2Fybihkcy0mZ3Q7ZGV2LAomIzQzOwkJCQkgJiMzNDtzd2l0Y2ggaW4gTUNVYm9vdCB3aXRoIGFuIGludGVycnVwdGVkIGRvd25sb2FkLCByZWNvdmVyaW5nIGluIGJhY2tncm91bmRcbiYjMzQ7KTsKJiM0MzsJCQlxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCAmYW1wO3ByaXYtJmd0O3Jlc2N1ZV9oZWFsX3dvcmspOwomIzQzOwkJfQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KIAogCW11dGV4X2luaXQoJmFtcDtwcml2LSZndDtzZXJkZXNfbG9jayk7CiAJZm9yIChpID0gMDsgaSAmbHQ7IEFSUkFZX1NJWkUocHJpdi0mZ3Q7c2VyZGVzX3BvcnRzKTsgaSYjNDM7JiM0MzspCkBAIC03MTUsMTEgJiM0Mzs3OTEsMjEgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3N0YXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsIGJvb2wgZW5hYmxlKQogc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X2VuYWJsZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCQkJCXN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYpCiB7CiYjNDM7CXN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCXJldHVybiAwOwomIzQzOwogCXJldHVybiBteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCB0cnVlKTsKIH0KIAogc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9kaXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpCiB7CiYjNDM7CXN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtJmd0O3ByaXY7CiYjNDM7CiYjNDM7CWlmIChwcml2LSZndDtyZXNjdWVfbW9kZSkKJiM0MzsJCXJldHVybjsKJiM0MzsKIAlpZiAobXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgZmFsc2UpKQogCQlkZXZfZXJyKGRzLSZndDtkZXYsICYjMzQ7ZmFpbGVkIHRvIGRpc2FibGUgcG9ydCAlZFxuJiMzNDssIHBvcnQpOwogfQpAQCAtMTMzNyw2ICYjNDM7MTQyMywxMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCkKIAlib29sIGlzX2NwdV9wb3J0ID0gZHNhX3BvcnRfaXNfY3B1KGRwKTsKIAlpbnQgcmV0OwogCiYjNDM7CS8qIERTQSByZWluaXRzIGZhaWxlZCB1c2VyIHBvcnRzIGFzIHVudXNlZDsgc2hhcmVkIHBvcnRzIG11c3QKJiM0MzsJICogc3VjY2VlZCBmb3IgdGhlIHRyZWUgdG8gcmVnaXN0ZXIuCiYjNDM7CSAqLwomIzQzOwlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQlyZXR1cm4gZHNhX3BvcnRfaXNfdXNlcihkcCkgPyAtRU5PREVWIDogMDsKJiM0MzsKIAlyZXQgPSBteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSk7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKQEAgLTE1NzIsNiAmIzQzOzE2NjQsMTEgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X21kYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwKIAlldGhlcl9hZGRyX2NvcHkocXBhcmFtLm1hYywgbWRiLSZndDthZGRyKTsKIAogCXJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIE1YTDg2MlhYX01BQ19UQUJMRUVOVFJZUVVFUlksIHFwYXJhbSk7CiYjNDM7CS8qIC1FTk9ERVY6IHRoZSBmaXJtd2FyZSBhbmQgaXRzIE1BQyB0YWJsZSBhcmUgZ29uZSwgbm90aGluZyBsZWZ0CiYjNDM7CSAqIHRvIGRlbGV0ZQomIzQzOwkgKi8KJiM0MzsJaWYgKHJldCA9PSAtRU5PREVWKQomIzQzOwkJcmV0dXJuIDA7CiAJaWYgKHJldCkKIAkJcmV0dXJuIHJldDsKIApAQCAtMTYyOCw2ICYjNDM7MTcyNSw5IEBAIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LAogCXN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtJmd0O3ByaXY7CiAJaW50IHJldDsKIAomIzQzOwlpZiAocHJpdi0mZ3Q7cmVzY3VlX21vZGUpCiYjNDM7CQlyZXR1cm47CiYjNDM7CiAJc3dpdGNoIChzdGF0ZSkgewogCWNhc2UgQlJfU1RBVEVfRElTQUJMRUQ6CiAJCXBhcmFtLnBvcnRfc3RhdGUgPSBjcHVfdG9fbGUzMihNWEw4NjJYWF9TVFBfUE9SVF9TVEFURV9ESVNBQkxFKTsKQEAgLTIwODYsNiAmIzQzOzIxODYsOCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7CiAJLmdldF9wYXVzZV9zdGF0cyA9IG14bDg2Mnh4X2dldF9wYXVzZV9zdGF0cywKIAkuZ2V0X3Jtb25fc3RhdHMgPSBteGw4NjJ4eF9nZXRfcm1vbl9zdGF0cywKIAkuZ2V0X3N0YXRzNjQgPSBteGw4NjJ4eF9nZXRfc3RhdHM2NCwKJiM0MzsJLmRldmxpbmtfaW5mb19nZXQgPSBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0LAomIzQzOwkuZGV2bGlua19mbGFzaF91cGRhdGUgPSBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSwKIH07CiAKIHN0YXRpYyBpbnQgbXhsODYyeHhfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KQpkaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaAppbmRleCA0MzJhNWYzZjJlMDhlNi4uNzJkYzMxY2MyYjYyZmEgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oCkBAIC0xNCw2ICYjNDM7MTQsMTAgQEAgc3RydWN0IG14bDg2Mnh4X3ByaXY7CiAjZGVmaW5lIE1YTDg2MlhYX0ZJUlNUX1NFUkRFU19QT1JUCTkKICNkZWZpbmUgTVhMODYyWFhfU0VSREVTX1NMT1RTCQk0CiAKJiM0MzsvKiBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QoKSByZXR1cm4gY29kZXMgKG5lZ2F0aXZlIHZhbHVlcyBhcmUgZXJyb3JzKSAqLwomIzQzOyNkZWZpbmUgTVhMODYyWFhfTk9UX1JFU0NVRQkJMAomIzQzOyNkZWZpbmUgTVhMODYyWFhfSU5fUkVTQ1VFCQkxCiYjNDM7CiAjZGVmaW5lIE1YTDg2MlhYX0RFRkFVTFRfQlJJREdFCQkwCiAjZGVmaW5lIE1YTDg2MlhYX01BWF9CUklER0VTCQk0OAogI2RlZmluZSBNWEw4NjJYWF9NQVhfQlJJREdFX1BPUlRTCTEyOApAQCAtMzAzLDYgJiM0MzszMDcsMTAgQEAgc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24gewogICogICAgICAgICAgICAgICAgICAgICAgZmxvb2RpbmcpCiAgKiBAZndfdmVyc2lvbjogICAgICAgICBjYWNoZWQgZmlybXdhcmUgdmVyc2lvbiwgcG9wdWxhdGVkIGF0IHByb2JlIGFuZAogICogICAgICAgICAgICAgICAgICAgICAgY29tcGFyZWQgd2l0aCBNWEw4NjJYWF9GV19WRVJfTUlOKCkKJiM0MzsgKiBAYXNpY19pZDogICAgICAgICAgICBjaGlwIHBhcnQgbnVtYmVyIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMsCiYjNDM7ICogICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYXMgdGhlIGRldmxpbmsgJiMzNDthc2ljLmlkJiMzNDsgZml4ZWQgdmVyc2lvbgomIzQzOyAqIEBhc2ljX3JldjogICAgICAgICAgIGNoaXAgdmVyc2lvbiByZWFkIGZyb20gdGhlIENISVAgSUQgcmVnaXN0ZXJzLAomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGFzIHRoZSBkZXZsaW5rICYjMzQ7YXNpYy5yZXYmIzM0OyBmaXhlZCB2ZXJzaW9uCiAgKiBAc2VyZGVzX3BvcnRzOiAgICAgICBTZXJEZXMgaW50ZXJmYWNlcyBpbmNsLiBzdWItaW50ZXJmYWNlcyBpbiBjYXNlIG9mCiAgKiAgICAgICAgICAgICAgICAgICAgICAxMEdfUVhHTUlJIG9yIFFTR01JSQogICogQHNlcmRlc19yZWZjb3VudDogICAgcGVyLVhQQ1MgY291bnQgb2Ygc3ViLXBvcnRzIGVuYWJsZWQgYnkgcGh5bGluazsKQEAgLTMxOSw2ICYjNDM7MzI3LDE1IEBAIHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIHsKICAqIEBldmxhbl9pbmdyZXNzX3NpemU6IHBlci1wb3J0IGluZ3Jlc3MgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplCiAgKiBAZXZsYW5fZWdyZXNzX3NpemU6ICBwZXItcG9ydCBlZ3Jlc3MgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplCiAgKiBAdmZfYmxvY2tfc2l6ZTogICAgICBwZXItcG9ydCBWTEFOIEZpbHRlciBibG9jayBzaXplCiYjNDM7ICogQGJsb2NrX2hvc3Q6ICAgICAgICAgcmVqZWN0IGZpcm13YXJlIEFQSSBjb21tYW5kcyAoZXhjZXB0IEZXX1VQREFURSkKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICBkdXJpbmcgYSBmaXJtd2FyZSBmbGFzaAomIzQzOyAqIEBza2lwX3RlYXJkb3duOiAgICAgIGRpc2NhcmQgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGR1cmluZyB0aGUgdGVhcmRvd24KJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgYnkgdGhlIHBvc3QtZmxhc2ggcmVwcm9iZQomIzQzOyAqIEByZXNjdWVfbW9kZTogICAgICAgIHN3aXRjaCBpcyBpbiBNQ1Vib290OyBmaXJtd2FyZSBBUEkgY29tbWFuZHMgZmFpbCBmYXN0LAomIzQzOyAqICAgICAgICAgICAgICAgICAgICAgIG9ubHkgY2xhdXNlLTIyIFNNRElPIHdvcmtzCiYjNDM7ICogQHJlc2N1ZV9yZWFkeTogICAgICAgKHJlc2N1ZV9tb2RlKSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSBhbmQgd2lsbCBhY2NlcHQKJiM0MzsgKiAgICAgICAgICAgICAgICAgICAgICBhIGZsYXNoOyBmYWxzZSB3aGlsZSByZXNjdWVfaGVhbF93b3JrIGlzIGRyYWluaW5nCiYjNDM7ICogQHJlc2N1ZV9oZWFsX3dvcms6ICAgYmFja2dyb3VuZCBzZWxmLWhlYWwgZHJhaW5pbmcgYSB3ZWRnZWQgZG93bmxvYWQgdG8gUkVBRFkKICAqIEBzdGF0c193b3JrOiAgICAgICAgIHBlcmlvZGljIHdvcmsgaXRlbSB0aGF0IHBvbGxzIFJNT04gaGFyZHdhcmUgY291bnRlcnMKICAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBhY2N1bXVsYXRlcyB0aGVtIGludG8gNjQtYml0IHBlci1wb3J0IHN0YXRzCiAgKi8KQEAgLTMyNiw5ICYjNDM7MzQzLDEyIEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHsKIAlzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7CiAJc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2OwogCXN0cnVjdCB3b3JrX3N0cnVjdCBjcmNfZXJyX3dvcms7CiYjNDM7CXN0cnVjdCB3b3JrX3N0cnVjdCByZXNjdWVfaGVhbF93b3JrOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7CiAJdTE2IGRyb3BfbWV0ZXI7CiAJc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24gZndfdmVyc2lvbjsKJiM0MzsJdTE2IGFzaWNfaWQ7CiYjNDM7CXU4IGFzaWNfcmV2OwogCXN0cnVjdCBteGw4NjJ4eF9wY3Mgc2VyZGVzX3BvcnRzWzhdOwogCWludCBzZXJkZXNfcmVmY291bnRbMl07CiAJc3RydWN0IG11dGV4IHNlcmRlc19sb2NrOwpAQCAtMzM3LDYgJiM0MzszNTcsMTAgQEAgc3RydWN0IG14bDg2Mnh4X3ByaXYgewogCXUxNiBldmxhbl9pbmdyZXNzX3NpemU7CiAJdTE2IGV2bGFuX2VncmVzc19zaXplOwogCXUxNiB2Zl9ibG9ja19zaXplOwomIzQzOwlib29sIGJsb2NrX2hvc3Q7CiYjNDM7CWJvb2wgc2tpcF90ZWFyZG93bjsKJiM0MzsJYm9vbCByZXNjdWVfbW9kZTsKJiM0MzsJYm9vbCByZXNjdWVfcmVhZHk7CiAJc3RydWN0IGRlbGF5ZWRfd29yayBzdGF0c193b3JrOwogfTsKIApkaWZmIC0tZ2l0IGEvaW5jbHVkZS9uZXQvZHNhLmggYi9pbmNsdWRlL25ldC9kc2EuaAppbmRleCA4YzE2ZWYyM2NjMTAyYS4uYzllMTkzNDhkZTYxOTMgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbmV0L2RzYS5oCkBAIC0xMTcwLDYgJiM0MzsxMTcwLDkgQEAgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHsKIAlpbnQJKCpkZXZsaW5rX2luZm9fZ2V0KShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiAJCQkJICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsCiAJCQkJICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7CiYjNDM7CWludAkoKmRldmxpbmtfZmxhc2hfdXBkYXRlKShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsCiYjNDM7CQkJCQlzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsCiYjNDM7CQkJCQlzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spOwogCWludAkoKmRldmxpbmtfc2JfcG9vbF9nZXQpKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywKIAkJCQkgICAgICAgdW5zaWduZWQgaW50IHNiX2luZGV4LCB1MTYgcG9vbF9pbmRleCwKIAkJCQkgICAgICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pOwpkaWZmIC0tZ2l0IGEvbmV0L2RzYS9kZXZsaW5rLmMgYi9uZXQvZHNhL2RldmxpbmsuYwppbmRleCBlZDM0MmYzNDU2OTJiYi4uZDYwMjIyNjdhODM5Y2QgMTAwNjQ0Ci0tLSBhL25ldC9kc2EvZGV2bGluay5jCiYjNDM7JiM0MzsmIzQzOyBiL25ldC9kc2EvZGV2bGluay5jCkBAIC0yMCw2ICYjNDM7MjAsMTUgQEAgc3RhdGljIGludCBkc2FfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsCiAJcmV0dXJuIC1FT1BOT1RTVVBQOwogfQogCiYjNDM7c3RhdGljIGludCBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLAomIzQzOwkJCQkgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAomIzQzOwkJCQkgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKQomIzQzO3sKJiM0MzsJc3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpOwomIzQzOwomIzQzOwlyZXR1cm4gZHMtJmd0O29wcy0mZ3Q7ZGV2bGlua19mbGFzaF91cGRhdGUoZHMsIHBhcmFtcywgZXh0YWNrKTsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwKIAkJCQkgICB1bnNpZ25lZCBpbnQgc2JfaW5kZXgsIHUxNiBwb29sX2luZGV4LAogCQkJCSAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKQpAQCAtMTY3LDE4ICYjNDM7MTc2LDMxIEBAIGRzYV9kZXZsaW5rX3NiX29jY190Y19wb3J0X2JpbmRfZ2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRscCwKIAkJCQkJCQlwX21heCk7CiB9CiAKLXN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0gewotCS5pbmZvX2dldAkJCT0gZHNhX2RldmxpbmtfaW5mb19nZXQsCi0JLnNiX3Bvb2xfZ2V0CQkJPSBkc2FfZGV2bGlua19zYl9wb29sX2dldCwKLQkuc2JfcG9vbF9zZXQJCQk9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LAotCS5zYl9wb3J0X3Bvb2xfZ2V0CQk9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9nZXQsCi0JLnNiX3BvcnRfcG9vbF9zZXQJCT0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX3NldCwKLQkuc2JfdGNfcG9vbF9iaW5kX2dldAkJPSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfZ2V0LAotCS5zYl90Y19wb29sX2JpbmRfc2V0CQk9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9zZXQsCi0JLnNiX29jY19zbmFwc2hvdAkJPSBkc2FfZGV2bGlua19zYl9vY2Nfc25hcHNob3QsCi0JLnNiX29jY19tYXhfY2xlYXIJCT0gZHNhX2Rldmxpbmtfc2Jfb2NjX21heF9jbGVhciwKLQkuc2Jfb2NjX3BvcnRfcG9vbF9nZXQJCT0gZHNhX2Rldmxpbmtfc2Jfb2NjX3BvcnRfcG9vbF9nZXQsCiYjNDM7LyogVGhlIGRldmxpbmsgY29yZSByZWplY3RzIGZsYXNoIHJlcXVlc3RzIHVwIGZyb250IHdoZW4gdGhlIGZsYXNoX3VwZGF0ZQomIzQzOyAqIG9wIGlzIGFic2VudCwgYmVmb3JlIGZldGNoaW5nIHRoZSBmaXJtd2FyZSBmaWxlIGZyb20gdXNlcnNwYWNlLiBPbmx5CiYjNDM7ICogaW5zdGFsbCB0aGUgb3AgZm9yIHN3aXRjaGVzIHdob3NlIGRyaXZlciBpbXBsZW1lbnRzIGl0LCBzbyB0aGF0CiYjNDM7ICogdW5zdXBwb3J0ZWQgcmVxdWVzdHMga2VlcCBmYWlsaW5nIGVhcmx5LgomIzQzOyAqLwomIzQzOyNkZWZpbmUgRFNBX0RFVkxJTktfT1BTCQkJCQkJCVwKJiM0MzsJLmluZm9fZ2V0CQkJPSBkc2FfZGV2bGlua19pbmZvX2dldCwJCVwKJiM0MzsJLnNiX3Bvb2xfZ2V0CQkJPSBkc2FfZGV2bGlua19zYl9wb29sX2dldCwJXAomIzQzOwkuc2JfcG9vbF9zZXQJCQk9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LAlcCiYjNDM7CS5zYl9wb3J0X3Bvb2xfZ2V0CQk9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9nZXQsCVwKJiM0MzsJLnNiX3BvcnRfcG9vbF9zZXQJCT0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX3NldCwJXAomIzQzOwkuc2JfdGNfcG9vbF9iaW5kX2dldAkJPSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfZ2V0LCBcCiYjNDM7CS5zYl90Y19wb29sX2JpbmRfc2V0CQk9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9zZXQsIFwKJiM0MzsJLnNiX29jY19zbmFwc2hvdAkJPSBkc2FfZGV2bGlua19zYl9vY2Nfc25hcHNob3QsCVwKJiM0MzsJLnNiX29jY19tYXhfY2xlYXIJCT0gZHNhX2Rldmxpbmtfc2Jfb2NjX21heF9jbGVhciwJXAomIzQzOwkuc2Jfb2NjX3BvcnRfcG9vbF9nZXQJCT0gZHNhX2Rldmxpbmtfc2Jfb2NjX3BvcnRfcG9vbF9nZXQsIFwKIAkuc2Jfb2NjX3RjX3BvcnRfYmluZF9nZXQJPSBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldCwKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX29wcyA9IHsKJiM0MzsJRFNBX0RFVkxJTktfT1BTCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX2ZsYXNoX29wcyA9IHsKJiM0MzsJRFNBX0RFVkxJTktfT1BTCiYjNDM7CS5mbGFzaF91cGRhdGUJCQk9IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSwKIH07CiAKIGludCBkc2FfZGV2bGlua19wYXJhbV9nZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsCkBAIC0zNzgsMTIgJiM0Mzs0MDAsMTYgQEAgdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpCiBpbnQgZHNhX3N3aXRjaF9kZXZsaW5rX2FsbG9jKHN0cnVjdCBkc2Ffc3dpdGNoICpkcykKIHsKIAlzdHJ1Y3QgZHNhX2RldmxpbmtfcHJpdiAqZGxfcHJpdjsKJiM0MzsJY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzICpvcHM7CiAJc3RydWN0IGRldmxpbmsgKmRsOwogCiYjNDM7CW9wcyA9IGRzLSZndDtvcHMtJmd0O2RldmxpbmtfZmxhc2hfdXBkYXRlID8gJmFtcDtkc2FfZGV2bGlua19mbGFzaF9vcHMKJiM0MzsJCQkJCSAgICA6ICZhbXA7ZHNhX2Rldmxpbmtfb3BzOwomIzQzOwogCS8qIEFkZCB0aGUgc3dpdGNoIHRvIGRldmxpbmsgYmVmb3JlIGNhbGxpbmcgc2V0dXAsIHNvIHRoYXQgc2V0dXAgY2FuCiAJICogYWRkIGRwaXBlIHRhYmxlcwogCSAqLwotCWRsID0gZGV2bGlua19hbGxvYygmYW1wO2RzYV9kZXZsaW5rX29wcywgc2l6ZW9mKCpkbF9wcml2KSwgZHMtJmd0O2Rldik7CiYjNDM7CWRsID0gZGV2bGlua19hbGxvYyhvcHMsIHNpemVvZigqZGxfcHJpdiksIGRzLSZndDtkZXYpOwogCWlmICghZGwpCiAJCXJldHVybiAtRU5PTUVNOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0MTkzCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogNDc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFzc2Vzc2luZyB0aGUgRnV6emFiaWxpdHkgb2YgYSBNYXhMaW5lYXIgTXhMODYyeHggRmlybXdhcmUgUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2gg4oCTIGl0IGxvb2tzIGxpa2UgaXQgYWRkcyBmaXJtd2FyZSBmbGFzaGluZyBhbmQgZGV2bGluayBzdXBwb3J0IGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IHN3aXRjaC4gVGhlIGNvcmUgb2YgaXQgc2VlbXMgdG8gYmUgaW4gYG14bDg2Mnh4LWZ3LmNgLCB3aGljaCBpbXBsZW1lbnRzIHRoZSBmaXJtd2FyZSB1cGRhdGUgdmlhIGRldmxpbmssIGFuZCB0aGVuIHRoZXJlIGFyZSBtb2RpZmljYXRpb25zIHRvIGBteGw4NjJ4eC5jYCBhbmQgYGRldmxpbmsuY2AuIE5hdHVyYWxseSwgbXkgZmlyc3QgcXVlc3Rpb24gaXM6IGNhbiB3ZSBldmVuICpyZWFjaCogdGhpcyBjb2RlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQgZm9yIGZ1enppbmc/IERTQSBzd2l0Y2hlcyBhcmUgdXN1YWxseSBwaHlzaWNhbCBoYXJkd2FyZSwgYXJlbiYjMzk7dCB0aGV5PyBCdXQgcGVyaGFwcyB0aGVyZSYjMzk7cyBhbiBlbXVsYXRpb24gcGF0aCwgb3IgbWF5YmUgYSBkdW1teSBNRElPIGJ1cyBjb3VsZCB3b3JrPwoKTGV0JiMzOTtzIGRpZyBpbiBhIGJpdC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQmIzM5O3MgYW4gTURJTyBkZXZpY2UgZHJpdmVyLiBUaGUgb2J2aW91cyBxdWVzdGlvbiBpcyB3aGV0aGVyIHdlIGNhbiBjb25qdXJlIHVwIHNvbWUgZHVtbXkgTURJTyBkZXZpY2VzIHdpdGhpbiBhIFFFTVUgc2V0dXAgb3IgZXZlbiBzeXprYWxsZXIuIEkga25vdyBzeXprYWxsZXIgaGFzIHRoZSBhYmlsaXR5IHRvIGNyZWF0ZSBkdW1teSBkZXZpY2VzLCBJIHdhcyB0aGlua2luZyBpdCB1c2VzIGBtZGlvYCBzdWJzeXN0ZW0gb3Igc2ltaWxhciwgb3IgcG90ZW50aWFsbHkgYG5ldGRldnNpbWAsIGhvd2V2ZXIsIGBuZXRkZXZzaW1gIGRvZXNuJiMzOTt0IGVtdWxhdGUgTURJTyBkZXZpY2VzLiBXYWl0LCBkb2VzIHN5emthbGxlciBoYXZlIHNvbWV0aGluZyBsaWtlIGBzeXpfbWRpb18uLi5gPyBObywgdGhhdCBkb2VzbiYjMzk7dCBleGlzdC4KClNvIHRoZSBvcHRpb25zIHNlZW0gdG8gYmUgY3JlYXRpbmcgZGV2aWNlcyB2aWEgdGhlIGRldmljZSB0cmVlIG9yIHBvdGVudGlhbGx5IHRocm91Z2ggSTJDL01ESU8gaW5qZWN0aW9uLCBpZiB0aGF0JiMzOTtzIGV2ZW4gcG9zc2libGUuIFRoZSBwcm9ibGVtIHdpdGggcGh5c2ljYWwgc3dpdGNoIGRyaXZlcnMgbGlrZSBEU0EgaXMgdGhleSYjMzk7cmUgbm90b3Jpb3VzbHkgZGlmZmljdWx0IHRvIHByb2JlIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUsIHVubGVzcyB0aGVyZSYjMzk7cyBhIHNwZWNpZmljIGVtdWxhdG9yIGF2YWlsYWJsZS4KCkxldCBtZSBjb25maXJtIHRoYXQgYG14bDg2Mnh4YCBpcyBkZWZpbml0ZWx5IGEgcGh5c2ljYWwgaGFyZHdhcmUgZHJpdmVyLiBZZXAsICYjMzQ7TWF4TGluZWFyIE14TDg2Mnh4JiMzNDsuIE9rYXksIEkgYW0gbm93IHRoaW5raW5nIEkgc2hvdWxkIGhhdmUgc3RhcnRlZCBieSByZWFkaW5nIHRoZSBpbnN0cnVjdGlvbnMuCgpIb2xkIG9uLCB0aGUgZnV6emluZyBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheTogJiMzNDtSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIC0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7CgpUaGlzIGlzLCBieSBkZWZpbml0aW9uLCBhICp2ZW5kb3Itc3BlY2lmaWMgRFNBIHN3aXRjaCBkcml2ZXIqIChNYXhMaW5lYXIgTXhMODYyeHgpIHRoYXQgbGl2ZXMgb24gYW4gTURJTyBidXMuIFNvLCB0aGUgbWlsbGlvbi1kb2xsYXIgcXVlc3Rpb246IGNhbiBpdCBiZSBwcm9iZWQgaW4gUUVNVT8gR2l2ZW4gdGhhdCBpdCBhcHBlYXJzIHRvIGZpdCB0aGUgJiMzNDtubyBnbyYjMzQ7IGRlc2NyaXB0aW9uIGZyb20gdGhlIGZ1enppbmcgaW5zdHJ1Y3Rpb25zLCBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZG8gc29tZSB0aG9yb3VnaCBkaWdnaW5nIGluIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jYCBhbmQgY29uZmlybSB0aGF0IFFFTVUgaXMgYSB2aWFibGUgb3B0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjUyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O214bDg2Mnh4X3Byb2JlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MjE1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjE5Mi1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjIxOTM6c3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yMTk0LXtcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yMzAyPXN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgbXhsODYyeHhfZHJpdmVyID0ge1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MjMwMzpcdC5wcm9iZSAgPSBteGw4NjJ4eF9wcm9iZSxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIzMDQtXHQucmVtb3ZlID0gbXhsODYyeHhfcmVtb3ZlLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjUyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NjE4CgkJCQkJCQlvdXRwdXQ6IDI2CgkJCQkJCQl0aG91Z2h0czogODUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTURJTyBGdXp6aW5nOiBBIFN5emthbGxlciBFeHBsb3JhdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBNRElPIGRyaXZlciBhbmQgdGhlIHF1ZXN0aW9uIGltbWVkaWF0ZWx5IHBvcHMgaW50byBteSBoZWFkOiBjYW4gd2UgZWZmZWN0aXZlbHkgZnV6eiBNRElPIGRldmljZXMgd2l0aGluIHRoZSBTeXprYWxsZXIgZnJhbWV3b3JrPyBNeSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCBTeXprYWxsZXIgbGFja3MgYSB0cnVseSBnZW5lcmljIE1ESU8gZGV2aWNlIGVtdWxhdG9yLiBJdCBkb2VzbiYjMzk7dCBzZWVtIHRvIG9mZmVyIGEgd2F5IHRvIHByb2JlIGFyYml0cmFyeSBNRElPIGRyaXZlcnMgZGlyZWN0bHkgd2l0aG91dCByZWx5aW5nIG9uIGEgc3BlY2lmaWMgdmlydHVhbCBidXMgaW1wbGVtZW50YXRpb24uIEhtbSwgd2FzbiYjMzk7dCB0aGVyZSBzb21ldGhpbmcgbGlrZSBgbWRpby1tb2NrYC4uLiBvciBhbSBJIG1pc3JlbWVtYmVyaW5nPyBObywgdGhhdCYjMzk7cyBub3QgaXQuIFJpZ2h0LCBJIG5lZWQgdG8gdmVyaWZ5IHRoaXMgYXNzdW1wdGlvbi4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IGV4aXN0aW5nIGZ1enppbmcgY2FwYWJpbGl0aWVzIHNwZWNpZmljYWxseSBkZXNpZ25lZCBmb3IgTURJTyB3aXRoaW4gU3l6a2FsbGVyLiBJdCYjMzk7cyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0JiMzOTtzIGN1cnJlbnRseSBhdmFpbGFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZGlvJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7c3lzL2xpbnV4LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjU5MTEKCQkJCQkJCW91dHB1dDogNTIKCQkJCQkJCXRob3VnaHRzOiAzMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgUmVhc29uaW5nIG9uIEludmVzdGlnYXRpbmcgTURJTyBEZXZpY2VzKioKCk9rYXksIHNvIEkgbmVlZCB0byBzZWFyY2ggdGhyb3VnaCBrZXJuZWwgY29kZSwgYnV0IEkgY2FuJiMzOTt0IHVzZSBgZ3JlcHBlcmAgaW4gYHN5cy9saW51eC9gIGJlY2F1c2Ugb2YgdGhlIHN5emthbGxlciBzcGVjaWZpY3MuIEkmIzM5O20gbGltaXRlZCB0byBgcmVhZC1maWxlYCBvciBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBvciwgdGhlIGluc3RydWN0aW9ucyBzdWdnZXN0IGByZWFkLWRlc2NyaXB0aW9uYC4gVGhlIHRleHQgZXhwbGljaXRseSBwb2ludHMgb3V0IHRoYXQgc3l6bGFuZyBkZXNjcmlwdGlvbnMgb3IgZXhwcmVzc2lvbnMgd2l0aCAmIzM5O3N5el8mIzM5OyBhcmUgb2ZmLWxpbWl0cyBmb3IgYGdyZXBwZXJgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSB0ZWxsIG1lIHRvIHVzZSB0aGlzLCBidXQgd2FpdC4uLkkgZG9uJiMzOTt0IGhhdmUgaXQgaW4gbXkgdG9vbHNldCEgSSBvbmx5IGhhdmUgYGdyZXBwZXJgLCBgY29kZXNlYXJjaC1kaXItaW5kZXhgLCBgcmVhZC1maWxlYCwgYW5kIGBzZXQtcmVzdWx0c2AuIEl0JiMzOTtzIGZydXN0cmF0aW5nIHdoZW4gdGhlIGRvY3VtZW50YXRpb24gcmVmZXJzIHRvIGEgdG9vbCB0aGF0IGlzbiYjMzk7dCBhdmFpbGFibGUsIGJ1dCBJJiMzOTtsbCB3b3JrIHdpdGggd2hhdCBJIGhhdmUuCgpSZWdhcmRsZXNzLCBJJiMzOTttIHRoaW5raW5nIGFib3V0IE1ESU8gZGV2aWNlcywgYW5kIG15IGluaXRpYWwgaW50dWl0aW9uIGlzIHRoYXQgdGhleSBhcmUgZ2VuZXJhbGx5IHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBDT05GSUdfTkVUX0RTQV9NWEw4NjJgIHJlcHJlc2VudHMgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIuIExvb2tpbmcgYXQgdGhlIGNvZGUgY29uZmlybXMgdGhpczsgaXQmIzM5O3MgYSBEU0Egc3dpdGNoIGRyaXZlciBmb3IgdGhlIE1heExpbmVhciBNeEw4NjJ4eC4gVGhlIGFzc29jaWF0aW9uIHdpdGggYG1seHN3YCBmdXJ0aGVyIHJlaW5mb3JjZXMgdGhpcyByZXF1aXJlbWVudCBmb3IgcGh5c2ljYWwgaGFyZHdhcmUgb3Igc3BlY2lhbGl6ZWQgSTJDL01ESU8gaGFyZHdhcmUgdGhhdCBpc24mIzM5O3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KClRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjb3VsZCB0aGlzIGRldmljZSBiZSBwcm9iZWQgdGhyb3VnaCBhIHNvZnR3YXJlIE1ESU8gYnVzPyBFdmVuIGlmIHRoZSBwcm9iaW5nIHN1Y2NlZWRzLCB0aGUgZnVuZGFtZW50YWwgY29tbXVuaWNhdGlvbiBpbnZvbHZlcyBNRElPIHJlYWRzL3dyaXRlcy4gV2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIHByZXNlbnQsIGFueSBwcm9iZSBpcyBnb2luZyB0byBmYWlsLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgbXhsODYyeHhfcHJvYmVgIHRvIGJlIHN1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIxOTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIxOTM6XHRzdGF0aWMgaW50IG14bDg2Mnh4X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjIxOTQ6XHR7XG4yMTk1Olx0XHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcdTAwMjZtZGlvZGV2LVx1MDAzZWRldjtcbjIxOTY6XHRcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2O1xuMjE5NzpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xuMjE5ODpcdFx0aW50IGVyciwgaTtcbjIxOTk6XHRcbjIyMDA6XHRcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcbjIyMDE6XHRcdGlmICghcHJpdilcbjIyMDI6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG4yMjAzOlx0XG4yMjA0Olx0XHRwcml2LVx1MDAzZW1kaW9kZXYgPSBtZGlvZGV2O1xuMjIwNTpcdFxuMjIwNjpcdFx0ZHMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzKSwgR0ZQX0tFUk5FTCk7XG4yMjA3Olx0XHRpZiAoIWRzKVxuMjIwODpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIyMDk6XHRcbjIyMTA6XHRcdHByaXYtXHUwMDNlZHMgPSBkcztcbjIyMTE6XHRcdGRzLVx1MDAzZWRldiA9IGRldjtcbjIyMTI6XHRcdGRzLVx1MDAzZXByaXYgPSBwcml2O1xuMjIxMzpcdFx0ZHMtXHUwMDNlb3BzID0gXHUwMDI2bXhsODYyeHhfc3dpdGNoX29wcztcbjIyMTQ6XHRcdGRzLVx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFx1MDAyNm14bDg2Mnh4X3BoeWxpbmtfbWFjX29wcztcbjIyMTU6XHRcdGRzLVx1MDAzZW51bV9wb3J0cyA9IE1YTDg2MlhYX01BWF9QT1JUUztcbjIyMTY6XHRcdGRzLVx1MDAzZWZkYl9pc29sYXRpb24gPSB0cnVlO1xuMjIxNzpcdFx0ZHMtXHUwMDNlbWF4X251bV9icmlkZ2VzID0gTVhMODYyWFhfTUFYX0JSSURHRVM7XG4yMjE4Olx0XG4yMjE5Olx0XHRteGw4NjJ4eF9ob3N0X2luaXQocHJpdik7XG4yMjIwOlx0XG4yMjIxOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBNWEw4NjJYWF9NQVhfUE9SVFM7IGkmIzQzOyYjNDM7KSB7XG4yMjIyOlx0XHRcdHByaXYtXHUwMDNlcG9ydHNbaV0ucHJpdiA9IHByaXY7XG4yMjIzOlx0XHRcdElOSVRfV09SSyhcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldLmhvc3RfZmxvb2Rfd29yayxcbjIyMjQ6XHRcdFx0XHQgIG14bDg2Mnh4X2hvc3RfZmxvb2Rfd29ya19mbik7XG4yMjI1Olx0XHRcdHNwaW5fbG9ja19pbml0KFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV0uc3RhdHNfbG9jayk7XG4yMjI2Olx0XHR9XG4yMjI3Olx0XG4yMjI4Olx0XHRJTklUX0RFTEFZRURfV09SSyhcdTAwMjZwcml2LVx1MDAzZXN0YXRzX3dvcmssIG14bDg2Mnh4X3N0YXRzX3dvcmtfZm4pO1xuMjIyOTpcdFxuMjIzMDpcdFx0ZGV2X3NldF9kcnZkYXRhKGRldiwgZHMpO1xuMjIzMTpcdFxuMjIzMjpcdFx0ZXJyID0gZHNhX3JlZ2lzdGVyX3N3aXRjaChkcyk7XG4yMjMzOlx0XHRpZiAoZXJyKSB7XG4yMjM0Olx0XHRcdHNldF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFx1MDAyNnByaXYtXHUwMDNlZmxhZ3MpO1xuMjIzNTpcdFx0XHRjYW5jZWxfZGVsYXllZF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VzdGF0c193b3JrKTtcbjIyMzY6XHRcdFx0bXhsODYyeHhfaG9zdF9zaHV0ZG93bihwcml2KTtcbjIyMzc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVhMODYyWFhfTUFYX1BPUlRTOyBpJiM0MzsmIzQzOylcbjIyMzg6XHRcdFx0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV0uaG9zdF9mbG9vZF93b3JrKTtcbjIyMzk6XHRcdH1cbjIyNDA6XHRcbjIyNDE6XHRcdHJldHVybiBlcnI7XG4yMjQyOlx0fVxuMjI0MzpcdFxuMjI0NDpcdHN0YXRpYyB2b2lkIG14bDg2Mnh4X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG4yMjQ1Olx0e1xuMjI0NjpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbjIyNDc6XHRcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2O1xuMjI0ODpcdFx0aW50IGk7XG4yMjQ5Olx0XG4yMjUwOlx0XHRpZiAoIWRzKVxuMjI1MTpcdFx0XHRyZXR1cm47XG4yMjUyOlx0XG4yMjUzOlx0XHRwcml2ID0gZHMtXHUwMDNlcHJpdjtcbjIyNTQ6XHRcbjIyNTU6XHRcdHNldF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFx1MDAyNnByaXYtXHUwMDNlZmxhZ3MpO1xuMjI1NjpcdFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlc3RhdHNfd29yayk7XG4yMjU3Olx0XG4yMjU4Olx0XHRkc2FfdW5yZWdpc3Rlcl9zd2l0Y2goZHMpO1xuMjI1OTpcdFxuMjI2MDpcdFx0bXhsODYyeHhfaG9zdF9zaHV0ZG93bihwcml2KTtcbjIyNjE6XHRcbjIyNjI6XHRcdC8qIENhbmNlbCBhbnkgcGVuZGluZyBob3N0IGZsb29kIHdvcmsuIGRzYV91bnJlZ2lzdGVyX3N3aXRjaCgpXG4yMjYzOlx0XHQgKiBoYXMgYWxyZWFkeSBjYWxsZWQgcG9ydF90ZWFyZG93biAod2hpY2ggc2V0cyBzZXR1cF9kb25lPWZhbHNlKSxcbjIyNjQ6XHRcdCAqIGJ1dCBhIHdvcmtlciBjb3VsZCBzdGlsbCBiZSBibG9ja2VkIG9uIHJ0bmxfbG9jaygpLiBTaW5jZSB3ZVxuMjI2NTpcdFx0ICogYXJlIG5vdyBvdXRzaWRlIFJUTkwsIGNhbmNlbF93b3JrX3N5bmMoKSB3aWxsIG5vdCBkZWFkbG9jay5cbjIyNjY6XHRcdCAqL1xuMjI2NzpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVhMODYyWFhfTUFYX1BPUlRTOyBpJiM0MzsmIzQzOylcbjIyNjg6XHRcdFx0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXBvcnRzW2ldLmhvc3RfZmxvb2Rfd29yayk7XG4yMjY5Olx0fVxuMjI3MDpcdFxuMjI3MTpcdHN0YXRpYyB2b2lkIG14bDg2Mnh4X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbjIyNzI6XHR7XG4yMjczOlx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuMjI3NDpcdFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXY7XG4yMjc1Olx0XHRpbnQgaTtcbjIyNzY6XHRcbjIyNzc6XHRcdGlmICghZHMpXG4yMjc4Olx0XHRcdHJldHVybjtcbjIyNzk6XHRcbjIyODA6XHRcdHByaXYgPSBkcy1cdTAwM2Vwcml2O1xuMjI4MTpcdFxuMjI4MjpcdFx0ZHNhX3N3aXRjaF9zaHV0ZG93bihkcyk7XG4yMjgzOlx0XG4yMjg0Olx0XHRzZXRfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKTtcbjIyODU6XHRcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXN0YXRzX3dvcmspO1xuMjI4NjpcdFxuMjI4NzpcdFx0bXhsODYyeHhfaG9zdF9zaHV0ZG93bihwcml2KTtcbjIyODg6XHRcbjIyODk6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE1YTDg2MlhYX01BWF9QT1JUUzsgaSYjNDM7JiM0MzspXG4yMjkwOlx0XHRcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2Vwb3J0c1tpXS5ob3N0X2Zsb29kX3dvcmspO1xuMjI5MTpcdFxuMjI5MjpcdFx0ZGV2X3NldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBOVUxMKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODI0OAoJCQkJCQkJb3V0cHV0OiA1MQoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIGVtYmVkZGVkIHN5c3RlbXMgYW5kIGRyaXZlciBkZXZlbG9wbWVudDoKCioqSW5pdGlhbCBUaG91Z2h0cyBvbiBhIFN3aXRjaCBSZWdpc3RyYXRpb24qKgoKQWxyaWdodCwgSSYjMzk7dmUgZ290IHRoZSBwcm9iZSBmdW5jdGlvbiByZWdpc3RlcmluZyB0aGUgc3dpdGNoIOKAkyBnb29kLCB0aGF0JiMzOTtzIHRoZSBlbnRyeSBwb2ludC4gVGhlIGNydWNpYWwgcGFydCBoZXJlIGlzIHRoYXQgYGRzYV9yZWdpc3Rlcl9zd2l0Y2hgIHdpbGwsIGF0IHNvbWUgcG9pbnQsIHRyaWdnZXIgYG14bDg2Mnh4X3NldHVwYC4gVGhhdOKAmXMgdGhlIHJlYWwgbWVhdCBvZiBzZXR0aW5nIHVwIHRoaXMgTVhMODYyeHggY2hpcCwgc28gdGhhdCYjMzk7cyB3aGVyZSBteSBhdHRlbnRpb24gbmVlZHMgdG8gc2hpZnQuIExldCYjMzk7cyBkaWcgaW50byBgbXhsODYyeHhfc2V0dXBgIGFuZCBzZWUgd2hhdCYjMzk7cyBoYXBwZW5pbmcgdGhlcmUuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBoYXJkd2FyZSBpbml0aWFsaXphdGlvbiBzZXF1ZW5jZSwgYW55IGNvbmZpZ3VyYXRpb24gcmVnaXN0ZXIgd3JpdGVzLCBhbmQgdGhlIG92ZXJhbGwgc3RhdGUgc2V0dXAgZm9yIHRoaXMgc3dpdGNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjY0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNjY0Olx0XHRpbnQgbl91c2VyX3BvcnRzID0gMCwgbWF4X3ZsYW5zO1xuIDY2NTpcdFx0aW50IGluZ3Jlc3NfZmluYWxzLCB2aWRfcnVsZXM7XG4gNjY2Olx0XHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xuIDY2NzpcdFx0aW50IHJldCwgaSwgcmVzY3VlO1xuIDY2ODpcdFxuIDY2OTpcdFx0LyogRGV0ZWN0IHRoZSBsb2FkZXIgb3ZlciBTQiBQREkgZmlyc3Q6IGl0IG5lZWRzIG5vIGZpcm13YXJlLCB1bmxpa2UgdGhlXG4gNjcwOlx0XHQgKiBDNDUgQVBJIChteGw4NjJ4eF9yZXNldC93YWl0X3JlYWR5KSB3aGljaCBzcGV3cyBDUkMgZXJyb3JzIHdoZW4gbm9uZVxuIDY3MTpcdFx0ICogYW5zd2Vycy4gVG91Y2ggQzQ1IG9ubHkgb25jZSByZXNjdWUgaXMgcnVsZWQgb3V0LlxuIDY3MjpcdFx0ICovXG4gNjczOlx0XHRyZXNjdWUgPSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QocHJpdik7XG4gNjc0Olx0XHRpZiAocmVzY3VlIFx1MDAzYyAwKVxuIDY3NTpcdFx0XHRyZXR1cm4gcmVzY3VlO1xuIDY3NjpcdFxuIDY3NzpcdFx0aWYgKHJlc2N1ZSA9PSBNWEw4NjJYWF9OT1RfUkVTQ1VFKSB7XG4gNjc4Olx0XHRcdHJldCA9IG14bDg2Mnh4X3Jlc2V0KHByaXYpO1xuIDY3OTpcdFx0XHRpZiAocmV0KVxuIDY4MDpcdFx0XHRcdHJldHVybiByZXQ7XG4gNjgxOlx0XG4gNjgyOlx0XHRcdHJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpO1xuIDY4MzpcdFx0XHRpZiAocmV0KSB7XG4gNjg0Olx0XHRcdFx0LyogdGhlIHJlc2V0IG1heSBvbmx5IG5vdyBoYXZlIHRyaWdnZXJlZCByZXNjdWUgbW9kZSAqL1xuIDY4NTpcdFx0XHRcdHJlc2N1ZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcbiA2ODY6XHRcdFx0XHRpZiAocmVzY3VlIFx1MDAzYyAwKVxuIDY4NzpcdFx0XHRcdFx0cmV0dXJuIHJlc2N1ZTtcbiA2ODg6XHRcdFx0XHRpZiAocmVzY3VlID09IE1YTDg2MlhYX05PVF9SRVNDVUUpXG4gNjg5Olx0XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDY5MDpcdFx0XHR9XG4gNjkxOlx0XHR9XG4gNjkyOlx0XG4gNjkzOlx0XHRwcml2LVx1MDAzZXJlc2N1ZV9tb2RlID0gcmVzY3VlO1xuIDY5NDpcdFxuIDY5NTpcdFx0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpIHtcbiA2OTY6XHRcdFx0aWYgKHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5KSB7XG4gNjk3Olx0XHRcdFx0ZGV2X3dhcm4oZHMtXHUwMDNlZGV2LFxuIDY5ODpcdFx0XHRcdFx0IFwmIzM0O3N3aXRjaCBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXG5cJiMzNDspO1xuIDY5OTpcdFx0XHR9IGVsc2Uge1xuIDcwMDpcdFx0XHRcdC8qIERyYWluIHRoZSB3ZWRnZWQgZG93bmxvYWQgaW4gdGhlIGJhY2tncm91bmQgc28gaXRcbiA3MDE6XHRcdFx0XHQgKiBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrOyBpbmZvIGFuZCBmbGFzaCBiZWNvbWVcbiA3MDI6XHRcdFx0XHQgKiBhdmFpbGFibGUgb25jZSByZWFkeS5cbiA3MDM6XHRcdFx0XHQgKi9cbiA3MDQ6XHRcdFx0XHRkZXZfd2Fybihkcy1cdTAwM2VkZXYsXG4gNzA1Olx0XHRcdFx0XHQgXCYjMzQ7c3dpdGNoIGluIE1DVWJvb3Qgd2l0aCBhbiBpbnRlcnJ1cHRlZCBkb3dubG9hZCwgcmVjb3ZlcmluZyBpbiBiYWNrZ3JvdW5kXFxuXCYjMzQ7KTtcbiA3MDY6XHRcdFx0XHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xuIDcwNzpcdFx0XHR9XG4gNzA4Olx0XHRcdHJldHVybiAwO1xuIDcwOTpcdFx0fVxuIDcxMDpcdFxuIDcxMTpcdFx0bXV0ZXhfaW5pdChcdTAwMjZwcml2LVx1MDAzZXNlcmRlc19sb2NrKTtcbiA3MTI6XHRcdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VzZXJkZXNfcG9ydHMpOyBpJiM0MzsmIzQzOylcbiA3MTM6XHRcdFx0bXhsODYyeHhfc2V0dXBfcGNzKHByaXYsIFx1MDAyNnByaXYtXHUwMDNlc2VyZGVzX3BvcnRzW2ldLFxuIDcxNDpcdFx0XHRcdFx0ICAgaSAmIzQzOyBNWEw4NjJYWF9GSVJTVF9TRVJERVNfUE9SVCk7XG4gNzE1Olx0XG4gNzE2Olx0XHQvKiBDYWxjdWxhdGUgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplcy5cbiA3MTc6XHRcdCAqIFdpdGggVkxBTiBGaWx0ZXIgaGFuZGxpbmcgVklEIG1lbWJlcnNoaXAgY2hlY2tzOlxuIDcxODpcdFx0ICogICBJbmdyZXNzOiBvbmx5IGZpbmFsIGNhdGNoYWxsIHJ1bGVzIChQVklEIGluc2VydGlvbiwgODAyLjFRXG4gNzE5Olx0XHQgKiAgICAgICAgICAgIGFjY2VwdCwgbm9uLTgwMjFRIFRQSUQgaGFuZGxpbmcsIGRpc2NhcmQpLlxuIDcyMDpcdFx0ICogICAgICAgICAgICBCbG9jayBzaXplZCB0byBleGFjdGx5IGZpdCB0aGUgZmluYWxzIC0tIG5vIHBlci1WSURcbiA3MjE6XHRcdCAqICAgICAgICAgICAgaW5ncmVzcyBFVkxBTiBydWxlcyBhcmUgbmVlZGVkLiAoNyBlbnRyaWVzLilcbiA3MjI6XHRcdCAqICAgRWdyZXNzOiAgMiBydWxlcyBwZXIgVklEIHRoYXQgbmVlZHMgdGFnIHN0cmlwcGluZyAodW50YWdnZWQgVklEcykuXG4gNzIzOlx0XHQgKiAgICAgICAgICAgIE5vIGVncmVzcyBmaW5hbCBjYXRjaGFsbHMgLS0gVkxBTiBGaWx0ZXIgZG9lcyB0aGUgZGlzY2FyZC5cbiA3MjQ6XHRcdCAqICAgQ1BVOiAgICAgRVZMQU4gaXMgbGVmdCBkaXNhYmxlZCBvbiBDUFUgcG9ydHMgLS0gZnJhbWVzIHBhc3NcbiA3MjU6XHRcdCAqICAgICAgICAgICAgdGhyb3VnaCB3aXRob3V0IEVWTEFOIHByb2Nlc3NpbmcuXG4gNzI2Olx0XHQgKlxuIDcyNzpcdFx0ICogVG90YWwgRVZMQU4gYnVkZ2V0OlxuIDcyODpcdFx0ICogICBuX3VzZXJfcG9ydHMgKiAoaW5ncmVzcyAmIzQzOyBlZ3Jlc3MpIFx1MDAzYz0gMTAyNC5cbiA3Mjk6XHRcdCAqIEluZ3Jlc3MgYmxvY2tzIGFyZSBzbWFsbCAoNyBlbnRyaWVzKSwgc28gYWxtb3N0IGFsbCBjYXBhY2l0eVxuIDczMDpcdFx0ICogZ29lcyB0byBlZ3Jlc3MgVklEIHJ1bGVzLlxuIDczMTpcdFx0ICovXG4gNzMyOlx0XHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpXG4gNzMzOlx0XHRcdG5fdXNlcl9wb3J0cyYjNDM7JiM0Mzs7XG4gNzM0Olx0XG4gNzM1Olx0XHRpZiAobl91c2VyX3BvcnRzKSB7XG4gNzM2Olx0XHRcdGluZ3Jlc3NfZmluYWxzID0gQVJSQVlfU0laRShpbmdyZXNzX2F3YXJlX2ZpbmFsKTtcbiA3Mzc6XHRcdFx0dmlkX3J1bGVzID0gQVJSQVlfU0laRSh2aWRfYWNjZXB0X3N0YW5kYXJkKTtcbiA3Mzg6XHRcbiA3Mzk6XHRcdFx0LyogSW5ncmVzcyBibG9jazogZml4ZWQgYXQgZmluYWxzIGNvdW50ICg3IGVudHJpZXMpICovXG4gNzQwOlx0XHRcdHByaXYtXHUwMDNlZXZsYW5faW5ncmVzc19zaXplID0gaW5ncmVzc19maW5hbHM7XG4gNzQxOlx0XG4gNzQyOlx0XHRcdC8qIEVncmVzcyBibG9jazogcmVtYWluaW5nIGJ1ZGdldCBkaXZpZGVkIGVxdWFsbHkgYW1vbmdcbiA3NDM6XHRcdFx0ICogdXNlciBwb3J0cy4gRWFjaCB1bnRhZ2dlZCBWSUQgbmVlZHMgdmlkX3J1bGVzICgyKVxuIDc0NDpcdFx0XHQgKiBFVkxBTiBlbnRyaWVzIGZvciB0YWcgc3RyaXBwaW5nLiBUYWdnZWQtb25seSBWSURzXG4gNzQ1Olx0XHRcdCAqIG5lZWQgbm8gRVZMQU4gcnVsZXMgYXQgYWxsLlxuIDc0NjpcdFx0XHQgKi9cbiA3NDc6XHRcdFx0bWF4X3ZsYW5zID0gKE1YTDg2MlhYX1RPVEFMX0VWTEFOX0VOVFJJRVMgLVxuIDc0ODpcdFx0XHRcdCAgICAgbl91c2VyX3BvcnRzICogaW5ncmVzc19maW5hbHMpIC9cbiA3NDk6XHRcdFx0XHQgICAgKG5fdXNlcl9wb3J0cyAqIHZpZF9ydWxlcyk7XG4gNzUwOlx0XHRcdHByaXYtXHUwMDNlZXZsYW5fZWdyZXNzX3NpemUgPSB2aWRfcnVsZXMgKiBtYXhfdmxhbnM7XG4gNzUxOlx0XG4gNzUyOlx0XHRcdC8qIFZMQU4gRmlsdGVyIGJsb2NrOiBvbmUgcGVyIHVzZXIgcG9ydC4gVGhlIDEwMjQtZW50cnlcbiA3NTM6XHRcdFx0ICogdGFibGUgaXMgZGl2aWRlZCBlcXVhbGx5IGFtb25nIHVzZXIgcG9ydHMuIEVhY2ggcG9ydFxuIDc1NDpcdFx0XHQgKiBnZXRzIGl0cyBvd24gVkYgYmxvY2sgZm9yIHBlci1wb3J0IFZJRCBtZW1iZXJzaGlwIC0tXG4gNzU1Olx0XHRcdCAqIGRpc2NhcmRfdW5tYXRjaGVkX3RhZ2dlZCBoYW5kbGVzIHRoZSByZXN0LlxuIDc1NjpcdFx0XHQgKi9cbiA3NTc6XHRcdFx0cHJpdi1cdTAwM2V2Zl9ibG9ja19zaXplID0gTVhMODYyWFhfVE9UQUxfVkZfRU5UUklFUyAvIG5fdXNlcl9wb3J0cztcbiA3NTg6XHRcdH1cbiA3NTk6XHRcbiA3NjA6XHRcdHJldCA9IG14bDg2Mnh4X3NldHVwX2Ryb3BfbWV0ZXIoZHMpO1xuIDc2MTpcdFx0aWYgKHJldClcbiA3NjI6XHRcdFx0cmV0dXJuIHJldDtcbiA3NjM6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzAxNjgKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QgRnVuY3Rpb24qKgoKQWxyaWdodCwgbGV0JiMzOTtzIHRha2UgYSBsb29rIGF0IHRoaXMgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgZnVuY3Rpb24uIEZyb20gd2hhdCBJIHNlZSwgaXQmIzM5O3MgZGVzaWduZWQgdG8gcmVhZCBzb21lIGRhdGEgZnJvbSBNRElPLiBTZWVtcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkIC0gdHJ5aW5nIHRvIHByb2JlIGEgUEhZLCBsaWtlbHkgZHVyaW5nIHNvbWUgc29ydCBvZiByZWNvdmVyeSBvciBib290IHByb2Nlc3MuIFRoZSBjcml0aWNhbCBwYXJ0IGlzIHRoYXQgaWYgdGhpcyBNRElPIHJlYWQgZ29lcyBzb3V0aCwgdGhlIGZ1bmN0aW9uJiMzOTtzIGdvaW5nIHRvIHJldHVybiBhIG5lZ2F0aXZlIHZhbHVlLCB3aGljaCBpcyBteSBpbmRpY2F0b3Igb2YgYSBmYWlsdXJlLiBNYWtlcyBzZW5zZTsgZmFpbHVyZSB0byBjb21tdW5pY2F0ZSBvdmVyIE1ESU8gdG8gYSBQSFkgaW4gZWFybHkgYm9vdCBpcyBvZnRlbiBhIHNob3dzdG9wcGVyLiBMZXQgbWUgZ28gYWhlYWQgYW5kIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGUgZGV0YWlscyBvZiB0aGUgaW1wbGVtZW50YXRpb24gdG8gc2VlIGlmIGFueXRoaW5nIGp1bXBzIG91dC4gSeKAmW0gZ3Vlc3NpbmcgaXTigJlzIGxvb2tpbmcgZm9yIGEgc3BlY2lmaWMgcmVnaXN0ZXIgdmFsdWUgb3IgYml0IHBhdHRlcm4uIEkmIzM5O2xsIGNoZWNrIGhvdyByb2J1c3QgdGhlIE1ESU8gYWNjZXNzIGl0c2VsZiBpcyAtIGFyZSB0aGVyZSByZXRyaWVzPyBUaW1lb3V0IGNvbnNpZGVyYXRpb25zPyBBbnkgY2hhbmNlIG9mIGVycmF0YSByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgc2lsaWNvbiB2ZXJzaW9uPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMjUwOlx0LyogUmVjb3ZlciBhIHN3aXRjaCB3aG9zZSBTQiBQREkgZG93bmxvYWQgd2FzIGludGVycnVwdGVkIG1pZC10cmFuc2ZlciAtIHRoZVxuIDI1MTpcdCAqIGhvc3QgZGllZCBhZnRlciBNQ1Vib290IGJlZ2FuIGVyYXNpbmcgZmxhc2gsIHdoZXRoZXIgaXQgYWJvcnRlZCBtaWQgZXJhc2Ugb3JcbiAyNTI6XHQgKiBtaWQgaW1hZ2Utd3JpdGUsIGJvdGggZW5kIHVwIGluIHRoZSBzYW1lIHBsYWNlOiB0aGUgcGF5bG9hZCByZWNlaXZlIGxvb3AuXG4gMjUzOlx0ICogVGhlcmUgdGhlIGxvYWRlciBwdWJsaXNoZXMgU1RBVD0wLCB3YWl0cyBmb3IgdGhlIGhvc3QgdG8gd3JpdGUgYSBieXRlLWNvdW50XG4gMjU0Olx0ICogdG8gU1RBVCwgRE1BcyB0aGF0IG1hbnkgYnl0ZXMgYW5kIHN1YnRyYWN0cyB0aGUgY291bnQgZnJvbSBhIHJlbWFpbmluZy1ieXRlc1xuIDI1NTpcdCAqIGNvdW50ZXIsIGxlYXZpbmcgdGhlIGxvb3Agb25seSB3aGVuIHRoZSBjb3VudGVyIHJlYWNoZXMgZXhhY3RseSB6ZXJvLiBUaGVcbiAyNTY6XHQgKiBpbWFnZSBzaXplIGRpZWQgd2l0aCB0aGUgaG9zdCwgc28gd2UgZmVlZCBzaW5nbGUtYnl0ZSBjaHVua3MgKHNlZVxuIDI1NzpcdCAqIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTKSB0byB3YWxrIHRoZSBjb3VudGVyIHRvIHplcm8gd2l0aG91dCB1bmRlcmZsb3csXG4gMjU4Olx0ICogdGhlbiBzZW5kIEVORC4gVGhlIGxvYWRlciBydW5zIGl0cyAoZmFpbGVkKSBjaGVja3N1bSBhbmQgZWl0aGVyIHJlLWFybXNcbiAyNTk6XHQgKiBSRUFEWSBvciwgaWYgYSB2YWxpZCBpbWFnZSBzdXJ2aXZlZCBpbiBmbGFzaCwgYm9vdHMgaXQuIFJldHVybnMgMCB3aGVuIFJFQURZXG4gMjYwOlx0ICogaXMgcmVhY2hlZCAodGhlIGNhbGxlciBjYW4gZmxhc2gpLCAxIHdoZW4gdGhlIGxvYWRlciBib290ZWQgaW5zdGVhZCAodGhlXG4gMjYxOlx0ICogc3dpdGNoIGlzIHJlY292ZXJlZCBidXQgdGhlIGludGVuZGVkIGltYWdlIHdhcyBub3Qgd3JpdHRlbiksIFx1MDAzYzAgb24gZXJyb3IuXG4gMjYyOlx0ICogRG9lcyBOT1QgcmVjb3ZlciBhIGNvdW50ZXIgYWxyZWFkeSB1bmRlcmZsb3dlZCBieSBhbiBlYXJsaWVyIG92ZXJzaXplZC1jaHVua1xuIDI2MzpcdCAqIGF0dGVtcHQgLSB0aGF0IG5lZWRzIGEgcG93ZXIgY3ljbGUuXG4gMjY0Olx0ICovXG4gMjY1Olx0c3RhdGljIGludCBteGw4NjJ4eF9yZXNjdWVfZHJhaW4oc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4gMjY2Olx0e1xuIDI2NzpcdFx0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbiAyNjg6XHRcdC8qIEJvdW5kOiB0d2ljZSB0aGUgbG9hZGVyJiMzOTtzIDE2IE1pQiBpbWFnZSBjYXAsIG9uZSBieXRlIHBlciBjaHVuay4gKi9cbiAyNjk6XHRcdHUzMiBtYXhfY2h1bmtzID0gMnUgKiAoMTZ1IFx1MDAzY1x1MDAzYyAyMCkgLyBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUztcbiAyNzA6XHRcdHUzMiBjaHVuayA9IDA7XG4gMjcxOlx0XHRpbnQgcmV0O1xuIDI3MjpcdFxuIDI3MzpcdFx0ZGV2X3dhcm4oZGV2LCBcJiMzNDtmbGFzaDogZHJhaW5pbmcgaW50ZXJydXB0ZWQgZG93bmxvYWRcXG5cJiMzNDspO1xuIDI3NDpcdFxuIDI3NTpcdFx0d2hpbGUgKGNodW5rIFx1MDAzYyBtYXhfY2h1bmtzKSB7XG4gMjc2Olx0XHRcdC8qIFRlYXJkb3duIGNhbiBpbnRlcnJ1cHQgdGhpcyBtaW51dGVzLWxvbmcgZHJhaW4uICovXG4gMjc3Olx0XHRcdGlmICh0ZXN0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXHUwMDI2cHJpdi1cdTAwM2VmbGFncykpXG4gMjc4Olx0XHRcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4gMjc5Olx0XG4gMjgwOlx0XHRcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX2RyYWluKHByaXYsIDIwMDApO1xuIDI4MTpcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDI4MjpcdFx0XHRcdHJldHVybiByZXQ7XG4gMjgzOlx0XHRcdGlmIChyZXQgPT0gTVhMODYyWFhfRFJBSU5fUkVBRFkpXG4gMjg0Olx0XHRcdFx0cmV0dXJuIDA7XG4gMjg1Olx0XHRcdGlmIChyZXQgPT0gTVhMODYyWFhfRFJBSU5fQlVTWSlcbiAyODY6XHRcdFx0XHRicmVhaztcbiAyODc6XHRcbiAyODg6XHRcdFx0LyogRmVlZCBvbmUgemVybyBieXRlOyByZXNldCBjbGVhcmVkIHRoZSB3cml0ZSBsYXRjaC4gKi9cbiAyODk6XHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4gMjkwOlx0XHRcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbiAyOTE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyOTI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDI5MzpcdFx0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgMHgwMDAwKTtcbiAyOTQ6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAyOTU6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDI5NjpcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4gMjk3Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMjk4Olx0XHRcdFx0cmV0dXJuIHJldDtcbiAyOTk6XHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4gMzAwOlx0XHRcdFx0XHRcdCAgIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTKTtcbiAzMDE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiAzMDI6XHRcdFx0XHRyZXR1cm4gcmV0O1xuIDMwMzpcdFx0XHRjaHVuayYjNDM7JiM0Mzs7XG4gMzA0Olx0XHRcdGNvbmRfcmVzY2hlZCgpO1xuIDMwNTpcdFx0fVxuIDMwNjpcdFxuIDMwNzpcdFx0aWYgKGNodW5rIFx1MDAzZT0gbWF4X2NodW5rcykge1xuIDMwODpcdFx0XHRkZXZfZXJyKGRldixcbiAzMDk6XHRcdFx0XHRcJiMzNDtmbGFzaDogaW50ZXJydXB0ZWQgZG93bmxvYWQgZGlkIG5vdCBkcmFpbiBhZnRlciAldSBjaHVua3NcXG5cJiMzNDssXG4gMzEwOlx0XHRcdFx0Y2h1bmspO1xuIDMxMTpcdFx0XHRyZXR1cm4gLUVUSU1FRE9VVDtcbiAzMTI6XHRcdH1cbiAzMTM6XHRcbiAzMTQ6XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuIDMxNTpcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0VORCk7XG4gMzE2Olx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDMxNzpcdFx0XHRyZXR1cm4gcmV0O1xuIDMxODpcdFxuIDMxOTpcdFx0cmV0dXJuIG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxuIDMyMDpcdFx0XHRcdFx0XHQgTVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpO1xuIDMyMTpcdH1cbiAzMjI6XHRcbiAzMjM6XHQvKiBCYWNrZ3JvdW5kIHNlbGYtaGVhbDogZHJhaW4gYSB3ZWRnZWQgZG93bmxvYWQgYmFjayB0byBSRUFEWSBvZmYgdGhlIGRldmxpbmtcbiAzMjQ6XHQgKiBmbGFzaCBwYXRoLCBzbyB0aGUgbWludXRlcy1sb25nIHJlY292ZXJ5IG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2suXG4gMzI1Olx0ICogU2NoZWR1bGVkIGZyb20gcHJvYmU7IHB1Ymxpc2hlcyByZXNjdWVfcmVhZHkgb24gc3VjY2Vzcy5cbiAzMjY6XHQgKi9cbiAzMjc6XHR2b2lkIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxuIDMyODpcdHtcbiAzMjk6XHRcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID1cbiAzMzA6XHRcdFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9wcml2LCByZXNjdWVfaGVhbF93b3JrKTtcbiAzMzE6XHRcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXY7XG4gMzMyOlx0XHRpbnQgcmV0O1xuIDMzMzpcdFxuIDMzNDpcdFx0ZGV2X2luZm8oZGV2LCBcJiMzNDtyZWNvdmVyaW5nIGludGVycnVwdGVkIGRvd25sb2FkIGluIGJhY2tncm91bmRcXG5cJiMzNDspO1xuIDMzNTpcdFx0cmV0ID0gbXhsODYyeHhfcmVzY3VlX2RyYWluKHByaXYpO1xuIDMzNjpcdFx0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKSlcbiAzMzc6XHRcdFx0cmV0dXJuO1xuIDMzODpcdFx0aWYgKCFyZXQpIHtcbiAzMzk6XHRcdFx0V1JJVEVfT05DRShwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSwgdHJ1ZSk7XG4gMzQwOlx0XHRcdGRldl9pbmZvKGRldiwgXCYjMzQ7cmVjb3ZlcnkgY29tcGxldGUsIHJlYWR5IHRvIGZsYXNoXFxuXCYjMzQ7KTtcbiAzNDE6XHRcdH1cbiAzNDI6XHR9XG4gMzQzOlx0XG4gMzQ0Olx0LyogRGV0ZWN0IE1DVWJvb3QgcmVzY3VlIG1vZGUgb3ZlciBjbGF1c2UtMjIgU01ESU8gYWxvbmUsIHNvIHRoZSBjYWxsZXIgY2FuIHJ1bGVcbiAzNDU6XHQgKiB0aGUgbG9hZGVyIG91dCBiZWZvcmUgYW55IEM0NSBBUEkgcmVxdWVzdCAod2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vIFdTUFxuIDM0NjpcdCAqIGZpcm13YXJlIGFuc3dlcnMpLiBBIHNjcmF0Y2ggd3JpdGUgdG8gQUREUi9EQVRBIG11c3QgbGF0Y2ggb3IgdGhlIGNoaXAgaXNcbiAzNDc6XHQgKiBhYnNlbnQgKC1FTk9ERVYpOyBTVEFUIHRoZW4gY2xhc3NpZmllcyB0aGUgc3RhdGUsIHBva2VkIGRlc3RydWN0aXZlbHkgb25seVxuIDM0ODpcdCAqIHdoZW4gMCwgdGhlIG9uZSB2YWx1ZSBhIHJ1bm5pbmcgZmlybXdhcmUgbmV2ZXIgaG9sZHM6XG4gMzQ5Olx0ICpcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzIzNjUKCQkJCQkJCW91dHB1dDogNTMKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3RgIGZ1bmN0aW9uIGFuZCB3aGF0JiMzOTtzIHByb2JhYmx5IGdvaW5nIHRocm91Z2ggbXkgaGVhZDoKCioqQW5hbHl6aW5nIGBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3RgKioKCkFscmlnaHQsIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgZnVuY3Rpb24sIGBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3RgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgJiMzNDtPa2F5LCB0aGlzIGlzIGFib3V0IGlkZW50aWZ5aW5nIGlmIHRoZSBzeXN0ZW0gaXMgaW4gc29tZSBraW5kIG9mIHJlY292ZXJ5IG9yIHJlc2N1ZSBzdGF0ZS4gUHJvYmFibHkgYSBjcml0aWNhbCBmdW5jdGlvbiwgZ2l2ZW4gdGhlIG5hbWUuJiMzNDsgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGVudHJ5IHBvaW50IHNvIEkgY2FuIHVuZGVyc3RhbmQgd2hhdCBzaWduYWxzIG9yIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcyB3b3VsZCBpbmRpY2F0ZSBhICYjMzk7cmVzY3VlIG1vZGUmIzM5Oy4KCkkmIzM5O20gc3RhcnRpbmcgdG8gdGhpbmsgYWJvdXQgd2hhdCBzb3J0IG9mIGhhcmR3YXJlIGlzIHJ1bm5pbmcgdGhpcyBhbmQgd2hhdCBmYWlsdXJlIHN0YXRlcyBjYW4gaGFwcGVuLiBJcyB0aGlzIGZvciBhIGJvb3Rsb2FkZXI/IEEgc3BlY2lmaWMgY2hpcD8gRG9lcyBpdCB1c2UgR1BJTyBwaW5zLCBtZW1vcnkgYWRkcmVzc2VzLCBvciBhIHNwZWNpZmljIHJlZ2lzdGVyIGNvbmZpZ3VyYXRpb24gdG8gZGV0ZXJtaW5lIHRoZSBtb2RlPyBXaGF0IGFyZSB0aGUgcG9zc2libGUgdHJpZ2dlcnMgZm9yIHJlc2N1ZSBtb2RlPyBQb3dlci1vbiBzZXF1ZW5jZT8gU3BlY2lmaWMga2V5IHByZXNzZXM/IEVycm9yIGZsYWdzIGZyb20gYSBwcmV2aW91cyBib290IGF0dGVtcHQ/IEkgbmVlZCB0byBsb29rIGZvciB0aG9zZSBoaW50cy4KCkkmIzM5O20gZ29pbmcgdG8gc3RhcnQgbWVudGFsbHkgdHJhY2luZyBleGVjdXRpb24uIFdoYXQgYXJlIHRoZSBjaGVja3MgaGFwcGVuaW5nIGluc2lkZSB0aGUgZnVuY3Rpb24/IFdoYXQgYXJlIHRoZSBsb2dpY2FsIGNvbmRpdGlvbnMgYW5kIGJyYW5jaGluZz8gSSYjMzk7bSBhbnRpY2lwYXRpbmcgdGhhdCB0aGVyZSYjMzk7bGwgYmUgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgY2hlY2tpbmcgdmFyaW91cyBwYXJhbWV0ZXJzLiBBcmUgdGhlcmUgc3BlY2lmaWMgcmVnaXN0ZXIgcmVhZHM/IElmIHNvLCB3aGljaCBvbmVzIGFuZCB3aGF0IGFyZSB0aGUgZXhwZWN0ZWQgdmFsdWVzPyBBbnkgc3BlY2lmaWMgbWVtb3J5IGxvY2F0aW9ucyBiZWluZyBleGFtaW5lZD8gV2hhdCYjMzk7cyB0aGUgaW1wYWN0IG9mIGVhY2ggb2YgdGhlIGNvbmRpdGlvbnMsIGlzIGEgcmVzY3VlIG1vZGUgaW5kaWNhdGVkIGJ5IGEgcmV0dXJuIHZhbHVlLCBvciBhIHNpZGUtZWZmZWN0PwoKSSYjMzk7bSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSBwb3NpdGl2ZSBkZXRlY3Rpb24uIERvZXMgaXQgaGFsdCBleGVjdXRpb24sIG1vZGlmeSBib290IHBhcmFtZXRlcnMsIG9yIHBlcmhhcHMgaW5pdGlhdGUgYSBkaWZmZXJlbnQgYm9vdCBzZXF1ZW5jZSBvciBhdHRlbXB0IGEgY2hpcCByZWNvdmVyeT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCBvdGhlciBmdW5jdGlvbnMgY2FsbCB0aGlzPyBXaGF0IGRvZXMgdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZSBsb29rIGxpa2U/IEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgZXNwZWNpYWxseSB3aGF0JiMzOTtzIGhhcHBlbmluZyAqYWZ0ZXIqIHRoaXMgZnVuY3Rpb24uIENvbnRleHQgaXMgY3J1Y2lhbC4KClVsdGltYXRlbHksIEkmIzM5O20gdHJ5aW5nIHRvIGJ1aWxkIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBzbyBJIGNhbiBjb25maWRlbnRseSBkZXRlcm1pbmUgd2hlbiBpdCYjMzk7cyBiZWluZyB1c2VkIGFuZCBpbiB3aGF0IGNvbnRleHQuIEl0IGxvb2tzIGxpa2UgaXQgaXMgcmVzY3VlIG1vZGUgZGV0ZWN0aW9uLCBJIHdhbnQgdG8gdW5kZXJzdGFuZCBob3cgaXQgZ2V0cyBpbnRvIHJlc2N1ZSBtb2RlIGFuZCBvdXQgb2YgaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAzNTA6XHQgKiAgLSAweGMzM2M6IGZsYXNobGVzcyBsb29wLCByZWFkeS5cbiAzNTE6XHQgKiAgLSAweGM1NWM6IGNvbnNvbGUgbG9vcCwgaWYgdGhlIHJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIGlzIHNlcnZpY2VkLlxuIDM1MjpcdCAqICAtIG90aGVyIG5vbi16ZXJvOiBydW5uaW5nIGZpcm13YXJlLCBsZWZ0IHVucG9rZWQuXG4gMzUzOlx0ICogIC0gMDogd2VkZ2VkIHJlY2VpdmUgbG9vcCwgaWYgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBkcmFpbnMgYmFjayB0byAwLlxuIDM1NDpcdCAqXG4gMzU1Olx0ICogUmV0dXJuOiBNWEw4NjJYWF9JTl9SRVNDVUUsIE1YTDg2MlhYX05PVF9SRVNDVUUsIG9yIG5lZ2F0aXZlICgtRU5PREVWL1NNRElPKS5cbiAzNTY6XHQgKi9cbiAzNTc6XHRpbnQgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuIDM1ODpcdHtcbiAzNTk6XHRcdGludCBzdGF0LCBkYXQsIHJldCwgcmIsIGEsIGQ7XG4gMzYwOlx0XG4gMzYxOlx0XHQvKiByZXNjdWVfcmVhZHkgZ2F0ZXMgZmxhc2hpbmc7IGEgd2VkZ2VkIGxvYWRlciBuZWVkcyB0aGUgZHJhaW4gZmlyc3QuICovXG4gMzYyOlx0XHRwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSA9IGZhbHNlO1xuIDM2MzpcdFxuIDM2NDpcdFx0LyogUHJlc2VuY2U6IGEgbGl2ZSBjaGlwIGxhdGNoZXMgdGhlIHNjcmF0Y2ggd3JpdGUsIGFuIGFic2VudCBvbmUgZmxvYXRzLiAqL1xuIDM2NTpcdFx0YSA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuIDM2NjpcdFx0XHRcdFx0IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BKTtcbiAzNjc6XHRcdGlmIChhIFx1MDAzYyAwKVxuIDM2ODpcdFx0XHRyZXR1cm4gYTtcbiAzNjk6XHRcdGQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcbiAzNzA6XHRcdFx0XHRcdCBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRCk7XG4gMzcxOlx0XHRpZiAoZCBcdTAwM2MgMClcbiAzNzI6XHRcdFx0cmV0dXJuIGQ7XG4gMzczOlx0XHRhID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUik7XG4gMzc0Olx0XHRpZiAoYSBcdTAwM2MgMClcbiAzNzU6XHRcdFx0cmV0dXJuIGE7XG4gMzc2Olx0XHRkID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7XG4gMzc3Olx0XHRpZiAoZCBcdTAwM2MgMClcbiAzNzg6XHRcdFx0cmV0dXJuIGQ7XG4gMzc5Olx0XHRpZiAoKHUxNilhICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BIHx8XG4gMzgwOlx0XHQgICAgKHUxNilkICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9EKVxuIDM4MTpcdFx0XHRyZXR1cm4gLUVOT0RFVjtcbiAzODI6XHRcbiAzODM6XHRcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbiAzODQ6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gMzg1Olx0XHRcdHJldHVybiByZXQ7XG4gMzg2Olx0XG4gMzg3Olx0XHRzdGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4gMzg4Olx0XHRpZiAoc3RhdCBcdTAwM2MgMClcbiAzODk6XHRcdFx0cmV0dXJuIHN0YXQ7XG4gMzkwOlx0XG4gMzkxOlx0XHQvKiBGbGFzaGxlc3MtZG93bmxvYWQgbG9vcDogdW5hbWJpZ3VvdXMgcmVhZHkgbWFnaWMsIGxlYXZlIGl0IGFsb25lLiAqL1xuIDM5MjpcdFx0aWYgKCh1MTYpc3RhdCA9PSBNWEw4NjJYWF9TQl9QRElfRExfUkVBRFkpIHtcbiAzOTM6XHRcdFx0cHJpdi1cdTAwM2VyZXNjdWVfcmVhZHkgPSB0cnVlO1xuIDM5NDpcdFx0XHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xuIDM5NTpcdFx0fVxuIDM5NjpcdFxuIDM5NzpcdFx0LyogQ29uc29sZSBsb29wIGF0IFJFQURZOiBjb25maXJtIHRoZSBsaXZlIG1haWxib3ggd2l0aCB0aGUgcmVnaXN0ZXItcmVhZFxuIDM5ODpcdFx0ICogY2hhbGxlbmdlIChjb25zdW1lcyB0aGUgbWFya2VyIGZyb20gREFUQSBhbmQgcmUtYXJtcyBSRUFEWSkuXG4gMzk5Olx0XHQgKi9cbiA0MDA6XHRcdGlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX1JFQURZKSB7XG4gNDAxOlx0XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLFxuIDQwMjpcdFx0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSyk7XG4gNDAzOlx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNDA0Olx0XHRcdFx0cmV0dXJuIHJldDtcbiA0MDU6XHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4gNDA2Olx0XHRcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9SRFJFRyk7XG4gNDA3Olx0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNDA4Olx0XHRcdFx0cmV0dXJuIHJldDtcbiA0MDk6XHRcdFx0cmIgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIE1YTDg2MlhYX1NCX1BESV9SRUFEWSxcbiA0MTA6XHRcdFx0XHRcdFx0ICAgICAgIE1YTDg2MlhYX1JFU0NVRV9SRUFEWV9USU1FT1VUX01TKTtcbiA0MTE6XHRcdFx0ZGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7XG4gNDEyOlx0XHRcdGlmIChkYXQgXHUwMDNjIDApXG4gNDEzOlx0XHRcdFx0cmV0dXJuIGRhdDtcbiA0MTQ6XHRcdFx0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xuIDQxNTpcdFx0XHRpZiAoIXJiIFx1MDAyNlx1MDAyNiAodTE2KWRhdCAhPSBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSykge1xuIDQxNjpcdFx0XHRcdHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5ID0gdHJ1ZTtcbiA0MTc6XHRcdFx0XHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xuIDQxODpcdFx0XHR9XG4gNDE5Olx0XHRcdHJldHVybiAtRU5PREVWO1xuIDQyMDpcdFx0fVxuIDQyMTpcdFxuIDQyMjpcdFx0LyogQW55IG90aGVyIG5vbi16ZXJvIHZhbHVlIGlzIGEgcnVubmluZyBmaXJtd2FyZSwgbm90IGEgbG9hZGVyLiAqL1xuIDQyMzpcdFx0aWYgKHN0YXQpXG4gNDI0Olx0XHRcdHJldHVybiBNWEw4NjJYWF9OT1RfUkVTQ1VFO1xuIDQyNTpcdFxuIDQyNjpcdFx0LyogU1RBVCA9PSAwOiBhIHdlZGdlZCByZWNlaXZlIGxvb3AgY29uc3VtZXMgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBiYWNrXG4gNDI3Olx0XHQgKiB0byAwIChmZWVkIG9uZSBEQVRBIHdvcmQgZmlyc3QsIGxpa2UgYSBkcmFpbiBjaHVuaykuXG4gNDI4Olx0XHQgKi9cbiA0Mjk6XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuIDQzMDpcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuIDQzMTpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA0MzI6XHRcdFx0cmV0dXJuIHJldDtcbiA0MzM6XHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCAweDAwMDApO1xuIDQzNDpcdFx0aWYgKHJldCBcdTAwM2MgMClcbiA0MzU6XHRcdFx0cmV0dXJuIHJldDtcbiA0MzY6XHRcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbiA0Mzc6XHRcdGlmIChyZXQgXHUwMDNjIDApXG4gNDM4Olx0XHRcdHJldHVybiByZXQ7XG4gNDM5Olx0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgMSk7XG4gNDQwOlx0XHRpZiAocmV0IFx1MDAzYyAwKVxuIDQ0MTpcdFx0XHRyZXR1cm4gcmV0O1xuIDQ0MjpcdFx0cmIgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsIE1YTDg2MlhYX1JFU0NVRV9SRUFEWV9USU1FT1VUX01TKTtcbiA0NDM6XHRcdGlmICghcmIpXG4gNDQ0Olx0XHRcdHJldHVybiBNWEw4NjJYWF9JTl9SRVNDVUU7XG4gNDQ1Olx0XG4gNDQ2Olx0XHRyZXR1cm4gLUVOT0RFVjtcbiA0NDc6XHR9XG4gNDQ4Olx0XG4gNDQ5Olx0LyogUG9zdC1mbGFzaCByZXByb2JlLiBSdW5zIGZyb20gYSBzZWxmLWNvbnRhaW5lZCBoZWFwIHdvcmsgKG5vdCBhIGt0aHJlYWQgYW5kXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM0ODg0CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogODU3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRnV6emluZyBQb3RlbnRpYWwgb2YgdGhlIE14TDg2Mnh4IERyaXZlcioqCgpPa2F5LCBzbyB0aGUgcHJvYmUgZnVuY3Rpb24gb2YgdGhpcyBgbXhsODYyeHhgIGRyaXZlciBjYWxscyBgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0YC4gSXQmIzM5O3Mgd3JpdGluZyB0byBNRElPIGFuZCByZWFkaW5nIGJhY2sg4oCTIGEgcHJldHR5IHN0YW5kYXJkIGNoZWNrLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBhIGR1bW15IE1ESU8gYnVzIG1pZ2h0IHJldHVybiBnYXJiYWdlLCBsaWtlIGAweGZmZmZgIG9yIGAweDAwMDBgLCBvciBldmVuIGVjaG8gYmFjayB3aGF0IHdhcyB3cml0dGVuLiBCdXQgaG9sZCBvbiwgZG9lcyBTeXprYWxsZXIgKmFjdHVhbGx5KiBoYXZlIGEgZ2VuZXJpYywgdmFsdWUtc3RvcmluZyBkdW1teSBNRElPIGJ1cz8gTm8sIG5vdCB0aGF0IEkmIzM5O20gYXdhcmUgb2YuIERvZXMgU3l6a2FsbGVyIGZ1enogTURJTyBkZXZpY2VzIGRpcmVjdGx5IHdpdGggaW5qZWN0ZWQgcmVhZHMvd3JpdGVzPyBBZ2Fpbiwgc2VlbXMgdW5saWtlbHkgd2l0aG91dCBhIGRlZGljYXRlZCBTeXprYWxsZXIgcHNldWRvLXN5c2NhbGwgb3IgYSBzcGVjaWFsIGR1bW15IGRyaXZlci4KCkFscmlnaHQsIGxldCYjMzk7cyBzZWUgaWYgdGhlcmUmIzM5O3MgYW55IGV2aWRlbmNlIG9mIE1ESU8gZnV6emluZyB3aXRoaW4gU3l6a2FsbGVyIGl0c2VsZi4gSSBjYW4gY2hlY2ssIGJ1dCBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9jay5jYCBpcyBwcm9iYWJseSBub3Qgd2hhdCBJJiMzOTttIGxvb2tpbmcgZm9yLiBMZXQmIzM5O3MgY2hlY2sgdGhlIFN5emthbGxlciBjb25maWdzIGFuZCBzZWUgaWYgYENPTkZJR19ORVRfRFNBX01YTDg2MmAgaXMgZW5hYmxlZC4gQWgsIHRoZSBwYXRjaCBhdXRob3IgaXMgJiMzNDtzeXotY2x1c3RlciwmIzM0OyBzbyBTeXprYWxsZXIgKmlzKiB0ZXN0aW5nIHRoaXMhIElmIGl0JiMzOTtzIGJlaW5nIHRlc3RlZCwgaXQgaW1wbGllcyAqc29tZSogbGV2ZWwgb2YgcmVhY2hhYmlsaXR5LCBvciBhdCBsZWFzdCBhbiBhdHRlbXB0IGF0IHJlYWNoYWJpbGl0eS4KCkJ1dCB3YWl0LCB0aGUgaW5zdHJ1Y3Rpb25zIHNheSB0byByZXR1cm4gYFdvcnRoRnV6emluZz1mYWxzZWAgaWYgaXTigJlzIGEgdmVuZG9yLXNwZWNpZmljIGRyaXZlciByZXF1aXJpbmcgaGFyZHdhcmUgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuIFRoaXMgKmlzKiBhIERTQSBzd2l0Y2ggZHJpdmVyIGZvciBhIE1heExpbmVhciBNeEw4NjJ4eC4gRG9lcyBpdCByZXF1aXJlIHBoeXNpY2FsIGhhcmR3YXJlPyBZZWFoLCBRRU1VIGRlZmluaXRlbHkgZG9lc24mIzM5O3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGNoaXAuIFNvLCBpcyB0aGVyZSBhbnkgd2F5IHRvIHJlYWNoIHRoaXMgY29kZSB2aWEgc29mdHdhcmUgZW11bGF0aW9uIHNvbWVob3c/IE5vLCBubyBRRU1VIGVtdWxhdGlvbiBleGlzdHMgZm9yIGl0LiBJcyB0aGVyZSBhbnkgZHVtbXkgTURJTyBidXMgaW4gdGhlIGtlcm5lbCB1c2VkIGJ5IFN5emthbGxlcj8gVGhlcmUgaXMgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWJjbS11bmltYWMuY2AgYnV0IGl0IHNlZW1zIHRvIGJlIGZvciBhbm90aGVyIHR5cGUgb2YgZGV2aWNlLiBUaGVyZSBpcyBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYCBidXQgdGhhdCBpcyBmb3IgUEhZcy4KCk9rYXksIGxldCYjMzk7cyB0aGluayBhYm91dCB0aGUgU3l6a2FsbGVyIGVjb3N5c3RlbS4gSXQmIzM5O3MgZ290IGB2aGNpYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciBXaS1GaSwgYG5ldGRldnNpbWAgZm9yIG5ldGRldnPigKYgRG9lcyBpdCBoYXZlIGFuIGVxdWl2YWxlbnQgZm9yIE1ESU8/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQga2luZCBvZiBkcml2ZXIgYG14bDg2Mnh4YCBpcy4gSXQmIzM5O3MgYW4gTURJTyBkcml2ZXIuIFRvIHByb2JlIGFuIE1ESU8gZHJpdmVyLCB5b3UgbmVlZCBhbiBNRElPIGRldmljZSBvbiBhbiBNRElPIGJ1cy4gU28gaG93IGNhbiB3ZSBjcmVhdGUgYW4gTURJTyBkZXZpY2UgZnJvbSB1c2Vyc3BhY2U/IEhtbSwgdW5sZXNzIHRoZXJlJiMzOTtzIHNvbWUgZGV2aWNlIHRyZWUgbWFnaWMsIGEgc3BlY2lmaWMgc3lzZnMgdHJpZ2dlciwgb3IgbWF5YmUgYG5ldGRldnNpbWAsIHRoZXJlIGlzIG5vIHdheS4KCk5vLCBgbmV0ZGV2c2ltYCBkb2VzbiYjMzk7dCBjcmVhdGUgTURJTyBidXNlcy4gYGRzYV9sb29wYCBpcyBhIGR1bW15IERTQSBzd2l0Y2gsIGJ1dCBpdCBpcyBhIHNwZWNpZmljIGRyaXZlci4gQ2FuIFN5emthbGxlciAqYWN0dWFsbHkqIHJlYWNoIGBteGw4NjJ4eF9wcm9iZWA/IElmIGl0IGNhbiYjMzk7dCwgdGhlbiB0aGVyZSBpcyBubyBwb2ludCBpbiBmdXp6aW5nLiBMZXQgbWUgY2hlY2sgaWYgdGhlcmUgaXMgYW55IE1ESU8gZGV2aWNlIGNyZWF0aW9uIGluIFN5emthbGxlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O25ldC9kc2EvZHNhLmM9NjIyPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxubmV0L2RzYS9kc2EuYy02NTQtXHRpZiAoIWRzLVx1MDAzZXVzZXJfbWlpX2J1cyBcdTAwMjZcdTAwMjYgZHMtXHUwMDNlb3BzLVx1MDAzZXBoeV9yZWFkKSB7XG5uZXQvZHNhL2RzYS5jOjY1NTpcdFx0ZHMtXHUwMDNldXNlcl9taWlfYnVzID0gbWRpb2J1c19hbGxvYygpO1xubmV0L2RzYS9kc2EuYy02NTYtXHRcdGlmICghZHMtXHUwMDNldXNlcl9taWlfYnVzKSB7XG4tLVxubmV0L2RzYS9kc2EuYy02NjItXG5uZXQvZHNhL2RzYS5jOjY2MzpcdFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYy02NjQtXHRcdGlmIChlcnIgXHUwMDNjIDApXG4tLVxubmV0L2RzYS9kc2EuYy02NzQtXHRpZiAoZHMtXHUwMDNldXNlcl9taWlfYnVzIFx1MDAyNlx1MDAyNiBkcy1cdTAwM2VvcHMtXHUwMDNlcGh5X3JlYWQpXG5uZXQvZHNhL2RzYS5jOjY3NTpcdFx0bWRpb2J1c19mcmVlKGRzLVx1MDAzZXVzZXJfbWlpX2J1cyk7XG5uZXQvZHNhL2RzYS5jLTY3Ni10ZWFyZG93bjpcbi0tXG5uZXQvZHNhL2RzYS5jPTY4Nj1zdGF0aWMgdm9pZCBkc2Ffc3dpdGNoX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbi0tXG5uZXQvZHNhL2RzYS5jLTY5My1cdGlmIChkcy1cdTAwM2V1c2VyX21paV9idXMgXHUwMDI2XHUwMDI2IGRzLVx1MDAzZW9wcy1cdTAwM2VwaHlfcmVhZCkge1xubmV0L2RzYS9kc2EuYzo2OTQ6XHRcdG1kaW9idXNfdW5yZWdpc3Rlcihkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYzo2OTU6XHRcdG1kaW9idXNfZnJlZShkcy1cdTAwM2V1c2VyX21paV9idXMpO1xubmV0L2RzYS9kc2EuYy02OTYtXHRcdGRzLVx1MDAzZXVzZXJfbWlpX2J1cyA9IE5VTEw7XG4tLVxubmV0L2RzYS9wb3J0LmMtMTEtI2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxubmV0L2RzYS9wb3J0LmM6MTI6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5uZXQvZHNhL3BvcnQuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxuLS1cbm5ldC9kc2EvcG9ydC5jPTE3MjY9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkc2Ffc3dpdGNoZXNfYXBwbHlfd29ya2Fyb3VuZHNbXSA9IHtcbi0tXG5uZXQvZHNhL3BvcnQuYy0xNzk2LSNpZiBJU19FTkFCTEVEKENPTkZJR19ORVRfRFNBX1NNU0NfTEFOOTMwM19NRElPKVxubmV0L2RzYS9wb3J0LmM6MTc5NzpcdFwmIzM0O3Ntc2MsbGFuOTMwMy1tZGlvXCYjMzQ7LFxubmV0L2RzYS9wb3J0LmMtMTc5OC0jZW5kaWZcbi0tXG5uZXQvZHNhL3VzZXIuYy0xMy0jaW5jbHVkZSBcdTAwM2NsaW51eC9vZl9uZXQuaFx1MDAzZVxubmV0L2RzYS91c2VyLmM6MTQ6I2luY2x1ZGUgXHUwMDNjbGludXgvb2ZfbWRpby5oXHUwMDNlXG5uZXQvZHNhL3VzZXIuYzoxNTojaW5jbHVkZSBcdTAwM2NsaW51eC9tZGlvLmhcdTAwM2Vcbm5ldC9kc2EvdXNlci5jLTE2LSNpbmNsdWRlIFx1MDAzY25ldC9uZXRkZXZfbG9jay5oXHUwMDNlXG4tLVxubmV0L2RzYS91c2VyLmM9MjYzOD1zdGF0aWMgaW50IGRzYV91c2VyX3BoeV9jb25uZWN0KHN0cnVjdCBuZXRfZGV2aWNlICp1c2VyX2RldiwgaW50IGFkZHIsXG4tLVxubmV0L2RzYS91c2VyLmMtMjY0My1cbm5ldC9kc2EvdXNlci5jOjI2NDQ6XHR1c2VyX2Rldi1cdTAwM2VwaHlkZXYgPSBtZGlvYnVzX2dldF9waHkoZHMtXHUwMDNldXNlcl9taWlfYnVzLCBhZGRyKTtcbm5ldC9kc2EvdXNlci5jLTI2NDUtXHRpZiAoIXVzZXJfZGV2LVx1MDAzZXBoeWRldikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNzMzNwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDEyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNRElPIERldmljZSBJbnN0YW50aWF0aW9uIENvbnVuZHJ1bSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gaGFuZGxlIHRoaXMgYG14bDg2Mnh4YCBkZXZpY2UuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSYjMzk7bGwgc2VhcmNoIGZvciBgbXhsODYyeHhgIHdpdGhpbiB0aGUgYERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21heGxpbmVhcixteGw4NjJ4eC55YW1sYCBmaWxlIHRvIGdldCB0aGUgbGF5IG9mIHRoZSBsYW5kLiBSaWdodCwgaXQmIzM5O3MgYW4gTURJTyBkZXZpY2UsIGFzIGV4cGVjdGVkLiBOb3csIGhlcmUmIzM5O3MgdGhlIGtpY2tlcjogQ2FuIEkgaW5zdGFudGlhdGUgTURJTyBkZXZpY2VzIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlPyBJIGtub3cgd2l0aCBJMkMsIGl0JiMzOTtzIHBvc3NpYmxlIHRocm91Z2ggdGhlIGBzeXNmc2AgaW50ZXJmYWNlLgoKQWgsIHllcywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB1c2luZyBJMkMvTURJTyBkZXZpY2UgaW5zdGFudGlhdGlvbiB2aWEgc3lzZnMuIEkgaGFkIGEgcXVpY2sgbG9vayBidXQgbm93IEkgcmVtZW1iZXIgTURJTyBidXNlcyBkb24mIzM5O3QgaGF2ZSB0aGF0IGhhbmR5IGBuZXdfZGV2aWNlYCBzeXNmcyBhdHRyaWJ1dGUgbGlrZSBJMkMgZG9lcy4gRGFuZyBpdC4gT2theSwgdGltZSB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMuIExldCBtZSBxdWlja2x5IHZlcmlmeSBpZiB0aGUgTURJTyBidXMgZXZlbiBleHBvc2VzIGEgYG5ld19kZXZpY2VgIGF0dHJpYnV0ZTsgSSYjMzk7bGwgbmVlZCB0byBjaGVjayB0aGUga2VybmVsJiMzOTtzIE1ESU8gYnVzIGltcGxlbWVudGF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+RXJyb3I6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5ubyBtYXRjaGVzPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25ld19kZXZpY2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvbWRpb19idXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NzUwCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogNjkzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTURJTyBEcml2ZXIgYW5kIFN5emthbGxlciYjMzk7cyBQb3RlbnRpYWwqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgTURJTyBidXMgZHJpdmVyLCBhbmQgSSBkb24mIzM5O3Qgc2VlIGFueSBleHBsaWNpdCBpbnN0YW50aWF0aW9uIG9mIGEgJiMzNDtuZXdfZGV2aWNlJiMzNDsgd2l0aGluIHRoZSBgbWRpb19idXMuY2AgY29kZSBpdHNlbGYuIFRoaXMgaXMgbWFraW5nIG1lIHRoaW5rIGFib3V0IGhvdyBzeXprYWxsZXIgY2FuIGV2ZW4gZ2V0IHRvIHRoaXMgZHJpdmVyIGFuZCB0cmlnZ2VyIGl0cyBwcm9iZSBmdW5jdGlvbi4gSSBrbm93IHN5emthbGxlciBjYW4gdXNlIGRldmljZSB0cmVlIG92ZXJsYXlzLCBzbyB0aGF0JiMzOTtzIHdoZXJlIG15IG1pbmQgZ29lcyBpbW1lZGlhdGVseS4KCldhaXQsIHllcyEgU3l6a2FsbGVyICpkb2VzKiBzdXBwb3J0IGRldmljZSB0cmVlIG92ZXJsYXlzLiBJIHRoaW5rIEkgdmFndWVseSByZW1lbWJlciBhIHBzZXVkby1zeXNjYWxsIGxpa2UgYHN5el9pbml0X25ldF9zb2NrZXRgLi4uIG5vLCB0aGF0JiMzOTtzIG5vdCByaWdodC4gQWgsIGl0JiMzOTtzIGBzeXpfbW91bnRfaW1hZ2VgLCBhbmQgaXQgY2FuIGxvYWQgb3ZlcmxheXMgKmlmKiB0aGUga2VybmVsIGlzIGJ1aWx0IHdpdGggYENPTkZJR19PRl9PVkVSTEFZYCBlbmFibGVkLiBTbywgdGhlIHF1ZXN0aW9uIGJlY29tZXMsIGNhbiBzeXprYWxsZXIgdXNlIHRoZXNlIG92ZXJsYXlzIHRvIGluc3RhbnRpYXRlIE1ESU8gZGV2aWNlcz8KClllcywgdGhhdCYjMzk7cyBpdCEgSWYgaXQgbG9hZHMgYSBEVCBvdmVybGF5LCBpdCAqc2hvdWxkKiBiZSBhYmxlIHRvIGNyZWF0ZSBhbiBNRElPIGRldmljZS4gQnV0Li4uIGV2ZW4gaWYgdGhlIGRldmljZSAqaXMqIGNyZWF0ZWQsIHRoZSBkcml2ZXImIzM5O3MgcHJvYmUgZnVuY3Rpb24gd2lsbCBzdGlsbCBuZWVkIHRvIGNvbW11bmljYXRlIHdpdGggdGhlIGhhcmR3YXJlIHZpYSB0aGUgTURJTyBidXMuIElmIHRoZXJlJiMzOTtzIG5vIHJlYWwgaGFyZHdhcmUgY29ubmVjdGVkLCB0aGUgTURJTyByZWFkL3dyaXRlIG9wZXJhdGlvbnMgd2lsbCBsaWtlbHkgZmFpbCBvciByZXR1cm4gc29tZSBkZWZhdWx0IHZhbHVlLCBsaWtlIGAweGZmZmZgIGZyb20gYSBmbG9hdGluZyBidXMgb3IgYDBgIGZyb20gYSBkdW1teSBidXMuCgpMZXQgbWUgY2lyY2xlIGJhY2sgdG8gdGhhdCBgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0YCBmdW5jdGlvbiBpbiB0aGUgZHJpdmVyLiBPa2F5LCBJIHNlZSBpdCBub3cuIEl0IHdyaXRlcyBgMHg1YTVhYCB0byBgTVhMODYyWFhfU0JfUERJX0FERFJgIGFuZCBgMHhhNWE1YCB0byBgTVhMODYyWFhfU0JfUERJX0RBVEFgLCBhbmQgdGhlbiByZWFkcyB0aG9zZSB2YWx1ZXMgYmFjay4gSWYgdGhleSBkb24mIzM5O3QgbWF0Y2gsIGl0IHJldHVybnMgYC1FTk9ERVZgLgoKYGBgYwoJYSA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLAoJCQkJIE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BKTsKCWlmIChhICZsdDsgMCkKCQlyZXR1cm4gYTsKCWQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwKCQkJCSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRCk7CglpZiAoZCAmbHQ7IDApCgkJcmV0dXJuIGQ7CglhID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUik7CglpZiAoYSAmbHQ7IDApCgkJcmV0dXJuIGE7CglkID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7CglpZiAoZCAmbHQ7IDApCgkJcmV0dXJuIGQ7CglpZiAoKHUxNilhICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BIHx8CgkgICAgKHUxNilkICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9EKQoJCXJldHVybiAtRU5PREVWOwpgYGAKCkluIHRoZSBhYnNlbmNlIG9mIHJlYWwgaGFyZHdhcmUsIHRoZSBNRElPIHJlYWQgaXMgKnVubGlrZWx5KiB0byByZXR1cm4gYDB4NWE1YWAgb3IgYDB4YTVhNWAuIEl0JiMzOTtsbCBwcm9iYWJseSBiZSBgMHhmZmZmYCAoYnVzIGZsb2F0aW5nKSBvciBgMGAgKGR1bW15IGJ1cykuIFRoZSBrZXkgaGVyZSBpcyB3aGV0aGVyIHRoZSBrZXJuZWwgaW5jbHVkZXMgYSAqc3BlY2lhbCogZHVtbXkgTURJTyBidXMgaW1wbGVtZW50YXRpb24gdGhhdCBjYW4gc3RvcmUgd3JpdHRlbiB2YWx1ZXMuIFRoaXMgaXMgY3J1Y2lhbC4KClNvLCB0aGUgbmV4dCBzdGVwIGlzIHRvIGNoZWNrIGlmIHRoZXJlIGlzIGEgJiMzNDttb2NrJiMzNDsgTURJTyBidXMgZHJpdmVyLCBwZXJoYXBzIHNvbWV0aGluZyBsaWtlIGBkcml2ZXJzL25ldC9waHkvbWRpby1tb2NrLmNgLCBvciBzb21ldGhpbmcgc2ltaWxhciB0aGF0IHNpbXVsYXRlcyBNRElPIGludGVyYWN0aW9ucy4gSWYgc3VjaCBhIHRoaW5nIGV4aXN0cyBhbmQgZ2V0cyBsb2FkZWQgd2l0aCBzeXprYWxsZXIsIHRoZW4gdGhlIGRyaXZlciBtYXkgdHJpZ2dlciEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5jb2Rlc2VhcmNoLWRpci1pbmRleDwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RGlyJiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvcGh5JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YWRpbi5jJiMzNDssCiAgICAmIzM0O2FkaW4xMTAwLmMmIzM0OywKICAgICYjMzQ7YWRpbjExNDAtcGh5LmMmIzM0OywKICAgICYjMzQ7YWlyX2FuODgwMS5jJiMzNDssCiAgICAmIzM0O2Fpcl9lbjg4MTFoLmMmIzM0OywKICAgICYjMzQ7YWlyX3BoeV9saWIuYyYjMzQ7LAogICAgJiMzNDthaXJfcGh5X2xpYi5oJiMzNDssCiAgICAmIzM0O2FtZC5jJiMzNDssCiAgICAmIzM0O2FzMjF4eHguYyYjMzQ7LAogICAgJiMzNDtheDg4Nzk2Yi5jJiMzNDssCiAgICAmIzM0O2F4ODg3OTZiX3J1c3QucnMmIzM0OywKICAgICYjMzQ7YmNtLWN5Z251cy5jJiMzNDssCiAgICAmIzM0O2JjbS1waHktbGliLmMmIzM0OywKICAgICYjMzQ7YmNtLXBoeS1saWIuaCYjMzQ7LAogICAgJiMzNDtiY20tcGh5LXB0cC5jJiMzNDssCiAgICAmIzM0O2JjbTU0MTQwLmMmIzM0OywKICAgICYjMzQ7YmNtNjN4eC5jJiMzNDssCiAgICAmIzM0O2JjbTd4eHguYyYjMzQ7LAogICAgJiMzNDtiY204NDg4MS5jJiMzNDssCiAgICAmIzM0O2JjbTg3eHguYyYjMzQ7LAogICAgJiMzNDticm9hZGNvbS5jJiMzNDssCiAgICAmIzM0O2NpY2FkYS5jJiMzNDssCiAgICAmIzM0O2NvcnRpbmEuYyYjMzQ7LAogICAgJiMzNDtkYXZpY29tLmMmIzM0OywKICAgICYjMzQ7ZHA4MzY0MC5jJiMzNDssCiAgICAmIzM0O2RwODM2NDBfcmVnLmgmIzM0OywKICAgICYjMzQ7ZHA4MzgyMi5jJiMzNDssCiAgICAmIzM0O2RwODM4NDguYyYjMzQ7LAogICAgJiMzNDtkcDgzODY3LmMmIzM0OywKICAgICYjMzQ7ZHA4Mzg2OS5jJiMzNDssCiAgICAmIzM0O2RwODN0YzgxMS5jJiMzNDssCiAgICAmIzM0O2RwODN0ZDUxMC5jJiMzNDssCiAgICAmIzM0O2RwODN0ZzcyMC5jJiMzNDssCiAgICAmIzM0O2V0MTAxMWMuYyYjMzQ7LAogICAgJiMzNDtmaXhlZF9waHkuYyYjMzQ7LAogICAgJiMzNDtpY3BsdXMuYyYjMzQ7LAogICAgJiMzNDtpbnRlbC14d2F5LmMmIzM0OywKICAgICYjMzQ7bGlua21vZGUuYyYjMzQ7LAogICAgJiMzNDtseHQuYyYjMzQ7LAogICAgJiMzNDttYXJ2ZWxsLTg4cTJ4eHguYyYjMzQ7LAogICAgJiMzNDttYXJ2ZWxsLTg4eDIyMjIuYyYjMzQ7LAogICAgJiMzNDttYXJ2ZWxsLmMmIzM0OywKICAgICYjMzQ7bWFydmVsbDEwZy5jJiMzNDssCiAgICAmIzM0O21kaW8tb3Blbi1hbGxpYW5jZS5oJiMzNDssCiAgICAmIzM0O21kaW9fYnVzLmMmIzM0OywKICAgICYjMzQ7bWRpb19idXNfcHJvdmlkZXIuYyYjMzQ7LAogICAgJiMzNDttZGlvX2RldmljZS5jJiMzNDssCiAgICAmIzM0O21kaW9fZGV2cmVzLmMmIzM0OywKICAgICYjMzQ7bWVzb24tZ3hsLmMmIzM0OywKICAgICYjMzQ7bWljcmVsLmMmIzM0OywKICAgICYjMzQ7bWljcm9jaGlwLmMmIzM0OywKICAgICYjMzQ7bWljcm9jaGlwX3Jkc19wdHAuYyYjMzQ7LAogICAgJiMzNDttaWNyb2NoaXBfcmRzX3B0cC5oJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcF90MS5jJiMzNDssCiAgICAmIzM0O21pY3JvY2hpcF90MXMuYyYjMzQ7LAogICAgJiMzNDttaWlfdGltZXN0YW1wZXIuYyYjMzQ7LAogICAgJiMzNDttb3RvcmNvbW0uYyYjMzQ7LAogICAgJiMzNDtteGwtODYxMTAuYyYjMzQ7LAogICAgJiMzNDtteGwtZ3B5LmMmIzM0OywKICAgICYjMzQ7bmF0aW9uYWwuYyYjMzQ7LAogICAgJiMzNDtuY24yNjAwMC5jJiMzNDssCiAgICAmIzM0O254cC1jNDUtdGphMTF4eC1tYWNzZWMuYyYjMzQ7LAogICAgJiMzNDtueHAtYzQ1LXRqYTExeHguYyYjMzQ7LAogICAgJiMzNDtueHAtYzQ1LXRqYTExeHguaCYjMzQ7LAogICAgJiMzNDtueHAtY2J0eC5jJiMzNDssCiAgICAmIzM0O254cC10amExMXh4LmMmIzM0OywKICAgICYjMzQ7b3Blbl9hbGxpYW5jZV9oZWxwZXJzLmMmIzM0OywKICAgICYjMzQ7b3Blbl9hbGxpYW5jZV9oZWxwZXJzLmgmIzM0OywKICAgICYjMzQ7cGh5LWM0NS5jJiMzNDssCiAgICAmIzM0O3BoeS1jYXBzLmgmIzM0OywKICAgICYjMzQ7cGh5LWNvcmUuYyYjMzQ7LAogICAgJiMzNDtwaHkuYyYjMzQ7LAogICAgJiMzNDtwaHlfY2Fwcy5jJiMzNDssCiAgICAmIzM0O3BoeV9kZXZpY2UuYyYjMzQ7LAogICAgJiMzNDtwaHlfbGVkX3RyaWdnZXJzLmMmIzM0OywKICAgICYjMzQ7cGh5X2xpbmtfdG9wb2xvZ3kuYyYjMzQ7LAogICAgJiMzNDtwaHlfcGFja2FnZS5jJiMzNDssCiAgICAmIzM0O3BoeV9wb3J0LmMmIzM0OywKICAgICYjMzQ7cGh5bGliLWludGVybmFsLmgmIzM0OywKICAgICYjMzQ7cGh5bGliLmgmIzM0OywKICAgICYjMzQ7cGh5bGluay5jJiMzNDssCiAgICAmIzM0O3FzZW1pLmMmIzM0OywKICAgICYjMzQ7cXQyMDI1LnJzJiMzNDssCiAgICAmIzM0O3JvY2tjaGlwLmMmIzM0OywKICAgICYjMzQ7c2ZwLWJ1cy5jJiMzNDssCiAgICAmIzM0O3NmcC5jJiMzNDssCiAgICAmIzM0O3NmcC5oJiMzNDssCiAgICAmIzM0O3Ntc2MuYyYjMzQ7LAogICAgJiMzNDtzdGUxMFhwLmMmIzM0OywKICAgICYjMzQ7c3R1YnMuYyYjMzQ7LAogICAgJiMzNDtzd3BoeS5jJiMzNDssCiAgICAmIzM0O3N3cGh5LmgmIzM0OywKICAgICYjMzQ7dGVyYW5ldGljcy5jJiMzNDssCiAgICAmIzM0O3VQRDYwNjIwLmMmIzM0OywKICAgICYjMzQ7dml0ZXNzZS5jJiMzNDssCiAgICAmIzM0O3hpbGlueF9nbWlpMnJnbWlpLmMmIzM0OwogIF0sCiAgJiMzNDtTdWJkaXJzJiMzNDs6IFsKICAgICYjMzQ7YXF1YW50aWEmIzM0OywKICAgICYjMzQ7bWVkaWF0ZWsmIzM0OywKICAgICYjMzQ7bXNjYyYjMzQ7LAogICAgJiMzNDtxY29tJiMzNDssCiAgICAmIzM0O3JlYWx0ZWsmIzM0OwogIF0KfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0MDMwNAoJCQkJCQkJb3V0cHV0OiAyNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBzdW1tYXJpemVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCBwcmVzZW50ZWQgYXMgZmlyc3QtcGVyc29uIGludGVybmFsIG1vbm9sb2d1ZToKCioqSW52ZXN0aWdhdGluZyBNRElPIERyaXZlciBBdmFpbGFiaWxpdHkqKgoKSG1tLCBubyBgbWRpby1tb2NrLmNgLi4uIHRoYXQmIzM5O3MgdW5leHBlY3RlZC4gSSB3YXMganVzdCBleHBlY3RpbmcgdG8gc2VlIHRoYXQgYXMgYSBxdWljayBkZWJ1Z2dpbmcgb3B0aW9uLiBXYWl0IGEgbWludXRlLi4uIGhvbGQgb24sIHdoYXQmIzM5O3MgdGhpcz8gVGhlcmUmIzM5O3MgYG1kaW8tYmNtLXVuaW1hYy5jYCBpbiBgZHJpdmVycy9uZXQvbWRpby9gPyBPa2F5LCB0aGF0IGNoYW5nZXMgdGhpbmdzLiBUaGlzIGltcGxpZXMgYSBCcm9hZGNvbSBVbmltYWMgTURJTyBpbXBsZW1lbnRhdGlvbiBpcyBhdmFpbGFibGUsIHdoaWNoIGlzIGEga2V5IHBpZWNlIG9mIGluZm9ybWF0aW9uLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGEgZ2VuZXJpYyBNRElPIGltcGxlbWVudGF0aW9uLCB0aGlzIGlzIHRpZWQgdG8gc3BlY2lmaWMgaGFyZHdhcmUuIFRoYXQgcG90ZW50aWFsbHkgc2F2ZXMgbWUgYSBsb3Qgb2YgdGltZSBpZiBJJiMzOTttIHdvcmtpbmcgd2l0aCBhIEJyb2FkY29tIFVuaW1hYyBiYXNlZCBzZXR1cC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgZmlsZSBmdXJ0aGVyLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmNvZGVzZWFyY2gtZGlyLWluZGV4PC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtEaXImIzM0OzogJiMzNDtkcml2ZXJzL25ldC9tZGlvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGVzJiMzNDs6IFsKICAgICYjMzQ7YWNwaV9tZGlvLmMmIzM0OywKICAgICYjMzQ7Zndub2RlX21kaW8uYyYjMzQ7LAogICAgJiMzNDttZGlvLWFpcm9oYS5jJiMzNDssCiAgICAmIzM0O21kaW8tYXNwZWVkLmMmIzM0OywKICAgICYjMzQ7bWRpby1iY20taXByb2MuYyYjMzQ7LAogICAgJiMzNDttZGlvLWJjbS11bmltYWMuYyYjMzQ7LAogICAgJiMzNDttZGlvLWJpdGJhbmcuYyYjMzQ7LAogICAgJiMzNDttZGlvLWNhdml1bS5jJiMzNDssCiAgICAmIzM0O21kaW8tY2F2aXVtLmgmIzM0OywKICAgICYjMzQ7bWRpby1ncGlvLmMmIzM0OywKICAgICYjMzQ7bWRpby1oaXNpLWZlbWFjLmMmIzM0OywKICAgICYjMzQ7bWRpby1pMmMuYyYjMzQ7LAogICAgJiMzNDttZGlvLWlwcTQwMTkuYyYjMzQ7LAogICAgJiMzNDttZGlvLWlwcTgwNjQuYyYjMzQ7LAogICAgJiMzNDttZGlvLW1veGFydC5jJiMzNDssCiAgICAmIzM0O21kaW8tbXNjYy1taWltLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtYmNtLWlwcm9jLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtYmNtNjM2OC5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LWdwaW8uYyYjMzQ7LAogICAgJiMzNDttZGlvLW11eC1tZXNvbi1nMTJhLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtbWVzb24tZ3hsLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXgtbW1pb3JlZy5jJiMzNDssCiAgICAmIzM0O21kaW8tbXV4LW11bHRpcGxleGVyLmMmIzM0OywKICAgICYjMzQ7bWRpby1tdXguYyYjMzQ7LAogICAgJiMzNDttZGlvLW12dXNiLmMmIzM0OywKICAgICYjMzQ7bWRpby1vY3Rlb24uYyYjMzQ7LAogICAgJiMzNDttZGlvLXBpYzY0aHBzYy5jJiMzNDssCiAgICAmIzM0O21kaW8tcmVhbHRlay1ydGw5MzAwLmMmIzM0OywKICAgICYjMzQ7bWRpby1yZWdtYXAuYyYjMzQ7LAogICAgJiMzNDttZGlvLXN1bjRpLmMmIzM0OywKICAgICYjMzQ7bWRpby10aHVuZGVyLmMmIzM0OywKICAgICYjMzQ7bWRpby14Z2VuZS5jJiMzNDssCiAgICAmIzM0O29mX21kaW8uYyYjMzQ7CiAgXSwKICAmIzM0O1N1YmRpcnMmIzM0OzogbnVsbAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwOTUxCgkJCQkJCQlvdXRwdXQ6IDUwCgkJCQkJCQl0aG91Z2h0czogMzgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgbXhsODYyeHggRHJpdmVyIGZvciBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKioKCk9rYXksIHNvIEkmIzM5O20gZGl2aW5nIGludG8gdGhpcyBgbXhsODYyeHhgIGNvZGUsIGFuZCB0aGUgaW1tZWRpYXRlIHRob3VnaHQgaXM6IGFyZSB0aGVzZSBNRElPIGJ1c2VzIGJlaW5nIHVzZWQgaW4gYSBzdHJhaWdodGZvcndhcmQgd2F5LCBvciBhcmUgdGhlcmUgbW9yZSBjb21wbGV4IGludGVyYWN0aW9ucyBnb2luZyBvbj8gSSBuZWVkIHRvIGNsYXJpZnkgdGhhdCBub25lIG9mIHRoZW0gYWN0IGxpa2UgZHVtbXkgYnVzZXMganVzdCBzdG9yaW5nIHZhbHVlcy4gSSBzZWUgbWVudGlvbnMgb2YgYG1kaW8tcmVnbWFwLmNgIGFuZCBgbWRpby1iaXRiYW5nLmNgLCBzbyBJIHNob3VsZCBrZWVwIHRob3NlIGluIG1pbmQgYXMgcG9zc2libGUgcG9pbnRzIG9mIGludGVyZXN0LCBidXQgZG9uJiMzOTt0IG5lZWQgdG8gY29uc2lkZXIgdGhlbSBwcmltYXJ5LgoKSSYjMzk7bSB0aGlua2luZyBhYm91dCBob3cgc3l6a2FsbGVyIGlzIGZ1enppbmcgdGhpcyBhbmQgc3VkZGVubHksIEkmIzM5O20gc3R1Y2sgb24gYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAuIEhvdyBpcyBzeXprYWxsZXIgKmFjdHVhbGx5KiBnZXR0aW5nIHBhc3QgdGhhdD8gV2FpdCwgbWF5YmUgaXQmIzM5O3MgKm5vdCogcGFzc2luZyBpdC4gSWYgaXQgZG9lc24mIzM5O3QgcGFzcyBpdCwgdGhlIHByb2JlIGZ1bmN0aW9uIGlzIHN1cHBvc2VkIHRvIHJldHVybiBgLUVOT0RFVmAsIHdoaWNoIG1lYW5zIHRoZSBkcml2ZXIgaXNuJiMzOTt0IHJlZ2lzdGVyZWQuIElmIHRoZSBkcml2ZXIgaXNuJiMzOTt0IHJlZ2lzdGVyZWQsIHdlIG5ldmVyIGV2ZW4gZ2V0IHRvIGBkZXZsaW5rIGZsYXNoIHVwZGF0ZWAgY29kZSwgd2hpY2ggaXMgb2J2aW91c2x5IGltcG9ydGFudCB0byBjb25zaWRlci4KCk5vdywgbXkgbGluZSBvZiB0aG91Z2h0IG1vdmVzIHRvOiBJcyB0aGVyZSAqYW55KiB3YXkgdG8gcmVhY2ggYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYCB3aXRob3V0IHRoZSBkcml2ZXIgc3VjY2Vzc2Z1bGx5IHByb2Jpbmc/IE5vcGUsIGl0JiMzOTtzIHBhcnQgb2YgYG14bDg2Mnh4X3N3aXRjaF9vcHNgLCB3aGljaCBpcyByZWdpc3RlcmVkIHZpYSBgZHNhX3JlZ2lzdGVyX3N3aXRjaChkcylgIGluIGBteGw4NjJ4eF9wcm9iZWAuIFNvIGlmIGBteGw4NjJ4eF9wcm9iZWAgZmFpbHMsIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCBpc24mIzM5O3QgY2FsbGVkLCBhbmQgdGhlIGRldmxpbmsgb3BlcmF0aW9ucyBhcmUgbm90IHJlZ2lzdGVyZWQuCgpPa2F5LCBiYWNrIHRvIGZ1bmRhbWVudGFscy4gYG14bDg2Mnh4X3Byb2JlYCBjYWxscyBgZHNhX3JlZ2lzdGVyX3N3aXRjaChkcylgLCB3aGljaCBpbiB0dXJuIGNhbGxzIGBkc2Ffc3dpdGNoX3NldHVwKGRzKWAuIFRoYXQgb25lIGNhbGxzIGBkcy0mZ3Q7b3BzLSZndDtzZXR1cChkcylgLiBTbyB0aGUgYHNldHVwYCBvcCBpcyBgbXhsODYyeHhfc2V0dXBgLiBBaCEgVGhlIGNhbGwgdG8gYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgaXMgaGFwcGVuaW5nIGZyb20gYG14bDg2Mnh4X3NldHVwYCwgKm5vdCogZnJvbSBgbXhsODYyeHhfcHJvYmVgISBUaGlzIGlzIGltcG9ydGFudCEgTm93IEkganVzdCBuZWVkIHRvIHZlcmlmeSB0aGF0IEkmIzM5O20gY29ycmVjdCBpbiB0aGF0IGFzc2Vzc21lbnQsIGFuZCB0aGVuIEkmIzM5O2xsIHVuZGVyc3RhbmQgd2hhdCBpcyBhY3R1YWxseSBoYXBwZW5pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjUzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O214bDg2Mnh4X3NldHVwJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MjYyPXN0YXRpYyBpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMzA4LVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MzA5OnN0YXRpYyBpbnQgbXhsODYyeHhfc2V0dXBfbWRpbyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0zMTAte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTM0MT1zdGF0aWMgaW50IG14bDg2Mnh4X2JyaWRnZV9jb25maWdfZndkKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgdTE2IGJyaWRnZV9pZCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0zODItICovXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzozODM6c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9kcm9wX21ldGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTM4NC17XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9NjQxPXN0YXRpYyB2b2lkIG14bDg2Mnh4X2ZyZWVfYnJpZGdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy02NjAtXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzo2NjE6c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy02NjIte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTcxMi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cdTAwM2VzZXJkZXNfcG9ydHMpOyBpJiM0MzsmIzQzOylcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjcxMzpcdFx0bXhsODYyeHhfc2V0dXBfcGNzKHByaXYsIFx1MDAyNnByaXYtXHUwMDNlc2VyZGVzX3BvcnRzW2ldLFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtNzE0LVx0XHRcdFx0ICAgaSAmIzQzOyBNWEw4NjJYWF9GSVJTVF9TRVJERVNfUE9SVCk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtNzU5LVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6NzYwOlx0cmV0ID0gbXhsODYyeHhfc2V0dXBfZHJvcF9tZXRlcihkcyk7XG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy03NjEtXHRpZiAocmV0KVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTc2Ni1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjc2NzpcdHJldHVybiBteGw4NjJ4eF9zZXR1cF9tZGlvKGRzKTtcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTc2OC19XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MTI3Nz1zdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0xMzQ0LVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MTM0NTpzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwX2NwdV9icmlkZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTEzNDYte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTE0MTk9c3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMTQ1NS1cdGlmIChpc19jcHVfcG9ydClcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjE0NTY6XHRcdHJldHVybiBteGw4NjJ4eF9zZXR1cF9jcHVfYnJpZGdlKGRzLCBwb3J0KTtcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTE0NTctXG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MjE1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yMTU4LVx0LmdldF90YWdfcHJvdG9jb2wgPSBteGw4NjJ4eF9nZXRfdGFnX3Byb3RvY29sLFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MjE1OTpcdC5zZXR1cCA9IG14bDg2Mnh4X3NldHVwLFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjE2MC1cdC5wb3J0X3NldHVwID0gbXhsODYyeHhfcG9ydF9zZXR1cCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMyODYKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMzYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIHRoZSBNWEw4NjJYWCBEcml2ZXIgUHJvYmUgRmFpbHVyZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyYWNraW5nIGRvd24gdGhpcyBwcm9iZSBmYWlsdXJlIGluIHRoZSBNWEw4NjJYWCBkcml2ZXIuIFJpZ2h0LCBgbXhsODYyeHhfc2V0dXBgIGlzIGNsZWFybHkgdGhlIGBzZXR1cGAgb3BlcmF0aW9uIHdlJiMzOTtyZSBpbnRlcmVzdGVkIGluLCB0aGF0JiMzOTtzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBsZXQmIzM5O3Mgc2VlLCBgZHNhX3JlZ2lzdGVyX3N3aXRjaGAgY2FsbHMgYGRzYV9zd2l0Y2hfc2V0dXBgLCB3aGljaCBpbiB0dXJuLCBpbnZva2VzIGBkcy0mZ3Q7b3BzLSZndDtzZXR1cGAg4oCTIHByZWNpc2VseSB0aGUgaG9vayB0byBvdXIgYG14bDg2Mnh4X3NldHVwYCBmdW5jdGlvbi4gVGhlIGZsb3cgbWFrZXMgc2Vuc2U6IGEgZmFpbHVyZSBpbiBgc2V0dXBgIG1lYW5zIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCB3aWxsIGZhaWwsIGFuZCBpZiAqdGhhdCogZmFpbHMsIGBteGw4NjJ4eF9wcm9iZWAgaXMgYm91bmQgdG8gZmFpbC4KCkJ1dCB3YWl0IGEgbWludXRlLi4uIEkganVzdCByZWFsaXplZCBzb21ldGhpbmcgSSBoYWRuJiMzOTt0IGNvbnNpZGVyZWQuIElzbiYjMzk7dCBgZHNhX3N3aXRjaF9kZXZsaW5rX2FsbG9jYCAqYmVmb3JlKiB0aGUgY2FsbCB0byBzZXR1cD8gVGhhdCBjaGFuZ2VzIHRoaW5nczsgdGhlcmUmIzM5O3MgYSBkZXZsaW5rIGFsbG9jYXRlZCBiZWZvcmUgb3VyIGBzZXR1cGAgb3BlcmF0aW9uPyBPa2F5LCBJIHNob3VsZCByZWFsbHkgY2hlY2sgdGhlIHNvdXJjZSB0byBiZSBzdXJlLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgYG5ldC9kc2FgIGNvZGUgLSBlaXRoZXIgYGRzYS5jYCBvciB0aGUgZGV2bGluayBtb2R1bGUsIGBkZXZsaW5rLmNgIC0gdG8gc2VlIGlmIHRoYXQmIzM5O3Mgd2hlcmUgdGhlIHByb2JsZW0gbGllcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZHNhX3N3aXRjaF9kZXZsaW5rX2FsbG9jJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bmV0L2RzYS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bmV0L2RzYS9kZXZsaW5rLmM9Mzk1PXZvaWQgZHNhX3N3aXRjaF9kZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbm5ldC9kc2EvZGV2bGluay5jLTM5OS1cbm5ldC9kc2EvZGV2bGluay5jOjQwMDppbnQgZHNhX3N3aXRjaF9kZXZsaW5rX2FsbG9jKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbm5ldC9kc2EvZGV2bGluay5jLTQwMS17XG4tLVxubmV0L2RzYS9kZXZsaW5rLmg9MTI9dm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xubmV0L2RzYS9kZXZsaW5rLmg6MTM6aW50IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xubmV0L2RzYS9kZXZsaW5rLmgtMTQtdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfZnJlZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xuLS1cbm5ldC9kc2EvZHNhLmM9NjIyPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4tLVxubmV0L2RzYS9kc2EuYy02MzUtXG5uZXQvZHNhL2RzYS5jOjYzNjpcdGVyciA9IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhkcyk7XG5uZXQvZHNhL2RzYS5jLTYzNy1cdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjUzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ0MDUwCgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNDUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYSBtb3JlIGV4cGVyaWVuY2VkIHBlcnNwZWN0aXZlOgoKKipJbml0aWFsIEFzc2Vzc21lbnQgb2YgRGV2aWNlIExpbmsgQWxsb2NhdGlvbioqCgpSaWdodCwgc28gYGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvY2AgaXMgYmVpbmcgY2FsbGVkICpiZWZvcmUqIHRoZSB0eXBpY2FsIGBzZXR1cGAgcm91dGluZS4gVGhhdCBpbW1lZGlhdGVseSBmbGFncyBhIHBvdGVudGlhbCBhcmVhIG9mIG9wdGltaXphdGlvbiBvciBhIGRpZmZlcmVudCBpbml0aWFsaXphdGlvbiBmbG93IHRoYW4gSSYjMzk7bSB1c2VkIHRvLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBiZWhpbmQgdGhpcyBzZWVtaW5nbHkgZWFybHkgYWxsb2NhdGlvbi4gTGV0JiMzOTtzIGRlbHZlIGludG8gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiBvZiBgZHNhX3N3aXRjaF9zZXR1cGAgd2l0aGluIGBuZXQvZHNhL2RzYS5jYC4gSXQgaXMgaW1wZXJhdGl2ZSB0byBrbm93ICp3aHkqIHdlJiMzOTtyZSBhbGxvY2F0aW5nIHNvIGVhcmx5IGFuZCB3aGF0IGRlcGVuZGVuY2llcyBvciBjb25zdHJhaW50cyB0aGF0IHBsYWNlcyBvbiBzdWJzZXF1ZW50IG9wZXJhdGlvbnMuIFRoaXMgY291bGQgYmUgYWJvdXQgcmVzb3VyY2UgcHJlLWFsbG9jYXRpb24sIGhhcmR3YXJlIGRpc2NvdmVyeSwgb3IgYSBzcGVjaWZpYyBoYW5kbGluZyBvZiB0aGUgZGV2bGluayBzdHJ1Y3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bmV0L2RzYS9kc2EuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDYyMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAxMDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDYyMjpcdHN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gNjIzOlx0e1xuIDYyNDpcdFx0aW50IGVycjtcbiA2MjU6XHRcbiA2MjY6XHRcdGlmIChkcy1cdTAwM2VzZXR1cClcbiA2Mjc6XHRcdFx0cmV0dXJuIDA7XG4gNjI4Olx0XG4gNjI5Olx0XHQvKiBJbml0aWFsaXplIGRzLVx1MDAzZXBoeXNfbWlpX21hc2sgYmVmb3JlIHJlZ2lzdGVyaW5nIHRoZSB1c2VyIE1ESU8gYnVzXG4gNjMwOlx0XHQgKiBkcml2ZXIgYW5kIGJlZm9yZSBvcHMtXHUwMDNlc2V0dXAoKSBoYXMgcnVuLCBzaW5jZSB0aGUgc3dpdGNoIGRyaXZlcnMgYW5kXG4gNjMxOlx0XHQgKiB0aGUgdXNlciBNRElPIGJ1cyBkcml2ZXIgcmVseSBvbiB0aGVzZSB2YWx1ZXMgZm9yIHByb2JpbmcgUEhZXG4gNjMyOlx0XHQgKiBkZXZpY2VzIG9yIG5vdFxuIDYzMzpcdFx0ICovXG4gNjM0Olx0XHRkcy1cdTAwM2VwaHlzX21paV9tYXNrIHw9IGRzYV91c2VyX3BvcnRzKGRzKTtcbiA2MzU6XHRcbiA2MzY6XHRcdGVyciA9IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhkcyk7XG4gNjM3Olx0XHRpZiAoZXJyKVxuIDYzODpcdFx0XHRyZXR1cm4gZXJyO1xuIDYzOTpcdFxuIDY0MDpcdFx0ZXJyID0gZHNhX3N3aXRjaF9yZWdpc3Rlcl9ub3RpZmllcihkcyk7XG4gNjQxOlx0XHRpZiAoZXJyKVxuIDY0MjpcdFx0XHRnb3RvIGRldmxpbmtfZnJlZTtcbiA2NDM6XHRcbiA2NDQ6XHRcdGRzLVx1MDAzZWNvbmZpZ3VyZV92bGFuX3doaWxlX25vdF9maWx0ZXJpbmcgPSB0cnVlO1xuIDY0NTpcdFxuIDY0NjpcdFx0ZXJyID0gZHMtXHUwMDNlb3BzLVx1MDAzZXNldHVwKGRzKTtcbiA2NDc6XHRcdGlmIChlcnIgXHUwMDNjIDApXG4gNjQ4Olx0XHRcdGdvdG8gdW5yZWdpc3Rlcl9ub3RpZmllcjtcbiA2NDk6XHRcbiA2NTA6XHRcdGVyciA9IGRzYV9zd2l0Y2hfc2V0dXBfdGFnX3Byb3RvY29sKGRzKTtcbiA2NTE6XHRcdGlmIChlcnIpXG4gNjUyOlx0XHRcdGdvdG8gdGVhcmRvd247XG4gNjUzOlx0XG4gNjU0Olx0XHRpZiAoIWRzLVx1MDAzZXVzZXJfbWlpX2J1cyBcdTAwMjZcdTAwMjYgZHMtXHUwMDNlb3BzLVx1MDAzZXBoeV9yZWFkKSB7XG4gNjU1Olx0XHRcdGRzLVx1MDAzZXVzZXJfbWlpX2J1cyA9IG1kaW9idXNfYWxsb2MoKTtcbiA2NTY6XHRcdFx0aWYgKCFkcy1cdTAwM2V1c2VyX21paV9idXMpIHtcbiA2NTc6XHRcdFx0XHRlcnIgPSAtRU5PTUVNO1xuIDY1ODpcdFx0XHRcdGdvdG8gdGVhcmRvd247XG4gNjU5Olx0XHRcdH1cbiA2NjA6XHRcbiA2NjE6XHRcdFx0ZHNhX3VzZXJfbWlpX2J1c19pbml0KGRzKTtcbiA2NjI6XHRcbiA2NjM6XHRcdFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihkcy1cdTAwM2V1c2VyX21paV9idXMpO1xuIDY2NDpcdFx0XHRpZiAoZXJyIFx1MDAzYyAwKVxuIDY2NTpcdFx0XHRcdGdvdG8gZnJlZV91c2VyX21paV9idXM7XG4gNjY2Olx0XHR9XG4gNjY3Olx0XG4gNjY4Olx0XHRkc2Ffc3dpdGNoX2RldmxpbmtfcmVnaXN0ZXIoZHMpO1xuIDY2OTpcdFxuIDY3MDpcdFx0ZHMtXHUwMDNlc2V0dXAgPSB0cnVlO1xuIDY3MTpcdFx0cmV0dXJuIDA7XG4gNjcyOlx0XG4gNjczOlx0ZnJlZV91c2VyX21paV9idXM6XG4gNjc0Olx0XHRpZiAoZHMtXHUwMDNldXNlcl9taWlfYnVzIFx1MDAyNlx1MDAyNiBkcy1cdTAwM2VvcHMtXHUwMDNlcGh5X3JlYWQpXG4gNjc1Olx0XHRcdG1kaW9idXNfZnJlZShkcy1cdTAwM2V1c2VyX21paV9idXMpO1xuIDY3NjpcdHRlYXJkb3duOlxuIDY3NzpcdFx0aWYgKGRzLVx1MDAzZW9wcy1cdTAwM2V0ZWFyZG93bilcbiA2Nzg6XHRcdFx0ZHMtXHUwMDNlb3BzLVx1MDAzZXRlYXJkb3duKGRzKTtcbiA2Nzk6XHR1bnJlZ2lzdGVyX25vdGlmaWVyOlxuIDY4MDpcdFx0ZHNhX3N3aXRjaF91bnJlZ2lzdGVyX25vdGlmaWVyKGRzKTtcbiA2ODE6XHRkZXZsaW5rX2ZyZWU6XG4gNjgyOlx0XHRkc2Ffc3dpdGNoX2RldmxpbmtfZnJlZShkcyk7XG4gNjgzOlx0XHRyZXR1cm4gZXJyO1xuIDY4NDpcdH1cbiA2ODU6XHRcbiA2ODY6XHRzdGF0aWMgdm9pZCBkc2Ffc3dpdGNoX3RlYXJkb3duKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiA2ODc6XHR7XG4gNjg4Olx0XHRpZiAoIWRzLVx1MDAzZXNldHVwKVxuIDY4OTpcdFx0XHRyZXR1cm47XG4gNjkwOlx0XG4gNjkxOlx0XHRkc2Ffc3dpdGNoX2RldmxpbmtfdW5yZWdpc3Rlcihkcyk7XG4gNjkyOlx0XG4gNjkzOlx0XHRpZiAoZHMtXHUwMDNldXNlcl9taWlfYnVzIFx1MDAyNlx1MDAyNiBkcy1cdTAwM2VvcHMtXHUwMDNlcGh5X3JlYWQpIHtcbiA2OTQ6XHRcdFx0bWRpb2J1c191bnJlZ2lzdGVyKGRzLVx1MDAzZXVzZXJfbWlpX2J1cyk7XG4gNjk1Olx0XHRcdG1kaW9idXNfZnJlZShkcy1cdTAwM2V1c2VyX21paV9idXMpO1xuIDY5NjpcdFx0XHRkcy1cdTAwM2V1c2VyX21paV9idXMgPSBOVUxMO1xuIDY5NzpcdFx0fVxuIDY5ODpcdFxuIDY5OTpcdFx0ZHNhX3N3aXRjaF90ZWFyZG93bl90YWdfcHJvdG9jb2woZHMpO1xuIDcwMDpcdFxuIDcwMTpcdFx0aWYgKGRzLVx1MDAzZW9wcy1cdTAwM2V0ZWFyZG93bilcbiA3MDI6XHRcdFx0ZHMtXHUwMDNlb3BzLVx1MDAzZXRlYXJkb3duKGRzKTtcbiA3MDM6XHRcbiA3MDQ6XHRcdGRzYV9zd2l0Y2hfdW5yZWdpc3Rlcl9ub3RpZmllcihkcyk7XG4gNzA1Olx0XG4gNzA2Olx0XHRkc2Ffc3dpdGNoX2RldmxpbmtfZnJlZShkcyk7XG4gNzA3Olx0XG4gNzA4Olx0XHRkcy1cdTAwM2VzZXR1cCA9IGZhbHNlO1xuIDcwOTpcdH1cbiA3MTA6XHRcbiA3MTE6XHQvKiBGaXJzdCB0ZWFyIGRvd24gdGhlIG5vbi1zaGFyZWQsIHRoZW4gdGhlIHNoYXJlZCBwb3J0cy4gVGhpcyBlbnN1cmVzIHRoYXRcbiA3MTI6XHQgKiBhbGwgd29yayBpdGVtcyBzY2hlZHVsZWQgYnkgb3VyIHN3aXRjaGRldiBoYW5kbGVycyBmb3IgdXNlciBwb3J0cyBoYXZlXG4gNzEzOlx0ICogY29tcGxldGVkIGJlZm9yZSB3ZSBkZXN0cm95IHRoZSByZWZjb3VudGluZyBrZXB0IG9uIHRoZSBzaGFyZWQgcG9ydHMuXG4gNzE0Olx0ICovXG4gNzE1Olx0c3RhdGljIHZvaWQgZHNhX3RyZWVfdGVhcmRvd25fcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxuIDcxNjpcdHtcbiA3MTc6XHRcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XG4gNzE4Olx0XG4gNzE5Olx0XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGRwLCBcdTAwMjZkc3QtXHUwMDNlcG9ydHMsIGxpc3QpXG4gNzIwOlx0XHRcdGlmIChkc2FfcG9ydF9pc191c2VyKGRwKSB8fCBkc2FfcG9ydF9pc191bnVzZWQoZHApKVxuIDcyMTpcdFx0XHRcdGRzYV9wb3J0X3RlYXJkb3duKGRwKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDU3MzIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgRGV2bGluayBWaXNpYmlsaXR5KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIHNvbWV0aGluZyYjMzk7cyBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZS4gSXQgc2VlbXMgdGhhdCBgZHNhX3N3aXRjaF9kZXZsaW5rX3JlZ2lzdGVyKGRzKWAgaXMgY2FsbGVkICphZnRlciogdGhlIGBkcy0mZ3Q7b3BzLSZndDtzZXR1cChkcylgIGZ1bmN0aW9uLiBUaGF0JiMzOTtzIGEgYml0IHVudXN1YWwuIE5vdywgaWYgdGhlIGBzZXR1cGAgb3BlcmF0aW9uIGZhaWxzLCB0aGUgY29kZSBjbGVhbmx5IHVucmVnaXN0ZXJzIHRoZSBub3RpZmllciBhbmQgZnJlZXMgdGhlIGRldmljZSBsaW5rIGluc3RhbmNlIHdpdGggYGRldmxpbmtfZnJlZWAuIFRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIGl0LCB0aGUgZGV2bGluayBkZXZpY2UgaXMgTkVWRVIgcmVnaXN0ZXJlZCBpbiB0aGF0IGZhaWx1cmUgcGF0aCEgVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBpc3N1ZSwgYSByYWNlIGNvbmRpdGlvbiwgb3IganVzdCBhIGxvZ2ljIGdhcC4KCldhaXQgYSBzZWNvbmQsIGxldCBtZSB0aGluayB0aGlzIHRocm91Z2guIGBkZXZsaW5rX2FsbG9jYCBoYW5kbGVzIHRoZSBpbml0aWFsIG1lbW9yeSBhbGxvY2F0aW9uIGZvciB0aGUgZGV2bGluayBpbnN0YW5jZSwgcmlnaHQ/IEJ1dCB0aGF0IGluc3RhbmNlIGlzbiYjMzk7dCBhY3R1YWxseSBhY2Nlc3NpYmxlIHRvIHVzZXJzcGFjZSwgaXQmIzM5O3MgaW52aXNpYmxlLCB1bnRpbCB0aGUgY2FsbCB0byBgZGV2bGlua19yZWdpc3RlcmAuIEFoYSEgVGhhdCBjb25maXJtcyBteSBzdXNwaWNpb24uIFRoZSBkZXZsaW5rIGRldmljZSBpcyBlc3NlbnRpYWxseSAmIzM0O2Jvcm4mIzM0OyB3aXRoIGBkZXZsaW5rX2FsbG9jYCwgYnV0IGRvZXNuJiMzOTt0ICpleGlzdCogZnJvbSBhIHVzZXIgcGVyc3BlY3RpdmUgdW50aWwgcmVnaXN0cmF0aW9uLgoKQWxyaWdodCwgc28gdGhpcyByZXF1aXJlcyBhIGRlZXBlciBsb29rLCBhIG1vcmUgdGhvcm91Z2ggdmVyaWZpY2F0aW9uLiBJIG5lZWQgdG8gZGlnIGludG8gdGhlIGRldGFpbHMgdG8gYmUgY2VydGFpbiBvZiB0aGUgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGlzIHJlZ2lzdHJhdGlvbiBzZXF1ZW5jZS4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGUgZGV2aWNlIG5vdCBnZXR0aW5nIHJlZ2lzdGVyZWQgaW4gdGhlIGV2ZW50IG9mIGFuIGVhcmx5IGZhaWx1cmUuIEkgbmVlZCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkc2Ffc3dpdGNoX2RldmxpbmtfcmVnaXN0ZXImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtuZXQvZHNhLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtuZXQvZHNhL2RldmxpbmsuYz0zNzc9dm9pZCBkc2FfcG9ydF9kZXZsaW5rX3RlYXJkb3duKHN0cnVjdCBkc2FfcG9ydCAqZHApXG4tLVxubmV0L2RzYS9kZXZsaW5rLmMtMzg5LVxubmV0L2RzYS9kZXZsaW5rLmM6MzkwOnZvaWQgZHNhX3N3aXRjaF9kZXZsaW5rX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbm5ldC9kc2EvZGV2bGluay5jLTM5MS17XG4tLVxubmV0L2RzYS9kZXZsaW5rLmg9MTA9dm9pZCBkc2FfcG9ydF9kZXZsaW5rX3RlYXJkb3duKHN0cnVjdCBkc2FfcG9ydCAqZHApO1xubmV0L2RzYS9kZXZsaW5rLmg6MTE6dm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbm5ldC9kc2EvZGV2bGluay5oLTEyLXZvaWQgZHNhX3N3aXRjaF9kZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcbi0tXG5uZXQvZHNhL2RzYS5jPTYyMj1zdGF0aWMgaW50IGRzYV9zd2l0Y2hfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuLS1cbm5ldC9kc2EvZHNhLmMtNjY3LVxubmV0L2RzYS9kc2EuYzo2Njg6XHRkc2Ffc3dpdGNoX2RldmxpbmtfcmVnaXN0ZXIoZHMpO1xubmV0L2RzYS9kc2EuYy02NjktXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ2NDg1CgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBhcyBpZiB0aGV5JiMzOTtyZSBteSBvd246CgoqKkFuYWx5emluZyB0aGUgYGRzYV9zd2l0Y2hfZGV2bGlua19yZWdpc3RlcmAgRnVuY3Rpb24qKgoKQWxyaWdodCwgc28gdGhlIGZpcnN0IHRoaW5nIG9uIG15IG1pbmQgaXMgYGRzYV9zd2l0Y2hfZGV2bGlua19yZWdpc3RlcmAuIEkmIzM5O20gaW1tZWRpYXRlbHkgY3VyaW91cyBhYm91dCBpdHMgcHVycG9zZSB3aXRoaW4gdGhlIGJyb2FkZXIgRFNBIChEaXN0cmlidXRlZCBTd2l0Y2ggQXJjaGl0ZWN0dXJlKSBjb250ZXh0LiBJdCYjMzk7cyBwcmV0dHkgY2xlYXIgZnJvbSB0aGUgbmFtZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gcmVnaXN0ZXJpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBzd2l0Y2ggYW5kLCBzcGVjaWZpY2FsbHksIGhvdyB0aGF0IHN3aXRjaCBpbnRlcmFjdHMgd2l0aCBkZXZsaW5rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcmVnaXN0cmF0aW9uIGVudGFpbHMuCgpJJiMzOTttIHRoaW5raW5nLCBpcyB0aGlzIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvcjoKCiogICBFc3RhYmxpc2hpbmcgdGhlIGluaXRpYWwgZGV2bGluayBvYmplY3QgZm9yIHRoZSBzd2l0Y2g/CiogICBMaW5raW5nIHRoZSBEU0Egc3dpdGNoIGRyaXZlciB3aXRoIHRoZSBkZXZsaW5rIGNvcmU/CiogICBTZXR0aW5nIHVwIHNwZWNpZmljIGRldmxpbmsgcmVzb3VyY2VzIG9yIGNvbmZpZ3VyYXRpb25zIHJlcXVpcmVkIGJ5IHRoZSBzd2l0Y2g/CiogICBIYW5kbGluZyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgdGhlIGRldmxpbmsgaW50ZWdyYXRpb24/CgpJJiMzOTttIGFsc28gY29uc2lkZXJpbmcgdGhlIGltcGxpY2F0aW9ucy4gQSBwcm9wZXIgZGV2bGluayByZWdpc3RyYXRpb24gaXMgY3J1Y2lhbCBmb3IgbWFraW5nIHRoZSBzd2l0Y2ggZGlzY292ZXJhYmxlLCBtYW5hZ2VhYmxlLCBhbmQgaW50ZXJvcGVyYWJsZSB3aXRoaW4gdGhlIHN5c3RlbS4gV2l0aG91dCBpdCwgd2UmIzM5O3JlIGxpa2VseSBtaXNzaW5nIG91dCBvbiBjcml0aWNhbCBmZWF0dXJlcyBhbmQgcGVyZm9ybWFuY2UgYmVuZWZpdHMgdGhhdCBkZXZsaW5rIHByb3ZpZGVzLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gbW9uaXRvciB0aGUgZGV2aWNlLCBtYW5hZ2UgcXVldWVzLCBhbmQgcG90ZW50aWFsbHkgcHVzaCBvdXQgc29tZSBmaXJtd2FyZSB1cGdyYWRlcy4KCkkgc2hvdWxkIGFsc28gbG9vayBpbnRvIHRoZSBmdW5jdGlvbiYjMzk7cyBhcmd1bWVudHMuIFdoYXQgZGF0YSBkb2VzIGl0IHRha2UgYXMgaW5wdXQ/IERvZXMgaXQgcmVjZWl2ZSBhIHBvaW50ZXIgdG8gdGhlIERTQSBzd2l0Y2ggZGV2aWNlIHN0cnVjdHVyZSwgb3Igc29tZXRoaW5nIGVsc2U/IFVuZGVyc3RhbmRpbmcgdGhlIGlucHV0IHBhcmFtZXRlcnMgd2lsbCBiZSBrZXkgdG8gZ3Jhc3BpbmcgaG93IGl0IGludGVncmF0ZXMgd2l0aCB0aGUgcmVzdCBvZiB0aGUgRFNBIGRyaXZlciBhbmQgZGV2bGluayBpbmZyYXN0cnVjdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZHNhL2RldmxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDM5MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMzkwOlx0dm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIDM5MTpcdHtcbiAzOTI6XHRcdGRldmxpbmtfcmVnaXN0ZXIoZHMtXHUwMDNlZGV2bGluayk7XG4gMzkzOlx0fVxuIDM5NDpcdFxuIDM5NTpcdHZvaWQgZHNhX3N3aXRjaF9kZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIDM5NjpcdHtcbiAzOTc6XHRcdGRldmxpbmtfdW5yZWdpc3Rlcihkcy1cdTAwM2VkZXZsaW5rKTtcbiAzOTg6XHR9XG4gMzk5Olx0XG4gNDAwOlx0aW50IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXG4gNDAxOlx0e1xuIDQwMjpcdFx0c3RydWN0IGRzYV9kZXZsaW5rX3ByaXYgKmRsX3ByaXY7XG4gNDAzOlx0XHRjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgKm9wcztcbiA0MDQ6XHRcdHN0cnVjdCBkZXZsaW5rICpkbDtcbiA0MDU6XHRcbiA0MDY6XHRcdG9wcyA9IGRzLVx1MDAzZW9wcy1cdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZSA/IFx1MDAyNmRzYV9kZXZsaW5rX2ZsYXNoX29wc1xuIDQwNzpcdFx0XHRcdFx0XHQgICAgOiBcdTAwMjZkc2FfZGV2bGlua19vcHM7XG4gNDA4Olx0XG4gNDA5Olx0XHQvKiBBZGQgdGhlIHN3aXRjaCB0byBkZXZsaW5rIGJlZm9yZSBjYWxsaW5nIHNldHVwLCBzbyB0aGF0IHNldHVwIGNhblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NzE3NgoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDQ4MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFBhdGggdG8gYG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlYCoqCgpPa2F5LCBoZXJlJiMzOTtzIHRoZSBicmVha2Rvd24gYXMgSSBzZWUgaXQuIFRoZSBjb3JlIGlzc3VlIGlzIGVuc3VyaW5nIGBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FuIGJlIHJlYWNoZWQuIFRoaXMgZnVuY3Rpb24sIGFuZCB0aGVyZWZvcmUgdGhlIGFiaWxpdHkgdG8gdXBkYXRlIHRoZSBmbGFzaCwgaGluZ2VzIG9uIGBkZXZsaW5rX3JlZ2lzdGVyYCBiZWluZyBjYWxsZWQuIEl0JiMzOTtzIGNsZWFyIHRoYXQgaWYgYG14bDg2Mnh4X3NldHVwYCBmYWlscywgYGRldmxpbmtfcmVnaXN0ZXJgIGlzbiYjMzk7dCBjYWxsZWQsIGVmZmVjdGl2ZWx5IGJsb2NraW5nIGFueSB1c2Vyc3BhY2UgaW50ZXJhY3Rpb24sIGxpa2UgYGRldmxpbmtfZmxhc2hfdXBkYXRlYC4gU28sIHRoZSBwYXRoIGlzOiBgbXhsODYyeHhfc2V0dXBgICptdXN0KiBzdWNjZWVkLgoKRm9yIGBteGw4NjJ4eF9zZXR1cGAgdG8gc3VjY2VlZCwgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgaGFzIHRvIHJldHVybiBlaXRoZXIgYE1YTDg2MlhYX0lOX1JFU0NVRWAgb3IgYE1YTDg2MlhYX05PVF9SRVNDVUVgLiBJZiBpdCYjMzk7cyB0aGUgbGF0dGVyLCB0aGVuIHdlIGdldCBpbnRvIHRoZSBmdXJ0aGVyIHN1Y2Nlc3MgcmVxdWlyZW1lbnRzOyBgbXhsODYyeHhfcmVzZXRgIGFuZCBgbXhsODYyeHhfd2FpdF9yZWFkeWAgbXVzdCBhbHNvIHN1Y2NlZWQuIFJlbWVtYmVyIHRoYXQgYG14bDg2Mnh4X3Jlc2V0YCBpbnZvbHZlcyBNRElPIHdyaXRlcyBhbmQgd2FpdGluZyBmb3IgYSBiaXQgdG8gY2xlYXIsIHdoaWxlIGBteGw4NjJ4eF93YWl0X3JlYWR5YCByZWxpZXMgb24gcmVhZGluZyB0aGUgZmlybXdhcmUgdmVyc2lvbiB2aWEgdGhlIE1ESU8gQVBJLgoKVGhlIHRyaWNreSBwYXJ0IGNvbWVzIGluIHdpdGggdGhlIGhhcmR3YXJlIGRldGVjdGlvbi4gSWYgdGhlcmUmIzM5O3Mgbm8gcGh5c2ljYWwgaGFyZHdhcmUsIEkga25vdyB0aGF0IGBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3RgIHdpbGwgcmV0dXJuIGAtRU5PREVWYCBiZWNhdXNlIGEgc2NyYXRjaCB3cml0ZSB0byBBRERSL0RBVEEgd2lsbCBmYWlsIHRvIGxhdGNoLiBNZWFuaW5nIHdoZW4gaXQgcmVhZHMgYmFjayB0aGUgdmFsdWVzLCBpdCBzaG91bGQgYmUgYDB4ZmZmZmAgb3IgYDB4MDAwMGAgcmF0aGVyIHRoYW4gdGhlIGV4cGVjdGVkIGAweDVhNWFgIGFuZCBgMHhhNWE1YC4KCkJ1dCBoZXJlJiMzOTtzIGEgd3JpbmtsZTogSSBuZWVkIHRvIGNvbnNpZGVyIHN5emthbGxlciBhbmQgaXRzIGVudmlyb25tZW50LiBXaGF0IGlmIHN5emthbGxlciBpcyB1c2luZyBhIGR1bW15IE1ESU8gYnVzIHRoYXQgYWN0dWFsbHkgKnN0b3JlcyogdGhlIHdyaXR0ZW4gdmFsdWVzPyBUaGlzIGlzIGltcG9ydGFudCBiZWNhdXNlIGl0IGNvdWxkIHBvdGVudGlhbGx5IHRyaWNrIGBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3RgIGludG8gdGhpbmtpbmcgdGhlcmUgKmlzKiBhIHZhbGlkIGRldmljZSB3aGVuIHRoZXJlIGlzbiYjMzk7dC4gU28sIHRoYXQgbWVhbnMgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHN5emthbGxlciBpbXBsZW1lbnRzIGEgdmFsdWUtc3RvcmluZywgbW9jayBNRElPIGJ1cyBpbXBsZW1lbnRhdGlvbi4KCkxldCYjMzk7cyBjaGVjay4gSSBjYW4gc2VhcmNoIHRoZSBrZXJuZWwgY29kZSBmb3IgY2x1ZXMuIEkgc2hvdWxkIHN0YXJ0IGJ5IGxvb2tpbmcgZm9yIGBtZGlvYnVzX2FsbG9jYCBvciBgbWRpb2J1c19yZWdpc3RlcmAgd2l0aGluIHRoZSBgZHJpdmVycy9uZXQvcGh5L2Agb3IgYGRyaXZlcnMvbmV0L21kaW8vYCBkaXJlY3Rvcmllcy4gTWF5YmUgc29tZXRoaW5nIGxpa2UgYG1kaW8tbW9ja2Agb3IgYG1kaW8tZHVtbXlgLiBJJiMzOTt2ZSBhbHJlYWR5IHNjYW5uZWQgdGhvc2UsIHNvIGxldCYjMzk7cyBjaGVjayBgZHJpdmVycy9uZXQvZXRoZXJuZXQvYCBuZXh0LiBTb21lIGV0aGVybmV0IGRyaXZlcnMgaGF2ZSB0aGVpciBvd24gTURJTyBidXNlcywgdGhvdWdoIHVzdWFsbHkgdGllZCB0byB0aGVpciBzcGVjaWZpYyBoYXJkd2FyZSwgc28gdW5saWtlbHkgdG8gYmUgZ2VuZXJhbGx5IHVzZWZ1bC4gV2hhdCBhYm91dCBgbmV0ZGV2c2ltYD8gRG9lcyBpdCBldmVuIGltcGxlbWVudCBhbiBNRElPIGJ1cz8gVGhpcyBmZWVscyBsaWtlIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB0aGlzIGludmVzdGlnYXRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L25ldGRldnNpbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0ODM1NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqSW52ZXN0aWdhdGluZyBOZXR3b3JrIERldmljZSBTaW11bGF0aW9uIGFuZCBMb29wYmFjayBGdW5jdGlvbmFsaXR5KioKCkFscmlnaHQsIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYG5ldGRldnNpbWAuIFNwZWNpZmljYWxseSwgSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIGl0IGhpdCBtZTogdGhlcmUmIzM5O3Mgbm8gTURJTyBzdXBwb3J0IGltcGxlbWVudGVkIHRoZXJlLiBPa2F5LCB0aGF0JiMzOTtzIG5vdCBpZGVhbCwgYnV0IHByb2JhYmx5IG5vdCB0aGUgZW5kIG9mIHRoZSB3b3JsZCBmb3IgdGhlIGludGVuZGVkIHVzZSBjYXNlcywgdGhvdWdoIGl0IGRvZXMgbGltaXQgaXRzIHRlc3Rpbmcgc2NvcGUgc29tZXdoYXQuCgpUaGVuIG15IG1pbmQgd2FuZGVyZWQgYW5kIHRoZSBxdWVzdGlvbiBoaXQgbWU6IHdoYXQgYWJvdXQgYGRzYV9sb29wYD8gSSYjMzk7bSBjdXJpb3VzIGlmIGl0IG9mZmVycyBhIHZpYWJsZSBhbHRlcm5hdGl2ZSBvciBjb21wbGVtZW50YXJ5IGFwcHJvYWNoIGZvciBjZXJ0YWluIHRlc3Rpbmcgc2NlbmFyaW9zLiBEb2VzIGl0IGV4cG9zZSB0aGUgZnVuY3Rpb25hbGl0eSB0byBieXBhc3MgdGhlIHBoeXNpY2FsIG1lZGl1bSBhbmQgdGVzdCBzcGVjaWZpYyBhc3BlY3RzIG9mIHRoZSBuZXR3b3JrIHN0YWNrLCBwZXJoYXBzIGluZGVwZW5kZW50IG9mIGFuIGFjdHVhbCBNRElPIHNldHVwLCB3aGljaCBpcyB3aGF0IEkmIzM5O20gbG9va2luZyBmb3IgaGVyZT8gTmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIHRoZSBgZHNhX2xvb3BgIGNvZGUgdG8gc2VlIGlmIGl0IHByb3ZpZGVzIHRoZSBsZXZlbCBvZiBjb250cm9sIGFuZCBpc29sYXRpb24gSSYjMzk7bSB0cnlpbmcgdG8gYWNoaWV2ZS4gRXhwbG9yaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28sIGBuZXRkZXZzaW1gIGFuZCBgZHNhX2xvb3BgIHRvIHNlZSB3aGVyZSB0aGUgZnVuY3Rpb25hbGl0eSBvdmVybGFwcywgYW5kIHdoYXQgbWlnaHQgYmUgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIHRlc3RpbmcgdGhlc2UgbG93ZXIgbGV2ZWwgZnVuY3Rpb25zLCBhbmQgdGhlIGhpZ2hlciBsZXZlbCBmdW5jdGlvbnMgdGhhdCBkZXBlbmQgb24gdGhlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWRpbyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTc0PXN0YXRpYyBzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2c1tQSFlfTUFYX0FERFJdO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NzU6c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZSAqc3dpdGNoX21kaW9kZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy03Ni1cbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0xODQ9c3RhdGljIGludCBkc2FfbG9vcF9waHlfcmVhZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE4OS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5MDpcdHJldCA9IG1kaW9idXNfcmVhZF9uZXN0ZWQoYnVzLCBwcy1cdTAwM2Vwb3J0X2Jhc2UgJiM0MzsgcG9ydCwgcmVnbnVtKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTE5MS1cdGlmIChyZXQgXHUwMDNjIDApXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MTk5PXN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3dyaXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjA1LVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjA2Olx0cmV0ID0gbWRpb2J1c193cml0ZV9uZXN0ZWQoYnVzLCBwcy1cdTAwM2Vwb3J0X2Jhc2UgJiM0MzsgcG9ydCwgcmVnbnVtLCB2YWx1ZSk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDctXHRpZiAocmV0IFx1MDAzYyAwKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTI1MD1zdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yNjMtXHQvKiBKdXN0IGRvIGEgc2xlZXBpbmcgb3BlcmF0aW9uIHRvIG1ha2UgbG9ja2RlcCBjaGVja3MgZWZmZWN0aXZlICovXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyNjQ6XHRtZGlvYnVzX3JlYWQoYnVzLCBwcy1cdTAwM2Vwb3J0X2Jhc2UgJiM0MzsgcG9ydCwgTUlJX0JNU1IpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjY1LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTI4Mz1zdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOTItXHQvKiBKdXN0IGRvIGEgc2xlZXBpbmcgb3BlcmF0aW9uIHRvIG1ha2UgbG9ja2RlcCBjaGVja3MgZWZmZWN0aXZlICovXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyOTM6XHRtZGlvYnVzX3JlYWQoYnVzLCBwcy1cdTAwM2Vwb3J0X2Jhc2UgJiM0MzsgcG9ydCwgTUlJX0JNU1IpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjk0LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTMzND1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIGRzYV9sb29wX2RyaXZlciA9IHtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTQtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNTU6c3RhdGljIGludCBkc2FfbG9vcF9kcnZfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NzpcdHN0cnVjdCBkc2FfbG9vcF9wZGF0YSAqcGRhdGEgPSBtZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU4LVx0c3RydWN0IGRzYV9sb29wX3ByaXYgKnBzO1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2NC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM2NTpcdGRzID0gZGV2bV9remFsbG9jKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2LCBzaXplb2YoKmRzKSwgR0ZQX0tFUk5FTCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNjYtXHRpZiAoIWRzKVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2OC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM2OTpcdGRzLVx1MDAzZWRldiA9IFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2O1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzcwLVx0ZHMtXHUwMDNlbnVtX3BvcnRzID0gRFNBX0xPT1BfTlVNX1BPUlRTO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzcxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzcyOlx0cHMgPSBkZXZtX2t6YWxsb2MoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYsIHNpemVvZigqcHMpLCBHRlBfS0VSTkVMKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM3My1cdGlmICghcHMpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgxLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzgyOlx0ZHMtXHUwMDNlZGV2ID0gXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXY7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODMtXHRkcy1cdTAwM2VvcHMgPSBcdTAwMjZkc2FfbG9vcF9kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODQtXHRkcy1cdTAwM2Vwcml2ID0gcHM7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODU6XHRwcy1cdTAwM2VidXMgPSBtZGlvZGV2LVx1MDAzZWJ1cztcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Ni1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM4NzpcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgZHMpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzg4LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM5MC1cdGlmICghcmV0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzkxOlx0XHRkZXZfaW5mbyhcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgXCYjMzQ7JXM6IDB4JTB4XFxuXCYjMzQ7LFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzkyLVx0XHRcdCBwZGF0YS1cdTAwM2VuYW1lLCBwZGF0YS1cdTAwM2VlbmFibGVkX3BvcnRzKTtcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozOTc6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3JlbW92ZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTgte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6Mzk5Olx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2X2dldF9kcnZkYXRhKFx1MDAyNm1kaW9kZXYtXHUwMDNlZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQwMC1cdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcztcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTAtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMi17XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTM6XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXHUwMDI2bWRpb2Rldi1cdTAwM2VkZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDE0LVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxOS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMDpcdGRldl9zZXRfZHJ2ZGF0YShcdTAwMjZtZGlvZGV2LVx1MDAzZWRldiwgTlVMTCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjEtfVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIyLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDIzOnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZHNhX2xvb3BfZHJ2ID0ge1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDI0Olx0Lm1kaW9kcnYuZHJpdmVyXHQ9IHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQyNS1cdFx0Lm5hbWVcdD0gXCYjMzQ7ZHNhLWxvb3BcJiMzNDssXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDMyPXN0YXRpYyBpbnQgZHNhX2xvb3BfYnVzX21hdGNoKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzQte1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDM1Olx0cmV0dXJuIGRydiA9PSBcdTAwMjZkc2FfbG9vcF9kcnYubWRpb2Rydi5kcml2ZXI7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MzYtfVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTQzOD1zdGF0aWMgdm9pZCBkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NDY6c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfY3JlYXRlX3N3aXRjaF9tZGlvZGV2KHZvaWQpXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDcte1xuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ2Mi1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ2MzpcdGJ1cyA9IG1kaW9fZmluZF9idXMoXCYjMzQ7Zml4ZWQtMFwmIzM0Oyk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjQtXHRpZiAoV0FSTl9PTighYnVzKSlcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0Njc6XHRzd2l0Y2hfbWRpb2RldiA9IG1kaW9fZGV2aWNlX2NyZWF0ZShidXMsIDMxKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ2ODpcdGlmIChJU19FUlIoc3dpdGNoX21kaW9kZXYpKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDY5LVx0XHRnb3RvIG91dDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3MC1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MTpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWJ1c19tYXRjaCA9IGRzYV9sb29wX2J1c19tYXRjaDtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MjpcdHN3aXRjaF9tZGlvZGV2LVx1MDAzZWRldi5wbGF0Zm9ybV9kYXRhID0gXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NzMtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0NzQ6XHRyZXQgPSBtZGlvX2RldmljZV9yZWdpc3Rlcihzd2l0Y2hfbWRpb2Rldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NzUtXHRpZiAocmV0KVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDc2Olx0XHRtZGlvX2RldmljZV9mcmVlKHN3aXRjaF9tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3Ny1vdXQ6XG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NDgyPXN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODYtXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0ODc6XHRyZXQgPSBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYoKTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ4OC1cdGlmIChyZXQpXG4tLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDkzLVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk0Olx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5NS1cdGlmIChyZXQpIHtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5Ni1cdFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTc6XHRcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTg6XHRcdG1kaW9fZGV2aWNlX2ZyZWUoc3dpdGNoX21kaW9kZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk5LVx0fVxuLS1cbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTUwNT1zdGF0aWMgdm9pZCBfX2V4aXQgZHNhX2xvb3BfZXhpdCh2b2lkKVxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTA2LXtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcdG1kaW9fZHJpdmVyX3VucmVnaXN0ZXIoXHUwMDI2ZHNhX2xvb3BfZHJ2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwOC1cdGRzYV9sb29wX3BoeWRldnNfdW5yZWdpc3RlcigpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NTA5Olx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUxMDpcdG1kaW9fZGV2aWNlX2ZyZWUoc3dpdGNoX21kaW9kZXYpO1xuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTExLX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTE3NDMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGRzYV9sb29wYCBhbmQgYG14bDg2Mnh4YCBEcml2ZXIgSW50ZXJhY3Rpb25zKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgc3l6a2FsbGVyIGNvdWxkIHBvdGVudGlhbGx5IGludGVyYWN0IHdpdGggdGhlIGBkc2FfbG9vcGAgZHJpdmVyIGFuZCB0aGUgYG14bDg2Mnh4YCBkcml2ZXIsIHBhcnRpY3VsYXJseSBjb25jZXJuaW5nIHRoZWlyIE1ESU8gYnVzIHVzYWdlLiBJIHNlZSB0aGF0IGBkc2FfbG9vcGAgaXMgdXNpbmcgdGhlIGBmaXhlZC0wYCBNRElPIGJ1cywgYW5kIEkgdW5kZXJzdGFuZCBpdCYjMzk7cyBjcmVhdGluZyBhbiBNRElPIGRldmljZSB0aGVyZS4gQnV0LCBgZHNhX2xvb3BgIGlzIGEgdmVyeSBzcGVjaWFsaXplZCBkcml2ZXIuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBjb3VsZCBzb21laG93IGNyZWF0ZSBhbiBNRElPIGRldmljZSBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgbXhsODYyeHhgIGNoaXAgb24gdGhhdCBzYW1lIGBmaXhlZC0wYCBidXMuCgpUaGlua2luZyBpdCB0aHJvdWdoLCB0aGUgYW5zd2VyICpzaG91bGQqIGJlIHllcy4gU3l6a2FsbGVyIGlzIHF1aXRlIHBvd2VyZnVsIHdpdGggZGV2aWNlIHRyZWUgb3ZlcmxheXMuIEkgY291bGQgc3BlY2lmeSB0aGUgYGNvbXBhdGlibGUgPSAmIzM0O21heGxpbmVhcixteGw4NjJ4eCYjMzQ7YCBwcm9wZXJ0eSBhbmQgY3JlYXRlIGFuIE1ESU8gZGV2aWNlIG9uIGBmaXhlZC0wYCBvciBhbnkgb3RoZXIgTURJTyBidXMgdGhhdCBzeXprYWxsZXIgY2FuIHJlYWNoLiBUaGF0JiMzOTtzIHRoZSBzdGFuZGFyZCBhcHByb2FjaC4KCkhvd2V2ZXIsIEkgbmVlZCB0byBwYXVzZSBmb3IgYSBzZWNvbmQuIFRoZSBgZml4ZWQtMGAgTURJTyBidXMsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgYSAqZml4ZWQgUEhZKiBidXMuIEFuZCB0aGF0IGltcGxpZXMgaXQgaXNuJiMzOTt0IG1lYW50IHRvIHN0b3JlIGFyYml0cmFyeSBNRElPIHJlZ2lzdGVycy4gSXQmIzM5O3MgYSBzcGVjaWFsLXB1cnBvc2UgYnVzIHdpdGggYSBzcGVjaWZpYywgd2VsbC1kZWZpbmVkIHB1cnBvc2UsIHVubGlrZSBhIHN0YW5kYXJkIE1ESU8gYnVzLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjb25maXJtIGhvdyB0aGUgZml4ZWQgUEhZIGRyaXZlciBoYW5kbGVzIE1ESU8gYWNjZXNzZXMuIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MgYW5kIHNlZSBob3cgdGhhdCBidXMgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byBiZSBzdXJlIEkmIzM5O20gbm90IG92ZXJsb29raW5nIGEgZnVuZGFtZW50YWwgaW5jb21wYXRpYmlsaXR5IGhlcmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjU0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ZpeGVkX21kaW9fcmVhZCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9NTk9RVhQT1JUX1NZTUJPTF9HUEwoZml4ZWRfcGh5X2NoYW5nZV9jYXJyaWVyKTtcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02MC1cbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYzo2MTpzdGF0aWMgaW50IGZpeGVkX21kaW9fcmVhZChzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgcGh5X2FkZHIsIGludCByZWdfbnVtKVxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jLTYyLXtcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM9MTk1PXN0YXRpYyBpbnQgX19pbml0IGZpeGVkX21kaW9fYnVzX2luaXQodm9pZClcbi0tXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA0LVx0Zm1iX21paV9idXMtXHUwMDNlbmFtZSA9IFwmIzM0O0ZpeGVkIE1ESU8gQnVzXCYjMzQ7O1xuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jOjIwNTpcdGZtYl9taWlfYnVzLVx1MDAzZXJlYWQgPSBcdTAwMjZmaXhlZF9tZGlvX3JlYWQ7XG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA2LVx0Zm1iX21paV9idXMtXHUwMDNld3JpdGUgPSBcdTAwMjZmaXhlZF9tZGlvX3dyaXRlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MjU2MQoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDIxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDoKCioqQW5hbHl6aW5nIGBmaXhlZF9tZGlvX3JlYWRgIGFuZCBgZml4ZWRfbWRpb193cml0ZWAqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGVzZSBgZml4ZWRfbWRpb2AgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhlc2UgYXJlIGxpa2VseSBsb3ctbGV2ZWwgcm91dGluZXMgZm9yIGRpcmVjdGx5IGFjY2Vzc2luZyBhbiBNRElPIGludGVyZmFjZSwgcHJvYmFibHkgaGFyZC1jb2RlZCBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBzZXR1cCBvciBhIHNwZWNpZmljIFBIWSBhZGRyZXNzLiBUaGUgJiMzNDtmaXhlZCYjMzQ7IGluIHRoZSBuYW1lIHByb2JhYmx5IHJlZmVycyB0byB0aGUgTURJTyBidXMgYWRkcmVzcywgd2hpY2ggbWF5IGltcGx5IHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIHN5c3RlbSB3aGVyZSB0aGVyZSYjMzk7cyBubyBkeW5hbWljIFBIWSBkaXNjb3Zlcnkgb3IgTURJTyBhZGRyZXNzIHNjYW5uaW5nLiBSYXRoZXIsIHRoaXMgcGFydCBvZiB0aGUgY29kZSBhc3N1bWVzIHRoYXQgYSBzcGVjaWZpYyBQSFkgb3IgZ3JvdXAgb2YgUEhZcyBpcyBhbHdheXMgYXQgYSBrbm93biBNRElPIGFkZHJlc3MuCgpJJiMzOTtkIGV4cGVjdCBgZml4ZWRfbWRpb19yZWFkYCB0byB0YWtlIGF0IGxlYXN0IHRoZSBQSFkgcmVnaXN0ZXIgYWRkcmVzcyBhcyBpbnB1dCBhbmQgcmV0dXJuIHRoZSB2YWx1ZSByZWFkIGZyb20gdGhhdCByZWdpc3Rlci4gVGhlIGltcGxlbWVudGF0aW9uIGRldGFpbHMgd291bGQgYmUga2V5IGhlcmUuIEkmIzM5O2QgYmUgbG9va2luZyBmb3I6CgoqICAgKipCdXMgQWNjZXNzOioqIEhvdyBpcyB0aGUgTURJTyBidXMgYWN0dWFsbHkgYWNjZXNzZWQ/IElzIGl0IGJpdC1iYW5nZWQsIG9yIGRvZXMgaXQgbGV2ZXJhZ2UgYSBkZWRpY2F0ZWQgTURJTyBjb250cm9sbGVyPyBJZiBiaXQtYmFuZ2VkLCBJJiMzOTtkIGV4cGVjdCB0byBzZWUgdGhlIGxvdy1sZXZlbCBsb2dpYyBmb3IgYXNzZXJ0aW5nIHRoZSBNREMgKGNsb2NrKSBhbmQgTURJTyAoZGF0YSkgc2lnbmFscy4gQSBkZWRpY2F0ZWQgY29udHJvbGxlciBpbXBsaWVzIHNvbWUgcmVnaXN0ZXItbGV2ZWwgcHJvZ3JhbW1pbmcgdG8gaW5pdGlhdGUgdGhlIHJlYWQgYW5kIHRoZW4gcG9sbGluZyBmb3IgY29tcGxldGlvbi4KKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBraW5kIG9mIGVycm9yIGNoZWNraW5nIGlzIGluIHBsYWNlPyBBcmUgdGhlcmUgdGltZW91dHM/IFdoYXQgaGFwcGVucyBpZiB0aGUgTURJTyBhY2Nlc3MgZmFpbHMgKGUuZy4sIG5vIHJlc3BvbnNlIGZyb20gdGhlIFBIWSwgaW5jb3JyZWN0IHBhcml0eSk/IEkmIzM5O2Qgd2FudCB0byBzZWUgcm9idXN0IGVycm9yIGhhbmRsaW5nIHRvIHByZXZlbnQgdGhlIGRyaXZlciBmcm9tIGdldHRpbmcgc3R1Y2suCiogICAqKlJlZ2lzdGVyIFNlbGVjdGlvbjoqKiBJcyB0aGUgUEhZIGFkZHJlc3Mgb3IgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgcGFydCBvZiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCBvciBhcmUgdGhleSBoYXJkY29kZWQgd2l0aGluIHRoZSBmdW5jdGlvbj8gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmxleGliaWxpdHkgb2YgdGhlIGZ1bmN0aW9uLgoqICAgKipEYXRhIFJlcHJlc2VudGF0aW9uOioqIEhvdyBpcyB0aGUgcmVhZCBkYXRhIHJlcHJlc2VudGVkIChlLmcuLCBhbiBgdWludDE2X3RgPyBgdWludDMyX3RgPykgV2hhdCBpcyB0aGUgZW5kaWFubmVzcywgYW5kIGhvdyBpcyBpdCBoYW5kbGVkIGlmIHRoZSBkYXRhIGlzIGludGVycHJldGVkIGFzIGEgd29yZD8KKiAgICoqQ2xhcml0eSBvZiBSZWFkOioqIEFyZSB0aGVyZSBhbnkgYml0IG1hc2tzIHVzZWQsIGV0Yz8KClNpbWlsYXJseSwgZm9yIGBmaXhlZF9tZGlvX3dyaXRlYCwgSSYjMzk7bSBleHBlY3Rpbmcgc2ltaWxhciBjb25zaWRlcmF0aW9ucyBidXQgYSBkYXRhIHZhbHVlIGFzIGFuIGFkZGl0aW9uYWwgaW5wdXQsIGFuZCB0aGUgb3BlcmF0aW9uIGlzIG9mIGNvdXJzZSwgYSB3cml0ZSBpbnN0ZWFkIG9mIGEgcmVhZC4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3I6CgoqICAgKipXcml0ZSBTZXF1ZW5jZToqKiBUaGUgd3JpdGUgc2VxdWVuY2UgaW1wbGVtZW50YXRpb24gKGlmIGJpdC1iYW5nZWQpIHdvdWxkIGJlIHRoZSBpbnZlcnNlIG9mIHRoZSByZWFkIHNlcXVlbmNlIGluIHRlcm1zIG9mIHNpZ25hbCB0cmFuc2l0aW9ucy4KKiAgICoqRXJyb3IgUmV0dXJuOioqIFdoYXQgYXJlIHRoZSBlcnJvciBzdGF0ZXMsIGFuZCB3aGF0IGFyZSB0aGUgZmFpbHVyZSBjb25kaXRpb25zPwoKSSYjMzk7ZCB3YW50IHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc2FmZSwgd2hldGhlciB0aGV5IGFyZSB1c2VkIG9ubHkgdW5kZXIgbXV0ZXgsIHdoYXQga2luZHMgb2YgZXJyb3JzIHRoZXkgZ2VuZXJhdGUsIGFuZCBob3cuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgd2lsbCBiZSBjcml0aWNhbCBpbiBhc3Nlc3NpbmcgdGhlIGRyaXZlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2MSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA1MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgIDYxOlx0c3RhdGljIGludCBmaXhlZF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSlcbiAgNjI6XHR7XG4gIDYzOlx0XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbiAgNjQ6XHRcbiAgNjU6XHRcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5X2FkZHIpO1xuICA2NjpcdFx0aWYgKCFmcClcbiAgNjc6XHRcdFx0cmV0dXJuIDB4ZmZmZjtcbiAgNjg6XHRcbiAgNjk6XHRcdGlmIChmcC1cdTAwM2VsaW5rX3VwZGF0ZSlcbiAgNzA6XHRcdFx0ZnAtXHUwMDNlbGlua191cGRhdGUoZnAtXHUwMDNlcGh5ZGV2LVx1MDAzZWF0dGFjaGVkX2RldiwgXHUwMDI2ZnAtXHUwMDNlc3RhdHVzKTtcbiAgNzE6XHRcbiAgNzI6XHRcdHJldHVybiBzd3BoeV9yZWFkX3JlZyhyZWdfbnVtLCBcdTAwMjZmcC1cdTAwM2VzdGF0dXMpO1xuICA3MzpcdH1cbiAgNzQ6XHRcbiAgNzU6XHRzdGF0aWMgaW50IGZpeGVkX21kaW9fd3JpdGUoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSxcbiAgNzY6XHRcdFx0XHQgICAgdTE2IHZhbClcbiAgNzc6XHR7XG4gIDc4Olx0XHRyZXR1cm4gMDtcbiAgNzk6XHR9XG4gIDgwOlx0XG4gIDgxOlx0LypcbiAgODI6XHQgKiBJZiBzb21ldGhpbmcgd2VpcmQgaXMgcmVxdWlyZWQgdG8gYmUgZG9uZSB3aXRoIGxpbmsvc3BlZWQsXG4gIDgzOlx0ICogbmV0d29yayBkcml2ZXIgaXMgYWJsZSB0byBhc3NpZ24gYSBmdW5jdGlvbiB0byBpbXBsZW1lbnQgdGhpcy5cbiAgODQ6XHQgKiBNYXkgYmUgdXNlZnVsIGZvciBQSFkmIzM5O3MgdGhhdCBuZWVkIHRvIGJlIHNvZnR3YXJlLWRyaXZlbi5cbiAgODU6XHQgKi9cbiAgODY6XHRpbnQgZml4ZWRfcGh5X3NldF9saW5rX3VwZGF0ZShzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2LFxuICA4NzpcdFx0XHRcdCAgICAgIGludCAoKmxpbmtfdXBkYXRlKShzdHJ1Y3QgbmV0X2RldmljZSAqLFxuICA4ODpcdFx0XHRcdFx0XHRcdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqKSlcbiAgODk6XHR7XG4gIDkwOlx0XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbiAgOTE6XHRcbiAgOTI6XHRcdGlmICghcGh5ZGV2IHx8ICFwaHlkZXYtXHUwMDNlbWRpby5idXMpXG4gIDkzOlx0XHRcdHJldHVybiAtRUlOVkFMO1xuICA5NDpcdFxuICA5NTpcdFx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlkZXYtXHUwMDNlbWRpby5hZGRyKTtcbiAgOTY6XHRcdGlmICghZnApXG4gIDk3Olx0XHRcdHJldHVybiAtRU5PRU5UO1xuICA5ODpcdFxuICA5OTpcdFx0ZnAtXHUwMDNlbGlua191cGRhdGUgPSBsaW5rX3VwZGF0ZTtcbiAxMDA6XHRcdGZwLVx1MDAzZXBoeWRldiA9IHBoeWRldjtcbiAxMDE6XHRcbiAxMDI6XHRcdHJldHVybiAwO1xuIDEwMzpcdH1cbiAxMDQ6XHRFWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKTtcbiAxMDU6XHRcbiAxMDY6XHRzdGF0aWMgdm9pZCBmaXhlZF9waHlfZGVsKGludCBwaHlfYWRkcilcbiAxMDc6XHR7XG4gMTA4Olx0XHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcbiAxMDk6XHRcbiAxMTA6XHRcdGZwID0gZml4ZWRfcGh5X2ZpbmQocGh5X2FkZHIpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1MzkwNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE4MjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHlzaXMgb2YgdGhlIE14TDg2Mnh4IERyaXZlciBmb3IgRnV6emluZyBTdWl0YWJpbGl0eSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBmb3IgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIGRyaXZlci4gVGhlIGBmaXhlZF9tZGlvX3dyaXRlYCBmdW5jdGlvbiBqdXN0IHJldHVybnMgbm90aGluZywgYW5kIGBmaXhlZF9tZGlvX3JlYWRgIGVpdGhlciByZXR1cm5zIGAweGZmZmZgIG9yIGEgdmFsdWUgZnJvbSBgc3dwaHlfcmVhZF9yZWdgLiBUaGlzIGRvZXNuJiMzOTt0IHN0b3JlIGFueSB2YWx1ZXMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGlmIHN5emthbGxlciBjcmVhdGVzIGFuIE1ESU8gZGV2aWNlIG9uIGBmaXhlZC0wYCwgdGhlIGBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3RgIGZ1bmN0aW9uIHdpbGwgYmUgdHJpZ2dlcmVkLiBJdCBhdHRlbXB0cyB0byB3cml0ZSBhbmQgcmVhZCBzcGVjaWZpYyBwcm9iZSB2YWx1ZXMgKGAweDVhNWFgIGFuZCBgMHhhNWE1YCkuIEJ1dCBzaW5jZSBgZml4ZWRfbWRpb19yZWFkYCBjYW4gb25seSByZXR1cm4gYDB4ZmZmZmAgb3IgYSByZWFsIHJlZ2lzdGVyIHZhbHVlICh3aGljaCBpc24mIzM5O3QgdGhlIHByb2JlIHZhbHVlKSwgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgd2lsbCBpbmV2aXRhYmx5IHJldHVybiBgLUVOT0RFVmAuIFRoZSBkcml2ZXIgaXMgZ29pbmcgdG8gZmFpbCB0byBwcm9iZS4KCkkgbmVlZCB0byBzZWUgaWYgc3l6a2FsbGVyIGNhbiB1c2UgYW55IG90aGVyIE1ESU8gYnVzIGltcGxlbWVudGF0aW9ucy4gSSBjaGVja2VkIGZvciBhbiBgbWRpby1tb2NrYCBkZXZpY2UsIGJ1dCB0aGVyZSBpc24mIzM5O3Qgb25lLiBUaGUgYG1kaW8tYml0YmFuZ2AgcmVxdWlyZXMgR1BJT3MsIGFuZCB0aGUgYG1kaW8taTJjYCBhbmQgYG1kaW8tcmVnbWFwYCBvcHRpb25zIG5lZWQgSTJDIGFuZCByZWdtYXAgd2hpY2ggbWFrZXMgdGhlbSB1bmZlYXNpYmxlLiBJZiB0aGVyZSYjMzk7cyBubyB3YXkgdG8gZ2V0IHBhc3QgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUsIHRoYXQgbWVhbnMgdGhlIGRldmxpbmsgZmxhc2ggdXBkYXRlIGNvZGUgaXMgZ29pbmcgdG8gYmUgVU5SRUFDSEFCTEUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4KCkhvbGQgb24sIGxldCYjMzk7cyBsb29rIGF0IGBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3RgIGFnYWluLiBJdCByZWFkcyBmcm9tIHR3byBzcGVjaWZpYyBhZGRyZXNzZXM6IGBNWEw4NjJYWF9TQl9QRElfQUREUmAgYW5kIGBNWEw4NjJYWF9TQl9QRElfREFUQWAuIElmIHRob3NlIHJlYWRzIGRvbiYjMzk7dCByZXR1cm4gdGhlIGV4cGVjdGVkIHByb2JlIHZhbHVlcyAoYDB4NWE1YWAgYW5kIGAweGE1YTVgKSwgaXQgcmV0dXJucyBgLUVOT0RFVmAuCgpDb3VsZCBJIHVzZSBzb21ldGhpbmcgbGlrZSBlQlBGIG9yIGtwcm9iZXMgdG8gaW50ZXJjZXB0IE1ESU8gcmVhZHMvd3JpdGVzPyBObywgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgdGhhdCBjYXBhYmlsaXR5IGN1cnJlbnRseS4gV2hhdCBhYm91dCB1c2luZyBhIGR1bW15IEkyQyBkZXZpY2UgdGhhdCBwcmV0ZW5kcyB0byBiZSBhbiBNRElPIGJ1cz8gTm9wZS4gU3l6a2FsbGVyIGRvZXNuJiMzOTt0IGhhdmUgYSBnZW5lcmljIEkyQyBkZXZpY2UgZW11bGF0b3IgdGhhdCBjYW4gYmUgcHJvZ3JhbW1lZCB0byByZXR1cm4gc3BlY2lmaWMgdmFsdWVzIGJhc2VkIG9uIHJlZ2lzdGVyIGFkZHJlc3Nlcy4KCkJ1dCB3YWl0LCBzeXprYWxsZXIgKmRvZXMqIGhhdmUgZW11bGF0b3JzIGZvciBVU0IgKGB2aGNpYCksIFdpRmkgKGBtYWM4MDIxMV9od3NpbWApLCBuZXRkZXZzIChgbmV0ZGV2c2ltYCksIERSTSAoYHZrbXNgKSwgYW5kIEFMU0EgKGBzbmQtZHVtbXlgKS4gRG9lcyBpdCBoYXZlIGFueXRoaW5nIGZvciBNRElPIG9yIEkyQz8gVGhlcmUmIzM5O3Mgbm8gcHNldWRvLXN5c2NhbGwgbGlrZSBgc3l6X2kyY19zZXR1cGAuIEkgY2hlY2tlZCBmb3Igc2ltaWxhciBzeXNjYWxscyB0byB0aGUgdXNiIGFuZCBwY2kgc2V0dXBzLCBidXQgSSBkb24mIzM5O3Qgc2VlIGFueSBmb3IgTURJTy4KClNvLCB3aXRob3V0IGhhcmR3YXJlLCBgbXhsODYyeHhfcHJvYmVgIGZhaWxzIGF0IGBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3RgIChvciBlYXJsaWVyIGlmIHRoZSBNRElPIGJ1cyBpc24mIzM5O3QgZXZlbiBwcmVzZW50KS4gT2theSwgYnV0IHdoYXQgYXJlIHRoZSBjaGFuY2VzIHRoYXQgYG14bDg2Mnh4X3NtZGlvX3JlYWRgIHdpbGwgcmV0dXJuIGAweDVhNWFgIGJ5IHB1cmUgY2hhbmNlPyBUaGUgcHJvYmUgdmFsdWVzIGFyZSBgMHg1YTVhYCAoQUREUikgYW5kIGAweGE1YTVgIChEQVRBKS4gSXQmIzM5O3MgZXh0cmVtZWx5IHVubGlrZWx5IGEgcmFuZG9tIE1ESU8gYnVzIHdpbGwgcmV0dXJuIHRob3NlIGV4YWN0IHZhbHVlcy4gV2hhdCBpZiB0aGUgcmVhZCBpcyBmcm9tIGEgbWVtb3J5LW1hcHBlZCBJTyByZWdpb24gc3l6a2FsbGVyIGNvdWxkIG1hcCBhbmQgd3JpdGUgdG8/IGBteGw4NjJ4eF9zbWRpb19yZWFkYCB1c2VzIGBfX21kaW9idXNfcmVhZGAsIGlmIHRoZSBidXMgaXMgbWVtb3J5LW1hcHBlZCwgd291bGQgc3l6a2FsbGVyIG1hcCB0aGUgbWVtb3J5IGFuZCB3cml0ZSB0aGUgdmFsdWVzPyBVc3VhbGx5IG5vdCwgc3l6a2FsbGVyIGRvZXNuJiMzOTt0IGRvIHRoYXQgZm9yIHBsYXRmb3JtIGRldmljZXMgdW5sZXNzIHRoZXJlIGlzIGEgc3BlY2lmaWMgc3l6a2FsbGVyIGRlc2NyaXB0aW9uIGZvciBpdC4gSXQgd291bGQgYmUgdmVyeSBzcGVjaWZpYyBhbmQgaGFyZCB0byB0cmlnZ2VyLgoKQWgsIHRoZSBpbnN0cnVjdGlvbnMhICYjMzQ7UmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczogLi4uIC0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiYjMzQ7IFRoaXMgaXMgYSAqdmVuZG9yLXNwZWNpZmljIERTQSBzd2l0Y2ggZHJpdmVyKiBmb3IgdGhlIE1heExpbmVhciBNeEw4NjJ4eCwgYW5kIGl0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBjaGlwIGNvbm5lY3RlZCB2aWEgTURJTy4gSXQmIzM5O3Mgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoYXQgaXMgZXhhY3RseSB3aGF0IHRoZSBydWxlIGRlc2NyaWJlcy4KCldhaXQsIGlzIGFuIE1ESU8gRFNBIHN3aXRjaCBkcml2ZXIgaW5jbHVkZWQgaW4gdGhpcyBjYXRlZ29yeT8gWWVzLiBJdCYjMzk7cyBhICYjMzQ7dmVuZG9yLXNwZWNpZmljIC4uLiBkcml2ZXIgLi4uIHRoYXQgcmVxdWlyZXMgcGh5c2ljYWwgLi4uIGhhcmR3YXJlIC4uLiBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDtuZXQvZHNhL2RldmxpbmsuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ICAgMTpcdC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVyXG4gICAyOlx0LypcbiAgIDM6XHQgKiBEU0EgZGV2bGluayBoYW5kbGluZ1xuICAgNDpcdCAqL1xuICAgNTpcdFxuICAgNjpcdCNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY25ldC9kZXZsaW5rLmhcdTAwM2VcbiAgIDg6XHRcbiAgIDk6XHQjaW5jbHVkZSBcJiMzNDtkZXZsaW5rLmhcJiMzNDtcbiAgMTA6XHRcbiAgMTE6XHRzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiAgMTI6XHRcdFx0XHRcdHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gIDEzOlx0XHRcdFx0XHRzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gIDE0Olx0e1xuICAxNTpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xuICAxNjpcdFxuICAxNzpcdFx0aWYgKGRzLVx1MDAzZW9wcy1cdTAwM2VkZXZsaW5rX2luZm9fZ2V0KVxuICAxODpcdFx0XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfaW5mb19nZXQoZHMsIHJlcSwgZXh0YWNrKTtcbiAgMTk6XHRcbiAgMjA6XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAgMjE6XHR9XG4gIDIyOlx0XG4gIDIzOlx0c3RhdGljIGludCBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLFxuICAyNDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbiAgMjU6XHRcdFx0XHRcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gIDI2Olx0e1xuICAyNzpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xuICAyODpcdFxuICAyOTpcdFx0cmV0dXJuIGRzLVx1MDAzZW9wcy1cdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZShkcywgcGFyYW1zLCBleHRhY2spO1xuICAzMDpcdH1cbiAgMzE6XHRcbiAgMzI6XHRzdGF0aWMgaW50IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcbiAgMzM6XHRcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXG4gIDM0Olx0XHRcdFx0XHQgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbylcbiAgMzU6XHR7XG4gIDM2Olx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfZGV2bGlua190b19kcyhkbCk7XG4gIDM3Olx0XG4gIDM4Olx0XHRpZiAoIWRzLVx1MDAzZW9wcy1cdTAwM2VkZXZsaW5rX3NiX3Bvb2xfZ2V0KVxuICAzOTpcdFx0XHRyZXR1cm4gLUVPUE5PVFNVUFA7XG4gIDQwOlx0XG4gIDQxOlx0XHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfc2JfcG9vbF9nZXQoZHMsIHNiX2luZGV4LCBwb29sX2luZGV4LFxuICA0MjpcdFx0XHRcdFx0XHQgICAgcG9vbF9pbmZvKTtcbiAgNDM6XHR9XG4gIDQ0Olx0XG4gIDQ1Olx0c3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX3NldChzdHJ1Y3QgZGV2bGluayAqZGwsIHVuc2lnbmVkIGludCBzYl9pbmRleCxcbiAgNDY6XHRcdFx0XHRcdCAgIHUxNiBwb29sX2luZGV4LCB1MzIgc2l6ZSxcbiAgNDc6XHRcdFx0XHRcdCAgIGVudW0gZGV2bGlua19zYl90aHJlc2hvbGRfdHlwZSB0aHJlc2hvbGRfdHlwZSxcbiAgNDg6XHRcdFx0XHRcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbiAgNDk6XHR7XG4gIDUwOlx0XHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfZGV2bGlua190b19kcyhkbCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzI2IDExOjU0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU3NTQwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcGF0Y2gsIGRpc3RpbGxlZCBpbnRvIG15IGludGVybmFsIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gdGhlIERTQSBEZXZsaW5rIEludGVncmF0aW9uKioKCk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgc3F1YXJlbHkgYXQgZW5oYW5jaW5nIHRoZSBEZXZpY2UgTGluayAoRGV2bGluaykgY2FwYWJpbGl0aWVzIHdpdGhpbiB0aGUgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSAoRFNBKSBzdWJzeXN0ZW0uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGludHJvZHVjaW5nIGEgbmV3IGZ1bmN0aW9uLCBgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlYCwgd2hpY2ggaXMgYSBwaXZvdGFsIGFkZGl0aW9uIHRvIGBuZXQvZHNhL2RldmxpbmsuY2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgc2lnbmlmaWNhbnQsIGFzIGZsYXNoIHVwZGF0ZXMgYXJlIG9mdGVuIGEgY3JpdGljYWwgYXNwZWN0IG9mIGRldmljZSBtYW5hZ2VtZW50IGFuZCBmaXJtd2FyZSBoYW5kbGluZywgZXNwZWNpYWxseSBpbiBuZXR3b3JraW5nIGhhcmR3YXJlIHdoZXJlIHVwZGF0ZXMgYXJlIGVzc2VudGlhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIGJ1ZyBmaXhlcy4KCkkgc2VlIHRoYXQgdGhpcyBhbHNvIG1lYW5zIGNoYW5nZXMgdG8gdGhlIGV4aXN0aW5nIGBkc2FfZGV2bGlua19vcHNgIHN0cnVjdHVyZS4gVGhpcyBsaWtlbHkgaW52b2x2ZXMgYWRkaW5nIGZ1bmN0aW9uIHBvaW50ZXJzIHJlbGF0ZWQgdG8gdGhlIG5ldyBmbGFzaCB1cGRhdGUgZnVuY3Rpb25hbGl0eSwgaW5kaWNhdGluZyB0aGUgaW50ZW50aW9uIHRvIHNlYW1sZXNzbHkgaW50ZWdyYXRlIHRoaXMgY2FwYWJpbGl0eSB3aXRoaW4gdGhlIERldmxpbmsgZnJhbWV3b3JrLiBGdXJ0aGVybW9yZSwgdGhlIGludHJvZHVjdGlvbiBvZiBhIG5ldyBzdHJ1Y3R1cmUsIGBkc2FfZGV2bGlua19mbGFzaF9vcHNgLCBpcyBhIGNsZWFyIGluZGljYXRpb24gb2YgYSBtb3JlIGZvcm1hbGl6ZWQgYW5kIG9yZ2FuaXplZCBhcHByb2FjaCB0byBmbGFzaC1yZWxhdGVkIG9wZXJhdGlvbnMuIEl0IHN1Z2dlc3RzIGEgc2VwYXJhdGlvbiBvZiBjb25jZXJucywgcHJvdmlkaW5nIGEgZGVkaWNhdGVkIGludGVyZmFjZSBmb3IgaGFuZGxpbmcgdGhlc2Ugc3BlY2lmaWMgdGFza3Mgd2l0aGluIHRoZSBicm9hZGVyIERldmxpbmsgY29udGV4dC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIHRoaXMgaXMgYSBzZW5zaWJsZSBhcmNoaXRlY3R1cmFsIGNob2ljZSwgYW5kIHNob3VsZCBzaW1wbGlmeSBmdXR1cmUgbW9kaWZpY2F0aW9ucyBhbmQgZW5hYmxlIGVhc2llciBpbnRlZ3JhdGlvbiB3aXRoIG5ldyBoYXJkd2FyZS4gSSB3aWxsIGFsc28gYmUgbG9va2luZyBjbG9zZWx5IGF0IHRoZSBzcGVjaWZpYyBmdW5jdGlvbnMgZGVmaW5lZCB3aXRoaW4gdGhlIG5ldyBzdHJ1Y3R1cmUgdG8gdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWNzIG9mIGhvdyBmbGFzaCB1cGRhdGUgb3BlcmF0aW9ucyB3aWxsIGJlIGNhcnJpZWQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1NDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O25ldC9kc2EvZGV2bGluay5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTc2LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxNzY6XHRcdFx0XHRcdFx0XHRcdHBfbWF4KTtcbiAxNzc6XHR9XG4gMTc4Olx0XG4gMTc5Olx0LyogVGhlIGRldmxpbmsgY29yZSByZWplY3RzIGZsYXNoIHJlcXVlc3RzIHVwIGZyb250IHdoZW4gdGhlIGZsYXNoX3VwZGF0ZVxuIDE4MDpcdCAqIG9wIGlzIGFic2VudCwgYmVmb3JlIGZldGNoaW5nIHRoZSBmaXJtd2FyZSBmaWxlIGZyb20gdXNlcnNwYWNlLiBPbmx5XG4gMTgxOlx0ICogaW5zdGFsbCB0aGUgb3AgZm9yIHN3aXRjaGVzIHdob3NlIGRyaXZlciBpbXBsZW1lbnRzIGl0LCBzbyB0aGF0XG4gMTgyOlx0ICogdW5zdXBwb3J0ZWQgcmVxdWVzdHMga2VlcCBmYWlsaW5nIGVhcmx5LlxuIDE4MzpcdCAqL1xuIDE4NDpcdCNkZWZpbmUgRFNBX0RFVkxJTktfT1BTXHRcdFx0XHRcdFx0XHRcXFxuIDE4NTpcdFx0LmluZm9fZ2V0XHRcdFx0PSBkc2FfZGV2bGlua19pbmZvX2dldCxcdFx0XFxcbiAxODY6XHRcdC5zYl9wb29sX2dldFx0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsXHRcXFxuIDE4NzpcdFx0LnNiX3Bvb2xfc2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX3NldCxcdFxcXG4gMTg4Olx0XHQuc2JfcG9ydF9wb29sX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9nZXQsXHRcXFxuIDE4OTpcdFx0LnNiX3BvcnRfcG9vbF9zZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfc2V0LFx0XFxcbiAxOTA6XHRcdC5zYl90Y19wb29sX2JpbmRfZ2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX2dldCwgXFxcbiAxOTE6XHRcdC5zYl90Y19wb29sX2JpbmRfc2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX3NldCwgXFxcbiAxOTI6XHRcdC5zYl9vY2Nfc25hcHNob3RcdFx0PSBkc2FfZGV2bGlua19zYl9vY2Nfc25hcHNob3QsXHRcXFxuIDE5MzpcdFx0LnNiX29jY19tYXhfY2xlYXJcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfbWF4X2NsZWFyLFx0XFxcbiAxOTQ6XHRcdC5zYl9vY2NfcG9ydF9wb29sX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY19wb3J0X3Bvb2xfZ2V0LCBcXFxuIDE5NTpcdFx0LnNiX29jY190Y19wb3J0X2JpbmRfZ2V0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY190Y19wb3J0X2JpbmRfZ2V0LFxuIDE5NjpcdFxuIDE5NzpcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0ge1xuIDE5ODpcdFx0RFNBX0RFVkxJTktfT1BTXG4gMTk5Olx0fTtcbiAyMDA6XHRcbiAyMDE6XHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX2ZsYXNoX29wcyA9IHtcbiAyMDI6XHRcdERTQV9ERVZMSU5LX09QU1xuIDIwMzpcdFx0LmZsYXNoX3VwZGF0ZVx0XHRcdD0gZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlLFxuIDIwNDpcdH07XG4gMjA1Olx0XG4gMjA2Olx0aW50IGRzYV9kZXZsaW5rX3BhcmFtX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHUzMiBpZCxcbiAyMDc6XHRcdFx0XHQgIHN0cnVjdCBkZXZsaW5rX3BhcmFtX2dzZXRfY3R4ICpjdHgsXG4gMjA4Olx0XHRcdFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXG4gMjA5Olx0e1xuIDIxMDpcdFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xuIDIxMTpcdFxuIDIxMjpcdFx0aWYgKCFkcy1cdTAwM2VvcHMtXHUwMDNlZGV2bGlua19wYXJhbV9nZXQpXG4gMjEzOlx0XHRcdHJldHVybiAtRU9QTk9UU1VQUDtcbiAyMTQ6XHRcbiAyMTU6XHRcdHJldHVybiBkcy1cdTAwM2VvcHMtXHUwMDNlZGV2bGlua19wYXJhbV9nZXQoZHMsIGlkLCBjdHgpO1xuIDIxNjpcdH1cbiAyMTc6XHRFWFBPUlRfU1lNQk9MX0dQTChkc2FfZGV2bGlua19wYXJhbV9nZXQpO1xuIDIxODpcdFxuIDIxOTpcdGludCBkc2FfZGV2bGlua19wYXJhbV9zZXQoc3RydWN0IGRldmxpbmsgKmRsLCB1MzIgaWQsXG4gMjIwOlx0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19wYXJhbV9nc2V0X2N0eCAqY3R4LFxuIDIyMTpcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuIDIyMjpcdHtcbiAyMjM6XHRcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9kZXZsaW5rX3RvX2RzKGRsKTtcbiAyMjQ6XHRcbiAyMjU6XHRcdGlmICghZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfcGFyYW1fc2V0KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1NDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA1ODkwOAoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDIxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgZGV2bGlua19mbGFzaF91cGRhdGVgIGluIERTQSoqCgpPa2F5LCBzbyB0aGUgY2hhbmdlcyBpbiBgbmV0L2RzYS9kZXZsaW5rLmNgIGFyZSBlc3NlbnRpYWxseSBzZXR1cCB3b3JrLCBtYWtpbmcgaXQgcG9zc2libGUgZm9yIERTQSBkcml2ZXJzIHRvIGltcGxlbWVudCBgZGV2bGlua19mbGFzaF91cGRhdGVgLiBJdCYjMzk7cyBkZXNpZ25lZCB0byBiZSBnZW5lcmljLCBidXQgcmlnaHQgbm93LCBpdCYjMzk7cyBvbmx5ICphY3R1YWxseSogdXNlZCBieSB0aGUgYG14bDg2Mnh4YCBkcml2ZXIsIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIG90aGVyIGRyaXZlcnMgdXNpbmcgaXQgZG93biB0aGUgbGluZS4gVGhlIGtleSBxdWVzdGlvbiBpczogSXMgdGhpcyBnZW5lcmljIGNvZGUgdHJ1bHkgcmVhY2hhYmxlPwoKTGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvZGUgKmJlY29tZXMqIHJlYWNoYWJsZSBpZiBhbnkgRFNBIGRyaXZlciBhY3R1YWxseSAqaW1wbGVtZW50cyogYGRldmxpbmtfZmxhc2hfdXBkYXRlYC4gSG93ZXZlciwgYGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAsIHdoaWNoIGlzIHRoZSBlbnRyeSBwb2ludCBmb3IgdGhpcyBmdW5jdGlvbmFsaXR5LCBpcyBvbmx5IGNhbGxlZCBpZiB0aGUgcmVsZXZhbnQgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBvcGVyYXRpb24gaXMgc2V0IGluIHRoZSBEU0EgZHJpdmVyJiMzOTtzIG9wZXJhdGlvbnMgc3RydWN0dXJlIChgZHMtJmd0O29wcy0mZ3Q7ZGV2bGlua19mbGFzaF91cGRhdGVgKS4gQXQgcHJlc2VudCwgb25seSBgbXhsODYyeHhgIHNldHMgdGhpcy4KCk5vdywgaGVyZSYjMzk7cyB0aGUgY2F0Y2g6IGBteGw4NjJ4eGAgY2FuJiMzOTt0IGJlIHByb2JlZCB1bmxlc3Mgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCAqcmVhbCogaGFyZHdhcmUuIFRoaXMgbWVhbnMsIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlLgoKQnV0IHdhaXQgYSBtaW51dGUuLi4gd2hhdCBpZiBhbm90aGVyIERTQSBkcml2ZXIsIGxpa2UgYGRzYV9sb29wYCBvciBgYjUzYCBvciBhbm90aGVyLCBkZWNpZGVzIHRvIGltcGxlbWVudCBgZGV2bGlua19mbGFzaF91cGRhdGVgIGF0IHNvbWUgcG9pbnQ/IFdlIGNhbiYjMzk7dCBpbW1lZGlhdGVseSBkaXNtaXNzIHRoZSBjb2RlIGFzIGVudGlyZWx5IHVudXNlZC4gSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIGFueSBvdGhlciBkcml2ZXJzIGN1cnJlbnRseSAqZG8qIGltcGxlbWVudCBgZGV2bGlua19mbGFzaF91cGRhdGVgLiBHb3R0YSBjaGVjayB0aGF0IG91dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTU8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGV2bGlua19mbGFzaF91cGRhdGUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtkcml2ZXJzL25ldC9kc2EvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jPTIwNz1zdGF0aWMgdm9pZCBteGw4NjJ4eF9mbGFzaF9ub3RpZnkoc3RydWN0IGRldmxpbmsgKmRsLCBjb25zdCBjaGFyICpzdGF0dXMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMtMjA5LXtcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jOjIxMDpcdGRldmxpbmtfZmxhc2hfdXBkYXRlX3N0YXR1c19ub3RpZnkoZGwsIHN0YXR1cywgTlVMTCwgZG9uZSwgdG90YWwpO1xuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMtMjExLX1cbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYz03MjI9aW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuLS1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jLTc3Mi1cbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jOjc3MzppbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmM6Nzc0Olx0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYy03NzUtXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbi0tXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaD0xMz1pbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmgtMTUtXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oOjE2OmludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaDoxNzpcdFx0XHRcdCAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmgtMTgtXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MjE1Nz1zdGF0aWMgY29uc3Qgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIG14bDg2Mnh4X3N3aXRjaF9vcHMgPSB7XG4tLVxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjE4OS1cdC5kZXZsaW5rX2luZm9fZ2V0ID0gbXhsODYyeHhfZGV2bGlua19pbmZvX2dldCxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjIxOTA6XHQuZGV2bGlua19mbGFzaF91cGRhdGUgPSBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIxOTEtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjYgMTE6NTU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjAzNDEKCQkJCQkJCW91dHB1dDogMTc5CgkJCQkJCQl0aG91Z2h0czogNzk5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlBhdGNoIEFuYWx5c2lzOiBJcyB0aGlzIFdvcnRoIEZ1enppbmc/KioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IHRoaXMgcGF0Y2ggaXNuJiMzOTt0IGludHJvZHVjaW5nIGFueSAqcmVhY2hhYmxlKiBmdW5jdGlvbmFsIGNoYW5nZXMgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudCwgdGhlcmVmb3JlIGl0IHNob3VsZCBub3QgYmUgd29ydGggZnV6emluZy4gSSBuZWVkIHRvIGJlIHN1cmUgdGhvdWdoLCBzbyBsZXQgbWUgZXhwbGFpbiBteSByZWFzb25pbmcuCgpJbml0aWFsbHksIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2hhbmdlIHByaW1hcmlseSByZXZvbHZlcyBhcm91bmQgdGhlIGBteGw4NjJ4eGAgZHJpdmVyLCBhbmQgdGhhdCBvbmx5IHRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIG5ldyBgZGV2bGlua19mbGFzaF91cGRhdGVgIGZ1bmN0aW9uLiBUaGUgcHJvYmxlbSBpcywgYXMgSSByZWNhbGwsIGBteGw4NjJ4eGAgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgRFNBIHN3aXRjaCBkcml2ZXIsIGFuZCwgYmVjYXVzZSBpdCBwZXJmb3JtcyBhIGhhcmR3YXJlIHByZXNlbmNlIGNoZWNrIHRocm91Z2ggYW4gTURJTyBidXMgZHVyaW5nIHByb2JlLCBpdCBjYW5ub3QgYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGxpa2UgUUVNVS4gVGhhdCBtZWFucyB0aGUgYGRldmxpbmsuY2AgY29kZSB0aGF0IGNhbGxzIGBkcy0mZ3Q7b3BzLSZndDtkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgaXMgY29tcGxldGVseSB1bnJlYWNoYWJsZSBpbiBhbnkgc3RhbmRhcmQgdmlydHVhbGl6ZWQgc2V0dXAuIFRoZSBsb2dpYyB3aXRoaW4gdGhhdCBicmFuY2ggb2YgYG5ldC9kc2EvZGV2bGluay5jYCB3b3VsZCBiZSBpcnJlbGV2YW50LCBzaW5jZSB0aGUgYG14bDg2Mnh4YCBkcml2ZXIgd291bGQgbmV2ZXIgcmVhY2ggdGhhdCBjb2RlLgoKSG93ZXZlciwgSSBwYXVzZWQgZm9yIGEgbW9tZW50IGJlY2F1c2Ugb2YgYGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvY2AuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciAqYWxsKiBEU0Egc3dpdGNoZXMuIFRoZSBjb2RlIHNlbGVjdHMgYmV0d2VlbiB0d28gYGRldmxpbmtfb3BzYCBzdHJ1Y3RzIGJhc2VkIG9uIHdoZXRoZXIgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBpcyBwcmVzZW50OgoKYGBgYwoJb3BzID0gZHMtJmd0O29wcy0mZ3Q7ZGV2bGlua19mbGFzaF91cGRhdGUgPyAmYW1wO2RzYV9kZXZsaW5rX2ZsYXNoX29wcwoJCQkJCSAgICA6ICZhbXA7ZHNhX2Rldmxpbmtfb3BzOwoKCS8qIEFkZCB0aGUgc3dpdGNoIHRvIGRldmxpbmsgYmVmb3JlIGNhbGxpbmcgc2V0dXAsIHNvIHRoYXQgc2V0dXAgY2FuCgkgKiBhZGQgZHBpcGUgdGFibGVzCgkgKi8KCWRsID0gZGV2bGlua19hbGxvYyhvcHMsIHNpemVvZigqZGxfcHJpdiksIGRzLSZndDtkZXYpOwpgYGAKClNvICp0aGlzKiBpcyByZWFjaGFibGUgZm9yIGFsbCBEU0Egc3dpdGNoZXMsIGluY2x1ZGluZyBzb21ldGhpbmcgZ2VuZXJpYyBsaWtlIGBkc2FfbG9vcGAuIEJ1dCBldmVuIHRoZW4sIGZvciBzd2l0Y2hlcyB0aGF0IGRvbiYjMzk7dCBoYXZlIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgaW1wbGVtZW50ZWQgKGxpa2UgYGRzYV9sb29wYCksIHRoZSBjb2RlIHdpbGwgc2VsZWN0IGBkc2FfZGV2bGlua19vcHNgLCB3aGljaCBpcyBmdW5jdGlvbmFsbHkgdGhlICpzYW1lKiBhcyBpdCB3YXMgYmVmb3JlLiBJdCYjMzk7cyBqdXN0IGEgbWFjcm8gbm93LiBTbywgdGhlcmUgaXMgbm8gbmV3IGxvZ2ljIGJlaW5nIHJlYWNoZWQgZm9yIHRoZSBleGlzdGluZyBzd2l0Y2hlcy4gVGhlICpvbmx5KiBuZXcgbG9naWMgaXMgd2hlbiBgZGV2bGlua19mbGFzaF91cGRhdGVgIGlzIHByZXNlbnQsIGFuZCB0aGF0IGlzIG9ubHkgaW4gYG14bDg2Mnh4YCwgd2hpY2gsIGFnYWluLCBpcyB1bnJlYWNoYWJsZS4KCkkgbmVlZCB0byBjb25maXJtIGlmIGBteGw4NjJ4eGAgY2FuIGJlIHByb2JlZCBpbiBRRU1VLCBzaW5jZSBzeXprYWxsZXIgbWlnaHQgYmUgdGVzdGluZyB0aGlzIHBhdGNoIGJlY2F1c2UgaXQgbGFuZGVkIG9uIHRoZSBuZXRkZXYgbWFpbGluZyBsaXN0LCBhbmQgc3l6a2FsbGVyIGJsaW5kbHkgdGVzdHMgcGF0Y2hlcy4gSXQgZG9lcyBub3Qga25vdyBpZiB0aGUgcGF0Y2ggaXMgcmVhY2hhYmxlLCBpdCBqdXN0IGZ1enplcy4gTXkgam9iIGlzIHRvIGRldGVybWluZSBpZiB0aGUgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSwgdGhlIHBhdGNoIGlzIE5PVCB3b3J0aCBmdXp6aW5nLgoKTG9va2luZyBiYWNrIGF0IHRoZSBpbnN0cnVjdGlvbnM6CgomIzM0O1JldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci4uLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4mIzM0OwoKYG14bDg2Mnh4YCBwZXJmZWN0bHkgZml0cyB0aGlzIGRlc2NyaXB0aW9uLiBJdCYjMzk7cyBhIHZlbmRvci1zcGVjaWZpYyBEU0Egc3dpdGNoIGRyaXZlciByZXF1aXJpbmcgcGh5c2ljYWwgaGFyZHdhcmUuIFNvLCBJIHdpbGwgcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yNiAxMTo1NTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFtdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgZmlybXdhcmUgZmxhc2ggc3VwcG9ydCBmb3IgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIHZpYSBkZXZsaW5rLiBUaGUgbXhsODYyeHggZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyB3aXRoIHRoZSBwaHlzaWNhbCBzd2l0Y2ggY2hpcCBvdmVyIGFuIE1ESU8gYnVzLiBEdXJpbmcgcHJvYmUsIGl0IHBlcmZvcm1zIGEgaGFyZHdhcmUgcHJlc2VuY2UgY2hlY2sgKG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCkgdGhhdCByZXF1aXJlcyB0aGUgcGh5c2ljYWwgY2hpcCB0byBsYXRjaCBhbmQgcmV0dXJuIHNwZWNpZmljIHZhbHVlcy4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgKHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VKSwgdGhlIGRyaXZlciBmYWlscyB0byBwcm9iZSwgbWFraW5nIHRoZSBuZXcgZGV2bGluayBmbGFzaCB1cGRhdGUgY29kZSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgZ2VuZXJpYyBEU0EgZGV2bGluayBwbHVtYmluZyBjaGFuZ2VzIG9ubHkgYWZmZWN0IGRyaXZlcnMgaW1wbGVtZW50aW5nIHRoZSBuZXcgb3AsIHdoaWNoIGlzIGN1cnJlbnRseSBvbmx5IG14bDg2Mnh4LiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBmaXJtd2FyZSBmbGFzaCBzdXBwb3J0IGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggdmlhIGRldmxpbmsuIFRoZSBteGw4NjJ4eCBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIHdpdGggdGhlIHBoeXNpY2FsIHN3aXRjaCBjaGlwIG92ZXIgYW4gTURJTyBidXMuIER1cmluZyBwcm9iZSwgaXQgcGVyZm9ybXMgYSBoYXJkd2FyZSBwcmVzZW5jZSBjaGVjayAobXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KSB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBjaGlwIHRvIGxhdGNoIGFuZCByZXR1cm4gc3BlY2lmaWMgdmFsdWVzLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSAod2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUpLCB0aGUgZHJpdmVyIGZhaWxzIHRvIHByb2JlLCBtYWtpbmcgdGhlIG5ldyBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBjb2RlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBnZW5lcmljIERTQSBkZXZsaW5rIHBsdW1iaW5nIGNoYW5nZXMgb25seSBhZmZlY3QgZHJpdmVycyBpbXBsZW1lbnRpbmcgdGhlIG5ldyBvcCwgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgbXhsODYyeHguJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTI6MzguNDUwMjM5NDcyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU4NjE5NDM5MTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGZpcm13YXJlIGZsYXNoIHN1cHBvcnQgZm9yIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCB2aWEgZGV2bGluay4gVGhlIG14bDg2Mnh4IGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgcGh5c2ljYWwgc3dpdGNoIGNoaXAgb3ZlciBhbiBNRElPIGJ1cy4gRHVyaW5nIHByb2JlLCBpdCBwZXJmb3JtcyBhIGhhcmR3YXJlIHByZXNlbmNlIGNoZWNrIChteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QpIHRoYXQgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIGNoaXAgdG8gbGF0Y2ggYW5kIHJldHVybiBzcGVjaWZpYyB2YWx1ZXMuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlICh3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSksIHRoZSBkcml2ZXIgZmFpbHMgdG8gcHJvYmUsIG1ha2luZyB0aGUgbmV3IGRldmxpbmsgZmxhc2ggdXBkYXRlIGNvZGUgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGdlbmVyaWMgRFNBIGRldmxpbmsgcGx1bWJpbmcgY2hhbmdlcyBvbmx5IGFmZmVjdCBkcml2ZXJzIGltcGxlbWVudGluZyB0aGUgbmV3IG9wLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSBteGw4NjJ4eC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjUyOjM4LjQ1MDI0NjEzMloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTc1OTA3OTIwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzkzNmRmN2FmNzA4OTc1YzlkODNlZTI5NmJmMzYxNGRjODYyMzE2NlxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU3VuIEp1bCAyNiAxMTo1MjozNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcXG5pbmRleCA0NzQ1MTQ4ZmVjZjRmZS4uMDU4OTk5ZDBkYzU2ZjIgMTAwNjQ0XFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XFxuQEAgLTk0LDYgKzk0LDcgQEAgcGFyYW1ldGVycywgaW5mbyB2ZXJzaW9ucywgYW5kIG90aGVyIGZlYXR1cmVzIGl0IHN1cHBvcnRzLlxcbiAgICBtbHg1XFxuICAgIG1seHN3XFxuICAgIG12ODhlNnh4eFxcbisgICBteGw4NjJ4eFxcbiAgICBuZXRkZXZzaW1cXG4gICAgbmZwXFxuICAgIG9jdGVvbnR4MlxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9teGw4NjJ4eC5yc3QgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9teGw4NjJ4eC5yc3RcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iM2U5ZjdkNGQ0OTY5ZVxcbi0tLSAvZGV2L251bGxcXG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9teGw4NjJ4eC5yc3RcXG5AQCAtMCwwICsxLDYzIEBAXFxuKy4uIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuK1xcbis9PT09PT09PT09PT09PT09PT09PT09PT1cXG4rbXhsODYyeHggZGV2bGluayBzdXBwb3J0XFxuKz09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXG4rVGhpcyBkb2N1bWVudCBkZXNjcmliZXMgdGhlIGRldmxpbmsgZmVhdHVyZXMgaW1wbGVtZW50ZWQgYnkgdGhlXFxuK2BgbXhsODYyeHhgYCBkZXZpY2UgZHJpdmVyLlxcbitcXG4rSW5mbyB2ZXJzaW9uc1xcbis9PT09PT09PT09PT09XFxuK1xcbitUaGUgYGBteGw4NjJ4eGBgIGRyaXZlciByZXBvcnRzIHRoZSBmb2xsb3dpbmcgdmVyc2lvbnNcXG4rXFxuKy4uIGxpc3QtdGFibGU6OiBkZXZsaW5rIGluZm8gdmVyc2lvbnMgaW1wbGVtZW50ZWRcXG4rICAgOndpZHRoczogNSA1IDUgODVcXG4rXFxuKyAgICogLSBOYW1lXFxuKyAgICAgLSBUeXBlXFxuKyAgICAgLSBFeGFtcGxlXFxuKyAgICAgLSBEZXNjcmlwdGlvblxcbisgICAqIC0gYGBhc2ljLmlkYGBcXG4rICAgICAtIGZpeGVkXFxuKyAgICAgLSA4NjI4XFxuKyAgICAgLSBUaGUgY2hpcCBwYXJ0IG51bWJlciByZWFkIGZyb20gdGhlIENISVAgSUQgcmVnaXN0ZXJzLiBOb3RcXG4rICAgICAgIHJlcG9ydGVkIGZvciBhIHN3aXRjaCBzaXR0aW5nIGluIE1DVWJvb3QgcmVzY3VlIG1vZGUgYXMgdGhlXFxuKyAgICAgICByZWdpc3RlcnMgYXJlIG9ubHkgYWNjZXNzaWJsZSB3aXRoIGEgcnVubmluZyBmaXJtd2FyZS5cXG4rICAgKiAtIGBgYXNpYy5yZXZgYFxcbisgICAgIC0gZml4ZWRcXG4rICAgICAtIDBcXG4rICAgICAtIFRoZSBjaGlwIHZlcnNpb24gcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycy4gTm90IHJlcG9ydGVkXFxuKyAgICAgICBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlIGVpdGhlci5cXG4rICAgKiAtIGBgZndgYFxcbisgICAgIC0gcnVubmluZywgc3RvcmVkXFxuKyAgICAgLSAxLjAuNzBcXG4rICAgICAtIFZlcnNpb24gb2YgdGhlIGZpcm13YXJlIHJ1bm5pbmcgb24gdGhlIHN3aXRjaCwgcmVwb3J0ZWQgYXMgYm90aFxcbisgICAgICAgcnVubmluZyBhbmQgc3RvcmVkIHNpbmNlIHRoZSBzd2l0Y2ggYm9vdHMgaXQgZnJvbSBpdHMgb3duIGZsYXNoLlxcbisgICAgICAgSW4gTUNVYm9vdCByZXNjdWUgbW9kZSBub3RoaW5nIGlzIHJlcG9ydGVkIHdoaWxlIGFuIGludGVycnVwdGVkXFxuKyAgICAgICBkb3dubG9hZCBpcyBzdGlsbCBiZWluZyByZWNvdmVyZWQgaW4gdGhlIGJhY2tncm91bmQ7IG9uY2UgdGhlXFxuKyAgICAgICBsb2FkZXIgaXMgcmVhZHkgdG8gYWNjZXB0IGEgbmV3IGltYWdlIHRoZSB2ZXJzaW9uIGlzIHJlcG9ydGVkIChhc1xcbisgICAgICAgYm90aCBydW5uaW5nIGFuZCBzdG9yZWQpLCB3aGljaCBpcyB0aGUgc2lnbmFsIHRoYXQgYSBmbGFzaCB3aWxsIGJlXFxuKyAgICAgICBhY2NlcHRlZC4gSXQgcmVhZHMgXFxcIjAuMC4wXFxcIiB3aGVuIHRoZSBzd2l0Y2ggY2FtZSB1cCBzdHJhaWdodCBpbnRvXFxuKyAgICAgICBNQ1Vib290IHdpdGhvdXQgZXZlciBydW5uaW5nIGZpcm13YXJlLlxcbitcXG4rRmxhc2ggdXBkYXRlXFxuKz09PT09PT09PT09PVxcbitcXG4rVGhlIGBgbXhsODYyeHhgYCBkcml2ZXIgaW1wbGVtZW50cyBzdXBwb3J0IGZvciBgYGRldmxpbmsgZGV2IGZsYXNoYGAuXFxuK1RoZSBzaWduZWQgZmlybXdhcmUgaW1hZ2UgaXMgdHJhbnNmZXJyZWQgdG8gdGhlIHN3aXRjaCBvdmVyIHRoZSBzYW1lXFxuK01ESU8gYnVzIHdoaWNoIGlzIGFsc28gdXNlZCB0byBtYW5hZ2UgdGhlIHN3aXRjaCwgdGhlbiB2ZXJpZmllZCBhbmRcXG4raW5zdGFsbGVkIGJ5IHRoZSBNQ1Vib290IGJvb3Rsb2FkZXIgcnVubmluZyBvbiB0aGUgc3dpdGNoLiBBbGwgcG9ydHNcXG4rb2YgdGhlIHN3aXRjaCBhcmUgY2xvc2VkIGZvciB0aGUgZHVyYXRpb24gb2YgdGhlIHVwZGF0ZSBhbmQgdGhlIGRyaXZlclxcbityZXByb2JlcyB0aGUgc3dpdGNoIGFmdGVyIGl0IGhhcyByZWJvb3RlZCBpbnRvIHRoZSBuZXcgZmlybXdhcmUuIEFcXG4rY29tcGxldGUgZmxhc2ggYW5kIHJlcHJvYmUgY3ljbGUgdGFrZXMgYWJvdXQgb25lIG1pbnV0ZS5cXG4rXFxuK0Egc3dpdGNoIHN0dWNrIGluIE1DVWJvb3QgcmVzY3VlIG1vZGUsIGUuZy4gYWZ0ZXIgYW4gaW50ZXJydXB0ZWRcXG4rdXBkYXRlLCBpcyByZWdpc3RlcmVkIHdpdGhvdXQgdXNlciBwb3J0cy4gSWYgdGhlIHByZXZpb3VzIGRvd25sb2FkIHdhc1xcbitpbnRlcnJ1cHRlZCBtaWQtdHJhbnNmZXIgdGhlIGxvYWRlciBpcyB3ZWRnZWQ7IHRoZSBkcml2ZXIgZHJhaW5zIGl0XFxuK2JhY2sgdG8gYSBjbGVhbiByZWFkeSBzdGF0ZSBpbiB0aGUgYmFja2dyb3VuZCwgd2hpY2ggY2FuIGVhc2lseSB0YWtlXFxuK21vcmUgdGhhbiAxMCBtaW51dGVzLiBEdXJpbmcgdGhhdCByZWNvdmVyeSBgYGRldmxpbmsgZGV2IGluZm9gYCByZXBvcnRzXFxuK25vIGZpcm13YXJlIHZlcnNpb24gYW5kIGBgZGV2bGluayBkZXYgZmxhc2hgYCByZXR1cm5zIGBgLUVCVVNZYGAuXFxuK09uY2UgdGhlIGxvYWRlciBpcyByZWFkeSB0aGUgZmlybXdhcmUgdmVyc2lvbiBhcHBlYXJzIGFuZCBmbGFzaGluZyBhXFxuK2Zpcm13YXJlIGltYWdlIHRocm91Z2ggdGhlIHJlZ3VsYXIgdXBkYXRlIGZsb3cgcmVjb3ZlcnMgdGhlIHN3aXRjaC5cXG5kaWZmIC0tZ2l0IGEvTUFJTlRBSU5FUlMgYi9NQUlOVEFJTkVSU1xcbmluZGV4IDYwY2ZmMDA5NTNkY2JlLi4zYTU1ZWQyYmFkOWNiYSAxMDA2NDRcXG4tLS0gYS9NQUlOVEFJTkVSU1xcbisrKyBiL01BSU5UQUlORVJTXFxuQEAgLTE2MTA3LDYgKzE2MTA3LDcgQEAgTTpcXHREYW5pZWwgR29sbGUgXFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1xcdTAwM2VcXG4gTDpcXHRuZXRkZXZAdmdlci5rZXJuZWwub3JnXFxuIFM6XFx0TWFpbnRhaW5lZFxcbiBGOlxcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21heGxpbmVhcixteGw4NjJ4eC55YW1sXFxuK0Y6XFx0RG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XFxuIEY6XFx0ZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L1xcbiBGOlxcdG5ldC9kc2EvdGFnX214bDg2Mnh4LmNcXG4gXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZSBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZVxcbmluZGV4IGE3YmUwZTY2NjlkZmE1Li5iY2NhYzBkMGY3MDNmNiAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcXG5AQCAtMSwzICsxLDMgQEBcXG4gIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiBvYmotJChDT05GSUdfTkVUX0RTQV9NWEw4NjIpICs9IG14bDg2Mnh4X2RzYS5vXFxuLW14bDg2Mnh4X2RzYS15IDo9IG14bDg2Mnh4Lm8gbXhsODYyeHgtaG9zdC5vIG14bDg2Mnh4LXBoeWxpbmsub1xcbitteGw4NjJ4eF9kc2EteSA6PSBteGw4NjJ4eC5vIG14bDg2Mnh4LWhvc3QubyBteGw4NjJ4eC1waHlsaW5rLm8gbXhsODYyeHgtZncub1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmhcXG5pbmRleCBhMTgwYTVkZWNmZmMwMS4uNmY3NzE4OTU5ODRjYjMgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oXFxuQEAgLTEyMjQsNiArMTIyNCwxNiBAQCBzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24ge1xcbiBcXHRfX2xlMzIgaXZfYnVpbGRfbnVtO1xcbiB9IF9fcGFja2VkO1xcbiBcXG4rLyoqXFxuKyAqIHN0cnVjdCBteGw4NjJ4eF9zeXNfcmVnX3J3IC0gU3lzdGVtIHJlZ2lzdGVyIHJlYWQvd3JpdGVcXG4rICogQGFkZHI6IDMyLWJpdCByZWdpc3RlciBhZGRyZXNzXFxuKyAqIEB2YWw6IHJlZ2lzdGVyIHZhbHVlXFxuKyAqL1xcbitzdHJ1Y3QgbXhsODYyeHhfc3lzX3JlZ19ydyB7XFxuK1xcdF9fbGUzMiBhZGRyO1xcbitcXHRfX2xlMzIgdmFsO1xcbit9IF9fcGFja2VkO1xcbitcXG4gLyoqXFxuICAqIGVudW0gbXhsODYyeHhfcG9ydF90eXBlIC0gUG9ydCBUeXBlXFxuICAqIEBNWEw4NjJYWF9MT0dJQ0FMX1BPUlQ6IExvZ2ljYWwgUG9ydFxcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmhcXG5pbmRleCBjODdhOTU1YzEzYzQ4ZS4uYTg2NTQyNWFhNjFlMWYgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXFxuQEAgLTcwLDcgKzcwLDkgQEBcXG4gI2RlZmluZSBJTlRfR1BIWV9SRUFEXFx0XFx0XFx0KEdQWV9HUFkyWFhfTUFHSUMgKyAweDEpXFxuICNkZWZpbmUgSU5UX0dQSFlfV1JJVEVcXHRcXHRcXHQoR1BZX0dQWTJYWF9NQUdJQyArIDB4MilcXG4gXFxuKyNkZWZpbmUgU1lTX01JU0NfRldfVVBEQVRFXFx0XFx0KFNZU19NSVNDX01BR0lDICsgMHgxKVxcbiAjZGVmaW5lIFNZU19NSVNDX0ZXX1ZFUlNJT05cXHRcXHQoU1lTX01JU0NfTUFHSUMgKyAweDIpXFxuKyNkZWZpbmUgU1lTX01JU0NfUkVHX1JEXFx0XFx0XFx0KFNZU19NSVNDX01BR0lDICsgMHg4KVxcbiBcXG4gI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19DT05GSUdcXHQoTVhMODYyWFhfWFBDU19NQUdJQyArIDB4MSlcXG4gI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19HRVRfU1RBVEVcXHQoTVhMODYyWFhfWFBDU19NQUdJQyArIDB4MilcXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQyOGNlYjk4Y2Q1NjRlXFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXFxuQEAgLTAsMCArMSw4ODQgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4rLypcXG4rICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4XFxuKyAqXFxuKyAqIENvcHlyaWdodCAoQykgMjAyNSBEYW5pZWwgR29sbGUgXFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1xcdTAwM2VcXG4rICpcXG4rICogU0IgUERJIC0gZmlybXdhcmUgZG93bmxvYWQgaW50ZXJmYWNlIG92ZXIgY2xhdXNlLTIyIFNNRElPXFxuKyAqID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbisgKlxcbisgKiBUaGUgTXhMODYyeHggTUNVYm9vdCBsb2FkZXIgYWNjZXB0cyBhIGZpcm13YXJlIGltYWdlIHRocm91Z2ggZm91ciBcXFwiU0IgUERJXFxcIlxcbisgKiByZWdpc3RlcnMgaW4gdGhlIHN3aXRjaCBTTURJTyByZWdpc3RlciBzcGFjZS4gSXQgcnVucyB3aGVuZXZlciBubyBXU1BcXG4rICogZmlybXdhcmUgaXMgYWN0aXZlOiB0aGUgbm9ybWFsIGZpcm13YXJlIHVwZGF0ZSBlbnRlcnMgaXQgZGVsaWJlcmF0ZWx5IC0gdGhlXFxuKyAqIFNZU19NSVNDX0ZXX1VQREFURSBBUEkgY29tbWFuZCBzZXRzIGEgc3RpY2t5IHJlc2N1ZSBiaXQgYW5kIHJlYm9vdHMgaW50b1xcbisgKiBNQ1Vib290IC0gYW5kIHRoZSBsb2FkZXIgYWxzbyBzdGF5cyBoZXJlIHdoZW4gdGhlIHN0b3JlZCBXU1AgZmlybXdhcmUgZmFpbHNcXG4rICogaXRzIGJvb3QtdGltZSBpbnRlZ3JpdHkgY2hlY2suIFRoaXMgZHJpdmVyIGRyaXZlcyB0aGUgbG9hZGVyJ3MgMHhjNTVjXFxuKyAqIFxcXCJjb25zb2xlXFxcIiBkb3dubG9hZCBwYXRoLlxcbisgKlxcbisgKiBTTURJTyByZWdpc3RlciBhY2Nlc3MgKG14bDg2Mnh4X3NtZGlvX3JlYWQvd3JpdGUpOlxcbisgKiAgIE1JSSByZWcgMHgxZiA6PSBcXHUwMDNjc2JfcGRpX3JlZ1xcdTAwM2UgICAgICA7IGFkZHJlc3MvcGFnZSBsYXRjaFxcbisgKiAgIE1JSSByZWcgMHgwMCA6PSAvID1cXHUwMDNlIFxcdTAwM2N1MTYgZGF0YVxcdTAwM2UgICA7IGRhdGEgd2luZG93XFxuKyAqXFxuKyAqIFNCIFBESSByZWdpc3RlcnMgKGhvc3QgbmFtZS9hZGRyICAtXFx1MDAzZSAgTUNVIG1haWxib3gpOlxcbisgKiAgIENUUkwgMHhlMTAwIC1cXHUwMDNlIDB4YzA5Mzg0MDAgICBtb2RlOiBSU1Q9MHgwMCAgUkQ9MHgwMSAgV1I9MHgwMlxcbisgKiAgIEFERFIgMHhlMTAxIC1cXHUwMDNlIDB4YzA5Mzg0MDQgICBTQiB0YXJnZXQgd29yZCBhZGRyZXNzIChTQjEgYmFuayA9IDB4NzgwMClcXG4rICogICBEQVRBIDB4ZTEwMiAtXFx1MDAzZSAweGMwOTM4NDA4ICAgMTYtYml0IGRhdGEgLyByZXBseSB3b3JkXFxuKyAqICAgU1RBVCAweGUxMDMgLVxcdTAwM2UgMHhjMDkzODQwYyAgIGhhbmRzaGFrZTogYSBtYWdpYyAoYmVsb3cpIG9yIGEgYnl0ZSBjb3VudFxcbisgKlxcbisgKiBTVEFUIG1hZ2ljczpcXG4rICogICBSRUFEWSAgMHhjNTVjICAgbG9hZGVyIGlkbGUgaW4gdGhlIGNvbnNvbGUgbG9vcCAgICAgICAgKHRoaXMgZHJpdmVyKVxcbisgKiAgIERMX1JEWSAweGMzM2MgICBsb2FkZXIgaWRsZSBpbiB0aGUgZmxhc2hsZXNzIGxvb3BcXG4rICogICBTVEFSVCAgMHhmNDhmICAgaG9zdCAgIC1cXHUwMDNlIGJlZ2luIGRvd25sb2FkIHNlc3Npb25cXG4rICogICBBQ0sgICAgMHhmNDkwICAgbG9hZGVyIC1cXHUwMDNlIFNUQVJUIGFja25vd2xlZGdlZCAoU1RBUlQgKyAxKVxcbisgKiAgIEVORCAgICAweDNjYzMgICBob3N0ICAgLVxcdTAwM2UgZW5kIG9mIHRyYW5zZmVyIC8gZmluYWxpc2VcXG4rICogICBSRFJFRyAgMHhlMmMwICAgaG9zdCAgIC1cXHUwMDNlIHJlZ2lzdGVyLXJlYWQgY29tbWFuZCAofCBpbmRleCksIHNlZSBiZWxvd1xcbisgKlxcbisgKiBDb25zb2xlIGZsYXNoIHBhdGggKFNUQVQ9MHhjNTVjKSAtIG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKCk6XFxuKyAqXFxuKyAqICAgaG9zdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbG9hZGVyXFxuKyAqICAgLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tXFxuKyAqICAgcmVzZXQgKENUUkw9QUREUj1EQVRBPTApXFxuKyAqICAgcmVhZCBTVEFUIC4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4gMHhjNTVjICAgKFJFQURZLCBpZGxlKVxcbisgKiAgIFNUQVQgOj0gU1RBUlQoMHhmNDhmKSAgLS0tLS0tLS0tLS0tLS1cXHUwMDNlXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBcXHUwMDNjLS0tLS0tLS0tLS0tLS0gU1RBVCA9IDB4ZjQ5MCAoQUNLKVxcbisgKiAgIENUUkwgOj0gV1JcXG4rICogICBEQVRBIDo9IGhkclswLi45XSAgKDIwLWJ5dGUgaGVhZGVyOiB0eXBlLHNpemUxLGNyYzEsc2l6ZTIsY3JjMilcXG4rICogICByZXNldDsgU1RBVCA6PSAyMCAoaGVhZGVyIGxlbikgIC0tLS0tXFx1MDAzZSBwYXJzZSBoZHI7IHJfcmVtYWluPXNpemUxK3NpemUyO1xcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEVSQVNFIHRhcmdldCByZWdpb24ocylcXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgIFxcdTAwM2MtLS0tLS0tLS0tLS0tLSBTVEFUPTIxIChsZW4rMSksIHRoZW4gU1RBVD0wXFxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKGVyYXNlZClcXG4rICogICAtLSBwYXlsb2FkLCBzdHJlYW1lZCBpbiBzbGljZXM6IC0tXFxuKyAqICAgQ1RSTCA6PSBXUlxcbisgKiAgIERBVEEgOj0gd29yZCB4IE4gLi4uXFxuKyAqICAgICBhdCB3b3JkIDE2Mzg0OiByZXNldDsgQUREUjo9MHg3ODAwOyBDVFJMOj1XUiAgIChoYWxmLWJhbmsgLVxcdTAwM2UgU0IxKVxcbisgKiAgICAgYXQgd29yZCAzMjc2MDogZmx1c2ggc2xpY2U6XFxuKyAqICAgICAgICByZXNldDsgU1RBVCA6PSBcXHUwMDNjYnl0ZXNfdGhpc19zbGljZVxcdTAwM2UgLS0tXFx1MDAzZSByX3JlbWFpbiAtPSBieXRlczsgcHJvZ3JhbVxcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXFx1MDAzYy0tLS0tLS0tLS0tLS0tLS0tLS0gU1RBVD0wICAocmVhZHkgZm9yIG5leHQgc2xpY2UpXFxuKyAqICAgLi4uIHJlcGVhdCB1bnRpbCB0aGUgd2hvbGUgcGF5bG9hZCBpcyBzZW50IC4uLlxcbisgKiAgIFNUQVQgOj0gRU5EKDB4M2NjMykgIC0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcdTAwM2UgZmluYWxpc2VcXG4rICpcXG4rICogVGhlIHJfcmVtYWluID09IDAgcnVsZSAoY3JpdGljYWwpOlxcbisgKiAgIEV2ZXJ5IGhvc3QgU1RBVCB3cml0ZSBpbiB0aGUgcGF5bG9hZCBwaGFzZSBpcyBhIGJ5dGUgY291bnQ7IHRoZSBsb2FkZXJcXG4rICogICBkb2VzIHJfcmVtYWluIC09IGNvdW50IGFuZCBzdGF5cyBpbiB0aGUgcmVjZWl2ZSBsb29wIHdoaWxlIHJfcmVtYWluICE9IDAuXFxuKyAqICAgSXQgbGVhdmVzIHRoZSBsb29wLCB2YWxpZGF0ZXMsIGFuZCAtIGlmIGl0IHdhcyBpbiByZXNjdWUgLSBjbGVhcnMgaXRzXFxuKyAqICAgcmVzY3VlLWVuYWJsZSBiaXQgc28gYm9vdF9nbyBib290cyB0aGUgbmV3IGltYWdlLCBPTkxZIHdoZW4gcl9yZW1haW4gaGl0c1xcbisgKiAgIEVYQUNUTFkgMC4gQSBjb3VudCBsYXJnZXIgdGhhbiByX3JlbWFpbiB1bmRlcmZsb3dzIHRoZSAzMi1iaXQgY291bnRlciBhbmRcXG4rICogICB3ZWRnZXMgdGhlIGxvYWRlciB1bnRpbCBhIHBvd2VyIGN5Y2xlLiBIZW5jZTpcXG4rICogICAgIC0gbmV2ZXIgc2VuZCBhIHNsaWNlL2NodW5rIGNvdW50IGxhcmdlciB0aGFuIHdoYXQgaXMgb3V0c3RhbmRpbmc7XFxuKyAqICAgICAtIGludGVycnVwdGVkLWRvd25sb2FkIHJlY292ZXJ5IGZlZWRzIDEgYnl0ZSBhdCBhIHRpbWUgKHNlZSBiZWxvdykuXFxuKyAqXFxuKyAqIEludGVycnVwdGVkLWZsYXNoIHJlY292ZXJ5IChteGw4NjJ4eF9yZXNjdWVfZHJhaW4pOlxcbisgKiAgIEEgaG9zdCB0aGF0IGRpZXMgbWlkLXBheWxvYWQgbGVhdmVzIHRoZSBsb2FkZXIgc3Bpbm5pbmcgaW4gdGhlIHNsaWNlIGxvb3BcXG4rICogICBob2xkaW5nIFNUQVQ9MCAobm8gbWFnaWMpLiBGZWVkIHNpbmdsZSAxLWJ5dGUgY2h1bmtzIChvbmUgREFUQSB3b3JkICtcXG4rICogICBTVEFUPTEpIHVudGlsIHJfcmVtYWluIHJlYWNoZXMgMCwgdGhlbiBTVEFUPUVORDsgdGhlIGxvYWRlciBmaW5hbGlzZXMgdGhlXFxuKyAqICAgKG5vdyBjb3JydXB0KSBpbWFnZSBhbmQgcmUtYXJtcyBSRUFEWSBmb3IgYSBjbGVhbiByZWZsYXNoLlxcbisgKlxcbisgKiBSZWdpc3Rlci1yZWFkIGNoYWxsZW5nZSAobm9uLWRlc3RydWN0aXZlIGxpdmVuZXNzIHByb29mKTpcXG4rICogICBEQVRBIDo9IDB4N2MyMyAobWFya2VyKTsgU1RBVCA6PSAweGUyYzB8aWR4XFxuKyAqICAgICAtXFx1MDAzZSBsb2FkZXIgcmV0dXJucyBhIHJ1bnRpbWUgd29yZCBpbiBEQVRBIGFuZCByZS1hcm1zIFNUQVQ9MHhjNTVjLlxcbisgKiAgIFRoZSByZXBseSBzb3VyY2UgaXMgbG9hZGVyIEJTUywgbm90IGEgY2hpcCBpZDsgdXNlZCBvbmx5IHRvIHByb3ZlIGEgbGl2ZVxcbisgKiAgIG1haWxib3ggaW4gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCkuXFxuKyAqXFxuKyAqIFRoZSBvdGhlciBTVEFUIHJlYWR5IG1hZ2ljLCAweGMzM2MsIG1hcmtzIHRoZSBsb2FkZXIncyBmbGFzaGxlc3NcXG4rICogY2hpcC10by1jaGlwIGRvd25sb2FkIG1vZGUgKE14TDg2MjgxUyAxNi1wb3J0IHRpZXIpOyB0aGlzIGRyaXZlciBkb2VzIG5vdFxcbisgKiB1c2UgaXQuXFxuKyAqXFxuKyAqIFJlc2N1ZSBsaWZlY3ljbGUgKGRldmxpbmspOiBwcm9iZSBydW5zIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCgpOyBhIHdlZGdlZFxcbisgKiBsb2FkZXIgaXMgZHJhaW5lZCBiYWNrIHRvIFJFQURZIGJ5IGEgYmFja2dyb3VuZCBzZWxmLWhlYWwgKHJlc2N1ZV9oZWFsX3dvcmspIHNvXFxuKyAqIHRoZSBtdWx0aS1taW51dGUgcmVjb3ZlcnkgbmV2ZXIgaG9sZHMgdGhlIGRldmxpbmsgbG9jay4gZGV2bGluayBkZXYgaW5mb1xcbisgKiBleHBvc2VzIHRoZSBmdyB2ZXJzaW9uICh0aGUgXFxcImZsYXNoYWJsZVxcXCIgc2lnbmFsKSBvbmx5IG9uY2UgYXQgUkVBRFk7XFxuKyAqIGZsYXNoX3VwZGF0ZSByZXR1cm5zIC1FQlVTWSB1bnRpbCB0aGVuLCBhbmQgcmVwcm9iZXMgdG8gV1NQIGZpcm13YXJlIG9uIHN1Y2Nlc3MuXFxuKyAqXFxuKyAqIE5vdGVzOlxcbisgKiAgIC0gQ2hpcCBpZC9yZXZpc2lvbiAoMHhjMGQyODg4NC84OCkgYXJlIE5PVCByZWFjaGFibGUgb24gdGhpcyBjaGFubmVsOyB0aGV5XFxuKyAqICAgICBuZWVkIHRoZSBjbGF1c2UtNDUgTU1EIGZpcm13YXJlIG1haWxib3gsIHdoaWNoIGlzIGRlYWQgdW5kZXIgTUNVYm9vdC5cXG4rICogICAgIFJlc2N1ZSBpZGVudGl0eSBpcyBieSBTQiBQREkgYmVoYXZpb3VyIG9ubHkgKG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCkuXFxuKyAqICAgLSBUaGUgU01ESU8gUEhZIGFkZHJlc3MgYW5kIHRoZSAweGUxeHggb2Zmc2V0cyBhcmUgT1RQLWNvbmZpZ3VyYWJsZTsgZGVyaXZlXFxuKyAqICAgICB0aGVtIGZyb20gdGhlIERUIGJpbmRpbmcsIGRvIG5vdCBhc3N1bWUgZml4ZWQgdmFsdWVzLlxcbisgKi9cXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmMzMi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvZGVsYXkuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2RldmljZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbW9kdWxlLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9uZXRkZXZpY2UuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L292ZXJmbG93LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9ydG5ldGxpbmsuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbmV0L3N3aXRjaGRldi5oXFx1MDAzZVxcbitcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJteGw4NjJ4eC1hcGkuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWNtZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibXhsODYyeHgtZncuaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWhvc3QuaFxcXCJcXG4rXFxuKy8qIFNCIFBESSByZWdpc3RlcnMgKGNsYXVzZS0yMiBTTURJTyBhZGRyZXNzIHNwYWNlKSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMXFx0XFx0MHhlMTAwXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0FERFJcXHRcXHQweGUxMDFcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfREFUQVxcdFxcdDB4ZTEwMlxcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9TVEFUXFx0XFx0MHhlMTAzXFxuK1xcbisvKiBTQiBQREkgQ1RSTCBtb2RlcyAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVFxcdDB4MDBcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUlxcdFxcdDB4MDJcXG4rXFxuKy8qIFNCIFBESSBoYW5kc2hha2UgbWFnaWMgKHB1Ymxpc2hlZC9jb25zdW1lZCB2aWEgU1RBVCkgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUkVBRFlcXHRcXHQweGM1NWNcXHQvKiBsb2FkZXIgaWRsZSwgY29uc29sZSBsb29wICovXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0RMX1JFQURZXFx0MHhjMzNjXFx0LyogbG9hZGVyIGlkbGUsIGZsYXNobGVzcyBsb29wICovXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVJUXFx0XFx0MHhmNDhmXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0VORFxcdFxcdDB4M2NjM1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRFJFR1xcdFxcdDB4ZTJjMFxcdC8qIHJlZ2lzdGVyLXJlYWQgY21kICh8IGluZGV4KSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLXFx0MHg3YzIzXFx0LyogbWFya2VyIHBsYWNlZCBpbiBEQVRBIGZvciBSRFJFRyAqL1xcbitcXG4rLyogQmVoYXZpb3VyYWwgcHJlc2VuY2UgcHJvYmU6IHR3byBkaXN0aW5jdCAxNi1iaXQgbGF0Y2hlcyBvbiBBRERSL0RBVEEuICovXFxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0FcXHRcXHQweDVhNWFcXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRFxcdFxcdDB4YTVhNVxcbitcXG4rLyogRmlybXdhcmUgdHJhbnNmZXIgZ2VvbWV0cnkgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9GV19IRFJfU0laRVxcdFxcdDIwXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19IQUxGXFx0XFx0MTYzODRcXHQvKiB3b3JkcyBwZXIgaGFsZi1iYW5rICovXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19TTElDRVxcdFxcdDMyNzYwXFx0Lyogd29yZHMgcGVyIGZ1bGwgc2xpY2UgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9GV19TQjFfQUREUlxcdFxcdDB4NzgwMFxcdC8qIFNCMSB3b3JkIGFkZHJlc3MgKi9cXG4rXFxuKy8qIFRpbWVvdXRzIChnZW5lcm91cyB1cHBlciBib3VuZHMpICovXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfUkVBRFlfVElNRU9VVF9NU1xcdDMwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NU1xcdDUwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TXFx0MzAwMDAwXFxuKyNkZWZpbmUgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NU1xcdDEyMDAwMFxcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NU1xcdDUwMDBcXG4rI2RlZmluZSBNWEw4NjJYWF9GV19SRVBST0JFX0RFTEFZX01TXFx0NTAwXFxuKyNkZWZpbmUgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMgMTAwMFxcbitcXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXFxuK3tcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxcbitcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcXG4rXFx0XFx0XFx0XFx0ICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGV4cGVjdGVkLFxcbitcXHRcXHRcXHRcXHQgICAgIHVuc2lnbmVkIGxvbmcgdGltZW91dF9tcylcXG4re1xcbitcXHR1bnNpZ25lZCBsb25nIHRpbWVvdXQgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyh0aW1lb3V0X21zKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRvIHtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRpZiAoKHUxNilyZXQgPT0gZXhwZWN0ZWQpXFxuK1xcdFxcdFxcdHJldHVybiAwO1xcbitcXHRcXHR1c2xlZXBfcmFuZ2UoMTAwMDAsIDExMDAwKTtcXG4rXFx0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpO1xcbitcXG4rXFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHQgICAgICAgdTMyIGRhdGFfd3JpdHRlbilcXG4re1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCBkYXRhX3dyaXR0ZW4pO1xcbitcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHJldHVybiBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXFxuK1xcdFxcdFxcdFxcdFxcdCBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TKTtcXG4rfVxcbitcXG4rc3RhdGljIHZvaWQgbXhsODYyeHhfZmxhc2hfbm90aWZ5KHN0cnVjdCBkZXZsaW5rICpkbCwgY29uc3QgY2hhciAqc3RhdHVzLFxcbitcXHRcXHRcXHRcXHQgIHUzMiBkb25lLCB1MzIgdG90YWwpXFxuK3tcXG4rXFx0ZGV2bGlua19mbGFzaF91cGRhdGVfc3RhdHVzX25vdGlmeShkbCwgc3RhdHVzLCBOVUxMLCBkb25lLCB0b3RhbCk7XFxuK31cXG4rXFxuKy8qIEJ5dGUtY291bnQgb2YgZWFjaCBjaHVuayBmZWQgdG8gdGhlIGxvYWRlciBkdXJpbmcgZHJhaW4uIEl0IE1VU1QgYmUgMTogdGhlXFxuKyAqIGxvYWRlciBvbmx5IGxldHMgdXMgb2JzZXJ2ZSBcXFwiY291bnRlciA9PSAwXFxcIiwgbmV2ZXIgXFxcImNvdW50ZXIgXFx1MDAzYyBzdGVwXFxcIiwgc28gYW55XFxuKyAqIHN0ZXAgXFx1MDAzZSAxIGNhbiBzdWJ0cmFjdCBwYXN0IHplcm8sIHVuZGVyZmxvdyB0aGUgMzItYml0IGNvdW50ZXIgYW5kIHdlZGdlIHRoZVxcbisgKiBsb2FkZXIgZm9yIH4yXjMyIG1vcmUgYnl0ZXMgKGEgc3RhdGUgb25seSBhIHBvd2VyIGN5Y2xlIGNsZWFycykuIFN0ZXBwaW5nIGJ5XFxuKyAqIDEgd2Fsa3MgdGhlIGNvdW50ZXIgdGhyb3VnaCBldmVyeSB2YWx1ZSBhbmQgaXMgZ3VhcmFudGVlZCB0byBsYW5kIG9uIHplcm9cXG4rICogd2hhdGV2ZXIgaXRzIChwb3NzaWJseSBvZGQpIHN0YXJ0LiBBIDEtYnl0ZSBjaHVuayBpcyBhIHBhdGggdGhlIGxvYWRlclxcbisgKiBhbHJlYWR5IGhhbmRsZXM6IHRoZSBub3JtYWwgdHJhbnNmZXIgZW5kcyB3aXRoIGEgc2luZ2xlIHRyYWlsaW5nIGJ5dGUgZm9yXFxuKyAqIG9kZC1zaXplZCBpbWFnZXMgKHNlZSBTdGVwIDYpLlxcbisgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFU1xcdDFcXG4rXFxuKy8qIFBvbGwgU1RBVCB3aGlsZSBkcmFpbmluZyBhIHN0dWNrIGRvd25sb2FkOiAwIG1lYW5zIFxcXCJmZWVkIHRoZSBuZXh0IGNodW5rXFxcIixcXG4rICogUkVBRFkgbWVhbnMgdGhlIGxvYWRlciBsZWZ0IHRoZSByZWNlaXZlIGxvb3AgYW5kIHJlLWFybWVkIGl0cyBjb21tYW5kIGxvb3AsXFxuKyAqIGFueXRoaW5nIGVsc2UgaXMgYSB0cmFuc2llbnQgKHRoZSBjb3VudCBiZWluZyBjb25zdW1lZCkgLSBCVVNZIHBhc3QgdGhlXFxuKyAqIHdpbmRvdyBtZWFucyB0aGUgY291bnRlciBoYXMgaGl0IHplcm8gYW5kIHRoZSBsb2FkZXIgaXMgZmluYWxpc2luZy5cXG4rICovXFxuK2VudW0geyBNWEw4NjJYWF9EUkFJTl9GRUVELCBNWEw4NjJYWF9EUkFJTl9SRUFEWSwgTVhMODYyWFhfRFJBSU5fQlVTWSB9O1xcbitzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9wb2xsX2RyYWluKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXFxuK3tcXG4rXFx0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkbyB7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0aWYgKCh1MTYpcmV0ID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSlcXG4rXFx0XFx0XFx0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX1JFQURZO1xcbitcXHRcXHRpZiAoKHUxNilyZXQgPT0gMClcXG4rXFx0XFx0XFx0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX0ZFRUQ7XFxuK1xcdFxcdHVzbGVlcF9yYW5nZSg1MCwgMTUwKTtcXG4rXFx0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpO1xcbitcXG4rXFx0cmV0dXJuIE1YTDg2MlhYX0RSQUlOX0JVU1k7XFxuK31cXG4rXFxuKy8qIFJlY292ZXIgYSBzd2l0Y2ggd2hvc2UgU0IgUERJIGRvd25sb2FkIHdhcyBpbnRlcnJ1cHRlZCBtaWQtdHJhbnNmZXIgLSB0aGVcXG4rICogaG9zdCBkaWVkIGFmdGVyIE1DVWJvb3QgYmVnYW4gZXJhc2luZyBmbGFzaCwgd2hldGhlciBpdCBhYm9ydGVkIG1pZCBlcmFzZSBvclxcbisgKiBtaWQgaW1hZ2Utd3JpdGUsIGJvdGggZW5kIHVwIGluIHRoZSBzYW1lIHBsYWNlOiB0aGUgcGF5bG9hZCByZWNlaXZlIGxvb3AuXFxuKyAqIFRoZXJlIHRoZSBsb2FkZXIgcHVibGlzaGVzIFNUQVQ9MCwgd2FpdHMgZm9yIHRoZSBob3N0IHRvIHdyaXRlIGEgYnl0ZS1jb3VudFxcbisgKiB0byBTVEFULCBETUFzIHRoYXQgbWFueSBieXRlcyBhbmQgc3VidHJhY3RzIHRoZSBjb3VudCBmcm9tIGEgcmVtYWluaW5nLWJ5dGVzXFxuKyAqIGNvdW50ZXIsIGxlYXZpbmcgdGhlIGxvb3Agb25seSB3aGVuIHRoZSBjb3VudGVyIHJlYWNoZXMgZXhhY3RseSB6ZXJvLiBUaGVcXG4rICogaW1hZ2Ugc2l6ZSBkaWVkIHdpdGggdGhlIGhvc3QsIHNvIHdlIGZlZWQgc2luZ2xlLWJ5dGUgY2h1bmtzIChzZWVcXG4rICogTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVMpIHRvIHdhbGsgdGhlIGNvdW50ZXIgdG8gemVybyB3aXRob3V0IHVuZGVyZmxvdyxcXG4rICogdGhlbiBzZW5kIEVORC4gVGhlIGxvYWRlciBydW5zIGl0cyAoZmFpbGVkKSBjaGVja3N1bSBhbmQgZWl0aGVyIHJlLWFybXNcXG4rICogUkVBRFkgb3IsIGlmIGEgdmFsaWQgaW1hZ2Ugc3Vydml2ZWQgaW4gZmxhc2gsIGJvb3RzIGl0LiBSZXR1cm5zIDAgd2hlbiBSRUFEWVxcbisgKiBpcyByZWFjaGVkICh0aGUgY2FsbGVyIGNhbiBmbGFzaCksIDEgd2hlbiB0aGUgbG9hZGVyIGJvb3RlZCBpbnN0ZWFkICh0aGVcXG4rICogc3dpdGNoIGlzIHJlY292ZXJlZCBidXQgdGhlIGludGVuZGVkIGltYWdlIHdhcyBub3Qgd3JpdHRlbiksIFxcdTAwM2MwIG9uIGVycm9yLlxcbisgKiBEb2VzIE5PVCByZWNvdmVyIGEgY291bnRlciBhbHJlYWR5IHVuZGVyZmxvd2VkIGJ5IGFuIGVhcmxpZXIgb3ZlcnNpemVkLWNodW5rXFxuKyAqIGF0dGVtcHQgLSB0aGF0IG5lZWRzIGEgcG93ZXIgY3ljbGUuXFxuKyAqL1xcbitzdGF0aWMgaW50IG14bDg2Mnh4X3Jlc2N1ZV9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2O1xcbitcXHQvKiBCb3VuZDogdHdpY2UgdGhlIGxvYWRlcidzIDE2IE1pQiBpbWFnZSBjYXAsIG9uZSBieXRlIHBlciBjaHVuay4gKi9cXG4rXFx0dTMyIG1heF9jaHVua3MgPSAydSAqICgxNnUgXFx1MDAzY1xcdTAwM2MgMjApIC8gTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVM7XFxuK1xcdHUzMiBjaHVuayA9IDA7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRkZXZfd2FybihkZXYsIFxcXCJmbGFzaDogZHJhaW5pbmcgaW50ZXJydXB0ZWQgZG93bmxvYWRcXFxcblxcXCIpO1xcbitcXG4rXFx0d2hpbGUgKGNodW5rIFxcdTAwM2MgbWF4X2NodW5rcykge1xcbitcXHRcXHQvKiBUZWFyZG93biBjYW4gaW50ZXJydXB0IHRoaXMgbWludXRlcy1sb25nIGRyYWluLiAqL1xcbitcXHRcXHRpZiAodGVzdF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFxcdTAwMjZwcml2LVxcdTAwM2VmbGFncykpXFxuK1xcdFxcdFxcdHJldHVybiAtRUNBTkNFTEVEO1xcbitcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfZHJhaW4ocHJpdiwgMjAwMCk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRpZiAocmV0ID09IE1YTDg2MlhYX0RSQUlOX1JFQURZKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFx0XFx0aWYgKHJldCA9PSBNWEw4NjJYWF9EUkFJTl9CVVNZKVxcbitcXHRcXHRcXHRicmVhaztcXG4rXFxuK1xcdFxcdC8qIEZlZWQgb25lIHplcm8gYnl0ZTsgcmVzZXQgY2xlYXJlZCB0aGUgd3JpdGUgbGF0Y2guICovXFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgMHgwMDAwKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxcbitcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9EUkFJTl9DSFVOS19CWVRFUyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRjaHVuaysrO1xcbitcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKGNodW5rIFxcdTAwM2U9IG1heF9jaHVua3MpIHtcXG4rXFx0XFx0ZGV2X2VycihkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogaW50ZXJydXB0ZWQgZG93bmxvYWQgZGlkIG5vdCBkcmFpbiBhZnRlciAldSBjaHVua3NcXFxcblxcXCIsXFxuK1xcdFxcdFxcdGNodW5rKTtcXG4rXFx0XFx0cmV0dXJuIC1FVElNRURPVVQ7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxcbitcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfRU5EKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRyZXR1cm4gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksXFxuK1xcdFxcdFxcdFxcdFxcdCBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XFxuK31cXG4rXFxuKy8qIEJhY2tncm91bmQgc2VsZi1oZWFsOiBkcmFpbiBhIHdlZGdlZCBkb3dubG9hZCBiYWNrIHRvIFJFQURZIG9mZiB0aGUgZGV2bGlua1xcbisgKiBmbGFzaCBwYXRoLCBzbyB0aGUgbWludXRlcy1sb25nIHJlY292ZXJ5IG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2suXFxuKyAqIFNjaGVkdWxlZCBmcm9tIHByb2JlOyBwdWJsaXNoZXMgcmVzY3VlX3JlYWR5IG9uIHN1Y2Nlc3MuXFxuKyAqL1xcbit2b2lkIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9wcml2LCByZXNjdWVfaGVhbF93b3JrKTtcXG4rXFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRldl9pbmZvKGRldiwgXFxcInJlY292ZXJpbmcgaW50ZXJydXB0ZWQgZG93bmxvYWQgaW4gYmFja2dyb3VuZFxcXFxuXFxcIik7XFxuK1xcdHJldCA9IG14bDg2Mnh4X3Jlc2N1ZV9kcmFpbihwcml2KTtcXG4rXFx0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcXHUwMDI2cHJpdi1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRyZXR1cm47XFxuK1xcdGlmICghcmV0KSB7XFxuK1xcdFxcdFdSSVRFX09OQ0UocHJpdi1cXHUwMDNlcmVzY3VlX3JlYWR5LCB0cnVlKTtcXG4rXFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwicmVjb3ZlcnkgY29tcGxldGUsIHJlYWR5IHRvIGZsYXNoXFxcXG5cXFwiKTtcXG4rXFx0fVxcbit9XFxuK1xcbisvKiBEZXRlY3QgTUNVYm9vdCByZXNjdWUgbW9kZSBvdmVyIGNsYXVzZS0yMiBTTURJTyBhbG9uZSwgc28gdGhlIGNhbGxlciBjYW4gcnVsZVxcbisgKiB0aGUgbG9hZGVyIG91dCBiZWZvcmUgYW55IEM0NSBBUEkgcmVxdWVzdCAod2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vIFdTUFxcbisgKiBmaXJtd2FyZSBhbnN3ZXJzKS4gQSBzY3JhdGNoIHdyaXRlIHRvIEFERFIvREFUQSBtdXN0IGxhdGNoIG9yIHRoZSBjaGlwIGlzXFxuKyAqIGFic2VudCAoLUVOT0RFVik7IFNUQVQgdGhlbiBjbGFzc2lmaWVzIHRoZSBzdGF0ZSwgcG9rZWQgZGVzdHJ1Y3RpdmVseSBvbmx5XFxuKyAqIHdoZW4gMCwgdGhlIG9uZSB2YWx1ZSBhIHJ1bm5pbmcgZmlybXdhcmUgbmV2ZXIgaG9sZHM6XFxuKyAqXFxuKyAqICAtIDB4YzMzYzogZmxhc2hsZXNzIGxvb3AsIHJlYWR5LlxcbisgKiAgLSAweGM1NWM6IGNvbnNvbGUgbG9vcCwgaWYgdGhlIHJlZ2lzdGVyLXJlYWQgY2hhbGxlbmdlIGlzIHNlcnZpY2VkLlxcbisgKiAgLSBvdGhlciBub24temVybzogcnVubmluZyBmaXJtd2FyZSwgbGVmdCB1bnBva2VkLlxcbisgKiAgLSAwOiB3ZWRnZWQgcmVjZWl2ZSBsb29wLCBpZiBhIDEtYnl0ZSBzbGljZS1hZHZhbmNlIGRyYWlucyBiYWNrIHRvIDAuXFxuKyAqXFxuKyAqIFJldHVybjogTVhMODYyWFhfSU5fUkVTQ1VFLCBNWEw4NjJYWF9OT1RfUkVTQ1VFLCBvciBuZWdhdGl2ZSAoLUVOT0RFVi9TTURJTykuXFxuKyAqL1xcbitpbnQgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxcbit7XFxuK1xcdGludCBzdGF0LCBkYXQsIHJldCwgcmIsIGEsIGQ7XFxuK1xcbitcXHQvKiByZXNjdWVfcmVhZHkgZ2F0ZXMgZmxhc2hpbmc7IGEgd2VkZ2VkIGxvYWRlciBuZWVkcyB0aGUgZHJhaW4gZmlyc3QuICovXFxuK1xcdHByaXYtXFx1MDAzZXJlc2N1ZV9yZWFkeSA9IGZhbHNlO1xcbitcXG4rXFx0LyogUHJlc2VuY2U6IGEgbGl2ZSBjaGlwIGxhdGNoZXMgdGhlIHNjcmF0Y2ggd3JpdGUsIGFuIGFic2VudCBvbmUgZmxvYXRzLiAqL1xcbitcXHRhID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsXFxuK1xcdFxcdFxcdFxcdCBNWEw4NjJYWF9TQl9QRElfUFJPQkVfQSk7XFxuK1xcdGlmIChhIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGE7XFxuK1xcdGQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcXG4rXFx0XFx0XFx0XFx0IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9EKTtcXG4rXFx0aWYgKGQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gZDtcXG4rXFx0YSA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIpO1xcbitcXHRpZiAoYSBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBhO1xcbitcXHRkID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7XFxuK1xcdGlmIChkIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIGQ7XFxuK1xcdGlmICgodTE2KWEgIT0gTVhMODYyWFhfU0JfUERJX1BST0JFX0EgfHxcXG4rXFx0ICAgICh1MTYpZCAhPSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRClcXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c3RhdCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xcbitcXHRpZiAoc3RhdCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiBzdGF0O1xcbitcXG4rXFx0LyogRmxhc2hsZXNzLWRvd25sb2FkIGxvb3A6IHVuYW1iaWd1b3VzIHJlYWR5IG1hZ2ljLCBsZWF2ZSBpdCBhbG9uZS4gKi9cXG4rXFx0aWYgKCh1MTYpc3RhdCA9PSBNWEw4NjJYWF9TQl9QRElfRExfUkVBRFkpIHtcXG4rXFx0XFx0cHJpdi1cXHUwMDNlcmVzY3VlX3JlYWR5ID0gdHJ1ZTtcXG4rXFx0XFx0cmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTtcXG4rXFx0fVxcbitcXG4rXFx0LyogQ29uc29sZSBsb29wIGF0IFJFQURZOiBjb25maXJtIHRoZSBsaXZlIG1haWxib3ggd2l0aCB0aGUgcmVnaXN0ZXItcmVhZFxcbitcXHQgKiBjaGFsbGVuZ2UgKGNvbnN1bWVzIHRoZSBtYXJrZXIgZnJvbSBEQVRBIGFuZCByZS1hcm1zIFJFQURZKS5cXG4rXFx0ICovXFxuK1xcdGlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX1JFQURZKSB7XFxuK1xcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLFxcbitcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfUkRSRUdfTUFSSyk7XFxuK1xcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX1JEUkVHKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcdFxcdHJiID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgICBNWEw4NjJYWF9SRVNDVUVfUkVBRFlfVElNRU9VVF9NUyk7XFxuK1xcdFxcdGRhdCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpO1xcbitcXHRcXHRpZiAoZGF0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0cmV0dXJuIGRhdDtcXG4rXFx0XFx0bXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbitcXHRcXHRpZiAoIXJiIFxcdTAwMjZcXHUwMDI2ICh1MTYpZGF0ICE9IE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLKSB7XFxuK1xcdFxcdFxcdHByaXYtXFx1MDAzZXJlc2N1ZV9yZWFkeSA9IHRydWU7XFxuK1xcdFxcdFxcdHJldHVybiBNWEw4NjJYWF9JTl9SRVNDVUU7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIEFueSBvdGhlciBub24temVybyB2YWx1ZSBpcyBhIHJ1bm5pbmcgZmlybXdhcmUsIG5vdCBhIGxvYWRlci4gKi9cXG4rXFx0aWYgKHN0YXQpXFxuK1xcdFxcdHJldHVybiBNWEw4NjJYWF9OT1RfUkVTQ1VFO1xcbitcXG4rXFx0LyogU1RBVCA9PSAwOiBhIHdlZGdlZCByZWNlaXZlIGxvb3AgY29uc3VtZXMgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBiYWNrXFxuK1xcdCAqIHRvIDAgKGZlZWQgb25lIERBVEEgd29yZCBmaXJzdCwgbGlrZSBhIGRyYWluIGNodW5rKS5cXG4rXFx0ICovXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgMHgwMDAwKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCAxKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJiID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLCBNWEw4NjJYWF9SRVNDVUVfUkVBRFlfVElNRU9VVF9NUyk7XFxuK1xcdGlmICghcmIpXFxuK1xcdFxcdHJldHVybiBNWEw4NjJYWF9JTl9SRVNDVUU7XFxuK1xcbitcXHRyZXR1cm4gLUVOT0RFVjtcXG4rfVxcbitcXG4rLyogUG9zdC1mbGFzaCByZXByb2JlLiBSdW5zIGZyb20gYSBzZWxmLWNvbnRhaW5lZCBoZWFwIHdvcmsgKG5vdCBhIGt0aHJlYWQgYW5kXFxuKyAqIG5vdCB0aGUgZGV2bGluayBjYWxsZXIncyBjb250ZXh0KToga3RocmVhZF9jcmVhdGUoKSBpbiB0aGUgY2FsbGVyIGNvbnRleHRcXG4rICogZmFpbHMgLUVJTlRSIGlmIHRoZSBkZXZsaW5rIGNvbW1hbmQgd2FzIEN0cmwtQydkLCBhbmQgc2NoZWR1bGVfd29yaygpIGNhbm5vdC5cXG4rICogZGV2aWNlX3JlcHJvYmUoKSAtXFx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2LCBzbyB0aGlzIG11c3Qgbm90IHRvdWNoIHByaXY7IGl0IHVzZXNcXG4rICogb25seSB0aGUgaGVsZCBkZXZpY2UgcmVmZXJlbmNlIGFuZCBkcm9wcyBpdHMgbW9kdWxlIHJlZmVyZW5jZSBhZnRlcndhcmRzLlxcbisgKi9cXG4rc3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfd29yayB7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCB3b3JrO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXY7XFxuK307XFxuK1xcbitzdGF0aWMgdm9pZCBteGw4NjJ4eF9yZXByb2JlX3dvcmtfZm4oc3RydWN0IHdvcmtfc3RydWN0ICp3b3JrKVxcbit7XFxuK1xcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX3dvcmsgKnJ3ID1cXG4rXFx0XFx0Y29udGFpbmVyX29mKHdvcmssIHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX3dvcmssIHdvcmspO1xcbitcXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBydy1cXHUwMDNlZGV2O1xcbitcXG4rXFx0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFUFJPQkVfREVMQVlfTVMpO1xcbitcXHRpZiAoZGV2aWNlX3JlcHJvYmUoZGV2KSlcXG4rXFx0XFx0ZGV2X2VycihkZXYsIFxcXCJyZXByb2JlIGZhaWxlZFxcXFxuXFxcIik7XFxuK1xcdHB1dF9kZXZpY2UoZGV2KTtcXG4rXFx0a2ZyZWUocncpO1xcbitcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4rfVxcbitcXG4rLyogTUNVYm9vdCBmaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi9cXG4rc3RydWN0IG14bDg2Mnh4X2Z3X2hkciB7XFxuK1xcdF9fbGUzMiBpbWFnZV90eXBlO1xcbitcXHRfX2xlMzIgaW1hZ2Vfc2l6ZV8xO1xcbitcXHRfX2xlMzIgaW1hZ2VfY2hlY2tzdW1fMTtcXG4rXFx0X19sZTMyIGltYWdlX3NpemVfMjtcXG4rXFx0X19sZTMyIGltYWdlX2NoZWNrc3VtXzI7XFxuK30gX19wYWNrZWQ7XFxuK1xcbitzdGF0aWMgaW50IG14bDg2Mnh4X2ZsYXNoX3ZhbGlkYXRlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxcbitcXHRcXHRcXHRcXHQgICBjb25zdCBzdHJ1Y3QgZmlybXdhcmUgKmZ3LFxcbitcXHRcXHRcXHRcXHQgICB1MzIgKnBheWxvYWRfc2l6ZSlcXG4re1xcbitcXHRjb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICpoZHI7XFxuK1xcdHUzMiBzaXplMSwgc2l6ZTIsIHRvdGFsO1xcbitcXHRjb25zdCB1OCAqcGF5bG9hZDtcXG4rXFx0dTMyIGNyYztcXG4rXFxuK1xcdGlmIChmdy1cXHUwMDNlc2l6ZSBcXHUwMDNjIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKVxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFxuK1xcdGhkciA9IChjb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICopZnctXFx1MDAzZWRhdGE7XFxuK1xcdHBheWxvYWQgPSBmdy1cXHUwMDNlZGF0YSArIE1YTDg2MlhYX0ZXX0hEUl9TSVpFO1xcbitcXHRzaXplMSA9IGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlaW1hZ2Vfc2l6ZV8xKTtcXG4rXFx0c2l6ZTIgPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX3NpemVfMik7XFxuK1xcbitcXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUxLCBzaXplMiwgXFx1MDAyNnRvdGFsKSB8fFxcbitcXHQgICAgdG90YWwgXFx1MDAzZSBmdy1cXHUwMDNlc2l6ZSAtIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcImZsYXNoOiBmaXJtd2FyZSBmaWxlIHRvbyBzbWFsbCBmb3IgZGVjbGFyZWQgc2l6ZVxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoIXRvdGFsKSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcImZsYXNoOiBmaXJtd2FyZSBmaWxlIHdpdGggZW1wdHkgcGF5bG9hZFxcXFxuXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHR9XFxuK1xcbitcXHRpZiAoc2l6ZTEpIHtcXG4rXFx0XFx0Y3JjID0gfmNyYzMyX2xlKH4wVSwgcGF5bG9hZCwgc2l6ZTEpO1xcbitcXHRcXHRpZiAoY3JjICE9IGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMSkpIHtcXG4rXFx0XFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXHRcXFwiZmxhc2g6IGltYWdlIDEgQ1JDIG1pc21hdGNoIChnb3QgJTA4eCwgZXhwZWN0ZWQgJTA4eClcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdGNyYywgbGUzMl90b19jcHUoaGRyLVxcdTAwM2VpbWFnZV9jaGVja3N1bV8xKSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuK1xcdGlmIChzaXplMikge1xcbitcXHRcXHRjcmMgPSB+Y3JjMzJfbGUofjBVLCBwYXlsb2FkICsgc2l6ZTEsIHNpemUyKTtcXG4rXFx0XFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXFx1MDAzZWltYWdlX2NoZWNrc3VtXzIpKSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcImZsYXNoOiBpbWFnZSAyIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMikpO1xcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQqcGF5bG9hZF9zaXplID0gdG90YWw7XFxuK1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF9maXJtd2FyZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcXG4rXFx0XFx0XFx0XFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcXG4rXFx0XFx0XFx0XFx0ICAgdTMyIHBheWxvYWRfc2l6ZSwgc3RydWN0IGRldmxpbmsgKmRsKVxcbit7XFxuK1xcdGNvbnN0IHU4ICpwYXlsb2FkID0gZnctXFx1MDAzZWRhdGEgKyBNWEw4NjJYWF9GV19IRFJfU0laRTtcXG4rXFx0dTMyIHdvcmRfaWR4ID0gMCwgZGF0YV93cml0dGVuID0gMCwgaWR4ID0gMDtcXG4rXFx0dW5zaWduZWQgbG9uZyBuZXh0X25vdGlmeSA9IGppZmZpZXMgLSAxO1xcbitcXHR1MTYgd29yZCwgZmRhdGE7XFxuK1xcdGludCByZXQsIGk7XFxuK1xcbitcXHQvKiBTdGVwIDE6IHJlYm9vdCB0aGUgZmlybXdhcmUgaW50byBNQ1Vib290IHJlc2N1ZSBtb2RlICovXFxuK1xcdGlmICghcHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpIHtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfYXBpX3dyYXAocHJpdiwgU1lTX01JU0NfRldfVVBEQVRFLCBOVUxMLCAwLFxcbitcXHRcXHRcXHRcXHRcXHRmYWxzZSwgZmFsc2UpO1xcbitcXHRcXHRpZiAocmV0KSB7XFxuK1xcdFxcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0XFxcImZsYXNoOiBGV19VUERBVEUgY29tbWFuZCBmYWlsZWQ6ICVwZVxcXFxuXFxcIixcXG4rXFx0XFx0XFx0XFx0RVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHQvKiBTdGVwIDI6IHdhaXQgZm9yIGJvb3Rsb2FkZXIgcmVhZHkgKi9cXG4rXFx0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcXFwiV2FpdGluZyBmb3IgYm9vdGxvYWRlclxcXCIsIDAsIDApO1xcbitcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIHdyaXRlX2VycjtcXG4rXFxuK1xcdC8qIEZhaWx1cmVzIGZyb20gaGVyZSBvbiBtdXN0IGdvIHRocm91Z2ggZW5kX21hZ2ljIHNvIE1DVWJvb3RcXG4rXFx0ICogcmVib290cyBpbnN0ZWFkIG9mIHdhaXRpbmcgZm9yZXZlci5cXG4rXFx0ICovXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxcbitcXHRcXHRcXHRcXHRcXHRNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogYm9vdGxvYWRlciBub3QgcmVhZHk6ICVwZVxcXFxuXFxcIiwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0fVxcbitcXG4rXFx0LyogU3RlcCAzOiBzdGFydCBoYW5kc2hha2UgKi9cXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9TVEFSVCk7XFxuK1xcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRnb3RvIHdyaXRlX2VycjtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVJUICsgMSxcXG4rXFx0XFx0XFx0XFx0XFx0TVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpO1xcbitcXHRpZiAocmV0KSB7XFxuK1xcdFxcdGRldl9lcnIoXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFxcImZsYXNoOiBzdGFydCBoYW5kc2hha2UgZmFpbGVkOiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0ZXAgNDogdHJhbnNmZXIgaW1hZ2UgaGVhZGVyICovXFxuK1xcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXFxcIkVyYXNpbmcgZmxhc2hcXFwiLCAwLCAwKTtcXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1YTDg2MlhYX0ZXX0hEUl9TSVpFIC8gMjsgaSsrKSB7XFxuK1xcdFxcdHdvcmQgPSBmdy1cXHUwMDNlZGF0YVtpICogMl0gfFxcbitcXHRcXHQgICAgICAgKCh1MTYpZnctXFx1MDAzZWRhdGFbaSAqIDIgKyAxXSBcXHUwMDNjXFx1MDAzYyA4KTtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIHdvcmQpO1xcbitcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcdH1cXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0LyogdGhlIGJ5dGUgY291bnQgaW4gU1RBVCB0cmlnZ2VycyB0aGUgZXJhc2UgKi9cXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXFxuK1xcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX0ZXX0hEUl9TSVpFKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0LyogQUNLIGlzIGJ5dGUgY291bnQgKyAxICovXFxuK1xcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfRldfSERSX1NJWkUgKyAxLFxcbitcXHRcXHRcXHRcXHRcXHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0ZGV2X2VycihcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlZGV2LFxcbitcXHRcXHRcXHRcXFwiZmxhc2g6IGhlYWRlciBBQ0sgZmFpbGVkOiAlcGVcXFxcblxcXCIsIEVSUl9QVFIocmV0KSk7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFN0ZXAgNTogd2FpdCBmb3IgZXJhc2UgdG8gY29tcGxldGUgKi9cXG4rXFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLFxcbitcXHRcXHRcXHRcXHRcXHRNWEw4NjJYWF9GV19FUkFTRV9USU1FT1VUX01TKTtcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHR9XFxuK1xcbitcXHQvKiBTdGVwIDY6IHRyYW5zZmVyIHBheWxvYWQgKi9cXG4rXFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXFxuK1xcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXG4rXFx0d2hpbGUgKGlkeCBcXHUwMDNjIHBheWxvYWRfc2l6ZSkge1xcbitcXHRcXHRpZiAoaWR4ICsgMSBcXHUwMDNjIHBheWxvYWRfc2l6ZSkge1xcbitcXHRcXHRcXHRmZGF0YSA9IHBheWxvYWRbaWR4XSB8XFxuK1xcdFxcdFxcdFxcdCgodTE2KXBheWxvYWRbaWR4ICsgMV0gXFx1MDAzY1xcdTAwM2MgOCk7XFxuK1xcdFxcdFxcdGlkeCArPSAyO1xcbitcXHRcXHRcXHRkYXRhX3dyaXR0ZW4gKz0gMjtcXG4rXFx0XFx0fSBlbHNlIHtcXG4rXFx0XFx0XFx0ZmRhdGEgPSBwYXlsb2FkW2lkeF07XFxuK1xcdFxcdFxcdGlkeCsrO1xcbitcXHRcXHRcXHRkYXRhX3dyaXR0ZW4rKztcXG4rXFx0XFx0fVxcbitcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIGZkYXRhKTtcXG4rXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdGdvdG8gd3JpdGVfZXJyO1xcbitcXHRcXHR3b3JkX2lkeCsrO1xcbitcXG4rXFx0XFx0aWYgKGlkeCBcXHUwMDNlPSBwYXlsb2FkX3NpemUpIHtcXG4rXFx0XFx0XFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHByaXYsIGRhdGFfd3JpdHRlbik7XFxuK1xcdFxcdFxcdGJyZWFrO1xcbitcXHRcXHR9XFxuK1xcbitcXHRcXHQvKiBIYWxmLWJhbmsgYm91bmRhcnk6IHN3aXRjaCB0byBTQjEgYWRkcmVzcyAqL1xcbitcXHRcXHRpZiAod29yZF9pZHggPT0gTVhMODYyWFhfRldfQkFOS19IQUxGKSB7XFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9SU1QpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfRldfU0IxX0FERFIpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcbitcXHRcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xcbitcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4rXFx0XFx0XFx0XFx0Z290byB3cml0ZV9lcnI7XFxuK1xcdFxcdH0gZWxzZSBpZiAod29yZF9pZHggXFx1MDAzZT0gTVhMODYyWFhfRldfQkFOS19TTElDRSkge1xcbitcXHRcXHRcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcXG4rXFx0XFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdFxcdFxcXCJmbGFzaDogd3JpdGUgdGltZW91dCBhdCAldS8ldTogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHRcXHRpZHgsIHBheWxvYWRfc2l6ZSwgRVJSX1BUUihyZXQpKTtcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0XFx0fVxcbitcXHRcXHRcXHR3b3JkX2lkeCA9IDA7XFxuK1xcdFxcdFxcdGRhdGFfd3JpdHRlbiA9IDA7XFxuK1xcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbitcXHRcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XFxuK1xcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbitcXHRcXHRcXHRcXHRnb3RvIHdyaXRlX2VycjtcXG4rXFxuK1xcdFxcdFxcdGlmICh0aW1lX2FmdGVyKGppZmZpZXMsIG5leHRfbm90aWZ5KSkge1xcbitcXHRcXHRcXHRcXHRteGw4NjJ4eF9mbGFzaF9ub3RpZnkoZGwsIFxcXCJGbGFzaGluZ1xcXCIsIGlkeCxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgcGF5bG9hZF9zaXplKTtcXG4rXFx0XFx0XFx0XFx0bmV4dF9ub3RpZnkgPSBqaWZmaWVzICsgbXNlY3NfdG9famlmZmllcyg1MDApO1xcbitcXHRcXHRcXHR9XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJldCkge1xcbitcXHRcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogZmluYWwgd3JpdGUgdGltZW91dDogJXBlXFxcXG5cXFwiLCBFUlJfUFRSKHJldCkpO1xcbitcXHRcXHRnb3RvIGVuZF9tYWdpYztcXG4rXFx0fVxcbitcXG4rXFx0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcXFwiRmxhc2hpbmdcXFwiLCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XFxuK1xcdGdvdG8gZW5kX21hZ2ljO1xcbitcXG4rd3JpdGVfZXJyOlxcbitcXHRkZXZfZXJyKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXYsIFxcXCJmbGFzaDogU01ESU8gd3JpdGUgZmFpbGVkOiAlcGVcXFxcblxcXCIsXFxuK1xcdFxcdEVSUl9QVFIocmV0KSk7XFxuK2VuZF9tYWdpYzpcXG4rXFx0LyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqL1xcbitcXHRteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4rXFx0XFx0XFx0ICAgICBNWEw4NjJYWF9TQl9QRElfRU5EKTtcXG4rXFx0bXNsZWVwKE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NUyk7XFxuK1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXHRjaGFyIGJ1ZlsxNl07XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHQvKiBObyBjaGlwLWlkL3JldmlzaW9uIGluIE1DVWJvb3QgKG5lZWRzIHRoZSBmaXJtd2FyZSBNTUQgbWFpbGJveCkuIFRoZVxcbitcXHQgKiBmdyB2ZXJzaW9uIGRvdWJsZXMgYXMgdGhlIFxcXCJyZWFkeSB0byBmbGFzaFxcXCIgc2lnbmFsOiByZXBvcnQgaXQgb25seVxcbitcXHQgKiBvbmNlIHRoZSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSwgbm90aGluZyB3aGlsZSBzdGlsbCBkcmFpbmluZy5cXG4rXFx0ICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSkge1xcbitcXHRcXHRpZiAoIVJFQURfT05DRShwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHkpKVxcbitcXHRcXHRcXHRyZXR1cm4gMDtcXG4rXFxuK1xcdFxcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldS4ldS4ldVxcXCIsXFxuK1xcdFxcdFxcdCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1ham9yLCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxcbitcXHRcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XFxuK1xcdFxcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgXFxcImZ3XFxcIiwgYnVmKTtcXG4rXFx0XFx0aWYgKHJldClcXG4rXFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCBcXFwiZndcXFwiLCBidWYpO1xcbitcXHR9XFxuK1xcbitcXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcXFwiJTA0WFxcXCIsIHByaXYtXFx1MDAzZWFzaWNfaWQpO1xcbitcXHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19JRCxcXG4rXFx0XFx0XFx0XFx0XFx0ICAgICBidWYpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXG4rXFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXFxcIiV1XFxcIiwgcHJpdi1cXHUwMDNlYXNpY19yZXYpO1xcbitcXHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9maXhlZF9wdXQocmVxLFxcbitcXHRcXHRcXHRcXHRcXHQgICAgIERFVkxJTktfSU5GT19WRVJTSU9OX0dFTkVSSUNfQVNJQ19SRVYsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgYnVmKTtcXG4rXFx0aWYgKHJldClcXG4rXFx0XFx0cmV0dXJuIHJldDtcXG4rXFxuK1xcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFxcXCIldS4ldS4ldVxcXCIsXFxuK1xcdFxcdCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1ham9yLCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxcbitcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XFxuK1xcbitcXHRyZXQgPSBkZXZsaW5rX2luZm9fdmVyc2lvbl9ydW5uaW5nX3B1dChyZXEsIFxcXCJmd1xcXCIsIGJ1Zik7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHQvKiBib290cyB0aGlzIGltYWdlIGZyb20gaXRzIG93biBmbGFzaDogc3RvcmVkID09IHJ1bm5pbmcgKi9cXG4rXFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCBcXFwiZndcXFwiLCBidWYpO1xcbit9XFxuK1xcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0ICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuK3tcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfd29yayAqcnc7XFxuK1xcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuK1xcdHUzMiBwYXlsb2FkX3NpemU7XFxuK1xcdGludCByZXQsIGk7XFxuK1xcbitcXHRpZiAocGFyYW1zLVxcdTAwM2Vjb21wb25lbnQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImNvbXBvbmVudCBpcyBub3Qgc3VwcG9ydGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gbXhsODYyeHhfZmxhc2hfdmFsaWRhdGUocHJpdiwgcGFyYW1zLVxcdTAwM2VmdywgXFx1MDAyNnBheWxvYWRfc2l6ZSk7XFxuK1xcdGlmIChyZXQpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXFxcImZpcm13YXJlIGltYWdlIHZhbGlkYXRpb24gZmFpbGVkXFxcIik7XFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFJlZnVzZSB0byBmbGFzaCB3aGlsZSB0aGUgYmFja2dyb3VuZCBzZWxmLWhlYWwgaXMgc3RpbGwgZHJhaW5pbmcuICovXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSBcXHUwMDI2XFx1MDAyNiAhUkVBRF9PTkNFKHByaXYtXFx1MDAzZXJlc2N1ZV9yZWFkeSkpIHtcXG4rXFx0XFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjayxcXG4rXFx0XFx0XFx0XFx0ICAgXFxcInN3aXRjaCBpcyByZWNvdmVyaW5nIGFuIGludGVycnVwdGVkIGRvd25sb2FkLCByZXRyeSBzaG9ydGx5XFxcIik7XFxuK1xcdFxcdHJldHVybiAtRUJVU1k7XFxuK1xcdH1cXG4rXFxuK1xcdC8qIFRoZSByZWZlcmVuY2VzIHRoZSByZXByb2JlIHdvcmsgbmVlZHMgdG8gcmVzdG9yZSBub3JtYWwgb3BlcmF0aW9uXFxuK1xcdCAqIG11c3QgYmUgaGVsZCBiZWZvcmUgdGhlIHN3aXRjaCBpcyBkaXN0dXJiZWQ7IHRoZSB3b3JrIGl0c2VsZiBpc1xcbitcXHQgKiBzY2hlZHVsZWQgb25seSBvbmNlIHRoZSBmbGFzaCBpcyBkb25lIChzZWUgYmVsb3cpLlxcbitcXHQgKi9cXG4rXFx0aWYgKCF0cnlfbW9kdWxlX2dldChUSElTX01PRFVMRSkpXFxuK1xcdFxcdHJldHVybiAtRU5PREVWO1xcbitcXG4rXFx0Z2V0X2RldmljZShkcy1cXHUwMDNlZGV2KTtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSlcXG4rXFx0XFx0ZGV2X2luZm8oZHMtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0IFxcXCJmbGFzaDogZmxhc2hpbmcgc3dpdGNoIHZpYSBNQ1Vib290IHJlc2N1ZSBtb2RlXFxcXG5cXFwiKTtcXG4rXFx0ZWxzZVxcbitcXHRcXHRkZXZfaW5mbyhkcy1cXHUwMDNlZGV2LCBcXFwiZmxhc2g6IHJ1bm5pbmcgZmlybXdhcmUgJXUuJXUuJXVcXFxcblxcXCIsXFxuK1xcdFxcdFxcdCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1ham9yLCBwcml2LVxcdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxcbitcXHRcXHRcXHQgcHJpdi1cXHUwMDNlZndfdmVyc2lvbi5yZXZpc2lvbik7XFxuK1xcbitcXHQvKiBDbG9zZSBwb3J0cyB3aGlsZSB0aGUgZmlybXdhcmUgaXMgc3RpbGwgYWxpdmUgc28gdGhlIERTQVxcbitcXHQgKiBjb3JlJ3MgTURCL0ZEQiB0cmFja2luZyBpcyBkcmFpbmVkLCBhbmQgZGV0YWNoIHVzZXIgcG9ydHNcXG4rXFx0ICogc28gdXNlcnNwYWNlIGNhbm5vdCByZW9wZW4gdGhlbSBkdXJpbmcgdGhlIGZsYXNoLiBUaGVcXG4rXFx0ICogY29uZHVpdCBiZWxvbmdzIHRvIHRoZSBNQUMgZHJpdmVyIGFuZCBpcyBvbmx5IGNsb3NlZC5cXG4rXFx0ICovXFxuK1xcdHJ0bmxfbG9jaygpO1xcbitcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpIHtcXG4rXFx0XFx0aWYgKGRwLVxcdTAwM2V1c2VyKSB7XFxuK1xcdFxcdFxcdGRldl9jbG9zZShkcC1cXHUwMDNldXNlcik7XFxuK1xcdFxcdFxcdG5ldGlmX2RldmljZV9kZXRhY2goZHAtXFx1MDAzZXVzZXIpO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFx0ZHNhX3N3aXRjaF9mb3JfZWFjaF9jcHVfcG9ydChkcCwgZHMpXFxuK1xcdFxcdGRldl9jbG9zZShkcC1cXHUwMDNlY29uZHVpdCk7XFxuK1xcdC8qIFRoZSBicmlkZ2UgZGVmZXJzIHRoZSBTVFAgc3RhdGUgY2hhbmdlcyB0cmlnZ2VyZWQgYnkgY2xvc2luZ1xcbitcXHQgKiB0aGUgcG9ydHM7IGxldCB0aGVtIHJlYWNoIHRoZSBmaXJtd2FyZSB3aGlsZSBpdCBpcyBzdGlsbCBhbGl2ZS5cXG4rXFx0ICovXFxuK1xcdHN3aXRjaGRldl9kZWZlcnJlZF9wcm9jZXNzKCk7XFxuK1xcdHJ0bmxfdW5sb2NrKCk7XFxuK1xcbitcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcXG4rXFx0cHJpdi1cXHUwMDNlYmxvY2tfaG9zdCA9IHRydWU7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXG4rXFx0c2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKTtcXG4rXFx0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFxcdTAwMjZwcml2LVxcdTAwM2VzdGF0c193b3JrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlY3JjX2Vycl93b3JrKTtcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGRzLVxcdTAwM2VudW1fcG9ydHM7IGkrKylcXG4rXFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbaV0uaG9zdF9mbG9vZF93b3JrKTtcXG4rXFxuK1xcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHByaXYsIHBhcmFtcy1cXHUwMDNlZncsIHBheWxvYWRfc2l6ZSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgZHMtXFx1MDAzZWRldmxpbmspO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcXFwiZmlybXdhcmUgdHJhbnNmZXIgZmFpbGVkXFxcIik7XFxuK1xcbitcXHRpZiAoIXJldCkge1xcbitcXHRcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2ssXFxuK1xcdFxcdFxcdFxcdCAgTURJT19NVVRFWF9ORVNURUQpO1xcbitcXHRcXHRwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSA9IGZhbHNlO1xcbitcXHRcXHRtdXRleF91bmxvY2soXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0XFx0LyogVGhlIHJlcHJvYmUgYmVsb3cgcmUtcmVhZHMgYW5kIGxvZ3MgdGhlIG5ldyB2ZXJzaW9uLiAqL1xcbitcXHR9XFxuK1xcbitcXHRtdXRleF9sb2NrX25lc3RlZChcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcXG4rXFx0cHJpdi1cXHUwMDNlc2tpcF90ZWFyZG93biA9IHRydWU7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2cHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXG4rXFx0LyogSGFuZCB0aGUgcmVwcm9iZSB0byBhIHNlbGYtY29udGFpbmVkIHdvcmssIHNjaGVkdWxlZCBsYXN0LiBEb2luZyBpdFxcbitcXHQgKiBmcm9tIGEgd29yayAocmF0aGVyIHRoYW4gYSBrdGhyZWFkIHNwYXduZWQgaGVyZSkgYXZvaWRzIGJvdGggdGhlXFxuK1xcdCAqIGh1bmctdGFzayBzcGxhdCBvZiBhIHRocmVhZCBwYXJrZWQgYWNyb3NzIHRoZSBmbGFzaCBhbmQgdGhlIC1FSU5UUlxcbitcXHQgKiB0aGF0IGt0aHJlYWRfY3JlYXRlKCkgcmV0dXJucyBpZiB0aGUgZGV2bGluayBjb21tYW5kIHdhcyBDdHJsLUMnZC5cXG4rXFx0ICogSXRzIG1vZHVsZSBhbmQgZGV2aWNlIHJlZmVyZW5jZXMgYXJlIGFscmVhZHkgaGVsZCBhYm92ZS5cXG4rXFx0ICovXFxuK1xcdHJ3ID0ga3phbGxvY19vYmooKnJ3KTtcXG4rXFx0aWYgKCFydykge1xcbitcXHRcXHRkZXZfZXJyKGRzLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcXCJmbGFzaDogb3V0IG9mIG1lbW9yeSBmb3IgcmVwcm9iZTsgcmVsb2FkIHRoZSBkcml2ZXIgdG8gcmVzdG9yZSBvcGVyYXRpb25cXFxcblxcXCIpO1xcbitcXHRcXHRwdXRfZGV2aWNlKGRzLVxcdTAwM2VkZXYpO1xcbitcXHRcXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcXG4rXFx0XFx0cmV0dXJuIHJldCA/IHJldCA6IC1FTk9NRU07XFxuK1xcdH1cXG4rXFx0SU5JVF9XT1JLKFxcdTAwMjZydy1cXHUwMDNld29yaywgbXhsODYyeHhfcmVwcm9iZV93b3JrX2ZuKTtcXG4rXFx0cnctXFx1MDAzZWRldiA9IGRzLVxcdTAwM2VkZXY7XFxuK1xcdHNjaGVkdWxlX3dvcmsoXFx1MDAyNnJ3LVxcdTAwM2V3b3JrKTtcXG4rXFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjdjZDg3YzdhZDg3MTY3XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oXFxuQEAgLTAsMCArMSwyMCBAQFxcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xcbitcXG4rI2lmbmRlZiBfX01YTDg2MlhYX0ZXX0hcXG4rI2RlZmluZSBfX01YTDg2MlhYX0ZXX0hcXG4rXFxuKyNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcXG4rc3RydWN0IHdvcmtfc3RydWN0O1xcbitcXG4raW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XFxuK3ZvaWQgbXhsODYyeHhfcmVzY3VlX2hlYWxfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspO1xcbitpbnQgbXhsODYyeHhfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXFxuK1xcdFxcdFxcdCAgICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuK2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuK1xcdFxcdFxcdFxcdCAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbitcXHRcXHRcXHRcXHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuK1xcbisjZW5kaWYgLyogX19NWEw4NjJYWF9GV19IICovXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXFxuaW5kZXggNGFjZDIxNmY3Y2MwMDkuLjJkYmQwNzRjMGZlMjZjIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmNcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXFxuQEAgLTE1LDYgKzE1LDggQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbmV0L2RzYS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHguaFxcXCJcXG4rI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWNtZC5oXFxcIlxcbisjaW5jbHVkZSBcXFwibXhsODYyeHgtZncuaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWhvc3QuaFxcXCJcXG4gXFxuICNkZWZpbmUgQ1RSTF9CVVNZX01BU0tcXHRcXHRcXHRCSVQoMTUpXFxuQEAgLTM0MCw2ICszNDIsMjEgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpfZGF0YSxcXG4gXFxuIFxcdG11dGV4X2xvY2tfbmVzdGVkKFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VidXMtXFx1MDAzZW1kaW9fbG9jaywgTURJT19NVVRFWF9ORVNURUQpO1xcbiBcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXNraXBfdGVhcmRvd24pIHtcXG4rXFx0XFx0cmV0ID0gcmVhZCA/IC1FTk9ERVYgOiAwO1xcbitcXHRcXHRnb3RvIG91dDtcXG4rXFx0fVxcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKSB7XFxuK1xcdFxcdHJldCA9IC1FTk9ERVY7XFxuK1xcdFxcdGdvdG8gb3V0O1xcbitcXHR9XFxuK1xcbitcXHRpZiAocHJpdi1cXHUwMDNlYmxvY2tfaG9zdCBcXHUwMDI2XFx1MDAyNiBjbWQgIT0gU1lTX01JU0NfRldfVVBEQVRFKSB7XFxuK1xcdFxcdHJldCA9IC1FQlVTWTtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuIFxcdG1heCA9IChzaXplICsgMSkgLyAyO1xcbiBcXG4gXFx0cmV0ID0gbXhsODYyeHhfYnVzeV93YWl0KHByaXYpO1xcbkBAIC00OTUsMTIgKzUxMiw0OSBAQCBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXFxuIFxcdHJldHVybiByZXQ7XFxuIH1cXG4gXFxuKyNkZWZpbmUgTVhMODYyWFhfU01ESU9fQUREUl9SRUdcXHRcXHQweDFmXFxuKyNkZWZpbmUgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLXFx0MHhmZmYwXFxuKyNkZWZpbmUgTVhMODYyWFhfU01ESU9fT0ZGX01BU0tcXHRcXHQweDAwMGZcXG4rXFxuK2ludCBteGw4NjJ4eF9zbWRpb19yZWFkKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkcilcXG4re1xcbitcXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYnVzO1xcbitcXHRpbnQgcGh5ID0gcHJpdi1cXHUwMDNlbWRpb2Rldi1cXHUwMDNlYWRkcjtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdG11dGV4X2xvY2soXFx1MDAyNmJ1cy1cXHUwMDNlbWRpb19sb2NrKTtcXG4rXFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcXG4rXFx0XFx0XFx0ICAgICAgYWRkciBcXHUwMDI2IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7XFxuK1xcdGlmIChyZXQgXFx1MDAzZT0gMClcXG4rXFx0XFx0cmV0ID0gX19tZGlvYnVzX3JlYWQoYnVzLCBwaHksIGFkZHIgXFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyk7XFxuK1xcdG11dGV4X3VubG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXR1cm4gcmV0O1xcbit9XFxuK1xcbitpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKVxcbit7XFxuK1xcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VidXM7XFxuK1xcdGludCBwaHkgPSBwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VhZGRyO1xcbitcXHRpbnQgcmV0O1xcbitcXG4rXFx0bXV0ZXhfbG9jayhcXHUwMDI2YnVzLVxcdTAwM2VtZGlvX2xvY2spO1xcbitcXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLFxcbitcXHRcXHRcXHQgICAgICBhZGRyIFxcdTAwMjYgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLKTtcXG4rXFx0aWYgKHJldCBcXHUwMDNlPSAwKVxcbitcXHRcXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIGFkZHIgXFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyxcXG4rXFx0XFx0XFx0XFx0ICAgICAgdmFsKTtcXG4rXFx0bXV0ZXhfdW5sb2NrKFxcdTAwMjZidXMtXFx1MDAzZW1kaW9fbG9jayk7XFxuK1xcdHJldHVybiByZXQ7XFxuK31cXG4rXFxuIHZvaWQgbXhsODYyeHhfaG9zdF9pbml0KHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxcbiB7XFxuIFxcdElOSVRfV09SSyhcXHUwMDI2cHJpdi1cXHUwMDNlY3JjX2Vycl93b3JrLCBteGw4NjJ4eF9jcmNfZXJyX3dvcmtfZm4pO1xcbitcXHRJTklUX1dPUksoXFx1MDAyNnByaXYtXFx1MDAzZXJlc2N1ZV9oZWFsX3dvcmssIG14bDg2Mnh4X3Jlc2N1ZV9oZWFsX3dvcmtfZm4pO1xcbiB9XFxuIFxcbiB2b2lkIG14bDg2Mnh4X2hvc3Rfc2h1dGRvd24oc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXFxuIHtcXG4gXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlY3JjX2Vycl93b3JrKTtcXG4rXFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlcmVzY3VlX2hlYWxfd29yayk7XFxuIH1cXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaCBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmhcXG5pbmRleCA2NmQ2YWUxOThhZmY0NS4uNGUwNTRjNmU0YzBlNDAgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmhcXG5AQCAtMTgsNSArMTgsNyBAQCBpbnQgbXhsODYyeHhfYXBpX3dyYXAoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUxNiBjbWQsIHZvaWQgKmRhdGEsIHUxNiBzaXplLFxcbiBcXHRteGw4NjJ4eF9hcGlfd3JhcChkZXYsIGNtZCwgXFx1MDAyNihkYXRhKSwgc2l6ZW9mKChkYXRhKSksIHRydWUsIHRydWUpXFxuIFxcbiBpbnQgbXhsODYyeHhfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpO1xcbitpbnQgbXhsODYyeHhfc21kaW9fcmVhZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTMyIGFkZHIpO1xcbitpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKTtcXG4gXFxuICNlbmRpZiAvKiBfX01YTDg2MlhYX0hPU1RfSCAqL1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xcbmluZGV4IGI2ODk2NTJhYTliOTIwLi5hNWI2OTQwYjU1MmU5ZSAxMDA2NDRcXG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xcbkBAIC00MDYsNiArNDA2LDggQEAgbXhsODYyeHhfcGh5bGlua19tYWNfc2VsZWN0X3BjcyhzdHJ1Y3QgcGh5bGlua19jb25maWcgKmNvbmZpZyxcXG4gXFxuIFxcdHN3aXRjaCAocG9ydCkge1xcbiBcXHRjYXNlIDkgLi4uIDE2OlxcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbiBcXHRcXHRpZiAoIU1YTDg2MlhYX0ZXX1ZFUl9NSU4ocHJpdiwgMSwgMCwgODQpKSB7XFxuIFxcdFxcdFxcdGRldl93YXJuX29uY2UoZHAtXFx1MDAzZWRzLVxcdTAwM2VkZXYsXFxuIFxcdFxcdFxcdFxcdCAgICAgIFxcXCJTZXJEZXMgUENTIHVuc3VwcG9ydGVkIG9uIG9sZCBmaXJtd2FyZS5cXFxcblxcXCIpO1xcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXFxuaW5kZXggNDVkMjM3YjNhNDBmMTAuLjlhYzY2OGMxM2M5ZTcwIDEwMDY0NFxcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcXG5AQCAtMjEsNiArMjEsNyBAQFxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHguaFxcXCJcXG4gI2luY2x1ZGUgXFxcIm14bDg2Mnh4LWFwaS5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHgtY21kLmhcXFwiXFxuKyNpbmNsdWRlIFxcXCJteGw4NjJ4eC1mdy5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHgtaG9zdC5oXFxcIlxcbiAjaW5jbHVkZSBcXFwibXhsODYyeHgtcGh5bGluay5oXFxcIlxcbiBcXG5AQCAtNzEsNiArNzIsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBldGh0b29sX3Jtb25faGlzdF9yYW5nZSBteGw4NjJ4eF9ybW9uX3Jhbmdlc1tdID0ge1xcbiAjZGVmaW5lIE1YTDg2MlhYX1JFQURZX1RJTUVPVVRfTVNcXHQxMDAwMFxcbiAjZGVmaW5lIE1YTDg2MlhYX1JFQURZX1BPTExfTVNcXHRcXHQxMDBcXG4gXFxuKy8qIENoaXAgSUQgcmVnaXN0ZXJzLCByZWFkIHZpYSBTWVNfTUlTQ19SRUdfUkQgKi9cXG4rI2RlZmluZSBNWEw4NjJYWF9DSElQSURfTFxcdFxcdDB4YzBkMjg4ODRcXG4rI2RlZmluZSBNWEw4NjJYWF9DSElQSURfTVxcdFxcdDB4YzBkMjg4ODhcXG4rI2RlZmluZSBNWEw4NjJYWF9DSElQSURfTF9QTlVNTFxcdFxcdEdFTk1BU0soMTUsIDEyKVxcbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NXFx0XFx0R0VOTUFTSygxMSwgMClcXG4rI2RlZmluZSBNWEw4NjJYWF9DSElQSURfTV9WRVJTSU9OXFx0R0VOTUFTSygxNCwgMTIpXFxuK1xcbiAjZGVmaW5lIE1YTDg2MlhYX1RDTV9JTlNUX1NFTFxcdFxcdDB4ZTAwXFxuICNkZWZpbmUgTVhMODYyWFhfVENNX0NCU1xcdFxcdDB4ZTEyXFxuICNkZWZpbmUgTVhMODYyWFhfVENNX0VCU1xcdFxcdDB4ZTEzXFxuQEAgLTIyMiw2ICsyMzAsMzUgQEAgc3RhdGljIGludCBteGw4NjJ4eF9waHlfd3JpdGVfYzQ1X21paV9idXMoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IGFkZHIsXFxuIFxcdHJldHVybiBteGw4NjJ4eF9waHlfd3JpdGVfbW1kKGJ1cy1cXHUwMDNlcHJpdiwgYWRkciwgZGV2YWRkLCByZWdudW0sIHZhbCk7XFxuIH1cXG4gXFxuKy8qIFJlYWQgdGhlIHN0YXRpYyBjaGlwIHBhcnQgbnVtYmVyIGFuZCB2ZXJzaW9uIGZyb20gdGhlIENISVAgSURcXG4rICogcmVnaXN0ZXJzLiBPbmx5IHBvc3NpYmxlIHdpdGggYSBydW5uaW5nIGZpcm13YXJlLCBzbyB0aGUgdmFsdWVzIGFyZVxcbisgKiBjYWNoZWQgYXQgc2V0dXAgYW5kIGxlZnQgemVybyB3aGVuIHRoZSBzd2l0Y2ggaXMgaW4gcmVzY3VlIG1vZGUuXFxuKyAqL1xcbitzdGF0aWMgaW50IG14bDg2Mnh4X3JlYWRfY2hpcF9pZChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4re1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfc3lzX3JlZ19ydyByZWcgPSB7fTtcXG4rXFx0dTE2IGNoaXBpZF9sLCBjaGlwaWRfbTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdHJlZy5hZGRyID0gY3B1X3RvX2xlMzIoTVhMODYyWFhfQ0hJUElEX0wpO1xcbitcXHRyZXQgPSBNWEw4NjJYWF9BUElfUkVBRChwcml2LCBTWVNfTUlTQ19SRUdfUkQsIHJlZyk7XFxuK1xcdGlmIChyZXQpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdGNoaXBpZF9sID0gbGUzMl90b19jcHUocmVnLnZhbCk7XFxuK1xcbitcXHRyZWcuYWRkciA9IGNwdV90b19sZTMyKE1YTDg2MlhYX0NISVBJRF9NKTtcXG4rXFx0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgU1lTX01JU0NfUkVHX1JELCByZWcpO1xcbitcXHRpZiAocmV0KVxcbitcXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRjaGlwaWRfbSA9IGxlMzJfdG9fY3B1KHJlZy52YWwpO1xcbitcXG4rXFx0cHJpdi1cXHUwMDNlYXNpY19pZCA9IEZJRUxEX0dFVChNWEw4NjJYWF9DSElQSURfTF9QTlVNTCwgY2hpcGlkX2wpIHxcXG4rXFx0XFx0XFx0RklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9NX1BOVU1NLCBjaGlwaWRfbSkgXFx1MDAzY1xcdTAwM2MgNDtcXG4rXFx0cHJpdi1cXHUwMDNlYXNpY19yZXYgPSBGSUVMRF9HRVQoTVhMODYyWFhfQ0hJUElEX01fVkVSU0lPTiwgY2hpcGlkX20pO1xcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuIHN0YXRpYyBpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0c3RydWN0IG14bDg2Mnh4X3N5c19md19pbWFnZV92ZXJzaW9uIHZlciA9IHt9O1xcbkBAIC0yNTQsNiArMjkxLDExIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfd2FpdF9yZWFkeShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIFxcdFxcdHByaXYtXFx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IgPSB2ZXIuaXZfbWFqb3I7XFxuIFxcdFxcdHByaXYtXFx1MDAzZWZ3X3ZlcnNpb24ubWlub3IgPSB2ZXIuaXZfbWlub3I7XFxuIFxcdFxcdHByaXYtXFx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24gPSBsZTE2X3RvX2NwdSh2ZXIuaXZfcmV2aXNpb24pO1xcbitcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfcmVhZF9jaGlwX2lkKHByaXYpO1xcbitcXHRcXHRpZiAocmV0KVxcbitcXHRcXHRcXHRkZXZfd2Fybihkcy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIHJlYWQgY2hpcCBJRDogJXBlXFxcXG5cXFwiLFxcbitcXHRcXHRcXHRcXHQgRVJSX1BUUihyZXQpKTtcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBub3RfcmVhZHlfeWV0OlxcbkBAIC02MjIsMTUgKzY2NCw0OSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gXFx0aW50IG5fdXNlcl9wb3J0cyA9IDAsIG1heF92bGFucztcXG4gXFx0aW50IGluZ3Jlc3NfZmluYWxzLCB2aWRfcnVsZXM7XFxuIFxcdHN0cnVjdCBkc2FfcG9ydCAqZHA7XFxuLVxcdGludCByZXQsIGk7XFxuK1xcdGludCByZXQsIGksIHJlc2N1ZTtcXG4gXFxuLVxcdHJldCA9IG14bDg2Mnh4X3Jlc2V0KHByaXYpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHQvKiBEZXRlY3QgdGhlIGxvYWRlciBvdmVyIFNCIFBESSBmaXJzdDogaXQgbmVlZHMgbm8gZmlybXdhcmUsIHVubGlrZSB0aGVcXG4rXFx0ICogQzQ1IEFQSSAobXhsODYyeHhfcmVzZXQvd2FpdF9yZWFkeSkgd2hpY2ggc3Bld3MgQ1JDIGVycm9ycyB3aGVuIG5vbmVcXG4rXFx0ICogYW5zd2Vycy4gVG91Y2ggQzQ1IG9ubHkgb25jZSByZXNjdWUgaXMgcnVsZWQgb3V0LlxcbitcXHQgKi9cXG4rXFx0cmVzY3VlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpO1xcbitcXHRpZiAocmVzY3VlIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJlc2N1ZTtcXG4gXFxuLVxcdHJldCA9IG14bDg2Mnh4X3dhaXRfcmVhZHkoZHMpO1xcbi1cXHRpZiAocmV0KVxcbi1cXHRcXHRyZXR1cm4gcmV0O1xcbitcXHRpZiAocmVzY3VlID09IE1YTDg2MlhYX05PVF9SRVNDVUUpIHtcXG4rXFx0XFx0cmV0ID0gbXhsODYyeHhfcmVzZXQocHJpdik7XFxuK1xcdFxcdGlmIChyZXQpXFxuK1xcdFxcdFxcdHJldHVybiByZXQ7XFxuK1xcbitcXHRcXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcXG4rXFx0XFx0aWYgKHJldCkge1xcbitcXHRcXHRcXHQvKiB0aGUgcmVzZXQgbWF5IG9ubHkgbm93IGhhdmUgdHJpZ2dlcmVkIHJlc2N1ZSBtb2RlICovXFxuK1xcdFxcdFxcdHJlc2N1ZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcXG4rXFx0XFx0XFx0aWYgKHJlc2N1ZSBcXHUwMDNjIDApXFxuK1xcdFxcdFxcdFxcdHJldHVybiByZXNjdWU7XFxuK1xcdFxcdFxcdGlmIChyZXNjdWUgPT0gTVhMODYyWFhfTk9UX1JFU0NVRSlcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcbitcXHRwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSA9IHJlc2N1ZTtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSkge1xcbitcXHRcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX3JlYWR5KSB7XFxuK1xcdFxcdFxcdGRldl93YXJuKGRzLVxcdTAwM2VkZXYsXFxuK1xcdFxcdFxcdFxcdCBcXFwic3dpdGNoIGluIE1DVWJvb3QgcmVzY3VlIG1vZGUsIHVzZSBkZXZsaW5rIHRvIGZsYXNoIG5ldyBmaXJtd2FyZVxcXFxuXFxcIik7XFxuK1xcdFxcdH0gZWxzZSB7XFxuK1xcdFxcdFxcdC8qIERyYWluIHRoZSB3ZWRnZWQgZG93bmxvYWQgaW4gdGhlIGJhY2tncm91bmQgc28gaXRcXG4rXFx0XFx0XFx0ICogbmV2ZXIgaG9sZHMgdGhlIGRldmxpbmsgbG9jazsgaW5mbyBhbmQgZmxhc2ggYmVjb21lXFxuK1xcdFxcdFxcdCAqIGF2YWlsYWJsZSBvbmNlIHJlYWR5LlxcbitcXHRcXHRcXHQgKi9cXG4rXFx0XFx0XFx0ZGV2X3dhcm4oZHMtXFx1MDAzZWRldixcXG4rXFx0XFx0XFx0XFx0IFxcXCJzd2l0Y2ggaW4gTUNVYm9vdCB3aXRoIGFuIGludGVycnVwdGVkIGRvd25sb2FkLCByZWNvdmVyaW5nIGluIGJhY2tncm91bmRcXFxcblxcXCIpO1xcbitcXHRcXHRcXHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcXHUwMDI2cHJpdi1cXHUwMDNlcmVzY3VlX2hlYWxfd29yayk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdH1cXG4gXFxuIFxcdG11dGV4X2luaXQoXFx1MDAyNnByaXYtXFx1MDAzZXNlcmRlc19sb2NrKTtcXG4gXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlc2VyZGVzX3BvcnRzKTsgaSsrKVxcbkBAIC03MTUsMTEgKzc5MSwyMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfc3RhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCwgYm9vbCBlbmFibGUpXFxuIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9lbmFibGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0XFx0XFx0XFx0c3RydWN0IHBoeV9kZXZpY2UgKnBoeWRldilcXG4ge1xcbitcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbitcXG4rXFx0aWYgKHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFxuIFxcdHJldHVybiBteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCB0cnVlKTtcXG4gfVxcbiBcXG4gc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9kaXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuIHtcXG4rXFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4rXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0aWYgKG14bDg2Mnh4X3BvcnRfc3RhdGUoZHMsIHBvcnQsIGZhbHNlKSlcXG4gXFx0XFx0ZGV2X2Vycihkcy1cXHUwMDNlZGV2LCBcXFwiZmFpbGVkIHRvIGRpc2FibGUgcG9ydCAlZFxcXFxuXFxcIiwgcG9ydCk7XFxuIH1cXG5AQCAtMTMzNyw2ICsxNDIzLDEyIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbiBcXHRib29sIGlzX2NwdV9wb3J0ID0gZHNhX3BvcnRfaXNfY3B1KGRwKTtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdC8qIERTQSByZWluaXRzIGZhaWxlZCB1c2VyIHBvcnRzIGFzIHVudXNlZDsgc2hhcmVkIHBvcnRzIG11c3RcXG4rXFx0ICogc3VjY2VlZCBmb3IgdGhlIHRyZWUgdG8gcmVnaXN0ZXIuXFxuK1xcdCAqL1xcbitcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpXFxuK1xcdFxcdHJldHVybiBkc2FfcG9ydF9pc191c2VyKGRwKSA/IC1FTk9ERVYgOiAwO1xcbitcXG4gXFx0cmV0ID0gbXhsODYyeHhfcG9ydF9zdGF0ZShkcywgcG9ydCwgZmFsc2UpO1xcbiBcXHRpZiAocmV0KVxcbiBcXHRcXHRyZXR1cm4gcmV0O1xcbkBAIC0xNTcyLDYgKzE2NjQsMTEgQEAgc3RhdGljIGludCBteGw4NjJ4eF9wb3J0X21kYl9kZWwoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0ZXRoZXJfYWRkcl9jb3B5KHFwYXJhbS5tYWMsIG1kYi1cXHUwMDNlYWRkcik7XFxuIFxcbiBcXHRyZXQgPSBNWEw4NjJYWF9BUElfUkVBRChwcml2LCBNWEw4NjJYWF9NQUNfVEFCTEVFTlRSWVFVRVJZLCBxcGFyYW0pO1xcbitcXHQvKiAtRU5PREVWOiB0aGUgZmlybXdhcmUgYW5kIGl0cyBNQUMgdGFibGUgYXJlIGdvbmUsIG5vdGhpbmcgbGVmdFxcbitcXHQgKiB0byBkZWxldGVcXG4rXFx0ICovXFxuK1xcdGlmIChyZXQgPT0gLUVOT0RFVilcXG4rXFx0XFx0cmV0dXJuIDA7XFxuIFxcdGlmIChyZXQpXFxuIFxcdFxcdHJldHVybiByZXQ7XFxuIFxcbkBAIC0xNjI4LDYgKzE3MjUsOSBAQCBzdGF0aWMgdm9pZCBteGw4NjJ4eF9wb3J0X3N0cF9zdGF0ZV9zZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4gXFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4gXFx0aW50IHJldDtcXG4gXFxuK1xcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfbW9kZSlcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4gXFx0c3dpdGNoIChzdGF0ZSkge1xcbiBcXHRjYXNlIEJSX1NUQVRFX0RJU0FCTEVEOlxcbiBcXHRcXHRwYXJhbS5wb3J0X3N0YXRlID0gY3B1X3RvX2xlMzIoTVhMODYyWFhfU1RQX1BPUlRfU1RBVEVfRElTQUJMRSk7XFxuQEAgLTIwODYsNiArMjE4Niw4IEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXhsODYyeHhfc3dpdGNoX29wcyA9IHtcXG4gXFx0LmdldF9wYXVzZV9zdGF0cyA9IG14bDg2Mnh4X2dldF9wYXVzZV9zdGF0cyxcXG4gXFx0LmdldF9ybW9uX3N0YXRzID0gbXhsODYyeHhfZ2V0X3Jtb25fc3RhdHMsXFxuIFxcdC5nZXRfc3RhdHM2NCA9IG14bDg2Mnh4X2dldF9zdGF0czY0LFxcbitcXHQuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsXFxuK1xcdC5kZXZsaW5rX2ZsYXNoX3VwZGF0ZSA9IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlLFxcbiB9O1xcbiBcXG4gc3RhdGljIGludCBteGw4NjJ4eF9wcm9iZShzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXYpXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcXG5pbmRleCA0MzJhNWYzZjJlMDhlNi4uNzJkYzMxY2MyYjYyZmEgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxcbkBAIC0xNCw2ICsxNCwxMCBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcXG4gI2RlZmluZSBNWEw4NjJYWF9GSVJTVF9TRVJERVNfUE9SVFxcdDlcXG4gI2RlZmluZSBNWEw4NjJYWF9TRVJERVNfU0xPVFNcXHRcXHQ0XFxuIFxcbisvKiBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QoKSByZXR1cm4gY29kZXMgKG5lZ2F0aXZlIHZhbHVlcyBhcmUgZXJyb3JzKSAqL1xcbisjZGVmaW5lIE1YTDg2MlhYX05PVF9SRVNDVUVcXHRcXHQwXFxuKyNkZWZpbmUgTVhMODYyWFhfSU5fUkVTQ1VFXFx0XFx0MVxcbitcXG4gI2RlZmluZSBNWEw4NjJYWF9ERUZBVUxUX0JSSURHRVxcdFxcdDBcXG4gI2RlZmluZSBNWEw4NjJYWF9NQVhfQlJJREdFU1xcdFxcdDQ4XFxuICNkZWZpbmUgTVhMODYyWFhfTUFYX0JSSURHRV9QT1JUU1xcdDEyOFxcbkBAIC0zMDMsNiArMzA3LDEwIEBAIHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIHtcXG4gICogICAgICAgICAgICAgICAgICAgICAgZmxvb2RpbmcpXFxuICAqIEBmd192ZXJzaW9uOiAgICAgICAgIGNhY2hlZCBmaXJtd2FyZSB2ZXJzaW9uLCBwb3B1bGF0ZWQgYXQgcHJvYmUgYW5kXFxuICAqICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVkIHdpdGggTVhMODYyWFhfRldfVkVSX01JTigpXFxuKyAqIEBhc2ljX2lkOiAgICAgICAgICAgIGNoaXAgcGFydCBudW1iZXIgcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycyxcXG4rICogICAgICAgICAgICAgICAgICAgICAgcmVwb3J0ZWQgYXMgdGhlIGRldmxpbmsgXFxcImFzaWMuaWRcXFwiIGZpeGVkIHZlcnNpb25cXG4rICogQGFzaWNfcmV2OiAgICAgICAgICAgY2hpcCB2ZXJzaW9uIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMsXFxuKyAqICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGFzIHRoZSBkZXZsaW5rIFxcXCJhc2ljLnJldlxcXCIgZml4ZWQgdmVyc2lvblxcbiAgKiBAc2VyZGVzX3BvcnRzOiAgICAgICBTZXJEZXMgaW50ZXJmYWNlcyBpbmNsLiBzdWItaW50ZXJmYWNlcyBpbiBjYXNlIG9mXFxuICAqICAgICAgICAgICAgICAgICAgICAgIDEwR19RWEdNSUkgb3IgUVNHTUlJXFxuICAqIEBzZXJkZXNfcmVmY291bnQ6ICAgIHBlci1YUENTIGNvdW50IG9mIHN1Yi1wb3J0cyBlbmFibGVkIGJ5IHBoeWxpbms7XFxuQEAgLTMxOSw2ICszMjcsMTUgQEAgc3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24ge1xcbiAgKiBAZXZsYW5faW5ncmVzc19zaXplOiBwZXItcG9ydCBpbmdyZXNzIEV4dGVuZGVkIFZMQU4gYmxvY2sgc2l6ZVxcbiAgKiBAZXZsYW5fZWdyZXNzX3NpemU6ICBwZXItcG9ydCBlZ3Jlc3MgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplXFxuICAqIEB2Zl9ibG9ja19zaXplOiAgICAgIHBlci1wb3J0IFZMQU4gRmlsdGVyIGJsb2NrIHNpemVcXG4rICogQGJsb2NrX2hvc3Q6ICAgICAgICAgcmVqZWN0IGZpcm13YXJlIEFQSSBjb21tYW5kcyAoZXhjZXB0IEZXX1VQREFURSlcXG4rICogICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgZmlybXdhcmUgZmxhc2hcXG4rICogQHNraXBfdGVhcmRvd246ICAgICAgZGlzY2FyZCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgZHVyaW5nIHRoZSB0ZWFyZG93blxcbisgKiAgICAgICAgICAgICAgICAgICAgICB0cmlnZ2VyZWQgYnkgdGhlIHBvc3QtZmxhc2ggcmVwcm9iZVxcbisgKiBAcmVzY3VlX21vZGU6ICAgICAgICBzd2l0Y2ggaXMgaW4gTUNVYm9vdDsgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGZhaWwgZmFzdCxcXG4rICogICAgICAgICAgICAgICAgICAgICAgb25seSBjbGF1c2UtMjIgU01ESU8gd29ya3NcXG4rICogQHJlc2N1ZV9yZWFkeTogICAgICAgKHJlc2N1ZV9tb2RlKSBsb2FkZXIgaXMgYXQgYSBjbGVhbiBSRUFEWSBhbmQgd2lsbCBhY2NlcHRcXG4rICogICAgICAgICAgICAgICAgICAgICAgYSBmbGFzaDsgZmFsc2Ugd2hpbGUgcmVzY3VlX2hlYWxfd29yayBpcyBkcmFpbmluZ1xcbisgKiBAcmVzY3VlX2hlYWxfd29yazogICBiYWNrZ3JvdW5kIHNlbGYtaGVhbCBkcmFpbmluZyBhIHdlZGdlZCBkb3dubG9hZCB0byBSRUFEWVxcbiAgKiBAc3RhdHNfd29yazogICAgICAgICBwZXJpb2RpYyB3b3JrIGl0ZW0gdGhhdCBwb2xscyBSTU9OIGhhcmR3YXJlIGNvdW50ZXJzXFxuICAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBhY2N1bXVsYXRlcyB0aGVtIGludG8gNjQtYml0IHBlci1wb3J0IHN0YXRzXFxuICAqL1xcbkBAIC0zMjYsOSArMzQzLDEyIEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHtcXG4gXFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzO1xcbiBcXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XFxuIFxcdHN0cnVjdCB3b3JrX3N0cnVjdCBjcmNfZXJyX3dvcms7XFxuK1xcdHN0cnVjdCB3b3JrX3N0cnVjdCByZXNjdWVfaGVhbF93b3JrO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbiBcXHR1MTYgZHJvcF9tZXRlcjtcXG4gXFx0c3RydWN0IG14bDg2Mnh4X2Z3X3ZlcnNpb24gZndfdmVyc2lvbjtcXG4rXFx0dTE2IGFzaWNfaWQ7XFxuK1xcdHU4IGFzaWNfcmV2O1xcbiBcXHRzdHJ1Y3QgbXhsODYyeHhfcGNzIHNlcmRlc19wb3J0c1s4XTtcXG4gXFx0aW50IHNlcmRlc19yZWZjb3VudFsyXTtcXG4gXFx0c3RydWN0IG11dGV4IHNlcmRlc19sb2NrO1xcbkBAIC0zMzcsNiArMzU3LDEwIEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHtcXG4gXFx0dTE2IGV2bGFuX2luZ3Jlc3Nfc2l6ZTtcXG4gXFx0dTE2IGV2bGFuX2VncmVzc19zaXplO1xcbiBcXHR1MTYgdmZfYmxvY2tfc2l6ZTtcXG4rXFx0Ym9vbCBibG9ja19ob3N0O1xcbitcXHRib29sIHNraXBfdGVhcmRvd247XFxuK1xcdGJvb2wgcmVzY3VlX21vZGU7XFxuK1xcdGJvb2wgcmVzY3VlX3JlYWR5O1xcbiBcXHRzdHJ1Y3QgZGVsYXllZF93b3JrIHN0YXRzX3dvcms7XFxuIH07XFxuIFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL25ldC9kc2EuaCBiL2luY2x1ZGUvbmV0L2RzYS5oXFxuaW5kZXggOGMxNmVmMjNjYzEwMmEuLmM5ZTE5MzQ4ZGU2MTkzIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oXFxuKysrIGIvaW5jbHVkZS9uZXQvZHNhLmhcXG5AQCAtMTE3MCw2ICsxMTcwLDkgQEAgc3RydWN0IGRzYV9zd2l0Y2hfb3BzIHtcXG4gXFx0aW50XFx0KCpkZXZsaW5rX2luZm9fZ2V0KShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXFxuIFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbiBcXHRcXHRcXHRcXHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4rXFx0aW50XFx0KCpkZXZsaW5rX2ZsYXNoX3VwZGF0ZSkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbitcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuK1xcdFxcdFxcdFxcdFxcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XFxuIFxcdGludFxcdCgqZGV2bGlua19zYl9wb29sX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbiBcXHRcXHRcXHRcXHQgICAgICAgdW5zaWduZWQgaW50IHNiX2luZGV4LCB1MTYgcG9vbF9pbmRleCxcXG4gXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKTtcXG5kaWZmIC0tZ2l0IGEvbmV0L2RzYS9kZXZsaW5rLmMgYi9uZXQvZHNhL2RldmxpbmsuY1xcbmluZGV4IGVkMzQyZjM0NTY5MmJiLi5kNjAyMjI2N2E4MzljZCAxMDA2NDRcXG4tLS0gYS9uZXQvZHNhL2RldmxpbmsuY1xcbisrKyBiL25ldC9kc2EvZGV2bGluay5jXFxuQEAgLTIwLDYgKzIwLDE1IEBAIHN0YXRpYyBpbnQgZHNhX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLFxcbiBcXHRyZXR1cm4gLUVPUE5PVFNVUFA7XFxuIH1cXG4gXFxuK3N0YXRpYyBpbnQgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkZXZsaW5rICpkbCxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4rXFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4re1xcbitcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfZGV2bGlua190b19kcyhkbCk7XFxuK1xcbitcXHRyZXR1cm4gZHMtXFx1MDAzZW9wcy1cXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGUoZHMsIHBhcmFtcywgZXh0YWNrKTtcXG4rfVxcbitcXG4gc3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXFxuIFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXFxuIFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKVxcbkBAIC0xNjcsMTggKzE3NiwzMSBAQCBkc2FfZGV2bGlua19zYl9vY2NfdGNfcG9ydF9iaW5kX2dldChzdHJ1Y3QgZGV2bGlua19wb3J0ICpkbHAsXFxuIFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBfbWF4KTtcXG4gfVxcbiBcXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19vcHMgPSB7XFxuLVxcdC5pbmZvX2dldFxcdFxcdFxcdD0gZHNhX2RldmxpbmtfaW5mb19nZXQsXFxuLVxcdC5zYl9wb29sX2dldFxcdFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsXFxuLVxcdC5zYl9wb29sX3NldFxcdFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9zZXQsXFxuLVxcdC5zYl9wb3J0X3Bvb2xfZ2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFxcbi1cXHQuc2JfcG9ydF9wb29sX3NldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX3NldCxcXG4tXFx0LnNiX3RjX3Bvb2xfYmluZF9nZXRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9nZXQsXFxuLVxcdC5zYl90Y19wb29sX2JpbmRfc2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfc2V0LFxcbi1cXHQuc2Jfb2NjX3NuYXBzaG90XFx0XFx0PSBkc2FfZGV2bGlua19zYl9vY2Nfc25hcHNob3QsXFxuLVxcdC5zYl9vY2NfbWF4X2NsZWFyXFx0XFx0PSBkc2FfZGV2bGlua19zYl9vY2NfbWF4X2NsZWFyLFxcbi1cXHQuc2Jfb2NjX3BvcnRfcG9vbF9nZXRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX29jY19wb3J0X3Bvb2xfZ2V0LFxcbisvKiBUaGUgZGV2bGluayBjb3JlIHJlamVjdHMgZmxhc2ggcmVxdWVzdHMgdXAgZnJvbnQgd2hlbiB0aGUgZmxhc2hfdXBkYXRlXFxuKyAqIG9wIGlzIGFic2VudCwgYmVmb3JlIGZldGNoaW5nIHRoZSBmaXJtd2FyZSBmaWxlIGZyb20gdXNlcnNwYWNlLiBPbmx5XFxuKyAqIGluc3RhbGwgdGhlIG9wIGZvciBzd2l0Y2hlcyB3aG9zZSBkcml2ZXIgaW1wbGVtZW50cyBpdCwgc28gdGhhdFxcbisgKiB1bnN1cHBvcnRlZCByZXF1ZXN0cyBrZWVwIGZhaWxpbmcgZWFybHkuXFxuKyAqL1xcbisjZGVmaW5lIERTQV9ERVZMSU5LX09QU1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0LmluZm9fZ2V0XFx0XFx0XFx0PSBkc2FfZGV2bGlua19pbmZvX2dldCxcXHRcXHRcXFxcXFxuK1xcdC5zYl9wb29sX2dldFxcdFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsXFx0XFxcXFxcbitcXHQuc2JfcG9vbF9zZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LFxcdFxcXFxcXG4rXFx0LnNiX3BvcnRfcG9vbF9nZXRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9nZXQsXFx0XFxcXFxcbitcXHQuc2JfcG9ydF9wb29sX3NldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfcG9ydF9wb29sX3NldCxcXHRcXFxcXFxuK1xcdC5zYl90Y19wb29sX2JpbmRfZ2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfZ2V0LCBcXFxcXFxuK1xcdC5zYl90Y19wb29sX2JpbmRfc2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfc2V0LCBcXFxcXFxuK1xcdC5zYl9vY2Nfc25hcHNob3RcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX29jY19zbmFwc2hvdCxcXHRcXFxcXFxuK1xcdC5zYl9vY2NfbWF4X2NsZWFyXFx0XFx0PSBkc2FfZGV2bGlua19zYl9vY2NfbWF4X2NsZWFyLFxcdFxcXFxcXG4rXFx0LnNiX29jY19wb3J0X3Bvb2xfZ2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl9vY2NfcG9ydF9wb29sX2dldCwgXFxcXFxcbiBcXHQuc2Jfb2NjX3RjX3BvcnRfYmluZF9nZXRcXHQ9IGRzYV9kZXZsaW5rX3NiX29jY190Y19wb3J0X2JpbmRfZ2V0LFxcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19vcHMgPSB7XFxuK1xcdERTQV9ERVZMSU5LX09QU1xcbit9O1xcbitcXG4rc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19mbGFzaF9vcHMgPSB7XFxuK1xcdERTQV9ERVZMSU5LX09QU1xcbitcXHQuZmxhc2hfdXBkYXRlXFx0XFx0XFx0PSBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUsXFxuIH07XFxuIFxcbiBpbnQgZHNhX2RldmxpbmtfcGFyYW1fZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCwgdTMyIGlkLFxcbkBAIC0zNzgsMTIgKzQwMCwxNiBAQCB2b2lkIGRzYV9zd2l0Y2hfZGV2bGlua191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4gaW50IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIHtcXG4gXFx0c3RydWN0IGRzYV9kZXZsaW5rX3ByaXYgKmRsX3ByaXY7XFxuK1xcdGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzO1xcbiBcXHRzdHJ1Y3QgZGV2bGluayAqZGw7XFxuIFxcbitcXHRvcHMgPSBkcy1cXHUwMDNlb3BzLVxcdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZSA/IFxcdTAwMjZkc2FfZGV2bGlua19mbGFzaF9vcHNcXG4rXFx0XFx0XFx0XFx0XFx0ICAgIDogXFx1MDAyNmRzYV9kZXZsaW5rX29wcztcXG4rXFxuIFxcdC8qIEFkZCB0aGUgc3dpdGNoIHRvIGRldmxpbmsgYmVmb3JlIGNhbGxpbmcgc2V0dXAsIHNvIHRoYXQgc2V0dXAgY2FuXFxuIFxcdCAqIGFkZCBkcGlwZSB0YWJsZXNcXG4gXFx0ICovXFxuLVxcdGRsID0gZGV2bGlua19hbGxvYyhcXHUwMDI2ZHNhX2Rldmxpbmtfb3BzLCBzaXplb2YoKmRsX3ByaXYpLCBkcy1cXHUwMDNlZGV2KTtcXG4rXFx0ZGwgPSBkZXZsaW5rX2FsbG9jKG9wcywgc2l6ZW9mKCpkbF9wcml2KSwgZHMtXFx1MDAzZWRldik7XFxuIFxcdGlmICghZGwpXFxuIFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbiBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTI6MzkuMDI3MDEyODAxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTU4MDQyNjU5NTc0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IG51bGwsXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGZpcm13YXJlIGZsYXNoIHN1cHBvcnQgZm9yIHRoZSBNYXhMaW5lYXIgTXhMODYyeHggRFNBIHN3aXRjaCB2aWEgZGV2bGluay4gVGhlIG14bDg2Mnh4IGRyaXZlciBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCBjb21tdW5pY2F0ZXMgd2l0aCB0aGUgcGh5c2ljYWwgc3dpdGNoIGNoaXAgb3ZlciBhbiBNRElPIGJ1cy4gRHVyaW5nIHByb2JlLCBpdCBwZXJmb3JtcyBhIGhhcmR3YXJlIHByZXNlbmNlIGNoZWNrIChteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QpIHRoYXQgcmVxdWlyZXMgdGhlIHBoeXNpY2FsIGNoaXAgdG8gbGF0Y2ggYW5kIHJldHVybiBzcGVjaWZpYyB2YWx1ZXMuIFdpdGhvdXQgdGhlIHBoeXNpY2FsIGhhcmR3YXJlICh3aGljaCBpcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVSksIHRoZSBkcml2ZXIgZmFpbHMgdG8gcHJvYmUsIG1ha2luZyB0aGUgbmV3IGRldmxpbmsgZmxhc2ggdXBkYXRlIGNvZGUgdW5yZWFjaGFibGUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gVGhlIGdlbmVyaWMgRFNBIGRldmxpbmsgcGx1bWJpbmcgY2hhbmdlcyBvbmx5IGFmZmVjdCBkcml2ZXJzIGltcGxlbWVudGluZyB0aGUgbmV3IG9wLCB3aGljaCBpcyBjdXJyZW50bHkgb25seSBteGw4NjJ4eC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDc5MzZkZjdhZjcwODk3NWM5ZDgzZWUyOTZiZjM2MTRkYzg2MjMxNjZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU3VuIEp1bCAyNiAxMTo1MjozNiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL2luZGV4LnJzdFxuaW5kZXggNDc0NTE0OGZlY2Y0ZmUuLjA1ODk5OWQwZGM1NmYyIDEwMDY0NFxuLS0tIGEvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvaW5kZXgucnN0XG4rKysgYi9Eb2N1bWVudGF0aW9uL25ldHdvcmtpbmcvZGV2bGluay9pbmRleC5yc3RcbkBAIC05NCw2ICs5NCw3IEBAIHBhcmFtZXRlcnMsIGluZm8gdmVyc2lvbnMsIGFuZCBvdGhlciBmZWF0dXJlcyBpdCBzdXBwb3J0cy5cbiAgICBtbHg1XG4gICAgbWx4c3dcbiAgICBtdjg4ZTZ4eHhcbisgICBteGw4NjJ4eFxuICAgIG5ldGRldnNpbVxuICAgIG5mcFxuICAgIG9jdGVvbnR4MlxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdCBiL0RvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5iM2U5ZjdkNGQ0OTY5ZVxuLS0tIC9kZXYvbnVsbFxuKysrIGIvRG9jdW1lbnRhdGlvbi9uZXR3b3JraW5nL2RldmxpbmsvbXhsODYyeHgucnN0XG5AQCAtMCwwICsxLDYzIEBAXG4rLi4gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcbitcbis9PT09PT09PT09PT09PT09PT09PT09PT1cbitteGw4NjJ4eCBkZXZsaW5rIHN1cHBvcnRcbis9PT09PT09PT09PT09PT09PT09PT09PT1cbitcbitUaGlzIGRvY3VtZW50IGRlc2NyaWJlcyB0aGUgZGV2bGluayBmZWF0dXJlcyBpbXBsZW1lbnRlZCBieSB0aGVcbitgYG14bDg2Mnh4YGAgZGV2aWNlIGRyaXZlci5cbitcbitJbmZvIHZlcnNpb25zXG4rPT09PT09PT09PT09PVxuK1xuK1RoZSBgYG14bDg2Mnh4YGAgZHJpdmVyIHJlcG9ydHMgdGhlIGZvbGxvd2luZyB2ZXJzaW9uc1xuK1xuKy4uIGxpc3QtdGFibGU6OiBkZXZsaW5rIGluZm8gdmVyc2lvbnMgaW1wbGVtZW50ZWRcbisgICA6d2lkdGhzOiA1IDUgNSA4NVxuK1xuKyAgICogLSBOYW1lXG4rICAgICAtIFR5cGVcbisgICAgIC0gRXhhbXBsZVxuKyAgICAgLSBEZXNjcmlwdGlvblxuKyAgICogLSBgYGFzaWMuaWRgYFxuKyAgICAgLSBmaXhlZFxuKyAgICAgLSA4NjI4XG4rICAgICAtIFRoZSBjaGlwIHBhcnQgbnVtYmVyIHJlYWQgZnJvbSB0aGUgQ0hJUCBJRCByZWdpc3RlcnMuIE5vdFxuKyAgICAgICByZXBvcnRlZCBmb3IgYSBzd2l0Y2ggc2l0dGluZyBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlIGFzIHRoZVxuKyAgICAgICByZWdpc3RlcnMgYXJlIG9ubHkgYWNjZXNzaWJsZSB3aXRoIGEgcnVubmluZyBmaXJtd2FyZS5cbisgICAqIC0gYGBhc2ljLnJldmBgXG4rICAgICAtIGZpeGVkXG4rICAgICAtIDBcbisgICAgIC0gVGhlIGNoaXAgdmVyc2lvbiByZWFkIGZyb20gdGhlIENISVAgSUQgcmVnaXN0ZXJzLiBOb3QgcmVwb3J0ZWRcbisgICAgICAgaW4gTUNVYm9vdCByZXNjdWUgbW9kZSBlaXRoZXIuXG4rICAgKiAtIGBgZndgYFxuKyAgICAgLSBydW5uaW5nLCBzdG9yZWRcbisgICAgIC0gMS4wLjcwXG4rICAgICAtIFZlcnNpb24gb2YgdGhlIGZpcm13YXJlIHJ1bm5pbmcgb24gdGhlIHN3aXRjaCwgcmVwb3J0ZWQgYXMgYm90aFxuKyAgICAgICBydW5uaW5nIGFuZCBzdG9yZWQgc2luY2UgdGhlIHN3aXRjaCBib290cyBpdCBmcm9tIGl0cyBvd24gZmxhc2guXG4rICAgICAgIEluIE1DVWJvb3QgcmVzY3VlIG1vZGUgbm90aGluZyBpcyByZXBvcnRlZCB3aGlsZSBhbiBpbnRlcnJ1cHRlZFxuKyAgICAgICBkb3dubG9hZCBpcyBzdGlsbCBiZWluZyByZWNvdmVyZWQgaW4gdGhlIGJhY2tncm91bmQ7IG9uY2UgdGhlXG4rICAgICAgIGxvYWRlciBpcyByZWFkeSB0byBhY2NlcHQgYSBuZXcgaW1hZ2UgdGhlIHZlcnNpb24gaXMgcmVwb3J0ZWQgKGFzXG4rICAgICAgIGJvdGggcnVubmluZyBhbmQgc3RvcmVkKSwgd2hpY2ggaXMgdGhlIHNpZ25hbCB0aGF0IGEgZmxhc2ggd2lsbCBiZVxuKyAgICAgICBhY2NlcHRlZC4gSXQgcmVhZHMgXCIwLjAuMFwiIHdoZW4gdGhlIHN3aXRjaCBjYW1lIHVwIHN0cmFpZ2h0IGludG9cbisgICAgICAgTUNVYm9vdCB3aXRob3V0IGV2ZXIgcnVubmluZyBmaXJtd2FyZS5cbitcbitGbGFzaCB1cGRhdGVcbis9PT09PT09PT09PT1cbitcbitUaGUgYGBteGw4NjJ4eGBgIGRyaXZlciBpbXBsZW1lbnRzIHN1cHBvcnQgZm9yIGBgZGV2bGluayBkZXYgZmxhc2hgYC5cbitUaGUgc2lnbmVkIGZpcm13YXJlIGltYWdlIGlzIHRyYW5zZmVycmVkIHRvIHRoZSBzd2l0Y2ggb3ZlciB0aGUgc2FtZVxuK01ESU8gYnVzIHdoaWNoIGlzIGFsc28gdXNlZCB0byBtYW5hZ2UgdGhlIHN3aXRjaCwgdGhlbiB2ZXJpZmllZCBhbmRcbitpbnN0YWxsZWQgYnkgdGhlIE1DVWJvb3QgYm9vdGxvYWRlciBydW5uaW5nIG9uIHRoZSBzd2l0Y2guIEFsbCBwb3J0c1xuK29mIHRoZSBzd2l0Y2ggYXJlIGNsb3NlZCBmb3IgdGhlIGR1cmF0aW9uIG9mIHRoZSB1cGRhdGUgYW5kIHRoZSBkcml2ZXJcbityZXByb2JlcyB0aGUgc3dpdGNoIGFmdGVyIGl0IGhhcyByZWJvb3RlZCBpbnRvIHRoZSBuZXcgZmlybXdhcmUuIEFcbitjb21wbGV0ZSBmbGFzaCBhbmQgcmVwcm9iZSBjeWNsZSB0YWtlcyBhYm91dCBvbmUgbWludXRlLlxuK1xuK0Egc3dpdGNoIHN0dWNrIGluIE1DVWJvb3QgcmVzY3VlIG1vZGUsIGUuZy4gYWZ0ZXIgYW4gaW50ZXJydXB0ZWRcbit1cGRhdGUsIGlzIHJlZ2lzdGVyZWQgd2l0aG91dCB1c2VyIHBvcnRzLiBJZiB0aGUgcHJldmlvdXMgZG93bmxvYWQgd2FzXG4raW50ZXJydXB0ZWQgbWlkLXRyYW5zZmVyIHRoZSBsb2FkZXIgaXMgd2VkZ2VkOyB0aGUgZHJpdmVyIGRyYWlucyBpdFxuK2JhY2sgdG8gYSBjbGVhbiByZWFkeSBzdGF0ZSBpbiB0aGUgYmFja2dyb3VuZCwgd2hpY2ggY2FuIGVhc2lseSB0YWtlXG4rbW9yZSB0aGFuIDEwIG1pbnV0ZXMuIER1cmluZyB0aGF0IHJlY292ZXJ5IGBgZGV2bGluayBkZXYgaW5mb2BgIHJlcG9ydHNcbitubyBmaXJtd2FyZSB2ZXJzaW9uIGFuZCBgYGRldmxpbmsgZGV2IGZsYXNoYGAgcmV0dXJucyBgYC1FQlVTWWBgLlxuK09uY2UgdGhlIGxvYWRlciBpcyByZWFkeSB0aGUgZmlybXdhcmUgdmVyc2lvbiBhcHBlYXJzIGFuZCBmbGFzaGluZyBhXG4rZmlybXdhcmUgaW1hZ2UgdGhyb3VnaCB0aGUgcmVndWxhciB1cGRhdGUgZmxvdyByZWNvdmVycyB0aGUgc3dpdGNoLlxuZGlmZiAtLWdpdCBhL01BSU5UQUlORVJTIGIvTUFJTlRBSU5FUlNcbmluZGV4IDYwY2ZmMDA5NTNkY2JlLi4zYTU1ZWQyYmFkOWNiYSAxMDA2NDRcbi0tLSBhL01BSU5UQUlORVJTXG4rKysgYi9NQUlOVEFJTkVSU1xuQEAgLTE2MTA3LDYgKzE2MTA3LDcgQEAgTTpcdERhbmllbCBHb2xsZSBcdTAwM2NkYW5pZWxAbWFrcm90b3BpYS5vcmdcdTAwM2VcbiBMOlx0bmV0ZGV2QHZnZXIua2VybmVsLm9yZ1xuIFM6XHRNYWludGFpbmVkXG4gRjpcdERvY3VtZW50YXRpb24vZGV2aWNldHJlZS9iaW5kaW5ncy9uZXQvZHNhL21heGxpbmVhcixteGw4NjJ4eC55YW1sXG4rRjpcdERvY3VtZW50YXRpb24vbmV0d29ya2luZy9kZXZsaW5rL214bDg2Mnh4LnJzdFxuIEY6XHRkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvXG4gRjpcdG5ldC9kc2EvdGFnX214bDg2Mnh4LmNcbiBcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGUgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvTWFrZWZpbGVcbmluZGV4IGE3YmUwZTY2NjlkZmE1Li5iY2NhYzBkMGY3MDNmNiAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9NYWtlZmlsZVxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L01ha2VmaWxlXG5AQCAtMSwzICsxLDMgQEBcbiAjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gb2JqLSQoQ09ORklHX05FVF9EU0FfTVhMODYyKSArPSBteGw4NjJ4eF9kc2Eub1xuLW14bDg2Mnh4X2RzYS15IDo9IG14bDg2Mnh4Lm8gbXhsODYyeHgtaG9zdC5vIG14bDg2Mnh4LXBoeWxpbmsub1xuK214bDg2Mnh4X2RzYS15IDo9IG14bDg2Mnh4Lm8gbXhsODYyeHgtaG9zdC5vIG14bDg2Mnh4LXBoeWxpbmsubyBteGw4NjJ4eC1mdy5vXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWFwaS5oXG5pbmRleCBhMTgwYTVkZWNmZmMwMS4uNmY3NzE4OTU5ODRjYjMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtYXBpLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1hcGkuaFxuQEAgLTEyMjQsNiArMTIyNCwxNiBAQCBzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24ge1xuIFx0X19sZTMyIGl2X2J1aWxkX251bTtcbiB9IF9fcGFja2VkO1xuIFxuKy8qKlxuKyAqIHN0cnVjdCBteGw4NjJ4eF9zeXNfcmVnX3J3IC0gU3lzdGVtIHJlZ2lzdGVyIHJlYWQvd3JpdGVcbisgKiBAYWRkcjogMzItYml0IHJlZ2lzdGVyIGFkZHJlc3NcbisgKiBAdmFsOiByZWdpc3RlciB2YWx1ZVxuKyAqL1xuK3N0cnVjdCBteGw4NjJ4eF9zeXNfcmVnX3J3IHtcbitcdF9fbGUzMiBhZGRyO1xuK1x0X19sZTMyIHZhbDtcbit9IF9fcGFja2VkO1xuK1xuIC8qKlxuICAqIGVudW0gbXhsODYyeHhfcG9ydF90eXBlIC0gUG9ydCBUeXBlXG4gICogQE1YTDg2MlhYX0xPR0lDQUxfUE9SVDogTG9naWNhbCBQb3J0XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWNtZC5oXG5pbmRleCBjODdhOTU1YzEzYzQ4ZS4uYTg2NTQyNWFhNjFlMWYgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtY21kLmhcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1jbWQuaFxuQEAgLTcwLDcgKzcwLDkgQEBcbiAjZGVmaW5lIElOVF9HUEhZX1JFQURcdFx0XHQoR1BZX0dQWTJYWF9NQUdJQyArIDB4MSlcbiAjZGVmaW5lIElOVF9HUEhZX1dSSVRFXHRcdFx0KEdQWV9HUFkyWFhfTUFHSUMgKyAweDIpXG4gXG4rI2RlZmluZSBTWVNfTUlTQ19GV19VUERBVEVcdFx0KFNZU19NSVNDX01BR0lDICsgMHgxKVxuICNkZWZpbmUgU1lTX01JU0NfRldfVkVSU0lPTlx0XHQoU1lTX01JU0NfTUFHSUMgKyAweDIpXG4rI2RlZmluZSBTWVNfTUlTQ19SRUdfUkRcdFx0XHQoU1lTX01JU0NfTUFHSUMgKyAweDgpXG4gXG4gI2RlZmluZSBNWEw4NjJYWF9YUENTX1BDU19DT05GSUdcdChNWEw4NjJYWF9YUENTX01BR0lDICsgMHgxKVxuICNkZWZpbmUgTVhMODYyWFhfWFBDU19QQ1NfR0VUX1NUQVRFXHQoTVhMODYyWFhfWFBDU19NQUdJQyArIDB4MilcbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmQyOGNlYjk4Y2Q1NjRlXG4tLS0gL2Rldi9udWxsXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY1xuQEAgLTAsMCArMSw4ODQgQEBcbisvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlclxuKy8qXG4rICogRmlybXdhcmUgZmxhc2ggYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgTWF4TGluZWFyIE14TDg2Mnh4XG4rICpcbisgKiBDb3B5cmlnaHQgKEMpIDIwMjUgRGFuaWVsIEdvbGxlIFx1MDAzY2RhbmllbEBtYWtyb3RvcGlhLm9yZ1x1MDAzZVxuKyAqXG4rICogU0IgUERJIC0gZmlybXdhcmUgZG93bmxvYWQgaW50ZXJmYWNlIG92ZXIgY2xhdXNlLTIyIFNNRElPXG4rICogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rICpcbisgKiBUaGUgTXhMODYyeHggTUNVYm9vdCBsb2FkZXIgYWNjZXB0cyBhIGZpcm13YXJlIGltYWdlIHRocm91Z2ggZm91ciBcIlNCIFBESVwiXG4rICogcmVnaXN0ZXJzIGluIHRoZSBzd2l0Y2ggU01ESU8gcmVnaXN0ZXIgc3BhY2UuIEl0IHJ1bnMgd2hlbmV2ZXIgbm8gV1NQXG4rICogZmlybXdhcmUgaXMgYWN0aXZlOiB0aGUgbm9ybWFsIGZpcm13YXJlIHVwZGF0ZSBlbnRlcnMgaXQgZGVsaWJlcmF0ZWx5IC0gdGhlXG4rICogU1lTX01JU0NfRldfVVBEQVRFIEFQSSBjb21tYW5kIHNldHMgYSBzdGlja3kgcmVzY3VlIGJpdCBhbmQgcmVib290cyBpbnRvXG4rICogTUNVYm9vdCAtIGFuZCB0aGUgbG9hZGVyIGFsc28gc3RheXMgaGVyZSB3aGVuIHRoZSBzdG9yZWQgV1NQIGZpcm13YXJlIGZhaWxzXG4rICogaXRzIGJvb3QtdGltZSBpbnRlZ3JpdHkgY2hlY2suIFRoaXMgZHJpdmVyIGRyaXZlcyB0aGUgbG9hZGVyJ3MgMHhjNTVjXG4rICogXCJjb25zb2xlXCIgZG93bmxvYWQgcGF0aC5cbisgKlxuKyAqIFNNRElPIHJlZ2lzdGVyIGFjY2VzcyAobXhsODYyeHhfc21kaW9fcmVhZC93cml0ZSk6XG4rICogICBNSUkgcmVnIDB4MWYgOj0gXHUwMDNjc2JfcGRpX3JlZ1x1MDAzZSAgICAgIDsgYWRkcmVzcy9wYWdlIGxhdGNoXG4rICogICBNSUkgcmVnIDB4MDAgOj0gLyA9XHUwMDNlIFx1MDAzY3UxNiBkYXRhXHUwMDNlICAgOyBkYXRhIHdpbmRvd1xuKyAqXG4rICogU0IgUERJIHJlZ2lzdGVycyAoaG9zdCBuYW1lL2FkZHIgIC1cdTAwM2UgIE1DVSBtYWlsYm94KTpcbisgKiAgIENUUkwgMHhlMTAwIC1cdTAwM2UgMHhjMDkzODQwMCAgIG1vZGU6IFJTVD0weDAwICBSRD0weDAxICBXUj0weDAyXG4rICogICBBRERSIDB4ZTEwMSAtXHUwMDNlIDB4YzA5Mzg0MDQgICBTQiB0YXJnZXQgd29yZCBhZGRyZXNzIChTQjEgYmFuayA9IDB4NzgwMClcbisgKiAgIERBVEEgMHhlMTAyIC1cdTAwM2UgMHhjMDkzODQwOCAgIDE2LWJpdCBkYXRhIC8gcmVwbHkgd29yZFxuKyAqICAgU1RBVCAweGUxMDMgLVx1MDAzZSAweGMwOTM4NDBjICAgaGFuZHNoYWtlOiBhIG1hZ2ljIChiZWxvdykgb3IgYSBieXRlIGNvdW50XG4rICpcbisgKiBTVEFUIG1hZ2ljczpcbisgKiAgIFJFQURZICAweGM1NWMgICBsb2FkZXIgaWRsZSBpbiB0aGUgY29uc29sZSBsb29wICAgICAgICAodGhpcyBkcml2ZXIpXG4rICogICBETF9SRFkgMHhjMzNjICAgbG9hZGVyIGlkbGUgaW4gdGhlIGZsYXNobGVzcyBsb29wXG4rICogICBTVEFSVCAgMHhmNDhmICAgaG9zdCAgIC1cdTAwM2UgYmVnaW4gZG93bmxvYWQgc2Vzc2lvblxuKyAqICAgQUNLICAgIDB4ZjQ5MCAgIGxvYWRlciAtXHUwMDNlIFNUQVJUIGFja25vd2xlZGdlZCAoU1RBUlQgKyAxKVxuKyAqICAgRU5EICAgIDB4M2NjMyAgIGhvc3QgICAtXHUwMDNlIGVuZCBvZiB0cmFuc2ZlciAvIGZpbmFsaXNlXG4rICogICBSRFJFRyAgMHhlMmMwICAgaG9zdCAgIC1cdTAwM2UgcmVnaXN0ZXItcmVhZCBjb21tYW5kICh8IGluZGV4KSwgc2VlIGJlbG93XG4rICpcbisgKiBDb25zb2xlIGZsYXNoIHBhdGggKFNUQVQ9MHhjNTVjKSAtIG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKCk6XG4rICpcbisgKiAgIGhvc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxvYWRlclxuKyAqICAgLS0tLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0tLS0tXG4rICogICByZXNldCAoQ1RSTD1BRERSPURBVEE9MClcbisgKiAgIHJlYWQgU1RBVCAuLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uLi4uIDB4YzU1YyAgIChSRUFEWSwgaWRsZSlcbisgKiAgIFNUQVQgOj0gU1RBUlQoMHhmNDhmKSAgLS0tLS0tLS0tLS0tLS1cdTAwM2VcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgXHUwMDNjLS0tLS0tLS0tLS0tLS0gU1RBVCA9IDB4ZjQ5MCAoQUNLKVxuKyAqICAgQ1RSTCA6PSBXUlxuKyAqICAgREFUQSA6PSBoZHJbMC4uOV0gICgyMC1ieXRlIGhlYWRlcjogdHlwZSxzaXplMSxjcmMxLHNpemUyLGNyYzIpXG4rICogICByZXNldDsgU1RBVCA6PSAyMCAoaGVhZGVyIGxlbikgIC0tLS0tXHUwMDNlIHBhcnNlIGhkcjsgcl9yZW1haW49c2l6ZTErc2l6ZTI7XG4rICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFUkFTRSB0YXJnZXQgcmVnaW9uKHMpXG4rICogICAgICAgICAgICAgICAgICAgICAgICAgIFx1MDAzYy0tLS0tLS0tLS0tLS0tIFNUQVQ9MjEgKGxlbisxKSwgdGhlbiBTVEFUPTBcbisgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChlcmFzZWQpXG4rICogICAtLSBwYXlsb2FkLCBzdHJlYW1lZCBpbiBzbGljZXM6IC0tXG4rICogICBDVFJMIDo9IFdSXG4rICogICBEQVRBIDo9IHdvcmQgeCBOIC4uLlxuKyAqICAgICBhdCB3b3JkIDE2Mzg0OiByZXNldDsgQUREUjo9MHg3ODAwOyBDVFJMOj1XUiAgIChoYWxmLWJhbmsgLVx1MDAzZSBTQjEpXG4rICogICAgIGF0IHdvcmQgMzI3NjA6IGZsdXNoIHNsaWNlOlxuKyAqICAgICAgICByZXNldDsgU1RBVCA6PSBcdTAwM2NieXRlc190aGlzX3NsaWNlXHUwMDNlIC0tLVx1MDAzZSByX3JlbWFpbiAtPSBieXRlczsgcHJvZ3JhbVxuKyAqICAgICAgICAgICAgICAgICAgICAgICAgICBcdTAwM2MtLS0tLS0tLS0tLS0tLS0tLS0tIFNUQVQ9MCAgKHJlYWR5IGZvciBuZXh0IHNsaWNlKVxuKyAqICAgLi4uIHJlcGVhdCB1bnRpbCB0aGUgd2hvbGUgcGF5bG9hZCBpcyBzZW50IC4uLlxuKyAqICAgU1RBVCA6PSBFTkQoMHgzY2MzKSAgLS0tLS0tLS0tLS0tLS0tLS0tLS0tXHUwMDNlIGZpbmFsaXNlXG4rICpcbisgKiBUaGUgcl9yZW1haW4gPT0gMCBydWxlIChjcml0aWNhbCk6XG4rICogICBFdmVyeSBob3N0IFNUQVQgd3JpdGUgaW4gdGhlIHBheWxvYWQgcGhhc2UgaXMgYSBieXRlIGNvdW50OyB0aGUgbG9hZGVyXG4rICogICBkb2VzIHJfcmVtYWluIC09IGNvdW50IGFuZCBzdGF5cyBpbiB0aGUgcmVjZWl2ZSBsb29wIHdoaWxlIHJfcmVtYWluICE9IDAuXG4rICogICBJdCBsZWF2ZXMgdGhlIGxvb3AsIHZhbGlkYXRlcywgYW5kIC0gaWYgaXQgd2FzIGluIHJlc2N1ZSAtIGNsZWFycyBpdHNcbisgKiAgIHJlc2N1ZS1lbmFibGUgYml0IHNvIGJvb3RfZ28gYm9vdHMgdGhlIG5ldyBpbWFnZSwgT05MWSB3aGVuIHJfcmVtYWluIGhpdHNcbisgKiAgIEVYQUNUTFkgMC4gQSBjb3VudCBsYXJnZXIgdGhhbiByX3JlbWFpbiB1bmRlcmZsb3dzIHRoZSAzMi1iaXQgY291bnRlciBhbmRcbisgKiAgIHdlZGdlcyB0aGUgbG9hZGVyIHVudGlsIGEgcG93ZXIgY3ljbGUuIEhlbmNlOlxuKyAqICAgICAtIG5ldmVyIHNlbmQgYSBzbGljZS9jaHVuayBjb3VudCBsYXJnZXIgdGhhbiB3aGF0IGlzIG91dHN0YW5kaW5nO1xuKyAqICAgICAtIGludGVycnVwdGVkLWRvd25sb2FkIHJlY292ZXJ5IGZlZWRzIDEgYnl0ZSBhdCBhIHRpbWUgKHNlZSBiZWxvdykuXG4rICpcbisgKiBJbnRlcnJ1cHRlZC1mbGFzaCByZWNvdmVyeSAobXhsODYyeHhfcmVzY3VlX2RyYWluKTpcbisgKiAgIEEgaG9zdCB0aGF0IGRpZXMgbWlkLXBheWxvYWQgbGVhdmVzIHRoZSBsb2FkZXIgc3Bpbm5pbmcgaW4gdGhlIHNsaWNlIGxvb3BcbisgKiAgIGhvbGRpbmcgU1RBVD0wIChubyBtYWdpYykuIEZlZWQgc2luZ2xlIDEtYnl0ZSBjaHVua3MgKG9uZSBEQVRBIHdvcmQgK1xuKyAqICAgU1RBVD0xKSB1bnRpbCByX3JlbWFpbiByZWFjaGVzIDAsIHRoZW4gU1RBVD1FTkQ7IHRoZSBsb2FkZXIgZmluYWxpc2VzIHRoZVxuKyAqICAgKG5vdyBjb3JydXB0KSBpbWFnZSBhbmQgcmUtYXJtcyBSRUFEWSBmb3IgYSBjbGVhbiByZWZsYXNoLlxuKyAqXG4rICogUmVnaXN0ZXItcmVhZCBjaGFsbGVuZ2UgKG5vbi1kZXN0cnVjdGl2ZSBsaXZlbmVzcyBwcm9vZik6XG4rICogICBEQVRBIDo9IDB4N2MyMyAobWFya2VyKTsgU1RBVCA6PSAweGUyYzB8aWR4XG4rICogICAgIC1cdTAwM2UgbG9hZGVyIHJldHVybnMgYSBydW50aW1lIHdvcmQgaW4gREFUQSBhbmQgcmUtYXJtcyBTVEFUPTB4YzU1Yy5cbisgKiAgIFRoZSByZXBseSBzb3VyY2UgaXMgbG9hZGVyIEJTUywgbm90IGEgY2hpcCBpZDsgdXNlZCBvbmx5IHRvIHByb3ZlIGEgbGl2ZVxuKyAqICAgbWFpbGJveCBpbiBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QoKS5cbisgKlxuKyAqIFRoZSBvdGhlciBTVEFUIHJlYWR5IG1hZ2ljLCAweGMzM2MsIG1hcmtzIHRoZSBsb2FkZXIncyBmbGFzaGxlc3NcbisgKiBjaGlwLXRvLWNoaXAgZG93bmxvYWQgbW9kZSAoTXhMODYyODFTIDE2LXBvcnQgdGllcik7IHRoaXMgZHJpdmVyIGRvZXMgbm90XG4rICogdXNlIGl0LlxuKyAqXG4rICogUmVzY3VlIGxpZmVjeWNsZSAoZGV2bGluayk6IHByb2JlIHJ1bnMgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCk7IGEgd2VkZ2VkXG4rICogbG9hZGVyIGlzIGRyYWluZWQgYmFjayB0byBSRUFEWSBieSBhIGJhY2tncm91bmQgc2VsZi1oZWFsIChyZXNjdWVfaGVhbF93b3JrKSBzb1xuKyAqIHRoZSBtdWx0aS1taW51dGUgcmVjb3ZlcnkgbmV2ZXIgaG9sZHMgdGhlIGRldmxpbmsgbG9jay4gZGV2bGluayBkZXYgaW5mb1xuKyAqIGV4cG9zZXMgdGhlIGZ3IHZlcnNpb24gKHRoZSBcImZsYXNoYWJsZVwiIHNpZ25hbCkgb25seSBvbmNlIGF0IFJFQURZO1xuKyAqIGZsYXNoX3VwZGF0ZSByZXR1cm5zIC1FQlVTWSB1bnRpbCB0aGVuLCBhbmQgcmVwcm9iZXMgdG8gV1NQIGZpcm13YXJlIG9uIHN1Y2Nlc3MuXG4rICpcbisgKiBOb3RlczpcbisgKiAgIC0gQ2hpcCBpZC9yZXZpc2lvbiAoMHhjMGQyODg4NC84OCkgYXJlIE5PVCByZWFjaGFibGUgb24gdGhpcyBjaGFubmVsOyB0aGV5XG4rICogICAgIG5lZWQgdGhlIGNsYXVzZS00NSBNTUQgZmlybXdhcmUgbWFpbGJveCwgd2hpY2ggaXMgZGVhZCB1bmRlciBNQ1Vib290LlxuKyAqICAgICBSZXNjdWUgaWRlbnRpdHkgaXMgYnkgU0IgUERJIGJlaGF2aW91ciBvbmx5IChteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3QpLlxuKyAqICAgLSBUaGUgU01ESU8gUEhZIGFkZHJlc3MgYW5kIHRoZSAweGUxeHggb2Zmc2V0cyBhcmUgT1RQLWNvbmZpZ3VyYWJsZTsgZGVyaXZlXG4rICogICAgIHRoZW0gZnJvbSB0aGUgRFQgYmluZGluZywgZG8gbm90IGFzc3VtZSBmaXhlZCB2YWx1ZXMuXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY3JjMzIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9kZXZpY2UuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L21vZHVsZS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbmV0ZGV2aWNlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9vdmVyZmxvdy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvcnRuZXRsaW5rLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC93b3JrcXVldWUuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9kc2EuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY25ldC9zd2l0Y2hkZXYuaFx1MDAzZVxuK1xuKyNpbmNsdWRlIFwibXhsODYyeHguaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1hcGkuaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1jbWQuaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1mdy5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWhvc3QuaFwiXG4rXG4rLyogU0IgUERJIHJlZ2lzdGVycyAoY2xhdXNlLTIyIFNNRElPIGFkZHJlc3Mgc3BhY2UpICovXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTFx0XHQweGUxMDBcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9BRERSXHRcdDB4ZTEwMVxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0RBVEFcdFx0MHhlMTAyXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfU1RBVFx0XHQweGUxMDNcbitcbisvKiBTQiBQREkgQ1RSTCBtb2RlcyAqL1xuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUXHQweDAwXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUlx0XHQweDAyXG4rXG4rLyogU0IgUERJIGhhbmRzaGFrZSBtYWdpYyAocHVibGlzaGVkL2NvbnN1bWVkIHZpYSBTVEFUKSAqL1xuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JFQURZXHRcdDB4YzU1Y1x0LyogbG9hZGVyIGlkbGUsIGNvbnNvbGUgbG9vcCAqL1xuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0RMX1JFQURZXHQweGMzM2NcdC8qIGxvYWRlciBpZGxlLCBmbGFzaGxlc3MgbG9vcCAqL1xuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1NUQVJUXHRcdDB4ZjQ4ZlxuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX0VORFx0XHQweDNjYzNcbisjZGVmaW5lIE1YTDg2MlhYX1NCX1BESV9SRFJFR1x0XHQweGUyYzBcdC8qIHJlZ2lzdGVyLXJlYWQgY21kICh8IGluZGV4KSAqL1xuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUktcdDB4N2MyM1x0LyogbWFya2VyIHBsYWNlZCBpbiBEQVRBIGZvciBSRFJFRyAqL1xuK1xuKy8qIEJlaGF2aW91cmFsIHByZXNlbmNlIHByb2JlOiB0d28gZGlzdGluY3QgMTYtYml0IGxhdGNoZXMgb24gQUREUi9EQVRBLiAqL1xuKyNkZWZpbmUgTVhMODYyWFhfU0JfUERJX1BST0JFX0FcdFx0MHg1YTVhXG4rI2RlZmluZSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRFx0XHQweGE1YTVcbitcbisvKiBGaXJtd2FyZSB0cmFuc2ZlciBnZW9tZXRyeSAqL1xuKyNkZWZpbmUgTVhMODYyWFhfRldfSERSX1NJWkVcdFx0MjBcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX0JBTktfSEFMRlx0XHQxNjM4NFx0Lyogd29yZHMgcGVyIGhhbGYtYmFuayAqL1xuKyNkZWZpbmUgTVhMODYyWFhfRldfQkFOS19TTElDRVx0XHQzMjc2MFx0Lyogd29yZHMgcGVyIGZ1bGwgc2xpY2UgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1NCMV9BRERSXHRcdDB4NzgwMFx0LyogU0IxIHdvcmQgYWRkcmVzcyAqL1xuK1xuKy8qIFRpbWVvdXRzIChnZW5lcm91cyB1cHBlciBib3VuZHMpICovXG4rI2RlZmluZSBNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TXHQzMDAwXG4rI2RlZmluZSBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NU1x0NTAwMFxuKyNkZWZpbmUgTVhMODYyWFhfRldfRVJBU0VfVElNRU9VVF9NU1x0MzAwMDAwXG4rI2RlZmluZSBNWEw4NjJYWF9GV19XUklURV9USU1FT1VUX01TXHQxMjAwMDBcbisjZGVmaW5lIE1YTDg2MlhYX0ZXX1JFQk9PVF9ERUxBWV9NU1x0NTAwMFxuKyNkZWZpbmUgTVhMODYyWFhfRldfUkVQUk9CRV9ERUxBWV9NU1x0NTAwXG4rI2RlZmluZSBNWEw4NjJYWF9SRVNDVUVfUkVBRFlfVElNRU9VVF9NUyAxMDAwXG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9zYl9wZGlfcmVzZXQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcbitcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0cmV0dXJuIG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLFxuK1x0XHRcdFx0ICAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1JTVCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiwgdTE2IGV4cGVjdGVkLFxuK1x0XHRcdFx0ICAgICB1bnNpZ25lZCBsb25nIHRpbWVvdXRfbXMpXG4re1xuK1x0dW5zaWduZWQgbG9uZyB0aW1lb3V0ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXModGltZW91dF9tcyk7XG4rXHRpbnQgcmV0O1xuK1xuK1x0ZG8ge1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb19yZWFkKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFUKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRpZiAoKHUxNilyZXQgPT0gZXhwZWN0ZWQpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdHVzbGVlcF9yYW5nZSgxMDAwMCwgMTEwMDApO1xuK1x0fSB3aGlsZSAodGltZV9iZWZvcmUoamlmZmllcywgdGltZW91dCkpO1xuK1xuK1x0cmV0dXJuIC1FVElNRURPVVQ7XG4rfVxuK1xuK3N0YXRpYyBpbnQgbXhsODYyeHhfc2JfcGRpX2ZsdXNoX3NsaWNlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuK1x0XHRcdFx0ICAgICAgIHUzMiBkYXRhX3dyaXR0ZW4pXG4re1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCwgZGF0YV93cml0dGVuKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLFxuK1x0XHRcdFx0XHQgTVhMODYyWFhfRldfV1JJVEVfVElNRU9VVF9NUyk7XG4rfVxuK1xuK3N0YXRpYyB2b2lkIG14bDg2Mnh4X2ZsYXNoX25vdGlmeShzdHJ1Y3QgZGV2bGluayAqZGwsIGNvbnN0IGNoYXIgKnN0YXR1cyxcbitcdFx0XHRcdCAgdTMyIGRvbmUsIHUzMiB0b3RhbClcbit7XG4rXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBzdGF0dXMsIE5VTEwsIGRvbmUsIHRvdGFsKTtcbit9XG4rXG4rLyogQnl0ZS1jb3VudCBvZiBlYWNoIGNodW5rIGZlZCB0byB0aGUgbG9hZGVyIGR1cmluZyBkcmFpbi4gSXQgTVVTVCBiZSAxOiB0aGVcbisgKiBsb2FkZXIgb25seSBsZXRzIHVzIG9ic2VydmUgXCJjb3VudGVyID09IDBcIiwgbmV2ZXIgXCJjb3VudGVyIFx1MDAzYyBzdGVwXCIsIHNvIGFueVxuKyAqIHN0ZXAgXHUwMDNlIDEgY2FuIHN1YnRyYWN0IHBhc3QgemVybywgdW5kZXJmbG93IHRoZSAzMi1iaXQgY291bnRlciBhbmQgd2VkZ2UgdGhlXG4rICogbG9hZGVyIGZvciB+Ml4zMiBtb3JlIGJ5dGVzIChhIHN0YXRlIG9ubHkgYSBwb3dlciBjeWNsZSBjbGVhcnMpLiBTdGVwcGluZyBieVxuKyAqIDEgd2Fsa3MgdGhlIGNvdW50ZXIgdGhyb3VnaCBldmVyeSB2YWx1ZSBhbmQgaXMgZ3VhcmFudGVlZCB0byBsYW5kIG9uIHplcm9cbisgKiB3aGF0ZXZlciBpdHMgKHBvc3NpYmx5IG9kZCkgc3RhcnQuIEEgMS1ieXRlIGNodW5rIGlzIGEgcGF0aCB0aGUgbG9hZGVyXG4rICogYWxyZWFkeSBoYW5kbGVzOiB0aGUgbm9ybWFsIHRyYW5zZmVyIGVuZHMgd2l0aCBhIHNpbmdsZSB0cmFpbGluZyBieXRlIGZvclxuKyAqIG9kZC1zaXplZCBpbWFnZXMgKHNlZSBTdGVwIDYpLlxuKyAqL1xuKyNkZWZpbmUgTVhMODYyWFhfRFJBSU5fQ0hVTktfQllURVNcdDFcbitcbisvKiBQb2xsIFNUQVQgd2hpbGUgZHJhaW5pbmcgYSBzdHVjayBkb3dubG9hZDogMCBtZWFucyBcImZlZWQgdGhlIG5leHQgY2h1bmtcIixcbisgKiBSRUFEWSBtZWFucyB0aGUgbG9hZGVyIGxlZnQgdGhlIHJlY2VpdmUgbG9vcCBhbmQgcmUtYXJtZWQgaXRzIGNvbW1hbmQgbG9vcCxcbisgKiBhbnl0aGluZyBlbHNlIGlzIGEgdHJhbnNpZW50ICh0aGUgY291bnQgYmVpbmcgY29uc3VtZWQpIC0gQlVTWSBwYXN0IHRoZVxuKyAqIHdpbmRvdyBtZWFucyB0aGUgY291bnRlciBoYXMgaGl0IHplcm8gYW5kIHRoZSBsb2FkZXIgaXMgZmluYWxpc2luZy5cbisgKi9cbitlbnVtIHsgTVhMODYyWFhfRFJBSU5fRkVFRCwgTVhMODYyWFhfRFJBSU5fUkVBRFksIE1YTDg2MlhYX0RSQUlOX0JVU1kgfTtcbitzdGF0aWMgaW50IG14bDg2Mnh4X3NiX3BkaV9wb2xsX2RyYWluKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyB0aW1lb3V0X21zKVxuK3tcbitcdHVuc2lnbmVkIGxvbmcgdGltZW91dCA9IGppZmZpZXMgKyBtc2Vjc190b19qaWZmaWVzKHRpbWVvdXRfbXMpO1xuK1x0aW50IHJldDtcbitcbitcdGRvIHtcbitcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0aWYgKCh1MTYpcmV0ID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSlcbitcdFx0XHRyZXR1cm4gTVhMODYyWFhfRFJBSU5fUkVBRFk7XG4rXHRcdGlmICgodTE2KXJldCA9PSAwKVxuK1x0XHRcdHJldHVybiBNWEw4NjJYWF9EUkFJTl9GRUVEO1xuK1x0XHR1c2xlZXBfcmFuZ2UoNTAsIDE1MCk7XG4rXHR9IHdoaWxlICh0aW1lX2JlZm9yZShqaWZmaWVzLCB0aW1lb3V0KSk7XG4rXG4rXHRyZXR1cm4gTVhMODYyWFhfRFJBSU5fQlVTWTtcbit9XG4rXG4rLyogUmVjb3ZlciBhIHN3aXRjaCB3aG9zZSBTQiBQREkgZG93bmxvYWQgd2FzIGludGVycnVwdGVkIG1pZC10cmFuc2ZlciAtIHRoZVxuKyAqIGhvc3QgZGllZCBhZnRlciBNQ1Vib290IGJlZ2FuIGVyYXNpbmcgZmxhc2gsIHdoZXRoZXIgaXQgYWJvcnRlZCBtaWQgZXJhc2Ugb3JcbisgKiBtaWQgaW1hZ2Utd3JpdGUsIGJvdGggZW5kIHVwIGluIHRoZSBzYW1lIHBsYWNlOiB0aGUgcGF5bG9hZCByZWNlaXZlIGxvb3AuXG4rICogVGhlcmUgdGhlIGxvYWRlciBwdWJsaXNoZXMgU1RBVD0wLCB3YWl0cyBmb3IgdGhlIGhvc3QgdG8gd3JpdGUgYSBieXRlLWNvdW50XG4rICogdG8gU1RBVCwgRE1BcyB0aGF0IG1hbnkgYnl0ZXMgYW5kIHN1YnRyYWN0cyB0aGUgY291bnQgZnJvbSBhIHJlbWFpbmluZy1ieXRlc1xuKyAqIGNvdW50ZXIsIGxlYXZpbmcgdGhlIGxvb3Agb25seSB3aGVuIHRoZSBjb3VudGVyIHJlYWNoZXMgZXhhY3RseSB6ZXJvLiBUaGVcbisgKiBpbWFnZSBzaXplIGRpZWQgd2l0aCB0aGUgaG9zdCwgc28gd2UgZmVlZCBzaW5nbGUtYnl0ZSBjaHVua3MgKHNlZVxuKyAqIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTKSB0byB3YWxrIHRoZSBjb3VudGVyIHRvIHplcm8gd2l0aG91dCB1bmRlcmZsb3csXG4rICogdGhlbiBzZW5kIEVORC4gVGhlIGxvYWRlciBydW5zIGl0cyAoZmFpbGVkKSBjaGVja3N1bSBhbmQgZWl0aGVyIHJlLWFybXNcbisgKiBSRUFEWSBvciwgaWYgYSB2YWxpZCBpbWFnZSBzdXJ2aXZlZCBpbiBmbGFzaCwgYm9vdHMgaXQuIFJldHVybnMgMCB3aGVuIFJFQURZXG4rICogaXMgcmVhY2hlZCAodGhlIGNhbGxlciBjYW4gZmxhc2gpLCAxIHdoZW4gdGhlIGxvYWRlciBib290ZWQgaW5zdGVhZCAodGhlXG4rICogc3dpdGNoIGlzIHJlY292ZXJlZCBidXQgdGhlIGludGVuZGVkIGltYWdlIHdhcyBub3Qgd3JpdHRlbiksIFx1MDAzYzAgb24gZXJyb3IuXG4rICogRG9lcyBOT1QgcmVjb3ZlciBhIGNvdW50ZXIgYWxyZWFkeSB1bmRlcmZsb3dlZCBieSBhbiBlYXJsaWVyIG92ZXJzaXplZC1jaHVua1xuKyAqIGF0dGVtcHQgLSB0aGF0IG5lZWRzIGEgcG93ZXIgY3ljbGUuXG4rICovXG4rc3RhdGljIGludCBteGw4NjJ4eF9yZXNjdWVfZHJhaW4oc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbitcdC8qIEJvdW5kOiB0d2ljZSB0aGUgbG9hZGVyJ3MgMTYgTWlCIGltYWdlIGNhcCwgb25lIGJ5dGUgcGVyIGNodW5rLiAqL1xuK1x0dTMyIG1heF9jaHVua3MgPSAydSAqICgxNnUgXHUwMDNjXHUwMDNjIDIwKSAvIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTO1xuK1x0dTMyIGNodW5rID0gMDtcbitcdGludCByZXQ7XG4rXG4rXHRkZXZfd2FybihkZXYsIFwiZmxhc2g6IGRyYWluaW5nIGludGVycnVwdGVkIGRvd25sb2FkXFxuXCIpO1xuK1xuK1x0d2hpbGUgKGNodW5rIFx1MDAzYyBtYXhfY2h1bmtzKSB7XG4rXHRcdC8qIFRlYXJkb3duIGNhbiBpbnRlcnJ1cHQgdGhpcyBtaW51dGVzLWxvbmcgZHJhaW4uICovXG4rXHRcdGlmICh0ZXN0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXHUwMDI2cHJpdi1cdTAwM2VmbGFncykpXG4rXHRcdFx0cmV0dXJuIC1FQ0FOQ0VMRUQ7XG4rXG4rXHRcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX2RyYWluKHByaXYsIDIwMDApO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdGlmIChyZXQgPT0gTVhMODYyWFhfRFJBSU5fUkVBRFkpXG4rXHRcdFx0cmV0dXJuIDA7XG4rXHRcdGlmIChyZXQgPT0gTVhMODYyWFhfRFJBSU5fQlVTWSlcbitcdFx0XHRicmVhaztcbitcbitcdFx0LyogRmVlZCBvbmUgemVybyBieXRlOyByZXNldCBjbGVhcmVkIHRoZSB3cml0ZSBsYXRjaC4gKi9cbitcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4rXHRcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgMHgwMDAwKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0XHRcdCAgIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRyZXR1cm4gcmV0O1xuK1x0XHRjaHVuaysrO1xuK1x0XHRjb25kX3Jlc2NoZWQoKTtcbitcdH1cbitcbitcdGlmIChjaHVuayBcdTAwM2U9IG1heF9jaHVua3MpIHtcbitcdFx0ZGV2X2VycihkZXYsXG4rXHRcdFx0XCJmbGFzaDogaW50ZXJydXB0ZWQgZG93bmxvYWQgZGlkIG5vdCBkcmFpbiBhZnRlciAldSBjaHVua3NcXG5cIixcbitcdFx0XHRjaHVuayk7XG4rXHRcdHJldHVybiAtRVRJTUVET1VUO1xuK1x0fVxuK1xuK1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfRU5EKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXG4rXHRyZXR1cm4gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksXG4rXHRcdFx0XHRcdCBNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XG4rfVxuK1xuKy8qIEJhY2tncm91bmQgc2VsZi1oZWFsOiBkcmFpbiBhIHdlZGdlZCBkb3dubG9hZCBiYWNrIHRvIFJFQURZIG9mZiB0aGUgZGV2bGlua1xuKyAqIGZsYXNoIHBhdGgsIHNvIHRoZSBtaW51dGVzLWxvbmcgcmVjb3ZlcnkgbmV2ZXIgaG9sZHMgdGhlIGRldmxpbmsgbG9jay5cbisgKiBTY2hlZHVsZWQgZnJvbSBwcm9iZTsgcHVibGlzaGVzIHJlc2N1ZV9yZWFkeSBvbiBzdWNjZXNzLlxuKyAqL1xuK3ZvaWQgbXhsODYyeHhfcmVzY3VlX2hlYWxfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPVxuK1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3ByaXYsIHJlc2N1ZV9oZWFsX3dvcmspO1xuK1x0c3RydWN0IGRldmljZSAqZGV2ID0gXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldjtcbitcdGludCByZXQ7XG4rXG4rXHRkZXZfaW5mbyhkZXYsIFwicmVjb3ZlcmluZyBpbnRlcnJ1cHRlZCBkb3dubG9hZCBpbiBiYWNrZ3JvdW5kXFxuXCIpO1xuK1x0cmV0ID0gbXhsODYyeHhfcmVzY3VlX2RyYWluKHByaXYpO1xuK1x0aWYgKHRlc3RfYml0KE1YTDg2MlhYX0ZMQUdfV09SS19TVE9QUEVELCBcdTAwMjZwcml2LVx1MDAzZWZsYWdzKSlcbitcdFx0cmV0dXJuO1xuK1x0aWYgKCFyZXQpIHtcbitcdFx0V1JJVEVfT05DRShwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSwgdHJ1ZSk7XG4rXHRcdGRldl9pbmZvKGRldiwgXCJyZWNvdmVyeSBjb21wbGV0ZSwgcmVhZHkgdG8gZmxhc2hcXG5cIik7XG4rXHR9XG4rfVxuK1xuKy8qIERldGVjdCBNQ1Vib290IHJlc2N1ZSBtb2RlIG92ZXIgY2xhdXNlLTIyIFNNRElPIGFsb25lLCBzbyB0aGUgY2FsbGVyIGNhbiBydWxlXG4rICogdGhlIGxvYWRlciBvdXQgYmVmb3JlIGFueSBDNDUgQVBJIHJlcXVlc3QgKHdoaWNoIHNwZXdzIENSQyBlcnJvcnMgd2hlbiBubyBXU1BcbisgKiBmaXJtd2FyZSBhbnN3ZXJzKS4gQSBzY3JhdGNoIHdyaXRlIHRvIEFERFIvREFUQSBtdXN0IGxhdGNoIG9yIHRoZSBjaGlwIGlzXG4rICogYWJzZW50ICgtRU5PREVWKTsgU1RBVCB0aGVuIGNsYXNzaWZpZXMgdGhlIHN0YXRlLCBwb2tlZCBkZXN0cnVjdGl2ZWx5IG9ubHlcbisgKiB3aGVuIDAsIHRoZSBvbmUgdmFsdWUgYSBydW5uaW5nIGZpcm13YXJlIG5ldmVyIGhvbGRzOlxuKyAqXG4rICogIC0gMHhjMzNjOiBmbGFzaGxlc3MgbG9vcCwgcmVhZHkuXG4rICogIC0gMHhjNTVjOiBjb25zb2xlIGxvb3AsIGlmIHRoZSByZWdpc3Rlci1yZWFkIGNoYWxsZW5nZSBpcyBzZXJ2aWNlZC5cbisgKiAgLSBvdGhlciBub24temVybzogcnVubmluZyBmaXJtd2FyZSwgbGVmdCB1bnBva2VkLlxuKyAqICAtIDA6IHdlZGdlZCByZWNlaXZlIGxvb3AsIGlmIGEgMS1ieXRlIHNsaWNlLWFkdmFuY2UgZHJhaW5zIGJhY2sgdG8gMC5cbisgKlxuKyAqIFJldHVybjogTVhMODYyWFhfSU5fUkVTQ1VFLCBNWEw4NjJYWF9OT1RfUkVTQ1VFLCBvciBuZWdhdGl2ZSAoLUVOT0RFVi9TTURJTykuXG4rICovXG4raW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbit7XG4rXHRpbnQgc3RhdCwgZGF0LCByZXQsIHJiLCBhLCBkO1xuK1xuK1x0LyogcmVzY3VlX3JlYWR5IGdhdGVzIGZsYXNoaW5nOyBhIHdlZGdlZCBsb2FkZXIgbmVlZHMgdGhlIGRyYWluIGZpcnN0LiAqL1xuK1x0cHJpdi1cdTAwM2VyZXNjdWVfcmVhZHkgPSBmYWxzZTtcbitcbitcdC8qIFByZXNlbmNlOiBhIGxpdmUgY2hpcCBsYXRjaGVzIHRoZSBzY3JhdGNoIHdyaXRlLCBhbiBhYnNlbnQgb25lIGZsb2F0cy4gKi9cbitcdGEgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQUREUixcbitcdFx0XHRcdCBNWEw4NjJYWF9TQl9QRElfUFJPQkVfQSk7XG4rXHRpZiAoYSBcdTAwM2MgMClcbitcdFx0cmV0dXJuIGE7XG4rXHRkID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsXG4rXHRcdFx0XHQgTVhMODYyWFhfU0JfUERJX1BST0JFX0QpO1xuK1x0aWYgKGQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBkO1xuK1x0YSA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIpO1xuK1x0aWYgKGEgXHUwMDNjIDApXG4rXHRcdHJldHVybiBhO1xuK1x0ZCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpO1xuK1x0aWYgKGQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBkO1xuK1x0aWYgKCh1MTYpYSAhPSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfQSB8fFxuK1x0ICAgICh1MTYpZCAhPSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfRClcbitcdFx0cmV0dXJuIC1FTk9ERVY7XG4rXG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c3RhdCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQpO1xuK1x0aWYgKHN0YXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiBzdGF0O1xuK1xuK1x0LyogRmxhc2hsZXNzLWRvd25sb2FkIGxvb3A6IHVuYW1iaWd1b3VzIHJlYWR5IG1hZ2ljLCBsZWF2ZSBpdCBhbG9uZS4gKi9cbitcdGlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX0RMX1JFQURZKSB7XG4rXHRcdHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5ID0gdHJ1ZTtcbitcdFx0cmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTtcbitcdH1cbitcbitcdC8qIENvbnNvbGUgbG9vcCBhdCBSRUFEWTogY29uZmlybSB0aGUgbGl2ZSBtYWlsYm94IHdpdGggdGhlIHJlZ2lzdGVyLXJlYWRcbitcdCAqIGNoYWxsZW5nZSAoY29uc3VtZXMgdGhlIG1hcmtlciBmcm9tIERBVEEgYW5kIHJlLWFybXMgUkVBRFkpLlxuK1x0ICovXG4rXHRpZiAoKHUxNilzdGF0ID09IE1YTDg2MlhYX1NCX1BESV9SRUFEWSkge1xuK1x0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcbitcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUkspO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuK1x0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfUkRSRUcpO1xuK1x0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdHJiID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksXG4rXHRcdFx0XHRcdCAgICAgICBNWEw4NjJYWF9SRVNDVUVfUkVBRFlfVElNRU9VVF9NUyk7XG4rXHRcdGRhdCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpO1xuK1x0XHRpZiAoZGF0IFx1MDAzYyAwKVxuK1x0XHRcdHJldHVybiBkYXQ7XG4rXHRcdG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcdFx0aWYgKCFyYiBcdTAwMjZcdTAwMjYgKHUxNilkYXQgIT0gTVhMODYyWFhfU0JfUERJX1JEUkVHX01BUkspIHtcbitcdFx0XHRwcml2LVx1MDAzZXJlc2N1ZV9yZWFkeSA9IHRydWU7XG4rXHRcdFx0cmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcdH1cbitcbitcdC8qIEFueSBvdGhlciBub24temVybyB2YWx1ZSBpcyBhIHJ1bm5pbmcgZmlybXdhcmUsIG5vdCBhIGxvYWRlci4gKi9cbitcdGlmIChzdGF0KVxuK1x0XHRyZXR1cm4gTVhMODYyWFhfTk9UX1JFU0NVRTtcbitcbitcdC8qIFNUQVQgPT0gMDogYSB3ZWRnZWQgcmVjZWl2ZSBsb29wIGNvbnN1bWVzIGEgMS1ieXRlIHNsaWNlLWFkdmFuY2UgYmFja1xuK1x0ICogdG8gMCAoZmVlZCBvbmUgREFUQSB3b3JkIGZpcnN0LCBsaWtlIGEgZHJhaW4gY2h1bmspLlxuK1x0ICovXG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgMHgwMDAwKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXQ7XG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRyZXR1cm4gcmV0O1xuK1x0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsIDEpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJldDtcbitcdHJiID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLCBNWEw4NjJYWF9SRVNDVUVfUkVBRFlfVElNRU9VVF9NUyk7XG4rXHRpZiAoIXJiKVxuK1x0XHRyZXR1cm4gTVhMODYyWFhfSU5fUkVTQ1VFO1xuK1xuK1x0cmV0dXJuIC1FTk9ERVY7XG4rfVxuK1xuKy8qIFBvc3QtZmxhc2ggcmVwcm9iZS4gUnVucyBmcm9tIGEgc2VsZi1jb250YWluZWQgaGVhcCB3b3JrIChub3QgYSBrdGhyZWFkIGFuZFxuKyAqIG5vdCB0aGUgZGV2bGluayBjYWxsZXIncyBjb250ZXh0KToga3RocmVhZF9jcmVhdGUoKSBpbiB0aGUgY2FsbGVyIGNvbnRleHRcbisgKiBmYWlscyAtRUlOVFIgaWYgdGhlIGRldmxpbmsgY29tbWFuZCB3YXMgQ3RybC1DJ2QsIGFuZCBzY2hlZHVsZV93b3JrKCkgY2Fubm90LlxuKyAqIGRldmljZV9yZXByb2JlKCkgLVx1MDAzZSByZW1vdmUoKSBmcmVlcyBwcml2LCBzbyB0aGlzIG11c3Qgbm90IHRvdWNoIHByaXY7IGl0IHVzZXNcbisgKiBvbmx5IHRoZSBoZWxkIGRldmljZSByZWZlcmVuY2UgYW5kIGRyb3BzIGl0cyBtb2R1bGUgcmVmZXJlbmNlIGFmdGVyd2FyZHMuXG4rICovXG4rc3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfd29yayB7XG4rXHRzdHJ1Y3Qgd29ya19zdHJ1Y3Qgd29yaztcbitcdHN0cnVjdCBkZXZpY2UgKmRldjtcbit9O1xuK1xuK3N0YXRpYyB2b2lkIG14bDg2Mnh4X3JlcHJvYmVfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXG4re1xuK1x0c3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfd29yayAqcncgPVxuK1x0XHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3JlcHJvYmVfd29yaywgd29yayk7XG4rXHRzdHJ1Y3QgZGV2aWNlICpkZXYgPSBydy1cdTAwM2VkZXY7XG4rXG4rXHRtc2xlZXAoTVhMODYyWFhfRldfUkVQUk9CRV9ERUxBWV9NUyk7XG4rXHRpZiAoZGV2aWNlX3JlcHJvYmUoZGV2KSlcbitcdFx0ZGV2X2VycihkZXYsIFwicmVwcm9iZSBmYWlsZWRcXG5cIik7XG4rXHRwdXRfZGV2aWNlKGRldik7XG4rXHRrZnJlZShydyk7XG4rXHRtb2R1bGVfcHV0KFRISVNfTU9EVUxFKTtcbit9XG4rXG4rLyogTUNVYm9vdCBmaXJtd2FyZSBpbWFnZSBoZWFkZXIgKi9cbitzdHJ1Y3QgbXhsODYyeHhfZndfaGRyIHtcbitcdF9fbGUzMiBpbWFnZV90eXBlO1xuK1x0X19sZTMyIGltYWdlX3NpemVfMTtcbitcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8xO1xuK1x0X19sZTMyIGltYWdlX3NpemVfMjtcbitcdF9fbGUzMiBpbWFnZV9jaGVja3N1bV8yO1xuK30gX19wYWNrZWQ7XG4rXG4rc3RhdGljIGludCBteGw4NjJ4eF9mbGFzaF92YWxpZGF0ZShzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdixcbitcdFx0XHRcdCAgIGNvbnN0IHN0cnVjdCBmaXJtd2FyZSAqZncsXG4rXHRcdFx0XHQgICB1MzIgKnBheWxvYWRfc2l6ZSlcbit7XG4rXHRjb25zdCBzdHJ1Y3QgbXhsODYyeHhfZndfaGRyICpoZHI7XG4rXHR1MzIgc2l6ZTEsIHNpemUyLCB0b3RhbDtcbitcdGNvbnN0IHU4ICpwYXlsb2FkO1xuK1x0dTMyIGNyYztcbitcbitcdGlmIChmdy1cdTAwM2VzaXplIFx1MDAzYyBNWEw4NjJYWF9GV19IRFJfU0laRSlcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXG4rXHRoZHIgPSAoY29uc3Qgc3RydWN0IG14bDg2Mnh4X2Z3X2hkciAqKWZ3LVx1MDAzZWRhdGE7XG4rXHRwYXlsb2FkID0gZnctXHUwMDNlZGF0YSArIE1YTDg2MlhYX0ZXX0hEUl9TSVpFO1xuK1x0c2l6ZTEgPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2Vfc2l6ZV8xKTtcbitcdHNpemUyID0gbGUzMl90b19jcHUoaGRyLVx1MDAzZWltYWdlX3NpemVfMik7XG4rXG4rXHRpZiAoY2hlY2tfYWRkX292ZXJmbG93KHNpemUxLCBzaXplMiwgXHUwMDI2dG90YWwpIHx8XG4rXHQgICAgdG90YWwgXHUwMDNlIGZ3LVx1MDAzZXNpemUgLSBNWEw4NjJYWF9GV19IRFJfU0laRSkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmlybXdhcmUgZmlsZSB0b28gc21hbGwgZm9yIGRlY2xhcmVkIHNpemVcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKCF0b3RhbCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZmlybXdhcmUgZmlsZSB3aXRoIGVtcHR5IHBheWxvYWRcXG5cIik7XG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0fVxuK1xuK1x0aWYgKHNpemUxKSB7XG4rXHRcdGNyYyA9IH5jcmMzMl9sZSh+MFUsIHBheWxvYWQsIHNpemUxKTtcbitcdFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMSkpIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBpbWFnZSAxIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxuXCIsXG4rXHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8xKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChzaXplMikge1xuK1x0XHRjcmMgPSB+Y3JjMzJfbGUofjBVLCBwYXlsb2FkICsgc2l6ZTEsIHNpemUyKTtcbitcdFx0aWYgKGNyYyAhPSBsZTMyX3RvX2NwdShoZHItXHUwMDNlaW1hZ2VfY2hlY2tzdW1fMikpIHtcbitcdFx0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XHRcImZsYXNoOiBpbWFnZSAyIENSQyBtaXNtYXRjaCAoZ290ICUwOHgsIGV4cGVjdGVkICUwOHgpXFxuXCIsXG4rXHRcdFx0XHRjcmMsIGxlMzJfdG9fY3B1KGhkci1cdTAwM2VpbWFnZV9jaGVja3N1bV8yKSk7XG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdH1cbitcdH1cbitcbitcdCpwYXlsb2FkX3NpemUgPSB0b3RhbDtcbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LFxuK1x0XHRcdFx0ICAgY29uc3Qgc3RydWN0IGZpcm13YXJlICpmdyxcbitcdFx0XHRcdCAgIHUzMiBwYXlsb2FkX3NpemUsIHN0cnVjdCBkZXZsaW5rICpkbClcbit7XG4rXHRjb25zdCB1OCAqcGF5bG9hZCA9IGZ3LVx1MDAzZWRhdGEgKyBNWEw4NjJYWF9GV19IRFJfU0laRTtcbitcdHUzMiB3b3JkX2lkeCA9IDAsIGRhdGFfd3JpdHRlbiA9IDAsIGlkeCA9IDA7XG4rXHR1bnNpZ25lZCBsb25nIG5leHRfbm90aWZ5ID0gamlmZmllcyAtIDE7XG4rXHR1MTYgd29yZCwgZmRhdGE7XG4rXHRpbnQgcmV0LCBpO1xuK1xuK1x0LyogU3RlcCAxOiByZWJvb3QgdGhlIGZpcm13YXJlIGludG8gTUNVYm9vdCByZXNjdWUgbW9kZSAqL1xuK1x0aWYgKCFwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4rXHRcdHJldCA9IG14bDg2Mnh4X2FwaV93cmFwKHByaXYsIFNZU19NSVNDX0ZXX1VQREFURSwgTlVMTCwgMCxcbitcdFx0XHRcdFx0ZmFsc2UsIGZhbHNlKTtcbitcdFx0aWYgKHJldCkge1xuK1x0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFwiZmxhc2g6IEZXX1VQREFURSBjb21tYW5kIGZhaWxlZDogJXBlXFxuXCIsXG4rXHRcdFx0XHRFUlJfUFRSKHJldCkpO1xuK1x0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdC8qIFN0ZXAgMjogd2FpdCBmb3IgYm9vdGxvYWRlciByZWFkeSAqL1xuK1x0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcIldhaXRpbmcgZm9yIGJvb3Rsb2FkZXJcIiwgMCwgMCk7XG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIHdyaXRlX2VycjtcbitcbitcdC8qIEZhaWx1cmVzIGZyb20gaGVyZSBvbiBtdXN0IGdvIHRocm91Z2ggZW5kX21hZ2ljIHNvIE1DVWJvb3RcbitcdCAqIHJlYm9vdHMgaW5zdGVhZCBvZiB3YWl0aW5nIGZvcmV2ZXIuXG4rXHQgKi9cbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1JFQURZLFxuK1x0XHRcdFx0XHRNWEw4NjJYWF9GV19SRUFEWV9USU1FT1VUX01TKTtcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGJvb3Rsb2FkZXIgbm90IHJlYWR5OiAlcGVcXG5cIiwgRVJSX1BUUihyZXQpKTtcbitcdFx0cmV0dXJuIHJldDtcbitcdH1cbitcbitcdC8qIFN0ZXAgMzogc3RhcnQgaGFuZHNoYWtlICovXG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcbitcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9TVEFSVCk7XG4rXHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRnb3RvIHdyaXRlX2VycjtcbitcbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVJUICsgMSxcbitcdFx0XHRcdFx0TVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogc3RhcnQgaGFuZHNoYWtlIGZhaWxlZDogJXBlXFxuXCIsIEVSUl9QVFIocmV0KSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDQ6IHRyYW5zZmVyIGltYWdlIGhlYWRlciAqL1xuK1x0bXhsODYyeHhfZmxhc2hfbm90aWZ5KGRsLCBcIkVyYXNpbmcgZmxhc2hcIiwgMCwgMCk7XG4rXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHRcdCAgIE1YTDg2MlhYX1NCX1BESV9DVFJMX1dSKTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gd3JpdGVfZXJyO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTVhMODYyWFhfRldfSERSX1NJWkUgLyAyOyBpKyspIHtcbitcdFx0d29yZCA9IGZ3LVx1MDAzZWRhdGFbaSAqIDJdIHxcbitcdFx0ICAgICAgICgodTE2KWZ3LVx1MDAzZWRhdGFbaSAqIDIgKyAxXSBcdTAwM2NcdTAwM2MgOCk7XG4rXHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCB3b3JkKTtcbitcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRnb3RvIHdyaXRlX2VycjtcbitcdH1cbitcbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcbitcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdGdvdG8gd3JpdGVfZXJyO1xuK1xuK1x0LyogdGhlIGJ5dGUgY291bnQgaW4gU1RBVCB0cmlnZ2VycyB0aGUgZXJhc2UgKi9cbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxuK1x0XHRcdFx0ICAgTVhMODYyWFhfRldfSERSX1NJWkUpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byB3cml0ZV9lcnI7XG4rXG4rXHQvKiBBQ0sgaXMgYnl0ZSBjb3VudCArIDEgKi9cbitcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9wb2xsX3N0YXQocHJpdiwgTVhMODYyWFhfRldfSERSX1NJWkUgKyAxLFxuK1x0XHRcdFx0XHRNWEw4NjJYWF9GV19BQ0tfVElNRU9VVF9NUyk7XG4rXHRpZiAocmV0KSB7XG4rXHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcImZsYXNoOiBoZWFkZXIgQUNLIGZhaWxlZDogJXBlXFxuXCIsIEVSUl9QVFIocmV0KSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDU6IHdhaXQgZm9yIGVyYXNlIHRvIGNvbXBsZXRlICovXG4rXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcG9sbF9zdGF0KHByaXYsIDAsXG4rXHRcdFx0XHRcdE1YTDg2MlhYX0ZXX0VSQVNFX1RJTUVPVVRfTVMpO1xuK1x0aWYgKHJldCkge1xuK1x0XHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogZXJhc2UgdGltZW91dDogJXBlXFxuXCIsIEVSUl9QVFIocmV0KSk7XG4rXHRcdHJldHVybiByZXQ7XG4rXHR9XG4rXG4rXHQvKiBTdGVwIDY6IHRyYW5zZmVyIHBheWxvYWQgKi9cbitcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxuK1x0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0Z290byB3cml0ZV9lcnI7XG4rXG4rXHR3aGlsZSAoaWR4IFx1MDAzYyBwYXlsb2FkX3NpemUpIHtcbitcdFx0aWYgKGlkeCArIDEgXHUwMDNjIHBheWxvYWRfc2l6ZSkge1xuK1x0XHRcdGZkYXRhID0gcGF5bG9hZFtpZHhdIHxcbitcdFx0XHRcdCgodTE2KXBheWxvYWRbaWR4ICsgMV0gXHUwMDNjXHUwMDNjIDgpO1xuK1x0XHRcdGlkeCArPSAyO1xuK1x0XHRcdGRhdGFfd3JpdHRlbiArPSAyO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdGZkYXRhID0gcGF5bG9hZFtpZHhdO1xuK1x0XHRcdGlkeCsrO1xuK1x0XHRcdGRhdGFfd3JpdHRlbisrO1xuK1x0XHR9XG4rXG4rXHRcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLCBmZGF0YSk7XG4rXHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0Z290byB3cml0ZV9lcnI7XG4rXHRcdHdvcmRfaWR4Kys7XG4rXG4rXHRcdGlmIChpZHggXHUwMDNlPSBwYXlsb2FkX3NpemUpIHtcbitcdFx0XHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfZmx1c2hfc2xpY2UocHJpdiwgZGF0YV93cml0dGVuKTtcbitcdFx0XHRicmVhaztcbitcdFx0fVxuK1xuK1x0XHQvKiBIYWxmLWJhbmsgYm91bmRhcnk6IHN3aXRjaCB0byBTQjEgYWRkcmVzcyAqL1xuK1x0XHRpZiAod29yZF9pZHggPT0gTVhMODYyWFhfRldfQkFOS19IQUxGKSB7XG4rXHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4rXHRcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfUlNUKTtcbitcdFx0XHRpZiAocmV0IFx1MDAzYyAwKVxuK1x0XHRcdFx0Z290byB3cml0ZV9lcnI7XG4rXG4rXHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIsXG4rXHRcdFx0XHRcdFx0ICAgTVhMODYyWFhfRldfU0IxX0FERFIpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIHdyaXRlX2VycjtcbitcbitcdFx0XHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfQ1RSTCxcbitcdFx0XHRcdFx0XHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XG4rXHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbitcdFx0XHRcdGdvdG8gd3JpdGVfZXJyO1xuK1x0XHR9IGVsc2UgaWYgKHdvcmRfaWR4IFx1MDAzZT0gTVhMODYyWFhfRldfQkFOS19TTElDRSkge1xuK1x0XHRcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9mbHVzaF9zbGljZShwcml2LCBkYXRhX3dyaXR0ZW4pO1xuK1x0XHRcdGlmIChyZXQpIHtcbitcdFx0XHRcdGRldl9lcnIoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWRldixcbitcdFx0XHRcdFx0XCJmbGFzaDogd3JpdGUgdGltZW91dCBhdCAldS8ldTogJXBlXFxuXCIsXG4rXHRcdFx0XHRcdGlkeCwgcGF5bG9hZF9zaXplLCBFUlJfUFRSKHJldCkpO1xuK1x0XHRcdFx0cmV0dXJuIHJldDtcbitcdFx0XHR9XG4rXHRcdFx0d29yZF9pZHggPSAwO1xuK1x0XHRcdGRhdGFfd3JpdHRlbiA9IDA7XG4rXHRcdFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXG4rXHRcdFx0XHRcdFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xuK1x0XHRcdGlmIChyZXQgXHUwMDNjIDApXG4rXHRcdFx0XHRnb3RvIHdyaXRlX2VycjtcbitcbitcdFx0XHRpZiAodGltZV9hZnRlcihqaWZmaWVzLCBuZXh0X25vdGlmeSkpIHtcbitcdFx0XHRcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCJGbGFzaGluZ1wiLCBpZHgsXG4rXHRcdFx0XHRcdFx0ICAgICAgcGF5bG9hZF9zaXplKTtcbitcdFx0XHRcdG5leHRfbm90aWZ5ID0gamlmZmllcyArIG1zZWNzX3RvX2ppZmZpZXMoNTAwKTtcbitcdFx0XHR9XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChyZXQpIHtcbitcdFx0ZGV2X2VycihcdTAwMjZwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlZGV2LFxuK1x0XHRcdFwiZmxhc2g6IGZpbmFsIHdyaXRlIHRpbWVvdXQ6ICVwZVxcblwiLCBFUlJfUFRSKHJldCkpO1xuK1x0XHRnb3RvIGVuZF9tYWdpYztcbitcdH1cbitcbitcdG14bDg2Mnh4X2ZsYXNoX25vdGlmeShkbCwgXCJGbGFzaGluZ1wiLCBwYXlsb2FkX3NpemUsIHBheWxvYWRfc2l6ZSk7XG4rXHRnb3RvIGVuZF9tYWdpYztcbitcbit3cml0ZV9lcnI6XG4rXHRkZXZfZXJyKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VkZXYsIFwiZmxhc2g6IFNNRElPIHdyaXRlIGZhaWxlZDogJXBlXFxuXCIsXG4rXHRcdEVSUl9QVFIocmV0KSk7XG4rZW5kX21hZ2ljOlxuK1x0LyogcmVib290IE1DVWJvb3QgZXZlbiBhZnRlciBhIGZhaWxlZCB0cmFuc2ZlciAqL1xuK1x0bXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX1NUQVQsXG4rXHRcdFx0ICAgICBNWEw4NjJYWF9TQl9QRElfRU5EKTtcbitcdG1zbGVlcChNWEw4NjJYWF9GV19SRUJPT1RfREVMQVlfTVMpO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG4rXG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdGNoYXIgYnVmWzE2XTtcbitcdGludCByZXQ7XG4rXG4rXHQvKiBObyBjaGlwLWlkL3JldmlzaW9uIGluIE1DVWJvb3QgKG5lZWRzIHRoZSBmaXJtd2FyZSBNTUQgbWFpbGJveCkuIFRoZVxuK1x0ICogZncgdmVyc2lvbiBkb3VibGVzIGFzIHRoZSBcInJlYWR5IHRvIGZsYXNoXCIgc2lnbmFsOiByZXBvcnQgaXQgb25seVxuK1x0ICogb25jZSB0aGUgbG9hZGVyIGlzIGF0IGEgY2xlYW4gUkVBRFksIG5vdGhpbmcgd2hpbGUgc3RpbGwgZHJhaW5pbmcuXG4rXHQgKi9cbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKSB7XG4rXHRcdGlmICghUkVBRF9PTkNFKHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5KSlcbitcdFx0XHRyZXR1cm4gMDtcbitcbitcdFx0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIldS4ldS4ldVwiLFxuK1x0XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IsIHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vcixcbitcdFx0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uKTtcbitcdFx0cmV0ID0gZGV2bGlua19pbmZvX3ZlcnNpb25fcnVubmluZ19wdXQocmVxLCBcImZ3XCIsIGJ1Zik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcdFx0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCBcImZ3XCIsIGJ1Zik7XG4rXHR9XG4rXG4rXHRzbnByaW50ZihidWYsIHNpemVvZihidWYpLCBcIiUwNFhcIiwgcHJpdi1cdTAwM2Vhc2ljX2lkKTtcbitcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsXG4rXHRcdFx0XHRcdCAgICAgREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19BU0lDX0lELFxuK1x0XHRcdFx0XHQgICAgIGJ1Zik7XG4rXHRpZiAocmV0KVxuK1x0XHRyZXR1cm4gcmV0O1xuK1xuK1x0c25wcmludGYoYnVmLCBzaXplb2YoYnVmKSwgXCIldVwiLCBwcml2LVx1MDAzZWFzaWNfcmV2KTtcbitcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX2ZpeGVkX3B1dChyZXEsXG4rXHRcdFx0XHRcdCAgICAgREVWTElOS19JTkZPX1ZFUlNJT05fR0VORVJJQ19BU0lDX1JFVixcbitcdFx0XHRcdFx0ICAgICBidWYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIFwiJXUuJXUuJXVcIixcbitcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuK1x0XHQgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uKTtcbitcbitcdHJldCA9IGRldmxpbmtfaW5mb192ZXJzaW9uX3J1bm5pbmdfcHV0KHJlcSwgXCJmd1wiLCBidWYpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcbitcdC8qIGJvb3RzIHRoaXMgaW1hZ2UgZnJvbSBpdHMgb3duIGZsYXNoOiBzdG9yZWQgPT0gcnVubmluZyAqL1xuK1x0cmV0dXJuIGRldmxpbmtfaW5mb192ZXJzaW9uX3N0b3JlZF9wdXQocmVxLCBcImZ3XCIsIGJ1Zik7XG4rfVxuK1xuK2ludCBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsXG4rXHRcdFx0XHQgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcbitcdFx0XHRcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxuK3tcbitcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcdHN0cnVjdCBteGw4NjJ4eF9yZXByb2JlX3dvcmsgKnJ3O1xuK1x0c3RydWN0IGRzYV9wb3J0ICpkcDtcbitcdHUzMiBwYXlsb2FkX3NpemU7XG4rXHRpbnQgcmV0LCBpO1xuK1xuK1x0aWYgKHBhcmFtcy1cdTAwM2Vjb21wb25lbnQpIHtcbitcdFx0TkxfU0VUX0VSUl9NU0dfTU9EKGV4dGFjaywgXCJjb21wb25lbnQgaXMgbm90IHN1cHBvcnRlZFwiKTtcbitcdFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuK1x0fVxuK1xuK1x0cmV0ID0gbXhsODYyeHhfZmxhc2hfdmFsaWRhdGUocHJpdiwgcGFyYW1zLVx1MDAzZWZ3LCBcdTAwMjZwYXlsb2FkX3NpemUpO1xuK1x0aWYgKHJldCkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImZpcm13YXJlIGltYWdlIHZhbGlkYXRpb24gZmFpbGVkXCIpO1xuK1x0XHRyZXR1cm4gcmV0O1xuK1x0fVxuK1xuK1x0LyogUmVmdXNlIHRvIGZsYXNoIHdoaWxlIHRoZSBiYWNrZ3JvdW5kIHNlbGYtaGVhbCBpcyBzdGlsbCBkcmFpbmluZy4gKi9cbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlIFx1MDAyNlx1MDAyNiAhUkVBRF9PTkNFKHByaXYtXHUwMDNlcmVzY3VlX3JlYWR5KSkge1xuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLFxuK1x0XHRcdFx0ICAgXCJzd2l0Y2ggaXMgcmVjb3ZlcmluZyBhbiBpbnRlcnJ1cHRlZCBkb3dubG9hZCwgcmV0cnkgc2hvcnRseVwiKTtcbitcdFx0cmV0dXJuIC1FQlVTWTtcbitcdH1cbitcbitcdC8qIFRoZSByZWZlcmVuY2VzIHRoZSByZXByb2JlIHdvcmsgbmVlZHMgdG8gcmVzdG9yZSBub3JtYWwgb3BlcmF0aW9uXG4rXHQgKiBtdXN0IGJlIGhlbGQgYmVmb3JlIHRoZSBzd2l0Y2ggaXMgZGlzdHVyYmVkOyB0aGUgd29yayBpdHNlbGYgaXNcbitcdCAqIHNjaGVkdWxlZCBvbmx5IG9uY2UgdGhlIGZsYXNoIGlzIGRvbmUgKHNlZSBiZWxvdykuXG4rXHQgKi9cbitcdGlmICghdHJ5X21vZHVsZV9nZXQoVEhJU19NT0RVTEUpKVxuK1x0XHRyZXR1cm4gLUVOT0RFVjtcbitcbitcdGdldF9kZXZpY2UoZHMtXHUwMDNlZGV2KTtcbitcbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRkZXZfaW5mbyhkcy1cdTAwM2VkZXYsXG4rXHRcdFx0IFwiZmxhc2g6IGZsYXNoaW5nIHN3aXRjaCB2aWEgTUNVYm9vdCByZXNjdWUgbW9kZVxcblwiKTtcbitcdGVsc2VcbitcdFx0ZGV2X2luZm8oZHMtXHUwMDNlZGV2LCBcImZsYXNoOiBydW5uaW5nIGZpcm13YXJlICV1LiV1LiV1XFxuXCIsXG4rXHRcdFx0IHByaXYtXHUwMDNlZndfdmVyc2lvbi5tYWpvciwgcHJpdi1cdTAwM2Vmd192ZXJzaW9uLm1pbm9yLFxuK1x0XHRcdCBwcml2LVx1MDAzZWZ3X3ZlcnNpb24ucmV2aXNpb24pO1xuK1xuK1x0LyogQ2xvc2UgcG9ydHMgd2hpbGUgdGhlIGZpcm13YXJlIGlzIHN0aWxsIGFsaXZlIHNvIHRoZSBEU0FcbitcdCAqIGNvcmUncyBNREIvRkRCIHRyYWNraW5nIGlzIGRyYWluZWQsIGFuZCBkZXRhY2ggdXNlciBwb3J0c1xuK1x0ICogc28gdXNlcnNwYWNlIGNhbm5vdCByZW9wZW4gdGhlbSBkdXJpbmcgdGhlIGZsYXNoLiBUaGVcbitcdCAqIGNvbmR1aXQgYmVsb25ncyB0byB0aGUgTUFDIGRyaXZlciBhbmQgaXMgb25seSBjbG9zZWQuXG4rXHQgKi9cbitcdHJ0bmxfbG9jaygpO1xuK1x0ZHNhX3N3aXRjaF9mb3JfZWFjaF91c2VyX3BvcnQoZHAsIGRzKSB7XG4rXHRcdGlmIChkcC1cdTAwM2V1c2VyKSB7XG4rXHRcdFx0ZGV2X2Nsb3NlKGRwLVx1MDAzZXVzZXIpO1xuK1x0XHRcdG5ldGlmX2RldmljZV9kZXRhY2goZHAtXHUwMDNldXNlcik7XG4rXHRcdH1cbitcdH1cbitcdGRzYV9zd2l0Y2hfZm9yX2VhY2hfY3B1X3BvcnQoZHAsIGRzKVxuK1x0XHRkZXZfY2xvc2UoZHAtXHUwMDNlY29uZHVpdCk7XG4rXHQvKiBUaGUgYnJpZGdlIGRlZmVycyB0aGUgU1RQIHN0YXRlIGNoYW5nZXMgdHJpZ2dlcmVkIGJ5IGNsb3NpbmdcbitcdCAqIHRoZSBwb3J0czsgbGV0IHRoZW0gcmVhY2ggdGhlIGZpcm13YXJlIHdoaWxlIGl0IGlzIHN0aWxsIGFsaXZlLlxuK1x0ICovXG4rXHRzd2l0Y2hkZXZfZGVmZXJyZWRfcHJvY2VzcygpO1xuK1x0cnRubF91bmxvY2soKTtcbitcbitcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4rXHRwcml2LVx1MDAzZWJsb2NrX2hvc3QgPSB0cnVlO1xuK1x0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcbitcdHNldF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFx1MDAyNnByaXYtXHUwMDNlZmxhZ3MpO1xuK1x0Y2FuY2VsX2RlbGF5ZWRfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlc3RhdHNfd29yayk7XG4rXHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlY3JjX2Vycl93b3JrKTtcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIGRzLVx1MDAzZW51bV9wb3J0czsgaSsrKVxuK1x0XHRjYW5jZWxfd29ya19zeW5jKFx1MDAyNnByaXYtXHUwMDNlcG9ydHNbaV0uaG9zdF9mbG9vZF93b3JrKTtcbitcbitcdHJldCA9IG14bDg2Mnh4X2ZsYXNoX2Zpcm13YXJlKHByaXYsIHBhcmFtcy1cdTAwM2VmdywgcGF5bG9hZF9zaXplLFxuK1x0XHRcdFx0ICAgICAgZHMtXHUwMDNlZGV2bGluayk7XG4rXHRpZiAocmV0KVxuK1x0XHROTF9TRVRfRVJSX01TR19NT0QoZXh0YWNrLCBcImZpcm13YXJlIHRyYW5zZmVyIGZhaWxlZFwiKTtcbitcbitcdGlmICghcmV0KSB7XG4rXHRcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLFxuK1x0XHRcdFx0ICBNRElPX01VVEVYX05FU1RFRCk7XG4rXHRcdHByaXYtXHUwMDNlcmVzY3VlX21vZGUgPSBmYWxzZTtcbitcdFx0bXV0ZXhfdW5sb2NrKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrKTtcbitcdFx0LyogVGhlIHJlcHJvYmUgYmVsb3cgcmUtcmVhZHMgYW5kIGxvZ3MgdGhlIG5ldyB2ZXJzaW9uLiAqL1xuK1x0fVxuK1xuK1x0bXV0ZXhfbG9ja19uZXN0ZWQoXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2ssIE1ESU9fTVVURVhfTkVTVEVEKTtcbitcdHByaXYtXHUwMDNlc2tpcF90ZWFyZG93biA9IHRydWU7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2cHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1xuK1x0LyogSGFuZCB0aGUgcmVwcm9iZSB0byBhIHNlbGYtY29udGFpbmVkIHdvcmssIHNjaGVkdWxlZCBsYXN0LiBEb2luZyBpdFxuK1x0ICogZnJvbSBhIHdvcmsgKHJhdGhlciB0aGFuIGEga3RocmVhZCBzcGF3bmVkIGhlcmUpIGF2b2lkcyBib3RoIHRoZVxuK1x0ICogaHVuZy10YXNrIHNwbGF0IG9mIGEgdGhyZWFkIHBhcmtlZCBhY3Jvc3MgdGhlIGZsYXNoIGFuZCB0aGUgLUVJTlRSXG4rXHQgKiB0aGF0IGt0aHJlYWRfY3JlYXRlKCkgcmV0dXJucyBpZiB0aGUgZGV2bGluayBjb21tYW5kIHdhcyBDdHJsLUMnZC5cbitcdCAqIEl0cyBtb2R1bGUgYW5kIGRldmljZSByZWZlcmVuY2VzIGFyZSBhbHJlYWR5IGhlbGQgYWJvdmUuXG4rXHQgKi9cbitcdHJ3ID0ga3phbGxvY19vYmooKnJ3KTtcbitcdGlmICghcncpIHtcbitcdFx0ZGV2X2Vycihkcy1cdTAwM2VkZXYsXG4rXHRcdFx0XCJmbGFzaDogb3V0IG9mIG1lbW9yeSBmb3IgcmVwcm9iZTsgcmVsb2FkIHRoZSBkcml2ZXIgdG8gcmVzdG9yZSBvcGVyYXRpb25cXG5cIik7XG4rXHRcdHB1dF9kZXZpY2UoZHMtXHUwMDNlZGV2KTtcbitcdFx0bW9kdWxlX3B1dChUSElTX01PRFVMRSk7XG4rXHRcdHJldHVybiByZXQgPyByZXQgOiAtRU5PTUVNO1xuK1x0fVxuK1x0SU5JVF9XT1JLKFx1MDAyNnJ3LVx1MDAzZXdvcmssIG14bDg2Mnh4X3JlcHJvYmVfd29ya19mbik7XG4rXHRydy1cdTAwM2VkZXYgPSBkcy1cdTAwM2VkZXY7XG4rXHRzY2hlZHVsZV93b3JrKFx1MDAyNnJ3LVx1MDAzZXdvcmspO1xuK1xuK1x0cmV0dXJuIHJldDtcbit9XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmggYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaFxubmV3IGZpbGUgbW9kZSAxMDA2NDRcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi43Y2Q4N2M3YWQ4NzE2N1xuLS0tIC9kZXYvbnVsbFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmhcbkBAIC0wLDAgKzEsMjAgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuK1xuKyNpZm5kZWYgX19NWEw4NjJYWF9GV19IXG4rI2RlZmluZSBfX01YTDg2MlhYX0ZXX0hcbitcbisjaW5jbHVkZSBcdTAwM2NuZXQvZHNhLmhcdTAwM2VcbitcbitzdHJ1Y3QgbXhsODYyeHhfcHJpdjtcbitzdHJ1Y3Qgd29ya19zdHJ1Y3Q7XG4rXG4raW50IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XG4rdm9pZCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKHN0cnVjdCB3b3JrX3N0cnVjdCAqd29yayk7XG4raW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdCAgICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4rXHRcdFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitpbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHQgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4rXG4rI2VuZGlmIC8qIF9fTVhMODYyWFhfRldfSCAqL1xuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1ob3N0LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5pbmRleCA0YWNkMjE2ZjdjYzAwOS4uMmRiZDA3NGMwZmUyNmMgMTAwNjQ0XG4tLS0gYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5jXG5AQCAtMTUsNiArMTUsOCBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3VuYWxpZ25lZC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbmV0L2RzYS5oXHUwMDNlXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWNtZC5oXCJcbisjaW5jbHVkZSBcIm14bDg2Mnh4LWZ3LmhcIlxuICNpbmNsdWRlIFwibXhsODYyeHgtaG9zdC5oXCJcbiBcbiAjZGVmaW5lIENUUkxfQlVTWV9NQVNLXHRcdFx0QklUKDE1KVxuQEAgLTM0MCw2ICszNDIsMjEgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpfZGF0YSxcbiBcbiBcdG11dGV4X2xvY2tfbmVzdGVkKFx1MDAyNnByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VidXMtXHUwMDNlbWRpb19sb2NrLCBNRElPX01VVEVYX05FU1RFRCk7XG4gXG4rXHRpZiAocHJpdi1cdTAwM2Vza2lwX3RlYXJkb3duKSB7XG4rXHRcdHJldCA9IHJlYWQgPyAtRU5PREVWIDogMDtcbitcdFx0Z290byBvdXQ7XG4rXHR9XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuK1x0XHRyZXQgPSAtRU5PREVWO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbitcdGlmIChwcml2LVx1MDAzZWJsb2NrX2hvc3QgXHUwMDI2XHUwMDI2IGNtZCAhPSBTWVNfTUlTQ19GV19VUERBVEUpIHtcbitcdFx0cmV0ID0gLUVCVVNZO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdG1heCA9IChzaXplICsgMSkgLyAyO1xuIFxuIFx0cmV0ID0gbXhsODYyeHhfYnVzeV93YWl0KHByaXYpO1xuQEAgLTQ5NSwxMiArNTEyLDQ5IEBAIGludCBteGw4NjJ4eF9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuKyNkZWZpbmUgTVhMODYyWFhfU01ESU9fQUREUl9SRUdcdFx0MHgxZlxuKyNkZWZpbmUgTVhMODYyWFhfU01ESU9fUEFHRV9NQVNLXHQweGZmZjBcbisjZGVmaW5lIE1YTDg2MlhYX1NNRElPX09GRl9NQVNLXHRcdDB4MDAwZlxuK1xuK2ludCBteGw4NjJ4eF9zbWRpb19yZWFkKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MzIgYWRkcilcbit7XG4rXHRzdHJ1Y3QgbWlpX2J1cyAqYnVzID0gcHJpdi1cdTAwM2VtZGlvZGV2LVx1MDAzZWJ1cztcbitcdGludCBwaHkgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYWRkcjtcbitcdGludCByZXQ7XG4rXG4rXHRtdXRleF9sb2NrKFx1MDAyNmJ1cy1cdTAwM2VtZGlvX2xvY2spO1xuK1x0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBNWEw4NjJYWF9TTURJT19BRERSX1JFRyxcbitcdFx0XHQgICAgICBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19QQUdFX01BU0spO1xuK1x0aWYgKHJldCBcdTAwM2U9IDApXG4rXHRcdHJldCA9IF9fbWRpb2J1c19yZWFkKGJ1cywgcGh5LCBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbitpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKVxuK3tcbitcdHN0cnVjdCBtaWlfYnVzICpidXMgPSBwcml2LVx1MDAzZW1kaW9kZXYtXHUwMDNlYnVzO1xuK1x0aW50IHBoeSA9IHByaXYtXHUwMDNlbWRpb2Rldi1cdTAwM2VhZGRyO1xuK1x0aW50IHJldDtcbitcbitcdG11dGV4X2xvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXQgPSBfX21kaW9idXNfd3JpdGUoYnVzLCBwaHksIE1YTDg2MlhYX1NNRElPX0FERFJfUkVHLFxuK1x0XHRcdCAgICAgIGFkZHIgXHUwMDI2IE1YTDg2MlhYX1NNRElPX1BBR0VfTUFTSyk7XG4rXHRpZiAocmV0IFx1MDAzZT0gMClcbitcdFx0cmV0ID0gX19tZGlvYnVzX3dyaXRlKGJ1cywgcGh5LCBhZGRyIFx1MDAyNiBNWEw4NjJYWF9TTURJT19PRkZfTUFTSyxcbitcdFx0XHRcdCAgICAgIHZhbCk7XG4rXHRtdXRleF91bmxvY2soXHUwMDI2YnVzLVx1MDAzZW1kaW9fbG9jayk7XG4rXHRyZXR1cm4gcmV0O1xuK31cbitcbiB2b2lkIG14bDg2Mnh4X2hvc3RfaW5pdChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcbiB7XG4gXHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VjcmNfZXJyX3dvcmssIG14bDg2Mnh4X2NyY19lcnJfd29ya19mbik7XG4rXHRJTklUX1dPUksoXHUwMDI2cHJpdi1cdTAwM2VyZXNjdWVfaGVhbF93b3JrLCBteGw4NjJ4eF9yZXNjdWVfaGVhbF93b3JrX2ZuKTtcbiB9XG4gXG4gdm9pZCBteGw4NjJ4eF9ob3N0X3NodXRkb3duKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2KVxuIHtcbiBcdGNhbmNlbF93b3JrX3N5bmMoXHUwMDI2cHJpdi1cdTAwM2VjcmNfZXJyX3dvcmspO1xuK1x0Y2FuY2VsX3dvcmtfc3luYyhcdTAwMjZwcml2LVx1MDAzZXJlc2N1ZV9oZWFsX3dvcmspO1xuIH1cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtaG9zdC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuaW5kZXggNjZkNmFlMTk4YWZmNDUuLjRlMDU0YzZlNGMwZTQwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWhvc3QuaFxuQEAgLTE4LDUgKzE4LDcgQEAgaW50IG14bDg2Mnh4X2FwaV93cmFwKHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2LCB1MTYgY21kLCB2b2lkICpkYXRhLCB1MTYgc2l6ZSxcbiBcdG14bDg2Mnh4X2FwaV93cmFwKGRldiwgY21kLCBcdTAwMjYoZGF0YSksIHNpemVvZigoZGF0YSkpLCB0cnVlLCB0cnVlKVxuIFxuIGludCBteGw4NjJ4eF9yZXNldChzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdik7XG4raW50IG14bDg2Mnh4X3NtZGlvX3JlYWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyKTtcbitpbnQgbXhsODYyeHhfc21kaW9fd3JpdGUoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYsIHUzMiBhZGRyLCB1MTYgdmFsKTtcbiBcbiAjZW5kaWYgLyogX19NWEw4NjJYWF9IT1NUX0ggKi9cbmRpZmYgLS1naXQgYS9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtcGh5bGluay5jIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuaW5kZXggYjY4OTY1MmFhOWI5MjAuLmE1YjY5NDBiNTUyZTllIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuKysrIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LXBoeWxpbmsuY1xuQEAgLTQwNiw2ICs0MDYsOCBAQCBteGw4NjJ4eF9waHlsaW5rX21hY19zZWxlY3RfcGNzKHN0cnVjdCBwaHlsaW5rX2NvbmZpZyAqY29uZmlnLFxuIFxuIFx0c3dpdGNoIChwb3J0KSB7XG4gXHRjYXNlIDkgLi4uIDE2OlxuK1x0XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbitcdFx0XHRyZXR1cm4gTlVMTDtcbiBcdFx0aWYgKCFNWEw4NjJYWF9GV19WRVJfTUlOKHByaXYsIDEsIDAsIDg0KSkge1xuIFx0XHRcdGRldl93YXJuX29uY2UoZHAtXHUwMDNlZHMtXHUwMDNlZGV2LFxuIFx0XHRcdFx0ICAgICAgXCJTZXJEZXMgUENTIHVuc3VwcG9ydGVkIG9uIG9sZCBmaXJtd2FyZS5cXG5cIik7XG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1xuaW5kZXggNDVkMjM3YjNhNDBmMTAuLjlhYzY2OGMxM2M5ZTcwIDEwMDY0NFxuLS0tIGEvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcbisrKyBiL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jXG5AQCAtMjEsNiArMjEsNyBAQFxuICNpbmNsdWRlIFwibXhsODYyeHguaFwiXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC1hcGkuaFwiXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC1jbWQuaFwiXG4rI2luY2x1ZGUgXCJteGw4NjJ4eC1mdy5oXCJcbiAjaW5jbHVkZSBcIm14bDg2Mnh4LWhvc3QuaFwiXG4gI2luY2x1ZGUgXCJteGw4NjJ4eC1waHlsaW5rLmhcIlxuIFxuQEAgLTcxLDYgKzcyLDEzIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgZXRodG9vbF9ybW9uX2hpc3RfcmFuZ2UgbXhsODYyeHhfcm1vbl9yYW5nZXNbXSA9IHtcbiAjZGVmaW5lIE1YTDg2MlhYX1JFQURZX1RJTUVPVVRfTVNcdDEwMDAwXG4gI2RlZmluZSBNWEw4NjJYWF9SRUFEWV9QT0xMX01TXHRcdDEwMFxuIFxuKy8qIENoaXAgSUQgcmVnaXN0ZXJzLCByZWFkIHZpYSBTWVNfTUlTQ19SRUdfUkQgKi9cbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9MXHRcdDB4YzBkMjg4ODRcbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NXHRcdDB4YzBkMjg4ODhcbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9MX1BOVU1MXHRcdEdFTk1BU0soMTUsIDEyKVxuKyNkZWZpbmUgTVhMODYyWFhfQ0hJUElEX01fUE5VTU1cdFx0R0VOTUFTSygxMSwgMClcbisjZGVmaW5lIE1YTDg2MlhYX0NISVBJRF9NX1ZFUlNJT05cdEdFTk1BU0soMTQsIDEyKVxuK1xuICNkZWZpbmUgTVhMODYyWFhfVENNX0lOU1RfU0VMXHRcdDB4ZTAwXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fQ0JTXHRcdDB4ZTEyXG4gI2RlZmluZSBNWEw4NjJYWF9UQ01fRUJTXHRcdDB4ZTEzXG5AQCAtMjIyLDYgKzIzMCwzNSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BoeV93cml0ZV9jNDVfbWlpX2J1cyhzdHJ1Y3QgbWlpX2J1cyAqYnVzLCBpbnQgYWRkcixcbiBcdHJldHVybiBteGw4NjJ4eF9waHlfd3JpdGVfbW1kKGJ1cy1cdTAwM2Vwcml2LCBhZGRyLCBkZXZhZGQsIHJlZ251bSwgdmFsKTtcbiB9XG4gXG4rLyogUmVhZCB0aGUgc3RhdGljIGNoaXAgcGFydCBudW1iZXIgYW5kIHZlcnNpb24gZnJvbSB0aGUgQ0hJUCBJRFxuKyAqIHJlZ2lzdGVycy4gT25seSBwb3NzaWJsZSB3aXRoIGEgcnVubmluZyBmaXJtd2FyZSwgc28gdGhlIHZhbHVlcyBhcmVcbisgKiBjYWNoZWQgYXQgc2V0dXAgYW5kIGxlZnQgemVybyB3aGVuIHRoZSBzd2l0Y2ggaXMgaW4gcmVzY3VlIG1vZGUuXG4rICovXG4rc3RhdGljIGludCBteGw4NjJ4eF9yZWFkX2NoaXBfaWQoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXG4re1xuK1x0c3RydWN0IG14bDg2Mnh4X3N5c19yZWdfcncgcmVnID0ge307XG4rXHR1MTYgY2hpcGlkX2wsIGNoaXBpZF9tO1xuK1x0aW50IHJldDtcbitcbitcdHJlZy5hZGRyID0gY3B1X3RvX2xlMzIoTVhMODYyWFhfQ0hJUElEX0wpO1xuK1x0cmV0ID0gTVhMODYyWFhfQVBJX1JFQUQocHJpdiwgU1lTX01JU0NfUkVHX1JELCByZWcpO1xuK1x0aWYgKHJldClcbitcdFx0cmV0dXJuIHJldDtcbitcdGNoaXBpZF9sID0gbGUzMl90b19jcHUocmVnLnZhbCk7XG4rXG4rXHRyZWcuYWRkciA9IGNwdV90b19sZTMyKE1YTDg2MlhYX0NISVBJRF9NKTtcbitcdHJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIFNZU19NSVNDX1JFR19SRCwgcmVnKTtcbitcdGlmIChyZXQpXG4rXHRcdHJldHVybiByZXQ7XG4rXHRjaGlwaWRfbSA9IGxlMzJfdG9fY3B1KHJlZy52YWwpO1xuK1xuK1x0cHJpdi1cdTAwM2Vhc2ljX2lkID0gRklFTERfR0VUKE1YTDg2MlhYX0NISVBJRF9MX1BOVU1MLCBjaGlwaWRfbCkgfFxuK1x0XHRcdEZJRUxEX0dFVChNWEw4NjJYWF9DSElQSURfTV9QTlVNTSwgY2hpcGlkX20pIFx1MDAzY1x1MDAzYyA0O1xuK1x0cHJpdi1cdTAwM2Vhc2ljX3JldiA9IEZJRUxEX0dFVChNWEw4NjJYWF9DSElQSURfTV9WRVJTSU9OLCBjaGlwaWRfbSk7XG4rXG4rXHRyZXR1cm4gMDtcbit9XG4rXG4gc3RhdGljIGludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgbXhsODYyeHhfc3lzX2Z3X2ltYWdlX3ZlcnNpb24gdmVyID0ge307XG5AQCAtMjU0LDYgKzI5MSwxMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3dhaXRfcmVhZHkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0XHRwcml2LVx1MDAzZWZ3X3ZlcnNpb24ubWFqb3IgPSB2ZXIuaXZfbWFqb3I7XG4gXHRcdHByaXYtXHUwMDNlZndfdmVyc2lvbi5taW5vciA9IHZlci5pdl9taW5vcjtcbiBcdFx0cHJpdi1cdTAwM2Vmd192ZXJzaW9uLnJldmlzaW9uID0gbGUxNl90b19jcHUodmVyLml2X3JldmlzaW9uKTtcbitcbitcdFx0cmV0ID0gbXhsODYyeHhfcmVhZF9jaGlwX2lkKHByaXYpO1xuK1x0XHRpZiAocmV0KVxuK1x0XHRcdGRldl93YXJuKGRzLVx1MDAzZWRldiwgXCJmYWlsZWQgdG8gcmVhZCBjaGlwIElEOiAlcGVcXG5cIixcbitcdFx0XHRcdCBFUlJfUFRSKHJldCkpO1xuIFx0XHRyZXR1cm4gMDtcbiBcbiBub3RfcmVhZHlfeWV0OlxuQEAgLTYyMiwxNSArNjY0LDQ5IEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxuIFx0aW50IG5fdXNlcl9wb3J0cyA9IDAsIG1heF92bGFucztcbiBcdGludCBpbmdyZXNzX2ZpbmFscywgdmlkX3J1bGVzO1xuIFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcbi1cdGludCByZXQsIGk7XG4rXHRpbnQgcmV0LCBpLCByZXNjdWU7XG4gXG4tXHRyZXQgPSBteGw4NjJ4eF9yZXNldChwcml2KTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHQvKiBEZXRlY3QgdGhlIGxvYWRlciBvdmVyIFNCIFBESSBmaXJzdDogaXQgbmVlZHMgbm8gZmlybXdhcmUsIHVubGlrZSB0aGVcbitcdCAqIEM0NSBBUEkgKG14bDg2Mnh4X3Jlc2V0L3dhaXRfcmVhZHkpIHdoaWNoIHNwZXdzIENSQyBlcnJvcnMgd2hlbiBub25lXG4rXHQgKiBhbnN3ZXJzLiBUb3VjaCBDNDUgb25seSBvbmNlIHJlc2N1ZSBpcyBydWxlZCBvdXQuXG4rXHQgKi9cbitcdHJlc2N1ZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcbitcdGlmIChyZXNjdWUgXHUwMDNjIDApXG4rXHRcdHJldHVybiByZXNjdWU7XG4gXG4tXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcbi1cdGlmIChyZXQpXG4tXHRcdHJldHVybiByZXQ7XG4rXHRpZiAocmVzY3VlID09IE1YTDg2MlhYX05PVF9SRVNDVUUpIHtcbitcdFx0cmV0ID0gbXhsODYyeHhfcmVzZXQocHJpdik7XG4rXHRcdGlmIChyZXQpXG4rXHRcdFx0cmV0dXJuIHJldDtcbitcbitcdFx0cmV0ID0gbXhsODYyeHhfd2FpdF9yZWFkeShkcyk7XG4rXHRcdGlmIChyZXQpIHtcbitcdFx0XHQvKiB0aGUgcmVzZXQgbWF5IG9ubHkgbm93IGhhdmUgdHJpZ2dlcmVkIHJlc2N1ZSBtb2RlICovXG4rXHRcdFx0cmVzY3VlID0gbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KHByaXYpO1xuK1x0XHRcdGlmIChyZXNjdWUgXHUwMDNjIDApXG4rXHRcdFx0XHRyZXR1cm4gcmVzY3VlO1xuK1x0XHRcdGlmIChyZXNjdWUgPT0gTVhMODYyWFhfTk9UX1JFU0NVRSlcbitcdFx0XHRcdHJldHVybiByZXQ7XG4rXHRcdH1cbitcdH1cbitcbitcdHByaXYtXHUwMDNlcmVzY3VlX21vZGUgPSByZXNjdWU7XG4rXG4rXHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSkge1xuK1x0XHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfcmVhZHkpIHtcbitcdFx0XHRkZXZfd2Fybihkcy1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJzd2l0Y2ggaW4gTUNVYm9vdCByZXNjdWUgbW9kZSwgdXNlIGRldmxpbmsgdG8gZmxhc2ggbmV3IGZpcm13YXJlXFxuXCIpO1xuK1x0XHR9IGVsc2Uge1xuK1x0XHRcdC8qIERyYWluIHRoZSB3ZWRnZWQgZG93bmxvYWQgaW4gdGhlIGJhY2tncm91bmQgc28gaXRcbitcdFx0XHQgKiBuZXZlciBob2xkcyB0aGUgZGV2bGluayBsb2NrOyBpbmZvIGFuZCBmbGFzaCBiZWNvbWVcbitcdFx0XHQgKiBhdmFpbGFibGUgb25jZSByZWFkeS5cbitcdFx0XHQgKi9cbitcdFx0XHRkZXZfd2Fybihkcy1cdTAwM2VkZXYsXG4rXHRcdFx0XHQgXCJzd2l0Y2ggaW4gTUNVYm9vdCB3aXRoIGFuIGludGVycnVwdGVkIGRvd25sb2FkLCByZWNvdmVyaW5nIGluIGJhY2tncm91bmRcXG5cIik7XG4rXHRcdFx0cXVldWVfd29yayhzeXN0ZW1fbG9uZ193cSwgXHUwMDI2cHJpdi1cdTAwM2VyZXNjdWVfaGVhbF93b3JrKTtcbitcdFx0fVxuK1x0XHRyZXR1cm4gMDtcbitcdH1cbiBcbiBcdG11dGV4X2luaXQoXHUwMDI2cHJpdi1cdTAwM2VzZXJkZXNfbG9jayk7XG4gXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXHUwMDNlc2VyZGVzX3BvcnRzKTsgaSsrKVxuQEAgLTcxNSwxMSArNzkxLDIxIEBAIHN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zdGF0ZShzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBib29sIGVuYWJsZSlcbiBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfZW5hYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXG4gXHRcdFx0XHRzdHJ1Y3QgcGh5X2RldmljZSAqcGh5ZGV2KVxuIHtcbitcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2ID0gZHMtXHUwMDNlcHJpdjtcbitcbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRyZXR1cm4gMDtcbitcbiBcdHJldHVybiBteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCB0cnVlKTtcbiB9XG4gXG4gc3RhdGljIHZvaWQgbXhsODYyeHhfcG9ydF9kaXNhYmxlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXG4ge1xuK1x0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuK1xuK1x0aWYgKHByaXYtXHUwMDNlcmVzY3VlX21vZGUpXG4rXHRcdHJldHVybjtcbitcbiBcdGlmIChteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSkpXG4gXHRcdGRldl9lcnIoZHMtXHUwMDNlZGV2LCBcImZhaWxlZCB0byBkaXNhYmxlIHBvcnQgJWRcXG5cIiwgcG9ydCk7XG4gfVxuQEAgLTEzMzcsNiArMTQyMywxMiBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfc2V0dXAoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydClcbiBcdGJvb2wgaXNfY3B1X3BvcnQgPSBkc2FfcG9ydF9pc19jcHUoZHApO1xuIFx0aW50IHJldDtcbiBcbitcdC8qIERTQSByZWluaXRzIGZhaWxlZCB1c2VyIHBvcnRzIGFzIHVudXNlZDsgc2hhcmVkIHBvcnRzIG11c3RcbitcdCAqIHN1Y2NlZWQgZm9yIHRoZSB0cmVlIHRvIHJlZ2lzdGVyLlxuK1x0ICovXG4rXHRpZiAocHJpdi1cdTAwM2VyZXNjdWVfbW9kZSlcbitcdFx0cmV0dXJuIGRzYV9wb3J0X2lzX3VzZXIoZHApID8gLUVOT0RFViA6IDA7XG4rXG4gXHRyZXQgPSBteGw4NjJ4eF9wb3J0X3N0YXRlKGRzLCBwb3J0LCBmYWxzZSk7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuQEAgLTE1NzIsNiArMTY2NCwxMSBAQCBzdGF0aWMgaW50IG14bDg2Mnh4X3BvcnRfbWRiX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0ZXRoZXJfYWRkcl9jb3B5KHFwYXJhbS5tYWMsIG1kYi1cdTAwM2VhZGRyKTtcbiBcbiBcdHJldCA9IE1YTDg2MlhYX0FQSV9SRUFEKHByaXYsIE1YTDg2MlhYX01BQ19UQUJMRUVOVFJZUVVFUlksIHFwYXJhbSk7XG4rXHQvKiAtRU5PREVWOiB0aGUgZmlybXdhcmUgYW5kIGl0cyBNQUMgdGFibGUgYXJlIGdvbmUsIG5vdGhpbmcgbGVmdFxuK1x0ICogdG8gZGVsZXRlXG4rXHQgKi9cbitcdGlmIChyZXQgPT0gLUVOT0RFVilcbitcdFx0cmV0dXJuIDA7XG4gXHRpZiAocmV0KVxuIFx0XHRyZXR1cm4gcmV0O1xuIFxuQEAgLTE2MjgsNiArMTcyNSw5IEBAIHN0YXRpYyB2b2lkIG14bDg2Mnh4X3BvcnRfc3RwX3N0YXRlX3NldChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxuIFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYgPSBkcy1cdTAwM2Vwcml2O1xuIFx0aW50IHJldDtcbiBcbitcdGlmIChwcml2LVx1MDAzZXJlc2N1ZV9tb2RlKVxuK1x0XHRyZXR1cm47XG4rXG4gXHRzd2l0Y2ggKHN0YXRlKSB7XG4gXHRjYXNlIEJSX1NUQVRFX0RJU0FCTEVEOlxuIFx0XHRwYXJhbS5wb3J0X3N0YXRlID0gY3B1X3RvX2xlMzIoTVhMODYyWFhfU1RQX1BPUlRfU1RBVEVfRElTQUJMRSk7XG5AQCAtMjA4Niw2ICsyMTg2LDggQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBteGw4NjJ4eF9zd2l0Y2hfb3BzID0ge1xuIFx0LmdldF9wYXVzZV9zdGF0cyA9IG14bDg2Mnh4X2dldF9wYXVzZV9zdGF0cyxcbiBcdC5nZXRfcm1vbl9zdGF0cyA9IG14bDg2Mnh4X2dldF9ybW9uX3N0YXRzLFxuIFx0LmdldF9zdGF0czY0ID0gbXhsODYyeHhfZ2V0X3N0YXRzNjQsXG4rXHQuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsXG4rXHQuZGV2bGlua19mbGFzaF91cGRhdGUgPSBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcbiB9O1xuIFxuIHN0YXRpYyBpbnQgbXhsODYyeHhfcHJvYmUoc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oIGIvZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmhcbmluZGV4IDQzMmE1ZjNmMmUwOGU2Li43MmRjMzFjYzJiNjJmYSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5oXG4rKysgYi9kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguaFxuQEAgLTE0LDYgKzE0LDEwIEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2O1xuICNkZWZpbmUgTVhMODYyWFhfRklSU1RfU0VSREVTX1BPUlRcdDlcbiAjZGVmaW5lIE1YTDg2MlhYX1NFUkRFU19TTE9UU1x0XHQ0XG4gXG4rLyogbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KCkgcmV0dXJuIGNvZGVzIChuZWdhdGl2ZSB2YWx1ZXMgYXJlIGVycm9ycykgKi9cbisjZGVmaW5lIE1YTDg2MlhYX05PVF9SRVNDVUVcdFx0MFxuKyNkZWZpbmUgTVhMODYyWFhfSU5fUkVTQ1VFXHRcdDFcbitcbiAjZGVmaW5lIE1YTDg2MlhYX0RFRkFVTFRfQlJJREdFXHRcdDBcbiAjZGVmaW5lIE1YTDg2MlhYX01BWF9CUklER0VTXHRcdDQ4XG4gI2RlZmluZSBNWEw4NjJYWF9NQVhfQlJJREdFX1BPUlRTXHQxMjhcbkBAIC0zMDMsNiArMzA3LDEwIEBAIHN0cnVjdCBteGw4NjJ4eF9md192ZXJzaW9uIHtcbiAgKiAgICAgICAgICAgICAgICAgICAgICBmbG9vZGluZylcbiAgKiBAZndfdmVyc2lvbjogICAgICAgICBjYWNoZWQgZmlybXdhcmUgdmVyc2lvbiwgcG9wdWxhdGVkIGF0IHByb2JlIGFuZFxuICAqICAgICAgICAgICAgICAgICAgICAgIGNvbXBhcmVkIHdpdGggTVhMODYyWFhfRldfVkVSX01JTigpXG4rICogQGFzaWNfaWQ6ICAgICAgICAgICAgY2hpcCBwYXJ0IG51bWJlciByZWFkIGZyb20gdGhlIENISVAgSUQgcmVnaXN0ZXJzLFxuKyAqICAgICAgICAgICAgICAgICAgICAgIHJlcG9ydGVkIGFzIHRoZSBkZXZsaW5rIFwiYXNpYy5pZFwiIGZpeGVkIHZlcnNpb25cbisgKiBAYXNpY19yZXY6ICAgICAgICAgICBjaGlwIHZlcnNpb24gcmVhZCBmcm9tIHRoZSBDSElQIElEIHJlZ2lzdGVycyxcbisgKiAgICAgICAgICAgICAgICAgICAgICByZXBvcnRlZCBhcyB0aGUgZGV2bGluayBcImFzaWMucmV2XCIgZml4ZWQgdmVyc2lvblxuICAqIEBzZXJkZXNfcG9ydHM6ICAgICAgIFNlckRlcyBpbnRlcmZhY2VzIGluY2wuIHN1Yi1pbnRlcmZhY2VzIGluIGNhc2Ugb2ZcbiAgKiAgICAgICAgICAgICAgICAgICAgICAxMEdfUVhHTUlJIG9yIFFTR01JSVxuICAqIEBzZXJkZXNfcmVmY291bnQ6ICAgIHBlci1YUENTIGNvdW50IG9mIHN1Yi1wb3J0cyBlbmFibGVkIGJ5IHBoeWxpbms7XG5AQCAtMzE5LDYgKzMyNywxNSBAQCBzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiB7XG4gICogQGV2bGFuX2luZ3Jlc3Nfc2l6ZTogcGVyLXBvcnQgaW5ncmVzcyBFeHRlbmRlZCBWTEFOIGJsb2NrIHNpemVcbiAgKiBAZXZsYW5fZWdyZXNzX3NpemU6ICBwZXItcG9ydCBlZ3Jlc3MgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplXG4gICogQHZmX2Jsb2NrX3NpemU6ICAgICAgcGVyLXBvcnQgVkxBTiBGaWx0ZXIgYmxvY2sgc2l6ZVxuKyAqIEBibG9ja19ob3N0OiAgICAgICAgIHJlamVjdCBmaXJtd2FyZSBBUEkgY29tbWFuZHMgKGV4Y2VwdCBGV19VUERBVEUpXG4rICogICAgICAgICAgICAgICAgICAgICAgZHVyaW5nIGEgZmlybXdhcmUgZmxhc2hcbisgKiBAc2tpcF90ZWFyZG93bjogICAgICBkaXNjYXJkIGZpcm13YXJlIEFQSSBjb21tYW5kcyBkdXJpbmcgdGhlIHRlYXJkb3duXG4rICogICAgICAgICAgICAgICAgICAgICAgdHJpZ2dlcmVkIGJ5IHRoZSBwb3N0LWZsYXNoIHJlcHJvYmVcbisgKiBAcmVzY3VlX21vZGU6ICAgICAgICBzd2l0Y2ggaXMgaW4gTUNVYm9vdDsgZmlybXdhcmUgQVBJIGNvbW1hbmRzIGZhaWwgZmFzdCxcbisgKiAgICAgICAgICAgICAgICAgICAgICBvbmx5IGNsYXVzZS0yMiBTTURJTyB3b3Jrc1xuKyAqIEByZXNjdWVfcmVhZHk6ICAgICAgIChyZXNjdWVfbW9kZSkgbG9hZGVyIGlzIGF0IGEgY2xlYW4gUkVBRFkgYW5kIHdpbGwgYWNjZXB0XG4rICogICAgICAgICAgICAgICAgICAgICAgYSBmbGFzaDsgZmFsc2Ugd2hpbGUgcmVzY3VlX2hlYWxfd29yayBpcyBkcmFpbmluZ1xuKyAqIEByZXNjdWVfaGVhbF93b3JrOiAgIGJhY2tncm91bmQgc2VsZi1oZWFsIGRyYWluaW5nIGEgd2VkZ2VkIGRvd25sb2FkIHRvIFJFQURZXG4gICogQHN0YXRzX3dvcms6ICAgICAgICAgcGVyaW9kaWMgd29yayBpdGVtIHRoYXQgcG9sbHMgUk1PTiBoYXJkd2FyZSBjb3VudGVyc1xuICAqICAgICAgICAgICAgICAgICAgICAgIGFuZCBhY2N1bXVsYXRlcyB0aGVtIGludG8gNjQtYml0IHBlci1wb3J0IHN0YXRzXG4gICovXG5AQCAtMzI2LDkgKzM0MywxMiBAQCBzdHJ1Y3QgbXhsODYyeHhfcHJpdiB7XG4gXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHM7XG4gXHRzdHJ1Y3QgbWRpb19kZXZpY2UgKm1kaW9kZXY7XG4gXHRzdHJ1Y3Qgd29ya19zdHJ1Y3QgY3JjX2Vycl93b3JrO1xuK1x0c3RydWN0IHdvcmtfc3RydWN0IHJlc2N1ZV9oZWFsX3dvcms7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuIFx0dTE2IGRyb3BfbWV0ZXI7XG4gXHRzdHJ1Y3QgbXhsODYyeHhfZndfdmVyc2lvbiBmd192ZXJzaW9uO1xuK1x0dTE2IGFzaWNfaWQ7XG4rXHR1OCBhc2ljX3JldjtcbiBcdHN0cnVjdCBteGw4NjJ4eF9wY3Mgc2VyZGVzX3BvcnRzWzhdO1xuIFx0aW50IHNlcmRlc19yZWZjb3VudFsyXTtcbiBcdHN0cnVjdCBtdXRleCBzZXJkZXNfbG9jaztcbkBAIC0zMzcsNiArMzU3LDEwIEBAIHN0cnVjdCBteGw4NjJ4eF9wcml2IHtcbiBcdHUxNiBldmxhbl9pbmdyZXNzX3NpemU7XG4gXHR1MTYgZXZsYW5fZWdyZXNzX3NpemU7XG4gXHR1MTYgdmZfYmxvY2tfc2l6ZTtcbitcdGJvb2wgYmxvY2tfaG9zdDtcbitcdGJvb2wgc2tpcF90ZWFyZG93bjtcbitcdGJvb2wgcmVzY3VlX21vZGU7XG4rXHRib29sIHJlc2N1ZV9yZWFkeTtcbiBcdHN0cnVjdCBkZWxheWVkX3dvcmsgc3RhdHNfd29yaztcbiB9O1xuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbmV0L2RzYS5oIGIvaW5jbHVkZS9uZXQvZHNhLmhcbmluZGV4IDhjMTZlZjIzY2MxMDJhLi5jOWUxOTM0OGRlNjE5MyAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbmV0L2RzYS5oXG4rKysgYi9pbmNsdWRlL25ldC9kc2EuaFxuQEAgLTExNzAsNiArMTE3MCw5IEBAIHN0cnVjdCBkc2Ffc3dpdGNoX29wcyB7XG4gXHRpbnRcdCgqZGV2bGlua19pbmZvX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuIFx0XHRcdFx0ICAgIHN0cnVjdCBkZXZsaW5rX2luZm9fcmVxICpyZXEsXG4gXHRcdFx0XHQgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcbitcdGludFx0KCpkZXZsaW5rX2ZsYXNoX3VwZGF0ZSkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuK1x0XHRcdFx0XHRzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXG4rXHRcdFx0XHRcdHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjayk7XG4gXHRpbnRcdCgqZGV2bGlua19zYl9wb29sX2dldCkoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxuIFx0XHRcdFx0ICAgICAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXG4gXHRcdFx0XHQgICAgICAgc3RydWN0IGRldmxpbmtfc2JfcG9vbF9pbmZvICpwb29sX2luZm8pO1xuZGlmZiAtLWdpdCBhL25ldC9kc2EvZGV2bGluay5jIGIvbmV0L2RzYS9kZXZsaW5rLmNcbmluZGV4IGVkMzQyZjM0NTY5MmJiLi5kNjAyMjI2N2E4MzljZCAxMDA2NDRcbi0tLSBhL25ldC9kc2EvZGV2bGluay5jXG4rKysgYi9uZXQvZHNhL2RldmxpbmsuY1xuQEAgLTIwLDYgKzIwLDE1IEBAIHN0YXRpYyBpbnQgZHNhX2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRldmxpbmsgKmRsLFxuIFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xuIH1cbiBcbitzdGF0aWMgaW50IGRzYV9kZXZsaW5rX2ZsYXNoX3VwZGF0ZShzdHJ1Y3QgZGV2bGluayAqZGwsXG4rXHRcdFx0XHQgICAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxuK1x0XHRcdFx0ICAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcbit7XG4rXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfZGV2bGlua190b19kcyhkbCk7XG4rXG4rXHRyZXR1cm4gZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlKGRzLCBwYXJhbXMsIGV4dGFjayk7XG4rfVxuK1xuIHN0YXRpYyBpbnQgZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQoc3RydWN0IGRldmxpbmsgKmRsLFxuIFx0XHRcdFx0ICAgdW5zaWduZWQgaW50IHNiX2luZGV4LCB1MTYgcG9vbF9pbmRleCxcbiBcdFx0XHRcdCAgIHN0cnVjdCBkZXZsaW5rX3NiX3Bvb2xfaW5mbyAqcG9vbF9pbmZvKVxuQEAgLTE2NywxOCArMTc2LDMxIEBAIGRzYV9kZXZsaW5rX3NiX29jY190Y19wb3J0X2JpbmRfZ2V0KHN0cnVjdCBkZXZsaW5rX3BvcnQgKmRscCxcbiBcdFx0XHRcdFx0XHRcdHBfbWF4KTtcbiB9XG4gXG4tc3RhdGljIGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyBkc2FfZGV2bGlua19vcHMgPSB7XG4tXHQuaW5mb19nZXRcdFx0XHQ9IGRzYV9kZXZsaW5rX2luZm9fZ2V0LFxuLVx0LnNiX3Bvb2xfZ2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX2dldCxcbi1cdC5zYl9wb29sX3NldFx0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9zZXQsXG4tXHQuc2JfcG9ydF9wb29sX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9nZXQsXG4tXHQuc2JfcG9ydF9wb29sX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9zZXQsXG4tXHQuc2JfdGNfcG9vbF9iaW5kX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9nZXQsXG4tXHQuc2JfdGNfcG9vbF9iaW5kX3NldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3RjX3Bvb2xfYmluZF9zZXQsXG4tXHQuc2Jfb2NjX3NuYXBzaG90XHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LFxuLVx0LnNiX29jY19tYXhfY2xlYXJcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfbWF4X2NsZWFyLFxuLVx0LnNiX29jY19wb3J0X3Bvb2xfZ2V0XHRcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3BvcnRfcG9vbF9nZXQsXG4rLyogVGhlIGRldmxpbmsgY29yZSByZWplY3RzIGZsYXNoIHJlcXVlc3RzIHVwIGZyb250IHdoZW4gdGhlIGZsYXNoX3VwZGF0ZVxuKyAqIG9wIGlzIGFic2VudCwgYmVmb3JlIGZldGNoaW5nIHRoZSBmaXJtd2FyZSBmaWxlIGZyb20gdXNlcnNwYWNlLiBPbmx5XG4rICogaW5zdGFsbCB0aGUgb3AgZm9yIHN3aXRjaGVzIHdob3NlIGRyaXZlciBpbXBsZW1lbnRzIGl0LCBzbyB0aGF0XG4rICogdW5zdXBwb3J0ZWQgcmVxdWVzdHMga2VlcCBmYWlsaW5nIGVhcmx5LlxuKyAqL1xuKyNkZWZpbmUgRFNBX0RFVkxJTktfT1BTXHRcdFx0XHRcdFx0XHRcXFxuK1x0LmluZm9fZ2V0XHRcdFx0PSBkc2FfZGV2bGlua19pbmZvX2dldCxcdFx0XFxcbitcdC5zYl9wb29sX2dldFx0XHRcdD0gZHNhX2Rldmxpbmtfc2JfcG9vbF9nZXQsXHRcXFxuK1x0LnNiX3Bvb2xfc2V0XHRcdFx0PSBkc2FfZGV2bGlua19zYl9wb29sX3NldCxcdFxcXG4rXHQuc2JfcG9ydF9wb29sX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX3BvcnRfcG9vbF9nZXQsXHRcXFxuK1x0LnNiX3BvcnRfcG9vbF9zZXRcdFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfc2V0LFx0XFxcbitcdC5zYl90Y19wb29sX2JpbmRfZ2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX2dldCwgXFxcbitcdC5zYl90Y19wb29sX2JpbmRfc2V0XHRcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX3NldCwgXFxcbitcdC5zYl9vY2Nfc25hcHNob3RcdFx0PSBkc2FfZGV2bGlua19zYl9vY2Nfc25hcHNob3QsXHRcXFxuK1x0LnNiX29jY19tYXhfY2xlYXJcdFx0PSBkc2FfZGV2bGlua19zYl9vY2NfbWF4X2NsZWFyLFx0XFxcbitcdC5zYl9vY2NfcG9ydF9wb29sX2dldFx0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY19wb3J0X3Bvb2xfZ2V0LCBcXFxuIFx0LnNiX29jY190Y19wb3J0X2JpbmRfZ2V0XHQ9IGRzYV9kZXZsaW5rX3NiX29jY190Y19wb3J0X2JpbmRfZ2V0LFxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0ge1xuK1x0RFNBX0RFVkxJTktfT1BTXG4rfTtcbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX2ZsYXNoX29wcyA9IHtcbitcdERTQV9ERVZMSU5LX09QU1xuK1x0LmZsYXNoX3VwZGF0ZVx0XHRcdD0gZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlLFxuIH07XG4gXG4gaW50IGRzYV9kZXZsaW5rX3BhcmFtX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHUzMiBpZCxcbkBAIC0zNzgsMTIgKzQwMCwxNiBAQCB2b2lkIGRzYV9zd2l0Y2hfZGV2bGlua191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiBpbnQgZHNhX3N3aXRjaF9kZXZsaW5rX2FsbG9jKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcbiB7XG4gXHRzdHJ1Y3QgZHNhX2RldmxpbmtfcHJpdiAqZGxfcHJpdjtcbitcdGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzO1xuIFx0c3RydWN0IGRldmxpbmsgKmRsO1xuIFxuK1x0b3BzID0gZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlID8gXHUwMDI2ZHNhX2RldmxpbmtfZmxhc2hfb3BzXG4rXHRcdFx0XHRcdCAgICA6IFx1MDAyNmRzYV9kZXZsaW5rX29wcztcbitcbiBcdC8qIEFkZCB0aGUgc3dpdGNoIHRvIGRldmxpbmsgYmVmb3JlIGNhbGxpbmcgc2V0dXAsIHNvIHRoYXQgc2V0dXAgY2FuXG4gXHQgKiBhZGQgZHBpcGUgdGFibGVzXG4gXHQgKi9cbi1cdGRsID0gZGV2bGlua19hbGxvYyhcdTAwMjZkc2FfZGV2bGlua19vcHMsIHNpemVvZigqZGxfcHJpdiksIGRzLVx1MDAzZWRldik7XG4rXHRkbCA9IGRldmxpbmtfYWxsb2Mob3BzLCBzaXplb2YoKmRsX3ByaXYpLCBkcy1cdTAwM2VkZXYpO1xuIFx0aWYgKCFkbClcbiBcdFx0cmV0dXJuIC1FTk9NRU07XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1MjozOS4wMjcwMTQyNTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjgzNzQ2MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFzc2Vzc2luZyB0aGUgRnV6emFiaWxpdHkgb2YgYSBNYXhMaW5lYXIgTXhMODYyeHggRmlybXdhcmUgUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIOKAkyBpdCBsb29rcyBsaWtlIGl0IGFkZHMgZmlybXdhcmUgZmxhc2hpbmcgYW5kIGRldmxpbmsgc3VwcG9ydCBmb3IgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBzd2l0Y2guIFRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGJlIGluIGBteGw4NjJ4eC1mdy5jYCwgd2hpY2ggaW1wbGVtZW50cyB0aGUgZmlybXdhcmUgdXBkYXRlIHZpYSBkZXZsaW5rLCBhbmQgdGhlbiB0aGVyZSBhcmUgbW9kaWZpY2F0aW9ucyB0byBgbXhsODYyeHguY2AgYW5kIGBkZXZsaW5rLmNgLiBOYXR1cmFsbHksIG15IGZpcnN0IHF1ZXN0aW9uIGlzOiBjYW4gd2UgZXZlbiAqcmVhY2gqIHRoaXMgY29kZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50IGZvciBmdXp6aW5nPyBEU0Egc3dpdGNoZXMgYXJlIHVzdWFsbHkgcGh5c2ljYWwgaGFyZHdhcmUsIGFyZW4ndCB0aGV5PyBCdXQgcGVyaGFwcyB0aGVyZSdzIGFuIGVtdWxhdGlvbiBwYXRoLCBvciBtYXliZSBhIGR1bW15IE1ESU8gYnVzIGNvdWxkIHdvcms/XG5cbkxldCdzIGRpZyBpbiBhIGJpdC4gVGhlIGtleSBoZXJlIGlzIHRoYXQgaXQncyBhbiBNRElPIGRldmljZSBkcml2ZXIuIFRoZSBvYnZpb3VzIHF1ZXN0aW9uIGlzIHdoZXRoZXIgd2UgY2FuIGNvbmp1cmUgdXAgc29tZSBkdW1teSBNRElPIGRldmljZXMgd2l0aGluIGEgUUVNVSBzZXR1cCBvciBldmVuIHN5emthbGxlci4gSSBrbm93IHN5emthbGxlciBoYXMgdGhlIGFiaWxpdHkgdG8gY3JlYXRlIGR1bW15IGRldmljZXMsIEkgd2FzIHRoaW5raW5nIGl0IHVzZXMgYG1kaW9gIHN1YnN5c3RlbSBvciBzaW1pbGFyLCBvciBwb3RlbnRpYWxseSBgbmV0ZGV2c2ltYCwgaG93ZXZlciwgYG5ldGRldnNpbWAgZG9lc24ndCBlbXVsYXRlIE1ESU8gZGV2aWNlcy4gV2FpdCwgZG9lcyBzeXprYWxsZXIgaGF2ZSBzb21ldGhpbmcgbGlrZSBgc3l6X21kaW9fLi4uYD8gTm8sIHRoYXQgZG9lc24ndCBleGlzdC5cblxuU28gdGhlIG9wdGlvbnMgc2VlbSB0byBiZSBjcmVhdGluZyBkZXZpY2VzIHZpYSB0aGUgZGV2aWNlIHRyZWUgb3IgcG90ZW50aWFsbHkgdGhyb3VnaCBJMkMvTURJTyBpbmplY3Rpb24sIGlmIHRoYXQncyBldmVuIHBvc3NpYmxlLiBUaGUgcHJvYmxlbSB3aXRoIHBoeXNpY2FsIHN3aXRjaCBkcml2ZXJzIGxpa2UgRFNBIGlzIHRoZXkncmUgbm90b3Jpb3VzbHkgZGlmZmljdWx0IHRvIHByb2JlIHdpdGhvdXQgdGhlIHJlYWwgaGFyZHdhcmUsIHVubGVzcyB0aGVyZSdzIGEgc3BlY2lmaWMgZW11bGF0b3IgYXZhaWxhYmxlLlxuXG5MZXQgbWUgY29uZmlybSB0aGF0IGBteGw4NjJ4eGAgaXMgZGVmaW5pdGVseSBhIHBoeXNpY2FsIGhhcmR3YXJlIGRyaXZlci4gWWVwLCBcIk1heExpbmVhciBNeEw4NjJ4eFwiLiBPa2F5LCBJIGFtIG5vdyB0aGlua2luZyBJIHNob3VsZCBoYXZlIHN0YXJ0ZWQgYnkgcmVhZGluZyB0aGUgaW5zdHJ1Y3Rpb25zLlxuXG5Ib2xkIG9uLCB0aGUgZnV6emluZyBpbnN0cnVjdGlvbnMgc3BlY2lmaWNhbGx5IHNheTogXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zLi4uIC0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlwiXG5cblRoaXMgaXMsIGJ5IGRlZmluaXRpb24sIGEgKnZlbmRvci1zcGVjaWZpYyBEU0Egc3dpdGNoIGRyaXZlciogKE1heExpbmVhciBNeEw4NjJ4eCkgdGhhdCBsaXZlcyBvbiBhbiBNRElPIGJ1cy4gU28sIHRoZSBtaWxsaW9uLWRvbGxhciBxdWVzdGlvbjogY2FuIGl0IGJlIHByb2JlZCBpbiBRRU1VPyBHaXZlbiB0aGF0IGl0IGFwcGVhcnMgdG8gZml0IHRoZSBcIm5vIGdvXCIgZGVzY3JpcHRpb24gZnJvbSB0aGUgZnV6emluZyBpbnN0cnVjdGlvbnMsIEknbSBnb2luZyB0byBoYXZlIHRvIGRvIHNvbWUgdGhvcm91Z2ggZGlnZ2luZyBpbiB0aGUgZHJpdmVyJ3MgcHJvYmUgZnVuY3Rpb24gaW4gYGRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jYCBhbmQgY29uZmlybSB0aGF0IFFFTVUgaXMgYSB2aWFibGUgb3B0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDE5MywiT3V0cHV0VG9rZW5zIjo1MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3NiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjUyOjQ3LjcxMDc2MzM3WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1OTcyMjEyMSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJteGw4NjJ4eF9wcm9iZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yMTU3PXN0YXRpYyBjb25zdCBzdHJ1Y3QgZHNhX3N3aXRjaF9vcHMgbXhsODYyeHhfc3dpdGNoX29wcyA9IHtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIxOTItXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MjE5MzpzdGF0aWMgaW50IG14bDg2Mnh4X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yMTk0LXtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTIzMDI9c3RhdGljIHN0cnVjdCBtZGlvX2RyaXZlciBteGw4NjJ4eF9kcml2ZXIgPSB7XFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MjMwMzpcXHQucHJvYmUgID0gbXhsODYyeHhfcHJvYmUsXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjMwNC1cXHQucmVtb3ZlID0gbXhsODYyeHhfcmVtb3ZlLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1Mjo0Ny44NzA0OTExNjFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTg4NjgyMDUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk1ESU8gRnV6emluZzogQSBTeXprYWxsZXIgRXhwbG9yYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIE1ESU8gZHJpdmVyIGFuZCB0aGUgcXVlc3Rpb24gaW1tZWRpYXRlbHkgcG9wcyBpbnRvIG15IGhlYWQ6IGNhbiB3ZSBlZmZlY3RpdmVseSBmdXp6IE1ESU8gZGV2aWNlcyB3aXRoaW4gdGhlIFN5emthbGxlciBmcmFtZXdvcms/IE15IGluaXRpYWwgYXNzZXNzbWVudCBpcyB0aGF0IFN5emthbGxlciBsYWNrcyBhIHRydWx5IGdlbmVyaWMgTURJTyBkZXZpY2UgZW11bGF0b3IuIEl0IGRvZXNuJ3Qgc2VlbSB0byBvZmZlciBhIHdheSB0byBwcm9iZSBhcmJpdHJhcnkgTURJTyBkcml2ZXJzIGRpcmVjdGx5IHdpdGhvdXQgcmVseWluZyBvbiBhIHNwZWNpZmljIHZpcnR1YWwgYnVzIGltcGxlbWVudGF0aW9uLiBIbW0sIHdhc24ndCB0aGVyZSBzb21ldGhpbmcgbGlrZSBgbWRpby1tb2NrYC4uLiBvciBhbSBJIG1pc3JlbWVtYmVyaW5nPyBObywgdGhhdCdzIG5vdCBpdC4gUmlnaHQsIEkgbmVlZCB0byB2ZXJpZnkgdGhpcyBhc3N1bXB0aW9uLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBleGlzdGluZyBmdXp6aW5nIGNhcGFiaWxpdGllcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgZm9yIE1ESU8gd2l0aGluIFN5emthbGxlci4gSXQncyB0aW1lIHRvIGRpZyBkZWVwZXIgYW5kIHNlZSB3aGF0J3MgY3VycmVudGx5IGF2YWlsYWJsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjU2MTgsIk91dHB1dFRva2VucyI6MjYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1Mjo1Mi4wNTkxNzUwMTRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQ5MjQ2NDIsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwic3lzL2xpbnV4L1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTI6NTIuMTI0MTA1ODA2WiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjU5NzQ4Nzk3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBSZWFzb25pbmcgb24gSW52ZXN0aWdhdGluZyBNRElPIERldmljZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gc2VhcmNoIHRocm91Z2gga2VybmVsIGNvZGUsIGJ1dCBJIGNhbid0IHVzZSBgZ3JlcHBlcmAgaW4gYHN5cy9saW51eC9gIGJlY2F1c2Ugb2YgdGhlIHN5emthbGxlciBzcGVjaWZpY3MuIEknbSBsaW1pdGVkIHRvIGByZWFkLWZpbGVgIG9yIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIG9yLCB0aGUgaW5zdHJ1Y3Rpb25zIHN1Z2dlc3QgYHJlYWQtZGVzY3JpcHRpb25gLiBUaGUgdGV4dCBleHBsaWNpdGx5IHBvaW50cyBvdXQgdGhhdCBzeXpsYW5nIGRlc2NyaXB0aW9ucyBvciBleHByZXNzaW9ucyB3aXRoICdzeXpfJyBhcmUgb2ZmLWxpbWl0cyBmb3IgYGdyZXBwZXJgLiBUaGUgaW5zdHJ1Y3Rpb25zIHNwZWNpZmljYWxseSB0ZWxsIG1lIHRvIHVzZSB0aGlzLCBidXQgd2FpdC4uLkkgZG9uJ3QgaGF2ZSBpdCBpbiBteSB0b29sc2V0ISBJIG9ubHkgaGF2ZSBgZ3JlcHBlcmAsIGBjb2Rlc2VhcmNoLWRpci1pbmRleGAsIGByZWFkLWZpbGVgLCBhbmQgYHNldC1yZXN1bHRzYC4gSXQncyBmcnVzdHJhdGluZyB3aGVuIHRoZSBkb2N1bWVudGF0aW9uIHJlZmVycyB0byBhIHRvb2wgdGhhdCBpc24ndCBhdmFpbGFibGUsIGJ1dCBJJ2xsIHdvcmsgd2l0aCB3aGF0IEkgaGF2ZS5cblxuUmVnYXJkbGVzcywgSSdtIHRoaW5raW5nIGFib3V0IE1ESU8gZGV2aWNlcywgYW5kIG15IGluaXRpYWwgaW50dWl0aW9uIGlzIHRoYXQgdGhleSBhcmUgZ2VuZXJhbGx5IHRpZWQgdG8gcGh5c2ljYWwgaGFyZHdhcmUuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGlmIGBDT05GSUdfTkVUX0RTQV9NWEw4NjJgIHJlcHJlc2VudHMgYSBwaHlzaWNhbCBoYXJkd2FyZSBkcml2ZXIuIExvb2tpbmcgYXQgdGhlIGNvZGUgY29uZmlybXMgdGhpczsgaXQncyBhIERTQSBzd2l0Y2ggZHJpdmVyIGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4LiBUaGUgYXNzb2NpYXRpb24gd2l0aCBgbWx4c3dgIGZ1cnRoZXIgcmVpbmZvcmNlcyB0aGlzIHJlcXVpcmVtZW50IGZvciBwaHlzaWNhbCBoYXJkd2FyZSBvciBzcGVjaWFsaXplZCBJMkMvTURJTyBoYXJkd2FyZSB0aGF0IGlzbid0IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG5cblRoZSByZWFsIHF1ZXN0aW9uIGlzLCBjb3VsZCB0aGlzIGRldmljZSBiZSBwcm9iZWQgdGhyb3VnaCBhIHNvZnR3YXJlIE1ESU8gYnVzPyBFdmVuIGlmIHRoZSBwcm9iaW5nIHN1Y2NlZWRzLCB0aGUgZnVuZGFtZW50YWwgY29tbXVuaWNhdGlvbiBpbnZvbHZlcyBNRElPIHJlYWRzL3dyaXRlcy4gV2l0aG91dCB0aGUgYWN0dWFsIGhhcmR3YXJlIHByZXNlbnQsIGFueSBwcm9iZSBpcyBnb2luZyB0byBmYWlsLiBJIHNob3VsZCBwcm9iYWJseSBmb2N1cyBvbiBgbXhsODYyeHhfcHJvYmVgIHRvIGJlIHN1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1OTExLCJPdXRwdXRUb2tlbnMiOjUyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjUyOjU4LjcyMTU5NTc3MloiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM3NzkwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTkzLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjE5MzpcXHRzdGF0aWMgaW50IG14bDg2Mnh4X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4yMTk0OlxcdHtcXG4yMTk1OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXY7XFxuMjE5NjpcXHRcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdjtcXG4yMTk3OlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcztcXG4yMTk4OlxcdFxcdGludCBlcnIsIGk7XFxuMjE5OTpcXHRcXG4yMjAwOlxcdFxcdHByaXYgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKnByaXYpLCBHRlBfS0VSTkVMKTtcXG4yMjAxOlxcdFxcdGlmICghcHJpdilcXG4yMjAyOlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjIyMDM6XFx0XFxuMjIwNDpcXHRcXHRwcml2LVxcdTAwM2VtZGlvZGV2ID0gbWRpb2RldjtcXG4yMjA1OlxcdFxcbjIyMDY6XFx0XFx0ZHMgPSBkZXZtX2t6YWxsb2MoZGV2LCBzaXplb2YoKmRzKSwgR0ZQX0tFUk5FTCk7XFxuMjIwNzpcXHRcXHRpZiAoIWRzKVxcbjIyMDg6XFx0XFx0XFx0cmV0dXJuIC1FTk9NRU07XFxuMjIwOTpcXHRcXG4yMjEwOlxcdFxcdHByaXYtXFx1MDAzZWRzID0gZHM7XFxuMjIxMTpcXHRcXHRkcy1cXHUwMDNlZGV2ID0gZGV2O1xcbjIyMTI6XFx0XFx0ZHMtXFx1MDAzZXByaXYgPSBwcml2O1xcbjIyMTM6XFx0XFx0ZHMtXFx1MDAzZW9wcyA9IFxcdTAwMjZteGw4NjJ4eF9zd2l0Y2hfb3BzO1xcbjIyMTQ6XFx0XFx0ZHMtXFx1MDAzZXBoeWxpbmtfbWFjX29wcyA9IFxcdTAwMjZteGw4NjJ4eF9waHlsaW5rX21hY19vcHM7XFxuMjIxNTpcXHRcXHRkcy1cXHUwMDNlbnVtX3BvcnRzID0gTVhMODYyWFhfTUFYX1BPUlRTO1xcbjIyMTY6XFx0XFx0ZHMtXFx1MDAzZWZkYl9pc29sYXRpb24gPSB0cnVlO1xcbjIyMTc6XFx0XFx0ZHMtXFx1MDAzZW1heF9udW1fYnJpZGdlcyA9IE1YTDg2MlhYX01BWF9CUklER0VTO1xcbjIyMTg6XFx0XFxuMjIxOTpcXHRcXHRteGw4NjJ4eF9ob3N0X2luaXQocHJpdik7XFxuMjIyMDpcXHRcXG4yMjIxOlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNWEw4NjJYWF9NQVhfUE9SVFM7IGkrKykge1xcbjIyMjI6XFx0XFx0XFx0cHJpdi1cXHUwMDNlcG9ydHNbaV0ucHJpdiA9IHByaXY7XFxuMjIyMzpcXHRcXHRcXHRJTklUX1dPUksoXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldLmhvc3RfZmxvb2Rfd29yayxcXG4yMjI0OlxcdFxcdFxcdFxcdCAgbXhsODYyeHhfaG9zdF9mbG9vZF93b3JrX2ZuKTtcXG4yMjI1OlxcdFxcdFxcdHNwaW5fbG9ja19pbml0KFxcdTAwMjZwcml2LVxcdTAwM2Vwb3J0c1tpXS5zdGF0c19sb2NrKTtcXG4yMjI2OlxcdFxcdH1cXG4yMjI3OlxcdFxcbjIyMjg6XFx0XFx0SU5JVF9ERUxBWUVEX1dPUksoXFx1MDAyNnByaXYtXFx1MDAzZXN0YXRzX3dvcmssIG14bDg2Mnh4X3N0YXRzX3dvcmtfZm4pO1xcbjIyMjk6XFx0XFxuMjIzMDpcXHRcXHRkZXZfc2V0X2RydmRhdGEoZGV2LCBkcyk7XFxuMjIzMTpcXHRcXG4yMjMyOlxcdFxcdGVyciA9IGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpO1xcbjIyMzM6XFx0XFx0aWYgKGVycikge1xcbjIyMzQ6XFx0XFx0XFx0c2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKTtcXG4yMjM1OlxcdFxcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdHNfd29yayk7XFxuMjIzNjpcXHRcXHRcXHRteGw4NjJ4eF9ob3N0X3NodXRkb3duKHByaXYpO1xcbjIyMzc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1YTDg2MlhYX01BWF9QT1JUUzsgaSsrKVxcbjIyMzg6XFx0XFx0XFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbaV0uaG9zdF9mbG9vZF93b3JrKTtcXG4yMjM5OlxcdFxcdH1cXG4yMjQwOlxcdFxcbjIyNDE6XFx0XFx0cmV0dXJuIGVycjtcXG4yMjQyOlxcdH1cXG4yMjQzOlxcdFxcbjIyNDQ6XFx0c3RhdGljIHZvaWQgbXhsODYyeHhfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG4yMjQ1OlxcdHtcXG4yMjQ2OlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRldl9nZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2KTtcXG4yMjQ3OlxcdFxcdHN0cnVjdCBteGw4NjJ4eF9wcml2ICpwcml2O1xcbjIyNDg6XFx0XFx0aW50IGk7XFxuMjI0OTpcXHRcXG4yMjUwOlxcdFxcdGlmICghZHMpXFxuMjI1MTpcXHRcXHRcXHRyZXR1cm47XFxuMjI1MjpcXHRcXG4yMjUzOlxcdFxcdHByaXYgPSBkcy1cXHUwMDNlcHJpdjtcXG4yMjU0OlxcdFxcbjIyNTU6XFx0XFx0c2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKTtcXG4yMjU2OlxcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdHNfd29yayk7XFxuMjI1NzpcXHRcXG4yMjU4OlxcdFxcdGRzYV91bnJlZ2lzdGVyX3N3aXRjaChkcyk7XFxuMjI1OTpcXHRcXG4yMjYwOlxcdFxcdG14bDg2Mnh4X2hvc3Rfc2h1dGRvd24ocHJpdik7XFxuMjI2MTpcXHRcXG4yMjYyOlxcdFxcdC8qIENhbmNlbCBhbnkgcGVuZGluZyBob3N0IGZsb29kIHdvcmsuIGRzYV91bnJlZ2lzdGVyX3N3aXRjaCgpXFxuMjI2MzpcXHRcXHQgKiBoYXMgYWxyZWFkeSBjYWxsZWQgcG9ydF90ZWFyZG93biAod2hpY2ggc2V0cyBzZXR1cF9kb25lPWZhbHNlKSxcXG4yMjY0OlxcdFxcdCAqIGJ1dCBhIHdvcmtlciBjb3VsZCBzdGlsbCBiZSBibG9ja2VkIG9uIHJ0bmxfbG9jaygpLiBTaW5jZSB3ZVxcbjIyNjU6XFx0XFx0ICogYXJlIG5vdyBvdXRzaWRlIFJUTkwsIGNhbmNlbF93b3JrX3N5bmMoKSB3aWxsIG5vdCBkZWFkbG9jay5cXG4yMjY2OlxcdFxcdCAqL1xcbjIyNjc6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE1YTDg2MlhYX01BWF9QT1JUUzsgaSsrKVxcbjIyNjg6XFx0XFx0XFx0Y2FuY2VsX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlcG9ydHNbaV0uaG9zdF9mbG9vZF93b3JrKTtcXG4yMjY5OlxcdH1cXG4yMjcwOlxcdFxcbjIyNzE6XFx0c3RhdGljIHZvaWQgbXhsODYyeHhfc2h1dGRvd24oc3RydWN0IG1kaW9fZGV2aWNlICptZGlvZGV2KVxcbjIyNzI6XFx0e1xcbjIyNzM6XFx0XFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZGV2X2dldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYpO1xcbjIyNzQ6XFx0XFx0c3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXY7XFxuMjI3NTpcXHRcXHRpbnQgaTtcXG4yMjc2OlxcdFxcbjIyNzc6XFx0XFx0aWYgKCFkcylcXG4yMjc4OlxcdFxcdFxcdHJldHVybjtcXG4yMjc5OlxcdFxcbjIyODA6XFx0XFx0cHJpdiA9IGRzLVxcdTAwM2Vwcml2O1xcbjIyODE6XFx0XFxuMjI4MjpcXHRcXHRkc2Ffc3dpdGNoX3NodXRkb3duKGRzKTtcXG4yMjgzOlxcdFxcbjIyODQ6XFx0XFx0c2V0X2JpdChNWEw4NjJYWF9GTEFHX1dPUktfU1RPUFBFRCwgXFx1MDAyNnByaXYtXFx1MDAzZWZsYWdzKTtcXG4yMjg1OlxcdFxcdGNhbmNlbF9kZWxheWVkX3dvcmtfc3luYyhcXHUwMDI2cHJpdi1cXHUwMDNlc3RhdHNfd29yayk7XFxuMjI4NjpcXHRcXG4yMjg3OlxcdFxcdG14bDg2Mnh4X2hvc3Rfc2h1dGRvd24ocHJpdik7XFxuMjI4ODpcXHRcXG4yMjg5OlxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBNWEw4NjJYWF9NQVhfUE9SVFM7IGkrKylcXG4yMjkwOlxcdFxcdFxcdGNhbmNlbF93b3JrX3N5bmMoXFx1MDAyNnByaXYtXFx1MDAzZXBvcnRzW2ldLmhvc3RfZmxvb2Rfd29yayk7XFxuMjI5MTpcXHRcXG4yMjkyOlxcdFxcdGRldl9zZXRfZHJ2ZGF0YShcXHUwMDI2bWRpb2Rldi1cXHUwMDNlZGV2LCBOVUxMKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTI6NTguNzIxOTc1NTExWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE5NDgwNDk0OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJ20gZGVlcCBpbiB0aGUgd2VlZHMgb2YgZW1iZWRkZWQgc3lzdGVtcyBhbmQgZHJpdmVyIGRldmVsb3BtZW50OlxuXG4qKkluaXRpYWwgVGhvdWdodHMgb24gYSBTd2l0Y2ggUmVnaXN0cmF0aW9uKipcblxuQWxyaWdodCwgSSd2ZSBnb3QgdGhlIHByb2JlIGZ1bmN0aW9uIHJlZ2lzdGVyaW5nIHRoZSBzd2l0Y2gg4oCTIGdvb2QsIHRoYXQncyB0aGUgZW50cnkgcG9pbnQuIFRoZSBjcnVjaWFsIHBhcnQgaGVyZSBpcyB0aGF0IGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCB3aWxsLCBhdCBzb21lIHBvaW50LCB0cmlnZ2VyIGBteGw4NjJ4eF9zZXR1cGAuIFRoYXTigJlzIHRoZSByZWFsIG1lYXQgb2Ygc2V0dGluZyB1cCB0aGlzIE1YTDg2Mnh4IGNoaXAsIHNvIHRoYXQncyB3aGVyZSBteSBhdHRlbnRpb24gbmVlZHMgdG8gc2hpZnQuIExldCdzIGRpZyBpbnRvIGBteGw4NjJ4eF9zZXR1cGAgYW5kIHNlZSB3aGF0J3MgaGFwcGVuaW5nIHRoZXJlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaGFyZHdhcmUgaW5pdGlhbGl6YXRpb24gc2VxdWVuY2UsIGFueSBjb25maWd1cmF0aW9uIHJlZ2lzdGVyIHdyaXRlcywgYW5kIHRoZSBvdmVyYWxsIHN0YXRlIHNldHVwIGZvciB0aGlzIHN3aXRjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjgyNDgsIk91dHB1dFRva2VucyI6NTEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjUzOjAyLjkxNjc4MzQ0MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzE4MDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjY0LFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDY2NDpcXHRcXHRpbnQgbl91c2VyX3BvcnRzID0gMCwgbWF4X3ZsYW5zO1xcbiA2NjU6XFx0XFx0aW50IGluZ3Jlc3NfZmluYWxzLCB2aWRfcnVsZXM7XFxuIDY2NjpcXHRcXHRzdHJ1Y3QgZHNhX3BvcnQgKmRwO1xcbiA2Njc6XFx0XFx0aW50IHJldCwgaSwgcmVzY3VlO1xcbiA2Njg6XFx0XFxuIDY2OTpcXHRcXHQvKiBEZXRlY3QgdGhlIGxvYWRlciBvdmVyIFNCIFBESSBmaXJzdDogaXQgbmVlZHMgbm8gZmlybXdhcmUsIHVubGlrZSB0aGVcXG4gNjcwOlxcdFxcdCAqIEM0NSBBUEkgKG14bDg2Mnh4X3Jlc2V0L3dhaXRfcmVhZHkpIHdoaWNoIHNwZXdzIENSQyBlcnJvcnMgd2hlbiBub25lXFxuIDY3MTpcXHRcXHQgKiBhbnN3ZXJzLiBUb3VjaCBDNDUgb25seSBvbmNlIHJlc2N1ZSBpcyBydWxlZCBvdXQuXFxuIDY3MjpcXHRcXHQgKi9cXG4gNjczOlxcdFxcdHJlc2N1ZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcXG4gNjc0OlxcdFxcdGlmIChyZXNjdWUgXFx1MDAzYyAwKVxcbiA2NzU6XFx0XFx0XFx0cmV0dXJuIHJlc2N1ZTtcXG4gNjc2OlxcdFxcbiA2Nzc6XFx0XFx0aWYgKHJlc2N1ZSA9PSBNWEw4NjJYWF9OT1RfUkVTQ1VFKSB7XFxuIDY3ODpcXHRcXHRcXHRyZXQgPSBteGw4NjJ4eF9yZXNldChwcml2KTtcXG4gNjc5OlxcdFxcdFxcdGlmIChyZXQpXFxuIDY4MDpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiA2ODE6XFx0XFxuIDY4MjpcXHRcXHRcXHRyZXQgPSBteGw4NjJ4eF93YWl0X3JlYWR5KGRzKTtcXG4gNjgzOlxcdFxcdFxcdGlmIChyZXQpIHtcXG4gNjg0OlxcdFxcdFxcdFxcdC8qIHRoZSByZXNldCBtYXkgb25seSBub3cgaGF2ZSB0cmlnZ2VyZWQgcmVzY3VlIG1vZGUgKi9cXG4gNjg1OlxcdFxcdFxcdFxcdHJlc2N1ZSA9IG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdChwcml2KTtcXG4gNjg2OlxcdFxcdFxcdFxcdGlmIChyZXNjdWUgXFx1MDAzYyAwKVxcbiA2ODc6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIHJlc2N1ZTtcXG4gNjg4OlxcdFxcdFxcdFxcdGlmIChyZXNjdWUgPT0gTVhMODYyWFhfTk9UX1JFU0NVRSlcXG4gNjg5OlxcdFxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDY5MDpcXHRcXHRcXHR9XFxuIDY5MTpcXHRcXHR9XFxuIDY5MjpcXHRcXG4gNjkzOlxcdFxcdHByaXYtXFx1MDAzZXJlc2N1ZV9tb2RlID0gcmVzY3VlO1xcbiA2OTQ6XFx0XFxuIDY5NTpcXHRcXHRpZiAocHJpdi1cXHUwMDNlcmVzY3VlX21vZGUpIHtcXG4gNjk2OlxcdFxcdFxcdGlmIChwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHkpIHtcXG4gNjk3OlxcdFxcdFxcdFxcdGRldl93YXJuKGRzLVxcdTAwM2VkZXYsXFxuIDY5ODpcXHRcXHRcXHRcXHRcXHQgXFxcInN3aXRjaCBpbiBNQ1Vib290IHJlc2N1ZSBtb2RlLCB1c2UgZGV2bGluayB0byBmbGFzaCBuZXcgZmlybXdhcmVcXFxcblxcXCIpO1xcbiA2OTk6XFx0XFx0XFx0fSBlbHNlIHtcXG4gNzAwOlxcdFxcdFxcdFxcdC8qIERyYWluIHRoZSB3ZWRnZWQgZG93bmxvYWQgaW4gdGhlIGJhY2tncm91bmQgc28gaXRcXG4gNzAxOlxcdFxcdFxcdFxcdCAqIG5ldmVyIGhvbGRzIHRoZSBkZXZsaW5rIGxvY2s7IGluZm8gYW5kIGZsYXNoIGJlY29tZVxcbiA3MDI6XFx0XFx0XFx0XFx0ICogYXZhaWxhYmxlIG9uY2UgcmVhZHkuXFxuIDcwMzpcXHRcXHRcXHRcXHQgKi9cXG4gNzA0OlxcdFxcdFxcdFxcdGRldl93YXJuKGRzLVxcdTAwM2VkZXYsXFxuIDcwNTpcXHRcXHRcXHRcXHRcXHQgXFxcInN3aXRjaCBpbiBNQ1Vib290IHdpdGggYW4gaW50ZXJydXB0ZWQgZG93bmxvYWQsIHJlY292ZXJpbmcgaW4gYmFja2dyb3VuZFxcXFxuXFxcIik7XFxuIDcwNjpcXHRcXHRcXHRcXHRxdWV1ZV93b3JrKHN5c3RlbV9sb25nX3dxLCBcXHUwMDI2cHJpdi1cXHUwMDNlcmVzY3VlX2hlYWxfd29yayk7XFxuIDcwNzpcXHRcXHRcXHR9XFxuIDcwODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNzA5OlxcdFxcdH1cXG4gNzEwOlxcdFxcbiA3MTE6XFx0XFx0bXV0ZXhfaW5pdChcXHUwMDI2cHJpdi1cXHUwMDNlc2VyZGVzX2xvY2spO1xcbiA3MTI6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUocHJpdi1cXHUwMDNlc2VyZGVzX3BvcnRzKTsgaSsrKVxcbiA3MTM6XFx0XFx0XFx0bXhsODYyeHhfc2V0dXBfcGNzKHByaXYsIFxcdTAwMjZwcml2LVxcdTAwM2VzZXJkZXNfcG9ydHNbaV0sXFxuIDcxNDpcXHRcXHRcXHRcXHRcXHQgICBpICsgTVhMODYyWFhfRklSU1RfU0VSREVTX1BPUlQpO1xcbiA3MTU6XFx0XFxuIDcxNjpcXHRcXHQvKiBDYWxjdWxhdGUgRXh0ZW5kZWQgVkxBTiBibG9jayBzaXplcy5cXG4gNzE3OlxcdFxcdCAqIFdpdGggVkxBTiBGaWx0ZXIgaGFuZGxpbmcgVklEIG1lbWJlcnNoaXAgY2hlY2tzOlxcbiA3MTg6XFx0XFx0ICogICBJbmdyZXNzOiBvbmx5IGZpbmFsIGNhdGNoYWxsIHJ1bGVzIChQVklEIGluc2VydGlvbiwgODAyLjFRXFxuIDcxOTpcXHRcXHQgKiAgICAgICAgICAgIGFjY2VwdCwgbm9uLTgwMjFRIFRQSUQgaGFuZGxpbmcsIGRpc2NhcmQpLlxcbiA3MjA6XFx0XFx0ICogICAgICAgICAgICBCbG9jayBzaXplZCB0byBleGFjdGx5IGZpdCB0aGUgZmluYWxzIC0tIG5vIHBlci1WSURcXG4gNzIxOlxcdFxcdCAqICAgICAgICAgICAgaW5ncmVzcyBFVkxBTiBydWxlcyBhcmUgbmVlZGVkLiAoNyBlbnRyaWVzLilcXG4gNzIyOlxcdFxcdCAqICAgRWdyZXNzOiAgMiBydWxlcyBwZXIgVklEIHRoYXQgbmVlZHMgdGFnIHN0cmlwcGluZyAodW50YWdnZWQgVklEcykuXFxuIDcyMzpcXHRcXHQgKiAgICAgICAgICAgIE5vIGVncmVzcyBmaW5hbCBjYXRjaGFsbHMgLS0gVkxBTiBGaWx0ZXIgZG9lcyB0aGUgZGlzY2FyZC5cXG4gNzI0OlxcdFxcdCAqICAgQ1BVOiAgICAgRVZMQU4gaXMgbGVmdCBkaXNhYmxlZCBvbiBDUFUgcG9ydHMgLS0gZnJhbWVzIHBhc3NcXG4gNzI1OlxcdFxcdCAqICAgICAgICAgICAgdGhyb3VnaCB3aXRob3V0IEVWTEFOIHByb2Nlc3NpbmcuXFxuIDcyNjpcXHRcXHQgKlxcbiA3Mjc6XFx0XFx0ICogVG90YWwgRVZMQU4gYnVkZ2V0OlxcbiA3Mjg6XFx0XFx0ICogICBuX3VzZXJfcG9ydHMgKiAoaW5ncmVzcyArIGVncmVzcykgXFx1MDAzYz0gMTAyNC5cXG4gNzI5OlxcdFxcdCAqIEluZ3Jlc3MgYmxvY2tzIGFyZSBzbWFsbCAoNyBlbnRyaWVzKSwgc28gYWxtb3N0IGFsbCBjYXBhY2l0eVxcbiA3MzA6XFx0XFx0ICogZ29lcyB0byBlZ3Jlc3MgVklEIHJ1bGVzLlxcbiA3MzE6XFx0XFx0ICovXFxuIDczMjpcXHRcXHRkc2Ffc3dpdGNoX2Zvcl9lYWNoX3VzZXJfcG9ydChkcCwgZHMpXFxuIDczMzpcXHRcXHRcXHRuX3VzZXJfcG9ydHMrKztcXG4gNzM0OlxcdFxcbiA3MzU6XFx0XFx0aWYgKG5fdXNlcl9wb3J0cykge1xcbiA3MzY6XFx0XFx0XFx0aW5ncmVzc19maW5hbHMgPSBBUlJBWV9TSVpFKGluZ3Jlc3NfYXdhcmVfZmluYWwpO1xcbiA3Mzc6XFx0XFx0XFx0dmlkX3J1bGVzID0gQVJSQVlfU0laRSh2aWRfYWNjZXB0X3N0YW5kYXJkKTtcXG4gNzM4OlxcdFxcbiA3Mzk6XFx0XFx0XFx0LyogSW5ncmVzcyBibG9jazogZml4ZWQgYXQgZmluYWxzIGNvdW50ICg3IGVudHJpZXMpICovXFxuIDc0MDpcXHRcXHRcXHRwcml2LVxcdTAwM2Vldmxhbl9pbmdyZXNzX3NpemUgPSBpbmdyZXNzX2ZpbmFscztcXG4gNzQxOlxcdFxcbiA3NDI6XFx0XFx0XFx0LyogRWdyZXNzIGJsb2NrOiByZW1haW5pbmcgYnVkZ2V0IGRpdmlkZWQgZXF1YWxseSBhbW9uZ1xcbiA3NDM6XFx0XFx0XFx0ICogdXNlciBwb3J0cy4gRWFjaCB1bnRhZ2dlZCBWSUQgbmVlZHMgdmlkX3J1bGVzICgyKVxcbiA3NDQ6XFx0XFx0XFx0ICogRVZMQU4gZW50cmllcyBmb3IgdGFnIHN0cmlwcGluZy4gVGFnZ2VkLW9ubHkgVklEc1xcbiA3NDU6XFx0XFx0XFx0ICogbmVlZCBubyBFVkxBTiBydWxlcyBhdCBhbGwuXFxuIDc0NjpcXHRcXHRcXHQgKi9cXG4gNzQ3OlxcdFxcdFxcdG1heF92bGFucyA9IChNWEw4NjJYWF9UT1RBTF9FVkxBTl9FTlRSSUVTIC1cXG4gNzQ4OlxcdFxcdFxcdFxcdCAgICAgbl91c2VyX3BvcnRzICogaW5ncmVzc19maW5hbHMpIC9cXG4gNzQ5OlxcdFxcdFxcdFxcdCAgICAobl91c2VyX3BvcnRzICogdmlkX3J1bGVzKTtcXG4gNzUwOlxcdFxcdFxcdHByaXYtXFx1MDAzZWV2bGFuX2VncmVzc19zaXplID0gdmlkX3J1bGVzICogbWF4X3ZsYW5zO1xcbiA3NTE6XFx0XFxuIDc1MjpcXHRcXHRcXHQvKiBWTEFOIEZpbHRlciBibG9jazogb25lIHBlciB1c2VyIHBvcnQuIFRoZSAxMDI0LWVudHJ5XFxuIDc1MzpcXHRcXHRcXHQgKiB0YWJsZSBpcyBkaXZpZGVkIGVxdWFsbHkgYW1vbmcgdXNlciBwb3J0cy4gRWFjaCBwb3J0XFxuIDc1NDpcXHRcXHRcXHQgKiBnZXRzIGl0cyBvd24gVkYgYmxvY2sgZm9yIHBlci1wb3J0IFZJRCBtZW1iZXJzaGlwIC0tXFxuIDc1NTpcXHRcXHRcXHQgKiBkaXNjYXJkX3VubWF0Y2hlZF90YWdnZWQgaGFuZGxlcyB0aGUgcmVzdC5cXG4gNzU2OlxcdFxcdFxcdCAqL1xcbiA3NTc6XFx0XFx0XFx0cHJpdi1cXHUwMDNldmZfYmxvY2tfc2l6ZSA9IE1YTDg2MlhYX1RPVEFMX1ZGX0VOVFJJRVMgLyBuX3VzZXJfcG9ydHM7XFxuIDc1ODpcXHRcXHR9XFxuIDc1OTpcXHRcXG4gNzYwOlxcdFxcdHJldCA9IG14bDg2Mnh4X3NldHVwX2Ryb3BfbWV0ZXIoZHMpO1xcbiA3NjE6XFx0XFx0aWYgKHJldClcXG4gNzYyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDc2MzpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTM6MDIuOTE2OTE4MjcxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQxNTc3MTQ4OTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipBbmFseXppbmcgdGhlIG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCBGdW5jdGlvbioqXG5cbkFscmlnaHQsIGxldCdzIHRha2UgYSBsb29rIGF0IHRoaXMgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgZnVuY3Rpb24uIEZyb20gd2hhdCBJIHNlZSwgaXQncyBkZXNpZ25lZCB0byByZWFkIHNvbWUgZGF0YSBmcm9tIE1ESU8uIFNlZW1zIHByZXR0eSBzdHJhaWdodGZvcndhcmQgLSB0cnlpbmcgdG8gcHJvYmUgYSBQSFksIGxpa2VseSBkdXJpbmcgc29tZSBzb3J0IG9mIHJlY292ZXJ5IG9yIGJvb3QgcHJvY2Vzcy4gVGhlIGNyaXRpY2FsIHBhcnQgaXMgdGhhdCBpZiB0aGlzIE1ESU8gcmVhZCBnb2VzIHNvdXRoLCB0aGUgZnVuY3Rpb24ncyBnb2luZyB0byByZXR1cm4gYSBuZWdhdGl2ZSB2YWx1ZSwgd2hpY2ggaXMgbXkgaW5kaWNhdG9yIG9mIGEgZmFpbHVyZS4gTWFrZXMgc2Vuc2U7IGZhaWx1cmUgdG8gY29tbXVuaWNhdGUgb3ZlciBNRElPIHRvIGEgUEhZIGluIGVhcmx5IGJvb3QgaXMgb2Z0ZW4gYSBzaG93c3RvcHBlci4gTGV0IG1lIGdvIGFoZWFkIGFuZCBzdGFydCBkaWdnaW5nIGludG8gdGhlIGRldGFpbHMgb2YgdGhlIGltcGxlbWVudGF0aW9uIHRvIHNlZSBpZiBhbnl0aGluZyBqdW1wcyBvdXQuIEnigJltIGd1ZXNzaW5nIGl04oCZcyBsb29raW5nIGZvciBhIHNwZWNpZmljIHJlZ2lzdGVyIHZhbHVlIG9yIGJpdCBwYXR0ZXJuLiBJJ2xsIGNoZWNrIGhvdyByb2J1c3QgdGhlIE1ESU8gYWNjZXNzIGl0c2VsZiBpcyAtIGFyZSB0aGVyZSByZXRyaWVzPyBUaW1lb3V0IGNvbnNpZGVyYXRpb25zPyBBbnkgY2hhbmNlIG9mIGVycmF0YSByZWxhdGVkIHRvIHRoaXMgc3BlY2lmaWMgc2lsaWNvbiB2ZXJzaW9uP1xuXG5cbiIsIklucHV0VG9rZW5zIjozMDE2OCwiT3V0cHV0VG9rZW5zIjo1MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTM6MDcuMDc0NjM1NTg4WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzYzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyNTAsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMjUwOlxcdC8qIFJlY292ZXIgYSBzd2l0Y2ggd2hvc2UgU0IgUERJIGRvd25sb2FkIHdhcyBpbnRlcnJ1cHRlZCBtaWQtdHJhbnNmZXIgLSB0aGVcXG4gMjUxOlxcdCAqIGhvc3QgZGllZCBhZnRlciBNQ1Vib290IGJlZ2FuIGVyYXNpbmcgZmxhc2gsIHdoZXRoZXIgaXQgYWJvcnRlZCBtaWQgZXJhc2Ugb3JcXG4gMjUyOlxcdCAqIG1pZCBpbWFnZS13cml0ZSwgYm90aCBlbmQgdXAgaW4gdGhlIHNhbWUgcGxhY2U6IHRoZSBwYXlsb2FkIHJlY2VpdmUgbG9vcC5cXG4gMjUzOlxcdCAqIFRoZXJlIHRoZSBsb2FkZXIgcHVibGlzaGVzIFNUQVQ9MCwgd2FpdHMgZm9yIHRoZSBob3N0IHRvIHdyaXRlIGEgYnl0ZS1jb3VudFxcbiAyNTQ6XFx0ICogdG8gU1RBVCwgRE1BcyB0aGF0IG1hbnkgYnl0ZXMgYW5kIHN1YnRyYWN0cyB0aGUgY291bnQgZnJvbSBhIHJlbWFpbmluZy1ieXRlc1xcbiAyNTU6XFx0ICogY291bnRlciwgbGVhdmluZyB0aGUgbG9vcCBvbmx5IHdoZW4gdGhlIGNvdW50ZXIgcmVhY2hlcyBleGFjdGx5IHplcm8uIFRoZVxcbiAyNTY6XFx0ICogaW1hZ2Ugc2l6ZSBkaWVkIHdpdGggdGhlIGhvc3QsIHNvIHdlIGZlZWQgc2luZ2xlLWJ5dGUgY2h1bmtzIChzZWVcXG4gMjU3OlxcdCAqIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTKSB0byB3YWxrIHRoZSBjb3VudGVyIHRvIHplcm8gd2l0aG91dCB1bmRlcmZsb3csXFxuIDI1ODpcXHQgKiB0aGVuIHNlbmQgRU5ELiBUaGUgbG9hZGVyIHJ1bnMgaXRzIChmYWlsZWQpIGNoZWNrc3VtIGFuZCBlaXRoZXIgcmUtYXJtc1xcbiAyNTk6XFx0ICogUkVBRFkgb3IsIGlmIGEgdmFsaWQgaW1hZ2Ugc3Vydml2ZWQgaW4gZmxhc2gsIGJvb3RzIGl0LiBSZXR1cm5zIDAgd2hlbiBSRUFEWVxcbiAyNjA6XFx0ICogaXMgcmVhY2hlZCAodGhlIGNhbGxlciBjYW4gZmxhc2gpLCAxIHdoZW4gdGhlIGxvYWRlciBib290ZWQgaW5zdGVhZCAodGhlXFxuIDI2MTpcXHQgKiBzd2l0Y2ggaXMgcmVjb3ZlcmVkIGJ1dCB0aGUgaW50ZW5kZWQgaW1hZ2Ugd2FzIG5vdCB3cml0dGVuKSwgXFx1MDAzYzAgb24gZXJyb3IuXFxuIDI2MjpcXHQgKiBEb2VzIE5PVCByZWNvdmVyIGEgY291bnRlciBhbHJlYWR5IHVuZGVyZmxvd2VkIGJ5IGFuIGVhcmxpZXIgb3ZlcnNpemVkLWNodW5rXFxuIDI2MzpcXHQgKiBhdHRlbXB0IC0gdGhhdCBuZWVkcyBhIHBvd2VyIGN5Y2xlLlxcbiAyNjQ6XFx0ICovXFxuIDI2NTpcXHRzdGF0aWMgaW50IG14bDg2Mnh4X3Jlc2N1ZV9kcmFpbihzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdilcXG4gMjY2OlxcdHtcXG4gMjY3OlxcdFxcdHN0cnVjdCBkZXZpY2UgKmRldiA9IFxcdTAwMjZwcml2LVxcdTAwM2VtZGlvZGV2LVxcdTAwM2VkZXY7XFxuIDI2ODpcXHRcXHQvKiBCb3VuZDogdHdpY2UgdGhlIGxvYWRlcidzIDE2IE1pQiBpbWFnZSBjYXAsIG9uZSBieXRlIHBlciBjaHVuay4gKi9cXG4gMjY5OlxcdFxcdHUzMiBtYXhfY2h1bmtzID0gMnUgKiAoMTZ1IFxcdTAwM2NcXHUwMDNjIDIwKSAvIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTO1xcbiAyNzA6XFx0XFx0dTMyIGNodW5rID0gMDtcXG4gMjcxOlxcdFxcdGludCByZXQ7XFxuIDI3MjpcXHRcXG4gMjczOlxcdFxcdGRldl93YXJuKGRldiwgXFxcImZsYXNoOiBkcmFpbmluZyBpbnRlcnJ1cHRlZCBkb3dubG9hZFxcXFxuXFxcIik7XFxuIDI3NDpcXHRcXG4gMjc1OlxcdFxcdHdoaWxlIChjaHVuayBcXHUwMDNjIG1heF9jaHVua3MpIHtcXG4gMjc2OlxcdFxcdFxcdC8qIFRlYXJkb3duIGNhbiBpbnRlcnJ1cHQgdGhpcyBtaW51dGVzLWxvbmcgZHJhaW4uICovXFxuIDI3NzpcXHRcXHRcXHRpZiAodGVzdF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFxcdTAwMjZwcml2LVxcdTAwM2VmbGFncykpXFxuIDI3ODpcXHRcXHRcXHRcXHRyZXR1cm4gLUVDQU5DRUxFRDtcXG4gMjc5OlxcdFxcbiAyODA6XFx0XFx0XFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfZHJhaW4ocHJpdiwgMjAwMCk7XFxuIDI4MTpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMjgyOlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI4MzpcXHRcXHRcXHRpZiAocmV0ID09IE1YTDg2MlhYX0RSQUlOX1JFQURZKVxcbiAyODQ6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDI4NTpcXHRcXHRcXHRpZiAocmV0ID09IE1YTDg2MlhYX0RSQUlOX0JVU1kpXFxuIDI4NjpcXHRcXHRcXHRcXHRicmVhaztcXG4gMjg3OlxcdFxcbiAyODg6XFx0XFx0XFx0LyogRmVlZCBvbmUgemVybyBieXRlOyByZXNldCBjbGVhcmVkIHRoZSB3cml0ZSBsYXRjaC4gKi9cXG4gMjg5OlxcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9DVFJMLFxcbiAyOTA6XFx0XFx0XFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX0NUUkxfV1IpO1xcbiAyOTE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDI5MjpcXHRcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAyOTM6XFx0XFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEsIDB4MDAwMCk7XFxuIDI5NDpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMjk1OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI5NjpcXHRcXHRcXHRyZXQgPSBteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XFxuIDI5NzpcXHRcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gMjk4OlxcdFxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDI5OTpcXHRcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4gMzAwOlxcdFxcdFxcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX0RSQUlOX0NIVU5LX0JZVEVTKTtcXG4gMzAxOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiAzMDI6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gMzAzOlxcdFxcdFxcdGNodW5rKys7XFxuIDMwNDpcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMzA1OlxcdFxcdH1cXG4gMzA2OlxcdFxcbiAzMDc6XFx0XFx0aWYgKGNodW5rIFxcdTAwM2U9IG1heF9jaHVua3MpIHtcXG4gMzA4OlxcdFxcdFxcdGRldl9lcnIoZGV2LFxcbiAzMDk6XFx0XFx0XFx0XFx0XFxcImZsYXNoOiBpbnRlcnJ1cHRlZCBkb3dubG9hZCBkaWQgbm90IGRyYWluIGFmdGVyICV1IGNodW5rc1xcXFxuXFxcIixcXG4gMzEwOlxcdFxcdFxcdFxcdGNodW5rKTtcXG4gMzExOlxcdFxcdFxcdHJldHVybiAtRVRJTUVET1VUO1xcbiAzMTI6XFx0XFx0fVxcbiAzMTM6XFx0XFxuIDMxNDpcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCxcXG4gMzE1OlxcdFxcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9FTkQpO1xcbiAzMTY6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDMxNzpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzMTg6XFx0XFxuIDMxOTpcXHRcXHRyZXR1cm4gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksXFxuIDMyMDpcXHRcXHRcXHRcXHRcXHRcXHQgTVhMODYyWFhfRldfQUNLX1RJTUVPVVRfTVMpO1xcbiAzMjE6XFx0fVxcbiAzMjI6XFx0XFxuIDMyMzpcXHQvKiBCYWNrZ3JvdW5kIHNlbGYtaGVhbDogZHJhaW4gYSB3ZWRnZWQgZG93bmxvYWQgYmFjayB0byBSRUFEWSBvZmYgdGhlIGRldmxpbmtcXG4gMzI0OlxcdCAqIGZsYXNoIHBhdGgsIHNvIHRoZSBtaW51dGVzLWxvbmcgcmVjb3ZlcnkgbmV2ZXIgaG9sZHMgdGhlIGRldmxpbmsgbG9jay5cXG4gMzI1OlxcdCAqIFNjaGVkdWxlZCBmcm9tIHByb2JlOyBwdWJsaXNoZXMgcmVzY3VlX3JlYWR5IG9uIHN1Y2Nlc3MuXFxuIDMyNjpcXHQgKi9cXG4gMzI3OlxcdHZvaWQgbXhsODYyeHhfcmVzY3VlX2hlYWxfd29ya19mbihzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmspXFxuIDMyODpcXHR7XFxuIDMyOTpcXHRcXHRzdHJ1Y3QgbXhsODYyeHhfcHJpdiAqcHJpdiA9XFxuIDMzMDpcXHRcXHRcXHRjb250YWluZXJfb2Yod29yaywgc3RydWN0IG14bDg2Mnh4X3ByaXYsIHJlc2N1ZV9oZWFsX3dvcmspO1xcbiAzMzE6XFx0XFx0c3RydWN0IGRldmljZSAqZGV2ID0gXFx1MDAyNnByaXYtXFx1MDAzZW1kaW9kZXYtXFx1MDAzZWRldjtcXG4gMzMyOlxcdFxcdGludCByZXQ7XFxuIDMzMzpcXHRcXG4gMzM0OlxcdFxcdGRldl9pbmZvKGRldiwgXFxcInJlY292ZXJpbmcgaW50ZXJydXB0ZWQgZG93bmxvYWQgaW4gYmFja2dyb3VuZFxcXFxuXFxcIik7XFxuIDMzNTpcXHRcXHRyZXQgPSBteGw4NjJ4eF9yZXNjdWVfZHJhaW4ocHJpdik7XFxuIDMzNjpcXHRcXHRpZiAodGVzdF9iaXQoTVhMODYyWFhfRkxBR19XT1JLX1NUT1BQRUQsIFxcdTAwMjZwcml2LVxcdTAwM2VmbGFncykpXFxuIDMzNzpcXHRcXHRcXHRyZXR1cm47XFxuIDMzODpcXHRcXHRpZiAoIXJldCkge1xcbiAzMzk6XFx0XFx0XFx0V1JJVEVfT05DRShwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHksIHRydWUpO1xcbiAzNDA6XFx0XFx0XFx0ZGV2X2luZm8oZGV2LCBcXFwicmVjb3ZlcnkgY29tcGxldGUsIHJlYWR5IHRvIGZsYXNoXFxcXG5cXFwiKTtcXG4gMzQxOlxcdFxcdH1cXG4gMzQyOlxcdH1cXG4gMzQzOlxcdFxcbiAzNDQ6XFx0LyogRGV0ZWN0IE1DVWJvb3QgcmVzY3VlIG1vZGUgb3ZlciBjbGF1c2UtMjIgU01ESU8gYWxvbmUsIHNvIHRoZSBjYWxsZXIgY2FuIHJ1bGVcXG4gMzQ1OlxcdCAqIHRoZSBsb2FkZXIgb3V0IGJlZm9yZSBhbnkgQzQ1IEFQSSByZXF1ZXN0ICh3aGljaCBzcGV3cyBDUkMgZXJyb3JzIHdoZW4gbm8gV1NQXFxuIDM0NjpcXHQgKiBmaXJtd2FyZSBhbnN3ZXJzKS4gQSBzY3JhdGNoIHdyaXRlIHRvIEFERFIvREFUQSBtdXN0IGxhdGNoIG9yIHRoZSBjaGlwIGlzXFxuIDM0NzpcXHQgKiBhYnNlbnQgKC1FTk9ERVYpOyBTVEFUIHRoZW4gY2xhc3NpZmllcyB0aGUgc3RhdGUsIHBva2VkIGRlc3RydWN0aXZlbHkgb25seVxcbiAzNDg6XFx0ICogd2hlbiAwLCB0aGUgb25lIHZhbHVlIGEgcnVubmluZyBmaXJtd2FyZSBuZXZlciBob2xkczpcXG4gMzQ5OlxcdCAqXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjUzOjA3LjA3NDc0MDUzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTQwMTg0NTE0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdW5kZXJzdGFuZGluZyB0aGlzIGBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3RgIGZ1bmN0aW9uIGFuZCB3aGF0J3MgcHJvYmFibHkgZ29pbmcgdGhyb3VnaCBteSBoZWFkOlxuXG4qKkFuYWx5emluZyBgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0YCoqXG5cbkFscmlnaHQsIEknbSBkaWdnaW5nIGludG8gdGhpcyBmdW5jdGlvbiwgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCBcIk9rYXksIHRoaXMgaXMgYWJvdXQgaWRlbnRpZnlpbmcgaWYgdGhlIHN5c3RlbSBpcyBpbiBzb21lIGtpbmQgb2YgcmVjb3Zlcnkgb3IgcmVzY3VlIHN0YXRlLiBQcm9iYWJseSBhIGNyaXRpY2FsIGZ1bmN0aW9uLCBnaXZlbiB0aGUgbmFtZS5cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZW50cnkgcG9pbnQgc28gSSBjYW4gdW5kZXJzdGFuZCB3aGF0IHNpZ25hbHMgb3IgaGFyZHdhcmUgY2hhcmFjdGVyaXN0aWNzIHdvdWxkIGluZGljYXRlIGEgJ3Jlc2N1ZSBtb2RlJy5cblxuSSdtIHN0YXJ0aW5nIHRvIHRoaW5rIGFib3V0IHdoYXQgc29ydCBvZiBoYXJkd2FyZSBpcyBydW5uaW5nIHRoaXMgYW5kIHdoYXQgZmFpbHVyZSBzdGF0ZXMgY2FuIGhhcHBlbi4gSXMgdGhpcyBmb3IgYSBib290bG9hZGVyPyBBIHNwZWNpZmljIGNoaXA/IERvZXMgaXQgdXNlIEdQSU8gcGlucywgbWVtb3J5IGFkZHJlc3Nlcywgb3IgYSBzcGVjaWZpYyByZWdpc3RlciBjb25maWd1cmF0aW9uIHRvIGRldGVybWluZSB0aGUgbW9kZT8gV2hhdCBhcmUgdGhlIHBvc3NpYmxlIHRyaWdnZXJzIGZvciByZXNjdWUgbW9kZT8gUG93ZXItb24gc2VxdWVuY2U/IFNwZWNpZmljIGtleSBwcmVzc2VzPyBFcnJvciBmbGFncyBmcm9tIGEgcHJldmlvdXMgYm9vdCBhdHRlbXB0PyBJIG5lZWQgdG8gbG9vayBmb3IgdGhvc2UgaGludHMuXG5cbkknbSBnb2luZyB0byBzdGFydCBtZW50YWxseSB0cmFjaW5nIGV4ZWN1dGlvbi4gV2hhdCBhcmUgdGhlIGNoZWNrcyBoYXBwZW5pbmcgaW5zaWRlIHRoZSBmdW5jdGlvbj8gV2hhdCBhcmUgdGhlIGxvZ2ljYWwgY29uZGl0aW9ucyBhbmQgYnJhbmNoaW5nPyBJJ20gYW50aWNpcGF0aW5nIHRoYXQgdGhlcmUnbGwgYmUgY29uZGl0aW9uYWwgc3RhdGVtZW50cywgY2hlY2tpbmcgdmFyaW91cyBwYXJhbWV0ZXJzLiBBcmUgdGhlcmUgc3BlY2lmaWMgcmVnaXN0ZXIgcmVhZHM/IElmIHNvLCB3aGljaCBvbmVzIGFuZCB3aGF0IGFyZSB0aGUgZXhwZWN0ZWQgdmFsdWVzPyBBbnkgc3BlY2lmaWMgbWVtb3J5IGxvY2F0aW9ucyBiZWluZyBleGFtaW5lZD8gV2hhdCdzIHRoZSBpbXBhY3Qgb2YgZWFjaCBvZiB0aGUgY29uZGl0aW9ucywgaXMgYSByZXNjdWUgbW9kZSBpbmRpY2F0ZWQgYnkgYSByZXR1cm4gdmFsdWUsIG9yIGEgc2lkZS1lZmZlY3Q/XG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMgb2YgYSBwb3NpdGl2ZSBkZXRlY3Rpb24uIERvZXMgaXQgaGFsdCBleGVjdXRpb24sIG1vZGlmeSBib290IHBhcmFtZXRlcnMsIG9yIHBlcmhhcHMgaW5pdGlhdGUgYSBkaWZmZXJlbnQgYm9vdCBzZXF1ZW5jZSBvciBhdHRlbXB0IGEgY2hpcCByZWNvdmVyeT8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGJyb2FkZXIgY29udGV4dC4gV2hhdCBvdGhlciBmdW5jdGlvbnMgY2FsbCB0aGlzPyBXaGF0IGRvZXMgdGhlIHJlc3Qgb2YgdGhlIG1vZHVsZSBsb29rIGxpa2U/IEkgbmVlZCB0byBzZWUgdGhlIGRlcGVuZGVuY2llcywgZXNwZWNpYWxseSB3aGF0J3MgaGFwcGVuaW5nICphZnRlciogdGhpcyBmdW5jdGlvbi4gQ29udGV4dCBpcyBjcnVjaWFsLlxuXG5VbHRpbWF0ZWx5LCBJJ20gdHJ5aW5nIHRvIGJ1aWxkIGEgc29saWQgbWVudGFsIG1vZGVsIG9mIGhvdyB0aGlzIGZ1bmN0aW9uIHdvcmtzLCBzbyBJIGNhbiBjb25maWRlbnRseSBkZXRlcm1pbmUgd2hlbiBpdCdzIGJlaW5nIHVzZWQgYW5kIGluIHdoYXQgY29udGV4dC4gSXQgbG9va3MgbGlrZSBpdCBpcyByZXNjdWUgbW9kZSBkZXRlY3Rpb24sIEkgd2FudCB0byB1bmRlcnN0YW5kIGhvdyBpdCBnZXRzIGludG8gcmVzY3VlIG1vZGUgYW5kIG91dCBvZiBpdCFcblxuXG4iLCJJbnB1dFRva2VucyI6MzIzNjUsIk91dHB1dFRva2VucyI6NTMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjUzOjEyLjIxNDkyODc1MVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTExODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDM1MDpcXHQgKiAgLSAweGMzM2M6IGZsYXNobGVzcyBsb29wLCByZWFkeS5cXG4gMzUxOlxcdCAqICAtIDB4YzU1YzogY29uc29sZSBsb29wLCBpZiB0aGUgcmVnaXN0ZXItcmVhZCBjaGFsbGVuZ2UgaXMgc2VydmljZWQuXFxuIDM1MjpcXHQgKiAgLSBvdGhlciBub24temVybzogcnVubmluZyBmaXJtd2FyZSwgbGVmdCB1bnBva2VkLlxcbiAzNTM6XFx0ICogIC0gMDogd2VkZ2VkIHJlY2VpdmUgbG9vcCwgaWYgYSAxLWJ5dGUgc2xpY2UtYWR2YW5jZSBkcmFpbnMgYmFjayB0byAwLlxcbiAzNTQ6XFx0ICpcXG4gMzU1OlxcdCAqIFJldHVybjogTVhMODYyWFhfSU5fUkVTQ1VFLCBNWEw4NjJYWF9OT1RfUkVTQ1VFLCBvciBuZWdhdGl2ZSAoLUVOT0RFVi9TTURJTykuXFxuIDM1NjpcXHQgKi9cXG4gMzU3OlxcdGludCBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3Qoc3RydWN0IG14bDg2Mnh4X3ByaXYgKnByaXYpXFxuIDM1ODpcXHR7XFxuIDM1OTpcXHRcXHRpbnQgc3RhdCwgZGF0LCByZXQsIHJiLCBhLCBkO1xcbiAzNjA6XFx0XFxuIDM2MTpcXHRcXHQvKiByZXNjdWVfcmVhZHkgZ2F0ZXMgZmxhc2hpbmc7IGEgd2VkZ2VkIGxvYWRlciBuZWVkcyB0aGUgZHJhaW4gZmlyc3QuICovXFxuIDM2MjpcXHRcXHRwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHkgPSBmYWxzZTtcXG4gMzYzOlxcdFxcbiAzNjQ6XFx0XFx0LyogUHJlc2VuY2U6IGEgbGl2ZSBjaGlwIGxhdGNoZXMgdGhlIHNjcmF0Y2ggd3JpdGUsIGFuIGFic2VudCBvbmUgZmxvYXRzLiAqL1xcbiAzNjU6XFx0XFx0YSA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxcbiAzNjY6XFx0XFx0XFx0XFx0XFx0IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9BKTtcXG4gMzY3OlxcdFxcdGlmIChhIFxcdTAwM2MgMClcXG4gMzY4OlxcdFxcdFxcdHJldHVybiBhO1xcbiAzNjk6XFx0XFx0ZCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLFxcbiAzNzA6XFx0XFx0XFx0XFx0XFx0IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9EKTtcXG4gMzcxOlxcdFxcdGlmIChkIFxcdTAwM2MgMClcXG4gMzcyOlxcdFxcdFxcdHJldHVybiBkO1xcbiAzNzM6XFx0XFx0YSA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIpO1xcbiAzNzQ6XFx0XFx0aWYgKGEgXFx1MDAzYyAwKVxcbiAzNzU6XFx0XFx0XFx0cmV0dXJuIGE7XFxuIDM3NjpcXHRcXHRkID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7XFxuIDM3NzpcXHRcXHRpZiAoZCBcXHUwMDNjIDApXFxuIDM3ODpcXHRcXHRcXHRyZXR1cm4gZDtcXG4gMzc5OlxcdFxcdGlmICgodTE2KWEgIT0gTVhMODYyWFhfU0JfUERJX1BST0JFX0EgfHxcXG4gMzgwOlxcdFxcdCAgICAodTE2KWQgIT0gTVhMODYyWFhfU0JfUERJX1BST0JFX0QpXFxuIDM4MTpcXHRcXHRcXHRyZXR1cm4gLUVOT0RFVjtcXG4gMzgyOlxcdFxcbiAzODM6XFx0XFx0cmV0ID0gbXhsODYyeHhfc2JfcGRpX3Jlc2V0KHByaXYpO1xcbiAzODQ6XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuIDM4NTpcXHRcXHRcXHRyZXR1cm4gcmV0O1xcbiAzODY6XFx0XFxuIDM4NzpcXHRcXHRzdGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfU1RBVCk7XFxuIDM4ODpcXHRcXHRpZiAoc3RhdCBcXHUwMDNjIDApXFxuIDM4OTpcXHRcXHRcXHRyZXR1cm4gc3RhdDtcXG4gMzkwOlxcdFxcbiAzOTE6XFx0XFx0LyogRmxhc2hsZXNzLWRvd25sb2FkIGxvb3A6IHVuYW1iaWd1b3VzIHJlYWR5IG1hZ2ljLCBsZWF2ZSBpdCBhbG9uZS4gKi9cXG4gMzkyOlxcdFxcdGlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX0RMX1JFQURZKSB7XFxuIDM5MzpcXHRcXHRcXHRwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHkgPSB0cnVlO1xcbiAzOTQ6XFx0XFx0XFx0cmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTtcXG4gMzk1OlxcdFxcdH1cXG4gMzk2OlxcdFxcbiAzOTc6XFx0XFx0LyogQ29uc29sZSBsb29wIGF0IFJFQURZOiBjb25maXJtIHRoZSBsaXZlIG1haWxib3ggd2l0aCB0aGUgcmVnaXN0ZXItcmVhZFxcbiAzOTg6XFx0XFx0ICogY2hhbGxlbmdlIChjb25zdW1lcyB0aGUgbWFya2VyIGZyb20gREFUQSBhbmQgcmUtYXJtcyBSRUFEWSkuXFxuIDM5OTpcXHRcXHQgKi9cXG4gNDAwOlxcdFxcdGlmICgodTE2KXN0YXQgPT0gTVhMODYyWFhfU0JfUERJX1JFQURZKSB7XFxuIDQwMTpcXHRcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSxcXG4gNDAyOlxcdFxcdFxcdFxcdFxcdFxcdCAgIE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLKTtcXG4gNDAzOlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA0MDQ6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNDA1OlxcdFxcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULFxcbiA0MDY6XFx0XFx0XFx0XFx0XFx0XFx0ICAgTVhMODYyWFhfU0JfUERJX1JEUkVHKTtcXG4gNDA3OlxcdFxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA0MDg6XFx0XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNDA5OlxcdFxcdFxcdHJiID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCBNWEw4NjJYWF9TQl9QRElfUkVBRFksXFxuIDQxMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgTVhMODYyWFhfUkVTQ1VFX1JFQURZX1RJTUVPVVRfTVMpO1xcbiA0MTE6XFx0XFx0XFx0ZGF0ID0gbXhsODYyeHhfc21kaW9fcmVhZChwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSk7XFxuIDQxMjpcXHRcXHRcXHRpZiAoZGF0IFxcdTAwM2MgMClcXG4gNDEzOlxcdFxcdFxcdFxcdHJldHVybiBkYXQ7XFxuIDQxNDpcXHRcXHRcXHRteGw4NjJ4eF9zYl9wZGlfcmVzZXQocHJpdik7XFxuIDQxNTpcXHRcXHRcXHRpZiAoIXJiIFxcdTAwMjZcXHUwMDI2ICh1MTYpZGF0ICE9IE1YTDg2MlhYX1NCX1BESV9SRFJFR19NQVJLKSB7XFxuIDQxNjpcXHRcXHRcXHRcXHRwcml2LVxcdTAwM2VyZXNjdWVfcmVhZHkgPSB0cnVlO1xcbiA0MTc6XFx0XFx0XFx0XFx0cmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTtcXG4gNDE4OlxcdFxcdFxcdH1cXG4gNDE5OlxcdFxcdFxcdHJldHVybiAtRU5PREVWO1xcbiA0MjA6XFx0XFx0fVxcbiA0MjE6XFx0XFxuIDQyMjpcXHRcXHQvKiBBbnkgb3RoZXIgbm9uLXplcm8gdmFsdWUgaXMgYSBydW5uaW5nIGZpcm13YXJlLCBub3QgYSBsb2FkZXIuICovXFxuIDQyMzpcXHRcXHRpZiAoc3RhdClcXG4gNDI0OlxcdFxcdFxcdHJldHVybiBNWEw4NjJYWF9OT1RfUkVTQ1VFO1xcbiA0MjU6XFx0XFxuIDQyNjpcXHRcXHQvKiBTVEFUID09IDA6IGEgd2VkZ2VkIHJlY2VpdmUgbG9vcCBjb25zdW1lcyBhIDEtYnl0ZSBzbGljZS1hZHZhbmNlIGJhY2tcXG4gNDI3OlxcdFxcdCAqIHRvIDAgKGZlZWQgb25lIERBVEEgd29yZCBmaXJzdCwgbGlrZSBhIGRyYWluIGNodW5rKS5cXG4gNDI4OlxcdFxcdCAqL1xcbiA0Mjk6XFx0XFx0cmV0ID0gbXhsODYyeHhfc21kaW9fd3JpdGUocHJpdiwgTVhMODYyWFhfU0JfUERJX0NUUkwsXFxuIDQzMDpcXHRcXHRcXHRcXHRcXHQgICBNWEw4NjJYWF9TQl9QRElfQ1RSTF9XUik7XFxuIDQzMTpcXHRcXHRpZiAocmV0IFxcdTAwM2MgMClcXG4gNDMyOlxcdFxcdFxcdHJldHVybiByZXQ7XFxuIDQzMzpcXHRcXHRyZXQgPSBteGw4NjJ4eF9zbWRpb193cml0ZShwcml2LCBNWEw4NjJYWF9TQl9QRElfREFUQSwgMHgwMDAwKTtcXG4gNDM0OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA0MzU6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNDM2OlxcdFxcdHJldCA9IG14bDg2Mnh4X3NiX3BkaV9yZXNldChwcml2KTtcXG4gNDM3OlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA0Mzg6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNDM5OlxcdFxcdHJldCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9TVEFULCAxKTtcXG4gNDQwOlxcdFxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbiA0NDE6XFx0XFx0XFx0cmV0dXJuIHJldDtcXG4gNDQyOlxcdFxcdHJiID0gbXhsODYyeHhfc2JfcGRpX3BvbGxfc3RhdChwcml2LCAwLCBNWEw4NjJYWF9SRVNDVUVfUkVBRFlfVElNRU9VVF9NUyk7XFxuIDQ0MzpcXHRcXHRpZiAoIXJiKVxcbiA0NDQ6XFx0XFx0XFx0cmV0dXJuIE1YTDg2MlhYX0lOX1JFU0NVRTtcXG4gNDQ1OlxcdFxcbiA0NDY6XFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuIDQ0NzpcXHR9XFxuIDQ0ODpcXHRcXG4gNDQ5OlxcdC8qIFBvc3QtZmxhc2ggcmVwcm9iZS4gUnVucyBmcm9tIGEgc2VsZi1jb250YWluZWQgaGVhcCB3b3JrIChub3QgYSBrdGhyZWFkIGFuZFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1MzoxMi4yMTUwNDE3MjFaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTIyMjA5MTA5NDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBGdXp6aW5nIFBvdGVudGlhbCBvZiB0aGUgTXhMODYyeHggRHJpdmVyKipcblxuT2theSwgc28gdGhlIHByb2JlIGZ1bmN0aW9uIG9mIHRoaXMgYG14bDg2Mnh4YCBkcml2ZXIgY2FsbHMgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAuIEl0J3Mgd3JpdGluZyB0byBNRElPIGFuZCByZWFkaW5nIGJhY2sg4oCTIGEgcHJldHR5IHN0YW5kYXJkIGNoZWNrLiBJbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LCBhIGR1bW15IE1ESU8gYnVzIG1pZ2h0IHJldHVybiBnYXJiYWdlLCBsaWtlIGAweGZmZmZgIG9yIGAweDAwMDBgLCBvciBldmVuIGVjaG8gYmFjayB3aGF0IHdhcyB3cml0dGVuLiBCdXQgaG9sZCBvbiwgZG9lcyBTeXprYWxsZXIgKmFjdHVhbGx5KiBoYXZlIGEgZ2VuZXJpYywgdmFsdWUtc3RvcmluZyBkdW1teSBNRElPIGJ1cz8gTm8sIG5vdCB0aGF0IEknbSBhd2FyZSBvZi4gRG9lcyBTeXprYWxsZXIgZnV6eiBNRElPIGRldmljZXMgZGlyZWN0bHkgd2l0aCBpbmplY3RlZCByZWFkcy93cml0ZXM/IEFnYWluLCBzZWVtcyB1bmxpa2VseSB3aXRob3V0IGEgZGVkaWNhdGVkIFN5emthbGxlciBwc2V1ZG8tc3lzY2FsbCBvciBhIHNwZWNpYWwgZHVtbXkgZHJpdmVyLlxuXG5BbHJpZ2h0LCBsZXQncyBzZWUgaWYgdGhlcmUncyBhbnkgZXZpZGVuY2Ugb2YgTURJTyBmdXp6aW5nIHdpdGhpbiBTeXprYWxsZXIgaXRzZWxmLiBJIGNhbiBjaGVjaywgYnV0IGBkcml2ZXJzL25ldC9waHkvbWRpby1tb2NrLmNgIGlzIHByb2JhYmx5IG5vdCB3aGF0IEknbSBsb29raW5nIGZvci4gTGV0J3MgY2hlY2sgdGhlIFN5emthbGxlciBjb25maWdzIGFuZCBzZWUgaWYgYENPTkZJR19ORVRfRFNBX01YTDg2MmAgaXMgZW5hYmxlZC4gQWgsIHRoZSBwYXRjaCBhdXRob3IgaXMgXCJzeXotY2x1c3RlcixcIiBzbyBTeXprYWxsZXIgKmlzKiB0ZXN0aW5nIHRoaXMhIElmIGl0J3MgYmVpbmcgdGVzdGVkLCBpdCBpbXBsaWVzICpzb21lKiBsZXZlbCBvZiByZWFjaGFiaWxpdHksIG9yIGF0IGxlYXN0IGFuIGF0dGVtcHQgYXQgcmVhY2hhYmlsaXR5LlxuXG5CdXQgd2FpdCwgdGhlIGluc3RydWN0aW9ucyBzYXkgdG8gcmV0dXJuIGBXb3J0aEZ1enppbmc9ZmFsc2VgIGlmIGl04oCZcyBhIHZlbmRvci1zcGVjaWZpYyBkcml2ZXIgcmVxdWlyaW5nIGhhcmR3YXJlIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLiBUaGlzICppcyogYSBEU0Egc3dpdGNoIGRyaXZlciBmb3IgYSBNYXhMaW5lYXIgTXhMODYyeHguIERvZXMgaXQgcmVxdWlyZSBwaHlzaWNhbCBoYXJkd2FyZT8gWWVhaCwgUUVNVSBkZWZpbml0ZWx5IGRvZXNuJ3QgZW11bGF0ZSB0aGlzIHNwZWNpZmljIGNoaXAuIFNvLCBpcyB0aGVyZSBhbnkgd2F5IHRvIHJlYWNoIHRoaXMgY29kZSB2aWEgc29mdHdhcmUgZW11bGF0aW9uIHNvbWVob3c/IE5vLCBubyBRRU1VIGVtdWxhdGlvbiBleGlzdHMgZm9yIGl0LiBJcyB0aGVyZSBhbnkgZHVtbXkgTURJTyBidXMgaW4gdGhlIGtlcm5lbCB1c2VkIGJ5IFN5emthbGxlcj8gVGhlcmUgaXMgYGRyaXZlcnMvbmV0L3BoeS9tZGlvLWJjbS11bmltYWMuY2AgYnV0IGl0IHNlZW1zIHRvIGJlIGZvciBhbm90aGVyIHR5cGUgb2YgZGV2aWNlLiBUaGVyZSBpcyBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYCBidXQgdGhhdCBpcyBmb3IgUEhZcy5cblxuT2theSwgbGV0J3MgdGhpbmsgYWJvdXQgdGhlIFN5emthbGxlciBlY29zeXN0ZW0uIEl0J3MgZ290IGB2aGNpYCBmb3IgVVNCLCBgbWFjODAyMTFfaHdzaW1gIGZvciBXaS1GaSwgYG5ldGRldnNpbWAgZm9yIG5ldGRldnPigKYgRG9lcyBpdCBoYXZlIGFuIGVxdWl2YWxlbnQgZm9yIE1ESU8/IEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQga2luZCBvZiBkcml2ZXIgYG14bDg2Mnh4YCBpcy4gSXQncyBhbiBNRElPIGRyaXZlci4gVG8gcHJvYmUgYW4gTURJTyBkcml2ZXIsIHlvdSBuZWVkIGFuIE1ESU8gZGV2aWNlIG9uIGFuIE1ESU8gYnVzLiBTbyBob3cgY2FuIHdlIGNyZWF0ZSBhbiBNRElPIGRldmljZSBmcm9tIHVzZXJzcGFjZT8gSG1tLCB1bmxlc3MgdGhlcmUncyBzb21lIGRldmljZSB0cmVlIG1hZ2ljLCBhIHNwZWNpZmljIHN5c2ZzIHRyaWdnZXIsIG9yIG1heWJlIGBuZXRkZXZzaW1gLCB0aGVyZSBpcyBubyB3YXkuXG5cbk5vLCBgbmV0ZGV2c2ltYCBkb2Vzbid0IGNyZWF0ZSBNRElPIGJ1c2VzLiBgZHNhX2xvb3BgIGlzIGEgZHVtbXkgRFNBIHN3aXRjaCwgYnV0IGl0IGlzIGEgc3BlY2lmaWMgZHJpdmVyLiBDYW4gU3l6a2FsbGVyICphY3R1YWxseSogcmVhY2ggYG14bDg2Mnh4X3Byb2JlYD8gSWYgaXQgY2FuJ3QsIHRoZW4gdGhlcmUgaXMgbm8gcG9pbnQgaW4gZnV6emluZy4gTGV0IG1lIGNoZWNrIGlmIHRoZXJlIGlzIGFueSBNRElPIGRldmljZSBjcmVhdGlvbiBpbiBTeXprYWxsZXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM0ODg0LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTM6MjQuNDM1OTU0OTZaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYxMDg0NDk0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibmV0L2RzYS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibmV0L2RzYS9kc2EuYz02MjI9c3RhdGljIGludCBkc2Ffc3dpdGNoX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbm5ldC9kc2EvZHNhLmMtNjU0LVxcdGlmICghZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyBcXHUwMDI2XFx1MDAyNiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VwaHlfcmVhZCkge1xcbm5ldC9kc2EvZHNhLmM6NjU1OlxcdFxcdGRzLVxcdTAwM2V1c2VyX21paV9idXMgPSBtZGlvYnVzX2FsbG9jKCk7XFxubmV0L2RzYS9kc2EuYy02NTYtXFx0XFx0aWYgKCFkcy1cXHUwMDNldXNlcl9taWlfYnVzKSB7XFxuLS1cXG5uZXQvZHNhL2RzYS5jLTY2Mi1cXG5uZXQvZHNhL2RzYS5jOjY2MzpcXHRcXHRlcnIgPSBtZGlvYnVzX3JlZ2lzdGVyKGRzLVxcdTAwM2V1c2VyX21paV9idXMpO1xcbm5ldC9kc2EvZHNhLmMtNjY0LVxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbi0tXFxubmV0L2RzYS9kc2EuYy02NzQtXFx0aWYgKGRzLVxcdTAwM2V1c2VyX21paV9idXMgXFx1MDAyNlxcdTAwMjYgZHMtXFx1MDAzZW9wcy1cXHUwMDNlcGh5X3JlYWQpXFxubmV0L2RzYS9kc2EuYzo2NzU6XFx0XFx0bWRpb2J1c19mcmVlKGRzLVxcdTAwM2V1c2VyX21paV9idXMpO1xcbm5ldC9kc2EvZHNhLmMtNjc2LXRlYXJkb3duOlxcbi0tXFxubmV0L2RzYS9kc2EuYz02ODY9c3RhdGljIHZvaWQgZHNhX3N3aXRjaF90ZWFyZG93bihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTY5My1cXHRpZiAoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyBcXHUwMDI2XFx1MDAyNiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VwaHlfcmVhZCkge1xcbm5ldC9kc2EvZHNhLmM6Njk0OlxcdFxcdG1kaW9idXNfdW5yZWdpc3Rlcihkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG5uZXQvZHNhL2RzYS5jOjY5NTpcXHRcXHRtZGlvYnVzX2ZyZWUoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyk7XFxubmV0L2RzYS9kc2EuYy02OTYtXFx0XFx0ZHMtXFx1MDAzZXVzZXJfbWlpX2J1cyA9IE5VTEw7XFxuLS1cXG5uZXQvZHNhL3BvcnQuYy0xMS0jaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG5uZXQvZHNhL3BvcnQuYzoxMjojaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbWRpby5oXFx1MDAzZVxcbm5ldC9kc2EvcG9ydC5jLTEzLSNpbmNsdWRlIFxcdTAwM2NsaW51eC9vZl9uZXQuaFxcdTAwM2VcXG4tLVxcbm5ldC9kc2EvcG9ydC5jPTE3MjY9c3RhdGljIGNvbnN0IGNoYXIgKiBjb25zdCBkc2Ffc3dpdGNoZXNfYXBwbHlfd29ya2Fyb3VuZHNbXSA9IHtcXG4tLVxcbm5ldC9kc2EvcG9ydC5jLTE3OTYtI2lmIElTX0VOQUJMRUQoQ09ORklHX05FVF9EU0FfU01TQ19MQU45MzAzX01ESU8pXFxubmV0L2RzYS9wb3J0LmM6MTc5NzpcXHRcXFwic21zYyxsYW45MzAzLW1kaW9cXFwiLFxcbm5ldC9kc2EvcG9ydC5jLTE3OTgtI2VuZGlmXFxuLS1cXG5uZXQvZHNhL3VzZXIuYy0xMy0jaW5jbHVkZSBcXHUwMDNjbGludXgvb2ZfbmV0LmhcXHUwMDNlXFxubmV0L2RzYS91c2VyLmM6MTQ6I2luY2x1ZGUgXFx1MDAzY2xpbnV4L29mX21kaW8uaFxcdTAwM2VcXG5uZXQvZHNhL3VzZXIuYzoxNTojaW5jbHVkZSBcXHUwMDNjbGludXgvbWRpby5oXFx1MDAzZVxcbm5ldC9kc2EvdXNlci5jLTE2LSNpbmNsdWRlIFxcdTAwM2NuZXQvbmV0ZGV2X2xvY2suaFxcdTAwM2VcXG4tLVxcbm5ldC9kc2EvdXNlci5jPTI2Mzg9c3RhdGljIGludCBkc2FfdXNlcl9waHlfY29ubmVjdChzdHJ1Y3QgbmV0X2RldmljZSAqdXNlcl9kZXYsIGludCBhZGRyLFxcbi0tXFxubmV0L2RzYS91c2VyLmMtMjY0My1cXG5uZXQvZHNhL3VzZXIuYzoyNjQ0OlxcdHVzZXJfZGV2LVxcdTAwM2VwaHlkZXYgPSBtZGlvYnVzX2dldF9waHkoZHMtXFx1MDAzZXVzZXJfbWlpX2J1cywgYWRkcik7XFxubmV0L2RzYS91c2VyLmMtMjY0NS1cXHRpZiAoIXVzZXJfZGV2LVxcdTAwM2VwaHlkZXYpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTM6MjQuNDk3MDQ2Nzg0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNzUyODIzNjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTURJTyBEZXZpY2UgSW5zdGFudGlhdGlvbiBDb251bmRydW0qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdG8gaGFuZGxlIHRoaXMgYG14bDg2Mnh4YCBkZXZpY2UuIEZpcnN0IHRoaW5ncyBmaXJzdCwgSSdsbCBzZWFyY2ggZm9yIGBteGw4NjJ4eGAgd2l0aGluIHRoZSBgRG9jdW1lbnRhdGlvbi9kZXZpY2V0cmVlL2JpbmRpbmdzL25ldC9kc2EvbWF4bGluZWFyLG14bDg2Mnh4LnlhbWxgIGZpbGUgdG8gZ2V0IHRoZSBsYXkgb2YgdGhlIGxhbmQuIFJpZ2h0LCBpdCdzIGFuIE1ESU8gZGV2aWNlLCBhcyBleHBlY3RlZC4gTm93LCBoZXJlJ3MgdGhlIGtpY2tlcjogQ2FuIEkgaW5zdGFudGlhdGUgTURJTyBkZXZpY2VzIGRpcmVjdGx5IGZyb20gdXNlcnNwYWNlPyBJIGtub3cgd2l0aCBJMkMsIGl0J3MgcG9zc2libGUgdGhyb3VnaCB0aGUgYHN5c2ZzYCBpbnRlcmZhY2UuXG5cbkFoLCB5ZXMsIEknbSB0aGlua2luZyBhYm91dCB1c2luZyBJMkMvTURJTyBkZXZpY2UgaW5zdGFudGlhdGlvbiB2aWEgc3lzZnMuIEkgaGFkIGEgcXVpY2sgbG9vayBidXQgbm93IEkgcmVtZW1iZXIgTURJTyBidXNlcyBkb24ndCBoYXZlIHRoYXQgaGFuZHkgYG5ld19kZXZpY2VgIHN5c2ZzIGF0dHJpYnV0ZSBsaWtlIEkyQyBkb2VzLiBEYW5nIGl0LiBPa2F5LCB0aW1lIHRvIGRvdWJsZS1jaGVjayBteSBhc3N1bXB0aW9ucy4gTGV0IG1lIHF1aWNrbHkgdmVyaWZ5IGlmIHRoZSBNRElPIGJ1cyBldmVuIGV4cG9zZXMgYSBgbmV3X2RldmljZWAgYXR0cmlidXRlOyBJJ2xsIG5lZWQgdG8gY2hlY2sgdGhlIGtlcm5lbCdzIE1ESU8gYnVzIGltcGxlbWVudGF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNzMzNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1MzoyOC43NzIzMzIyMDNaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3OTQyMjk3LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJuZXdfZGV2aWNlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImRyaXZlcnMvbmV0L3BoeS9tZGlvX2J1cy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1MzoyOC44MzAyODAyOFoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDI2NzQyODIwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1ESU8gRHJpdmVyIGFuZCBTeXprYWxsZXIncyBQb3RlbnRpYWwqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIE1ESU8gYnVzIGRyaXZlciwgYW5kIEkgZG9uJ3Qgc2VlIGFueSBleHBsaWNpdCBpbnN0YW50aWF0aW9uIG9mIGEgXCJuZXdfZGV2aWNlXCIgd2l0aGluIHRoZSBgbWRpb19idXMuY2AgY29kZSBpdHNlbGYuIFRoaXMgaXMgbWFraW5nIG1lIHRoaW5rIGFib3V0IGhvdyBzeXprYWxsZXIgY2FuIGV2ZW4gZ2V0IHRvIHRoaXMgZHJpdmVyIGFuZCB0cmlnZ2VyIGl0cyBwcm9iZSBmdW5jdGlvbi4gSSBrbm93IHN5emthbGxlciBjYW4gdXNlIGRldmljZSB0cmVlIG92ZXJsYXlzLCBzbyB0aGF0J3Mgd2hlcmUgbXkgbWluZCBnb2VzIGltbWVkaWF0ZWx5LlxuXG5XYWl0LCB5ZXMhIFN5emthbGxlciAqZG9lcyogc3VwcG9ydCBkZXZpY2UgdHJlZSBvdmVybGF5cy4gSSB0aGluayBJIHZhZ3VlbHkgcmVtZW1iZXIgYSBwc2V1ZG8tc3lzY2FsbCBsaWtlIGBzeXpfaW5pdF9uZXRfc29ja2V0YC4uLiBubywgdGhhdCdzIG5vdCByaWdodC4gQWgsIGl0J3MgYHN5el9tb3VudF9pbWFnZWAsIGFuZCBpdCBjYW4gbG9hZCBvdmVybGF5cyAqaWYqIHRoZSBrZXJuZWwgaXMgYnVpbHQgd2l0aCBgQ09ORklHX09GX09WRVJMQVlgIGVuYWJsZWQuIFNvLCB0aGUgcXVlc3Rpb24gYmVjb21lcywgY2FuIHN5emthbGxlciB1c2UgdGhlc2Ugb3ZlcmxheXMgdG8gaW5zdGFudGlhdGUgTURJTyBkZXZpY2VzP1xuXG5ZZXMsIHRoYXQncyBpdCEgSWYgaXQgbG9hZHMgYSBEVCBvdmVybGF5LCBpdCAqc2hvdWxkKiBiZSBhYmxlIHRvIGNyZWF0ZSBhbiBNRElPIGRldmljZS4gQnV0Li4uIGV2ZW4gaWYgdGhlIGRldmljZSAqaXMqIGNyZWF0ZWQsIHRoZSBkcml2ZXIncyBwcm9iZSBmdW5jdGlvbiB3aWxsIHN0aWxsIG5lZWQgdG8gY29tbXVuaWNhdGUgd2l0aCB0aGUgaGFyZHdhcmUgdmlhIHRoZSBNRElPIGJ1cy4gSWYgdGhlcmUncyBubyByZWFsIGhhcmR3YXJlIGNvbm5lY3RlZCwgdGhlIE1ESU8gcmVhZC93cml0ZSBvcGVyYXRpb25zIHdpbGwgbGlrZWx5IGZhaWwgb3IgcmV0dXJuIHNvbWUgZGVmYXVsdCB2YWx1ZSwgbGlrZSBgMHhmZmZmYCBmcm9tIGEgZmxvYXRpbmcgYnVzIG9yIGAwYCBmcm9tIGEgZHVtbXkgYnVzLlxuXG5MZXQgbWUgY2lyY2xlIGJhY2sgdG8gdGhhdCBgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0YCBmdW5jdGlvbiBpbiB0aGUgZHJpdmVyLiBPa2F5LCBJIHNlZSBpdCBub3cuIEl0IHdyaXRlcyBgMHg1YTVhYCB0byBgTVhMODYyWFhfU0JfUERJX0FERFJgIGFuZCBgMHhhNWE1YCB0byBgTVhMODYyWFhfU0JfUERJX0RBVEFgLCBhbmQgdGhlbiByZWFkcyB0aG9zZSB2YWx1ZXMgYmFjay4gSWYgdGhleSBkb24ndCBtYXRjaCwgaXQgcmV0dXJucyBgLUVOT0RFVmAuXG5cbmBgYGNcblx0YSA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9BRERSLFxuXHRcdFx0XHQgTVhMODYyWFhfU0JfUERJX1BST0JFX0EpO1xuXHRpZiAoYSBcdTAwM2MgMClcblx0XHRyZXR1cm4gYTtcblx0ZCA9IG14bDg2Mnh4X3NtZGlvX3dyaXRlKHByaXYsIE1YTDg2MlhYX1NCX1BESV9EQVRBLFxuXHRcdFx0XHQgTVhMODYyWFhfU0JfUERJX1BST0JFX0QpO1xuXHRpZiAoZCBcdTAwM2MgMClcblx0XHRyZXR1cm4gZDtcblx0YSA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0FERFIpO1xuXHRpZiAoYSBcdTAwM2MgMClcblx0XHRyZXR1cm4gYTtcblx0ZCA9IG14bDg2Mnh4X3NtZGlvX3JlYWQocHJpdiwgTVhMODYyWFhfU0JfUERJX0RBVEEpO1xuXHRpZiAoZCBcdTAwM2MgMClcblx0XHRyZXR1cm4gZDtcblx0aWYgKCh1MTYpYSAhPSBNWEw4NjJYWF9TQl9QRElfUFJPQkVfQSB8fFxuXHQgICAgKHUxNilkICE9IE1YTDg2MlhYX1NCX1BESV9QUk9CRV9EKVxuXHRcdHJldHVybiAtRU5PREVWO1xuYGBgXG5cbkluIHRoZSBhYnNlbmNlIG9mIHJlYWwgaGFyZHdhcmUsIHRoZSBNRElPIHJlYWQgaXMgKnVubGlrZWx5KiB0byByZXR1cm4gYDB4NWE1YWAgb3IgYDB4YTVhNWAuIEl0J2xsIHByb2JhYmx5IGJlIGAweGZmZmZgIChidXMgZmxvYXRpbmcpIG9yIGAwYCAoZHVtbXkgYnVzKS4gVGhlIGtleSBoZXJlIGlzIHdoZXRoZXIgdGhlIGtlcm5lbCBpbmNsdWRlcyBhICpzcGVjaWFsKiBkdW1teSBNRElPIGJ1cyBpbXBsZW1lbnRhdGlvbiB0aGF0IGNhbiBzdG9yZSB3cml0dGVuIHZhbHVlcy4gVGhpcyBpcyBjcnVjaWFsLlxuXG5TbywgdGhlIG5leHQgc3RlcCBpcyB0byBjaGVjayBpZiB0aGVyZSBpcyBhIFwibW9ja1wiIE1ESU8gYnVzIGRyaXZlciwgcGVyaGFwcyBzb21ldGhpbmcgbGlrZSBgZHJpdmVycy9uZXQvcGh5L21kaW8tbW9jay5jYCwgb3Igc29tZXRoaW5nIHNpbWlsYXIgdGhhdCBzaW11bGF0ZXMgTURJTyBpbnRlcmFjdGlvbnMuIElmIHN1Y2ggYSB0aGluZyBleGlzdHMgYW5kIGdldHMgbG9hZGVkIHdpdGggc3l6a2FsbGVyLCB0aGVuIHRoZSBkcml2ZXIgbWF5IHRyaWdnZXIhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM3NzUwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjUzOjM5LjA5NzcxMTIwN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJjb2Rlc2VhcmNoLWRpci1pbmRleCIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0NTkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L3BoeVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJGaWxlc1wiOiBbXG4gICAgXCJhZGluLmNcIixcbiAgICBcImFkaW4xMTAwLmNcIixcbiAgICBcImFkaW4xMTQwLXBoeS5jXCIsXG4gICAgXCJhaXJfYW44ODAxLmNcIixcbiAgICBcImFpcl9lbjg4MTFoLmNcIixcbiAgICBcImFpcl9waHlfbGliLmNcIixcbiAgICBcImFpcl9waHlfbGliLmhcIixcbiAgICBcImFtZC5jXCIsXG4gICAgXCJhczIxeHh4LmNcIixcbiAgICBcImF4ODg3OTZiLmNcIixcbiAgICBcImF4ODg3OTZiX3J1c3QucnNcIixcbiAgICBcImJjbS1jeWdudXMuY1wiLFxuICAgIFwiYmNtLXBoeS1saWIuY1wiLFxuICAgIFwiYmNtLXBoeS1saWIuaFwiLFxuICAgIFwiYmNtLXBoeS1wdHAuY1wiLFxuICAgIFwiYmNtNTQxNDAuY1wiLFxuICAgIFwiYmNtNjN4eC5jXCIsXG4gICAgXCJiY203eHh4LmNcIixcbiAgICBcImJjbTg0ODgxLmNcIixcbiAgICBcImJjbTg3eHguY1wiLFxuICAgIFwiYnJvYWRjb20uY1wiLFxuICAgIFwiY2ljYWRhLmNcIixcbiAgICBcImNvcnRpbmEuY1wiLFxuICAgIFwiZGF2aWNvbS5jXCIsXG4gICAgXCJkcDgzNjQwLmNcIixcbiAgICBcImRwODM2NDBfcmVnLmhcIixcbiAgICBcImRwODM4MjIuY1wiLFxuICAgIFwiZHA4Mzg0OC5jXCIsXG4gICAgXCJkcDgzODY3LmNcIixcbiAgICBcImRwODM4NjkuY1wiLFxuICAgIFwiZHA4M3RjODExLmNcIixcbiAgICBcImRwODN0ZDUxMC5jXCIsXG4gICAgXCJkcDgzdGc3MjAuY1wiLFxuICAgIFwiZXQxMDExYy5jXCIsXG4gICAgXCJmaXhlZF9waHkuY1wiLFxuICAgIFwiaWNwbHVzLmNcIixcbiAgICBcImludGVsLXh3YXkuY1wiLFxuICAgIFwibGlua21vZGUuY1wiLFxuICAgIFwibHh0LmNcIixcbiAgICBcIm1hcnZlbGwtODhxMnh4eC5jXCIsXG4gICAgXCJtYXJ2ZWxsLTg4eDIyMjIuY1wiLFxuICAgIFwibWFydmVsbC5jXCIsXG4gICAgXCJtYXJ2ZWxsMTBnLmNcIixcbiAgICBcIm1kaW8tb3Blbi1hbGxpYW5jZS5oXCIsXG4gICAgXCJtZGlvX2J1cy5jXCIsXG4gICAgXCJtZGlvX2J1c19wcm92aWRlci5jXCIsXG4gICAgXCJtZGlvX2RldmljZS5jXCIsXG4gICAgXCJtZGlvX2RldnJlcy5jXCIsXG4gICAgXCJtZXNvbi1neGwuY1wiLFxuICAgIFwibWljcmVsLmNcIixcbiAgICBcIm1pY3JvY2hpcC5jXCIsXG4gICAgXCJtaWNyb2NoaXBfcmRzX3B0cC5jXCIsXG4gICAgXCJtaWNyb2NoaXBfcmRzX3B0cC5oXCIsXG4gICAgXCJtaWNyb2NoaXBfdDEuY1wiLFxuICAgIFwibWljcm9jaGlwX3Qxcy5jXCIsXG4gICAgXCJtaWlfdGltZXN0YW1wZXIuY1wiLFxuICAgIFwibW90b3Jjb21tLmNcIixcbiAgICBcIm14bC04NjExMC5jXCIsXG4gICAgXCJteGwtZ3B5LmNcIixcbiAgICBcIm5hdGlvbmFsLmNcIixcbiAgICBcIm5jbjI2MDAwLmNcIixcbiAgICBcIm54cC1jNDUtdGphMTF4eC1tYWNzZWMuY1wiLFxuICAgIFwibnhwLWM0NS10amExMXh4LmNcIixcbiAgICBcIm54cC1jNDUtdGphMTF4eC5oXCIsXG4gICAgXCJueHAtY2J0eC5jXCIsXG4gICAgXCJueHAtdGphMTF4eC5jXCIsXG4gICAgXCJvcGVuX2FsbGlhbmNlX2hlbHBlcnMuY1wiLFxuICAgIFwib3Blbl9hbGxpYW5jZV9oZWxwZXJzLmhcIixcbiAgICBcInBoeS1jNDUuY1wiLFxuICAgIFwicGh5LWNhcHMuaFwiLFxuICAgIFwicGh5LWNvcmUuY1wiLFxuICAgIFwicGh5LmNcIixcbiAgICBcInBoeV9jYXBzLmNcIixcbiAgICBcInBoeV9kZXZpY2UuY1wiLFxuICAgIFwicGh5X2xlZF90cmlnZ2Vycy5jXCIsXG4gICAgXCJwaHlfbGlua190b3BvbG9neS5jXCIsXG4gICAgXCJwaHlfcGFja2FnZS5jXCIsXG4gICAgXCJwaHlfcG9ydC5jXCIsXG4gICAgXCJwaHlsaWItaW50ZXJuYWwuaFwiLFxuICAgIFwicGh5bGliLmhcIixcbiAgICBcInBoeWxpbmsuY1wiLFxuICAgIFwicXNlbWkuY1wiLFxuICAgIFwicXQyMDI1LnJzXCIsXG4gICAgXCJyb2NrY2hpcC5jXCIsXG4gICAgXCJzZnAtYnVzLmNcIixcbiAgICBcInNmcC5jXCIsXG4gICAgXCJzZnAuaFwiLFxuICAgIFwic21zYy5jXCIsXG4gICAgXCJzdGUxMFhwLmNcIixcbiAgICBcInN0dWJzLmNcIixcbiAgICBcInN3cGh5LmNcIixcbiAgICBcInN3cGh5LmhcIixcbiAgICBcInRlcmFuZXRpY3MuY1wiLFxuICAgIFwidVBENjA2MjAuY1wiLFxuICAgIFwidml0ZXNzZS5jXCIsXG4gICAgXCJ4aWxpbnhfZ21paTJyZ21paS5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IFtcbiAgICBcImFxdWFudGlhXCIsXG4gICAgXCJtZWRpYXRla1wiLFxuICAgIFwibXNjY1wiLFxuICAgIFwicWNvbVwiLFxuICAgIFwicmVhbHRla1wiXG4gIF1cbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjUzOjM5LjA5Nzg1ODM4N1oiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTc4Mjc2MjgxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHN1bW1hcml6ZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZSwgcHJlc2VudGVkIGFzIGZpcnN0LXBlcnNvbiBpbnRlcm5hbCBtb25vbG9ndWU6XG5cbioqSW52ZXN0aWdhdGluZyBNRElPIERyaXZlciBBdmFpbGFiaWxpdHkqKlxuXG5IbW0sIG5vIGBtZGlvLW1vY2suY2AuLi4gdGhhdCdzIHVuZXhwZWN0ZWQuIEkgd2FzIGp1c3QgZXhwZWN0aW5nIHRvIHNlZSB0aGF0IGFzIGEgcXVpY2sgZGVidWdnaW5nIG9wdGlvbi4gV2FpdCBhIG1pbnV0ZS4uLiBob2xkIG9uLCB3aGF0J3MgdGhpcz8gVGhlcmUncyBgbWRpby1iY20tdW5pbWFjLmNgIGluIGBkcml2ZXJzL25ldC9tZGlvL2A/IE9rYXksIHRoYXQgY2hhbmdlcyB0aGluZ3MuIFRoaXMgaW1wbGllcyBhIEJyb2FkY29tIFVuaW1hYyBNRElPIGltcGxlbWVudGF0aW9uIGlzIGF2YWlsYWJsZSwgd2hpY2ggaXMgYSBrZXkgcGllY2Ugb2YgaW5mb3JtYXRpb24uIFRoaXMgaXNuJ3QganVzdCBhIGdlbmVyaWMgTURJTyBpbXBsZW1lbnRhdGlvbiwgdGhpcyBpcyB0aWVkIHRvIHNwZWNpZmljIGhhcmR3YXJlLiBUaGF0IHBvdGVudGlhbGx5IHNhdmVzIG1lIGEgbG90IG9mIHRpbWUgaWYgSSdtIHdvcmtpbmcgd2l0aCBhIEJyb2FkY29tIFVuaW1hYyBiYXNlZCBzZXR1cC4gSSBuZWVkIHRvIGludmVzdGlnYXRlIHRoYXQgZmlsZSBmdXJ0aGVyLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MDMwNCwiT3V0cHV0VG9rZW5zIjoyNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1Mzo0My4yNzYxMzg2ODhaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiY29kZXNlYXJjaC1kaXItaW5kZXgiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5OTM5MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkRpclwiOiBcImRyaXZlcnMvbmV0L21kaW9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRmlsZXNcIjogW1xuICAgIFwiYWNwaV9tZGlvLmNcIixcbiAgICBcImZ3bm9kZV9tZGlvLmNcIixcbiAgICBcIm1kaW8tYWlyb2hhLmNcIixcbiAgICBcIm1kaW8tYXNwZWVkLmNcIixcbiAgICBcIm1kaW8tYmNtLWlwcm9jLmNcIixcbiAgICBcIm1kaW8tYmNtLXVuaW1hYy5jXCIsXG4gICAgXCJtZGlvLWJpdGJhbmcuY1wiLFxuICAgIFwibWRpby1jYXZpdW0uY1wiLFxuICAgIFwibWRpby1jYXZpdW0uaFwiLFxuICAgIFwibWRpby1ncGlvLmNcIixcbiAgICBcIm1kaW8taGlzaS1mZW1hYy5jXCIsXG4gICAgXCJtZGlvLWkyYy5jXCIsXG4gICAgXCJtZGlvLWlwcTQwMTkuY1wiLFxuICAgIFwibWRpby1pcHE4MDY0LmNcIixcbiAgICBcIm1kaW8tbW94YXJ0LmNcIixcbiAgICBcIm1kaW8tbXNjYy1taWltLmNcIixcbiAgICBcIm1kaW8tbXV4LWJjbS1pcHJvYy5jXCIsXG4gICAgXCJtZGlvLW11eC1iY202MzY4LmNcIixcbiAgICBcIm1kaW8tbXV4LWdwaW8uY1wiLFxuICAgIFwibWRpby1tdXgtbWVzb24tZzEyYS5jXCIsXG4gICAgXCJtZGlvLW11eC1tZXNvbi1neGwuY1wiLFxuICAgIFwibWRpby1tdXgtbW1pb3JlZy5jXCIsXG4gICAgXCJtZGlvLW11eC1tdWx0aXBsZXhlci5jXCIsXG4gICAgXCJtZGlvLW11eC5jXCIsXG4gICAgXCJtZGlvLW12dXNiLmNcIixcbiAgICBcIm1kaW8tb2N0ZW9uLmNcIixcbiAgICBcIm1kaW8tcGljNjRocHNjLmNcIixcbiAgICBcIm1kaW8tcmVhbHRlay1ydGw5MzAwLmNcIixcbiAgICBcIm1kaW8tcmVnbWFwLmNcIixcbiAgICBcIm1kaW8tc3VuNGkuY1wiLFxuICAgIFwibWRpby10aHVuZGVyLmNcIixcbiAgICBcIm1kaW8teGdlbmUuY1wiLFxuICAgIFwib2ZfbWRpby5jXCJcbiAgXSxcbiAgXCJTdWJkaXJzXCI6IG51bGxcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjUzOjQzLjI3NjI0MTEyOFoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3MDQ2OTAzODQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgbXhsODYyeHggRHJpdmVyIGZvciBQb3RlbnRpYWwgVnVsbmVyYWJpbGl0aWVzKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgYG14bDg2Mnh4YCBjb2RlLCBhbmQgdGhlIGltbWVkaWF0ZSB0aG91Z2h0IGlzOiBhcmUgdGhlc2UgTURJTyBidXNlcyBiZWluZyB1c2VkIGluIGEgc3RyYWlnaHRmb3J3YXJkIHdheSwgb3IgYXJlIHRoZXJlIG1vcmUgY29tcGxleCBpbnRlcmFjdGlvbnMgZ29pbmcgb24/IEkgbmVlZCB0byBjbGFyaWZ5IHRoYXQgbm9uZSBvZiB0aGVtIGFjdCBsaWtlIGR1bW15IGJ1c2VzIGp1c3Qgc3RvcmluZyB2YWx1ZXMuIEkgc2VlIG1lbnRpb25zIG9mIGBtZGlvLXJlZ21hcC5jYCBhbmQgYG1kaW8tYml0YmFuZy5jYCwgc28gSSBzaG91bGQga2VlcCB0aG9zZSBpbiBtaW5kIGFzIHBvc3NpYmxlIHBvaW50cyBvZiBpbnRlcmVzdCwgYnV0IGRvbid0IG5lZWQgdG8gY29uc2lkZXIgdGhlbSBwcmltYXJ5LlxuXG5JJ20gdGhpbmtpbmcgYWJvdXQgaG93IHN5emthbGxlciBpcyBmdXp6aW5nIHRoaXMgYW5kIHN1ZGRlbmx5LCBJJ20gc3R1Y2sgb24gYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAuIEhvdyBpcyBzeXprYWxsZXIgKmFjdHVhbGx5KiBnZXR0aW5nIHBhc3QgdGhhdD8gV2FpdCwgbWF5YmUgaXQncyAqbm90KiBwYXNzaW5nIGl0LiBJZiBpdCBkb2Vzbid0IHBhc3MgaXQsIHRoZSBwcm9iZSBmdW5jdGlvbiBpcyBzdXBwb3NlZCB0byByZXR1cm4gYC1FTk9ERVZgLCB3aGljaCBtZWFucyB0aGUgZHJpdmVyIGlzbid0IHJlZ2lzdGVyZWQuIElmIHRoZSBkcml2ZXIgaXNuJ3QgcmVnaXN0ZXJlZCwgd2UgbmV2ZXIgZXZlbiBnZXQgdG8gYGRldmxpbmsgZmxhc2ggdXBkYXRlYCBjb2RlLCB3aGljaCBpcyBvYnZpb3VzbHkgaW1wb3J0YW50IHRvIGNvbnNpZGVyLlxuXG5Ob3csIG15IGxpbmUgb2YgdGhvdWdodCBtb3ZlcyB0bzogSXMgdGhlcmUgKmFueSogd2F5IHRvIHJlYWNoIGBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgd2l0aG91dCB0aGUgZHJpdmVyIHN1Y2Nlc3NmdWxseSBwcm9iaW5nPyBOb3BlLCBpdCdzIHBhcnQgb2YgYG14bDg2Mnh4X3N3aXRjaF9vcHNgLCB3aGljaCBpcyByZWdpc3RlcmVkIHZpYSBgZHNhX3JlZ2lzdGVyX3N3aXRjaChkcylgIGluIGBteGw4NjJ4eF9wcm9iZWAuIFNvIGlmIGBteGw4NjJ4eF9wcm9iZWAgZmFpbHMsIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCBpc24ndCBjYWxsZWQsIGFuZCB0aGUgZGV2bGluayBvcGVyYXRpb25zIGFyZSBub3QgcmVnaXN0ZXJlZC5cblxuT2theSwgYmFjayB0byBmdW5kYW1lbnRhbHMuIGBteGw4NjJ4eF9wcm9iZWAgY2FsbHMgYGRzYV9yZWdpc3Rlcl9zd2l0Y2goZHMpYCwgd2hpY2ggaW4gdHVybiBjYWxscyBgZHNhX3N3aXRjaF9zZXR1cChkcylgLiBUaGF0IG9uZSBjYWxscyBgZHMtXHUwMDNlb3BzLVx1MDAzZXNldHVwKGRzKWAuIFNvIHRoZSBgc2V0dXBgIG9wIGlzIGBteGw4NjJ4eF9zZXR1cGAuIEFoISBUaGUgY2FsbCB0byBgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0YCBpcyBoYXBwZW5pbmcgZnJvbSBgbXhsODYyeHhfc2V0dXBgLCAqbm90KiBmcm9tIGBteGw4NjJ4eF9wcm9iZWAhIFRoaXMgaXMgaW1wb3J0YW50ISBOb3cgSSBqdXN0IG5lZWQgdG8gdmVyaWZ5IHRoYXQgSSdtIGNvcnJlY3QgaW4gdGhhdCBhc3Nlc3NtZW50LCBhbmQgdGhlbiBJJ2xsIHVuZGVyc3RhbmQgd2hhdCBpcyBhY3R1YWxseSBoYXBwZW5pbmcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwOTUxLCJPdXRwdXRUb2tlbnMiOjUwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgxLCJUb29sQ2FsbHMiOlsiY29kZXNlYXJjaC1kaXItaW5kZXgiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1Mzo1MC4zMjMxNDgzMThaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MTUwMTIzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJteGw4NjJ4eF9zZXR1cFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJkcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0yNjI9c3RhdGljIGludCBteGw4NjJ4eF93YWl0X3JlYWR5KHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTMwOC1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzozMDk6c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9tZGlvKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0zMTAte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM9MzQxPXN0YXRpYyBpbnQgbXhsODYyeHhfYnJpZGdlX2NvbmZpZ19md2Qoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCB1MTYgYnJpZGdlX2lkLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMzgyLSAqL1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjM4MzpzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwX2Ryb3BfbWV0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTM4NC17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz02NDE9c3RhdGljIHZvaWQgbXhsODYyeHhfZnJlZV9icmlkZ2Uoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtNjYwLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjY2MTpzdGF0aWMgaW50IG14bDg2Mnh4X3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy02NjIte1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtNzEyLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHByaXYtXFx1MDAzZXNlcmRlc19wb3J0cyk7IGkrKylcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYzo3MTM6XFx0XFx0bXhsODYyeHhfc2V0dXBfcGNzKHByaXYsIFxcdTAwMjZwcml2LVxcdTAwM2VzZXJkZXNfcG9ydHNbaV0sXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtNzE0LVxcdFxcdFxcdFxcdCAgIGkgKyBNWEw4NjJYWF9GSVJTVF9TRVJERVNfUE9SVCk7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy03NTktXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6NzYwOlxcdHJldCA9IG14bDg2Mnh4X3NldHVwX2Ryb3BfbWV0ZXIoZHMpO1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTc2MS1cXHRpZiAocmV0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtNzY2LVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjc2NzpcXHRyZXR1cm4gbXhsODYyeHhfc2V0dXBfbWRpbyhkcyk7XFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtNzY4LX1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTEyNzc9c3RhdGljIGludCBteGw4NjJ4eF9wb3J0X3ZsYW5fZGVsKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0xMzQ0LVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjEzNDU6c3RhdGljIGludCBteGw4NjJ4eF9zZXR1cF9jcHVfYnJpZGdlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQpXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMTM0Ni17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYz0xNDE5PXN0YXRpYyBpbnQgbXhsODYyeHhfcG9ydF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0KVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMTQ1NS1cXHRpZiAoaXNfY3B1X3BvcnQpXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MTQ1NjpcXHRcXHRyZXR1cm4gbXhsODYyeHhfc2V0dXBfY3B1X2JyaWRnZShkcywgcG9ydCk7XFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMTQ1Ny1cXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTIxNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBteGw4NjJ4eF9zd2l0Y2hfb3BzID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jLTIxNTgtXFx0LmdldF90YWdfcHJvdG9jb2wgPSBteGw4NjJ4eF9nZXRfdGFnX3Byb3RvY29sLFxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jOjIxNTk6XFx0LnNldHVwID0gbXhsODYyeHhfc2V0dXAsXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjE2MC1cXHQucG9ydF9zZXR1cCA9IG14bDg2Mnh4X3BvcnRfc2V0dXAsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjUzOjUwLjY3NDY2NTA0NloiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NTU3MzMwNjk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyB0aGUgTVhMODYyWFggRHJpdmVyIFByb2JlIEZhaWx1cmUqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2tpbmcgZG93biB0aGlzIHByb2JlIGZhaWx1cmUgaW4gdGhlIE1YTDg2MlhYIGRyaXZlci4gUmlnaHQsIGBteGw4NjJ4eF9zZXR1cGAgaXMgY2xlYXJseSB0aGUgYHNldHVwYCBvcGVyYXRpb24gd2UncmUgaW50ZXJlc3RlZCBpbiwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZC4gTm93LCBsZXQncyBzZWUsIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCBjYWxscyBgZHNhX3N3aXRjaF9zZXR1cGAsIHdoaWNoIGluIHR1cm4sIGludm9rZXMgYGRzLVx1MDAzZW9wcy1cdTAwM2VzZXR1cGAg4oCTIHByZWNpc2VseSB0aGUgaG9vayB0byBvdXIgYG14bDg2Mnh4X3NldHVwYCBmdW5jdGlvbi4gVGhlIGZsb3cgbWFrZXMgc2Vuc2U6IGEgZmFpbHVyZSBpbiBgc2V0dXBgIG1lYW5zIGBkc2FfcmVnaXN0ZXJfc3dpdGNoYCB3aWxsIGZhaWwsIGFuZCBpZiAqdGhhdCogZmFpbHMsIGBteGw4NjJ4eF9wcm9iZWAgaXMgYm91bmQgdG8gZmFpbC5cblxuQnV0IHdhaXQgYSBtaW51dGUuLi4gSSBqdXN0IHJlYWxpemVkIHNvbWV0aGluZyBJIGhhZG4ndCBjb25zaWRlcmVkLiBJc24ndCBgZHNhX3N3aXRjaF9kZXZsaW5rX2FsbG9jYCAqYmVmb3JlKiB0aGUgY2FsbCB0byBzZXR1cD8gVGhhdCBjaGFuZ2VzIHRoaW5nczsgdGhlcmUncyBhIGRldmxpbmsgYWxsb2NhdGVkIGJlZm9yZSBvdXIgYHNldHVwYCBvcGVyYXRpb24/IE9rYXksIEkgc2hvdWxkIHJlYWxseSBjaGVjayB0aGUgc291cmNlIHRvIGJlIHN1cmUuIEknbSBnb2luZyB0byBqdW1wIGludG8gdGhlIGBuZXQvZHNhYCBjb2RlIC0gZWl0aGVyIGBkc2EuY2Agb3IgdGhlIGRldmxpbmsgbW9kdWxlLCBgZGV2bGluay5jYCAtIHRvIHNlZSBpZiB0aGF0J3Mgd2hlcmUgdGhlIHByb2JsZW0gbGllcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDMyODYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTM6NTUuMjMxOTk4Mjk1WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNjAyNDA3NDE0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9zd2l0Y2hfZGV2bGlua19hbGxvY1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL2RldmxpbmsuYz0zOTU9dm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5uZXQvZHNhL2RldmxpbmsuYy0zOTktXFxubmV0L2RzYS9kZXZsaW5rLmM6NDAwOmludCBkc2Ffc3dpdGNoX2RldmxpbmtfYWxsb2Moc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbm5ldC9kc2EvZGV2bGluay5jLTQwMS17XFxuLS1cXG5uZXQvZHNhL2RldmxpbmsuaD0xMj12b2lkIGRzYV9zd2l0Y2hfZGV2bGlua191bnJlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxubmV0L2RzYS9kZXZsaW5rLmg6MTM6aW50IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbm5ldC9kc2EvZGV2bGluay5oLTE0LXZvaWQgZHNhX3N3aXRjaF9kZXZsaW5rX2ZyZWUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKTtcXG4tLVxcbm5ldC9kc2EvZHNhLmM9NjIyPXN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuLS1cXG5uZXQvZHNhL2RzYS5jLTYzNS1cXG5uZXQvZHNhL2RzYS5jOjYzNjpcXHRlcnIgPSBkc2Ffc3dpdGNoX2RldmxpbmtfYWxsb2MoZHMpO1xcbm5ldC9kc2EvZHNhLmMtNjM3LVxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjUzOjU2LjgzNDQxMjI3OVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzE4MzEwNjM3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYSBtb3JlIGV4cGVyaWVuY2VkIHBlcnNwZWN0aXZlOlxuXG4qKkluaXRpYWwgQXNzZXNzbWVudCBvZiBEZXZpY2UgTGluayBBbGxvY2F0aW9uKipcblxuUmlnaHQsIHNvIGBkc2Ffc3dpdGNoX2RldmxpbmtfYWxsb2NgIGlzIGJlaW5nIGNhbGxlZCAqYmVmb3JlKiB0aGUgdHlwaWNhbCBgc2V0dXBgIHJvdXRpbmUuIFRoYXQgaW1tZWRpYXRlbHkgZmxhZ3MgYSBwb3RlbnRpYWwgYXJlYSBvZiBvcHRpbWl6YXRpb24gb3IgYSBkaWZmZXJlbnQgaW5pdGlhbGl6YXRpb24gZmxvdyB0aGFuIEknbSB1c2VkIHRvLiBXZSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGludGVudCBiZWhpbmQgdGhpcyBzZWVtaW5nbHkgZWFybHkgYWxsb2NhdGlvbi4gTGV0J3MgZGVsdmUgaW50byB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uIG9mIGBkc2Ffc3dpdGNoX3NldHVwYCB3aXRoaW4gYG5ldC9kc2EvZHNhLmNgLiBJdCBpcyBpbXBlcmF0aXZlIHRvIGtub3cgKndoeSogd2UncmUgYWxsb2NhdGluZyBzbyBlYXJseSBhbmQgd2hhdCBkZXBlbmRlbmNpZXMgb3IgY29uc3RyYWludHMgdGhhdCBwbGFjZXMgb24gc3Vic2VxdWVudCBvcGVyYXRpb25zLiBUaGlzIGNvdWxkIGJlIGFib3V0IHJlc291cmNlIHByZS1hbGxvY2F0aW9uLCBoYXJkd2FyZSBkaXNjb3ZlcnksIG9yIGEgc3BlY2lmaWMgaGFuZGxpbmcgb2YgdGhlIGRldmxpbmsgc3RydWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDA1MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjU0OjAxLjE1MjcyNTcyNloiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTc4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RzYS9kc2EuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA2MjIsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNjIyOlxcdHN0YXRpYyBpbnQgZHNhX3N3aXRjaF9zZXR1cChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIDYyMzpcXHR7XFxuIDYyNDpcXHRcXHRpbnQgZXJyO1xcbiA2MjU6XFx0XFxuIDYyNjpcXHRcXHRpZiAoZHMtXFx1MDAzZXNldHVwKVxcbiA2Mjc6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDYyODpcXHRcXG4gNjI5OlxcdFxcdC8qIEluaXRpYWxpemUgZHMtXFx1MDAzZXBoeXNfbWlpX21hc2sgYmVmb3JlIHJlZ2lzdGVyaW5nIHRoZSB1c2VyIE1ESU8gYnVzXFxuIDYzMDpcXHRcXHQgKiBkcml2ZXIgYW5kIGJlZm9yZSBvcHMtXFx1MDAzZXNldHVwKCkgaGFzIHJ1biwgc2luY2UgdGhlIHN3aXRjaCBkcml2ZXJzIGFuZFxcbiA2MzE6XFx0XFx0ICogdGhlIHVzZXIgTURJTyBidXMgZHJpdmVyIHJlbHkgb24gdGhlc2UgdmFsdWVzIGZvciBwcm9iaW5nIFBIWVxcbiA2MzI6XFx0XFx0ICogZGV2aWNlcyBvciBub3RcXG4gNjMzOlxcdFxcdCAqL1xcbiA2MzQ6XFx0XFx0ZHMtXFx1MDAzZXBoeXNfbWlpX21hc2sgfD0gZHNhX3VzZXJfcG9ydHMoZHMpO1xcbiA2MzU6XFx0XFxuIDYzNjpcXHRcXHRlcnIgPSBkc2Ffc3dpdGNoX2RldmxpbmtfYWxsb2MoZHMpO1xcbiA2Mzc6XFx0XFx0aWYgKGVycilcXG4gNjM4OlxcdFxcdFxcdHJldHVybiBlcnI7XFxuIDYzOTpcXHRcXG4gNjQwOlxcdFxcdGVyciA9IGRzYV9zd2l0Y2hfcmVnaXN0ZXJfbm90aWZpZXIoZHMpO1xcbiA2NDE6XFx0XFx0aWYgKGVycilcXG4gNjQyOlxcdFxcdFxcdGdvdG8gZGV2bGlua19mcmVlO1xcbiA2NDM6XFx0XFxuIDY0NDpcXHRcXHRkcy1cXHUwMDNlY29uZmlndXJlX3ZsYW5fd2hpbGVfbm90X2ZpbHRlcmluZyA9IHRydWU7XFxuIDY0NTpcXHRcXG4gNjQ2OlxcdFxcdGVyciA9IGRzLVxcdTAwM2VvcHMtXFx1MDAzZXNldHVwKGRzKTtcXG4gNjQ3OlxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA2NDg6XFx0XFx0XFx0Z290byB1bnJlZ2lzdGVyX25vdGlmaWVyO1xcbiA2NDk6XFx0XFxuIDY1MDpcXHRcXHRlcnIgPSBkc2Ffc3dpdGNoX3NldHVwX3RhZ19wcm90b2NvbChkcyk7XFxuIDY1MTpcXHRcXHRpZiAoZXJyKVxcbiA2NTI6XFx0XFx0XFx0Z290byB0ZWFyZG93bjtcXG4gNjUzOlxcdFxcbiA2NTQ6XFx0XFx0aWYgKCFkcy1cXHUwMDNldXNlcl9taWlfYnVzIFxcdTAwMjZcXHUwMDI2IGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBoeV9yZWFkKSB7XFxuIDY1NTpcXHRcXHRcXHRkcy1cXHUwMDNldXNlcl9taWlfYnVzID0gbWRpb2J1c19hbGxvYygpO1xcbiA2NTY6XFx0XFx0XFx0aWYgKCFkcy1cXHUwMDNldXNlcl9taWlfYnVzKSB7XFxuIDY1NzpcXHRcXHRcXHRcXHRlcnIgPSAtRU5PTUVNO1xcbiA2NTg6XFx0XFx0XFx0XFx0Z290byB0ZWFyZG93bjtcXG4gNjU5OlxcdFxcdFxcdH1cXG4gNjYwOlxcdFxcbiA2NjE6XFx0XFx0XFx0ZHNhX3VzZXJfbWlpX2J1c19pbml0KGRzKTtcXG4gNjYyOlxcdFxcbiA2NjM6XFx0XFx0XFx0ZXJyID0gbWRpb2J1c19yZWdpc3Rlcihkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG4gNjY0OlxcdFxcdFxcdGlmIChlcnIgXFx1MDAzYyAwKVxcbiA2NjU6XFx0XFx0XFx0XFx0Z290byBmcmVlX3VzZXJfbWlpX2J1cztcXG4gNjY2OlxcdFxcdH1cXG4gNjY3OlxcdFxcbiA2Njg6XFx0XFx0ZHNhX3N3aXRjaF9kZXZsaW5rX3JlZ2lzdGVyKGRzKTtcXG4gNjY5OlxcdFxcbiA2NzA6XFx0XFx0ZHMtXFx1MDAzZXNldHVwID0gdHJ1ZTtcXG4gNjcxOlxcdFxcdHJldHVybiAwO1xcbiA2NzI6XFx0XFxuIDY3MzpcXHRmcmVlX3VzZXJfbWlpX2J1czpcXG4gNjc0OlxcdFxcdGlmIChkcy1cXHUwMDNldXNlcl9taWlfYnVzIFxcdTAwMjZcXHUwMDI2IGRzLVxcdTAwM2VvcHMtXFx1MDAzZXBoeV9yZWFkKVxcbiA2NzU6XFx0XFx0XFx0bWRpb2J1c19mcmVlKGRzLVxcdTAwM2V1c2VyX21paV9idXMpO1xcbiA2NzY6XFx0dGVhcmRvd246XFxuIDY3NzpcXHRcXHRpZiAoZHMtXFx1MDAzZW9wcy1cXHUwMDNldGVhcmRvd24pXFxuIDY3ODpcXHRcXHRcXHRkcy1cXHUwMDNlb3BzLVxcdTAwM2V0ZWFyZG93bihkcyk7XFxuIDY3OTpcXHR1bnJlZ2lzdGVyX25vdGlmaWVyOlxcbiA2ODA6XFx0XFx0ZHNhX3N3aXRjaF91bnJlZ2lzdGVyX25vdGlmaWVyKGRzKTtcXG4gNjgxOlxcdGRldmxpbmtfZnJlZTpcXG4gNjgyOlxcdFxcdGRzYV9zd2l0Y2hfZGV2bGlua19mcmVlKGRzKTtcXG4gNjgzOlxcdFxcdHJldHVybiBlcnI7XFxuIDY4NDpcXHR9XFxuIDY4NTpcXHRcXG4gNjg2OlxcdHN0YXRpYyB2b2lkIGRzYV9zd2l0Y2hfdGVhcmRvd24oc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiA2ODc6XFx0e1xcbiA2ODg6XFx0XFx0aWYgKCFkcy1cXHUwMDNlc2V0dXApXFxuIDY4OTpcXHRcXHRcXHRyZXR1cm47XFxuIDY5MDpcXHRcXG4gNjkxOlxcdFxcdGRzYV9zd2l0Y2hfZGV2bGlua191bnJlZ2lzdGVyKGRzKTtcXG4gNjkyOlxcdFxcbiA2OTM6XFx0XFx0aWYgKGRzLVxcdTAwM2V1c2VyX21paV9idXMgXFx1MDAyNlxcdTAwMjYgZHMtXFx1MDAzZW9wcy1cXHUwMDNlcGh5X3JlYWQpIHtcXG4gNjk0OlxcdFxcdFxcdG1kaW9idXNfdW5yZWdpc3Rlcihkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG4gNjk1OlxcdFxcdFxcdG1kaW9idXNfZnJlZShkcy1cXHUwMDNldXNlcl9taWlfYnVzKTtcXG4gNjk2OlxcdFxcdFxcdGRzLVxcdTAwM2V1c2VyX21paV9idXMgPSBOVUxMO1xcbiA2OTc6XFx0XFx0fVxcbiA2OTg6XFx0XFxuIDY5OTpcXHRcXHRkc2Ffc3dpdGNoX3RlYXJkb3duX3RhZ19wcm90b2NvbChkcyk7XFxuIDcwMDpcXHRcXG4gNzAxOlxcdFxcdGlmIChkcy1cXHUwMDNlb3BzLVxcdTAwM2V0ZWFyZG93bilcXG4gNzAyOlxcdFxcdFxcdGRzLVxcdTAwM2VvcHMtXFx1MDAzZXRlYXJkb3duKGRzKTtcXG4gNzAzOlxcdFxcbiA3MDQ6XFx0XFx0ZHNhX3N3aXRjaF91bnJlZ2lzdGVyX25vdGlmaWVyKGRzKTtcXG4gNzA1OlxcdFxcbiA3MDY6XFx0XFx0ZHNhX3N3aXRjaF9kZXZsaW5rX2ZyZWUoZHMpO1xcbiA3MDc6XFx0XFxuIDcwODpcXHRcXHRkcy1cXHUwMDNlc2V0dXAgPSBmYWxzZTtcXG4gNzA5OlxcdH1cXG4gNzEwOlxcdFxcbiA3MTE6XFx0LyogRmlyc3QgdGVhciBkb3duIHRoZSBub24tc2hhcmVkLCB0aGVuIHRoZSBzaGFyZWQgcG9ydHMuIFRoaXMgZW5zdXJlcyB0aGF0XFxuIDcxMjpcXHQgKiBhbGwgd29yayBpdGVtcyBzY2hlZHVsZWQgYnkgb3VyIHN3aXRjaGRldiBoYW5kbGVycyBmb3IgdXNlciBwb3J0cyBoYXZlXFxuIDcxMzpcXHQgKiBjb21wbGV0ZWQgYmVmb3JlIHdlIGRlc3Ryb3kgdGhlIHJlZmNvdW50aW5nIGtlcHQgb24gdGhlIHNoYXJlZCBwb3J0cy5cXG4gNzE0OlxcdCAqL1xcbiA3MTU6XFx0c3RhdGljIHZvaWQgZHNhX3RyZWVfdGVhcmRvd25fcG9ydHMoc3RydWN0IGRzYV9zd2l0Y2hfdHJlZSAqZHN0KVxcbiA3MTY6XFx0e1xcbiA3MTc6XFx0XFx0c3RydWN0IGRzYV9wb3J0ICpkcDtcXG4gNzE4OlxcdFxcbiA3MTk6XFx0XFx0bGlzdF9mb3JfZWFjaF9lbnRyeShkcCwgXFx1MDAyNmRzdC1cXHUwMDNlcG9ydHMsIGxpc3QpXFxuIDcyMDpcXHRcXHRcXHRpZiAoZHNhX3BvcnRfaXNfdXNlcihkcCkgfHwgZHNhX3BvcnRfaXNfdW51c2VkKGRwKSlcXG4gNzIxOlxcdFxcdFxcdFxcdGRzYV9wb3J0X3RlYXJkb3duKGRwKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTQ6MDEuMTUyODg1MjY2WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ2NTQ5MzY1MjUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQW5hbHlzaXMgb2YgRGV2aWNlIFJlZ2lzdHJhdGlvbiBhbmQgRGV2bGluayBWaXNpYmlsaXR5KipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBzb21ldGhpbmcncyBpbW1lZGlhdGVseSBqdW1waW5nIG91dCBhdCBtZS4gSXQgc2VlbXMgdGhhdCBgZHNhX3N3aXRjaF9kZXZsaW5rX3JlZ2lzdGVyKGRzKWAgaXMgY2FsbGVkICphZnRlciogdGhlIGBkcy1cdTAwM2VvcHMtXHUwMDNlc2V0dXAoZHMpYCBmdW5jdGlvbi4gVGhhdCdzIGEgYml0IHVudXN1YWwuIE5vdywgaWYgdGhlIGBzZXR1cGAgb3BlcmF0aW9uIGZhaWxzLCB0aGUgY29kZSBjbGVhbmx5IHVucmVnaXN0ZXJzIHRoZSBub3RpZmllciBhbmQgZnJlZXMgdGhlIGRldmljZSBsaW5rIGluc3RhbmNlIHdpdGggYGRldmxpbmtfZnJlZWAuIFRoYXQgbWFrZXMgc2Vuc2UuIEhvd2V2ZXIsIGFuZCB0aGlzIGlzIHRoZSBjcnV4IG9mIGl0LCB0aGUgZGV2bGluayBkZXZpY2UgaXMgTkVWRVIgcmVnaXN0ZXJlZCBpbiB0aGF0IGZhaWx1cmUgcGF0aCEgVGhpcyBzdWdnZXN0cyBhIHBvdGVudGlhbCBpc3N1ZSwgYSByYWNlIGNvbmRpdGlvbiwgb3IganVzdCBhIGxvZ2ljIGdhcC5cblxuV2FpdCBhIHNlY29uZCwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gYGRldmxpbmtfYWxsb2NgIGhhbmRsZXMgdGhlIGluaXRpYWwgbWVtb3J5IGFsbG9jYXRpb24gZm9yIHRoZSBkZXZsaW5rIGluc3RhbmNlLCByaWdodD8gQnV0IHRoYXQgaW5zdGFuY2UgaXNuJ3QgYWN0dWFsbHkgYWNjZXNzaWJsZSB0byB1c2Vyc3BhY2UsIGl0J3MgaW52aXNpYmxlLCB1bnRpbCB0aGUgY2FsbCB0byBgZGV2bGlua19yZWdpc3RlcmAuIEFoYSEgVGhhdCBjb25maXJtcyBteSBzdXNwaWNpb24uIFRoZSBkZXZsaW5rIGRldmljZSBpcyBlc3NlbnRpYWxseSBcImJvcm5cIiB3aXRoIGBkZXZsaW5rX2FsbG9jYCwgYnV0IGRvZXNuJ3QgKmV4aXN0KiBmcm9tIGEgdXNlciBwZXJzcGVjdGl2ZSB1bnRpbCByZWdpc3RyYXRpb24uXG5cbkFscmlnaHQsIHNvIHRoaXMgcmVxdWlyZXMgYSBkZWVwZXIgbG9vaywgYSBtb3JlIHRob3JvdWdoIHZlcmlmaWNhdGlvbi4gSSBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZXRhaWxzIHRvIGJlIGNlcnRhaW4gb2YgdGhlIHBvdGVudGlhbCBpbXBsaWNhdGlvbnMgb2YgdGhpcyByZWdpc3RyYXRpb24gc2VxdWVuY2UuIExldCdzIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgdGhlIGNvbnNlcXVlbmNlcyBvZiB0aGUgZGV2aWNlIG5vdCBnZXR0aW5nIHJlZ2lzdGVyZWQgaW4gdGhlIGV2ZW50IG9mIGFuIGVhcmx5IGZhaWx1cmUuIEkgbmVlZCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NTczMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjU0OjA1LjgwNzgyNDg5MloiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI4OTkwNzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRzYV9zd2l0Y2hfZGV2bGlua19yZWdpc3RlclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJuZXQvZHNhL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJuZXQvZHNhL2RldmxpbmsuYz0zNzc9dm9pZCBkc2FfcG9ydF9kZXZsaW5rX3RlYXJkb3duKHN0cnVjdCBkc2FfcG9ydCAqZHApXFxuLS1cXG5uZXQvZHNhL2RldmxpbmsuYy0zODktXFxubmV0L2RzYS9kZXZsaW5rLmM6MzkwOnZvaWQgZHNhX3N3aXRjaF9kZXZsaW5rX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG5uZXQvZHNhL2RldmxpbmsuYy0zOTEte1xcbi0tXFxubmV0L2RzYS9kZXZsaW5rLmg9MTA9dm9pZCBkc2FfcG9ydF9kZXZsaW5rX3RlYXJkb3duKHN0cnVjdCBkc2FfcG9ydCAqZHApO1xcbm5ldC9kc2EvZGV2bGluay5oOjExOnZvaWQgZHNhX3N3aXRjaF9kZXZsaW5rX3JlZ2lzdGVyKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyk7XFxubmV0L2RzYS9kZXZsaW5rLmgtMTItdm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfdW5yZWdpc3RlcihzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpO1xcbi0tXFxubmV0L2RzYS9kc2EuYz02MjI9c3RhdGljIGludCBkc2Ffc3dpdGNoX3NldHVwKHN0cnVjdCBkc2Ffc3dpdGNoICpkcylcXG4tLVxcbm5ldC9kc2EvZHNhLmMtNjY3LVxcbm5ldC9kc2EvZHNhLmM6NjY4OlxcdGRzYV9zd2l0Y2hfZGV2bGlua19yZWdpc3Rlcihkcyk7XFxubmV0L2RzYS9kc2EuYy02NjktXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjU0OjA2LjIzNjgyNDkzMVoiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MDY1NjE0NDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyB0aGUgYGRzYV9zd2l0Y2hfZGV2bGlua19yZWdpc3RlcmAgRnVuY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZmlyc3QgdGhpbmcgb24gbXkgbWluZCBpcyBgZHNhX3N3aXRjaF9kZXZsaW5rX3JlZ2lzdGVyYC4gSSdtIGltbWVkaWF0ZWx5IGN1cmlvdXMgYWJvdXQgaXRzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIERTQSAoRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSkgY29udGV4dC4gSXQncyBwcmV0dHkgY2xlYXIgZnJvbSB0aGUgbmFtZSB0aGF0IHRoaXMgZnVuY3Rpb24gaXMgaW52b2x2ZWQgaW4gcmVnaXN0ZXJpbmcgc29tZXRoaW5nIHJlbGF0ZWQgdG8gYSBzd2l0Y2ggYW5kLCBzcGVjaWZpY2FsbHksIGhvdyB0aGF0IHN3aXRjaCBpbnRlcmFjdHMgd2l0aCBkZXZsaW5rLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IHRoaXMgcmVnaXN0cmF0aW9uIGVudGFpbHMuXG5cbkknbSB0aGlua2luZywgaXMgdGhpcyBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3I6XG5cbiogICBFc3RhYmxpc2hpbmcgdGhlIGluaXRpYWwgZGV2bGluayBvYmplY3QgZm9yIHRoZSBzd2l0Y2g/XG4qICAgTGlua2luZyB0aGUgRFNBIHN3aXRjaCBkcml2ZXIgd2l0aCB0aGUgZGV2bGluayBjb3JlP1xuKiAgIFNldHRpbmcgdXAgc3BlY2lmaWMgZGV2bGluayByZXNvdXJjZXMgb3IgY29uZmlndXJhdGlvbnMgcmVxdWlyZWQgYnkgdGhlIHN3aXRjaD9cbiogICBIYW5kbGluZyB0aGUgbGlmZWN5Y2xlIG1hbmFnZW1lbnQgb2YgdGhlIGRldmxpbmsgaW50ZWdyYXRpb24/XG5cbkknbSBhbHNvIGNvbnNpZGVyaW5nIHRoZSBpbXBsaWNhdGlvbnMuIEEgcHJvcGVyIGRldmxpbmsgcmVnaXN0cmF0aW9uIGlzIGNydWNpYWwgZm9yIG1ha2luZyB0aGUgc3dpdGNoIGRpc2NvdmVyYWJsZSwgbWFuYWdlYWJsZSwgYW5kIGludGVyb3BlcmFibGUgd2l0aGluIHRoZSBzeXN0ZW0uIFdpdGhvdXQgaXQsIHdlJ3JlIGxpa2VseSBtaXNzaW5nIG91dCBvbiBjcml0aWNhbCBmZWF0dXJlcyBhbmQgcGVyZm9ybWFuY2UgYmVuZWZpdHMgdGhhdCBkZXZsaW5rIHByb3ZpZGVzLiBXZSBuZWVkIHRvIGJlIGFibGUgdG8gbW9uaXRvciB0aGUgZGV2aWNlLCBtYW5hZ2UgcXVldWVzLCBhbmQgcG90ZW50aWFsbHkgcHVzaCBvdXQgc29tZSBmaXJtd2FyZSB1cGdyYWRlcy5cblxuSSBzaG91bGQgYWxzbyBsb29rIGludG8gdGhlIGZ1bmN0aW9uJ3MgYXJndW1lbnRzLiBXaGF0IGRhdGEgZG9lcyBpdCB0YWtlIGFzIGlucHV0PyBEb2VzIGl0IHJlY2VpdmUgYSBwb2ludGVyIHRvIHRoZSBEU0Egc3dpdGNoIGRldmljZSBzdHJ1Y3R1cmUsIG9yIHNvbWV0aGluZyBlbHNlPyBVbmRlcnN0YW5kaW5nIHRoZSBpbnB1dCBwYXJhbWV0ZXJzIHdpbGwgYmUga2V5IHRvIGdyYXNwaW5nIGhvdyBpdCBpbnRlZ3JhdGVzIHdpdGggdGhlIHJlc3Qgb2YgdGhlIERTQSBkcml2ZXIgYW5kIGRldmxpbmsgaW5mcmFzdHJ1Y3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NDg1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTQ6MTAuMzAyNDQzOTI3WiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMzI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJuZXQvZHNhL2RldmxpbmsuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzOTAsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzOTA6XFx0dm9pZCBkc2Ffc3dpdGNoX2RldmxpbmtfcmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiAzOTE6XFx0e1xcbiAzOTI6XFx0XFx0ZGV2bGlua19yZWdpc3Rlcihkcy1cXHUwMDNlZGV2bGluayk7XFxuIDM5MzpcXHR9XFxuIDM5NDpcXHRcXG4gMzk1OlxcdHZvaWQgZHNhX3N3aXRjaF9kZXZsaW5rX3VucmVnaXN0ZXIoc3RydWN0IGRzYV9zd2l0Y2ggKmRzKVxcbiAzOTY6XFx0e1xcbiAzOTc6XFx0XFx0ZGV2bGlua191bnJlZ2lzdGVyKGRzLVxcdTAwM2VkZXZsaW5rKTtcXG4gMzk4OlxcdH1cXG4gMzk5OlxcdFxcbiA0MDA6XFx0aW50IGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvYyhzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMpXFxuIDQwMTpcXHR7XFxuIDQwMjpcXHRcXHRzdHJ1Y3QgZHNhX2RldmxpbmtfcHJpdiAqZGxfcHJpdjtcXG4gNDAzOlxcdFxcdGNvbnN0IHN0cnVjdCBkZXZsaW5rX29wcyAqb3BzO1xcbiA0MDQ6XFx0XFx0c3RydWN0IGRldmxpbmsgKmRsO1xcbiA0MDU6XFx0XFxuIDQwNjpcXHRcXHRvcHMgPSBkcy1cXHUwMDNlb3BzLVxcdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZSA/IFxcdTAwMjZkc2FfZGV2bGlua19mbGFzaF9vcHNcXG4gNDA3OlxcdFxcdFxcdFxcdFxcdFxcdCAgICA6IFxcdTAwMjZkc2FfZGV2bGlua19vcHM7XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdC8qIEFkZCB0aGUgc3dpdGNoIHRvIGRldmxpbmsgYmVmb3JlIGNhbGxpbmcgc2V0dXAsIHNvIHRoYXQgc2V0dXAgY2FuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjU0OjEwLjMwMjU0OTE0N1oiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MzM5NTc3NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0aCB0byBgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGVgKipcblxuT2theSwgaGVyZSdzIHRoZSBicmVha2Rvd24gYXMgSSBzZWUgaXQuIFRoZSBjb3JlIGlzc3VlIGlzIGVuc3VyaW5nIGBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgY2FuIGJlIHJlYWNoZWQuIFRoaXMgZnVuY3Rpb24sIGFuZCB0aGVyZWZvcmUgdGhlIGFiaWxpdHkgdG8gdXBkYXRlIHRoZSBmbGFzaCwgaGluZ2VzIG9uIGBkZXZsaW5rX3JlZ2lzdGVyYCBiZWluZyBjYWxsZWQuIEl0J3MgY2xlYXIgdGhhdCBpZiBgbXhsODYyeHhfc2V0dXBgIGZhaWxzLCBgZGV2bGlua19yZWdpc3RlcmAgaXNuJ3QgY2FsbGVkLCBlZmZlY3RpdmVseSBibG9ja2luZyBhbnkgdXNlcnNwYWNlIGludGVyYWN0aW9uLCBsaWtlIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAuIFNvLCB0aGUgcGF0aCBpczogYG14bDg2Mnh4X3NldHVwYCAqbXVzdCogc3VjY2VlZC5cblxuRm9yIGBteGw4NjJ4eF9zZXR1cGAgdG8gc3VjY2VlZCwgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgaGFzIHRvIHJldHVybiBlaXRoZXIgYE1YTDg2MlhYX0lOX1JFU0NVRWAgb3IgYE1YTDg2MlhYX05PVF9SRVNDVUVgLiBJZiBpdCdzIHRoZSBsYXR0ZXIsIHRoZW4gd2UgZ2V0IGludG8gdGhlIGZ1cnRoZXIgc3VjY2VzcyByZXF1aXJlbWVudHM7IGBteGw4NjJ4eF9yZXNldGAgYW5kIGBteGw4NjJ4eF93YWl0X3JlYWR5YCBtdXN0IGFsc28gc3VjY2VlZC4gUmVtZW1iZXIgdGhhdCBgbXhsODYyeHhfcmVzZXRgIGludm9sdmVzIE1ESU8gd3JpdGVzIGFuZCB3YWl0aW5nIGZvciBhIGJpdCB0byBjbGVhciwgd2hpbGUgYG14bDg2Mnh4X3dhaXRfcmVhZHlgIHJlbGllcyBvbiByZWFkaW5nIHRoZSBmaXJtd2FyZSB2ZXJzaW9uIHZpYSB0aGUgTURJTyBBUEkuXG5cblRoZSB0cmlja3kgcGFydCBjb21lcyBpbiB3aXRoIHRoZSBoYXJkd2FyZSBkZXRlY3Rpb24uIElmIHRoZXJlJ3Mgbm8gcGh5c2ljYWwgaGFyZHdhcmUsIEkga25vdyB0aGF0IGBteGw4NjJ4eF9yZXNjdWVfbW9kZV9kZXRlY3RgIHdpbGwgcmV0dXJuIGAtRU5PREVWYCBiZWNhdXNlIGEgc2NyYXRjaCB3cml0ZSB0byBBRERSL0RBVEEgd2lsbCBmYWlsIHRvIGxhdGNoLiBNZWFuaW5nIHdoZW4gaXQgcmVhZHMgYmFjayB0aGUgdmFsdWVzLCBpdCBzaG91bGQgYmUgYDB4ZmZmZmAgb3IgYDB4MDAwMGAgcmF0aGVyIHRoYW4gdGhlIGV4cGVjdGVkIGAweDVhNWFgIGFuZCBgMHhhNWE1YC5cblxuQnV0IGhlcmUncyBhIHdyaW5rbGU6IEkgbmVlZCB0byBjb25zaWRlciBzeXprYWxsZXIgYW5kIGl0cyBlbnZpcm9ubWVudC4gV2hhdCBpZiBzeXprYWxsZXIgaXMgdXNpbmcgYSBkdW1teSBNRElPIGJ1cyB0aGF0IGFjdHVhbGx5ICpzdG9yZXMqIHRoZSB3cml0dGVuIHZhbHVlcz8gVGhpcyBpcyBpbXBvcnRhbnQgYmVjYXVzZSBpdCBjb3VsZCBwb3RlbnRpYWxseSB0cmljayBgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0YCBpbnRvIHRoaW5raW5nIHRoZXJlICppcyogYSB2YWxpZCBkZXZpY2Ugd2hlbiB0aGVyZSBpc24ndC4gU28sIHRoYXQgbWVhbnMgSSBuZWVkIHRvIHZlcmlmeSB3aGV0aGVyIHN5emthbGxlciBpbXBsZW1lbnRzIGEgdmFsdWUtc3RvcmluZywgbW9jayBNRElPIGJ1cyBpbXBsZW1lbnRhdGlvbi5cblxuTGV0J3MgY2hlY2suIEkgY2FuIHNlYXJjaCB0aGUga2VybmVsIGNvZGUgZm9yIGNsdWVzLiBJIHNob3VsZCBzdGFydCBieSBsb29raW5nIGZvciBgbWRpb2J1c19hbGxvY2Agb3IgYG1kaW9idXNfcmVnaXN0ZXJgIHdpdGhpbiB0aGUgYGRyaXZlcnMvbmV0L3BoeS9gIG9yIGBkcml2ZXJzL25ldC9tZGlvL2AgZGlyZWN0b3JpZXMuIE1heWJlIHNvbWV0aGluZyBsaWtlIGBtZGlvLW1vY2tgIG9yIGBtZGlvLWR1bW15YC4gSSd2ZSBhbHJlYWR5IHNjYW5uZWQgdGhvc2UsIHNvIGxldCdzIGNoZWNrIGBkcml2ZXJzL25ldC9ldGhlcm5ldC9gIG5leHQuIFNvbWUgZXRoZXJuZXQgZHJpdmVycyBoYXZlIHRoZWlyIG93biBNRElPIGJ1c2VzLCB0aG91Z2ggdXN1YWxseSB0aWVkIHRvIHRoZWlyIHNwZWNpZmljIGhhcmR3YXJlLCBzbyB1bmxpa2VseSB0byBiZSBnZW5lcmFsbHkgdXNlZnVsLiBXaGF0IGFib3V0IGBuZXRkZXZzaW1gPyBEb2VzIGl0IGV2ZW4gaW1wbGVtZW50IGFuIE1ESU8gYnVzPyBUaGlzIGZlZWxzIGxpa2UgdGhlIG5leHQgbG9naWNhbCBzdGVwIGluIHRoaXMgaW52ZXN0aWdhdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcxNzYsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0ODIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1NDoxOC42NDIxMzAzNDJaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ0MTk2ODE3MSwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWRpb1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9uZXRkZXZzaW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1NDoxOS4wODQxMDcxMDNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDAwMDMyOTAwNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBwcmVzZW50ZWQgaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipJbnZlc3RpZ2F0aW5nIE5ldHdvcmsgRGV2aWNlIFNpbXVsYXRpb24gYW5kIExvb3BiYWNrIEZ1bmN0aW9uYWxpdHkqKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIGN1cnJlbnQgc3RhdGUgb2YgYG5ldGRldnNpbWAuIFNwZWNpZmljYWxseSwgSSB3YXMganVzdCByZXZpZXdpbmcgdGhlIGNvZGUgYW5kIGl0IGhpdCBtZTogdGhlcmUncyBubyBNRElPIHN1cHBvcnQgaW1wbGVtZW50ZWQgdGhlcmUuIE9rYXksIHRoYXQncyBub3QgaWRlYWwsIGJ1dCBwcm9iYWJseSBub3QgdGhlIGVuZCBvZiB0aGUgd29ybGQgZm9yIHRoZSBpbnRlbmRlZCB1c2UgY2FzZXMsIHRob3VnaCBpdCBkb2VzIGxpbWl0IGl0cyB0ZXN0aW5nIHNjb3BlIHNvbWV3aGF0LlxuXG5UaGVuIG15IG1pbmQgd2FuZGVyZWQgYW5kIHRoZSBxdWVzdGlvbiBoaXQgbWU6IHdoYXQgYWJvdXQgYGRzYV9sb29wYD8gSSdtIGN1cmlvdXMgaWYgaXQgb2ZmZXJzIGEgdmlhYmxlIGFsdGVybmF0aXZlIG9yIGNvbXBsZW1lbnRhcnkgYXBwcm9hY2ggZm9yIGNlcnRhaW4gdGVzdGluZyBzY2VuYXJpb3MuIERvZXMgaXQgZXhwb3NlIHRoZSBmdW5jdGlvbmFsaXR5IHRvIGJ5cGFzcyB0aGUgcGh5c2ljYWwgbWVkaXVtIGFuZCB0ZXN0IHNwZWNpZmljIGFzcGVjdHMgb2YgdGhlIG5ldHdvcmsgc3RhY2ssIHBlcmhhcHMgaW5kZXBlbmRlbnQgb2YgYW4gYWN0dWFsIE1ESU8gc2V0dXAsIHdoaWNoIGlzIHdoYXQgSSdtIGxvb2tpbmcgZm9yIGhlcmU/IE5lZWQgdG8gZGl2ZSBkZWVwZXIgaW50byB0aGUgYGRzYV9sb29wYCBjb2RlIHRvIHNlZSBpZiBpdCBwcm92aWRlcyB0aGUgbGV2ZWwgb2YgY29udHJvbCBhbmQgaXNvbGF0aW9uIEknbSB0cnlpbmcgdG8gYWNoaWV2ZS4gRXhwbG9yaW5nIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGVzZSB0d28sIGBuZXRkZXZzaW1gIGFuZCBgZHNhX2xvb3BgIHRvIHNlZSB3aGVyZSB0aGUgZnVuY3Rpb25hbGl0eSBvdmVybGFwcywgYW5kIHdoYXQgbWlnaHQgYmUgdGhlIGJlc3QgYXBwcm9hY2ggZm9yIHRlc3RpbmcgdGhlc2UgbG93ZXIgbGV2ZWwgZnVuY3Rpb25zLCBhbmQgdGhlIGhpZ2hlciBsZXZlbCBmdW5jdGlvbnMgdGhhdCBkZXBlbmQgb24gdGhlbS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDgzNTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1NDoyMy4wODQ0MzkxMjdaIiwiU2VxIjozNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3NDE3MTYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1kaW9cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9NzQ9c3RhdGljIHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXZzW1BIWV9NQVhfQUREUl07XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NzU6c3RhdGljIHN0cnVjdCBtZGlvX2RldmljZSAqc3dpdGNoX21kaW9kZXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNzYtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0xODQ9c3RhdGljIGludCBkc2FfbG9vcF9waHlfcmVhZChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LCBpbnQgcmVnbnVtKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTg5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjE5MDpcXHRyZXQgPSBtZGlvYnVzX3JlYWRfbmVzdGVkKGJ1cywgcHMtXFx1MDAzZXBvcnRfYmFzZSArIHBvcnQsIHJlZ251bSk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMTkxLVxcdGlmIChyZXQgXFx1MDAzYyAwKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MTk5PXN0YXRpYyBpbnQgZHNhX2xvb3BfcGh5X3dyaXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcywgaW50IHBvcnQsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yMDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjA2OlxcdHJldCA9IG1kaW9idXNfd3JpdGVfbmVzdGVkKGJ1cywgcHMtXFx1MDAzZXBvcnRfYmFzZSArIHBvcnQsIHJlZ251bSwgdmFsdWUpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTIwNy1cXHRpZiAocmV0IFxcdTAwM2MgMClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jPTI1MD1zdGF0aWMgaW50IGRzYV9sb29wX3BvcnRfdmxhbl9hZGQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLCBpbnQgcG9ydCxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTI2My1cXHQvKiBKdXN0IGRvIGEgc2xlZXBpbmcgb3BlcmF0aW9uIHRvIG1ha2UgbG9ja2RlcCBjaGVja3MgZWZmZWN0aXZlICovXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MjY0OlxcdG1kaW9idXNfcmVhZChidXMsIHBzLVxcdTAwM2Vwb3J0X2Jhc2UgKyBwb3J0LCBNSUlfQk1TUik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjY1LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM9MjgzPXN0YXRpYyBpbnQgZHNhX2xvb3BfcG9ydF92bGFuX2RlbChzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMsIGludCBwb3J0LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMjkyLVxcdC8qIEp1c3QgZG8gYSBzbGVlcGluZyBvcGVyYXRpb24gdG8gbWFrZSBsb2NrZGVwIGNoZWNrcyBlZmZlY3RpdmUgKi9cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzoyOTM6XFx0bWRpb2J1c19yZWFkKGJ1cywgcHMtXFx1MDAzZXBvcnRfYmFzZSArIHBvcnQsIE1JSV9CTVNSKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0yOTQtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz0zMzQ9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBkc2FfbG9vcF9kcml2ZXIgPSB7XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTQtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzU1OnN0YXRpYyBpbnQgZHNhX2xvb3BfZHJ2X3Byb2JlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNTYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM1NzpcXHRzdHJ1Y3QgZHNhX2xvb3BfcGRhdGEgKnBkYXRhID0gbWRpb2Rldi1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGE7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzU4LVxcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2NC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozNjU6XFx0ZHMgPSBkZXZtX2t6YWxsb2MoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgc2l6ZW9mKCpkcyksIEdGUF9LRVJORUwpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM2Ni1cXHRpZiAoIWRzKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzY4LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM2OTpcXHRkcy1cXHUwMDNlZGV2ID0gXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldjtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNzAtXFx0ZHMtXFx1MDAzZW51bV9wb3J0cyA9IERTQV9MT09QX05VTV9QT1JUUztcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNzEtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzcyOlxcdHBzID0gZGV2bV9remFsbG9jKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIHNpemVvZigqcHMpLCBHRlBfS0VSTkVMKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zNzMtXFx0aWYgKCFwcylcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4MS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODI6XFx0ZHMtXFx1MDAzZWRldiA9IFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXY7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzgzLVxcdGRzLVxcdTAwM2VvcHMgPSBcXHUwMDI2ZHNhX2xvb3BfZHJpdmVyO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4NC1cXHRkcy1cXHUwMDNlcHJpdiA9IHBzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM4NTpcXHRwcy1cXHUwMDNlYnVzID0gbWRpb2Rldi1cXHUwMDNlYnVzO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTM4Ni1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzozODc6XFx0ZGV2X3NldF9kcnZkYXRhKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIGRzKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zODgtXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTAtXFx0aWYgKCFyZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6MzkxOlxcdFxcdGRldl9pbmZvKFxcdTAwMjZtZGlvZGV2LVxcdTAwM2VkZXYsIFxcXCIlczogMHglMHhcXFxcblxcXCIsXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzkyLVxcdFxcdFxcdCBwZGF0YS1cXHUwMDNlbmFtZSwgcGRhdGEtXFx1MDAzZWVuYWJsZWRfcG9ydHMpO1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtMzk2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5NzpzdGF0aWMgdm9pZCBkc2FfbG9vcF9kcnZfcmVtb3ZlKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy0zOTgte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjM5OTpcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDAwLVxcdHN0cnVjdCBkc2FfbG9vcF9wcml2ICpwcztcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQxMC1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MTE6c3RhdGljIHZvaWQgZHNhX2xvb3BfZHJ2X3NodXRkb3duKHN0cnVjdCBtZGlvX2RldmljZSAqbWRpb2RldilcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MTIte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQxMzpcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkZXZfZ2V0X2RydmRhdGEoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDE0LVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDE5LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyMDpcXHRkZXZfc2V0X2RydmRhdGEoXFx1MDAyNm1kaW9kZXYtXFx1MDAzZWRldiwgTlVMTCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDIxLX1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDIzOnN0YXRpYyBzdHJ1Y3QgbWRpb19kcml2ZXIgZHNhX2xvb3BfZHJ2ID0ge1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQyNDpcXHQubWRpb2Rydi5kcml2ZXJcXHQ9IHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00MjUtXFx0XFx0Lm5hbWVcXHQ9IFxcXCJkc2EtbG9vcFxcXCIsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00MzI9c3RhdGljIGludCBkc2FfbG9vcF9idXNfbWF0Y2goc3RydWN0IGRldmljZSAqZGV2LFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDM0LXtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0MzU6XFx0cmV0dXJuIGRydiA9PSBcXHUwMDI2ZHNhX2xvb3BfZHJ2Lm1kaW9kcnYuZHJpdmVyO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQzNi19XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00Mzg9c3RhdGljIHZvaWQgZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NDUtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDQ2OnN0YXRpYyBpbnQgX19pbml0IGRzYV9sb29wX2NyZWF0ZV9zd2l0Y2hfbWRpb2Rldih2b2lkKVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ0Ny17XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjItXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDYzOlxcdGJ1cyA9IG1kaW9fZmluZF9idXMoXFxcImZpeGVkLTBcXFwiKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjQtXFx0aWYgKFdBUk5fT04oIWJ1cykpXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjYtXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDY3OlxcdHN3aXRjaF9tZGlvZGV2ID0gbWRpb19kZXZpY2VfY3JlYXRlKGJ1cywgMzEpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ2ODpcXHRpZiAoSVNfRVJSKHN3aXRjaF9tZGlvZGV2KSlcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00NjktXFx0XFx0Z290byBvdXQ7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDcwLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MTpcXHRzd2l0Y2hfbWRpb2Rldi1cXHUwMDNlYnVzX21hdGNoID0gZHNhX2xvb3BfYnVzX21hdGNoO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3MjpcXHRzd2l0Y2hfbWRpb2Rldi1cXHUwMDNlZGV2LnBsYXRmb3JtX2RhdGEgPSBcXHUwMDI2ZHNhX2xvb3BfcGRhdGE7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDczLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ3NDpcXHRyZXQgPSBtZGlvX2RldmljZV9yZWdpc3Rlcihzd2l0Y2hfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDc1LVxcdGlmIChyZXQpXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDc2OlxcdFxcdG1kaW9fZGV2aWNlX2ZyZWUoc3dpdGNoX21kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ3Ny1vdXQ6XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz00ODI9c3RhdGljIGludCBfX2luaXQgZHNhX2xvb3BfaW5pdCh2b2lkKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDg2LVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjQ4NzpcXHRyZXQgPSBkc2FfbG9vcF9jcmVhdGVfc3dpdGNoX21kaW9kZXYoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00ODgtXFx0aWYgKHJldClcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5My1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo0OTQ6XFx0cmV0ID0gbWRpb19kcml2ZXJfcmVnaXN0ZXIoXFx1MDAyNmRzYV9sb29wX2Rydik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNDk1LVxcdGlmIChyZXQpIHtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy00OTYtXFx0XFx0ZHNhX2xvb3BfcGh5ZGV2c191bnJlZ2lzdGVyKCk7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk3OlxcdFxcdG1kaW9fZGV2aWNlX3JlbW92ZShzd2l0Y2hfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmM6NDk4OlxcdFxcdG1kaW9fZGV2aWNlX2ZyZWUoc3dpdGNoX21kaW9kZXYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTQ5OS1cXHR9XFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYz01MDU9c3RhdGljIHZvaWQgX19leGl0IGRzYV9sb29wX2V4aXQodm9pZClcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYy01MDYte1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jOjUwNzpcXHRtZGlvX2RyaXZlcl91bnJlZ2lzdGVyKFxcdTAwMjZkc2FfbG9vcF9kcnYpO1xcbmRyaXZlcnMvbmV0L2RzYS9kc2FfbG9vcC5jLTUwOC1cXHRkc2FfbG9vcF9waHlkZXZzX3VucmVnaXN0ZXIoKTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MDk6XFx0bWRpb19kZXZpY2VfcmVtb3ZlKHN3aXRjaF9tZGlvZGV2KTtcXG5kcml2ZXJzL25ldC9kc2EvZHNhX2xvb3AuYzo1MTA6XFx0bWRpb19kZXZpY2VfZnJlZShzd2l0Y2hfbWRpb2Rldik7XFxuZHJpdmVycy9uZXQvZHNhL2RzYV9sb29wLmMtNTExLX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTQ6MjMuMTUxODYxNDk3WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU5MjA0ODI3NTEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQXNzZXNzbWVudCBvZiB0aGUgYGRzYV9sb29wYCBhbmQgYG14bDg2Mnh4YCBEcml2ZXIgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgaG93IHN5emthbGxlciBjb3VsZCBwb3RlbnRpYWxseSBpbnRlcmFjdCB3aXRoIHRoZSBgZHNhX2xvb3BgIGRyaXZlciBhbmQgdGhlIGBteGw4NjJ4eGAgZHJpdmVyLCBwYXJ0aWN1bGFybHkgY29uY2VybmluZyB0aGVpciBNRElPIGJ1cyB1c2FnZS4gSSBzZWUgdGhhdCBgZHNhX2xvb3BgIGlzIHVzaW5nIHRoZSBgZml4ZWQtMGAgTURJTyBidXMsIGFuZCBJIHVuZGVyc3RhbmQgaXQncyBjcmVhdGluZyBhbiBNRElPIGRldmljZSB0aGVyZS4gQnV0LCBgZHNhX2xvb3BgIGlzIGEgdmVyeSBzcGVjaWFsaXplZCBkcml2ZXIuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGV0aGVyIHN5emthbGxlciBjb3VsZCBzb21laG93IGNyZWF0ZSBhbiBNRElPIGRldmljZSBzcGVjaWZpY2FsbHkgZm9yIHRoZSBgbXhsODYyeHhgIGNoaXAgb24gdGhhdCBzYW1lIGBmaXhlZC0wYCBidXMuXG5cblRoaW5raW5nIGl0IHRocm91Z2gsIHRoZSBhbnN3ZXIgKnNob3VsZCogYmUgeWVzLiBTeXprYWxsZXIgaXMgcXVpdGUgcG93ZXJmdWwgd2l0aCBkZXZpY2UgdHJlZSBvdmVybGF5cy4gSSBjb3VsZCBzcGVjaWZ5IHRoZSBgY29tcGF0aWJsZSA9IFwibWF4bGluZWFyLG14bDg2Mnh4XCJgIHByb3BlcnR5IGFuZCBjcmVhdGUgYW4gTURJTyBkZXZpY2Ugb24gYGZpeGVkLTBgIG9yIGFueSBvdGhlciBNRElPIGJ1cyB0aGF0IHN5emthbGxlciBjYW4gcmVhY2guIFRoYXQncyB0aGUgc3RhbmRhcmQgYXBwcm9hY2guXG5cbkhvd2V2ZXIsIEkgbmVlZCB0byBwYXVzZSBmb3IgYSBzZWNvbmQuIFRoZSBgZml4ZWQtMGAgTURJTyBidXMsIGlmIEkgcmVjYWxsIGNvcnJlY3RseSwgaXMgYSAqZml4ZWQgUEhZKiBidXMuIEFuZCB0aGF0IGltcGxpZXMgaXQgaXNuJ3QgbWVhbnQgdG8gc3RvcmUgYXJiaXRyYXJ5IE1ESU8gcmVnaXN0ZXJzLiBJdCdzIGEgc3BlY2lhbC1wdXJwb3NlIGJ1cyB3aXRoIGEgc3BlY2lmaWMsIHdlbGwtZGVmaW5lZCBwdXJwb3NlLCB1bmxpa2UgYSBzdGFuZGFyZCBNRElPIGJ1cy4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY29uZmlybSBob3cgdGhlIGZpeGVkIFBIWSBkcml2ZXIgaGFuZGxlcyBNRElPIGFjY2Vzc2VzLiBJJ20gZ29pbmcgdG8gcXVpY2tseSBjaGVjayBgZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jYCB0byByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgdW5kZXJseWluZyBtZWNoYW5pY3MgYW5kIHNlZSBob3cgdGhhdCBidXMgaXMgaW1wbGVtZW50ZWQuIEkgbmVlZCB0byBiZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYSBmdW5kYW1lbnRhbCBpbmNvbXBhdGliaWxpdHkgaGVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTE3NDMsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTQ6MjkuMDcyMzQ2NjU4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTA4NjU2NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJmaXhlZF9tZGlvX3JlYWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYz01OT1FWFBPUlRfU1lNQk9MX0dQTChmaXhlZF9waHlfY2hhbmdlX2NhcnJpZXIpO1xcbmRyaXZlcnMvbmV0L3BoeS9maXhlZF9waHkuYy02MC1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6NjE6c3RhdGljIGludCBmaXhlZF9tZGlvX3JlYWQoc3RydWN0IG1paV9idXMgKmJ1cywgaW50IHBoeV9hZGRyLCBpbnQgcmVnX251bSlcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtNjIte1xcbi0tXFxuZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jPTE5NT1zdGF0aWMgaW50IF9faW5pdCBmaXhlZF9tZGlvX2J1c19pbml0KHZvaWQpXFxuLS1cXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA0LVxcdGZtYl9taWlfYnVzLVxcdTAwM2VuYW1lID0gXFxcIkZpeGVkIE1ESU8gQnVzXFxcIjtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmM6MjA1OlxcdGZtYl9taWlfYnVzLVxcdTAwM2VyZWFkID0gXFx1MDAyNmZpeGVkX21kaW9fcmVhZDtcXG5kcml2ZXJzL25ldC9waHkvZml4ZWRfcGh5LmMtMjA2LVxcdGZtYl9taWlfYnVzLVxcdTAwM2V3cml0ZSA9IFxcdTAwMjZmaXhlZF9tZGlvX3dyaXRlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1NDoyOS4xNDM0Mzc5MTVaIiwiU2VxIjozOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTYwNzY4OTIyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgZnVuY3Rpb25zLCB0aGlua2luZyB0aHJvdWdoIGl0IGFzIHlvdSBhc2tlZDpcblxuKipBbmFseXppbmcgYGZpeGVkX21kaW9fcmVhZGAgYW5kIGBmaXhlZF9tZGlvX3dyaXRlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGVzZSBgZml4ZWRfbWRpb2AgZnVuY3Rpb25zLiBNeSBpbml0aWFsIGltcHJlc3Npb24gaXMgdGhlc2UgYXJlIGxpa2VseSBsb3ctbGV2ZWwgcm91dGluZXMgZm9yIGRpcmVjdGx5IGFjY2Vzc2luZyBhbiBNRElPIGludGVyZmFjZSwgcHJvYmFibHkgaGFyZC1jb2RlZCBmb3IgYSBzcGVjaWZpYyBoYXJkd2FyZSBzZXR1cCBvciBhIHNwZWNpZmljIFBIWSBhZGRyZXNzLiBUaGUgXCJmaXhlZFwiIGluIHRoZSBuYW1lIHByb2JhYmx5IHJlZmVycyB0byB0aGUgTURJTyBidXMgYWRkcmVzcywgd2hpY2ggbWF5IGltcGx5IHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGEgc3lzdGVtIHdoZXJlIHRoZXJlJ3Mgbm8gZHluYW1pYyBQSFkgZGlzY292ZXJ5IG9yIE1ESU8gYWRkcmVzcyBzY2FubmluZy4gUmF0aGVyLCB0aGlzIHBhcnQgb2YgdGhlIGNvZGUgYXNzdW1lcyB0aGF0IGEgc3BlY2lmaWMgUEhZIG9yIGdyb3VwIG9mIFBIWXMgaXMgYWx3YXlzIGF0IGEga25vd24gTURJTyBhZGRyZXNzLlxuXG5JJ2QgZXhwZWN0IGBmaXhlZF9tZGlvX3JlYWRgIHRvIHRha2UgYXQgbGVhc3QgdGhlIFBIWSByZWdpc3RlciBhZGRyZXNzIGFzIGlucHV0IGFuZCByZXR1cm4gdGhlIHZhbHVlIHJlYWQgZnJvbSB0aGF0IHJlZ2lzdGVyLiBUaGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyB3b3VsZCBiZSBrZXkgaGVyZS4gSSdkIGJlIGxvb2tpbmcgZm9yOlxuXG4qICAgKipCdXMgQWNjZXNzOioqIEhvdyBpcyB0aGUgTURJTyBidXMgYWN0dWFsbHkgYWNjZXNzZWQ/IElzIGl0IGJpdC1iYW5nZWQsIG9yIGRvZXMgaXQgbGV2ZXJhZ2UgYSBkZWRpY2F0ZWQgTURJTyBjb250cm9sbGVyPyBJZiBiaXQtYmFuZ2VkLCBJJ2QgZXhwZWN0IHRvIHNlZSB0aGUgbG93LWxldmVsIGxvZ2ljIGZvciBhc3NlcnRpbmcgdGhlIE1EQyAoY2xvY2spIGFuZCBNRElPIChkYXRhKSBzaWduYWxzLiBBIGRlZGljYXRlZCBjb250cm9sbGVyIGltcGxpZXMgc29tZSByZWdpc3Rlci1sZXZlbCBwcm9ncmFtbWluZyB0byBpbml0aWF0ZSB0aGUgcmVhZCBhbmQgdGhlbiBwb2xsaW5nIGZvciBjb21wbGV0aW9uLlxuKiAgICoqRXJyb3IgSGFuZGxpbmc6KiogV2hhdCBraW5kIG9mIGVycm9yIGNoZWNraW5nIGlzIGluIHBsYWNlPyBBcmUgdGhlcmUgdGltZW91dHM/IFdoYXQgaGFwcGVucyBpZiB0aGUgTURJTyBhY2Nlc3MgZmFpbHMgKGUuZy4sIG5vIHJlc3BvbnNlIGZyb20gdGhlIFBIWSwgaW5jb3JyZWN0IHBhcml0eSk/IEknZCB3YW50IHRvIHNlZSByb2J1c3QgZXJyb3IgaGFuZGxpbmcgdG8gcHJldmVudCB0aGUgZHJpdmVyIGZyb20gZ2V0dGluZyBzdHVjay5cbiogICAqKlJlZ2lzdGVyIFNlbGVjdGlvbjoqKiBJcyB0aGUgUEhZIGFkZHJlc3Mgb3IgdGhlIHJlZ2lzdGVyIGFkZHJlc3MgcGFydCBvZiB0aGUgZnVuY3Rpb24gc2lnbmF0dXJlLCBvciBhcmUgdGhleSBoYXJkY29kZWQgd2l0aGluIHRoZSBmdW5jdGlvbj8gVGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiB0aGUgZmxleGliaWxpdHkgb2YgdGhlIGZ1bmN0aW9uLlxuKiAgICoqRGF0YSBSZXByZXNlbnRhdGlvbjoqKiBIb3cgaXMgdGhlIHJlYWQgZGF0YSByZXByZXNlbnRlZCAoZS5nLiwgYW4gYHVpbnQxNl90YD8gYHVpbnQzMl90YD8pIFdoYXQgaXMgdGhlIGVuZGlhbm5lc3MsIGFuZCBob3cgaXMgaXQgaGFuZGxlZCBpZiB0aGUgZGF0YSBpcyBpbnRlcnByZXRlZCBhcyBhIHdvcmQ/XG4qICAgKipDbGFyaXR5IG9mIFJlYWQ6KiogQXJlIHRoZXJlIGFueSBiaXQgbWFza3MgdXNlZCwgZXRjP1xuXG5TaW1pbGFybHksIGZvciBgZml4ZWRfbWRpb193cml0ZWAsIEknbSBleHBlY3Rpbmcgc2ltaWxhciBjb25zaWRlcmF0aW9ucyBidXQgYSBkYXRhIHZhbHVlIGFzIGFuIGFkZGl0aW9uYWwgaW5wdXQsIGFuZCB0aGUgb3BlcmF0aW9uIGlzIG9mIGNvdXJzZSwgYSB3cml0ZSBpbnN0ZWFkIG9mIGEgcmVhZC4gSSdsbCBiZSBsb29raW5nIGZvcjpcblxuKiAgICoqV3JpdGUgU2VxdWVuY2U6KiogVGhlIHdyaXRlIHNlcXVlbmNlIGltcGxlbWVudGF0aW9uIChpZiBiaXQtYmFuZ2VkKSB3b3VsZCBiZSB0aGUgaW52ZXJzZSBvZiB0aGUgcmVhZCBzZXF1ZW5jZSBpbiB0ZXJtcyBvZiBzaWduYWwgdHJhbnNpdGlvbnMuXG4qICAgKipFcnJvciBSZXR1cm46KiogV2hhdCBhcmUgdGhlIGVycm9yIHN0YXRlcywgYW5kIHdoYXQgYXJlIHRoZSBmYWlsdXJlIGNvbmRpdGlvbnM/XG5cbkknZCB3YW50IHRvIHF1aWNrbHkgYXNzZXNzIGlmIHRoZXNlIGZ1bmN0aW9ucyBhcmUgc2FmZSwgd2hldGhlciB0aGV5IGFyZSB1c2VkIG9ubHkgdW5kZXIgbXV0ZXgsIHdoYXQga2luZHMgb2YgZXJyb3JzIHRoZXkgZ2VuZXJhdGUsIGFuZCBob3cuIFVuZGVyc3RhbmRpbmcgdGhlIGludGVycGxheSBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgd2lsbCBiZSBjcml0aWNhbCBpbiBhc3Nlc3NpbmcgdGhlIGRyaXZlci5cblxuXG4iLCJJbnB1dFRva2VucyI6NTI1NjEsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1NDozNC43NTExMjk2MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQxNjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiZHJpdmVycy9uZXQvcGh5L2ZpeGVkX3BoeS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDYxLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDYxOlxcdHN0YXRpYyBpbnQgZml4ZWRfbWRpb19yZWFkKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0pXFxuICA2MjpcXHR7XFxuICA2MzpcXHRcXHRzdHJ1Y3QgZml4ZWRfcGh5ICpmcDtcXG4gIDY0OlxcdFxcbiAgNjU6XFx0XFx0ZnAgPSBmaXhlZF9waHlfZmluZChwaHlfYWRkcik7XFxuICA2NjpcXHRcXHRpZiAoIWZwKVxcbiAgNjc6XFx0XFx0XFx0cmV0dXJuIDB4ZmZmZjtcXG4gIDY4OlxcdFxcbiAgNjk6XFx0XFx0aWYgKGZwLVxcdTAwM2VsaW5rX3VwZGF0ZSlcXG4gIDcwOlxcdFxcdFxcdGZwLVxcdTAwM2VsaW5rX3VwZGF0ZShmcC1cXHUwMDNlcGh5ZGV2LVxcdTAwM2VhdHRhY2hlZF9kZXYsIFxcdTAwMjZmcC1cXHUwMDNlc3RhdHVzKTtcXG4gIDcxOlxcdFxcbiAgNzI6XFx0XFx0cmV0dXJuIHN3cGh5X3JlYWRfcmVnKHJlZ19udW0sIFxcdTAwMjZmcC1cXHUwMDNlc3RhdHVzKTtcXG4gIDczOlxcdH1cXG4gIDc0OlxcdFxcbiAgNzU6XFx0c3RhdGljIGludCBmaXhlZF9tZGlvX3dyaXRlKHN0cnVjdCBtaWlfYnVzICpidXMsIGludCBwaHlfYWRkciwgaW50IHJlZ19udW0sXFxuICA3NjpcXHRcXHRcXHRcXHQgICAgdTE2IHZhbClcXG4gIDc3OlxcdHtcXG4gIDc4OlxcdFxcdHJldHVybiAwO1xcbiAgNzk6XFx0fVxcbiAgODA6XFx0XFxuICA4MTpcXHQvKlxcbiAgODI6XFx0ICogSWYgc29tZXRoaW5nIHdlaXJkIGlzIHJlcXVpcmVkIHRvIGJlIGRvbmUgd2l0aCBsaW5rL3NwZWVkLFxcbiAgODM6XFx0ICogbmV0d29yayBkcml2ZXIgaXMgYWJsZSB0byBhc3NpZ24gYSBmdW5jdGlvbiB0byBpbXBsZW1lbnQgdGhpcy5cXG4gIDg0OlxcdCAqIE1heSBiZSB1c2VmdWwgZm9yIFBIWSdzIHRoYXQgbmVlZCB0byBiZSBzb2Z0d2FyZS1kcml2ZW4uXFxuICA4NTpcXHQgKi9cXG4gIDg2OlxcdGludCBmaXhlZF9waHlfc2V0X2xpbmtfdXBkYXRlKHN0cnVjdCBwaHlfZGV2aWNlICpwaHlkZXYsXFxuICA4NzpcXHRcXHRcXHRcXHQgICAgICBpbnQgKCpsaW5rX3VwZGF0ZSkoc3RydWN0IG5ldF9kZXZpY2UgKixcXG4gIDg4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBzdHJ1Y3QgZml4ZWRfcGh5X3N0YXR1cyAqKSlcXG4gIDg5OlxcdHtcXG4gIDkwOlxcdFxcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xcbiAgOTE6XFx0XFxuICA5MjpcXHRcXHRpZiAoIXBoeWRldiB8fCAhcGh5ZGV2LVxcdTAwM2VtZGlvLmJ1cylcXG4gIDkzOlxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbiAgOTQ6XFx0XFxuICA5NTpcXHRcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeWRldi1cXHUwMDNlbWRpby5hZGRyKTtcXG4gIDk2OlxcdFxcdGlmICghZnApXFxuICA5NzpcXHRcXHRcXHRyZXR1cm4gLUVOT0VOVDtcXG4gIDk4OlxcdFxcbiAgOTk6XFx0XFx0ZnAtXFx1MDAzZWxpbmtfdXBkYXRlID0gbGlua191cGRhdGU7XFxuIDEwMDpcXHRcXHRmcC1cXHUwMDNlcGh5ZGV2ID0gcGh5ZGV2O1xcbiAxMDE6XFx0XFxuIDEwMjpcXHRcXHRyZXR1cm4gMDtcXG4gMTAzOlxcdH1cXG4gMTA0OlxcdEVYUE9SVF9TWU1CT0xfR1BMKGZpeGVkX3BoeV9zZXRfbGlua191cGRhdGUpO1xcbiAxMDU6XFx0XFxuIDEwNjpcXHRzdGF0aWMgdm9pZCBmaXhlZF9waHlfZGVsKGludCBwaHlfYWRkcilcXG4gMTA3OlxcdHtcXG4gMTA4OlxcdFxcdHN0cnVjdCBmaXhlZF9waHkgKmZwO1xcbiAxMDk6XFx0XFxuIDExMDpcXHRcXHRmcCA9IGZpeGVkX3BoeV9maW5kKHBoeV9hZGRyKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTQ6MzQuNzUxMjQ1NDE5WiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMzYwNzY0NzMzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5c2lzIG9mIHRoZSBNeEw4NjJ4eCBEcml2ZXIgZm9yIEZ1enppbmcgU3VpdGFiaWxpdHkqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggZHJpdmVyLiBUaGUgYGZpeGVkX21kaW9fd3JpdGVgIGZ1bmN0aW9uIGp1c3QgcmV0dXJucyBub3RoaW5nLCBhbmQgYGZpeGVkX21kaW9fcmVhZGAgZWl0aGVyIHJldHVybnMgYDB4ZmZmZmAgb3IgYSB2YWx1ZSBmcm9tIGBzd3BoeV9yZWFkX3JlZ2AuIFRoaXMgZG9lc24ndCBzdG9yZSBhbnkgdmFsdWVzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBpZiBzeXprYWxsZXIgY3JlYXRlcyBhbiBNRElPIGRldmljZSBvbiBgZml4ZWQtMGAsIHRoZSBgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0YCBmdW5jdGlvbiB3aWxsIGJlIHRyaWdnZXJlZC4gSXQgYXR0ZW1wdHMgdG8gd3JpdGUgYW5kIHJlYWQgc3BlY2lmaWMgcHJvYmUgdmFsdWVzIChgMHg1YTVhYCBhbmQgYDB4YTVhNWApLiBCdXQgc2luY2UgYGZpeGVkX21kaW9fcmVhZGAgY2FuIG9ubHkgcmV0dXJuIGAweGZmZmZgIG9yIGEgcmVhbCByZWdpc3RlciB2YWx1ZSAod2hpY2ggaXNuJ3QgdGhlIHByb2JlIHZhbHVlKSwgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgd2lsbCBpbmV2aXRhYmx5IHJldHVybiBgLUVOT0RFVmAuIFRoZSBkcml2ZXIgaXMgZ29pbmcgdG8gZmFpbCB0byBwcm9iZS5cblxuSSBuZWVkIHRvIHNlZSBpZiBzeXprYWxsZXIgY2FuIHVzZSBhbnkgb3RoZXIgTURJTyBidXMgaW1wbGVtZW50YXRpb25zLiBJIGNoZWNrZWQgZm9yIGFuIGBtZGlvLW1vY2tgIGRldmljZSwgYnV0IHRoZXJlIGlzbid0IG9uZS4gVGhlIGBtZGlvLWJpdGJhbmdgIHJlcXVpcmVzIEdQSU9zLCBhbmQgdGhlIGBtZGlvLWkyY2AgYW5kIGBtZGlvLXJlZ21hcGAgb3B0aW9ucyBuZWVkIEkyQyBhbmQgcmVnbWFwIHdoaWNoIG1ha2VzIHRoZW0gdW5mZWFzaWJsZS4gSWYgdGhlcmUncyBubyB3YXkgdG8gZ2V0IHBhc3QgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgd2l0aG91dCBhY3R1YWwgaGFyZHdhcmUsIHRoYXQgbWVhbnMgdGhlIGRldmxpbmsgZmxhc2ggdXBkYXRlIGNvZGUgaXMgZ29pbmcgdG8gYmUgVU5SRUFDSEFCTEUgaW4gYSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC5cblxuSG9sZCBvbiwgbGV0J3MgbG9vayBhdCBgbXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0YCBhZ2Fpbi4gSXQgcmVhZHMgZnJvbSB0d28gc3BlY2lmaWMgYWRkcmVzc2VzOiBgTVhMODYyWFhfU0JfUERJX0FERFJgIGFuZCBgTVhMODYyWFhfU0JfUERJX0RBVEFgLiBJZiB0aG9zZSByZWFkcyBkb24ndCByZXR1cm4gdGhlIGV4cGVjdGVkIHByb2JlIHZhbHVlcyAoYDB4NWE1YWAgYW5kIGAweGE1YTVgKSwgaXQgcmV0dXJucyBgLUVOT0RFVmAuXG5cbkNvdWxkIEkgdXNlIHNvbWV0aGluZyBsaWtlIGVCUEYgb3Iga3Byb2JlcyB0byBpbnRlcmNlcHQgTURJTyByZWFkcy93cml0ZXM/IE5vLCBzeXprYWxsZXIgZG9lc24ndCBoYXZlIHRoYXQgY2FwYWJpbGl0eSBjdXJyZW50bHkuIFdoYXQgYWJvdXQgdXNpbmcgYSBkdW1teSBJMkMgZGV2aWNlIHRoYXQgcHJldGVuZHMgdG8gYmUgYW4gTURJTyBidXM/IE5vcGUuIFN5emthbGxlciBkb2Vzbid0IGhhdmUgYSBnZW5lcmljIEkyQyBkZXZpY2UgZW11bGF0b3IgdGhhdCBjYW4gYmUgcHJvZ3JhbW1lZCB0byByZXR1cm4gc3BlY2lmaWMgdmFsdWVzIGJhc2VkIG9uIHJlZ2lzdGVyIGFkZHJlc3Nlcy5cblxuQnV0IHdhaXQsIHN5emthbGxlciAqZG9lcyogaGF2ZSBlbXVsYXRvcnMgZm9yIFVTQiAoYHZoY2lgKSwgV2lGaSAoYG1hYzgwMjExX2h3c2ltYCksIG5ldGRldnMgKGBuZXRkZXZzaW1gKSwgRFJNIChgdmttc2ApLCBhbmQgQUxTQSAoYHNuZC1kdW1teWApLiBEb2VzIGl0IGhhdmUgYW55dGhpbmcgZm9yIE1ESU8gb3IgSTJDPyBUaGVyZSdzIG5vIHBzZXVkby1zeXNjYWxsIGxpa2UgYHN5el9pMmNfc2V0dXBgLiBJIGNoZWNrZWQgZm9yIHNpbWlsYXIgc3lzY2FsbHMgdG8gdGhlIHVzYiBhbmQgcGNpIHNldHVwcywgYnV0IEkgZG9uJ3Qgc2VlIGFueSBmb3IgTURJTy5cblxuU28sIHdpdGhvdXQgaGFyZHdhcmUsIGBteGw4NjJ4eF9wcm9iZWAgZmFpbHMgYXQgYG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdGAgKG9yIGVhcmxpZXIgaWYgdGhlIE1ESU8gYnVzIGlzbid0IGV2ZW4gcHJlc2VudCkuIE9rYXksIGJ1dCB3aGF0IGFyZSB0aGUgY2hhbmNlcyB0aGF0IGBteGw4NjJ4eF9zbWRpb19yZWFkYCB3aWxsIHJldHVybiBgMHg1YTVhYCBieSBwdXJlIGNoYW5jZT8gVGhlIHByb2JlIHZhbHVlcyBhcmUgYDB4NWE1YWAgKEFERFIpIGFuZCBgMHhhNWE1YCAoREFUQSkuIEl0J3MgZXh0cmVtZWx5IHVubGlrZWx5IGEgcmFuZG9tIE1ESU8gYnVzIHdpbGwgcmV0dXJuIHRob3NlIGV4YWN0IHZhbHVlcy4gV2hhdCBpZiB0aGUgcmVhZCBpcyBmcm9tIGEgbWVtb3J5LW1hcHBlZCBJTyByZWdpb24gc3l6a2FsbGVyIGNvdWxkIG1hcCBhbmQgd3JpdGUgdG8/IGBteGw4NjJ4eF9zbWRpb19yZWFkYCB1c2VzIGBfX21kaW9idXNfcmVhZGAsIGlmIHRoZSBidXMgaXMgbWVtb3J5LW1hcHBlZCwgd291bGQgc3l6a2FsbGVyIG1hcCB0aGUgbWVtb3J5IGFuZCB3cml0ZSB0aGUgdmFsdWVzPyBVc3VhbGx5IG5vdCwgc3l6a2FsbGVyIGRvZXNuJ3QgZG8gdGhhdCBmb3IgcGxhdGZvcm0gZGV2aWNlcyB1bmxlc3MgdGhlcmUgaXMgYSBzcGVjaWZpYyBzeXprYWxsZXIgZGVzY3JpcHRpb24gZm9yIGl0LiBJdCB3b3VsZCBiZSB2ZXJ5IHNwZWNpZmljIGFuZCBoYXJkIHRvIHRyaWdnZXIuXG5cbkFoLCB0aGUgaW5zdHJ1Y3Rpb25zISBcIlJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6IC4uLiAtIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIiBUaGlzIGlzIGEgKnZlbmRvci1zcGVjaWZpYyBEU0Egc3dpdGNoIGRyaXZlciogZm9yIHRoZSBNYXhMaW5lYXIgTXhMODYyeHgsIGFuZCBpdCByZXF1aXJlcyB0aGUgcGh5c2ljYWwgY2hpcCBjb25uZWN0ZWQgdmlhIE1ESU8uIEl0J3Mgbm90IGVtdWxhdGVkIGluIFFFTVUuIFRoYXQgaXMgZXhhY3RseSB3aGF0IHRoZSBydWxlIGRlc2NyaWJlcy5cblxuV2FpdCwgaXMgYW4gTURJTyBEU0Egc3dpdGNoIGRyaXZlciBpbmNsdWRlZCBpbiB0aGlzIGNhdGVnb3J5PyBZZXMuIEl0J3MgYSBcInZlbmRvci1zcGVjaWZpYyAuLi4gZHJpdmVyIC4uLiB0aGF0IHJlcXVpcmVzIHBoeXNpY2FsIC4uLiBoYXJkd2FyZSAuLi4gbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVxuXG4iLCJJbnB1dFRva2VucyI6NTM5MDYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxODI1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTQ6NTUuMTEyMDEzMDYzWiIsIlNlcSI6NDIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg2NzYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm5ldC9kc2EvZGV2bGluay5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXJcXG4gICAyOlxcdC8qXFxuICAgMzpcXHQgKiBEU0EgZGV2bGluayBoYW5kbGluZ1xcbiAgIDQ6XFx0ICovXFxuICAgNTpcXHRcXG4gICA2OlxcdCNpbmNsdWRlIFxcdTAwM2NuZXQvZHNhLmhcXHUwMDNlXFxuICAgNzpcXHQjaW5jbHVkZSBcXHUwMDNjbmV0L2RldmxpbmsuaFxcdTAwM2VcXG4gICA4OlxcdFxcbiAgIDk6XFx0I2luY2x1ZGUgXFxcImRldmxpbmsuaFxcXCJcXG4gIDEwOlxcdFxcbiAgMTE6XFx0c3RhdGljIGludCBkc2FfZGV2bGlua19pbmZvX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsXFxuICAxMjpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgZGV2bGlua19pbmZvX3JlcSAqcmVxLFxcbiAgMTM6XFx0XFx0XFx0XFx0XFx0c3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAgMTQ6XFx0e1xcbiAgMTU6XFx0XFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xcbiAgMTY6XFx0XFxuICAxNzpcXHRcXHRpZiAoZHMtXFx1MDAzZW9wcy1cXHUwMDNlZGV2bGlua19pbmZvX2dldClcXG4gIDE4OlxcdFxcdFxcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VkZXZsaW5rX2luZm9fZ2V0KGRzLCByZXEsIGV4dGFjayk7XFxuICAxOTpcXHRcXG4gIDIwOlxcdFxcdHJldHVybiAtRU9QTk9UU1VQUDtcXG4gIDIxOlxcdH1cXG4gIDIyOlxcdFxcbiAgMjM6XFx0c3RhdGljIGludCBkc2FfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRldmxpbmsgKmRsLFxcbiAgMjQ6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcyxcXG4gIDI1OlxcdFxcdFxcdFxcdFxcdCAgICBzdHJ1Y3QgbmV0bGlua19leHRfYWNrICpleHRhY2spXFxuICAyNjpcXHR7XFxuICAyNzpcXHRcXHRzdHJ1Y3QgZHNhX3N3aXRjaCAqZHMgPSBkc2FfZGV2bGlua190b19kcyhkbCk7XFxuICAyODpcXHRcXG4gIDI5OlxcdFxcdHJldHVybiBkcy1cXHUwMDNlb3BzLVxcdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZShkcywgcGFyYW1zLCBleHRhY2spO1xcbiAgMzA6XFx0fVxcbiAgMzE6XFx0XFxuICAzMjpcXHRzdGF0aWMgaW50IGRzYV9kZXZsaW5rX3NiX3Bvb2xfZ2V0KHN0cnVjdCBkZXZsaW5rICpkbCxcXG4gIDMzOlxcdFxcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBzYl9pbmRleCwgdTE2IHBvb2xfaW5kZXgsXFxuICAzNDpcXHRcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgZGV2bGlua19zYl9wb29sX2luZm8gKnBvb2xfaW5mbylcXG4gIDM1OlxcdHtcXG4gIDM2OlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9kZXZsaW5rX3RvX2RzKGRsKTtcXG4gIDM3OlxcdFxcbiAgMzg6XFx0XFx0aWYgKCFkcy1cXHUwMDNlb3BzLVxcdTAwM2VkZXZsaW5rX3NiX3Bvb2xfZ2V0KVxcbiAgMzk6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAgNDA6XFx0XFxuICA0MTpcXHRcXHRyZXR1cm4gZHMtXFx1MDAzZW9wcy1cXHUwMDNlZGV2bGlua19zYl9wb29sX2dldChkcywgc2JfaW5kZXgsIHBvb2xfaW5kZXgsXFxuICA0MjpcXHRcXHRcXHRcXHRcXHRcXHQgICAgcG9vbF9pbmZvKTtcXG4gIDQzOlxcdH1cXG4gIDQ0OlxcdFxcbiAgNDU6XFx0c3RhdGljIGludCBkc2FfZGV2bGlua19zYl9wb29sX3NldChzdHJ1Y3QgZGV2bGluayAqZGwsIHVuc2lnbmVkIGludCBzYl9pbmRleCxcXG4gIDQ2OlxcdFxcdFxcdFxcdFxcdCAgIHUxNiBwb29sX2luZGV4LCB1MzIgc2l6ZSxcXG4gIDQ3OlxcdFxcdFxcdFxcdFxcdCAgIGVudW0gZGV2bGlua19zYl90aHJlc2hvbGRfdHlwZSB0aHJlc2hvbGRfdHlwZSxcXG4gIDQ4OlxcdFxcdFxcdFxcdFxcdCAgIHN0cnVjdCBuZXRsaW5rX2V4dF9hY2sgKmV4dGFjaylcXG4gIDQ5OlxcdHtcXG4gIDUwOlxcdFxcdHN0cnVjdCBkc2Ffc3dpdGNoICpkcyA9IGRzYV9kZXZsaW5rX3RvX2RzKGRsKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTQ6NTUuMTEyMTAxNDMzWiIsIlNlcSI6NDMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzNTU3NTgyMDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB1bmRlcnN0YW5kaW5nIG9mIHRoZSBwYXRjaCwgZGlzdGlsbGVkIGludG8gbXkgaW50ZXJuYWwgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBEU0EgRGV2bGluayBJbnRlZ3JhdGlvbioqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgYWltZWQgc3F1YXJlbHkgYXQgZW5oYW5jaW5nIHRoZSBEZXZpY2UgTGluayAoRGV2bGluaykgY2FwYWJpbGl0aWVzIHdpdGhpbiB0aGUgRGlzdHJpYnV0ZWQgU3dpdGNoIEFyY2hpdGVjdHVyZSAoRFNBKSBzdWJzeXN0ZW0uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgcmV2b2x2ZXMgYXJvdW5kIGludHJvZHVjaW5nIGEgbmV3IGZ1bmN0aW9uLCBgZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlYCwgd2hpY2ggaXMgYSBwaXZvdGFsIGFkZGl0aW9uIHRvIGBuZXQvZHNhL2RldmxpbmsuY2AuIEkgaW1tZWRpYXRlbHkgcmVjb2duaXplIHRoaXMgYXMgc2lnbmlmaWNhbnQsIGFzIGZsYXNoIHVwZGF0ZXMgYXJlIG9mdGVuIGEgY3JpdGljYWwgYXNwZWN0IG9mIGRldmljZSBtYW5hZ2VtZW50IGFuZCBmaXJtd2FyZSBoYW5kbGluZywgZXNwZWNpYWxseSBpbiBuZXR3b3JraW5nIGhhcmR3YXJlIHdoZXJlIHVwZGF0ZXMgYXJlIGVzc2VudGlhbCBmb3IgcGVyZm9ybWFuY2UgYW5kIGJ1ZyBmaXhlcy5cblxuSSBzZWUgdGhhdCB0aGlzIGFsc28gbWVhbnMgY2hhbmdlcyB0byB0aGUgZXhpc3RpbmcgYGRzYV9kZXZsaW5rX29wc2Agc3RydWN0dXJlLiBUaGlzIGxpa2VseSBpbnZvbHZlcyBhZGRpbmcgZnVuY3Rpb24gcG9pbnRlcnMgcmVsYXRlZCB0byB0aGUgbmV3IGZsYXNoIHVwZGF0ZSBmdW5jdGlvbmFsaXR5LCBpbmRpY2F0aW5nIHRoZSBpbnRlbnRpb24gdG8gc2VhbWxlc3NseSBpbnRlZ3JhdGUgdGhpcyBjYXBhYmlsaXR5IHdpdGhpbiB0aGUgRGV2bGluayBmcmFtZXdvcmsuIEZ1cnRoZXJtb3JlLCB0aGUgaW50cm9kdWN0aW9uIG9mIGEgbmV3IHN0cnVjdHVyZSwgYGRzYV9kZXZsaW5rX2ZsYXNoX29wc2AsIGlzIGEgY2xlYXIgaW5kaWNhdGlvbiBvZiBhIG1vcmUgZm9ybWFsaXplZCBhbmQgb3JnYW5pemVkIGFwcHJvYWNoIHRvIGZsYXNoLXJlbGF0ZWQgb3BlcmF0aW9ucy4gSXQgc3VnZ2VzdHMgYSBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zLCBwcm92aWRpbmcgYSBkZWRpY2F0ZWQgaW50ZXJmYWNlIGZvciBoYW5kbGluZyB0aGVzZSBzcGVjaWZpYyB0YXNrcyB3aXRoaW4gdGhlIGJyb2FkZXIgRGV2bGluayBjb250ZXh0LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcywgdGhpcyBpcyBhIHNlbnNpYmxlIGFyY2hpdGVjdHVyYWwgY2hvaWNlLCBhbmQgc2hvdWxkIHNpbXBsaWZ5IGZ1dHVyZSBtb2RpZmljYXRpb25zIGFuZCBlbmFibGUgZWFzaWVyIGludGVncmF0aW9uIHdpdGggbmV3IGhhcmR3YXJlLiBJIHdpbGwgYWxzbyBiZSBsb29raW5nIGNsb3NlbHkgYXQgdGhlIHNwZWNpZmljIGZ1bmN0aW9ucyBkZWZpbmVkIHdpdGhpbiB0aGUgbmV3IHN0cnVjdHVyZSB0byB1bmRlcnN0YW5kIHRoZSBzcGVjaWZpY3Mgb2YgaG93IGZsYXNoIHVwZGF0ZSBvcGVyYXRpb25zIHdpbGwgYmUgY2FycmllZCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU3NTQwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1NDo1OS40Njc4NjIwNTJaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODcyNzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibmV0L2RzYS9kZXZsaW5rLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMTc2LFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTc2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdHBfbWF4KTtcXG4gMTc3OlxcdH1cXG4gMTc4OlxcdFxcbiAxNzk6XFx0LyogVGhlIGRldmxpbmsgY29yZSByZWplY3RzIGZsYXNoIHJlcXVlc3RzIHVwIGZyb250IHdoZW4gdGhlIGZsYXNoX3VwZGF0ZVxcbiAxODA6XFx0ICogb3AgaXMgYWJzZW50LCBiZWZvcmUgZmV0Y2hpbmcgdGhlIGZpcm13YXJlIGZpbGUgZnJvbSB1c2Vyc3BhY2UuIE9ubHlcXG4gMTgxOlxcdCAqIGluc3RhbGwgdGhlIG9wIGZvciBzd2l0Y2hlcyB3aG9zZSBkcml2ZXIgaW1wbGVtZW50cyBpdCwgc28gdGhhdFxcbiAxODI6XFx0ICogdW5zdXBwb3J0ZWQgcmVxdWVzdHMga2VlcCBmYWlsaW5nIGVhcmx5LlxcbiAxODM6XFx0ICovXFxuIDE4NDpcXHQjZGVmaW5lIERTQV9ERVZMSU5LX09QU1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4gMTg1OlxcdFxcdC5pbmZvX2dldFxcdFxcdFxcdD0gZHNhX2RldmxpbmtfaW5mb19nZXQsXFx0XFx0XFxcXFxcbiAxODY6XFx0XFx0LnNiX3Bvb2xfZ2V0XFx0XFx0XFx0PSBkc2FfZGV2bGlua19zYl9wb29sX2dldCxcXHRcXFxcXFxuIDE4NzpcXHRcXHQuc2JfcG9vbF9zZXRcXHRcXHRcXHQ9IGRzYV9kZXZsaW5rX3NiX3Bvb2xfc2V0LFxcdFxcXFxcXG4gMTg4OlxcdFxcdC5zYl9wb3J0X3Bvb2xfZ2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfZ2V0LFxcdFxcXFxcXG4gMTg5OlxcdFxcdC5zYl9wb3J0X3Bvb2xfc2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl9wb3J0X3Bvb2xfc2V0LFxcdFxcXFxcXG4gMTkwOlxcdFxcdC5zYl90Y19wb29sX2JpbmRfZ2V0XFx0XFx0PSBkc2FfZGV2bGlua19zYl90Y19wb29sX2JpbmRfZ2V0LCBcXFxcXFxuIDE5MTpcXHRcXHQuc2JfdGNfcG9vbF9iaW5kX3NldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2JfdGNfcG9vbF9iaW5kX3NldCwgXFxcXFxcbiAxOTI6XFx0XFx0LnNiX29jY19zbmFwc2hvdFxcdFxcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3NuYXBzaG90LFxcdFxcXFxcXG4gMTkzOlxcdFxcdC5zYl9vY2NfbWF4X2NsZWFyXFx0XFx0PSBkc2FfZGV2bGlua19zYl9vY2NfbWF4X2NsZWFyLFxcdFxcXFxcXG4gMTk0OlxcdFxcdC5zYl9vY2NfcG9ydF9wb29sX2dldFxcdFxcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3BvcnRfcG9vbF9nZXQsIFxcXFxcXG4gMTk1OlxcdFxcdC5zYl9vY2NfdGNfcG9ydF9iaW5kX2dldFxcdD0gZHNhX2Rldmxpbmtfc2Jfb2NjX3RjX3BvcnRfYmluZF9nZXQsXFxuIDE5NjpcXHRcXG4gMTk3OlxcdHN0YXRpYyBjb25zdCBzdHJ1Y3QgZGV2bGlua19vcHMgZHNhX2Rldmxpbmtfb3BzID0ge1xcbiAxOTg6XFx0XFx0RFNBX0RFVkxJTktfT1BTXFxuIDE5OTpcXHR9O1xcbiAyMDA6XFx0XFxuIDIwMTpcXHRzdGF0aWMgY29uc3Qgc3RydWN0IGRldmxpbmtfb3BzIGRzYV9kZXZsaW5rX2ZsYXNoX29wcyA9IHtcXG4gMjAyOlxcdFxcdERTQV9ERVZMSU5LX09QU1xcbiAyMDM6XFx0XFx0LmZsYXNoX3VwZGF0ZVxcdFxcdFxcdD0gZHNhX2RldmxpbmtfZmxhc2hfdXBkYXRlLFxcbiAyMDQ6XFx0fTtcXG4gMjA1OlxcdFxcbiAyMDY6XFx0aW50IGRzYV9kZXZsaW5rX3BhcmFtX2dldChzdHJ1Y3QgZGV2bGluayAqZGwsIHUzMiBpZCxcXG4gMjA3OlxcdFxcdFxcdFxcdCAgc3RydWN0IGRldmxpbmtfcGFyYW1fZ3NldF9jdHggKmN0eCxcXG4gMjA4OlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAyMDk6XFx0e1xcbiAyMTA6XFx0XFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xcbiAyMTE6XFx0XFxuIDIxMjpcXHRcXHRpZiAoIWRzLVxcdTAwM2VvcHMtXFx1MDAzZWRldmxpbmtfcGFyYW1fZ2V0KVxcbiAyMTM6XFx0XFx0XFx0cmV0dXJuIC1FT1BOT1RTVVBQO1xcbiAyMTQ6XFx0XFxuIDIxNTpcXHRcXHRyZXR1cm4gZHMtXFx1MDAzZW9wcy1cXHUwMDNlZGV2bGlua19wYXJhbV9nZXQoZHMsIGlkLCBjdHgpO1xcbiAyMTY6XFx0fVxcbiAyMTc6XFx0RVhQT1JUX1NZTUJPTF9HUEwoZHNhX2RldmxpbmtfcGFyYW1fZ2V0KTtcXG4gMjE4OlxcdFxcbiAyMTk6XFx0aW50IGRzYV9kZXZsaW5rX3BhcmFtX3NldChzdHJ1Y3QgZGV2bGluayAqZGwsIHUzMiBpZCxcXG4gMjIwOlxcdFxcdFxcdFxcdCAgc3RydWN0IGRldmxpbmtfcGFyYW1fZ3NldF9jdHggKmN0eCxcXG4gMjIxOlxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbiAyMjI6XFx0e1xcbiAyMjM6XFx0XFx0c3RydWN0IGRzYV9zd2l0Y2ggKmRzID0gZHNhX2RldmxpbmtfdG9fZHMoZGwpO1xcbiAyMjQ6XFx0XFxuIDIyNTpcXHRcXHRpZiAoIWRzLVxcdTAwM2VvcHMtXFx1MDAzZWRldmxpbmtfcGFyYW1fc2V0KVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yNlQxMTo1NDo1OS40Njc5NTA4NTJaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3MDkyMjE5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFJlYWNoYWJpbGl0eSBvZiBgZGV2bGlua19mbGFzaF91cGRhdGVgIGluIERTQSoqXG5cbk9rYXksIHNvIHRoZSBjaGFuZ2VzIGluIGBuZXQvZHNhL2RldmxpbmsuY2AgYXJlIGVzc2VudGlhbGx5IHNldHVwIHdvcmssIG1ha2luZyBpdCBwb3NzaWJsZSBmb3IgRFNBIGRyaXZlcnMgdG8gaW1wbGVtZW50IGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAuIEl0J3MgZGVzaWduZWQgdG8gYmUgZ2VuZXJpYywgYnV0IHJpZ2h0IG5vdywgaXQncyBvbmx5ICphY3R1YWxseSogdXNlZCBieSB0aGUgYG14bDg2Mnh4YCBkcml2ZXIsIHdpdGggdGhlIHBvc3NpYmlsaXR5IG9mIG90aGVyIGRyaXZlcnMgdXNpbmcgaXQgZG93biB0aGUgbGluZS4gVGhlIGtleSBxdWVzdGlvbiBpczogSXMgdGhpcyBnZW5lcmljIGNvZGUgdHJ1bHkgcmVhY2hhYmxlP1xuXG5MZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb2RlICpiZWNvbWVzKiByZWFjaGFibGUgaWYgYW55IERTQSBkcml2ZXIgYWN0dWFsbHkgKmltcGxlbWVudHMqIGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAuIEhvd2V2ZXIsIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgLCB3aGljaCBpcyB0aGUgZW50cnkgcG9pbnQgZm9yIHRoaXMgZnVuY3Rpb25hbGl0eSwgaXMgb25seSBjYWxsZWQgaWYgdGhlIHJlbGV2YW50IGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgb3BlcmF0aW9uIGlzIHNldCBpbiB0aGUgRFNBIGRyaXZlcidzIG9wZXJhdGlvbnMgc3RydWN0dXJlIChgZHMtXHUwMDNlb3BzLVx1MDAzZWRldmxpbmtfZmxhc2hfdXBkYXRlYCkuIEF0IHByZXNlbnQsIG9ubHkgYG14bDg2Mnh4YCBzZXRzIHRoaXMuXG5cbk5vdywgaGVyZSdzIHRoZSBjYXRjaDogYG14bDg2Mnh4YCBjYW4ndCBiZSBwcm9iZWQgdW5sZXNzIHdlJ3JlIGRlYWxpbmcgd2l0aCAqcmVhbCogaGFyZHdhcmUuIFRoaXMgbWVhbnMsIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGBkc2FfZGV2bGlua19mbGFzaF91cGRhdGVgIGlzIGVmZmVjdGl2ZWx5IHVucmVhY2hhYmxlLlxuXG5CdXQgd2FpdCBhIG1pbnV0ZS4uLiB3aGF0IGlmIGFub3RoZXIgRFNBIGRyaXZlciwgbGlrZSBgZHNhX2xvb3BgIG9yIGBiNTNgIG9yIGFub3RoZXIsIGRlY2lkZXMgdG8gaW1wbGVtZW50IGBkZXZsaW5rX2ZsYXNoX3VwZGF0ZWAgYXQgc29tZSBwb2ludD8gV2UgY2FuJ3QgaW1tZWRpYXRlbHkgZGlzbWlzcyB0aGUgY29kZSBhcyBlbnRpcmVseSB1bnVzZWQuIEkgbmVlZCB0byB2ZXJpZnkgd2hldGhlciBhbnkgb3RoZXIgZHJpdmVycyBjdXJyZW50bHkgKmRvKiBpbXBsZW1lbnQgYGRldmxpbmtfZmxhc2hfdXBkYXRlYC4gR290dGEgY2hlY2sgdGhhdCBvdXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjU4OTA4LCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjZUMTE6NTU6MDQuODM4ODc3MzQzWiIsIlNlcSI6NDYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2NzY3MzA4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkZXZsaW5rX2ZsYXNoX3VwZGF0ZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJkcml2ZXJzL25ldC9kc2EvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jPTIwNz1zdGF0aWMgdm9pZCBteGw4NjJ4eF9mbGFzaF9ub3RpZnkoc3RydWN0IGRldmxpbmsgKmRsLCBjb25zdCBjaGFyICpzdGF0dXMsXFxuLS1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYy0yMDkte1xcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jOjIxMDpcXHRkZXZsaW5rX2ZsYXNoX3VwZGF0ZV9zdGF0dXNfbm90aWZ5KGRsLCBzdGF0dXMsIE5VTEwsIGRvbmUsIHRvdGFsKTtcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYy0yMTEtfVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmM9NzIyPWludCBteGw4NjJ4eF9kZXZsaW5rX2luZm9fZ2V0KHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5jLTc3Mi1cXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYzo3NzM6aW50IG14bDg2Mnh4X2RldmxpbmtfZmxhc2hfdXBkYXRlKHN0cnVjdCBkc2Ffc3dpdGNoICpkcyxcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuYzo3NzQ6XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZGV2bGlua19mbGFzaF91cGRhdGVfcGFyYW1zICpwYXJhbXMsXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmMtNzc1LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKVxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3Lmg9MTM9aW50IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LWZ3LmgtMTUtXFx0XFx0XFx0ICAgICAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHgtZncuaDoxNjppbnQgbXhsODYyeHhfZGV2bGlua19mbGFzaF91cGRhdGUoc3RydWN0IGRzYV9zd2l0Y2ggKmRzLFxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oOjE3OlxcdFxcdFxcdFxcdCAgc3RydWN0IGRldmxpbmtfZmxhc2hfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLFxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC1mdy5oLTE4LVxcdFxcdFxcdFxcdCAgc3RydWN0IG5ldGxpbmtfZXh0X2FjayAqZXh0YWNrKTtcXG4tLVxcbmRyaXZlcnMvbmV0L2RzYS9teGw4NjJ4eC9teGw4NjJ4eC5jPTIxNTc9c3RhdGljIGNvbnN0IHN0cnVjdCBkc2Ffc3dpdGNoX29wcyBteGw4NjJ4eF9zd2l0Y2hfb3BzID0ge1xcbi0tXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmMtMjE4OS1cXHQuZGV2bGlua19pbmZvX2dldCA9IG14bDg2Mnh4X2RldmxpbmtfaW5mb19nZXQsXFxuZHJpdmVycy9uZXQvZHNhL214bDg2Mnh4L214bDg2Mnh4LmM6MjE5MDpcXHQuZGV2bGlua19mbGFzaF91cGRhdGUgPSBteGw4NjJ4eF9kZXZsaW5rX2ZsYXNoX3VwZGF0ZSxcXG5kcml2ZXJzL25ldC9kc2EvbXhsODYyeHgvbXhsODYyeHguYy0yMTkxLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjU1OjA0LjkwNjU1ODQ2M1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMjE2MzA4NzMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipQYXRjaCBBbmFseXNpczogSXMgdGhpcyBXb3J0aCBGdXp6aW5nPyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBwYXRjaCBpc24ndCBpbnRyb2R1Y2luZyBhbnkgKnJlYWNoYWJsZSogZnVuY3Rpb25hbCBjaGFuZ2VzIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIHRoZXJlZm9yZSBpdCBzaG91bGQgbm90IGJlIHdvcnRoIGZ1enppbmcuIEkgbmVlZCB0byBiZSBzdXJlIHRob3VnaCwgc28gbGV0IG1lIGV4cGxhaW4gbXkgcmVhc29uaW5nLlxuXG5Jbml0aWFsbHksIEkgc2VlIHRoYXQgdGhlIGNvZGUgY2hhbmdlIHByaW1hcmlseSByZXZvbHZlcyBhcm91bmQgdGhlIGBteGw4NjJ4eGAgZHJpdmVyLCBhbmQgdGhhdCBvbmx5IHRoaXMgZHJpdmVyIGltcGxlbWVudHMgdGhlIG5ldyBgZGV2bGlua19mbGFzaF91cGRhdGVgIGZ1bmN0aW9uLiBUaGUgcHJvYmxlbSBpcywgYXMgSSByZWNhbGwsIGBteGw4NjJ4eGAgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgRFNBIHN3aXRjaCBkcml2ZXIsIGFuZCwgYmVjYXVzZSBpdCBwZXJmb3JtcyBhIGhhcmR3YXJlIHByZXNlbmNlIGNoZWNrIHRocm91Z2ggYW4gTURJTyBidXMgZHVyaW5nIHByb2JlLCBpdCBjYW5ub3QgYmUgcHJvYmVkIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQsIGxpa2UgUUVNVS4gVGhhdCBtZWFucyB0aGUgYGRldmxpbmsuY2AgY29kZSB0aGF0IGNhbGxzIGBkcy1cdTAwM2VvcHMtXHUwMDNlZGV2bGlua19mbGFzaF91cGRhdGVgIGlzIGNvbXBsZXRlbHkgdW5yZWFjaGFibGUgaW4gYW55IHN0YW5kYXJkIHZpcnR1YWxpemVkIHNldHVwLiBUaGUgbG9naWMgd2l0aGluIHRoYXQgYnJhbmNoIG9mIGBuZXQvZHNhL2RldmxpbmsuY2Agd291bGQgYmUgaXJyZWxldmFudCwgc2luY2UgdGhlIGBteGw4NjJ4eGAgZHJpdmVyIHdvdWxkIG5ldmVyIHJlYWNoIHRoYXQgY29kZS5cblxuSG93ZXZlciwgSSBwYXVzZWQgZm9yIGEgbW9tZW50IGJlY2F1c2Ugb2YgYGRzYV9zd2l0Y2hfZGV2bGlua19hbGxvY2AuIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVkIGZvciAqYWxsKiBEU0Egc3dpdGNoZXMuIFRoZSBjb2RlIHNlbGVjdHMgYmV0d2VlbiB0d28gYGRldmxpbmtfb3BzYCBzdHJ1Y3RzIGJhc2VkIG9uIHdoZXRoZXIgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBpcyBwcmVzZW50OlxuXG5gYGBjXG5cdG9wcyA9IGRzLVx1MDAzZW9wcy1cdTAwM2VkZXZsaW5rX2ZsYXNoX3VwZGF0ZSA/IFx1MDAyNmRzYV9kZXZsaW5rX2ZsYXNoX29wc1xuXHRcdFx0XHRcdCAgICA6IFx1MDAyNmRzYV9kZXZsaW5rX29wcztcblxuXHQvKiBBZGQgdGhlIHN3aXRjaCB0byBkZXZsaW5rIGJlZm9yZSBjYWxsaW5nIHNldHVwLCBzbyB0aGF0IHNldHVwIGNhblxuXHQgKiBhZGQgZHBpcGUgdGFibGVzXG5cdCAqL1xuXHRkbCA9IGRldmxpbmtfYWxsb2Mob3BzLCBzaXplb2YoKmRsX3ByaXYpLCBkcy1cdTAwM2VkZXYpO1xuYGBgXG5cblNvICp0aGlzKiBpcyByZWFjaGFibGUgZm9yIGFsbCBEU0Egc3dpdGNoZXMsIGluY2x1ZGluZyBzb21ldGhpbmcgZ2VuZXJpYyBsaWtlIGBkc2FfbG9vcGAuIEJ1dCBldmVuIHRoZW4sIGZvciBzd2l0Y2hlcyB0aGF0IGRvbid0IGhhdmUgYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBpbXBsZW1lbnRlZCAobGlrZSBgZHNhX2xvb3BgKSwgdGhlIGNvZGUgd2lsbCBzZWxlY3QgYGRzYV9kZXZsaW5rX29wc2AsIHdoaWNoIGlzIGZ1bmN0aW9uYWxseSB0aGUgKnNhbWUqIGFzIGl0IHdhcyBiZWZvcmUuIEl0J3MganVzdCBhIG1hY3JvIG5vdy4gU28sIHRoZXJlIGlzIG5vIG5ldyBsb2dpYyBiZWluZyByZWFjaGVkIGZvciB0aGUgZXhpc3Rpbmcgc3dpdGNoZXMuIFRoZSAqb25seSogbmV3IGxvZ2ljIGlzIHdoZW4gYGRldmxpbmtfZmxhc2hfdXBkYXRlYCBpcyBwcmVzZW50LCBhbmQgdGhhdCBpcyBvbmx5IGluIGBteGw4NjJ4eGAsIHdoaWNoLCBhZ2FpbiwgaXMgdW5yZWFjaGFibGUuXG5cbkkgbmVlZCB0byBjb25maXJtIGlmIGBteGw4NjJ4eGAgY2FuIGJlIHByb2JlZCBpbiBRRU1VLCBzaW5jZSBzeXprYWxsZXIgbWlnaHQgYmUgdGVzdGluZyB0aGlzIHBhdGNoIGJlY2F1c2UgaXQgbGFuZGVkIG9uIHRoZSBuZXRkZXYgbWFpbGluZyBsaXN0LCBhbmQgc3l6a2FsbGVyIGJsaW5kbHkgdGVzdHMgcGF0Y2hlcy4gSXQgZG9lcyBub3Qga25vdyBpZiB0aGUgcGF0Y2ggaXMgcmVhY2hhYmxlLCBpdCBqdXN0IGZ1enplcy4gTXkgam9iIGlzIHRvIGRldGVybWluZSBpZiB0aGUgcGF0Y2ggaXMgd29ydGggZnV6emluZy4gVGhlIGZhY3QgdGhhdCBpdCBpcyBhIHZlbmRvci1zcGVjaWZpYyBoYXJkd2FyZSBkcml2ZXIgdGhhdCByZXF1aXJlcyBwaHlzaWNhbCBoYXJkd2FyZSBub3QgZW11bGF0ZWQgaW4gUUVNVSwgdGhlIHBhdGNoIGlzIE5PVCB3b3J0aCBmdXp6aW5nLlxuXG5Mb29raW5nIGJhY2sgYXQgdGhlIGluc3RydWN0aW9uczpcblxuXCJSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLi4uXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLCBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cIlxuXG5gbXhsODYyeHhgIHBlcmZlY3RseSBmaXRzIHRoaXMgZGVzY3JpcHRpb24uIEl0J3MgYSB2ZW5kb3Itc3BlY2lmaWMgRFNBIHN3aXRjaCBkcml2ZXIgcmVxdWlyaW5nIHBoeXNpY2FsIGhhcmR3YXJlLiBTbywgSSB3aWxsIHJldHVybiBgV29ydGhGdXp6aW5nPWZhbHNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAzNDEsIk91dHB1dFRva2VucyI6MTc5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Nzk5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTI2VDExOjU1OjE3LjA2OTY0NzgxNVoiLCJTZXEiOjQ4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIzMTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgZmlybXdhcmUgZmxhc2ggc3VwcG9ydCBmb3IgdGhlIE1heExpbmVhciBNeEw4NjJ4eCBEU0Egc3dpdGNoIHZpYSBkZXZsaW5rLiBUaGUgbXhsODYyeHggZHJpdmVyIGlzIGEgdmVuZG9yLXNwZWNpZmljIGhhcmR3YXJlIGRyaXZlciB0aGF0IGNvbW11bmljYXRlcyB3aXRoIHRoZSBwaHlzaWNhbCBzd2l0Y2ggY2hpcCBvdmVyIGFuIE1ESU8gYnVzLiBEdXJpbmcgcHJvYmUsIGl0IHBlcmZvcm1zIGEgaGFyZHdhcmUgcHJlc2VuY2UgY2hlY2sgKG14bDg2Mnh4X3Jlc2N1ZV9tb2RlX2RldGVjdCkgdGhhdCByZXF1aXJlcyB0aGUgcGh5c2ljYWwgY2hpcCB0byBsYXRjaCBhbmQgcmV0dXJuIHNwZWNpZmljIHZhbHVlcy4gV2l0aG91dCB0aGUgcGh5c2ljYWwgaGFyZHdhcmUgKHdoaWNoIGlzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VKSwgdGhlIGRyaXZlciBmYWlscyB0byBwcm9iZSwgbWFraW5nIHRoZSBuZXcgZGV2bGluayBmbGFzaCB1cGRhdGUgY29kZSB1bnJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50LiBUaGUgZ2VuZXJpYyBEU0EgZGV2bGluayBwbHVtYmluZyBjaGFuZ2VzIG9ubHkgYWZmZWN0IGRyaXZlcnMgaW1wbGVtZW50aW5nIHRoZSBuZXcgb3AsIHdoaWNoIGlzIGN1cnJlbnRseSBvbmx5IG14bDg2Mnh4LlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBmaXJtd2FyZSBmbGFzaCBzdXBwb3J0IGZvciB0aGUgTWF4TGluZWFyIE14TDg2Mnh4IERTQSBzd2l0Y2ggdmlhIGRldmxpbmsuIFRoZSBteGw4NjJ4eCBkcml2ZXIgaXMgYSB2ZW5kb3Itc3BlY2lmaWMgaGFyZHdhcmUgZHJpdmVyIHRoYXQgY29tbXVuaWNhdGVzIHdpdGggdGhlIHBoeXNpY2FsIHN3aXRjaCBjaGlwIG92ZXIgYW4gTURJTyBidXMuIER1cmluZyBwcm9iZSwgaXQgcGVyZm9ybXMgYSBoYXJkd2FyZSBwcmVzZW5jZSBjaGVjayAobXhsODYyeHhfcmVzY3VlX21vZGVfZGV0ZWN0KSB0aGF0IHJlcXVpcmVzIHRoZSBwaHlzaWNhbCBjaGlwIHRvIGxhdGNoIGFuZCByZXR1cm4gc3BlY2lmaWMgdmFsdWVzLiBXaXRob3V0IHRoZSBwaHlzaWNhbCBoYXJkd2FyZSAod2hpY2ggaXMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUpLCB0aGUgZHJpdmVyIGZhaWxzIHRvIHByb2JlLCBtYWtpbmcgdGhlIG5ldyBkZXZsaW5rIGZsYXNoIHVwZGF0ZSBjb2RlIHVucmVhY2hhYmxlIGluIGEgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIFRoZSBnZW5lcmljIERTQSBkZXZsaW5rIHBsdW1iaW5nIGNoYW5nZXMgb25seSBhZmZlY3QgZHJpdmVycyBpbXBsZW1lbnRpbmcgdGhlIG5ldyBvcCwgd2hpY2ggaXMgY3VycmVudGx5IG9ubHkgbXhsODYyeHguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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,}