Name: series-workflowlxh4k Phase: Succeeded StartedAt: 2026-08-21 08:20:25 +0000 UTC FinishedAt: 2026-08-21 12:07:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[0] Phase: Succeeded StartedAt: 2026-08-21 08:20:25 +0000 UTC FinishedAt: 2026-08-21 08:23:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 08:20:25 +0000 UTC FinishedAt: 2026-08-21 08:23:42 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "91f35141-41cd-4fe2-81fd-900a23ffed54" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "node_reclaim" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyB0d28gbmV3IGJpdGZpZWxkcyAoYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCkgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIGJldHRlciBjb250cm9sIHNsYWIgYW5kIGZpbGUgcGFnZSByZWNsYWltLiBJbnN0YW5jZXMgb2YgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGFueSB1bnNwZWNpZmllZCBmaWVsZHMgKGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgYml0ZmllbGRzKSBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBwYXJzaW5nIG9mIGV4dGVybmFsIGRhdGEgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyAodm1zY2FuKSB0byBza2lwIHNsYWIgb3IgZmlsZSByZWNsYWltIHdoZW4gdGhlaXIgcmVzcGVjdGl2ZSBsaW1pdHMgYXJlIG5vdCBleGNlZWRlZCBkdXJpbmcgbm9kZSByZWNsYWltLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBhbGxvY2F0aW9uIHdoZW4gTlVNQSBub2RlIHJlY2xhaW0gaXMgZW5hYmxlZCAoZS5nLiwgdmlhIHZtLnpvbmVfcmVjbGFpbV9tb2RlIHN5c2N0bCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYTUyZTI3NjUxOWQxM2MxMTRlZjk4MDhhZDk5NThmMmIzYmQ4MTZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDg6MjE6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uZDEzODM3Nzk1NzllYSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTExNCw2ICYjNDM7MTE0LDE4IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0Lyogem9uZV9yZWNsYWltX21vZGUsIGJvb3N0IHJlY2xhaW0sIGNncm91cCByZXN0cmljdGlvbnMgKi9cbiBcdHVuc2lnbmVkIGludCBtYXlfc3dhcDoxO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiBzZXQsIHRoZSBzbGFiIHNocmlua2VycyBhcmUgbm90IGludm9rZWQgYmVjYXVzZSByZWNsYWltYWJsZVxuJiM0MztcdCAqIHNsYWIgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fc2xhYl9wYWdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2tpcF9zbGFiX3JlY2xhaW06MTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIHNldCwgZmlsZSBwYWdlcyBhcmUgbm90IHJlY2xhaW1lZCBiZWNhdXNlIHVubWFwcGVkIHBhZ2UgY2FjaGVcbiYjNDM7XHQgKiBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IG1pbl91bm1hcHBlZF9wYWdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2tpcF9maWxlX3JlY2xhaW06MTtcbiYjNDM7XG4gXHQvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovXG4gXHR1bnNpZ25lZCBpbnQgbm9fY2FjaGVfdHJpbV9tb2RlOjE7XG4gXG5AQCAtMjU3NSw2ICYjNDM7MjU4NywyMSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG9cbiYjNDM7XHQgKiBtaW5fdW5tYXBwZWRfcGFnZXM6IHNraXAgZmlsZSBwYWdlcyBhbmQgcmVjbGFpbSBhbm9uIG9ubHkuICBBcyB3aXRoXG4mIzQzO1x0ICogdGhlIGFub24tb25seSBjYXNlIGFib3ZlLCBpZiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgdGhlcmUgaXNcbiYjNDM7XHQgKiBub3RoaW5nIHRvIGRvIHdpdGhvdXQgYnJlYWNoaW5nIHRoZSBmbG9vciwgc28gc2NhbiBub3RoaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzYy1cdTAwM2Vza2lwX2ZpbGVfcmVjbGFpbSkge1xuJiM0MztcdFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiYjNDM7XHRcdFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXG4gXHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiBcdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9GSUxFO1xuQEAgLTQ3MzYsNiAmIzQzOzQ3NjMsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFZNX1dBUk5fT05fT05DRShucl90b19zY2FuIFx1MDAzZSBNQVhfTFJVX0JBVENIKTtcbiBcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBub2RlX3JlY2xhaW0gcHJvdGVjdHMgdW5tYXBwZWQgcGFnZSBjYWNoZSBkb3duIHRvIG1pbl91bm1hcHBlZF9wYWdlcyxcbiYjNDM7XHQgKiBzbyBsZWF2ZSB0aGUgZmlsZSB0eXBlIGFsb25lOyBpc29sYXRlX2ZvbGlvcygpIHRoZW4gZmFsbHMgYmFjayB0b1xuJiM0MztcdCAqIGFub24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNjLVx1MDAzZXNraXBfZmlsZV9yZWNsYWltIFx1MDAyNlx1MDAyNiB0eXBlID09IExSVV9HRU5fRklMRSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC01MTExLDcgJiM0Mzs1MTQ2LDggQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXG4gXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xuIFxuLVx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLCBzYy1cdTAwM2Vwcmlvcml0eSk7XG4mIzQzO1x0aWYgKCFzYy1cdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSlcbiYjNDM7XHRcdHNocmlua19zbGFiKHNjLVx1MDAzZWdmcF9tYXNrLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBtZW1jZywgc2MtXHUwMDNlcHJpb3JpdHkpO1xuIFxuIFx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG4gXHRcdHZtcHJlc3N1cmUoc2MtXHUwMDNlZ2ZwX21hc2ssIHNjLVx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXG5AQCAtNjIxNCw4ICYjNDM7NjI1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcbiBcdFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbiBcbi1cdFx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLFxuLVx0XHRcdCAgICBzYy1cdTAwM2Vwcmlvcml0eSk7XG4mIzQzO1x0XHRpZiAoIXNjLVx1MDAzZXNraXBfc2xhYl9yZWNsYWltKVxuJiM0MztcdFx0XHRzaHJpbmtfc2xhYihzYy1cdTAwM2VnZnBfbWFzaywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgbWVtY2csXG4mIzQzO1x0XHRcdFx0ICAgIHNjLVx1MDAzZXByaW9yaXR5KTtcbiBcbiBcdFx0LyogUmVjb3JkIHRoZSBncm91cCYjMzk7cyByZWNsYWltIGVmZmljaWVuY3kgKi9cbiBcdFx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5AQCAtNzg0NiwxNiAmIzQzOzc4ODMsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdG5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcbiBcdHNldF90YXNrX3JlY2xhaW1fc3RhdGUocCwgXHUwMDI2c2MtXHUwMDNlcmVjbGFpbV9zdGF0ZSk7XG4gXG4tXHRpZiAobm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUocGdkYXQpIFx1MDAzZSBwZ2RhdC1cdTAwM2VtaW5fdW5tYXBwZWRfcGFnZXMgfHxcbi1cdCAgICBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlIHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzKSB7XG4tXHRcdC8qXG4tXHRcdCAqIEZyZWUgbWVtb3J5IGJ5IGNhbGxpbmcgc2hyaW5rIG5vZGUgd2l0aCBpbmNyZWFzaW5nXG4tXHRcdCAqIHByaW9yaXRpZXMgdW50aWwgd2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZyZWVkLlxuLVx0XHQgKi9cbi1cdFx0ZG8ge1xuLVx0XHRcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XG4tXHRcdH0gd2hpbGUgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2MgbnJfcGFnZXMgXHUwMDI2XHUwMDI2IC0tc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNlPSAwKTtcbi1cdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZyZWUgbWVtb3J5IGJ5IGNhbGxpbmcgc2hyaW5rIG5vZGUgd2l0aCBpbmNyZWFzaW5nXG4mIzQzO1x0ICogcHJpb3JpdGllcyB1bnRpbCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZnJlZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXaGF0IHRvIHJlY2xhaW0gaXMgZ2F0ZWQgcGVyIHR5cGUgYnkgc2MtXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0gYW5kXG4mIzQzO1x0ICogc2MtXHUwMDNlc2tpcF9maWxlX3JlY2xhaW0uXG4mIzQzO1x0ICovXG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbiYjNDM7XHR9IHdoaWxlIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiAtLXNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZT0gMCk7XG4gXG4gXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKHAsIE5VTEwpO1xuIFx0bWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUobm9yZWNsYWltX2ZsYWcpO1xuQEAgLTc4ODUsMTggJiM0Mzs3OTIyLDE0IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpXG4gXHR9O1xuIFxuIFx0Lypcbi1cdCAqIE5vZGUgcmVjbGFpbSByZWNsYWltcyB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBhbmRcbi1cdCAqIHNsYWIgcGFnZXMgaWYgd2UgYXJlIG92ZXIgdGhlIGRlZmluZWQgbGltaXRzLlxuLVx0ICpcbi1cdCAqIEEgc21hbGwgcG9ydGlvbiBvZiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBpcyBuZWVkZWQgZm9yXG4tXHQgKiBmaWxlIEkvTyBvdGhlcndpc2UgcGFnZXMgcmVhZCBieSBmaWxlIEkvTyB3aWxsIGJlIGltbWVkaWF0ZWx5XG4tXHQgKiB0aHJvd24gb3V0IGlmIHRoZSBub2RlIGlzIG92ZXJhbGxvY2F0ZWQuIFNvIHdlIGRvIG5vdCByZWNsYWltXG4tXHQgKiBpZiBsZXNzIHRoYW4gYSBzcGVjaWZpZWQgcGVyY2VudGFnZSBvZiB0aGUgbm9kZSBpcyB1c2VkIGJ5XG4tXHQgKiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcy5cbiYjNDM7XHQgKiBtaW5fdW5tYXBwZWRfcGFnZXMgYW5kIG1pbl9zbGFiX3BhZ2VzIG9ubHkgZ2F0ZSBmaWxlIGFuZCBzbGFiLlxuJiM0MztcdCAqIEJhaWwgb3V0IG9ubHkgd2hlbiBib3RoIGFyZSB1bmRlciB0aGVpciBsaW1pdHMgYW5kIGFub24gY2Fubm90XG4mIzQzO1x0ICogYmUgcmVjbGFpbWVkIGVpdGhlciwgc28gd2UgZG8gbm90IHNraXAgcmVjbGFpbWFibGUgYW5vbi5cbiBcdCAqL1xuIFx0aWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcdTAwM2M9IHBnZGF0LVx1MDAzZW1pbl91bm1hcHBlZF9wYWdlcyBcdTAwMjZcdTAwMjZcbiBcdCAgICBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNjPVxuLVx0ICAgIHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzKVxuJiM0MztcdCAgICBwZ2RhdC1cdTAwM2VtaW5fc2xhYl9wYWdlcyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgXHUwMDI2c2MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qXG5AQCAtNzkxNyw2ICYjNDM7Nzk1MCwxOCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaVxuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGVcbiYjNDM7XHQgKiBzbGFiIG9yIHVubWFwcGVkIHBhZ2UgY2FjaGUgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBpdHMgbGltaXQsIGxlYXZlXG4mIzQzO1x0ICogdGhhdCB0eXBlIGFsb25lIGV2ZW4gaWYgdGhlIG90aGVyIHR5cGUgdHJpcHBlZCB0aGUgZ2F0ZSBhbmQgYnJvdWdodFxuJiM0MztcdCAqIHVzIGludG8gbm9kZSByZWNsYWltLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjLnNraXBfc2xhYl9yZWNsYWltID1cbiYjNDM7XHRcdG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2M9XG4mIzQzO1x0XHRwZ2RhdC1cdTAwM2VtaW5fc2xhYl9wYWdlcztcbiYjNDM7XHRzYy5za2lwX2ZpbGVfcmVjbGFpbSA9XG4mIzQzO1x0XHRub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXHUwMDNjPSBwZ2RhdC1cdTAwM2VtaW5fdW5tYXBwZWRfcGFnZXM7XG4mIzQzO1xuIFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcdTAwMjZzYyk7XG4gXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IHJlY2xhaW0gbG9naWMgKHZtc2NhbikgdG8gc2tpcCBzbGFiIG9yIGZpbGUgcmVjbGFpbSB3aGVuIHRoZWlyIHJlc3BlY3RpdmUgbGltaXRzIGFyZSBub3QgZXhjZWVkZWQgZHVyaW5nIG5vZGUgcmVjbGFpbS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHBhZ2UgYWxsb2NhdGlvbiB3aGVuIE5VTUEgbm9kZSByZWNsYWltIGlzIGVuYWJsZWQgKGUuZy4sIHZpYSB2bS56b25lX3JlY2xhaW1fbW9kZSBzeXNjdGwpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGE1MmUyNzY1MTlkMTNjMTE0ZWY5ODA4YWQ5OTU4ZjJiM2JkODE2YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDA4OjIxOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li5kMTM4Mzc3OTU3OWVhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTE0LDYgJiM0MzsxMTQsMTggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJLyogem9uZV9yZWNsYWltX21vZGUsIGJvb3N0IHJlY2xhaW0sIGNncm91cCByZXN0cmljdGlvbnMgKi8KIAl1bnNpZ25lZCBpbnQgbWF5X3N3YXA6MTsKIAomIzQzOwkvKgomIzQzOwkgKiBXaGVuIHNldCwgdGhlIHNsYWIgc2hyaW5rZXJzIGFyZSBub3QgaW52b2tlZCBiZWNhdXNlIHJlY2xhaW1hYmxlCiYjNDM7CSAqIHNsYWIgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fc2xhYl9wYWdlcy4KJiM0MzsJICovCiYjNDM7CXVuc2lnbmVkIGludCBza2lwX3NsYWJfcmVjbGFpbToxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaGVuIHNldCwgZmlsZSBwYWdlcyBhcmUgbm90IHJlY2xhaW1lZCBiZWNhdXNlIHVubWFwcGVkIHBhZ2UgY2FjaGUKJiM0MzsJICogaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fdW5tYXBwZWRfcGFnZXMuCiYjNDM7CSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgc2tpcF9maWxlX3JlY2xhaW06MTsKJiM0MzsKIAkvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovCiAJdW5zaWduZWQgaW50IG5vX2NhY2hlX3RyaW1fbW9kZToxOwogCkBAIC0yNTc1LDYgJiM0MzsyNTg3LDIxIEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBub2RlX3JlY2xhaW0gcHJvdGVjdHMgdW5tYXBwZWQgcGFnZSBjYWNoZSBkb3duIHRvCiYjNDM7CSAqIG1pbl91bm1hcHBlZF9wYWdlczogc2tpcCBmaWxlIHBhZ2VzIGFuZCByZWNsYWltIGFub24gb25seS4gIEFzIHdpdGgKJiM0MzsJICogdGhlIGFub24tb25seSBjYXNlIGFib3ZlLCBpZiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgdGhlcmUgaXMKJiM0MzsJICogbm90aGluZyB0byBkbyB3aXRob3V0IGJyZWFjaGluZyB0aGUgZmxvb3IsIHNvIHNjYW4gbm90aGluZy4KJiM0MzsJICovCiYjNDM7CWlmIChzYy0mZ3Q7c2tpcF9maWxlX3JlY2xhaW0pIHsKJiM0MzsJCWlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtJmd0O25vZGVfaWQsIHNjKSkgewomIzQzOwkJCW1lbXNldChuciwgMCwgc2l6ZW9mKCpucikgKiBOUl9MUlVfTElTVFMpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCXNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJLyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqLwogCWlmICghc2MtJmd0O21heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC0mZ3Q7bm9kZV9pZCwgc2MpKSB7CiAJCXNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTsKQEAgLTQ3MzYsNiAmIzQzOzQ3NjMsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiAmZ3Q7IE1BWF9MUlVfQkFUQ0gpOwogCVZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7CiAKJiM0MzsJLyoKJiM0MzsJICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0byBtaW5fdW5tYXBwZWRfcGFnZXMsCiYjNDM7CSAqIHNvIGxlYXZlIHRoZSBmaWxlIHR5cGUgYWxvbmU7IGlzb2xhdGVfZm9saW9zKCkgdGhlbiBmYWxscyBiYWNrIHRvCiYjNDM7CSAqIGFub24uCiYjNDM7CSAqLwomIzQzOwlpZiAoc2MtJmd0O3NraXBfZmlsZV9yZWNsYWltICZhbXA7JmFtcDsgdHlwZSA9PSBMUlVfR0VOX0ZJTEUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykKIAkJcmV0dXJuIDA7CiAKQEAgLTUxMTEsNyAmIzQzOzUxNDYsOCBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCW5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7CiAKLQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywgc2MtJmd0O3ByaW9yaXR5KTsKJiM0MzsJaWYgKCFzYy0mZ3Q7c2tpcF9zbGFiX3JlY2xhaW0pCiYjNDM7CQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywgc2MtJmd0O3ByaW9yaXR5KTsKIAogCWlmICghc2MtJmd0O3Byb2FjdGl2ZSkKIAkJdm1wcmVzc3VyZShzYy0mZ3Q7Z2ZwX21hc2ssIHNjLSZndDtvcmRlciwgbWVtY2csIGZhbHNlLApAQCAtNjIxNCw4ICYjNDM7NjI1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCQlzaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpOwogCi0JCXNocmlua19zbGFiKHNjLSZndDtnZnBfbWFzaywgcGdkYXQtJmd0O25vZGVfaWQsIG1lbWNnLAotCQkJICAgIHNjLSZndDtwcmlvcml0eSk7CiYjNDM7CQlpZiAoIXNjLSZndDtza2lwX3NsYWJfcmVjbGFpbSkKJiM0MzsJCQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywKJiM0MzsJCQkJICAgIHNjLSZndDtwcmlvcml0eSk7CiAKIAkJLyogUmVjb3JkIHRoZSBncm91cCYjMzk7cyByZWNsYWltIGVmZmljaWVuY3kgKi8KIAkJaWYgKCFzYy0mZ3Q7cHJvYWN0aXZlKQpAQCAtNzg0NiwxNiAmIzQzOzc4ODMsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKIAlub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7CiAJc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCAmYW1wO3NjLSZndDtyZWNsYWltX3N0YXRlKTsKIAotCWlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgJmd0OyBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzIHx8Ci0JICAgIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSAmZ3Q7IHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcykgewotCQkvKgotCQkgKiBGcmVlIG1lbW9yeSBieSBjYWxsaW5nIHNocmluayBub2RlIHdpdGggaW5jcmVhc2luZwotCQkgKiBwcmlvcml0aWVzIHVudGlsIHdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmcmVlZC4KLQkJICovCi0JCWRvIHsKLQkJCXNocmlua19ub2RlKHBnZGF0LCBzYyk7Ci0JCX0gd2hpbGUgKHNjLSZndDtucl9yZWNsYWltZWQgJmx0OyBucl9wYWdlcyAmYW1wOyZhbXA7IC0tc2MtJmd0O3ByaW9yaXR5ICZndDs9IDApOwotCX0KJiM0MzsJLyoKJiM0MzsJICogRnJlZSBtZW1vcnkgYnkgY2FsbGluZyBzaHJpbmsgbm9kZSB3aXRoIGluY3JlYXNpbmcKJiM0MzsJICogcHJpb3JpdGllcyB1bnRpbCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZnJlZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFdoYXQgdG8gcmVjbGFpbSBpcyBnYXRlZCBwZXIgdHlwZSBieSBzYy0mZ3Q7c2tpcF9zbGFiX3JlY2xhaW0gYW5kCiYjNDM7CSAqIHNjLSZndDtza2lwX2ZpbGVfcmVjbGFpbS4KJiM0MzsJICovCiYjNDM7CWRvIHsKJiM0MzsJCXNocmlua19ub2RlKHBnZGF0LCBzYyk7CiYjNDM7CX0gd2hpbGUgKHNjLSZndDtucl9yZWNsYWltZWQgJmx0OyBucl9wYWdlcyAmYW1wOyZhbXA7IC0tc2MtJmd0O3ByaW9yaXR5ICZndDs9IDApOwogCiAJc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCBOVUxMKTsKIAltZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShub3JlY2xhaW1fZmxhZyk7CkBAIC03ODg1LDE4ICYjNDM7NzkyMiwxNCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaQogCX07CiAKIAkvKgotCSAqIE5vZGUgcmVjbGFpbSByZWNsYWltcyB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBhbmQKLQkgKiBzbGFiIHBhZ2VzIGlmIHdlIGFyZSBvdmVyIHRoZSBkZWZpbmVkIGxpbWl0cy4KLQkgKgotCSAqIEEgc21hbGwgcG9ydGlvbiBvZiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBpcyBuZWVkZWQgZm9yCi0JICogZmlsZSBJL08gb3RoZXJ3aXNlIHBhZ2VzIHJlYWQgYnkgZmlsZSBJL08gd2lsbCBiZSBpbW1lZGlhdGVseQotCSAqIHRocm93biBvdXQgaWYgdGhlIG5vZGUgaXMgb3ZlcmFsbG9jYXRlZC4gU28gd2UgZG8gbm90IHJlY2xhaW0KLQkgKiBpZiBsZXNzIHRoYW4gYSBzcGVjaWZpZWQgcGVyY2VudGFnZSBvZiB0aGUgbm9kZSBpcyB1c2VkIGJ5Ci0JICogdW5tYXBwZWQgZmlsZSBiYWNrZWQgcGFnZXMuCiYjNDM7CSAqIG1pbl91bm1hcHBlZF9wYWdlcyBhbmQgbWluX3NsYWJfcGFnZXMgb25seSBnYXRlIGZpbGUgYW5kIHNsYWIuCiYjNDM7CSAqIEJhaWwgb3V0IG9ubHkgd2hlbiBib3RoIGFyZSB1bmRlciB0aGVpciBsaW1pdHMgYW5kIGFub24gY2Fubm90CiYjNDM7CSAqIGJlIHJlY2xhaW1lZCBlaXRoZXIsIHNvIHdlIGRvIG5vdCBza2lwIHJlY2xhaW1hYmxlIGFub24uCiAJICovCiAJaWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSAmbHQ7PSBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzICZhbXA7JmFtcDsKIAkgICAgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZsdDs9Ci0JICAgIHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcykKJiM0MzsJICAgIHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcyAmYW1wOyZhbXA7CiYjNDM7CSAgICAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC0mZ3Q7bm9kZV9pZCwgJmFtcDtzYykpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTc5MTcsNiAmIzQzOzc5NTAsMTggQEAgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGkKIAlpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCAmYW1wO3BnZGF0LSZndDtmbGFncykpCiAJCXJldHVybiAwOwogCiYjNDM7CS8qCiYjNDM7CSAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGUKJiM0MzsJICogc2xhYiBvciB1bm1hcHBlZCBwYWdlIGNhY2hlIGlzIGFscmVhZHkgYXQgb3IgYmVsb3cgaXRzIGxpbWl0LCBsZWF2ZQomIzQzOwkgKiB0aGF0IHR5cGUgYWxvbmUgZXZlbiBpZiB0aGUgb3RoZXIgdHlwZSB0cmlwcGVkIHRoZSBnYXRlIGFuZCBicm91Z2h0CiYjNDM7CSAqIHVzIGludG8gbm9kZSByZWNsYWltLgomIzQzOwkgKi8KJiM0MzsJc2Muc2tpcF9zbGFiX3JlY2xhaW0gPQomIzQzOwkJbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZsdDs9CiYjNDM7CQlwZ2RhdC0mZ3Q7bWluX3NsYWJfcGFnZXM7CiYjNDM7CXNjLnNraXBfZmlsZV9yZWNsYWltID0KJiM0MzsJCW5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSAmbHQ7PSBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzOwomIzQzOwogCXJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBucl9wYWdlcywgJmFtcDtzYyk7CiAJY2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgJmFtcDtwZ2RhdC0mZ3Q7ZmxhZ3MpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvcmUgbWVtb3J5IHJlY2xhaW0gbG9naWMg4oCTIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBhcmVhLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpcyBhZGRpbmcgYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCBmbGFncyB0byB0aGUgYHNjYW5fY29udHJvbGAgc3RydWN0LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBjb250cm9sbGluZyByZWNsYWltIGJlaGF2aW9yIHRocm91Z2ggZmxhZ3MgaXMgYSBwcmV0dHkgc3RhbmRhcmQgd2F5IHRvIG1hbmFnZSBjb21wbGV4aXR5LCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBhcHByb2FjaC4gVGhlIGBnZXRfc2Nhbl9jb3VudGAgZnVuY3Rpb24gYW5kIGBzY2FuX2ZvbGlvc2AgYXJlIGdldHRpbmcgdG91Y2hlZCB0byByZXNwZWN0IHRob3NlIGZpbGUgcmVjbGFpbSBmbGFncywgd2hpbGUgYHNocmlua19vbmVgIGFuZCBgc2hyaW5rX25vZGVfbWVtY2dzYCBkZWFsIHdpdGggdGhlIHNsYWIgcmVjbGFpbSBmbGFnLiBBbmQgdGhlIG5vZGUgcmVjbGFpbSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gc2V0IHRoZXNlIGZsYWdzIGFuZCBhZGp1c3QgdGhlIHJlY2xhaW0gbG9naWMgYWNjb3JkaW5nbHkuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGRlZXAgb25lIGF0IHRoYXQsIGFmZmVjdGluZyBob3cgbm9kZSByZWNsYWltIG9wZXJhdGVzLCBzcGVjaWZpY2FsbHkgYnkgbGV0dGluZyB1cyB0d2VhayB0aGUgbGltaXRzIG9uIHNsYWIgYW5kIGZpbGUgcmVjbGFpbS4gRGVmaW5pdGVseSBhIGNhbmRpZGF0ZSBmb3Igc29tZSBzZXJpb3VzIGZ1enppbmcuIEdvdHRhIGNoZWNrIHRoZSBlZGdlIGNhc2VzIGhlcmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhvc2UgZnVuY3Rpb25zIGFnYWluLiBMb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBtb2RpZmllZDogYGdldF9zY2FuX2NvdW50YCwgYHNjYW5fZm9saW9zYCwgYHNocmlua19vbmVgLCBgc2hyaW5rX25vZGVfbWVtY2dzYCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBub2RlX3JlY2xhaW1gLiBIbW0sIGBub2RlX3JlY2xhaW1gIGlzICp0aGUqIGVudHJ5IHBvaW50IGhlcmUsIGEgbm9uLXN0YXRpYyBvbmUgYXQgdGhhdCwgc28gcHJvYmFibHkgdGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZSBidW5jaC4gSXQmIzM5O3MgdGhlIGZyb250IGRvb3IuCgpJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYG5vZGVfcmVjbGFpbWAgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW1cXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ODY1PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vdm1zY2FuLmMtNzkwNy1cbm1tL3Ztc2Nhbi5jOjc5MDg6dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3Ztc2Nhbi5jLTc5MDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgYG5vZGVfcmVjbGFpbWAgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGBub2RlX3JlY2xhaW1gLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBtYXAgb3V0IGFsbCB0aGUgY2FsbCBzaXRlcyBmb3IgdGhpcyBmdW5jdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoZW4gYW5kIHdoeSB0aGUgc3lzdGVtIHRyaWdnZXJzIG5vZGUgcmVjbGFtYXRpb24sIGFuZCBmcm9tIHRoZXJlLCB3aGVyZSB0aGUgcmVzb3VyY2VzIGFyZSBiZWluZyByZS1hbGxvY2F0ZWQuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGNvZGUgc2VhcmNoIHRvIGlkZW50aWZ5IGFsbCBkaXJlY3QgYW5kIGluZGlyZWN0IGNhbGxzLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRob3NlIGNhbGxzIHdpbGwgYmUgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBvciBwZXJmb3JtYW5jZSBhbmFseXNpcyByZWxhdGVkIHRvIG1lbW9yeSBwcmVzc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub2RlX3JlY2xhaW1cXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90b3BvbG9neS5oPTQzPWludCBhcmNoX3VwZGF0ZV9jcHVfdG9wb2xvZ3kodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC90b3BvbG9neS5oLTU1LSAqIChpbiB3aGF0ZXZlciBhcmNoIHNwZWNpZmljIG1lYXN1cmVtZW50IHVuaXRzIHJldHVybmVkIGJ5IG5vZGVfZGlzdGFuY2UoKSlcbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaDo1NjogKiBhbmQgbm9kZV9yZWNsYWltX21vZGUgaXMgZW5hYmxlZCB0aGVuIHRoZSBWTSB3aWxsIG9ubHkgY2FsbCBub2RlX3JlY2xhaW0oKVxuaW5jbHVkZS9saW51eC90b3BvbG9neS5oLTU3LSAqIG9uIG5vZGVzIHdpdGhpbiB0aGlzIGRpc3RhbmNlLlxuLS1cbm1tL2ludGVybmFsLmg9MTE0NT1leHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xubW0vaW50ZXJuYWwuaC0xMTQ2LVxubW0vaW50ZXJuYWwuaDoxMTQ3OmV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vaW50ZXJuYWwuaC0xMTQ4LVx0XHRcdFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcbm1tL2ludGVybmFsLmg9MTE0OT1leHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKTtcbi0tXG5tbS9pbnRlcm5hbC5oLTExNTItXG5tbS9pbnRlcm5hbC5oOjExNTM6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vaW50ZXJuYWwuaC0xMTU0LVx0XHRcdFx0XHQgZ2ZwX3QgbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zODAwPWdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zOTI5LVxubW0vcGFnZV9hbGxvYy5jOjM5MzA6XHRcdFx0aWYgKCFub2RlX3JlY2xhaW0oem9uZS1cdTAwM2V6b25lX3BnZGF0LCBnZnBfbWFzaywgb3JkZXIpKVxubW0vcGFnZV9hbGxvYy5jLTM5MzEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS92bXNjYW4uYz03ODMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzg2NC0gKi9cbm1tL3Ztc2Nhbi5jOjc4NjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc4NjYtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYy03OTA3LVxubW0vdm1zY2FuLmM6NzkwODp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vdm1zY2FuLmMtNzkwOS17XG4tLVxubW0vdm1zY2FuLmMtNzk2NC1cbm1tL3Ztc2Nhbi5jOjc5NjU6XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTc5NjYtXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4tLVxubW0vdm1zY2FuLmMtNzk3Ny1cbm1tL3Ztc2Nhbi5jOjc5Nzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc5NzktXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03OTk4PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy04MDkwLVxubW0vdm1zY2FuLmM6ODA5MTpcdFx0XHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtODA5Mi1cdFx0XHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGgqKgoKT2theSwgc28gYG5vZGVfcmVjbGFpbWAgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgLCByaWdodCB0aGVyZSBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhhdCYjMzk7cyBhICpyZWFsbHkqIGhvdCBwYXRoIGluIHRoZSBrZXJuZWwg4oCTIHBhZ2UgYWxsb2NhdGlvbiBpcyBmdW5kYW1lbnRhbC4gTWFrZXMgc2Vuc2UgaXQmIzM5O3MgcGVyZm9ybWFuY2UtY3JpdGljYWwuIEJ1dCBgbm9kZV9yZWNsYWltYCBpcyBpdHNlbGYgdGhlIGVudHJ5IHBvaW50IGZvciBub2RlIHJlY2xhaW0sIHdoaWNoIG9ubHkgZ2V0cyB0cmlnZ2VyZWQgd2hlbiBgbm9kZV9yZWNsYWltX21vZGVgIGlzIGVuYWJsZWQuIE15IGd1dCBzYXlzIE5VTUEgc3lzdGVtcywgbmF0dXJhbGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlLCB0aG91Z2guIExldCYjMzk7cyBkaWcgaW50byB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gYW5kIHdoZXJlIGBub2RlX3JlY2xhaW1fbW9kZWAgaXMgdHJpZ2dlcmVkLiBJJiMzOTttIHByZXR0eSBzdXJlIGBDT05GSUdfTlVNQWAgaXMgdXN1YWxseSBhIHByZXJlcXVpc2l0ZSwgYnV0IEkgd2FudCB0byBiZSAxMDAlIGNlcnRhaW4uIFRpbWUgdG8gY2hlY2sgYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL2ludGVybmFsLmhgIGFuZCBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub2RlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTE0MT1zdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfZHJhaW5fcmVtb3RlKGludCBjcHUpIHsgfVxuLS1cbm1tL2ludGVybmFsLmgtMTE0NC0jaWZkZWYgQ09ORklHX05VTUFcbm1tL2ludGVybmFsLmg6MTE0NTpleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xubW0vaW50ZXJuYWwuaC0xMTQ2LVxubW0vaW50ZXJuYWwuaDoxMTQ3OmV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vaW50ZXJuYWwuaC0xMTQ4LVx0XHRcdFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcbm1tL2ludGVybmFsLmg9MTE0OT1leHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKTtcbm1tL2ludGVybmFsLmgtMTE1MC0jZWxzZVxubW0vaW50ZXJuYWwuaDoxMTUxOiNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMFxubW0vaW50ZXJuYWwuaC0xMTUyLVxubW0vaW50ZXJuYWwuaDoxMTUzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL2ludGVybmFsLmgtMTE1NC1cdFx0XHRcdFx0IGdmcF90IG1hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9pbnRlcm5hbC5oPTExNTg9c3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXG4tLVxubW0vaW50ZXJuYWwuaC0xMTYzLVxubW0vaW50ZXJuYWwuaDoxMTY0OnN0YXRpYyBpbmxpbmUgYm9vbCBub2RlX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxubW0vaW50ZXJuYWwuaC0xMTY1LXtcbm1tL2ludGVybmFsLmg6MTE2NjpcdC8qIElzIGFueSBub2RlX3JlY2xhaW1fbW9kZSBiaXQgc2V0PyAqL1xubW0vaW50ZXJuYWwuaDoxMTY3Olx0cmV0dXJuIG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiAoUkVDTEFJTV9aT05FfFJFQ0xBSU1fV1JJVEV8UkVDTEFJTV9VTk1BUCk7XG5tbS9pbnRlcm5hbC5oLTExNjgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE5VTUEgYW5kIE5vZGUgUmVjbGFtYXRpb24qKgoKUmlnaHQsIHNvIGBDT05GSUdfTlVNQWAgaXMgKmFic29sdXRlbHkqIHRoZSBsaW5jaHBpbi4gSWYgdGhhdCYjMzk7cyBub3QgZW5hYmxlZCwgYG5vZGVfcmVjbGFpbWAgaXMgZXNzZW50aWFsbHkganVzdCBhIHBsYWNlaG9sZGVyLCBhIHNrZWxldGFsIGZ1bmN0aW9uIHdpdGggbm8gcmVhbCBtZWF0IG9uIGl0cyBib25lcy4gSXQmIzM5O3Mgbm90IGdvaW5nIHRvIGRvIGFueXRoaW5nIHVzZWZ1bCB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIE5VTUEgaW5mcmFzdHJ1Y3R1cmUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZGVwZW5kZW5jeSwgYWxtb3N0IGEgcHJlcmVxdWlzaXRlLgoKTm93LCB0aGF0IGJyaW5ncyB1cCBhIGJyb2FkZXIgcXVlc3Rpb24sIGRvZXNuJiMzOTt0IGl0PyBJZiBgQ09ORklHX05VTUFgIGlzIHRoYXQgY3JpdGljYWwsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBrZXJuZWwgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbnRlcnR3aW5lZCB3aXRoIGBub2RlX3JlY2xhaW1gIGluIGEgc2ltaWxhciBmYXNoaW9uPyBUaGluZ3MgdGhhdCBhcmUgcmVxdWlyZWQsIG9yIHRoYXQgc2lnbmlmaWNhbnRseSBhbHRlciBpdHMgYmVoYXZpb3VyLCBvciB0aGF0IGl0IGRlcGVuZHMgb24gaW4gc29tZSB3YXkuIFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIHdoYXQgZWxzZSBuZWVkcyB0byBiZSBjb25zaWRlcmVkLiBJJiMzOTtkIGJldHRlciBleHBhbmQgbXkgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub2RlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yNTYyPXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtMjU5MC1cdC8qXG5tbS92bXNjYW4uYzoyNTkxOlx0ICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0b1xubW0vdm1zY2FuLmMtMjU5Mi1cdCAqIG1pbl91bm1hcHBlZF9wYWdlczogc2tpcCBmaWxlIHBhZ2VzIGFuZCByZWNsYWltIGFub24gb25seS4gIEFzIHdpdGhcbi0tXG5tbS92bXNjYW4uYz00NzQ5PXN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDc2Ni1cdC8qXG5tbS92bXNjYW4uYzo0NzY3Olx0ICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0byBtaW5fdW5tYXBwZWRfcGFnZXMsXG5tbS92bXNjYW4uYy00NzY4LVx0ICogc28gbGVhdmUgdGhlIGZpbGUgdHlwZSBhbG9uZTsgaXNvbGF0ZV9mb2xpb3MoKSB0aGVuIGZhbGxzIGJhY2sgdG9cbi0tXG5tbS92bXNjYW4uYz02MjcxPXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjI3Mi17XG5tbS92bXNjYW4uYzo2MjczOlx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkO1xubW0vdm1zY2FuLmMtNjI3NC1cdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XG4tLVxubW0vdm1zY2FuLmMtNjI5OS1cbm1tL3Ztc2Nhbi5jOjYzMDA6XHRucl9ub2RlX3JlY2xhaW1lZCA9IHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcbm1tL3Ztc2Nhbi5jLTYzMDEtXG4tLVxubW0vdm1zY2FuLmMtNjMwNC1cdFx0dm1wcmVzc3VyZShzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCB0cnVlLFxubW0vdm1zY2FuLmM6NjMwNTpcdFx0XHQgICBzYy1cdTAwM2Vucl9zY2FubmVkIC0gbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQpO1xubW0vdm1zY2FuLmMtNjMwNi1cbm1tL3Ztc2Nhbi5jOjYzMDc6XHRpZiAobnJfbm9kZV9yZWNsYWltZWQpXG5tbS92bXNjYW4uYy02MzA4LVx0XHRyZWNsYWltYWJsZSA9IHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNjM2OC1cbm1tL3Ztc2Nhbi5jOjYzNjk6XHRpZiAoc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0ocGdkYXQsIG5yX25vZGVfcmVjbGFpbWVkLCBzYykpXG5tbS92bXNjYW4uYy02MzcwLVx0XHRnb3RvIGFnYWluO1xuLS1cbm1tL3Ztc2Nhbi5jPTc3NTY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc3NjgtXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt6b25lX3JlY2xhaW1fbW9kZVwmIzM0Oyxcbm1tL3Ztc2Nhbi5jOjc3Njk6XHRcdC5kYXRhXHRcdD0gXHUwMDI2bm9kZV9yZWNsYWltX21vZGUsXG5tbS92bXNjYW4uYzo3NzcwOlx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKG5vZGVfcmVjbGFpbV9tb2RlKSxcbm1tL3Ztc2Nhbi5jLTc3NzEtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbi0tXG5tbS92bXNjYW4uYz03Nzg4PW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc3OTMtICpcbm1tL3Ztc2Nhbi5jOjc3OTQ6ICogSWYgbm9uLXplcm8gY2FsbCBub2RlX3JlY2xhaW0gd2hlbiB0aGUgbnVtYmVyIG9mIGZyZWUgcGFnZXMgZmFsbHMgYmVsb3dcbm1tL3Ztc2Nhbi5jLTc3OTUtICogdGhlIHdhdGVybWFya3MuXG5tbS92bXNjYW4uYy03Nzk2LSAqL1xubW0vdm1zY2FuLmM6Nzc5NzppbnQgbm9kZV9yZWNsYWltX21vZGUgX19yZWFkX21vc3RseTtcbm1tL3Ztc2Nhbi5jLTc3OTgtXG4tLVxubW0vdm1zY2FuLmMtNzgwNi0vKlxubW0vdm1zY2FuLmM6NzgwNzogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xubW0vdm1zY2FuLmMtNzgwOC0gKiBvY2N1ci5cbi0tXG5tbS92bXNjYW4uYz03ODMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzg0My1cdCAqL1xubW0vdm1zY2FuLmM6Nzg0NDpcdGlmIChub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9VTk1BUClcbm1tL3Ztc2Nhbi5jLTc4NDUtXHRcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XG4tLVxubW0vdm1zY2FuLmMtNzg2NC0gKi9cbm1tL3Ztc2Nhbi5jOjc4NjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc4NjYtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYy03ODcyLVxubW0vdm1zY2FuLmM6Nzg3MzpcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MtXHUwMDNlb3JkZXIsXG5tbS92bXNjYW4uYy03ODc0LVx0XHRcdFx0XHQgICBzYy1cdTAwM2VnZnBfbWFzayk7XG4tLVxubW0vdm1zY2FuLmMtNzkwMi1cbm1tL3Ztc2Nhbi5jOjc5MDM6XHR0cmFjZV9tbV92bXNjYW5fbm9kZV9yZWNsYWltX2VuZChzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE5VTEwpO1xubW0vdm1zY2FuLmMtNzkwNC1cbi0tXG5tbS92bXNjYW4uYy03OTA3LVxubW0vdm1zY2FuLmM6NzkwODp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vdm1zY2FuLmMtNzkwOS17XG4tLVxubW0vdm1zY2FuLmMtNzkxNy1cdFx0LnByaW9yaXR5ID0gTk9ERV9SRUNMQUlNX1BSSU9SSVRZLFxubW0vdm1zY2FuLmM6NzkxODpcdFx0Lm1heV93cml0ZXBhZ2UgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9XUklURSksXG5tbS92bXNjYW4uYzo3OTE5Olx0XHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXHUwMDI2IFJFQ0xBSU1fVU5NQVApLFxubW0vdm1zY2FuLmMtNzkyMC1cdFx0Lm1heV9zd2FwID0gMSxcbi0tXG5tbS92bXNjYW4uYy03OTY0LVxubW0vdm1zY2FuLmM6Nzk2NTpcdHJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBucl9wYWdlcywgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzk2Ni1cdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbi0tXG5tbS92bXNjYW4uYy03OTc3LVxubW0vdm1zY2FuLmM6Nzk3ODpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzk3OS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jPTc5OTg9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTgwOTAtXG5tbS92bXNjYW4uYzo4MDkxOlx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBiYXRjaF9zaXplLCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy04MDkyLVx0XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG1lbW9yeSBtYW5hZ2VtZW50OgoKKipEaWdnaW5nIGludG8gdGhlIE5vZGUgUmVjbGFpbSBNeXN0ZXJ5KioKCkhtbSwgaW50ZXJlc3RpbmcuIFRoZSBmYWN0IHRoYXQgYF9fbm9kZV9yZWNsYWltYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAganVzdCBwaW5nZWQgc29tZXRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNvbm5lY3Rpb24gbW9yZSB0aG9yb3VnaGx5LiBSaWdodCwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIFRpbWUgdG8gZGl2ZSBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29udGV4dCBhbmQgdGhlIGNhbGwuIEkgd2FudCB0byBzZWUgKndoeSogYW5kICpob3cqIGBfX25vZGVfcmVjbGFpbWAgaXMgYmVpbmcgaW52b2tlZCB0aGVyZS4gSXMgdGhpcyBzdGFuZGFyZCBiZWhhdmlvciwgb3IgaXMgdGhpcyBzb21lIG9wdGltaXplZCBwYXRoIG9yLCBoZWF2ZW4gZm9yYmlkLCBhIHBvdGVudGlhbCBidWc/IFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzk5Mj1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzk5Ny1cbm1tL3Ztc2Nhbi5jOjc5OTg6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzk5OS1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODE1MT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MTU2LVxubW0vdm1zY2FuLmM6ODE1NzpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgxNTgtXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE1lbW9yeSBSZWNsYWltaW5nIFRyaWdnZXIqKgoKT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCwgYW5kIGl0JiMzOTtzIHRyaWdnZXJlZCB0aHJvdWdoIGEgc3lzZnMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhlIGByZWNsYWltX3N0b3JlYC4gVGhpcyBtZWFucyBhIHVzZXItc3BhY2UgcHJvY2VzcyBpcyBkaXJlY3RseSByZXF1ZXN0aW5nIG1lbW9yeSByZWNsYWltLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmluc2lkZSogdGhhdCBgcmVjbGFpbV9zdG9yZWAgaGFuZGxlciB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBmbG93LiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvZGUuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG1tL3Ztc2Nhbi5jYCBhbmQgZmluZCB0aGUgYHJlY2xhaW1fc3RvcmVgIGZ1bmN0aW9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyB0aGlzIHVzZXItaW5pdGlhdGVkIHJlY2xhaW0sIGFuZCBJIG5lZWQgdG8gc2VlIHdoYXQgYWN0aW9ucyBpdCB0YWtlcywgYW5kIHdoYXQgY29udGV4dCBpcyBwcm92aWRlZCB0byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcGFyYW1ldGVycyBhcmUgc2V0IGFuZCB3aGF0IGZsYWdzIGFyZSBpbnZvbHZlZC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgdGhlIHBhdGggb2YgZXhlY3V0aW9uIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIHJlY2xhaW0gdHJpZ2dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgxNDg9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTgxNTAtI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbm1tL3Ztc2Nhbi5jOjgxNTE6c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5tbS92bXNjYW4uYy04MTUyLVx0XHRcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5VTUEtUmVsYXRlZCBNZW1vcnkgUmVjbGFpbSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGByZWNsYWltX3N0b3JlYCBhbmQgYG5vZGVfcmVjbGFpbWAgZnVuY3Rpb25zICpyZXF1aXJlKiBgQ09ORklHX05VTUFgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgYnV0IHNvIGZhciwgaXQgbG9va3MgbGlrZSBgQ09ORklHX05VTUFgIGlzIHRoZSBvbmx5IG9uZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYG5vZGVfcmVjbGFpbWAgaXMgdGhlICpzb2xlKiBlbnRyeSBwb2ludCBpbnRvIHRoaXMgcGFydCBvZiB0aGUgc3lzdGVtLiBJIHNlZSB0aGlzIHBhdGNoIG1vZGlmaWVzIGBnZXRfc2Nhbl9jb3VudGAsIGBzY2FuX2ZvbGlvc2AsIGBzaHJpbmtfb25lYCwgYW5kIGBzaHJpbmtfbm9kZV9tZW1jZ3NgLiBUaGVzZSBhbGwgbGVhZCBpbnRvIGBzaHJpbmtfbm9kZWAsIHdoaWNoIGlzICpjZXJ0YWlubHkqIGNhbGxlZCBmcm9tIGBfX25vZGVfcmVjbGFpbWAuIEJ1dCB3YWl0LCB0aGVyZSBhcmUgb3RoZXIgY2FsbGVyczogSSYjMzk7bSBzZWVpbmcgYGtzd2FwZGAsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGFuZCBvdGhlcnMgYXMgd2VsbCwgd2hpY2ggYXJlIHN0YW5kYXJkIGNvbXBvbmVudHMhIAoKSG9sZCBvbi4uLnRoaXMgaXMgaW50ZXJlc3RpbmcuIFRoZSBmbGFncyBgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gLi4uIHRoZXkmIzM5O3JlICpvbmx5KiBzZXQgd2l0aGluIGBub2RlX3JlY2xhaW1gISBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgb2JzZXJ2YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBoZXJlIGlzIGNvcnJlY3QsIHNvIEkmIzM5O2xsIHZlcmlmeSB0aGlzIGFzc2VydGlvbi4gVGhpcyBjb3VsZCBiZSBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGludGVuZGVkIHNjb3BlIGFuZCBiZWhhdmlvdXIgb2YgdGhlc2UgcmVjbGFpbSBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2lwX3NsYWJfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc2PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xuLS1cbm1tL3Ztc2Nhbi5jLTEyMC1cdCAqL1xubW0vdm1zY2FuLmM6MTIxOlx0dW5zaWduZWQgaW50IHNraXBfc2xhYl9yZWNsYWltOjE7XG5tbS92bXNjYW4uYy0xMjItXG4tLVxubW0vdm1zY2FuLmM9NTEyNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTQ4LVxubW0vdm1zY2FuLmM6NTE0OTpcdGlmICghc2MtXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0pXG5tbS92bXNjYW4uYy01MTUwLVx0XHRzaHJpbmtfc2xhYihzYy1cdTAwM2VnZnBfbWFzaywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgbWVtY2csIHNjLVx1MDAzZXByaW9yaXR5KTtcbi0tXG5tbS92bXNjYW4uYz02MTkxPXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjUyLVxubW0vdm1zY2FuLmM6NjI1MzpcdFx0aWYgKCFzYy1cdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSlcbm1tL3Ztc2Nhbi5jLTYyNTQtXHRcdFx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jPTc4NjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy03ODg5LVx0ICpcbm1tL3Ztc2Nhbi5jOjc4OTA6XHQgKiBXaGF0IHRvIHJlY2xhaW0gaXMgZ2F0ZWQgcGVyIHR5cGUgYnkgc2MtXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0gYW5kXG5tbS92bXNjYW4uYy03ODkxLVx0ICogc2MtXHUwMDNlc2tpcF9maWxlX3JlY2xhaW0uXG4tLVxubW0vdm1zY2FuLmM9NzkwOD11bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3Ztc2Nhbi5jLTc5NTgtXHQgKi9cbm1tL3Ztc2Nhbi5jOjc5NTk6XHRzYy5za2lwX3NsYWJfcmVjbGFpbSA9XG5tbS92bXNjYW4uYy03OTYwLVx0XHRub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNjPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBSZWNsYWltIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aHJvdWdoIHRoaXMgbmV3IG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLiBJdCBsb29rcyBsaWtlIHRoZSBgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gIGZsYWdzIGFyZSBvbmx5IGV2ZXIgc2V0IHdpdGhpbiB0aGUgYG5vZGVfcmVjbGFpbWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCBtZWFucyB0aGlzIG5ldyBsb2dpYywgdGhlIHNraXBwaW5nIG9mIHNsYWIgYW5kIGZpbGUgcmVjbGFpbSwgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiBgbm9kZV9yZWNsYWltYCBpcyBzcGVjaWZpY2FsbHkgY2FsbGVkLgoKTm93LCB3aGVyZSAqZG9lcyogYG5vZGVfcmVjbGFpbWAgZ2V0IGNhbGxlZCBmcm9tPyBSaWdodCwgaXTigJlzIGNhbGxlZCBmcm9tIGBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0YCwgYnV0IG9ubHkgd2hlbiBgbm9kZV9yZWNsYWltX21vZGVgIGlzIGVuYWJsZWQuIEFoLCBhbmQgYG5vZGVfcmVjbGFpbV9tb2RlYCwgdGhhdCYjMzk7cyBvdXIgZnJpZW5kLCB0aGUgc3lzY3RsIHZhcmlhYmxlIGB2bS56b25lX3JlY2xhaW1fbW9kZWAuIFNvLCBpZiBgdm0uem9uZV9yZWNsYWltX21vZGVgIGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBuZXcgc2tpcHBpbmcgYmVoYXZpb3IgdGFrZXMgZWZmZWN0LgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGJlY29tZXM6IFdoYXQmIzM5O3MgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYHZtLnpvbmVfcmVjbGFpbV9tb2RlYD8gSWYgaXQmIzM5O3MgemVybywgdGhlbiB0aGUgbmV3IGxvZ2ljIGlzLCBieSBkZWZhdWx0LCAqbm90KiBpbiBwbGF5IHVubGVzcyBzb21lb25lIGV4cGxpY2l0bHkgc2V0cyBpdC4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCBjZXJ0YWluIGFyY2hpdGVjdHVyZXMgb3IgTlVNQSBzZXR1cHMgbWlnaHQgc2V0IGl0IGFzIGEgZGVmYXVsdCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZWZhdWx0cyBhbmQgc2VlIHdoYXTigJlzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzbuKAmXQgZW5hYmxlZCBieSBkZWZhdWx0IG9uIG15IHRlc3QgcGxhdGZvcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfcmVjbGFpbV9tb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaD00Mz1pbnQgYXJjaF91cGRhdGVfY3B1X3RvcG9sb2d5KHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaC01NS0gKiAoaW4gd2hhdGV2ZXIgYXJjaCBzcGVjaWZpYyBtZWFzdXJlbWVudCB1bml0cyByZXR1cm5lZCBieSBub2RlX2Rpc3RhbmNlKCkpXG5pbmNsdWRlL2xpbnV4L3RvcG9sb2d5Lmg6NTY6ICogYW5kIG5vZGVfcmVjbGFpbV9tb2RlIGlzIGVuYWJsZWQgdGhlbiB0aGUgVk0gd2lsbCBvbmx5IGNhbGwgbm9kZV9yZWNsYWltKClcbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaC01Ny0gKiBvbiBub2RlcyB3aXRoaW4gdGhpcyBkaXN0YW5jZS5cbi0tXG5tbS9pbnRlcm5hbC5oPTExNDE9c3RhdGljIGlubGluZSB2b2lkIG1sb2NrX2RyYWluX3JlbW90ZShpbnQgY3B1KSB7IH1cbi0tXG5tbS9pbnRlcm5hbC5oLTExNDQtI2lmZGVmIENPTkZJR19OVU1BXG5tbS9pbnRlcm5hbC5oOjExNDU6ZXh0ZXJuIGludCBub2RlX3JlY2xhaW1fbW9kZTtcbm1tL2ludGVybmFsLmgtMTE0Ni1cbi0tXG5tbS9pbnRlcm5hbC5oPTExNDk9ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayk7XG5tbS9pbnRlcm5hbC5oLTExNTAtI2Vsc2Vcbm1tL2ludGVybmFsLmg6MTE1MTojZGVmaW5lIG5vZGVfcmVjbGFpbV9tb2RlIDBcbm1tL2ludGVybmFsLmgtMTE1Mi1cbi0tXG5tbS9pbnRlcm5hbC5oPTExNjQ9c3RhdGljIGlubGluZSBib29sIG5vZGVfcmVjbGFpbV9lbmFibGVkKHZvaWQpXG5tbS9pbnRlcm5hbC5oLTExNjUte1xubW0vaW50ZXJuYWwuaDoxMTY2Olx0LyogSXMgYW55IG5vZGVfcmVjbGFpbV9tb2RlIGJpdCBzZXQ/ICovXG5tbS9pbnRlcm5hbC5oOjExNjc6XHRyZXR1cm4gbm9kZV9yZWNsYWltX21vZGUgXHUwMDI2IChSRUNMQUlNX1pPTkV8UkVDTEFJTV9XUklURXxSRUNMQUlNX1VOTUFQKTtcbm1tL2ludGVybmFsLmgtMTE2OC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTEwMDQ9c3RhdGljIGJvb2wgY29sbGFwc2Vfc2Nhbl9hYm9ydChpbnQgbmlkLCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEwMDgtXHQvKlxubW0va2h1Z2VwYWdlZC5jOjEwMDk6XHQgKiBJZiBub2RlX3JlY2xhaW1fbW9kZSBpcyBkaXNhYmxlZCwgdGhlbiBubyBleHRyYSBlZmZvcnQgaXMgbWFkZSB0b1xubW0va2h1Z2VwYWdlZC5jLTEwMTAtXHQgKiBhbGxvY2F0ZSBtZW1vcnkgbG9jYWxseS5cbi0tXG5tbS9wYWdlX2FsbG9jLmM9MzgwMD1nZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBhbGxvY19mbGFncyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzg3Ni1cdFx0ICoga3N3YXBkIHdha2V1cHMgb24gb25seSBzb21lIG5vZGVzLiBBdm9pZCBhY2NpZGVudGFsXG5tbS9wYWdlX2FsbG9jLmM6Mzg3NzpcdFx0ICogXCYjMzQ7bm9kZV9yZWNsYWltX21vZGVcJiMzNDstbGlrZSBiZWhhdmlvciBpbiB0aGlzIGNhc2UuXG5tbS9wYWdlX2FsbG9jLmMtMzg3OC1cdFx0ICovXG4tLVxubW0vdm1zY2FuLmM9Nzc1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzc2OC1cdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3pvbmVfcmVjbGFpbV9tb2RlXCYjMzQ7LFxubW0vdm1zY2FuLmM6Nzc2OTpcdFx0LmRhdGFcdFx0PSBcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcbm1tL3Ztc2Nhbi5jOjc3NzA6XHRcdC5tYXhsZW5cdFx0PSBzaXplb2Yobm9kZV9yZWNsYWltX21vZGUpLFxubW0vdm1zY2FuLmMtNzc3MS1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuLS1cbm1tL3Ztc2Nhbi5jPTc3ODg9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXG4tLVxubW0vdm1zY2FuLmMtNzc5Ni0gKi9cbm1tL3Ztc2Nhbi5jOjc3OTc6aW50IG5vZGVfcmVjbGFpbV9tb2RlIF9fcmVhZF9tb3N0bHk7XG5tbS92bXNjYW4uYy03Nzk4LVxuLS1cbm1tL3Ztc2Nhbi5jPTc4MzM9c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03ODQzLVx0ICovXG5tbS92bXNjYW4uYzo3ODQ0Olx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1VOTUFQKVxubW0vdm1zY2FuLmMtNzg0NS1cdFx0bnJfcGFnZWNhY2hlX3JlY2xhaW1hYmxlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9GSUxFX1BBR0VTKTtcbi0tXG5tbS92bXNjYW4uYz03OTA4PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vdm1zY2FuLmMtNzkxNy1cdFx0LnByaW9yaXR5ID0gTk9ERV9SRUNMQUlNX1BSSU9SSVRZLFxubW0vdm1zY2FuLmM6NzkxODpcdFx0Lm1heV93cml0ZXBhZ2UgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9XUklURSksXG5tbS92bXNjYW4uYzo3OTE5Olx0XHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXHUwMDI2IFJFQ0xBSU1fVU5NQVApLFxubW0vdm1zY2FuLmMtNzkyMC1cdFx0Lm1heV9zd2FwID0gMSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWNsYWltIFBhdGgqKgoKT2theSwgc28gdGhlIGBub2RlX3JlY2xhaW1fbW9kZWAgZGVmYXVsdHMgdG8gMCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIHN5emthbGxlciBjYW4gcmVhZGlseSBtYW5pcHVsYXRlIHRoaXMgdGhyb3VnaCBgdm0uem9uZV9yZWNsYWltX21vZGVgLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5LiBJIHNlZSB0aGF0IGBub2RlX3JlY2xhaW1gIGdldHMgdHJpZ2dlcmVkIHdpdGhpbiBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAgd2hlbiBgbm9kZV9yZWNsYWltX2VuYWJsZWQoKWAgcmV0dXJucyB0cnVlLiBBbmQgYG5vZGVfcmVjbGFpbV9lbmFibGVkKClgIGlzIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGJpdHMgc2V0IGluIGBub2RlX3JlY2xhaW1fbW9kZWAuIFRoZXJlZm9yZSwgYnkgc2V0dGluZyBgdm0uem9uZV9yZWNsYWltX21vZGVgLCBzeXprYWxsZXIgY2FuIGZvcmNlIGBub2RlX3JlY2xhaW1gIHRvIGV4ZWN1dGUgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbi4gVGhhdCYjMzk7cyBhIGNsZWFyIHBhdGggdG8gdGVzdGluZyBhbmQgZXhwbG9pdGluZyB0aGlzIGJlaGF2aW9yLgoKTXkgaW1tZWRpYXRlIGZvY3VzIG5vdyBzaGlmdHMgdG8gdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gYG5vZGVfcmVjbGFpbWAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIGFzIEkgc3VzcGVjdGVkLiBJdCBjYWxscyBgc2hyaW5rX25vZGVgLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGEgY2FzY2FkZSB0aHJvdWdoIHRoZSBzdGF0aWMgZnVuY3Rpb25zOiBgZ2V0X3NjYW5fY291bnRgLCBgc2Nhbl9mb2xpb3NgIGFsbCBldmVudHVhbGx5IGZlZWRpbmcgaW50byBgc2hyaW5rX2FjdGl2ZV9saXN0YCBvciBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLiBgc2hyaW5rX29uZWAgYW5kIGBzaHJpbmtfbm9kZV9tZW1jZ3NgIGFyZSBhbHNvIHN0YXRpYy4gU2luY2UgaXQmIzM5O3MgdGhlIG9ubHkgbm9uLXN0YXRpYyBmdW5jdGlvbiwgYG5vZGVfcmVjbGFpbWAgaXMgZGVmaW5pdGVseSB0aGUgdGFyZ2V0LgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbm9kZV9yZWNsYWltYCBpcyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQmIzM5O3MgZGVjbGFyZWQgZ2xvYmFsbHkgaW4gYG1tL2ludGVybmFsLmhgLCBzbyB0aGF0JiMzOTtzIGdvb2QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlLiBObywgdGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYG5vZGVfcmVjbGFpbWAgYW5kIHN0YXRpYyBmdW5jdGlvbnMgaW4gYG1tL3Ztc2Nhbi5jYC4gU28gaXQmIzM5O3MgY29uZmlybWVkLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBDT05GSUdfTlVNQWAuIFN5emthbGxlciB1c3VhbGx5IGVuYWJsZXMgTlVNQSBieSBkZWZhdWx0LCBidXQgSSBzaG91bGQgZXhwbGljaXRseSBsaXN0IGl0IGluIGBFbmFibGVDb25maWdzYCBqdXN0IHRvIGJlIGNlcnRhaW4uCgpPa2F5LCBsZXQgbWUganVzdCBjb25maXJtIHRoYXQgYG5vZGVfcmVjbGFpbWAgaXMgdGhlIHNvbGUgbm9uLXN0YXRpYyBmdW5jdGlvbiBleHBvc2VkIGluIHRoZSByZWxldmFudCBjb2RlLiBZZXAsIGl0IGlzLgoKSG9sZCBvbiBhIHNlY29uZC4gRG9lcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYWxzbyBhY3QgYXMgYW4gZW50cnkgcG9pbnQgdG8gYF9fbm9kZV9yZWNsYWltYD8gTm8sIGl0IGNhbGxzIGBfX25vZGVfcmVjbGFpbWAgZGlyZWN0bHkuIFNvIGBub2RlX3JlY2xhaW1gIGlzIGluZGVlZCB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIEkgd2FudCB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ub2RlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ODMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzg2NC0gKi9cbm1tL3Ztc2Nhbi5jOjc4NjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc4NjYtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03OTA4PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vdm1zY2FuLmMtNzk2NC1cbm1tL3Ztc2Nhbi5jOjc5NjU6XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTc5NjYtXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4tLVxubW0vdm1zY2FuLmMtNzk3Ny1cbm1tL3Ztc2Nhbi5jOjc5Nzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc5NzktXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03OTk4PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy04MDkwLVxubW0vdm1zY2FuLmM6ODA5MTpcdFx0XHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtODA5Mi1cdFx0XHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTAwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgUmUtZGVjbGFyYXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgX19ub2RlX3JlY2xhaW1gIGRlZmluZWQgdHdpY2U/IFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgc3VzcGVjdC4gV2FpdCwgbm8sIGl0IGxvb2tzIGxpa2Ugb25lIG9mIHRoZW0gaXMganVzdCBhIGZvcndhcmQgZGVjbGFyYXRpb24sIHBlcmhhcHMgZm9yIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzIGJlZm9yZSBqdW1waW5nIHRvIGNvbmNsdXNpb25zLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYnkgdGFraW5nIGEgcGVlayBhdCBsaW5lIDc5NzguIFRoYXQgc2hvdWxkIGNsYXJpZnkgdGhlIHNpdHVhdGlvbiBhbmQgcHJldmVudCBtZSBmcm9tIGdvaW5nIGRvd24gdGhlIHdyb25nIGRlYnVnZ2luZyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3OTcwOlx0XHRlbHNlXG43OTcxOlx0XHRcdGNvdW50X3ZtX2V2ZW50KFBHU0NBTl9aT05FX1JFQ0xBSU1fRkFJTEVEKTtcbjc5NzI6XHRcbjc5NzM6XHRcdHJldHVybiByZXQ7XG43OTc0Olx0fVxuNzk3NTpcdFxuNzk3NjpcdCNlbHNlXG43OTc3Olx0XG43OTc4Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbjc5Nzk6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuNzk4MDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuNzk4MTpcdHtcbjc5ODI6XHRcdHJldHVybiAwO1xuNzk4MzpcdH1cbjc5ODQ6XHRcbjc5ODU6XHQjZW5kaWZcbjc5ODY6XHRcbjc5ODc6XHRlbnVtIHtcbjc5ODg6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxuNzk4OTpcdFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXG43OTkwOlx0XHRNRU1PUllfUkVDTEFJTV9OVUxMLFxuNzk5MTpcdH07XG43OTkyOlx0c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuNzk5MzpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcJiMzNDtzd2FwcGluZXNzPSVkXCYjMzQ7fSxcbjc5OTQ6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFwmIzM0O3N3YXBwaW5lc3M9bWF4XCYjMzQ7fSxcbjc5OTU6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fTlVMTCwgTlVMTCB9LFxuNzk5NjpcdH07XG43OTk3Olx0XG43OTk4Olx0aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuNzk5OTpcdFx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5VTUEtUmVsYXRlZCBNZW1vcnkgUmVjbGFpbSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBfX25vZGVfcmVjbGFpbWAgaXMgZXNzZW50aWFsbHkgYSBwbGFjZWhvbGRlciwgb3Igc3R1YiwgaWYgYENPTkZJR19OVU1BYCBpc24mIzM5O3QgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZTsgbm8gTlVNQSwgbm8gbm9kZS1zcGVjaWZpYyByZWNsYWltLiBCdXQgd2FpdC4uLiBJJiMzOTttIGFsc28gc2VlaW5nIHRoaXMgc2FtZSBzdHViIGRlZmluaXRpb24gZm9yIGBub2RlX3JlY2xhaW1gIHdpdGhpbiBgbW0vaW50ZXJuYWwuaGAuIENvbmZ1c2luZywgYnV0IHRoZSBwb2ludCBpcyBjbGVhciwgaXQgZG9lcyBub3RoaW5nIHdoZW4gTlVNQSBpcyBub3QgY29uZmlndXJlZC4KCk5vdywgbXkgbWluZCBnb2VzIHRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhpcyBzZWVtcyB0byBiZSAqb3V0c2lkZSogdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZvciBgQ09ORklHX05VTUFgLiBIb2xkIG9uLi4uIHllcywgdGhhdCYjMzk7cyByaWdodC4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGF2YWlsYWJsZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGhhdmUgTlVNQSBlbmFibGVkLiBUaGF0IGNhbiYjMzk7dCBiZSByaWdodCwgY2FuIGl0PwoKU28gaWYgTlVNQSBpc24mIzM5O3QgZW5hYmxlZCwgYF9fbm9kZV9yZWNsYWltYCBpcyBqdXN0IHRoYXQgc3R1YiBmdW5jdGlvbiwgcmV0dXJuaW5nIDAuIFRoYXQgbXVzdCBtZWFuIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgd2hlbiBOVU1BIGlzIG5vdCBwcmVzZW50LCB3aWxsIGVuZCB1cCBjYWxsaW5nIHRoYXQgc3R1YiBhbmQganVzdCByZXR1cm5pbmcgemVyby4gSXQgaXMgZXNzZW50aWFsbHkgYSBuby1vcCBpbiB0aGF0IGNhc2UuIEkmIzM5O20gd29uZGVyaW5nIHdoeSB3ZSBkZWZpbmUgdGhlIGZ1bmN0aW9uIGlmIGl0IGhhcyBubyBmdW5jdGlvbmFsaXR5LgoKV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNhbGxlZCBmcm9tIGByZWNsYWltX3N0b3JlYCwgaXNuJiMzOTt0IGl0PyBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgaG93IGByZWNsYWltX3N0b3JlYCBpcyBkZWZpbmVkLCBzaW5jZSB0aGF0IGlzIHVuZGVyIHRoZSBgc3lzZnNgIGFuZCBgTlVNQWAgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCwgYnV0IHdhaXQsIGByZWNsYWltX3N0b3JlYCBpcyBkZWZpbmVkIGJ5IHRob3NlIGNvbmRpdGlvbnMhIEkgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgYWxsIG9mIHRoaXMgd29ya3MsIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ODE0NTpcdFx0XHRjb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdTQ0FOTkVELCBwZ3NjYW5uZWQpO1xuODE0NjpcdFx0fVxuODE0NzpcdH1cbjgxNDg6XHRFWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XG44MTQ5Olx0XG44MTUwOlx0I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbjgxNTE6XHRzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbjgxNTI6XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuODE1MzpcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG44MTU0Olx0e1xuODE1NTpcdFx0aW50IHJldCwgbmlkID0gZGV2LVx1MDAzZWlkO1xuODE1NjpcdFxuODE1NzpcdFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xuODE1ODpcdFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuODE1OTpcdH1cbjgxNjA6XHRcbjgxNjE6XHRzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XG44MTYyOlx0aW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbjgxNjM6XHR7XG44MTY0Olx0XHRyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKFx1MDAyNm5vZGUtXHUwMDNlZGV2LCBcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyB0aGUgZmlyc3QgcGVyc29uIGFuZCBwcm92aWRpbmcgYSAmIzM0O2Z1bHNvbWUmIzM0OyBleHBsYW5hdGlvbjoKCioqTmF2aWdhdGluZyBOVU1BLUF3YXJlIFJlY2xhaW0gTG9naWMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGByZWNsYWltX3N0b3JlYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05VTUFgLiBUaGF0JiMzOTtzIG5vdCB1bmV4cGVjdGVkOyBOVU1BIHN5c3RlbXMgb2Z0ZW4gaGF2ZSBzcGVjaWFsaXplZCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzLCBzbyB0aGUgY29kZSB3b3VsZCBiZSBkaWZmZXJlbnQuIEl0IG1ha2VzIHNlbnNlIHRoYXQgcmVjbGFpbSBmdW5jdGlvbnMgd291bGQgYmUgdGllZCB0byB0aGF0LiBIb3dldmVyLi4uICp0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBkaWcgZGVlcGVyLiogVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBgcmVjbGFpbV9zdG9yZWAgaXMgYWxzbyBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBOVU1BIGNvbnRleHQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZSBmb3IgdGhlc2UgJiMzNDtvdGhlciYjMzQ7IGNhbGxzIHRvIGVuc3VyZSB0aGUgbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kgaGFuZGxlcyBib3RoIE5VTUEgYW5kIG5vbi1OVU1BIHNjZW5hcmlvcyBwcm9wZXJseS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBjb2RlJiMzOTtzIHJvYnVzdG5lc3MuIEFyZSB0aGVyZSBzcGVjaWZpYyBzaXR1YXRpb25zLCBsaWtlIG9mZmxpbmluZyBub2RlcywgdGhhdCB1c2UgdGhlIHNoYXJlZCBjb2RlPyBJcyB0aGVyZSBhIHN1YnRsZSBidWcgbHVya2luZyBkdWUgdG8gdGhpcyBkdWFsaXR5PyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aG9zZSBjcm9zcy1jYWxscyBhbmQgdW5kZXJzdGFuZCB0aGVpciBwdXJwb3NlLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIGdyYXBocyBhbmQgZmlndXJlIG91dCBob3cgdGhleSByZWxhdGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD02OTk9ZXh0ZXJuIHZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pO1xubW0vaW50ZXJuYWwuaDo3MDA6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vaW50ZXJuYWwuaC03MDEtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTA3Mj1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA3Ny1cbm1tL21lbWNvbnRyb2wuYzo1MDc4Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcbm1tL21lbWNvbnRyb2wuYy01MDc5LVx0aWYgKHJldClcbi0tXG5tbS92bXNjYW4uYz03OTkyPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03OTk3LVxubW0vdm1zY2FuLmM6Nzk5ODppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03OTk5LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYz04MTUxPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm1tL3Ztc2Nhbi5jLTgxNTYtXG5tbS92bXNjYW4uYzo4MTU3Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtODE1OC1cdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0LCB0aGlua2luZyBsaWtlIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBSZWNsYW1hdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkgc2VlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBiZWluZyBpbnZva2VkIGZyb20gYG1lbW9yeV9yZWNsYWltYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyB0aGUgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlIGF0IHBsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoaXMgcHJvYWN0aXZlIHJlY2xhbWF0aW9uLCBhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdHJpZ2dlcmVkIGZyb20uCgpOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpdHNlbGYuIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBtbS92bXNjYW4uY2AgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTttIGJldHRpbmcgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gaXMgaW1wbGVtZW50ZWQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCBwYWdlcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5OTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc5OTg6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG43OTk5Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuODAwMDpcdHtcbjgwMDE6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjgwMDI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjgwMDM6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG44MDA0Olx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG44MDA1Olx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG44MDA2Olx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG44MDA3Olx0XG44MDA4Olx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuODAwOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjgwMTA6XHRcbjgwMTE6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG44MDEyOlx0XG44MDEzOlx0XHRvbGRfYnVmID0gYnVmO1xuODAxNDpcdFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcbjgwMTU6XHRcdGlmIChidWYgPT0gb2xkX2J1ZilcbjgwMTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG44MDE3Olx0XG44MDE4Olx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuODAxOTpcdFxuODAyMDpcdFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcdTAwMjZidWYsIFwmIzM0OyBcJiMzNDspKSAhPSBOVUxMKSB7XG44MDIxOlx0XHRcdGlmICghc3RybGVuKHN0YXJ0KSlcbjgwMjI6XHRcdFx0XHRjb250aW51ZTtcbjgwMjM6XHRcdFx0c3dpdGNoIChtYXRjaF90b2tlbihzdGFydCwgdG9rZW5zLCBhcmdzKSkge1xuODAyNDpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XG44MDI1Olx0XHRcdFx0aWYgKG1hdGNoX2ludChcdTAwMjZhcmdzWzBdLCBcdTAwMjZzd2FwcGluZXNzKSlcbjgwMjY6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuODAyNzpcdFx0XHRcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxuODAyODpcdFx0XHRcdCAgICBzd2FwcGluZXNzIFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcbjgwMjk6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuODAzMDpcdFx0XHRcdGJyZWFrO1xuODAzMTpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxuODAzMjpcdFx0XHRcdHN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTtcbjgwMzM6XHRcdFx0XHRicmVhaztcbjgwMzQ6XHRcdFx0ZGVmYXVsdDpcbjgwMzU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjgwMzY6XHRcdFx0fVxuODAzNzpcdFx0fVxuODAzODpcdFxuODAzOTpcdFx0d2hpbGUgKG5yX3JlY2xhaW1lZCBcdTAwM2MgbnJfdG9fcmVjbGFpbSkge1xuODA0MDpcdFx0XHQvKiBXaWxsIGNvbnZlcmdlIG9uIHplcm8sIGJ1dCByZWNsYWltIGVuZm9yY2VzIGEgbWluaW11bSAqL1xuODA0MTpcdFx0XHR1bnNpZ25lZCBsb25nIGJhdGNoX3NpemUgPSAobnJfdG9fcmVjbGFpbSAtIG5yX3JlY2xhaW1lZCkgLyA0O1xuODA0MjpcdFx0XHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcbjgwNDM6XHRcbjgwNDQ6XHRcdFx0LypcbjgwNDU6XHRcdFx0ICogUmV0dXJuIC1FUkVTVEFSVFNZUyB0byBhbGxvdyB0aGUgZnJlZXplciB0byBpbnRlcnJ1cHQgdGhlXG44MDQ2Olx0XHRcdCAqIHRhc2suIFRoZSBzeXNjYWxsIHdpbGwgYmUgdHJhbnNwYXJlbnRseSByZXN0YXJ0ZWQgdXBvblxuODA0NzpcdFx0XHQgKiByZXN1bWUuIEZvciByZWFsIHNpZ25hbHMsIGl0IGVpdGhlciByZXN0YXJ0cyB0aGUgc3lzY2FsbFxuODA0ODpcdFx0XHQgKiAoaWYgU0FfUkVTVEFSVCBpcyBzZXQpIG9yIGlzIGNvbnZlcnRlZCB0byAtRUlOVFIgYnkgdGhlXG44MDQ5Olx0XHRcdCAqIHNpZ25hbCBsYXllci5cbjgwNTA6XHRcdFx0ICovXG44MDUxOlx0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbjgwNTI6XHRcdFx0XHRyZXR1cm4gLUVSRVNUQVJUU1lTO1xuODA1MzpcdFxuODA1NDpcdFx0XHQvKiBjZ3JvdXBfcm1kaXIoKSB3YWl0cyBmb3IgdXMgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC4gKi9cbjgwNTU6XHRcdFx0aWYgKG1lbWNnIFx1MDAyNlx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpXG44MDU2Olx0XHRcdFx0cmV0dXJuIC1FQUdBSU47XG44MDU3Olx0XG44MDU4Olx0XHRcdC8qXG44MDU5Olx0XHRcdCAqIFRoaXMgaXMgdGhlIGZpbmFsIGF0dGVtcHQsIGRyYWluIHBlcmNwdSBscnUgY2FjaGVzIGluIHRoZVxuODA2MDpcdFx0XHQgKiBob3BlIG9mIGludHJvZHVjaW5nIG1vcmUgZXZpY3RhYmxlIHBhZ2VzLlxuODA2MTpcdFx0XHQgKi9cbjgwNjI6XHRcdFx0aWYgKCFucl9yZXRyaWVzKVxuODA2MzpcdFx0XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG44MDY0Olx0XG44MDY1Olx0XHRcdGlmIChtZW1jZykge1xuODA2NjpcdFx0XHRcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XG44MDY3Olx0XG44MDY4Olx0XHRcdFx0cmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCB8XG44MDY5Olx0XHRcdFx0XHRcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XG44MDcwOlx0XHRcdFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZyxcbjgwNzE6XHRcdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG44MDcyOlx0XHRcdFx0XHRcdFx0IHJlY2xhaW1fb3B0aW9ucyxcbjgwNzM6XHRcdFx0XHRcdFx0XHQgc3dhcHBpbmVzcyA9PSAtMSA/IE5VTEwgOiBcdTAwMjZzd2FwcGluZXNzKTtcbjgwNzQ6XHRcdFx0fSBlbHNlIHtcbjgwNzU6XHRcdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xuODA3NjpcdFx0XHRcdFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXG44MDc3Olx0XHRcdFx0XHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXG44MDc4Olx0XHRcdFx0XHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFx1MDAyNnN3YXBwaW5lc3MsXG44MDc5Olx0XHRcdFx0XHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXG44MDgwOlx0XHRcdFx0XHQubWF5X3dyaXRlcGFnZSA9IDEsXG44MDgxOlx0XHRcdFx0XHQubnJfdG9fcmVjbGFpbSA9IG1heChiYXRjaF9zaXplLCBTV0FQX0NMVVNURVJfTUFYKSxcbjgwODI6XHRcdFx0XHRcdC5tYXlfdW5tYXAgPSAxLFxuODA4MzpcdFx0XHRcdFx0Lm1heV9zd2FwID0gMSxcbjgwODQ6XHRcdFx0XHRcdC5wcm9hY3RpdmUgPSAxLFxuODA4NTpcdFx0XHRcdH07XG44MDg2Olx0XG44MDg3Olx0XHRcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCxcbjgwODg6XHRcdFx0XHRcdFx0XHQgIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKSlcbjgwODk6XHRcdFx0XHRcdHJldHVybiAtRUJVU1k7XG44MDkwOlx0XG44MDkxOlx0XHRcdFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFx1MDAyNnNjKTtcbjgwOTI6XHRcdFx0XHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG44MDkzOlx0XHRcdH1cbjgwOTQ6XHRcbjgwOTU6XHRcdFx0aWYgKCFyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFucl9yZXRyaWVzLS0pXG44MDk2Olx0XHRcdFx0cmV0dXJuIC1FQUdBSU47XG44MDk3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVjbGFpbWluZyBNZW1vcnk6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIGJlaW5nIHJlY2xhaW1lZCwgc3BlY2lmaWNhbGx5IHdpdGggYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBJdCBhcHBlYXJzIHRoYXQgd2hlbiBhIGBwZ2RhdGAgKHBhZ2UgZGF0YSBzdHJ1Y3R1cmUpIGlzIGF2YWlsYWJsZSDigJMgbGlrZSB3aGVuIHdlJiMzOTtyZSB1c2luZyB0aGUgc3lzZnMgaW50ZXJmYWNlIGByZWNsYWltX3N0b3JlYCDigJMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGNhbGxzIGBfX25vZGVfcmVjbGFpbWAgZGlyZWN0bHkuIFRoYXQgbWFrZXMgc2Vuc2UsIGluIHByaW5jaXBsZSwgZm9yIGVmZmljaWVudCBub2RlLWxldmVsIHJlY2xhaW0uCgpCdXQgaGFuZyBvbiBhIHNlY29uZC4uLnNvbWV0aGluZyBzZWVtcyBvZmYuIEkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYF9fbm9kZV9yZWNsYWltYCBkb2VzbiYjMzk7dCBzZWVtIHRvIHNldCB0aG9zZSBmbGFncyDigJMgYHNraXBfc2xhYl9yZWNsYWltYCBvciBgc2tpcF9maWxlX3JlY2xhaW1gLiBUaG9zZSBhcmUgY3JpdGljYWwgZm9yIGNvbnRyb2xsaW5nIHdoYXQgZ2V0cyByZWNsYWltZWQhIE5vdywgSSBkaXN0aW5jdGx5IHJlbWVtYmVyIHRoYXQgdGhvc2UgZmxhZ3MgYXJlIGFjdHVhbGx5IHNldCBieSBgbm9kZV9yZWNsYWltYC4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBmdW5jdGlvbiB0byBiZSBjZXJ0YWluLiBKdXN0IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSB0aGlzIGlzIHRoZSBhcHByb3ByaWF0ZSBwYXRoLiBUaGlzIGlzIGltcG9ydGFudCBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBhcmUgbm90IHNraXBwaW5nIGNydWNpYWwgc3RlcHMgaW4gb3VyIHJlY2xhbWF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc5MDg6XHR1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuNzkwOTpcdHtcbjc5MTA6XHRcdHVuc2lnbmVkIGxvbmcgcmV0O1xuNzkxMTpcdFx0LyogTWluaW11bSBwYWdlcyBuZWVkZWQgaW4gb3JkZXIgdG8gc3RheSBvbiBub2RlICovXG43OTEyOlx0XHRjb25zdCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG43OTEzOlx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xuNzkxNDpcdFx0XHQubnJfdG9fcmVjbGFpbSA9IG1heChucl9wYWdlcywgU1dBUF9DTFVTVEVSX01BWCksXG43OTE1Olx0XHRcdC5nZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spLFxuNzkxNjpcdFx0XHQub3JkZXIgPSBvcmRlcixcbjc5MTc6XHRcdFx0LnByaW9yaXR5ID0gTk9ERV9SRUNMQUlNX1BSSU9SSVRZLFxuNzkxODpcdFx0XHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1dSSVRFKSxcbjc5MTk6XHRcdFx0Lm1heV91bm1hcCA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1VOTUFQKSxcbjc5MjA6XHRcdFx0Lm1heV9zd2FwID0gMSxcbjc5MjE6XHRcdFx0LnJlY2xhaW1faWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spLFxuNzkyMjpcdFx0fTtcbjc5MjM6XHRcbjc5MjQ6XHRcdC8qXG43OTI1Olx0XHQgKiBtaW5fdW5tYXBwZWRfcGFnZXMgYW5kIG1pbl9zbGFiX3BhZ2VzIG9ubHkgZ2F0ZSBmaWxlIGFuZCBzbGFiLlxuNzkyNjpcdFx0ICogQmFpbCBvdXQgb25seSB3aGVuIGJvdGggYXJlIHVuZGVyIHRoZWlyIGxpbWl0cyBhbmQgYW5vbiBjYW5ub3Rcbjc5Mjc6XHRcdCAqIGJlIHJlY2xhaW1lZCBlaXRoZXIsIHNvIHdlIGRvIG5vdCBza2lwIHJlY2xhaW1hYmxlIGFub24uXG43OTI4Olx0XHQgKi9cbjc5Mjk6XHRcdGlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXHUwMDNjPSBwZ2RhdC1cdTAwM2VtaW5fdW5tYXBwZWRfcGFnZXMgXHUwMDI2XHUwMDI2XG43OTMwOlx0XHQgICAgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzYz1cbjc5MzE6XHRcdCAgICBwZ2RhdC1cdTAwM2VtaW5fc2xhYl9wYWdlcyBcdTAwMjZcdTAwMjZcbjc5MzI6XHRcdCAgICAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBcdTAwMjZzYykpXG43OTMzOlx0XHRcdHJldHVybiAwO1xuNzkzNDpcdFxuNzkzNTpcdFx0Lypcbjc5MzY6XHRcdCAqIERvIG5vdCBzY2FuIGlmIHRoZSBhbGxvY2F0aW9uIHNob3VsZCBub3QgYmUgZGVsYXllZC5cbjc5Mzc6XHRcdCAqL1xuNzkzODpcdFx0aWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykgfHwgKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbjc5Mzk6XHRcdFx0cmV0dXJuIDA7XG43OTQwOlx0XG43OTQxOlx0XHQvKlxuNzk0MjpcdFx0ICogT25seSBydW4gbm9kZSByZWNsYWltIG9uIHRoZSBsb2NhbCBub2RlIG9yIG9uIG5vZGVzIHRoYXQgZG8gbm90XG43OTQzOlx0XHQgKiBoYXZlIGFzc29jaWF0ZWQgcHJvY2Vzc29ycy4gVGhpcyB3aWxsIGZhdm9yIHRoZSBsb2NhbCBwcm9jZXNzb3Jcbjc5NDQ6XHRcdCAqIG92ZXIgcmVtb3RlIHByb2Nlc3NvcnMgYW5kIHNwcmVhZCBvZmYgbm9kZSBtZW1vcnkgYWxsb2NhdGlvbnNcbjc5NDU6XHRcdCAqIGFzIHdpZGUgYXMgcG9zc2libGUuXG43OTQ2Olx0XHQgKi9cbjc5NDc6XHRcdGlmIChub2RlX3N0YXRlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIE5fQ1BVKSBcdTAwMjZcdTAwMjYgcGdkYXQtXHUwMDNlbm9kZV9pZCAhPSBudW1hX25vZGVfaWQoKSlcbjc5NDg6XHRcdFx0cmV0dXJuIDA7XG43OTQ5Olx0XG43OTUwOlx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncykpXG43OTUxOlx0XHRcdHJldHVybiAwO1xuNzk1MjpcdFxuNzk1MzpcdFx0Lypcbjc5NTQ6XHRcdCAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGVcbjc5NTU6XHRcdCAqIHNsYWIgb3IgdW5tYXBwZWQgcGFnZSBjYWNoZSBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IGl0cyBsaW1pdCwgbGVhdmVcbjc5NTY6XHRcdCAqIHRoYXQgdHlwZSBhbG9uZSBldmVuIGlmIHRoZSBvdGhlciB0eXBlIHRyaXBwZWQgdGhlIGdhdGUgYW5kIGJyb3VnaHRcbjc5NTc6XHRcdCAqIHVzIGludG8gbm9kZSByZWNsYWltLlxuNzk1ODpcdFx0ICovXG43OTU5Olx0XHRzYy5za2lwX3NsYWJfcmVjbGFpbSA9XG43OTYwOlx0XHRcdG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2M9XG43OTYxOlx0XHRcdHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzO1xuNzk2MjpcdFx0c2Muc2tpcF9maWxlX3JlY2xhaW0gPVxuNzk2MzpcdFx0XHRub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXHUwMDNjPSBwZ2RhdC1cdTAwM2VtaW5fdW5tYXBwZWRfcGFnZXM7XG43OTY0Olx0XG43OTY1Olx0XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKTtcbjc5NjY6XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbjc5Njc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMzcKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogNTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgY29ycmVjdDogYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCBhcmUgKm9ubHkqIHNldCB3aXRoaW4gdGhlIGBub2RlX3JlY2xhaW1gIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIGBub2RlX3JlY2xhaW1gIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIHRoaXMgbmV3IGxvZ2ljIHRvIGJlIGFjdGl2YXRlZC4gSSBrbm93IGBub2RlX3JlY2xhaW1gIGlzIGludm9rZWQgZnJvbSBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAgd2hlbiBgbm9kZV9yZWNsYWltX21vZGVgIGlzIGFjdGl2ZSwgd2hpY2ggaXRzZWxmIGlzIGVuYWJsZWQgYnkgc2V0dGluZyBgdm0uem9uZV9yZWNsYWltX21vZGVgIHZpYSB0aGUgc3lzY3RsIGludGVyZmFjZS4gQ3J1Y2lhbGx5LCBgQ09ORklHX05VTUFgIGlzIGVzc2VudGlhbDsgd2l0aG91dCBpdCwgYG5vZGVfcmVjbGFpbWAgaXMgZWl0aGVyIG5vdCBjb21waWxlZCBvciBpcyBhIHN0dWIuCgpUaGVyZWZvcmUsIG15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgYG5vZGVfcmVjbGFpbWAgc3ltYm9sLiBJ4oCZbSBjb25maWRlbnQgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSB0YXJnZXQgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYG5vZGVfcmVjbGFpbWAgaXMgaW5kZWVkIG5vdCBzdGF0aWMgYW5kIGlzIGEgdmFsaWQgZm9jdXMgc3ltYm9sLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEkgbm90ZWQgYENPTkZJR19TWVNGU2AgaXMgcmVxdWlyZWQgZm9yIGByZWNsYWltX3N0b3JlYCwgYnV0IHNpbmNlIGBub2RlX3JlY2xhaW1gIGlzIGNhbGxlZCBmcm9tIGBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0YCwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGBDT05GSUdfU1lTRlNgIGlzbuKAmXQgKnN0cmljdGx5KiBuZWVkZWQgZm9yIHRyaWdnZXJpbmcgdGhpcyBzcGVjaWZpYyBuZXcgYmVoYXZpb3VyOyBpdOKAmXMgcHJpbWFyaWx5IGRyaXZlbiBieSBgQ09ORklHX05VTUFgLiBJJiMzOTttIGdvaW5nIHRvIHJlaXRlcmF0ZSB0aGF0IGBub2RlX3JlY2xhaW1gIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgb3IgZGlyZWN0bHkgY2FsbGluZyB0aGUgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9ucyB3aXRoIHRoZSBuZXcgZmxhZ3MuCgpOb3csIGEgY3J1Y2lhbCBjb25zaWRlcmF0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIFFFTVUgY2FuIGVtdWxhdGUgTlVNQSBub2RlcywgYW5kIHN5emthbGxlciBjYW4gcHJvZ3JhbW1hdGljYWxseSBzZXQgYHZtLnpvbmVfcmVjbGFpbV9tb2RlYCB0byB0cmlnZ2VyIHRoZSBwYWdlIGFsbG9jYXRpb24uIFRoaXMgY29uZmlybXMgdGhhdCB0aGlzIGxvZ2ljICppcyogcmVhY2hhYmxlIGFuZCBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuCgpUbyBzdW1tYXJpemUgbXkgZmluZGluZ3M6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZQoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IHJlY2xhaW0sIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBsb2dpYyB0byBza2lwIHNsYWIgb3IgZmlsZSByZWNsYWltIGR1cmluZyBub2RlIHJlY2xhaW0gd2hlbiBhc3NvY2lhdGVkIGxpbWl0cyBhcmVuJiMzOTt0IGV4Y2VlZGVkLiBUaGlzIGlzIGFjY2Vzc2libGUgdmlhIHBhZ2UgYWxsb2NhdGlvbiB3aGVuIE5VTUEgbm9kZSByZWNsYWltIGlzIGVuYWJsZWQgKGUuZy4sIHRocm91Z2ggYHZtLnpvbmVfcmVjbGFpbV9tb2RlYCkuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgWyYjMzQ7bm9kZV9yZWNsYWltJiMzNDtdYAoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtOVU1BJiMzNDtdYAoKSnVzdCBhIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm0gYG5vZGVfcmVjbGFpbWAgaXMgbm90IHN0YXRpYyBvciBpbmxpbmUgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgYHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpYCwgc28gaXQmIzM5O3MgZ2xvYmFsLiBFeGNlbGxlbnQuCgpGaW5hbGx5LCB3aGlsZSBgX19ub2RlX3JlY2xhaW1gIGlzIGFsc28gcGFydCBvZiB0aGlzIGNvZGUsIGl0JiMzOTtzIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgbWFraW5nIGBub2RlX3JlY2xhaW1gIHRoZSBiZXR0ZXIsIG1vcmUgYWNjZXNzaWJsZSBmb2N1cyBzeW1ib2wuCgpJJiMzOTttIGNvbmZpZGVudCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBrZXkgdGFyZ2V0cyBhbmQgY29uZmlndXJhdGlvbnMgZm9yIGZ1enppbmcgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gYENPTkZJR19OVU1BYCBpcyB0aGUgY3JpdGljYWwgcmVxdWlyZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bm9kZV9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSByZWNsYWltIGxvZ2ljICh2bXNjYW4pIHRvIHNraXAgc2xhYiBvciBmaWxlIHJlY2xhaW0gd2hlbiB0aGVpciByZXNwZWN0aXZlIGxpbWl0cyBhcmUgbm90IGV4Y2VlZGVkIGR1cmluZyBub2RlIHJlY2xhaW0uIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBwYWdlIGFsbG9jYXRpb24gd2hlbiBOVU1BIG5vZGUgcmVjbGFpbSBpcyBlbmFibGVkIChlLmcuLCB2aWEgdm0uem9uZV9yZWNsYWltX21vZGUgc3lzY3RsKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyAodm1zY2FuKSB0byBza2lwIHNsYWIgb3IgZmlsZSByZWNsYWltIHdoZW4gdGhlaXIgcmVzcGVjdGl2ZSBsaW1pdHMgYXJlIG5vdCBleGNlZWRlZCBkdXJpbmcgbm9kZSByZWNsYWltLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBhbGxvY2F0aW9uIHdoZW4gTlVNQSBub2RlIHJlY2xhaW0gaXMgZW5hYmxlZCAoZS5nLiwgdmlhIHZtLnpvbmVfcmVjbGFpbV9tb2RlIHN5c2N0bCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgdHdvIG5ldyBiaXRmaWVsZHMgKGBza2lwX3NsYWJfcmVjbGFpbWAgYW5kIGBza2lwX2ZpbGVfcmVjbGFpbWApIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCB0byBiZXR0ZXIgY29udHJvbCBzbGFiIGFuZCBmaWxlIHBhZ2UgcmVjbGFpbS4gSW5zdGFuY2VzIG9mIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBhbnkgdW5zcGVjaWZpZWQgZmllbGRzIChpbmNsdWRpbmcgdGhlIG5ld2x5IGFkZGVkIGJpdGZpZWxkcykgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgcGFyc2luZyBvZiBleHRlcm5hbCBkYXRhIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgY29ycnVwdGlvbnMgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGE1MmUyNzY1MTlkMTNjMTE0ZWY5ODA4YWQ5OTU4ZjJiM2JkODE2YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDA4OjIxOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li5kMTM4Mzc3OTU3OWVhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTE0LDYgJiM0MzsxMTQsMTggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJLyogem9uZV9yZWNsYWltX21vZGUsIGJvb3N0IHJlY2xhaW0sIGNncm91cCByZXN0cmljdGlvbnMgKi8KIAl1bnNpZ25lZCBpbnQgbWF5X3N3YXA6MTsKIAomIzQzOwkvKgomIzQzOwkgKiBXaGVuIHNldCwgdGhlIHNsYWIgc2hyaW5rZXJzIGFyZSBub3QgaW52b2tlZCBiZWNhdXNlIHJlY2xhaW1hYmxlCiYjNDM7CSAqIHNsYWIgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fc2xhYl9wYWdlcy4KJiM0MzsJICovCiYjNDM7CXVuc2lnbmVkIGludCBza2lwX3NsYWJfcmVjbGFpbToxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaGVuIHNldCwgZmlsZSBwYWdlcyBhcmUgbm90IHJlY2xhaW1lZCBiZWNhdXNlIHVubWFwcGVkIHBhZ2UgY2FjaGUKJiM0MzsJICogaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fdW5tYXBwZWRfcGFnZXMuCiYjNDM7CSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgc2tpcF9maWxlX3JlY2xhaW06MTsKJiM0MzsKIAkvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovCiAJdW5zaWduZWQgaW50IG5vX2NhY2hlX3RyaW1fbW9kZToxOwogCkBAIC0yNTc1LDYgJiM0MzsyNTg3LDIxIEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBub2RlX3JlY2xhaW0gcHJvdGVjdHMgdW5tYXBwZWQgcGFnZSBjYWNoZSBkb3duIHRvCiYjNDM7CSAqIG1pbl91bm1hcHBlZF9wYWdlczogc2tpcCBmaWxlIHBhZ2VzIGFuZCByZWNsYWltIGFub24gb25seS4gIEFzIHdpdGgKJiM0MzsJICogdGhlIGFub24tb25seSBjYXNlIGFib3ZlLCBpZiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgdGhlcmUgaXMKJiM0MzsJICogbm90aGluZyB0byBkbyB3aXRob3V0IGJyZWFjaGluZyB0aGUgZmxvb3IsIHNvIHNjYW4gbm90aGluZy4KJiM0MzsJICovCiYjNDM7CWlmIChzYy0mZ3Q7c2tpcF9maWxlX3JlY2xhaW0pIHsKJiM0MzsJCWlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtJmd0O25vZGVfaWQsIHNjKSkgewomIzQzOwkJCW1lbXNldChuciwgMCwgc2l6ZW9mKCpucikgKiBOUl9MUlVfTElTVFMpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCXNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJLyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqLwogCWlmICghc2MtJmd0O21heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC0mZ3Q7bm9kZV9pZCwgc2MpKSB7CiAJCXNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTsKQEAgLTQ3MzYsNiAmIzQzOzQ3NjMsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiAmZ3Q7IE1BWF9MUlVfQkFUQ0gpOwogCVZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7CiAKJiM0MzsJLyoKJiM0MzsJICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0byBtaW5fdW5tYXBwZWRfcGFnZXMsCiYjNDM7CSAqIHNvIGxlYXZlIHRoZSBmaWxlIHR5cGUgYWxvbmU7IGlzb2xhdGVfZm9saW9zKCkgdGhlbiBmYWxscyBiYWNrIHRvCiYjNDM7CSAqIGFub24uCiYjNDM7CSAqLwomIzQzOwlpZiAoc2MtJmd0O3NraXBfZmlsZV9yZWNsYWltICZhbXA7JmFtcDsgdHlwZSA9PSBMUlVfR0VOX0ZJTEUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykKIAkJcmV0dXJuIDA7CiAKQEAgLTUxMTEsNyAmIzQzOzUxNDYsOCBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCW5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7CiAKLQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywgc2MtJmd0O3ByaW9yaXR5KTsKJiM0MzsJaWYgKCFzYy0mZ3Q7c2tpcF9zbGFiX3JlY2xhaW0pCiYjNDM7CQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywgc2MtJmd0O3ByaW9yaXR5KTsKIAogCWlmICghc2MtJmd0O3Byb2FjdGl2ZSkKIAkJdm1wcmVzc3VyZShzYy0mZ3Q7Z2ZwX21hc2ssIHNjLSZndDtvcmRlciwgbWVtY2csIGZhbHNlLApAQCAtNjIxNCw4ICYjNDM7NjI1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCQlzaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpOwogCi0JCXNocmlua19zbGFiKHNjLSZndDtnZnBfbWFzaywgcGdkYXQtJmd0O25vZGVfaWQsIG1lbWNnLAotCQkJICAgIHNjLSZndDtwcmlvcml0eSk7CiYjNDM7CQlpZiAoIXNjLSZndDtza2lwX3NsYWJfcmVjbGFpbSkKJiM0MzsJCQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywKJiM0MzsJCQkJICAgIHNjLSZndDtwcmlvcml0eSk7CiAKIAkJLyogUmVjb3JkIHRoZSBncm91cCYjMzk7cyByZWNsYWltIGVmZmljaWVuY3kgKi8KIAkJaWYgKCFzYy0mZ3Q7cHJvYWN0aXZlKQpAQCAtNzg0NiwxNiAmIzQzOzc4ODMsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKIAlub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7CiAJc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCAmYW1wO3NjLSZndDtyZWNsYWltX3N0YXRlKTsKIAotCWlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgJmd0OyBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzIHx8Ci0JICAgIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSAmZ3Q7IHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcykgewotCQkvKgotCQkgKiBGcmVlIG1lbW9yeSBieSBjYWxsaW5nIHNocmluayBub2RlIHdpdGggaW5jcmVhc2luZwotCQkgKiBwcmlvcml0aWVzIHVudGlsIHdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmcmVlZC4KLQkJICovCi0JCWRvIHsKLQkJCXNocmlua19ub2RlKHBnZGF0LCBzYyk7Ci0JCX0gd2hpbGUgKHNjLSZndDtucl9yZWNsYWltZWQgJmx0OyBucl9wYWdlcyAmYW1wOyZhbXA7IC0tc2MtJmd0O3ByaW9yaXR5ICZndDs9IDApOwotCX0KJiM0MzsJLyoKJiM0MzsJICogRnJlZSBtZW1vcnkgYnkgY2FsbGluZyBzaHJpbmsgbm9kZSB3aXRoIGluY3JlYXNpbmcKJiM0MzsJICogcHJpb3JpdGllcyB1bnRpbCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZnJlZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFdoYXQgdG8gcmVjbGFpbSBpcyBnYXRlZCBwZXIgdHlwZSBieSBzYy0mZ3Q7c2tpcF9zbGFiX3JlY2xhaW0gYW5kCiYjNDM7CSAqIHNjLSZndDtza2lwX2ZpbGVfcmVjbGFpbS4KJiM0MzsJICovCiYjNDM7CWRvIHsKJiM0MzsJCXNocmlua19ub2RlKHBnZGF0LCBzYyk7CiYjNDM7CX0gd2hpbGUgKHNjLSZndDtucl9yZWNsYWltZWQgJmx0OyBucl9wYWdlcyAmYW1wOyZhbXA7IC0tc2MtJmd0O3ByaW9yaXR5ICZndDs9IDApOwogCiAJc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCBOVUxMKTsKIAltZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShub3JlY2xhaW1fZmxhZyk7CkBAIC03ODg1LDE4ICYjNDM7NzkyMiwxNCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaQogCX07CiAKIAkvKgotCSAqIE5vZGUgcmVjbGFpbSByZWNsYWltcyB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBhbmQKLQkgKiBzbGFiIHBhZ2VzIGlmIHdlIGFyZSBvdmVyIHRoZSBkZWZpbmVkIGxpbWl0cy4KLQkgKgotCSAqIEEgc21hbGwgcG9ydGlvbiBvZiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBpcyBuZWVkZWQgZm9yCi0JICogZmlsZSBJL08gb3RoZXJ3aXNlIHBhZ2VzIHJlYWQgYnkgZmlsZSBJL08gd2lsbCBiZSBpbW1lZGlhdGVseQotCSAqIHRocm93biBvdXQgaWYgdGhlIG5vZGUgaXMgb3ZlcmFsbG9jYXRlZC4gU28gd2UgZG8gbm90IHJlY2xhaW0KLQkgKiBpZiBsZXNzIHRoYW4gYSBzcGVjaWZpZWQgcGVyY2VudGFnZSBvZiB0aGUgbm9kZSBpcyB1c2VkIGJ5Ci0JICogdW5tYXBwZWQgZmlsZSBiYWNrZWQgcGFnZXMuCiYjNDM7CSAqIG1pbl91bm1hcHBlZF9wYWdlcyBhbmQgbWluX3NsYWJfcGFnZXMgb25seSBnYXRlIGZpbGUgYW5kIHNsYWIuCiYjNDM7CSAqIEJhaWwgb3V0IG9ubHkgd2hlbiBib3RoIGFyZSB1bmRlciB0aGVpciBsaW1pdHMgYW5kIGFub24gY2Fubm90CiYjNDM7CSAqIGJlIHJlY2xhaW1lZCBlaXRoZXIsIHNvIHdlIGRvIG5vdCBza2lwIHJlY2xhaW1hYmxlIGFub24uCiAJICovCiAJaWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSAmbHQ7PSBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzICZhbXA7JmFtcDsKIAkgICAgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZsdDs9Ci0JICAgIHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcykKJiM0MzsJICAgIHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcyAmYW1wOyZhbXA7CiYjNDM7CSAgICAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC0mZ3Q7bm9kZV9pZCwgJmFtcDtzYykpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTc5MTcsNiAmIzQzOzc5NTAsMTggQEAgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGkKIAlpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCAmYW1wO3BnZGF0LSZndDtmbGFncykpCiAJCXJldHVybiAwOwogCiYjNDM7CS8qCiYjNDM7CSAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGUKJiM0MzsJICogc2xhYiBvciB1bm1hcHBlZCBwYWdlIGNhY2hlIGlzIGFscmVhZHkgYXQgb3IgYmVsb3cgaXRzIGxpbWl0LCBsZWF2ZQomIzQzOwkgKiB0aGF0IHR5cGUgYWxvbmUgZXZlbiBpZiB0aGUgb3RoZXIgdHlwZSB0cmlwcGVkIHRoZSBnYXRlIGFuZCBicm91Z2h0CiYjNDM7CSAqIHVzIGludG8gbm9kZSByZWNsYWltLgomIzQzOwkgKi8KJiM0MzsJc2Muc2tpcF9zbGFiX3JlY2xhaW0gPQomIzQzOwkJbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZsdDs9CiYjNDM7CQlwZ2RhdC0mZ3Q7bWluX3NsYWJfcGFnZXM7CiYjNDM7CXNjLnNraXBfZmlsZV9yZWNsYWltID0KJiM0MzsJCW5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSAmbHQ7PSBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzOwomIzQzOwogCXJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBucl9wYWdlcywgJmFtcDtzYyk7CiAJY2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgJmFtcDtwZ2RhdC0mZ3Q7ZmxhZ3MpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODk5CgkJCQkJCQlvdXRwdXQ6IDIxOQoJCQkJCQkJdGhvdWdodHM6IDc1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBOZWNlc3NpdHkqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIHR3byBiaXRmaWVsZHMsIGBza2lwX3NsYWJfcmVjbGFpbWAgYW5kIGBza2lwX2ZpbGVfcmVjbGFpbWAsIGludG8gdGhlIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYC4gUmlnaHQsIHNvIGl0JiMzOTtzIGFsbCBhYm91dCBtZW1vcnkgcmVjbGFpbSDigJMgcGFnZSBjYWNoZSwgc2xhYiwgYW5vbiBwYWdlcy4uLiBub3RoaW5nICpkaXJlY3RseSogZXhwb3NlZCB0byB1c2Vyc3BhY2UuCgpUaGUgd2F5IGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBpcyBoYW5kbGVkIGlzIGtleSBoZXJlLiBJdCYjMzk7cyBhbG1vc3QgYWx3YXlzIHN0YWNrLWFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCB0aG9zZSBuaWNlIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBsaWtlIGluIGBub2RlX3JlY2xhaW1gLiBUaGF0JiMzOTtzIGdvb2QsIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplcyB0aGUgcmVzdCBvZiB0aGUgc3RydWN0LCBpbmNsdWRpbmcgdGhlc2UgbmV3IGJpdGZpZWxkcy4gU28gdGhlcmUmIzM5O3Mgbm8gd2F5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtpbmcgYW55d2hlcmUuIEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UuIExldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgYmFsYW5jZV9wZ2RhdGAuLi4gYWxsIHRoZSBvdGhlciBwbGFjZXMgSSBjYW4gdGhpbmsgb2YgYWxzbyBpbml0aWFsaXplIGBzY2FuX2NvbnRyb2xgIHRoYXQgd2F5LiBUaGUgbmV3IGZpZWxkcyBhcmUgYml0ZmllbGRzLCBhbmQgdGh1cyB3aWxsIGJlIHplcm9lZC4gTm8gY29uY2VybnMgdGhlcmUuCgpUaGUgY2hhbmdlcyBkb27igJl0IGludm9sdmUgYW55dGhpbmcgdGhhdCBjcm9zc2VzIHRoZSB1c2VyL2tlcm5lbCBib3VuZGFyeS4gTm8gbmV0d29yayBwYWNrZXRzLCBubyBmdW5reSBkYXRhIHBhcnNpbmcsIG5vIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXRzIHdheSBvdXQuIEl04oCZcyBhbGwgaW50ZXJuYWwgcmVjbGFpbSBwb2xpY3kuIE15IGd1dCBzYXlzIGl0IHdpbGwgYmUgb2theSBhbmQgSSBzaG91bGQgZm9sbG93IHRocm91Z2ggd2l0aCB0aGlzIGRlY2lzaW9uLgoKU28gaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSBvZiBteSByZWFzb25pbmc6IFRoaXMgcGF0Y2ggYWRkcyBiaXRmaWVsZHMgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGluIG1lbW9yeSByZWNsYWltLiBgc3RydWN0IHNjYW5fY29udHJvbGAgaW5zdGFuY2VzIGFyZSBpbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGVuc3VyaW5nIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkLiBUaGVyZSYjMzk7cyBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgYW55IGNvbXBsaWNhdGVkIGFsbG9jYXRpb25zLiBTdGFuZGFyZCBLQVNBTiBhbmQgZGVidWdnaW5nIHRvb2xzIHdpbGwgYmUgZW5vdWdoIHRvIGNhdGNoIGFueSBidWdzLCBtb3N0bHkgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZXJlZm9yZSwgbm8gS01TQU4gaXMgbmVlZGVkIGZvciB0aGlzIHBhdGNoLiBJIHRoaW5rIHRoaXMgd2lsbCBzdWZmaWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyB0d28gbmV3IGJpdGZpZWxkcyAoYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCkgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIGJldHRlciBjb250cm9sIHNsYWIgYW5kIGZpbGUgcGFnZSByZWNsYWltLiBJbnN0YW5jZXMgb2YgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGFueSB1bnNwZWNpZmllZCBmaWVsZHMgKGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgYml0ZmllbGRzKSBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBwYXJzaW5nIG9mIGV4dGVybmFsIGRhdGEgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgdHdvIG5ldyBiaXRmaWVsZHMgKGBza2lwX3NsYWJfcmVjbGFpbWAgYW5kIGBza2lwX2ZpbGVfcmVjbGFpbWApIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCB0byBiZXR0ZXIgY29udHJvbCBzbGFiIGFuZCBmaWxlIHBhZ2UgcmVjbGFpbS4gSW5zdGFuY2VzIG9mIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBhbnkgdW5zcGVjaWZpZWQgZmllbGRzIChpbmNsdWRpbmcgdGhlIG5ld2x5IGFkZGVkIGJpdGZpZWxkcykgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgcGFyc2luZyBvZiBleHRlcm5hbCBkYXRhIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgY29ycnVwdGlvbnMgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjE6NTcuMTc5MDA0MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDE4MzA4MTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyB0d28gbmV3IGJpdGZpZWxkcyAoYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCkgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIGJldHRlciBjb250cm9sIHNsYWIgYW5kIGZpbGUgcGFnZSByZWNsYWltLiBJbnN0YW5jZXMgb2YgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGFueSB1bnNwZWNpZmllZCBmaWVsZHMgKGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgYml0ZmllbGRzKSBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBwYXJzaW5nIG9mIGV4dGVybmFsIGRhdGEgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSByZWNsYWltIGxvZ2ljICh2bXNjYW4pIHRvIHNraXAgc2xhYiBvciBmaWxlIHJlY2xhaW0gd2hlbiB0aGVpciByZXNwZWN0aXZlIGxpbWl0cyBhcmUgbm90IGV4Y2VlZGVkIGR1cmluZyBub2RlIHJlY2xhaW0uIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBwYWdlIGFsbG9jYXRpb24gd2hlbiBOVU1BIG5vZGUgcmVjbGFpbSBpcyBlbmFibGVkIChlLmcuLCB2aWEgdm0uem9uZV9yZWNsYWltX21vZGUgc3lzY3RsKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjE6NTcuMTc5MDEwMzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzU3ODA2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYTUyZTI3NjUxOWQxM2MxMTRlZjk4MDhhZDk5NThmMmIzYmQ4MTZiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDA4OjIxOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li5kMTM4Mzc3OTU3OWVhIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTE0LDYgKzExNCwxOCBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4gXFx0Lyogem9uZV9yZWNsYWltX21vZGUsIGJvb3N0IHJlY2xhaW0sIGNncm91cCByZXN0cmljdGlvbnMgKi9cXG4gXFx0dW5zaWduZWQgaW50IG1heV9zd2FwOjE7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBXaGVuIHNldCwgdGhlIHNsYWIgc2hyaW5rZXJzIGFyZSBub3QgaW52b2tlZCBiZWNhdXNlIHJlY2xhaW1hYmxlXFxuK1xcdCAqIHNsYWIgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fc2xhYl9wYWdlcy5cXG4rXFx0ICovXFxuK1xcdHVuc2lnbmVkIGludCBza2lwX3NsYWJfcmVjbGFpbToxO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBzZXQsIGZpbGUgcGFnZXMgYXJlIG5vdCByZWNsYWltZWQgYmVjYXVzZSB1bm1hcHBlZCBwYWdlIGNhY2hlXFxuK1xcdCAqIGlzIGFscmVhZHkgYXQgb3IgYmVsb3cgbWluX3VubWFwcGVkX3BhZ2VzLlxcbitcXHQgKi9cXG4rXFx0dW5zaWduZWQgaW50IHNraXBfZmlsZV9yZWNsYWltOjE7XFxuK1xcbiBcXHQvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovXFxuIFxcdHVuc2lnbmVkIGludCBub19jYWNoZV90cmltX21vZGU6MTtcXG4gXFxuQEAgLTI1NzUsNiArMjU4NywyMSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0b1xcbitcXHQgKiBtaW5fdW5tYXBwZWRfcGFnZXM6IHNraXAgZmlsZSBwYWdlcyBhbmQgcmVjbGFpbSBhbm9uIG9ubHkuICBBcyB3aXRoXFxuK1xcdCAqIHRoZSBhbm9uLW9ubHkgY2FzZSBhYm92ZSwgaWYgYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIHRoZXJlIGlzXFxuK1xcdCAqIG5vdGhpbmcgdG8gZG8gd2l0aG91dCBicmVhY2hpbmcgdGhlIGZsb29yLCBzbyBzY2FuIG5vdGhpbmcuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2MtXFx1MDAzZXNraXBfZmlsZV9yZWNsYWltKSB7XFxuK1xcdFxcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSkge1xcbitcXHRcXHRcXHRtZW1zZXQobnIsIDAsIHNpemVvZigqbnIpICogTlJfTFJVX0xJU1RTKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi9cXG4gXFx0aWYgKCFzYy1cXHUwMDNlbWF5X3N3YXAgfHwgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpIHtcXG4gXFx0XFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9GSUxFO1xcbkBAIC00NzM2LDYgKzQ3NjMsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKG5yX3RvX3NjYW4gXFx1MDAzZSBNQVhfTFJVX0JBVENIKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KGxpc3QpKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG8gbWluX3VubWFwcGVkX3BhZ2VzLFxcbitcXHQgKiBzbyBsZWF2ZSB0aGUgZmlsZSB0eXBlIGFsb25lOyBpc29sYXRlX2ZvbGlvcygpIHRoZW4gZmFsbHMgYmFjayB0b1xcbitcXHQgKiBhbm9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNjLVxcdTAwM2Vza2lwX2ZpbGVfcmVjbGFpbSBcXHUwMDI2XFx1MDAyNiB0eXBlID09IExSVV9HRU5fRklMRSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC01MTExLDcgKzUxNDYsOCBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFxuIFxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxuIFxcbi1cXHRzaHJpbmtfc2xhYihzYy1cXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBtZW1jZywgc2MtXFx1MDAzZXByaW9yaXR5KTtcXG4rXFx0aWYgKCFzYy1cXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0pXFxuK1xcdFxcdHNocmlua19zbGFiKHNjLVxcdTAwM2VnZnBfbWFzaywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIG1lbWNnLCBzYy1cXHUwMDNlcHJpb3JpdHkpO1xcbiBcXG4gXFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbiBcXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXFxuQEAgLTYyMTQsOCArNjI1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFxuIFxcdFxcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxuIFxcbi1cXHRcXHRzaHJpbmtfc2xhYihzYy1cXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBtZW1jZyxcXG4tXFx0XFx0XFx0ICAgIHNjLVxcdTAwM2Vwcmlvcml0eSk7XFxuK1xcdFxcdGlmICghc2MtXFx1MDAzZXNraXBfc2xhYl9yZWNsYWltKVxcbitcXHRcXHRcXHRzaHJpbmtfc2xhYihzYy1cXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBtZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICAgIHNjLVxcdTAwM2Vwcmlvcml0eSk7XFxuIFxcbiBcXHRcXHQvKiBSZWNvcmQgdGhlIGdyb3VwJ3MgcmVjbGFpbSBlZmZpY2llbmN5ICovXFxuIFxcdFxcdGlmICghc2MtXFx1MDAzZXByb2FjdGl2ZSlcXG5AQCAtNzg0NiwxNiArNzg4MywxNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbiBcXHRub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XFxuIFxcdHNldF90YXNrX3JlY2xhaW1fc3RhdGUocCwgXFx1MDAyNnNjLVxcdTAwM2VyZWNsYWltX3N0YXRlKTtcXG4gXFxuLVxcdGlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXFx1MDAzZSBwZ2RhdC1cXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzIHx8XFxuLVxcdCAgICBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZSBwZ2RhdC1cXHUwMDNlbWluX3NsYWJfcGFnZXMpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogRnJlZSBtZW1vcnkgYnkgY2FsbGluZyBzaHJpbmsgbm9kZSB3aXRoIGluY3JlYXNpbmdcXG4tXFx0XFx0ICogcHJpb3JpdGllcyB1bnRpbCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZnJlZWQuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRkbyB7XFxuLVxcdFxcdFxcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XFxuLVxcdFxcdH0gd2hpbGUgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzYyBucl9wYWdlcyBcXHUwMDI2XFx1MDAyNiAtLXNjLVxcdTAwM2Vwcmlvcml0eSBcXHUwMDNlPSAwKTtcXG4tXFx0fVxcbitcXHQvKlxcbitcXHQgKiBGcmVlIG1lbW9yeSBieSBjYWxsaW5nIHNocmluayBub2RlIHdpdGggaW5jcmVhc2luZ1xcbitcXHQgKiBwcmlvcml0aWVzIHVudGlsIHdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmcmVlZC5cXG4rXFx0ICpcXG4rXFx0ICogV2hhdCB0byByZWNsYWltIGlzIGdhdGVkIHBlciB0eXBlIGJ5IHNjLVxcdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSBhbmRcXG4rXFx0ICogc2MtXFx1MDAzZXNraXBfZmlsZV9yZWNsYWltLlxcbitcXHQgKi9cXG4rXFx0ZG8ge1xcbitcXHRcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbitcXHR9IHdoaWxlIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2MgbnJfcGFnZXMgXFx1MDAyNlxcdTAwMjYgLS1zYy1cXHUwMDNlcHJpb3JpdHkgXFx1MDAzZT0gMCk7XFxuIFxcbiBcXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKHAsIE5VTEwpO1xcbiBcXHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShub3JlY2xhaW1fZmxhZyk7XFxuQEAgLTc4ODUsMTggKzc5MjIsMTQgQEAgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGlcXG4gXFx0fTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIE5vZGUgcmVjbGFpbSByZWNsYWltcyB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBhbmRcXG4tXFx0ICogc2xhYiBwYWdlcyBpZiB3ZSBhcmUgb3ZlciB0aGUgZGVmaW5lZCBsaW1pdHMuXFxuLVxcdCAqXFxuLVxcdCAqIEEgc21hbGwgcG9ydGlvbiBvZiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBpcyBuZWVkZWQgZm9yXFxuLVxcdCAqIGZpbGUgSS9PIG90aGVyd2lzZSBwYWdlcyByZWFkIGJ5IGZpbGUgSS9PIHdpbGwgYmUgaW1tZWRpYXRlbHlcXG4tXFx0ICogdGhyb3duIG91dCBpZiB0aGUgbm9kZSBpcyBvdmVyYWxsb2NhdGVkLiBTbyB3ZSBkbyBub3QgcmVjbGFpbVxcbi1cXHQgKiBpZiBsZXNzIHRoYW4gYSBzcGVjaWZpZWQgcGVyY2VudGFnZSBvZiB0aGUgbm9kZSBpcyB1c2VkIGJ5XFxuLVxcdCAqIHVubWFwcGVkIGZpbGUgYmFja2VkIHBhZ2VzLlxcbitcXHQgKiBtaW5fdW5tYXBwZWRfcGFnZXMgYW5kIG1pbl9zbGFiX3BhZ2VzIG9ubHkgZ2F0ZSBmaWxlIGFuZCBzbGFiLlxcbitcXHQgKiBCYWlsIG91dCBvbmx5IHdoZW4gYm90aCBhcmUgdW5kZXIgdGhlaXIgbGltaXRzIGFuZCBhbm9uIGNhbm5vdFxcbitcXHQgKiBiZSByZWNsYWltZWQgZWl0aGVyLCBzbyB3ZSBkbyBub3Qgc2tpcCByZWNsYWltYWJsZSBhbm9uLlxcbiBcXHQgKi9cXG4gXFx0aWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcXHUwMDNjPSBwZ2RhdC1cXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzYz1cXG4tXFx0ICAgIHBnZGF0LVxcdTAwM2VtaW5fc2xhYl9wYWdlcylcXG4rXFx0ICAgIHBnZGF0LVxcdTAwM2VtaW5fc2xhYl9wYWdlcyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIFxcdTAwMjZzYykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LypcXG5AQCAtNzkxNyw2ICs3OTUwLDE4IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpXFxuIFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGVcXG4rXFx0ICogc2xhYiBvciB1bm1hcHBlZCBwYWdlIGNhY2hlIGlzIGFscmVhZHkgYXQgb3IgYmVsb3cgaXRzIGxpbWl0LCBsZWF2ZVxcbitcXHQgKiB0aGF0IHR5cGUgYWxvbmUgZXZlbiBpZiB0aGUgb3RoZXIgdHlwZSB0cmlwcGVkIHRoZSBnYXRlIGFuZCBicm91Z2h0XFxuK1xcdCAqIHVzIGludG8gbm9kZSByZWNsYWltLlxcbitcXHQgKi9cXG4rXFx0c2Muc2tpcF9zbGFiX3JlY2xhaW0gPVxcbitcXHRcXHRub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzYz1cXG4rXFx0XFx0cGdkYXQtXFx1MDAzZW1pbl9zbGFiX3BhZ2VzO1xcbitcXHRzYy5za2lwX2ZpbGVfcmVjbGFpbSA9XFxuK1xcdFxcdG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcXHUwMDNjPSBwZ2RhdC1cXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzO1xcbitcXG4gXFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbiBcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIxOjU4LjQxNTQxMDEzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgxNDYxOTk4MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJub2RlX3JlY2xhaW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyAodm1zY2FuKSB0byBza2lwIHNsYWIgb3IgZmlsZSByZWNsYWltIHdoZW4gdGhlaXIgcmVzcGVjdGl2ZSBsaW1pdHMgYXJlIG5vdCBleGNlZWRlZCBkdXJpbmcgbm9kZSByZWNsYWltLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBhbGxvY2F0aW9uIHdoZW4gTlVNQSBub2RlIHJlY2xhaW0gaXMgZW5hYmxlZCAoZS5nLiwgdmlhIHZtLnpvbmVfcmVjbGFpbV9tb2RlIHN5c2N0bCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRhNTJlMjc2NTE5ZDEzYzExNGVmOTgwOGFkOTk1OGYyYjNiZDgxNmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwODoyMTo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmQxMzgzNzc5NTc5ZWEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xMTQsNiArMTE0LDE4IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0Lyogem9uZV9yZWNsYWltX21vZGUsIGJvb3N0IHJlY2xhaW0sIGNncm91cCByZXN0cmljdGlvbnMgKi9cbiBcdHVuc2lnbmVkIGludCBtYXlfc3dhcDoxO1xuIFxuK1x0LypcbitcdCAqIFdoZW4gc2V0LCB0aGUgc2xhYiBzaHJpbmtlcnMgYXJlIG5vdCBpbnZva2VkIGJlY2F1c2UgcmVjbGFpbWFibGVcbitcdCAqIHNsYWIgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fc2xhYl9wYWdlcy5cbitcdCAqL1xuK1x0dW5zaWduZWQgaW50IHNraXBfc2xhYl9yZWNsYWltOjE7XG4rXG4rXHQvKlxuK1x0ICogV2hlbiBzZXQsIGZpbGUgcGFnZXMgYXJlIG5vdCByZWNsYWltZWQgYmVjYXVzZSB1bm1hcHBlZCBwYWdlIGNhY2hlXG4rXHQgKiBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IG1pbl91bm1hcHBlZF9wYWdlcy5cbitcdCAqL1xuK1x0dW5zaWduZWQgaW50IHNraXBfZmlsZV9yZWNsYWltOjE7XG4rXG4gXHQvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovXG4gXHR1bnNpZ25lZCBpbnQgbm9fY2FjaGVfdHJpbV9tb2RlOjE7XG4gXG5AQCAtMjU3NSw2ICsyNTg3LDIxIEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG9cbitcdCAqIG1pbl91bm1hcHBlZF9wYWdlczogc2tpcCBmaWxlIHBhZ2VzIGFuZCByZWNsYWltIGFub24gb25seS4gIEFzIHdpdGhcbitcdCAqIHRoZSBhbm9uLW9ubHkgY2FzZSBhYm92ZSwgaWYgYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIHRoZXJlIGlzXG4rXHQgKiBub3RoaW5nIHRvIGRvIHdpdGhvdXQgYnJlYWNoaW5nIHRoZSBmbG9vciwgc28gc2NhbiBub3RoaW5nLlxuK1x0ICovXG4rXHRpZiAoc2MtXHUwMDNlc2tpcF9maWxlX3JlY2xhaW0pIHtcbitcdFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbitcdFx0XHRtZW1zZXQobnIsIDAsIHNpemVvZigqbnIpICogTlJfTFJVX0xJU1RTKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9BTk9OO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdC8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi9cbiBcdGlmICghc2MtXHUwMDNlbWF5X3N3YXAgfHwgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSkge1xuIFx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XG5AQCAtNDczNiw2ICs0NzYzLDE0IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiBcdTAwM2UgTUFYX0xSVV9CQVRDSCk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkobGlzdCkpO1xuIFxuK1x0LypcbitcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG8gbWluX3VubWFwcGVkX3BhZ2VzLFxuK1x0ICogc28gbGVhdmUgdGhlIGZpbGUgdHlwZSBhbG9uZTsgaXNvbGF0ZV9mb2xpb3MoKSB0aGVuIGZhbGxzIGJhY2sgdG9cbitcdCAqIGFub24uXG4rXHQgKi9cbitcdGlmIChzYy1cdTAwM2Vza2lwX2ZpbGVfcmVjbGFpbSBcdTAwMjZcdTAwMjYgdHlwZSA9PSBMUlVfR0VOX0ZJTEUpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTUxMTEsNyArNTE0Niw4IEBAIHN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFxuIFx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbiBcbi1cdHNocmlua19zbGFiKHNjLVx1MDAzZWdmcF9tYXNrLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBtZW1jZywgc2MtXHUwMDNlcHJpb3JpdHkpO1xuK1x0aWYgKCFzYy1cdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSlcbitcdFx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLCBzYy1cdTAwM2Vwcmlvcml0eSk7XG4gXG4gXHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSlcbiBcdFx0dm1wcmVzc3VyZShzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNlb3JkZXIsIG1lbWNnLCBmYWxzZSxcbkBAIC02MjE0LDggKzYyNTAsOSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXG4gXHRcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG4gXG4tXHRcdHNocmlua19zbGFiKHNjLVx1MDAzZWdmcF9tYXNrLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBtZW1jZyxcbi1cdFx0XHQgICAgc2MtXHUwMDNlcHJpb3JpdHkpO1xuK1x0XHRpZiAoIXNjLVx1MDAzZXNraXBfc2xhYl9yZWNsYWltKVxuK1x0XHRcdHNocmlua19zbGFiKHNjLVx1MDAzZWdmcF9tYXNrLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBtZW1jZyxcbitcdFx0XHRcdCAgICBzYy1cdTAwM2Vwcmlvcml0eSk7XG4gXG4gXHRcdC8qIFJlY29yZCB0aGUgZ3JvdXAncyByZWNsYWltIGVmZmljaWVuY3kgKi9cbiBcdFx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5AQCAtNzg0NiwxNiArNzg4MywxNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuIFx0bm9yZWNsYWltX2ZsYWcgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xuIFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCBcdTAwMjZzYy1cdTAwM2VyZWNsYWltX3N0YXRlKTtcbiBcbi1cdGlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXHUwMDNlIHBnZGF0LVx1MDAzZW1pbl91bm1hcHBlZF9wYWdlcyB8fFxuLVx0ICAgIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2UgcGdkYXQtXHUwMDNlbWluX3NsYWJfcGFnZXMpIHtcbi1cdFx0Lypcbi1cdFx0ICogRnJlZSBtZW1vcnkgYnkgY2FsbGluZyBzaHJpbmsgbm9kZSB3aXRoIGluY3JlYXNpbmdcbi1cdFx0ICogcHJpb3JpdGllcyB1bnRpbCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZnJlZWQuXG4tXHRcdCAqL1xuLVx0XHRkbyB7XG4tXHRcdFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbi1cdFx0fSB3aGlsZSAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgLS1zYy1cdTAwM2Vwcmlvcml0eSBcdTAwM2U9IDApO1xuLVx0fVxuK1x0LypcbitcdCAqIEZyZWUgbWVtb3J5IGJ5IGNhbGxpbmcgc2hyaW5rIG5vZGUgd2l0aCBpbmNyZWFzaW5nXG4rXHQgKiBwcmlvcml0aWVzIHVudGlsIHdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmcmVlZC5cbitcdCAqXG4rXHQgKiBXaGF0IHRvIHJlY2xhaW0gaXMgZ2F0ZWQgcGVyIHR5cGUgYnkgc2MtXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0gYW5kXG4rXHQgKiBzYy1cdTAwM2Vza2lwX2ZpbGVfcmVjbGFpbS5cbitcdCAqL1xuK1x0ZG8ge1xuK1x0XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xuK1x0fSB3aGlsZSAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgLS1zYy1cdTAwM2Vwcmlvcml0eSBcdTAwM2U9IDApO1xuIFxuIFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCBOVUxMKTtcbiBcdG1lbWFsbG9jX25vcmVjbGFpbV9yZXN0b3JlKG5vcmVjbGFpbV9mbGFnKTtcbkBAIC03ODg1LDE4ICs3OTIyLDE0IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpXG4gXHR9O1xuIFxuIFx0Lypcbi1cdCAqIE5vZGUgcmVjbGFpbSByZWNsYWltcyB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBhbmRcbi1cdCAqIHNsYWIgcGFnZXMgaWYgd2UgYXJlIG92ZXIgdGhlIGRlZmluZWQgbGltaXRzLlxuLVx0ICpcbi1cdCAqIEEgc21hbGwgcG9ydGlvbiBvZiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBpcyBuZWVkZWQgZm9yXG4tXHQgKiBmaWxlIEkvTyBvdGhlcndpc2UgcGFnZXMgcmVhZCBieSBmaWxlIEkvTyB3aWxsIGJlIGltbWVkaWF0ZWx5XG4tXHQgKiB0aHJvd24gb3V0IGlmIHRoZSBub2RlIGlzIG92ZXJhbGxvY2F0ZWQuIFNvIHdlIGRvIG5vdCByZWNsYWltXG4tXHQgKiBpZiBsZXNzIHRoYW4gYSBzcGVjaWZpZWQgcGVyY2VudGFnZSBvZiB0aGUgbm9kZSBpcyB1c2VkIGJ5XG4tXHQgKiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcy5cbitcdCAqIG1pbl91bm1hcHBlZF9wYWdlcyBhbmQgbWluX3NsYWJfcGFnZXMgb25seSBnYXRlIGZpbGUgYW5kIHNsYWIuXG4rXHQgKiBCYWlsIG91dCBvbmx5IHdoZW4gYm90aCBhcmUgdW5kZXIgdGhlaXIgbGltaXRzIGFuZCBhbm9uIGNhbm5vdFxuK1x0ICogYmUgcmVjbGFpbWVkIGVpdGhlciwgc28gd2UgZG8gbm90IHNraXAgcmVjbGFpbWFibGUgYW5vbi5cbiBcdCAqL1xuIFx0aWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcdTAwM2M9IHBnZGF0LVx1MDAzZW1pbl91bm1hcHBlZF9wYWdlcyBcdTAwMjZcdTAwMjZcbiBcdCAgICBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNjPVxuLVx0ICAgIHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzKVxuK1x0ICAgIHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVx1MDAzZW5vZGVfaWQsIFx1MDAyNnNjKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKlxuQEAgLTc5MTcsNiArNzk1MCwxOCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaVxuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdC8qXG4rXHQgKiBFYWNoIGxpbWl0IG9ubHkgZ2F0ZXMgaXRzIG93biB0eXBlIG9mIHJlY2xhaW0uICBXaGVuIHJlY2xhaW1hYmxlXG4rXHQgKiBzbGFiIG9yIHVubWFwcGVkIHBhZ2UgY2FjaGUgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBpdHMgbGltaXQsIGxlYXZlXG4rXHQgKiB0aGF0IHR5cGUgYWxvbmUgZXZlbiBpZiB0aGUgb3RoZXIgdHlwZSB0cmlwcGVkIHRoZSBnYXRlIGFuZCBicm91Z2h0XG4rXHQgKiB1cyBpbnRvIG5vZGUgcmVjbGFpbS5cbitcdCAqL1xuK1x0c2Muc2tpcF9zbGFiX3JlY2xhaW0gPVxuK1x0XHRub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNjPVxuK1x0XHRwZ2RhdC1cdTAwM2VtaW5fc2xhYl9wYWdlcztcbitcdHNjLnNraXBfZmlsZV9yZWNsYWltID1cbitcdFx0bm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUocGdkYXQpIFx1MDAzYz0gcGdkYXQtXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzO1xuK1xuIFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcdTAwMjZzYyk7XG4gXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMTo1OC40MTU0MTE0MDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTAyMjk1MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IFJlY2xhaW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyDigJMgYWx3YXlzIGFuIGludGVyZXN0aW5nIGFyZWEuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIGFkZGluZyBgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gIGZsYWdzIHRvIHRoZSBgc2Nhbl9jb250cm9sYCBzdHJ1Y3QuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgY29udHJvbGxpbmcgcmVjbGFpbSBiZWhhdmlvciB0aHJvdWdoIGZsYWdzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHdheSB0byBtYW5hZ2UgY29tcGxleGl0eSwgc28gdGhhdCdzIGEgZ29vZCBhcHByb2FjaC4gVGhlIGBnZXRfc2Nhbl9jb3VudGAgZnVuY3Rpb24gYW5kIGBzY2FuX2ZvbGlvc2AgYXJlIGdldHRpbmcgdG91Y2hlZCB0byByZXNwZWN0IHRob3NlIGZpbGUgcmVjbGFpbSBmbGFncywgd2hpbGUgYHNocmlua19vbmVgIGFuZCBgc2hyaW5rX25vZGVfbWVtY2dzYCBkZWFsIHdpdGggdGhlIHNsYWIgcmVjbGFpbSBmbGFnLiBBbmQgdGhlIG5vZGUgcmVjbGFpbSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gc2V0IHRoZXNlIGZsYWdzIGFuZCBhZGp1c3QgdGhlIHJlY2xhaW0gbG9naWMgYWNjb3JkaW5nbHkuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgZGVlcCBvbmUgYXQgdGhhdCwgYWZmZWN0aW5nIGhvdyBub2RlIHJlY2xhaW0gb3BlcmF0ZXMsIHNwZWNpZmljYWxseSBieSBsZXR0aW5nIHVzIHR3ZWFrIHRoZSBsaW1pdHMgb24gc2xhYiBhbmQgZmlsZSByZWNsYWltLiBEZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBzb21lIHNlcmlvdXMgZnV6emluZy4gR290dGEgY2hlY2sgdGhlIGVkZ2UgY2FzZXMgaGVyZS5cblxuQWxyaWdodCwgbGV0J3MgcGlucG9pbnQgdGhvc2UgZnVuY3Rpb25zIGFnYWluLiBMb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBtb2RpZmllZDogYGdldF9zY2FuX2NvdW50YCwgYHNjYW5fZm9saW9zYCwgYHNocmlua19vbmVgLCBgc2hyaW5rX25vZGVfbWVtY2dzYCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBub2RlX3JlY2xhaW1gLiBIbW0sIGBub2RlX3JlY2xhaW1gIGlzICp0aGUqIGVudHJ5IHBvaW50IGhlcmUsIGEgbm9uLXN0YXRpYyBvbmUgYXQgdGhhdCwgc28gcHJvYmFibHkgdGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZSBidW5jaC4gSXQncyB0aGUgZnJvbnQgZG9vci5cblxuSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYG5vZGVfcmVjbGFpbWAgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjA1LjkxNzcxMDMzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYxMTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW1cXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03ODY1PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy03OTA3LVxcbm1tL3Ztc2Nhbi5jOjc5MDg6dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS92bXNjYW4uYy03OTA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6MDUuOTYyMzM4MjQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3Njc4NzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIGBub2RlX3JlY2xhaW1gIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYG5vZGVfcmVjbGFpbWAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIG1hcCBvdXQgYWxsIHRoZSBjYWxsIHNpdGVzIGZvciB0aGlzIGZ1bmN0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hlbiBhbmQgd2h5IHRoZSBzeXN0ZW0gdHJpZ2dlcnMgbm9kZSByZWNsYW1hdGlvbiwgYW5kIGZyb20gdGhlcmUsIHdoZXJlIHRoZSByZXNvdXJjZXMgYXJlIGJlaW5nIHJlLWFsbG9jYXRlZC4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCBhIGNvZGUgc2VhcmNoIHRvIGlkZW50aWZ5IGFsbCBkaXJlY3QgYW5kIGluZGlyZWN0IGNhbGxzLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRob3NlIGNhbGxzIHdpbGwgYmUgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBvciBwZXJmb3JtYW5jZSBhbmFseXNpcyByZWxhdGVkIHRvIG1lbW9yeSBwcmVzc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcwMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjA5LjMzOTEyNzY2NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYxNTkzMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfcmVjbGFpbVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3RvcG9sb2d5Lmg9NDM9aW50IGFyY2hfdXBkYXRlX2NwdV90b3BvbG9neSh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaC01NS0gKiAoaW4gd2hhdGV2ZXIgYXJjaCBzcGVjaWZpYyBtZWFzdXJlbWVudCB1bml0cyByZXR1cm5lZCBieSBub2RlX2Rpc3RhbmNlKCkpXFxuaW5jbHVkZS9saW51eC90b3BvbG9neS5oOjU2OiAqIGFuZCBub2RlX3JlY2xhaW1fbW9kZSBpcyBlbmFibGVkIHRoZW4gdGhlIFZNIHdpbGwgb25seSBjYWxsIG5vZGVfcmVjbGFpbSgpXFxuaW5jbHVkZS9saW51eC90b3BvbG9neS5oLTU3LSAqIG9uIG5vZGVzIHdpdGhpbiB0aGlzIGRpc3RhbmNlLlxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMTQ1PWV4dGVybiBpbnQgbm9kZV9yZWNsYWltX21vZGU7XFxubW0vaW50ZXJuYWwuaC0xMTQ2LVxcbm1tL2ludGVybmFsLmg6MTE0NzpleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS9pbnRlcm5hbC5oLTExNDgtXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5tbS9pbnRlcm5hbC5oPTExNDk9ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTExNTItXFxubW0vaW50ZXJuYWwuaDoxMTUzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS9pbnRlcm5hbC5oLTExNTQtXFx0XFx0XFx0XFx0XFx0IGdmcF90IG1hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zODAwPWdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTM5MjktXFxubW0vcGFnZV9hbGxvYy5jOjM5MzA6XFx0XFx0XFx0aWYgKCFub2RlX3JlY2xhaW0oem9uZS1cXHUwMDNlem9uZV9wZ2RhdCwgZ2ZwX21hc2ssIG9yZGVyKSlcXG5tbS9wYWdlX2FsbG9jLmMtMzkzMS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4MzM9c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4NjQtICovXFxubW0vdm1zY2FuLmM6Nzg2NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc4NjYtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYy03OTA3LVxcbm1tL3Ztc2Nhbi5jOjc5MDg6dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS92bXNjYW4uYy03OTA5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5NjQtXFxubW0vdm1zY2FuLmM6Nzk2NTpcXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzk2Ni1cXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5NzctXFxubW0vdm1zY2FuLmM6Nzk3ODpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc5NzktXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYz03OTk4PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwOTAtXFxubW0vdm1zY2FuLmM6ODA5MTpcXHRcXHRcXHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy04MDkyLVxcdFxcdFxcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMjoxMS41MDA3MjYyMzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjI5OTMyMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIGBub2RlX3JlY2xhaW1gIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0YCwgcmlnaHQgdGhlcmUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoYXQncyBhICpyZWFsbHkqIGhvdCBwYXRoIGluIHRoZSBrZXJuZWwg4oCTIHBhZ2UgYWxsb2NhdGlvbiBpcyBmdW5kYW1lbnRhbC4gTWFrZXMgc2Vuc2UgaXQncyBwZXJmb3JtYW5jZS1jcml0aWNhbC4gQnV0IGBub2RlX3JlY2xhaW1gIGlzIGl0c2VsZiB0aGUgZW50cnkgcG9pbnQgZm9yIG5vZGUgcmVjbGFpbSwgd2hpY2ggb25seSBnZXRzIHRyaWdnZXJlZCB3aGVuIGBub2RlX3JlY2xhaW1fbW9kZWAgaXMgZW5hYmxlZC4gTXkgZ3V0IHNheXMgTlVNQSBzeXN0ZW1zLCBuYXR1cmFsbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHRob3VnaC4gTGV0J3MgZGlnIGludG8gdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCB3aGVyZSBgbm9kZV9yZWNsYWltX21vZGVgIGlzIHRyaWdnZXJlZC4gSSdtIHByZXR0eSBzdXJlIGBDT05GSUdfTlVNQWAgaXMgdXN1YWxseSBhIHByZXJlcXVpc2l0ZSwgYnV0IEkgd2FudCB0byBiZSAxMDAlIGNlcnRhaW4uIFRpbWUgdG8gY2hlY2sgYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL2ludGVybmFsLmhgIGFuZCBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc0MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMjoxNi4xMzA2NjE3NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NzU2ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2ludGVybmFsLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD0xMTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19kcmFpbl9yZW1vdGUoaW50IGNwdSkgeyB9XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTExNDQtI2lmZGVmIENPTkZJR19OVU1BXFxubW0vaW50ZXJuYWwuaDoxMTQ1OmV4dGVybiBpbnQgbm9kZV9yZWNsYWltX21vZGU7XFxubW0vaW50ZXJuYWwuaC0xMTQ2LVxcbm1tL2ludGVybmFsLmg6MTE0NzpleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS9pbnRlcm5hbC5oLTExNDgtXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5tbS9pbnRlcm5hbC5oPTExNDk9ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayk7XFxubW0vaW50ZXJuYWwuaC0xMTUwLSNlbHNlXFxubW0vaW50ZXJuYWwuaDoxMTUxOiNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMFxcbm1tL2ludGVybmFsLmgtMTE1Mi1cXG5tbS9pbnRlcm5hbC5oOjExNTM6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL2ludGVybmFsLmgtMTE1NC1cXHRcXHRcXHRcXHRcXHQgZ2ZwX3QgbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMTU4PXN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMTYzLVxcbm1tL2ludGVybmFsLmg6MTE2NDpzdGF0aWMgaW5saW5lIGJvb2wgbm9kZV9yZWNsYWltX2VuYWJsZWQodm9pZClcXG5tbS9pbnRlcm5hbC5oLTExNjUte1xcbm1tL2ludGVybmFsLmg6MTE2NjpcXHQvKiBJcyBhbnkgbm9kZV9yZWNsYWltX21vZGUgYml0IHNldD8gKi9cXG5tbS9pbnRlcm5hbC5oOjExNjc6XFx0cmV0dXJuIG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgKFJFQ0xBSU1fWk9ORXxSRUNMQUlNX1dSSVRFfFJFQ0xBSU1fVU5NQVApO1xcbm1tL2ludGVybmFsLmgtMTE2OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjE2LjE3NjY0MDQ5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTI5OTYzMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTlVNQSBhbmQgTm9kZSBSZWNsYW1hdGlvbioqXG5cblJpZ2h0LCBzbyBgQ09ORklHX05VTUFgIGlzICphYnNvbHV0ZWx5KiB0aGUgbGluY2hwaW4uIElmIHRoYXQncyBub3QgZW5hYmxlZCwgYG5vZGVfcmVjbGFpbWAgaXMgZXNzZW50aWFsbHkganVzdCBhIHBsYWNlaG9sZGVyLCBhIHNrZWxldGFsIGZ1bmN0aW9uIHdpdGggbm8gcmVhbCBtZWF0IG9uIGl0cyBib25lcy4gSXQncyBub3QgZ29pbmcgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGhvdXQgdGhlIHVuZGVybHlpbmcgTlVNQSBpbmZyYXN0cnVjdHVyZS4gSXQncyBhIGZ1bmRhbWVudGFsIGRlcGVuZGVuY3ksIGFsbW9zdCBhIHByZXJlcXVpc2l0ZS5cblxuTm93LCB0aGF0IGJyaW5ncyB1cCBhIGJyb2FkZXIgcXVlc3Rpb24sIGRvZXNuJ3QgaXQ/IElmIGBDT05GSUdfTlVNQWAgaXMgdGhhdCBjcml0aWNhbCwgYXJlIHRoZXJlICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGtlcm5lbCBmZWF0dXJlcyB0aGF0IG1pZ2h0IGJlIGludGVydHdpbmVkIHdpdGggYG5vZGVfcmVjbGFpbWAgaW4gYSBzaW1pbGFyIGZhc2hpb24/IFRoaW5ncyB0aGF0IGFyZSByZXF1aXJlZCwgb3IgdGhhdCBzaWduaWZpY2FudGx5IGFsdGVyIGl0cyBiZWhhdmlvdXIsIG9yIHRoYXQgaXQgZGVwZW5kcyBvbiBpbiBzb21lIHdheS4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCBlbHNlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuIEknZCBiZXR0ZXIgZXhwYW5kIG15IHNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUzNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjE5LjgyOTYzOTg1N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNzEwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTI1NjI9c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI1OTAtXFx0LypcXG5tbS92bXNjYW4uYzoyNTkxOlxcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG9cXG5tbS92bXNjYW4uYy0yNTkyLVxcdCAqIG1pbl91bm1hcHBlZF9wYWdlczogc2tpcCBmaWxlIHBhZ2VzIGFuZCByZWNsYWltIGFub24gb25seS4gIEFzIHdpdGhcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3NDk9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3NjYtXFx0LypcXG5tbS92bXNjYW4uYzo0NzY3OlxcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG8gbWluX3VubWFwcGVkX3BhZ2VzLFxcbm1tL3Ztc2Nhbi5jLTQ3NjgtXFx0ICogc28gbGVhdmUgdGhlIGZpbGUgdHlwZSBhbG9uZTsgaXNvbGF0ZV9mb2xpb3MoKSB0aGVuIGZhbGxzIGJhY2sgdG9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYyNzE9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjI3Mi17XFxubW0vdm1zY2FuLmM6NjI3MzpcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XFxubW0vdm1zY2FuLmMtNjI3NC1cXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbi0tXFxubW0vdm1zY2FuLmMtNjI5OS1cXG5tbS92bXNjYW4uYzo2MzAwOlxcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcXG5tbS92bXNjYW4uYy02MzAxLVxcbi0tXFxubW0vdm1zY2FuLmMtNjMwNC1cXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXFxubW0vdm1zY2FuLmM6NjMwNTpcXHRcXHRcXHQgICBzYy1cXHUwMDNlbnJfc2Nhbm5lZCAtIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkKTtcXG5tbS92bXNjYW4uYy02MzA2LVxcbm1tL3Ztc2Nhbi5jOjYzMDc6XFx0aWYgKG5yX25vZGVfcmVjbGFpbWVkKVxcbm1tL3Ztc2Nhbi5jLTYzMDgtXFx0XFx0cmVjbGFpbWFibGUgPSB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNjM2OC1cXG5tbS92bXNjYW4uYzo2MzY5OlxcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcXG5tbS92bXNjYW4uYy02MzcwLVxcdFxcdGdvdG8gYWdhaW47XFxuLS1cXG5tbS92bXNjYW4uYz03NzU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3NjgtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiem9uZV9yZWNsYWltX21vZGVcXFwiLFxcbm1tL3Ztc2Nhbi5jOjc3Njk6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcXG5tbS92bXNjYW4uYzo3NzcwOlxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihub2RlX3JlY2xhaW1fbW9kZSksXFxubW0vdm1zY2FuLmMtNzc3MS1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3ODg9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxuLS1cXG5tbS92bXNjYW4uYy03NzkzLSAqXFxubW0vdm1zY2FuLmM6Nzc5NDogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xcbm1tL3Ztc2Nhbi5jLTc3OTUtICogdGhlIHdhdGVybWFya3MuXFxubW0vdm1zY2FuLmMtNzc5Ni0gKi9cXG5tbS92bXNjYW4uYzo3Nzk3OmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTc3OTgtXFxuLS1cXG5tbS92bXNjYW4uYy03ODA2LS8qXFxubW0vdm1zY2FuLmM6NzgwNzogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xcbm1tL3Ztc2Nhbi5jLTc4MDgtICogb2NjdXIuXFxuLS1cXG5tbS92bXNjYW4uYz03ODMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODQzLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc4NDQ6XFx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9VTk1BUClcXG5tbS92bXNjYW4uYy03ODQ1LVxcdFxcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY0LSAqL1xcbm1tL3Ztc2Nhbi5jOjc4NjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03ODY2LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmMtNzg3Mi1cXG5tbS92bXNjYW4uYzo3ODczOlxcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLVxcdTAwM2VvcmRlcixcXG5tbS92bXNjYW4uYy03ODc0LVxcdFxcdFxcdFxcdFxcdCAgIHNjLVxcdTAwM2VnZnBfbWFzayk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTAyLVxcbm1tL3Ztc2Nhbi5jOjc5MDM6XFx0dHJhY2VfbW1fdm1zY2FuX25vZGVfcmVjbGFpbV9lbmQoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTlVMTCk7XFxubW0vdm1zY2FuLmMtNzkwNC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MDctXFxubW0vdm1zY2FuLmM6NzkwODp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTc5MDkte1xcbi0tXFxubW0vdm1zY2FuLmMtNzkxNy1cXHRcXHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXFxubW0vdm1zY2FuLmM6NzkxODpcXHRcXHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9XUklURSksXFxubW0vdm1zY2FuLmM6NzkxOTpcXHRcXHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1VOTUFQKSxcXG5tbS92bXNjYW4uYy03OTIwLVxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuLS1cXG5tbS92bXNjYW4uYy03OTY0LVxcbm1tL3Ztc2Nhbi5jOjc5NjU6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc5NjYtXFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTc3LVxcbm1tL3Ztc2Nhbi5jOjc5Nzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03OTc5LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9Nzk5OD1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDkwLVxcbm1tL3Ztc2Nhbi5jOjgwOTE6XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtODA5Mi1cXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6MTkuODczOTE2OTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzA1NDAyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG1lbW9yeSBtYW5hZ2VtZW50OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTm9kZSBSZWNsYWltIE15c3RlcnkqKlxuXG5IbW0sIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGBfX25vZGVfcmVjbGFpbWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGp1c3QgcGluZ2VkIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjb25uZWN0aW9uIG1vcmUgdGhvcm91Z2hseS4gUmlnaHQsIGxldCdzIHRyYWNlIHRoaXMgYmFjay4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIFRpbWUgdG8gZGl2ZSBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgY2FsbC4gSSB3YW50IHRvIHNlZSAqd2h5KiBhbmQgKmhvdyogYF9fbm9kZV9yZWNsYWltYCBpcyBiZWluZyBpbnZva2VkIHRoZXJlLiBJcyB0aGlzIHN0YW5kYXJkIGJlaGF2aW9yLCBvciBpcyB0aGlzIHNvbWUgb3B0aW1pemVkIHBhdGggb3IsIGhlYXZlbiBmb3JiaWQsIGEgcG90ZW50aWFsIGJ1Zz8gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMjoyMy4xNDQ0NTkyNDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDQwODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Nzk5Mj1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03OTk3LVxcbm1tL3Ztc2Nhbi5jOjc5OTg6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc5OTktXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODE1MT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNTYtXFxubW0vdm1zY2FuLmM6ODE1NzpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODE1OC1cXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjIzLjE4NzkwNjQyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkxNzk3MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIE1lbW9yeSBSZWNsYWltaW5nIFRyaWdnZXIqKlxuXG5Pa2F5LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBjYWxsZWQsIGFuZCBpdCdzIHRyaWdnZXJlZCB0aHJvdWdoIGEgc3lzZnMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhlIGByZWNsYWltX3N0b3JlYC4gVGhpcyBtZWFucyBhIHVzZXItc3BhY2UgcHJvY2VzcyBpcyBkaXJlY3RseSByZXF1ZXN0aW5nIG1lbW9yeSByZWNsYWltLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyAqaW5zaWRlKiB0aGF0IGByZWNsYWltX3N0b3JlYCBoYW5kbGVyIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGZsb3cuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBtbS92bXNjYW4uY2AgYW5kIGZpbmQgdGhlIGByZWNsYWltX3N0b3JlYCBmdW5jdGlvbi4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyB0aGlzIHVzZXItaW5pdGlhdGVkIHJlY2xhaW0sIGFuZCBJIG5lZWQgdG8gc2VlIHdoYXQgYWN0aW9ucyBpdCB0YWtlcywgYW5kIHdoYXQgY29udGV4dCBpcyBwcm92aWRlZCB0byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcGFyYW1ldGVycyBhcmUgc2V0IGFuZCB3aGF0IGZsYWdzIGFyZSBpbnZvbHZlZC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgdGhlIHBhdGggb2YgZXhlY3V0aW9uIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIHJlY2xhaW0gdHJpZ2dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAxNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjI2LjU3OTcwNjIzNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNDYyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjbGFpbV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MTQ4PUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNTAtI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbm1tL3Ztc2Nhbi5jOjgxNTE6c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxubW0vdm1zY2FuLmMtODE1Mi1cXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMjoyNi42MjM5NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyMzU4NDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTlVNQS1SZWxhdGVkIE1lbW9yeSBSZWNsYWltIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGByZWNsYWltX3N0b3JlYCBhbmQgYG5vZGVfcmVjbGFpbWAgZnVuY3Rpb25zICpyZXF1aXJlKiBgQ09ORklHX05VTUFgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBidXQgc28gZmFyLCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTlVNQWAgaXMgdGhlIG9ubHkgb25lLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBub2RlX3JlY2xhaW1gIGlzIHRoZSAqc29sZSogZW50cnkgcG9pbnQgaW50byB0aGlzIHBhcnQgb2YgdGhlIHN5c3RlbS4gSSBzZWUgdGhpcyBwYXRjaCBtb2RpZmllcyBgZ2V0X3NjYW5fY291bnRgLCBgc2Nhbl9mb2xpb3NgLCBgc2hyaW5rX29uZWAsIGFuZCBgc2hyaW5rX25vZGVfbWVtY2dzYC4gVGhlc2UgYWxsIGxlYWQgaW50byBgc2hyaW5rX25vZGVgLCB3aGljaCBpcyAqY2VydGFpbmx5KiBjYWxsZWQgZnJvbSBgX19ub2RlX3JlY2xhaW1gLiBCdXQgd2FpdCwgdGhlcmUgYXJlIG90aGVyIGNhbGxlcnM6IEknbSBzZWVpbmcgYGtzd2FwZGAsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGFuZCBvdGhlcnMgYXMgd2VsbCwgd2hpY2ggYXJlIHN0YW5kYXJkIGNvbXBvbmVudHMhIFxuXG5Ib2xkIG9uLi4udGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGZsYWdzIGBza2lwX3NsYWJfcmVjbGFpbWAgYW5kIGBza2lwX2ZpbGVfcmVjbGFpbWAuLi4gdGhleSdyZSAqb25seSogc2V0IHdpdGhpbiBgbm9kZV9yZWNsYWltYCEgVGhhdCdzIGEgc2lnbmlmaWNhbnQgb2JzZXJ2YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBoZXJlIGlzIGNvcnJlY3QsIHNvIEknbGwgdmVyaWZ5IHRoaXMgYXNzZXJ0aW9uLiBUaGlzIGNvdWxkIGJlIGNyaXRpY2FsIGZvciBkZXRlcm1pbmluZyB0aGUgaW50ZW5kZWQgc2NvcGUgYW5kIGJlaGF2aW91ciBvZiB0aGVzZSByZWNsYWltIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6MzIuMDQ3NTQzMTI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAyNTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2lwX3NsYWJfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03Nj1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyMC1cXHQgKi9cXG5tbS92bXNjYW4uYzoxMjE6XFx0dW5zaWduZWQgaW50IHNraXBfc2xhYl9yZWNsYWltOjE7XFxubW0vdm1zY2FuLmMtMTIyLVxcbi0tXFxubW0vdm1zY2FuLmM9NTEyNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNDgtXFxubW0vdm1zY2FuLmM6NTE0OTpcXHRpZiAoIXNjLVxcdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSlcXG5tbS92bXNjYW4uYy01MTUwLVxcdFxcdHNocmlua19zbGFiKHNjLVxcdTAwM2VnZnBfbWFzaywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIG1lbWNnLCBzYy1cXHUwMDNlcHJpb3JpdHkpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjE5MT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjUyLVxcbm1tL3Ztc2Nhbi5jOjYyNTM6XFx0XFx0aWYgKCFzYy1cXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0pXFxubW0vdm1zY2FuLmMtNjI1NC1cXHRcXHRcXHRzaHJpbmtfc2xhYihzYy1cXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBtZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4ODktXFx0ICpcXG5tbS92bXNjYW4uYzo3ODkwOlxcdCAqIFdoYXQgdG8gcmVjbGFpbSBpcyBnYXRlZCBwZXIgdHlwZSBieSBzYy1cXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0gYW5kXFxubW0vdm1zY2FuLmMtNzg5MS1cXHQgKiBzYy1cXHUwMDNlc2tpcF9maWxlX3JlY2xhaW0uXFxuLS1cXG5tbS92bXNjYW4uYz03OTA4PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03OTU4LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc5NTk6XFx0c2Muc2tpcF9zbGFiX3JlY2xhaW0gPVxcbm1tL3Ztc2Nhbi5jLTc5NjAtXFx0XFx0bm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFxcdTAwM2M9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjMyLjA5MTU3Mzg1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDU5MDEwNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IFJlY2xhaW0gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aHJvdWdoIHRoaXMgbmV3IG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLiBJdCBsb29rcyBsaWtlIHRoZSBgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gIGZsYWdzIGFyZSBvbmx5IGV2ZXIgc2V0IHdpdGhpbiB0aGUgYG5vZGVfcmVjbGFpbWAgZnVuY3Rpb24uIFRoYXQncyB0aGUga2V5LiBUaGF0IG1lYW5zIHRoaXMgbmV3IGxvZ2ljLCB0aGUgc2tpcHBpbmcgb2Ygc2xhYiBhbmQgZmlsZSByZWNsYWltLCBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIGBub2RlX3JlY2xhaW1gIGlzIHNwZWNpZmljYWxseSBjYWxsZWQuXG5cbk5vdywgd2hlcmUgKmRvZXMqIGBub2RlX3JlY2xhaW1gIGdldCBjYWxsZWQgZnJvbT8gUmlnaHQsIGl04oCZcyBjYWxsZWQgZnJvbSBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAsIGJ1dCBvbmx5IHdoZW4gYG5vZGVfcmVjbGFpbV9tb2RlYCBpcyBlbmFibGVkLiBBaCwgYW5kIGBub2RlX3JlY2xhaW1fbW9kZWAsIHRoYXQncyBvdXIgZnJpZW5kLCB0aGUgc3lzY3RsIHZhcmlhYmxlIGB2bS56b25lX3JlY2xhaW1fbW9kZWAuIFNvLCBpZiBgdm0uem9uZV9yZWNsYWltX21vZGVgIGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBuZXcgc2tpcHBpbmcgYmVoYXZpb3IgdGFrZXMgZWZmZWN0LlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBub3cgYmVjb21lczogV2hhdCdzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGB2bS56b25lX3JlY2xhaW1fbW9kZWA/IElmIGl0J3MgemVybywgdGhlbiB0aGUgbmV3IGxvZ2ljIGlzLCBieSBkZWZhdWx0LCAqbm90KiBpbiBwbGF5IHVubGVzcyBzb21lb25lIGV4cGxpY2l0bHkgc2V0cyBpdC4gSXQncyBwb3NzaWJsZSB0aGF0IGNlcnRhaW4gYXJjaGl0ZWN0dXJlcyBvciBOVU1BIHNldHVwcyBtaWdodCBzZXQgaXQgYXMgYSBkZWZhdWx0LCBzbyB0aGF0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIExldCdzIGRpZyBpbnRvIHRoZSBkZWZhdWx0cyBhbmQgc2VlIHdoYXTigJlzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzbuKAmXQgZW5hYmxlZCBieSBkZWZhdWx0IG9uIG15IHRlc3QgcGxhdGZvcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDYxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjM3LjU1MDU4NzE2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5ODEwNjkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJub2RlX3JlY2xhaW1fbW9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC90b3BvbG9neS5oPTQzPWludCBhcmNoX3VwZGF0ZV9jcHVfdG9wb2xvZ3kodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgtNTUtICogKGluIHdoYXRldmVyIGFyY2ggc3BlY2lmaWMgbWVhc3VyZW1lbnQgdW5pdHMgcmV0dXJuZWQgYnkgbm9kZV9kaXN0YW5jZSgpKVxcbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaDo1NjogKiBhbmQgbm9kZV9yZWNsYWltX21vZGUgaXMgZW5hYmxlZCB0aGVuIHRoZSBWTSB3aWxsIG9ubHkgY2FsbCBub2RlX3JlY2xhaW0oKVxcbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaC01Ny0gKiBvbiBub2RlcyB3aXRoaW4gdGhpcyBkaXN0YW5jZS5cXG4tLVxcbm1tL2ludGVybmFsLmg9MTE0MT1zdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfZHJhaW5fcmVtb3RlKGludCBjcHUpIHsgfVxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMTQ0LSNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL2ludGVybmFsLmg6MTE0NTpleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xcbm1tL2ludGVybmFsLmgtMTE0Ni1cXG4tLVxcbm1tL2ludGVybmFsLmg9MTE0OT1leHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKTtcXG5tbS9pbnRlcm5hbC5oLTExNTAtI2Vsc2VcXG5tbS9pbnRlcm5hbC5oOjExNTE6I2RlZmluZSBub2RlX3JlY2xhaW1fbW9kZSAwXFxubW0vaW50ZXJuYWwuaC0xMTUyLVxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMTY0PXN0YXRpYyBpbmxpbmUgYm9vbCBub2RlX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxcbm1tL2ludGVybmFsLmgtMTE2NS17XFxubW0vaW50ZXJuYWwuaDoxMTY2OlxcdC8qIElzIGFueSBub2RlX3JlY2xhaW1fbW9kZSBiaXQgc2V0PyAqL1xcbm1tL2ludGVybmFsLmg6MTE2NzpcXHRyZXR1cm4gbm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiAoUkVDTEFJTV9aT05FfFJFQ0xBSU1fV1JJVEV8UkVDTEFJTV9VTk1BUCk7XFxubW0vaW50ZXJuYWwuaC0xMTY4LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMDA0PXN0YXRpYyBib29sIGNvbGxhcHNlX3NjYW5fYWJvcnQoaW50IG5pZCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEwMDgtXFx0LypcXG5tbS9raHVnZXBhZ2VkLmM6MTAwOTpcXHQgKiBJZiBub2RlX3JlY2xhaW1fbW9kZSBpcyBkaXNhYmxlZCwgdGhlbiBubyBleHRyYSBlZmZvcnQgaXMgbWFkZSB0b1xcbm1tL2todWdlcGFnZWQuYy0xMDEwLVxcdCAqIGFsbG9jYXRlIG1lbW9yeSBsb2NhbGx5Llxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTM4MDA9Z2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgYWxsb2NfZmxhZ3MsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzg3Ni1cXHRcXHQgKiBrc3dhcGQgd2FrZXVwcyBvbiBvbmx5IHNvbWUgbm9kZXMuIEF2b2lkIGFjY2lkZW50YWxcXG5tbS9wYWdlX2FsbG9jLmM6Mzg3NzpcXHRcXHQgKiBcXFwibm9kZV9yZWNsYWltX21vZGVcXFwiLWxpa2UgYmVoYXZpb3IgaW4gdGhpcyBjYXNlLlxcbm1tL3BhZ2VfYWxsb2MuYy0zODc4LVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmM9Nzc1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03NzY4LVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInpvbmVfcmVjbGFpbV9tb2RlXFxcIixcXG5tbS92bXNjYW4uYzo3NzY5OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2bm9kZV9yZWNsYWltX21vZGUsXFxubW0vdm1zY2FuLmM6Nzc3MDpcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2Yobm9kZV9yZWNsYWltX21vZGUpLFxcbm1tL3Ztc2Nhbi5jLTc3NzEtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuLS1cXG5tbS92bXNjYW4uYz03Nzg4PW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzc5Ni0gKi9cXG5tbS92bXNjYW4uYzo3Nzk3OmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTc3OTgtXFxuLS1cXG5tbS92bXNjYW4uYz03ODMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODQzLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc4NDQ6XFx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9VTk1BUClcXG5tbS92bXNjYW4uYy03ODQ1LVxcdFxcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XFxuLS1cXG5tbS92bXNjYW4uYz03OTA4PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03OTE3LVxcdFxcdC5wcmlvcml0eSA9IE5PREVfUkVDTEFJTV9QUklPUklUWSxcXG5tbS92bXNjYW4uYzo3OTE4OlxcdFxcdC5tYXlfd3JpdGVwYWdlID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1dSSVRFKSxcXG5tbS92bXNjYW4uYzo3OTE5OlxcdFxcdC5tYXlfdW5tYXAgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcXHUwMDI2IFJFQ0xBSU1fVU5NQVApLFxcbm1tL3Ztc2Nhbi5jLTc5MjAtXFx0XFx0Lm1heV9zd2FwID0gMSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6MzkuMTQ4Njk4NzQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMjgwNzM0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNsYWltIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGUgYG5vZGVfcmVjbGFpbV9tb2RlYCBkZWZhdWx0cyB0byAwLCB3aGljaCBpcyBleHBlY3RlZC4gSG93ZXZlciwgc3l6a2FsbGVyIGNhbiByZWFkaWx5IG1hbmlwdWxhdGUgdGhpcyB0aHJvdWdoIGB2bS56b25lX3JlY2xhaW1fbW9kZWAsIGFuZCB0aGF0J3MgdGhlIGtleS4gSSBzZWUgdGhhdCBgbm9kZV9yZWNsYWltYCBnZXRzIHRyaWdnZXJlZCB3aXRoaW4gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIHdoZW4gYG5vZGVfcmVjbGFpbV9lbmFibGVkKClgIHJldHVybnMgdHJ1ZS4gQW5kIGBub2RlX3JlY2xhaW1fZW5hYmxlZCgpYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBiaXRzIHNldCBpbiBgbm9kZV9yZWNsYWltX21vZGVgLiBUaGVyZWZvcmUsIGJ5IHNldHRpbmcgYHZtLnpvbmVfcmVjbGFpbV9tb2RlYCwgc3l6a2FsbGVyIGNhbiBmb3JjZSBgbm9kZV9yZWNsYWltYCB0byBleGVjdXRlIGR1cmluZyBwYWdlIGFsbG9jYXRpb24uIFRoYXQncyBhIGNsZWFyIHBhdGggdG8gdGVzdGluZyBhbmQgZXhwbG9pdGluZyB0aGlzIGJlaGF2aW9yLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgbm93IHNoaWZ0cyB0byB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBgbm9kZV9yZWNsYWltYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYXMgSSBzdXNwZWN0ZWQuIEl0IGNhbGxzIGBzaHJpbmtfbm9kZWAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gYSBjYXNjYWRlIHRocm91Z2ggdGhlIHN0YXRpYyBmdW5jdGlvbnM6IGBnZXRfc2Nhbl9jb3VudGAsIGBzY2FuX2ZvbGlvc2AgYWxsIGV2ZW50dWFsbHkgZmVlZGluZyBpbnRvIGBzaHJpbmtfYWN0aXZlX2xpc3RgIG9yIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAuIGBzaHJpbmtfb25lYCBhbmQgYHNocmlua19ub2RlX21lbWNnc2AgYXJlIGFsc28gc3RhdGljLiBTaW5jZSBpdCdzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24sIGBub2RlX3JlY2xhaW1gIGlzIGRlZmluaXRlbHkgdGhlIHRhcmdldC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbm9kZV9yZWNsYWltYCBpcyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQncyBkZWNsYXJlZCBnbG9iYWxseSBpbiBgbW0vaW50ZXJuYWwuaGAsIHNvIHRoYXQncyBnb29kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZS4gTm8sIHRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGBub2RlX3JlY2xhaW1gIGFuZCBzdGF0aWMgZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AuIFNvIGl0J3MgY29uZmlybWVkLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgYENPTkZJR19OVU1BYC4gU3l6a2FsbGVyIHVzdWFsbHkgZW5hYmxlcyBOVU1BIGJ5IGRlZmF1bHQsIGJ1dCBJIHNob3VsZCBleHBsaWNpdGx5IGxpc3QgaXQgaW4gYEVuYWJsZUNvbmZpZ3NgIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuT2theSwgbGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBub2RlX3JlY2xhaW1gIGlzIHRoZSBzb2xlIG5vbi1zdGF0aWMgZnVuY3Rpb24gZXhwb3NlZCBpbiB0aGUgcmVsZXZhbnQgY29kZS4gWWVwLCBpdCBpcy5cblxuSG9sZCBvbiBhIHNlY29uZC4gRG9lcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYWxzbyBhY3QgYXMgYW4gZW50cnkgcG9pbnQgdG8gYF9fbm9kZV9yZWNsYWltYD8gTm8sIGl0IGNhbGxzIGBfX25vZGVfcmVjbGFpbWAgZGlyZWN0bHkuIFNvIGBub2RlX3JlY2xhaW1gIGlzIGluZGVlZCB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIHRoYXQncyB0aGUgZnVuY3Rpb24gSSB3YW50IHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMjo0Ny4yNzY3NzY0OTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzAzNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc4MzM9c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4NjQtICovXFxubW0vdm1zY2FuLmM6Nzg2NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc4NjYtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYz03OTA4PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03OTY0LVxcbm1tL3Ztc2Nhbi5jOjc5NjU6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc5NjYtXFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTc3LVxcbm1tL3Ztc2Nhbi5jOjc5Nzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03OTc5LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9Nzk5OD1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDkwLVxcbm1tL3Ztc2Nhbi5jOjgwOTE6XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtODA5Mi1cXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6NDcuMzIwNDgzNTMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDU2NzgxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFJlLWRlY2xhcmF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgX19ub2RlX3JlY2xhaW1gIGRlZmluZWQgdHdpY2U/IFRoYXQncyBpbW1lZGlhdGVseSBzdXNwZWN0LiBXYWl0LCBubywgaXQgbG9va3MgbGlrZSBvbmUgb2YgdGhlbSBpcyBqdXN0IGEgZm9yd2FyZCBkZWNsYXJhdGlvbiwgcGVyaGFwcyBmb3IgYSBjaXJjdWxhciBkZXBlbmRlbmN5IG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aGVzZSB0aGluZ3MgYmVmb3JlIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBieSB0YWtpbmcgYSBwZWVrIGF0IGxpbmUgNzk3OC4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGUgc2l0dWF0aW9uIGFuZCBwcmV2ZW50IG1lIGZyb20gZ29pbmcgZG93biB0aGUgd3JvbmcgZGVidWdnaW5nIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6NTAuNjY2MTYzNzIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTcwOlxcdFxcdGVsc2VcXG43OTcxOlxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50KFBHU0NBTl9aT05FX1JFQ0xBSU1fRkFJTEVEKTtcXG43OTcyOlxcdFxcbjc5NzM6XFx0XFx0cmV0dXJuIHJldDtcXG43OTc0OlxcdH1cXG43OTc1OlxcdFxcbjc5NzY6XFx0I2Vsc2VcXG43OTc3OlxcdFxcbjc5Nzg6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG43OTc5OlxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbjc5ODA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjc5ODE6XFx0e1xcbjc5ODI6XFx0XFx0cmV0dXJuIDA7XFxuNzk4MzpcXHR9XFxuNzk4NDpcXHRcXG43OTg1OlxcdCNlbmRpZlxcbjc5ODY6XFx0XFxuNzk4NzpcXHRlbnVtIHtcXG43OTg4OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxcbjc5ODk6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuNzk5MDpcXHRcXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxcbjc5OTE6XFx0fTtcXG43OTkyOlxcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG43OTkzOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXFxcInN3YXBwaW5lc3M9JWRcXFwifSxcXG43OTk0OlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFxcXCJzd2FwcGluZXNzPW1heFxcXCJ9LFxcbjc5OTU6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXFxuNzk5NjpcXHR9O1xcbjc5OTc6XFx0XFxuNzk5ODpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzk5OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjUwLjY2NjUxNTg1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQzOTU2MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOVU1BLVJlbGF0ZWQgTWVtb3J5IFJlY2xhaW0gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgYF9fbm9kZV9yZWNsYWltYCBpcyBlc3NlbnRpYWxseSBhIHBsYWNlaG9sZGVyLCBvciBzdHViLCBpZiBgQ09ORklHX05VTUFgIGlzbid0IGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IG5vIE5VTUEsIG5vIG5vZGUtc3BlY2lmaWMgcmVjbGFpbS4gQnV0IHdhaXQuLi4gSSdtIGFsc28gc2VlaW5nIHRoaXMgc2FtZSBzdHViIGRlZmluaXRpb24gZm9yIGBub2RlX3JlY2xhaW1gIHdpdGhpbiBgbW0vaW50ZXJuYWwuaGAuIENvbmZ1c2luZywgYnV0IHRoZSBwb2ludCBpcyBjbGVhciwgaXQgZG9lcyBub3RoaW5nIHdoZW4gTlVNQSBpcyBub3QgY29uZmlndXJlZC5cblxuTm93LCBteSBtaW5kIGdvZXMgdG8gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBUaGlzIHNlZW1zIHRvIGJlICpvdXRzaWRlKiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZm9yIGBDT05GSUdfTlVNQWAuIEhvbGQgb24uLi4geWVzLCB0aGF0J3MgcmlnaHQuIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBoYXZlIE5VTUEgZW5hYmxlZC4gVGhhdCBjYW4ndCBiZSByaWdodCwgY2FuIGl0P1xuXG5TbyBpZiBOVU1BIGlzbid0IGVuYWJsZWQsIGBfX25vZGVfcmVjbGFpbWAgaXMganVzdCB0aGF0IHN0dWIgZnVuY3Rpb24sIHJldHVybmluZyAwLiBUaGF0IG11c3QgbWVhbiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHdoZW4gTlVNQSBpcyBub3QgcHJlc2VudCwgd2lsbCBlbmQgdXAgY2FsbGluZyB0aGF0IHN0dWIgYW5kIGp1c3QgcmV0dXJuaW5nIHplcm8uIEl0IGlzIGVzc2VudGlhbGx5IGEgbm8tb3AgaW4gdGhhdCBjYXNlLiBJJ20gd29uZGVyaW5nIHdoeSB3ZSBkZWZpbmUgdGhlIGZ1bmN0aW9uIGlmIGl0IGhhcyBubyBmdW5jdGlvbmFsaXR5LlxuXG5XYWl0IGEgc2Vjb25kLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgY2FsbGVkIGZyb20gYHJlY2xhaW1fc3RvcmVgLCBpc24ndCBpdD8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGhvdyBgcmVjbGFpbV9zdG9yZWAgaXMgZGVmaW5lZCwgc2luY2UgdGhhdCBpcyB1bmRlciB0aGUgYHN5c2ZzYCBhbmQgYE5VTUFgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQWgsIGJ1dCB3YWl0LCBgcmVjbGFpbV9zdG9yZWAgaXMgZGVmaW5lZCBieSB0aG9zZSBjb25kaXRpb25zISBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IGFsbCBvZiB0aGlzIHdvcmtzLCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6NTYuMzEwNDc0MDA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4MTQ1OlxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50cyhVTkVWSUNUQUJMRV9QR1NDQU5ORUQsIHBnc2Nhbm5lZCk7XFxuODE0NjpcXHRcXHR9XFxuODE0NzpcXHR9XFxuODE0ODpcXHRFWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XFxuODE0OTpcXHRcXG44MTUwOlxcdCNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcXG44MTUxOlxcdHN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbjgxNTI6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG44MTUzOlxcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuODE1NDpcXHR7XFxuODE1NTpcXHRcXHRpbnQgcmV0LCBuaWQgPSBkZXYtXFx1MDAzZWlkO1xcbjgxNTY6XFx0XFxuODE1NzpcXHRcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxuODE1ODpcXHRcXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XFxuODE1OTpcXHR9XFxuODE2MDpcXHRcXG44MTYxOlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9XTyhyZWNsYWltKTtcXG44MTYyOlxcdGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuODE2MzpcXHR7XFxuODE2NDpcXHRcXHRyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKFxcdTAwMjZub2RlLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6NTYuMzEwOTEwMDQ1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjY1MDc2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIHRoZSBmaXJzdCBwZXJzb24gYW5kIHByb3ZpZGluZyBhIFwiZnVsc29tZVwiIGV4cGxhbmF0aW9uOlxuXG4qKk5hdmlnYXRpbmcgTlVNQS1Bd2FyZSBSZWNsYWltIExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHJlY2xhaW1fc3RvcmVgIGZ1bmN0aW9uLCBhbmQgaXQncyBmbGFnZ2VkIGFzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19OVU1BYC4gVGhhdCdzIG5vdCB1bmV4cGVjdGVkOyBOVU1BIHN5c3RlbXMgb2Z0ZW4gaGF2ZSBzcGVjaWFsaXplZCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzLCBzbyB0aGUgY29kZSB3b3VsZCBiZSBkaWZmZXJlbnQuIEl0IG1ha2VzIHNlbnNlIHRoYXQgcmVjbGFpbSBmdW5jdGlvbnMgd291bGQgYmUgdGllZCB0byB0aGF0LiBIb3dldmVyLi4uICp0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBkaWcgZGVlcGVyLiogVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBgcmVjbGFpbV9zdG9yZWAgaXMgYWxzbyBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBOVU1BIGNvbnRleHQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZSBmb3IgdGhlc2UgXCJvdGhlclwiIGNhbGxzIHRvIGVuc3VyZSB0aGUgbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kgaGFuZGxlcyBib3RoIE5VTUEgYW5kIG5vbi1OVU1BIHNjZW5hcmlvcyBwcm9wZXJseS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBjb2RlJ3Mgcm9idXN0bmVzcy4gQXJlIHRoZXJlIHNwZWNpZmljIHNpdHVhdGlvbnMsIGxpa2Ugb2ZmbGluaW5nIG5vZGVzLCB0aGF0IHVzZSB0aGUgc2hhcmVkIGNvZGU/IElzIHRoZXJlIGEgc3VidGxlIGJ1ZyBsdXJraW5nIGR1ZSB0byB0aGlzIGR1YWxpdHk/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRob3NlIGNyb3NzLWNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2UuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgY2FsbCBncmFwaHMgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXkgcmVsYXRlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA1MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjM6MDAuNTc3NDE5NzYzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0MTg2MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9Njk5PWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcXG5tbS9pbnRlcm5hbC5oOjcwMDppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vaW50ZXJuYWwuaC03MDEtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDcyPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwNzctXFxubW0vbWVtY29udHJvbC5jOjUwNzg6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcXG5tbS9tZW1jb250cm9sLmMtNTA3OS1cXHRpZiAocmV0KVxcbi0tXFxubW0vdm1zY2FuLmM9Nzk5Mj1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03OTk3LVxcbm1tL3Ztc2Nhbi5jOjc5OTg6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc5OTktXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODE1MT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNTYtXFxubW0vdm1zY2FuLmM6ODE1NzpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODE1OC1cXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIzOjAyLjAyMTYxNjA4NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTczODMyOTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgdGhpbmtpbmcgbGlrZSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBSZWNsYW1hdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSBzZWUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGJlaW5nIGludm9rZWQgZnJvbSBgbWVtb3J5X3JlY2xhaW1gIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHRoZSBjZ3JvdXAgdjIgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UgYXQgcGxheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgb2YgdGhpcyBwcm9hY3RpdmUgcmVjbGFtYXRpb24sIGFuZCB3aGVyZSBpdCdzIGJlaW5nIHRyaWdnZXJlZCBmcm9tLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpdHNlbGYuIEknbSBoZWFkaW5nIG92ZXIgdG8gYG1tL3Ztc2Nhbi5jYCB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSdtIGJldHRpbmcgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gaXMgaW1wbGVtZW50ZWQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQncyBkb2luZyB3aXRoIHBhZ2VzIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc2NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIzOjA2LjE5NTQ1MTcxM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk5OCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc5OTg6XFx0aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbjc5OTk6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbjgwMDA6XFx0e1xcbjgwMDE6XFx0XFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xcbjgwMDI6XFx0XFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xcbjgwMDM6XFx0XFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcXG44MDA0OlxcdFxcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcXG44MDA1OlxcdFxcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcXG44MDA2OlxcdFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcXG44MDA3OlxcdFxcbjgwMDg6XFx0XFx0aWYgKCFidWYgfHwgKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcXHUwMDI2XFx1MDAyNiBwZ2RhdCkpXFxuODAwOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDEwOlxcdFxcbjgwMTE6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG44MDEyOlxcdFxcbjgwMTM6XFx0XFx0b2xkX2J1ZiA9IGJ1ZjtcXG44MDE0OlxcdFxcdG5yX3RvX3JlY2xhaW0gPSBtZW1wYXJzZShidWYsIFxcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xcbjgwMTU6XFx0XFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxcbjgwMTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODAxNzpcXHRcXG44MDE4OlxcdFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuODAxOTpcXHRcXG44MDIwOlxcdFxcdHdoaWxlICgoc3RhcnQgPSBzdHJzZXAoXFx1MDAyNmJ1ZiwgXFxcIiBcXFwiKSkgIT0gTlVMTCkge1xcbjgwMjE6XFx0XFx0XFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxcbjgwMjI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuODAyMzpcXHRcXHRcXHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XFxuODAyNDpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XFxuODAyNTpcXHRcXHRcXHRcXHRpZiAobWF0Y2hfaW50KFxcdTAwMjZhcmdzWzBdLCBcXHUwMDI2c3dhcHBpbmVzcykpXFxuODAyNjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDI3OlxcdFxcdFxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2MgTUlOX1NXQVBQSU5FU1MgfHxcXG44MDI4OlxcdFxcdFxcdFxcdCAgICBzd2FwcGluZXNzIFxcdTAwM2UgTUFYX1NXQVBQSU5FU1MpXFxuODAyOTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDMwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjgwMzE6XFx0XFx0XFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWDpcXG44MDMyOlxcdFxcdFxcdFxcdHN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTtcXG44MDMzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjgwMzQ6XFx0XFx0XFx0ZGVmYXVsdDpcXG44MDM1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjgwMzY6XFx0XFx0XFx0fVxcbjgwMzc6XFx0XFx0fVxcbjgwMzg6XFx0XFxuODAzOTpcXHRcXHR3aGlsZSAobnJfcmVjbGFpbWVkIFxcdTAwM2MgbnJfdG9fcmVjbGFpbSkge1xcbjgwNDA6XFx0XFx0XFx0LyogV2lsbCBjb252ZXJnZSBvbiB6ZXJvLCBidXQgcmVjbGFpbSBlbmZvcmNlcyBhIG1pbmltdW0gKi9cXG44MDQxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XFxuODA0MjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcXG44MDQzOlxcdFxcbjgwNDQ6XFx0XFx0XFx0LypcXG44MDQ1OlxcdFxcdFxcdCAqIFJldHVybiAtRVJFU1RBUlRTWVMgdG8gYWxsb3cgdGhlIGZyZWV6ZXIgdG8gaW50ZXJydXB0IHRoZVxcbjgwNDY6XFx0XFx0XFx0ICogdGFzay4gVGhlIHN5c2NhbGwgd2lsbCBiZSB0cmFuc3BhcmVudGx5IHJlc3RhcnRlZCB1cG9uXFxuODA0NzpcXHRcXHRcXHQgKiByZXN1bWUuIEZvciByZWFsIHNpZ25hbHMsIGl0IGVpdGhlciByZXN0YXJ0cyB0aGUgc3lzY2FsbFxcbjgwNDg6XFx0XFx0XFx0ICogKGlmIFNBX1JFU1RBUlQgaXMgc2V0KSBvciBpcyBjb252ZXJ0ZWQgdG8gLUVJTlRSIGJ5IHRoZVxcbjgwNDk6XFx0XFx0XFx0ICogc2lnbmFsIGxheWVyLlxcbjgwNTA6XFx0XFx0XFx0ICovXFxuODA1MTpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuODA1MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVSRVNUQVJUU1lTO1xcbjgwNTM6XFx0XFxuODA1NDpcXHRcXHRcXHQvKiBjZ3JvdXBfcm1kaXIoKSB3YWl0cyBmb3IgdXMgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC4gKi9cXG44MDU1OlxcdFxcdFxcdGlmIChtZW1jZyBcXHUwMDI2XFx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpXFxuODA1NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG44MDU3OlxcdFxcbjgwNTg6XFx0XFx0XFx0LypcXG44MDU5OlxcdFxcdFxcdCAqIFRoaXMgaXMgdGhlIGZpbmFsIGF0dGVtcHQsIGRyYWluIHBlcmNwdSBscnUgY2FjaGVzIGluIHRoZVxcbjgwNjA6XFx0XFx0XFx0ICogaG9wZSBvZiBpbnRyb2R1Y2luZyBtb3JlIGV2aWN0YWJsZSBwYWdlcy5cXG44MDYxOlxcdFxcdFxcdCAqL1xcbjgwNjI6XFx0XFx0XFx0aWYgKCFucl9yZXRyaWVzKVxcbjgwNjM6XFx0XFx0XFx0XFx0bHJ1X2FkZF9kcmFpbl9hbGwoKTtcXG44MDY0OlxcdFxcbjgwNjU6XFx0XFx0XFx0aWYgKG1lbWNnKSB7XFxuODA2NjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zO1xcbjgwNjc6XFx0XFxuODA2ODpcXHRcXHRcXHRcXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQIHxcXG44MDY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XFxuODA3MDpcXHRcXHRcXHRcXHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxcbjgwNzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGJhdGNoX3NpemUsIGdmcF9tYXNrLFxcbjgwNzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHJlY2xhaW1fb3B0aW9ucyxcXG44MDczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFxcdTAwMjZzd2FwcGluZXNzKTtcXG44MDc0OlxcdFxcdFxcdH0gZWxzZSB7XFxuODA3NTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbjgwNzY6XFx0XFx0XFx0XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxuODA3NzpcXHRcXHRcXHRcXHRcXHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXFxuODA3ODpcXHRcXHRcXHRcXHRcXHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFxcdTAwMjZzd2FwcGluZXNzLFxcbjgwNzk6XFx0XFx0XFx0XFx0XFx0LnByaW9yaXR5ID0gREVGX1BSSU9SSVRZLFxcbjgwODA6XFx0XFx0XFx0XFx0XFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxcbjgwODE6XFx0XFx0XFx0XFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgoYmF0Y2hfc2l6ZSwgU1dBUF9DTFVTVEVSX01BWCksXFxuODA4MjpcXHRcXHRcXHRcXHRcXHQubWF5X3VubWFwID0gMSxcXG44MDgzOlxcdFxcdFxcdFxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuODA4NDpcXHRcXHRcXHRcXHRcXHQucHJvYWN0aXZlID0gMSxcXG44MDg1OlxcdFxcdFxcdFxcdH07XFxuODA4NjpcXHRcXG44MDg3OlxcdFxcdFxcdFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsXFxuODA4ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpKVxcbjgwODk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG44MDkwOlxcdFxcbjgwOTE6XFx0XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxuODA5MjpcXHRcXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG44MDkzOlxcdFxcdFxcdH1cXG44MDk0OlxcdFxcbjgwOTU6XFx0XFx0XFx0aWYgKCFyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW5yX3JldHJpZXMtLSlcXG44MDk2OlxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbjgwOTc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIzOjA2LjE5NTc1MTUxM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg3MzEyNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlY2xhaW1pbmcgTWVtb3J5OiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgYmVpbmcgcmVjbGFpbWVkLCBzcGVjaWZpY2FsbHkgd2l0aCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEl0IGFwcGVhcnMgdGhhdCB3aGVuIGEgYHBnZGF0YCAocGFnZSBkYXRhIHN0cnVjdHVyZSkgaXMgYXZhaWxhYmxlIOKAkyBsaWtlIHdoZW4gd2UncmUgdXNpbmcgdGhlIHN5c2ZzIGludGVyZmFjZSBgcmVjbGFpbV9zdG9yZWAg4oCTIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBjYWxscyBgX19ub2RlX3JlY2xhaW1gIGRpcmVjdGx5LiBUaGF0IG1ha2VzIHNlbnNlLCBpbiBwcmluY2lwbGUsIGZvciBlZmZpY2llbnQgbm9kZS1sZXZlbCByZWNsYWltLlxuXG5CdXQgaGFuZyBvbiBhIHNlY29uZC4uLnNvbWV0aGluZyBzZWVtcyBvZmYuIEknbSByZWNhbGxpbmcgdGhhdCBgX19ub2RlX3JlY2xhaW1gIGRvZXNuJ3Qgc2VlbSB0byBzZXQgdGhvc2UgZmxhZ3Mg4oCTIGBza2lwX3NsYWJfcmVjbGFpbWAgb3IgYHNraXBfZmlsZV9yZWNsYWltYC4gVGhvc2UgYXJlIGNyaXRpY2FsIGZvciBjb250cm9sbGluZyB3aGF0IGdldHMgcmVjbGFpbWVkISBOb3csIEkgZGlzdGluY3RseSByZW1lbWJlciB0aGF0IHRob3NlIGZsYWdzIGFyZSBhY3R1YWxseSBzZXQgYnkgYG5vZGVfcmVjbGFpbWAuIEkgbmVlZCB0byByZXZpc2l0IHRoYXQgZnVuY3Rpb24gdG8gYmUgY2VydGFpbi4gSnVzdCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgdGhpcyBpcyB0aGUgYXBwcm9wcmlhdGUgcGF0aC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIG5vdCBza2lwcGluZyBjcnVjaWFsIHN0ZXBzIGluIG91ciByZWNsYW1hdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjM6MTAuNTgzMDY2NDAzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTA4LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTA4OlxcdHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuNzkwOTpcXHR7XFxuNzkxMDpcXHRcXHR1bnNpZ25lZCBsb25nIHJldDtcXG43OTExOlxcdFxcdC8qIE1pbmltdW0gcGFnZXMgbmVlZGVkIGluIG9yZGVyIHRvIHN0YXkgb24gbm9kZSAqL1xcbjc5MTI6XFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuNzkxMzpcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbjc5MTQ6XFx0XFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgobnJfcGFnZXMsIFNXQVBfQ0xVU1RFUl9NQVgpLFxcbjc5MTU6XFx0XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxuNzkxNjpcXHRcXHRcXHQub3JkZXIgPSBvcmRlcixcXG43OTE3OlxcdFxcdFxcdC5wcmlvcml0eSA9IE5PREVfUkVDTEFJTV9QUklPUklUWSxcXG43OTE4OlxcdFxcdFxcdC5tYXlfd3JpdGVwYWdlID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1dSSVRFKSxcXG43OTE5OlxcdFxcdFxcdC5tYXlfdW5tYXAgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcXHUwMDI2IFJFQ0xBSU1fVU5NQVApLFxcbjc5MjA6XFx0XFx0XFx0Lm1heV9zd2FwID0gMSxcXG43OTIxOlxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG43OTIyOlxcdFxcdH07XFxuNzkyMzpcXHRcXG43OTI0OlxcdFxcdC8qXFxuNzkyNTpcXHRcXHQgKiBtaW5fdW5tYXBwZWRfcGFnZXMgYW5kIG1pbl9zbGFiX3BhZ2VzIG9ubHkgZ2F0ZSBmaWxlIGFuZCBzbGFiLlxcbjc5MjY6XFx0XFx0ICogQmFpbCBvdXQgb25seSB3aGVuIGJvdGggYXJlIHVuZGVyIHRoZWlyIGxpbWl0cyBhbmQgYW5vbiBjYW5ub3RcXG43OTI3OlxcdFxcdCAqIGJlIHJlY2xhaW1lZCBlaXRoZXIsIHNvIHdlIGRvIG5vdCBza2lwIHJlY2xhaW1hYmxlIGFub24uXFxuNzkyODpcXHRcXHQgKi9cXG43OTI5OlxcdFxcdGlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXFx1MDAzYz0gcGdkYXQtXFx1MDAzZW1pbl91bm1hcHBlZF9wYWdlcyBcXHUwMDI2XFx1MDAyNlxcbjc5MzA6XFx0XFx0ICAgIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcXHUwMDNjPVxcbjc5MzE6XFx0XFx0ICAgIHBnZGF0LVxcdTAwM2VtaW5fc2xhYl9wYWdlcyBcXHUwMDI2XFx1MDAyNlxcbjc5MzI6XFx0XFx0ICAgICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBcXHUwMDI2c2MpKVxcbjc5MzM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzkzNDpcXHRcXG43OTM1OlxcdFxcdC8qXFxuNzkzNjpcXHRcXHQgKiBEbyBub3Qgc2NhbiBpZiB0aGUgYWxsb2NhdGlvbiBzaG91bGQgbm90IGJlIGRlbGF5ZWQuXFxuNzkzNzpcXHRcXHQgKi9cXG43OTM4OlxcdFxcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spIHx8IChjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DKSlcXG43OTM5OlxcdFxcdFxcdHJldHVybiAwO1xcbjc5NDA6XFx0XFxuNzk0MTpcXHRcXHQvKlxcbjc5NDI6XFx0XFx0ICogT25seSBydW4gbm9kZSByZWNsYWltIG9uIHRoZSBsb2NhbCBub2RlIG9yIG9uIG5vZGVzIHRoYXQgZG8gbm90XFxuNzk0MzpcXHRcXHQgKiBoYXZlIGFzc29jaWF0ZWQgcHJvY2Vzc29ycy4gVGhpcyB3aWxsIGZhdm9yIHRoZSBsb2NhbCBwcm9jZXNzb3JcXG43OTQ0OlxcdFxcdCAqIG92ZXIgcmVtb3RlIHByb2Nlc3NvcnMgYW5kIHNwcmVhZCBvZmYgbm9kZSBtZW1vcnkgYWxsb2NhdGlvbnNcXG43OTQ1OlxcdFxcdCAqIGFzIHdpZGUgYXMgcG9zc2libGUuXFxuNzk0NjpcXHRcXHQgKi9cXG43OTQ3OlxcdFxcdGlmIChub2RlX3N0YXRlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBOX0NQVSkgXFx1MDAyNlxcdTAwMjYgcGdkYXQtXFx1MDAzZW5vZGVfaWQgIT0gbnVtYV9ub2RlX2lkKCkpXFxuNzk0ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG43OTQ5OlxcdFxcbjc5NTA6XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncykpXFxuNzk1MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG43OTUyOlxcdFxcbjc5NTM6XFx0XFx0LypcXG43OTU0OlxcdFxcdCAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGVcXG43OTU1OlxcdFxcdCAqIHNsYWIgb3IgdW5tYXBwZWQgcGFnZSBjYWNoZSBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IGl0cyBsaW1pdCwgbGVhdmVcXG43OTU2OlxcdFxcdCAqIHRoYXQgdHlwZSBhbG9uZSBldmVuIGlmIHRoZSBvdGhlciB0eXBlIHRyaXBwZWQgdGhlIGdhdGUgYW5kIGJyb3VnaHRcXG43OTU3OlxcdFxcdCAqIHVzIGludG8gbm9kZSByZWNsYWltLlxcbjc5NTg6XFx0XFx0ICovXFxuNzk1OTpcXHRcXHRzYy5za2lwX3NsYWJfcmVjbGFpbSA9XFxuNzk2MDpcXHRcXHRcXHRub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzYz1cXG43OTYxOlxcdFxcdFxcdHBnZGF0LVxcdTAwM2VtaW5fc2xhYl9wYWdlcztcXG43OTYyOlxcdFxcdHNjLnNraXBfZmlsZV9yZWNsYWltID1cXG43OTYzOlxcdFxcdFxcdG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcXHUwMDNjPSBwZ2RhdC1cXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzO1xcbjc5NjQ6XFx0XFxuNzk2NTpcXHRcXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFxcdTAwMjZzYyk7XFxuNzk2NjpcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG43OTY3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMzoxMC41ODMzMzY1ODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIxNDc3MjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGNvcnJlY3Q6IGBza2lwX3NsYWJfcmVjbGFpbWAgYW5kIGBza2lwX2ZpbGVfcmVjbGFpbWAgYXJlICpvbmx5KiBzZXQgd2l0aGluIHRoZSBgbm9kZV9yZWNsYWltYCBmdW5jdGlvbi4gVGhpcyBtZWFucyBgbm9kZV9yZWNsYWltYCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciB0aGlzIG5ldyBsb2dpYyB0byBiZSBhY3RpdmF0ZWQuIEkga25vdyBgbm9kZV9yZWNsYWltYCBpcyBpbnZva2VkIGZyb20gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIHdoZW4gYG5vZGVfcmVjbGFpbV9tb2RlYCBpcyBhY3RpdmUsIHdoaWNoIGl0c2VsZiBpcyBlbmFibGVkIGJ5IHNldHRpbmcgYHZtLnpvbmVfcmVjbGFpbV9tb2RlYCB2aWEgdGhlIHN5c2N0bCBpbnRlcmZhY2UuIENydWNpYWxseSwgYENPTkZJR19OVU1BYCBpcyBlc3NlbnRpYWw7IHdpdGhvdXQgaXQsIGBub2RlX3JlY2xhaW1gIGlzIGVpdGhlciBub3QgY29tcGlsZWQgb3IgaXMgYSBzdHViLlxuXG5UaGVyZWZvcmUsIG15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgYG5vZGVfcmVjbGFpbWAgc3ltYm9sLiBJ4oCZbSBjb25maWRlbnQgdGhhdCdzIHRoZSBwcmltYXJ5IHRhcmdldCBmb3IgZnV6emluZy4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGBub2RlX3JlY2xhaW1gIGlzIGluZGVlZCBub3Qgc3RhdGljIGFuZCBpcyBhIHZhbGlkIGZvY3VzIHN5bWJvbC5cblxuTGV0J3MgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSBub3RlZCBgQ09ORklHX1NZU0ZTYCBpcyByZXF1aXJlZCBmb3IgYHJlY2xhaW1fc3RvcmVgLCBidXQgc2luY2UgYG5vZGVfcmVjbGFpbWAgaXMgY2FsbGVkIGZyb20gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgYENPTkZJR19TWVNGU2AgaXNu4oCZdCAqc3RyaWN0bHkqIG5lZWRlZCBmb3IgdHJpZ2dlcmluZyB0aGlzIHNwZWNpZmljIG5ldyBiZWhhdmlvdXI7IGl04oCZcyBwcmltYXJpbHkgZHJpdmVuIGJ5IGBDT05GSUdfTlVNQWAuIEknbSBnb2luZyB0byByZWl0ZXJhdGUgdGhhdCBgbm9kZV9yZWNsYWltYCBpcyB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9uIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGRpcmVjdGx5IGNhbGxpbmcgdGhlIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnMgd2l0aCB0aGUgbmV3IGZsYWdzLlxuXG5Ob3csIGEgY3J1Y2lhbCBjb25zaWRlcmF0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIFFFTVUgY2FuIGVtdWxhdGUgTlVNQSBub2RlcywgYW5kIHN5emthbGxlciBjYW4gcHJvZ3JhbW1hdGljYWxseSBzZXQgYHZtLnpvbmVfcmVjbGFpbV9tb2RlYCB0byB0cmlnZ2VyIHRoZSBwYWdlIGFsbG9jYXRpb24uIFRoaXMgY29uZmlybXMgdGhhdCB0aGlzIGxvZ2ljICppcyogcmVhY2hhYmxlIGFuZCBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuXG5cblRvIHN1bW1hcml6ZSBteSBmaW5kaW5nczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWVcbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGxvZ2ljIHRvIHNraXAgc2xhYiBvciBmaWxlIHJlY2xhaW0gZHVyaW5nIG5vZGUgcmVjbGFpbSB3aGVuIGFzc29jaWF0ZWQgbGltaXRzIGFyZW4ndCBleGNlZWRlZC4gVGhpcyBpcyBhY2Nlc3NpYmxlIHZpYSBwYWdlIGFsbG9jYXRpb24gd2hlbiBOVU1BIG5vZGUgcmVjbGFpbSBpcyBlbmFibGVkIChlLmcuLCB0aHJvdWdoIGB2bS56b25lX3JlY2xhaW1fbW9kZWApLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbXCJub2RlX3JlY2xhaW1cIl1gXG4qICAgKipFbmFibGVDb25maWdzOioqIGBbXCJOVU1BXCJdYFxuXG5KdXN0IGEgcXVpY2sgY2hlY2sgdG8gY29uZmlybSBgbm9kZV9yZWNsYWltYCBpcyBub3Qgc3RhdGljIG9yIGlubGluZSBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIGB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKWAsIHNvIGl0J3MgZ2xvYmFsLiBFeGNlbGxlbnQuXG5cbkZpbmFsbHksIHdoaWxlIGBfX25vZGVfcmVjbGFpbWAgaXMgYWxzbyBwYXJ0IG9mIHRoaXMgY29kZSwgaXQncyBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGlubGluZWQsIG1ha2luZyBgbm9kZV9yZWNsYWltYCB0aGUgYmV0dGVyLCBtb3JlIGFjY2Vzc2libGUgZm9jdXMgc3ltYm9sLlxuXG5JJ20gY29uZmlkZW50IEkndmUgaWRlbnRpZmllZCB0aGUga2V5IHRhcmdldHMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIGBDT05GSUdfTlVNQWAgaXMgdGhlIGNyaXRpY2FsIHJlcXVpcmVtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAzNywiT3V0cHV0VG9rZW5zIjoxMDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMzoxOS43OTgxMTE0N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjkzNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IHJlY2xhaW0gbG9naWMgKHZtc2NhbikgdG8gc2tpcCBzbGFiIG9yIGZpbGUgcmVjbGFpbSB3aGVuIHRoZWlyIHJlc3BlY3RpdmUgbGltaXRzIGFyZSBub3QgZXhjZWVkZWQgZHVyaW5nIG5vZGUgcmVjbGFpbS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHBhZ2UgYWxsb2NhdGlvbiB3aGVuIE5VTUEgbm9kZSByZWNsYWltIGlzIGVuYWJsZWQgKGUuZy4sIHZpYSB2bS56b25lX3JlY2xhaW1fbW9kZSBzeXNjdGwpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJub2RlX3JlY2xhaW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyAodm1zY2FuKSB0byBza2lwIHNsYWIgb3IgZmlsZSByZWNsYWltIHdoZW4gdGhlaXIgcmVzcGVjdGl2ZSBsaW1pdHMgYXJlIG5vdCBleGNlZWRlZCBkdXJpbmcgbm9kZSByZWNsYWltLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBhbGxvY2F0aW9uIHdoZW4gTlVNQSBub2RlIHJlY2xhaW0gaXMgZW5hYmxlZCAoZS5nLiwgdmlhIHZtLnpvbmVfcmVjbGFpbV9tb2RlIHN5c2N0bCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIzOjE5Ljg3NzQxMjE5OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0ODQ2NjM5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMzoxOS44Nzc5MTEyMDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE0ODQxNjA5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIHR3byBuZXcgYml0ZmllbGRzIChgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gKSB0byBgc3RydWN0IHNjYW5fY29udHJvbGAgdG8gYmV0dGVyIGNvbnRyb2wgc2xhYiBhbmQgZmlsZSBwYWdlIHJlY2xhaW0uIEluc3RhbmNlcyBvZiBgc3RydWN0IHNjYW5fY29udHJvbGAgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgYW55IHVuc3BlY2lmaWVkIGZpZWxkcyAoaW5jbHVkaW5nIHRoZSBuZXdseSBhZGRlZCBiaXRmaWVsZHMpIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGNvbXBsZXggbWVtb3J5IGFsbG9jYXRpb25zIG9yIHBhcnNpbmcgb2YgZXh0ZXJuYWwgZGF0YSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGE1MmUyNzY1MTlkMTNjMTE0ZWY5ODA4YWQ5OTU4ZjJiM2JkODE2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA4OjIxOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uZDEzODM3Nzk1NzllYSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTExNCw2ICsxMTQsMTggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XG4gXHQvKiB6b25lX3JlY2xhaW1fbW9kZSwgYm9vc3QgcmVjbGFpbSwgY2dyb3VwIHJlc3RyaWN0aW9ucyAqL1xuIFx0dW5zaWduZWQgaW50IG1heV9zd2FwOjE7XG4gXG4rXHQvKlxuK1x0ICogV2hlbiBzZXQsIHRoZSBzbGFiIHNocmlua2VycyBhcmUgbm90IGludm9rZWQgYmVjYXVzZSByZWNsYWltYWJsZVxuK1x0ICogc2xhYiBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IG1pbl9zbGFiX3BhZ2VzLlxuK1x0ICovXG4rXHR1bnNpZ25lZCBpbnQgc2tpcF9zbGFiX3JlY2xhaW06MTtcbitcbitcdC8qXG4rXHQgKiBXaGVuIHNldCwgZmlsZSBwYWdlcyBhcmUgbm90IHJlY2xhaW1lZCBiZWNhdXNlIHVubWFwcGVkIHBhZ2UgY2FjaGVcbitcdCAqIGlzIGFscmVhZHkgYXQgb3IgYmVsb3cgbWluX3VubWFwcGVkX3BhZ2VzLlxuK1x0ICovXG4rXHR1bnNpZ25lZCBpbnQgc2tpcF9maWxlX3JlY2xhaW06MTtcbitcbiBcdC8qIE5vdCBhbGxvdyBjYWNoZV90cmltX21vZGUgdG8gYmUgdHVybmVkIG9uIGFzIHBhcnQgb2YgcmVjbGFpbT8gKi9cbiBcdHVuc2lnbmVkIGludCBub19jYWNoZV90cmltX21vZGU6MTtcbiBcbkBAIC0yNTc1LDYgKzI1ODcsMjEgQEAgc3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0b1xuK1x0ICogbWluX3VubWFwcGVkX3BhZ2VzOiBza2lwIGZpbGUgcGFnZXMgYW5kIHJlY2xhaW0gYW5vbiBvbmx5LiAgQXMgd2l0aFxuK1x0ICogdGhlIGFub24tb25seSBjYXNlIGFib3ZlLCBpZiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgdGhlcmUgaXNcbitcdCAqIG5vdGhpbmcgdG8gZG8gd2l0aG91dCBicmVhY2hpbmcgdGhlIGZsb29yLCBzbyBzY2FuIG5vdGhpbmcuXG4rXHQgKi9cbitcdGlmIChzYy1cdTAwM2Vza2lwX2ZpbGVfcmVjbGFpbSkge1xuK1x0XHRpZiAoIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSkge1xuK1x0XHRcdG1lbXNldChuciwgMCwgc2l6ZW9mKCpucikgKiBOUl9MUlVfTElTVFMpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuIFx0LyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqL1xuIFx0aWYgKCFzYy1cdTAwM2VtYXlfc3dhcCB8fCAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG4gXHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcbkBAIC00NzM2LDYgKzQ3NjMsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFZNX1dBUk5fT05fT05DRShucl90b19zY2FuIFx1MDAzZSBNQVhfTFJVX0JBVENIKTtcbiBcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7XG4gXG4rXHQvKlxuK1x0ICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0byBtaW5fdW5tYXBwZWRfcGFnZXMsXG4rXHQgKiBzbyBsZWF2ZSB0aGUgZmlsZSB0eXBlIGFsb25lOyBpc29sYXRlX2ZvbGlvcygpIHRoZW4gZmFsbHMgYmFjayB0b1xuK1x0ICogYW5vbi5cbitcdCAqL1xuK1x0aWYgKHNjLVx1MDAzZXNraXBfZmlsZV9yZWNsYWltIFx1MDAyNlx1MDAyNiB0eXBlID09IExSVV9HRU5fRklMRSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUylcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtNTExMSw3ICs1MTQ2LDggQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXG4gXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xuIFxuLVx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLCBzYy1cdTAwM2Vwcmlvcml0eSk7XG4rXHRpZiAoIXNjLVx1MDAzZXNraXBfc2xhYl9yZWNsYWltKVxuK1x0XHRzaHJpbmtfc2xhYihzYy1cdTAwM2VnZnBfbWFzaywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgbWVtY2csIHNjLVx1MDAzZXByaW9yaXR5KTtcbiBcbiBcdGlmICghc2MtXHUwMDNlcHJvYWN0aXZlKVxuIFx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgbWVtY2csIGZhbHNlLFxuQEAgLTYyMTQsOCArNjI1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcbiBcdFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbiBcbi1cdFx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLFxuLVx0XHRcdCAgICBzYy1cdTAwM2Vwcmlvcml0eSk7XG4rXHRcdGlmICghc2MtXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0pXG4rXHRcdFx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLFxuK1x0XHRcdFx0ICAgIHNjLVx1MDAzZXByaW9yaXR5KTtcbiBcbiBcdFx0LyogUmVjb3JkIHRoZSBncm91cCdzIHJlY2xhaW0gZWZmaWNpZW5jeSAqL1xuIFx0XHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSlcbkBAIC03ODQ2LDE2ICs3ODgzLDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XG4gXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKHAsIFx1MDAyNnNjLVx1MDAzZXJlY2xhaW1fc3RhdGUpO1xuIFxuLVx0aWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcdTAwM2UgcGdkYXQtXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzIHx8XG4tXHQgICAgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZSBwZ2RhdC1cdTAwM2VtaW5fc2xhYl9wYWdlcykge1xuLVx0XHQvKlxuLVx0XHQgKiBGcmVlIG1lbW9yeSBieSBjYWxsaW5nIHNocmluayBub2RlIHdpdGggaW5jcmVhc2luZ1xuLVx0XHQgKiBwcmlvcml0aWVzIHVudGlsIHdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmcmVlZC5cbi1cdFx0ICovXG4tXHRcdGRvIHtcbi1cdFx0XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xuLVx0XHR9IHdoaWxlIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiAtLXNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZT0gMCk7XG4tXHR9XG4rXHQvKlxuK1x0ICogRnJlZSBtZW1vcnkgYnkgY2FsbGluZyBzaHJpbmsgbm9kZSB3aXRoIGluY3JlYXNpbmdcbitcdCAqIHByaW9yaXRpZXMgdW50aWwgd2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZyZWVkLlxuK1x0ICpcbitcdCAqIFdoYXQgdG8gcmVjbGFpbSBpcyBnYXRlZCBwZXIgdHlwZSBieSBzYy1cdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSBhbmRcbitcdCAqIHNjLVx1MDAzZXNraXBfZmlsZV9yZWNsYWltLlxuK1x0ICovXG4rXHRkbyB7XG4rXHRcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XG4rXHR9IHdoaWxlIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiAtLXNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZT0gMCk7XG4gXG4gXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKHAsIE5VTEwpO1xuIFx0bWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUobm9yZWNsYWltX2ZsYWcpO1xuQEAgLTc4ODUsMTggKzc5MjIsMTQgQEAgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGlcbiBcdH07XG4gXG4gXHQvKlxuLVx0ICogTm9kZSByZWNsYWltIHJlY2xhaW1zIHVubWFwcGVkIGZpbGUgYmFja2VkIHBhZ2VzIGFuZFxuLVx0ICogc2xhYiBwYWdlcyBpZiB3ZSBhcmUgb3ZlciB0aGUgZGVmaW5lZCBsaW1pdHMuXG4tXHQgKlxuLVx0ICogQSBzbWFsbCBwb3J0aW9uIG9mIHVubWFwcGVkIGZpbGUgYmFja2VkIHBhZ2VzIGlzIG5lZWRlZCBmb3Jcbi1cdCAqIGZpbGUgSS9PIG90aGVyd2lzZSBwYWdlcyByZWFkIGJ5IGZpbGUgSS9PIHdpbGwgYmUgaW1tZWRpYXRlbHlcbi1cdCAqIHRocm93biBvdXQgaWYgdGhlIG5vZGUgaXMgb3ZlcmFsbG9jYXRlZC4gU28gd2UgZG8gbm90IHJlY2xhaW1cbi1cdCAqIGlmIGxlc3MgdGhhbiBhIHNwZWNpZmllZCBwZXJjZW50YWdlIG9mIHRoZSBub2RlIGlzIHVzZWQgYnlcbi1cdCAqIHVubWFwcGVkIGZpbGUgYmFja2VkIHBhZ2VzLlxuK1x0ICogbWluX3VubWFwcGVkX3BhZ2VzIGFuZCBtaW5fc2xhYl9wYWdlcyBvbmx5IGdhdGUgZmlsZSBhbmQgc2xhYi5cbitcdCAqIEJhaWwgb3V0IG9ubHkgd2hlbiBib3RoIGFyZSB1bmRlciB0aGVpciBsaW1pdHMgYW5kIGFub24gY2Fubm90XG4rXHQgKiBiZSByZWNsYWltZWQgZWl0aGVyLCBzbyB3ZSBkbyBub3Qgc2tpcCByZWNsYWltYWJsZSBhbm9uLlxuIFx0ICovXG4gXHRpZiAobm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUocGdkYXQpIFx1MDAzYz0gcGdkYXQtXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2M9XG4tXHQgICAgcGdkYXQtXHUwMDNlbWluX3NsYWJfcGFnZXMpXG4rXHQgICAgcGdkYXQtXHUwMDNlbWluX3NsYWJfcGFnZXMgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgXHUwMDI2c2MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qXG5AQCAtNzkxNyw2ICs3OTUwLDE4IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpXG4gXHRpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0LypcbitcdCAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGVcbitcdCAqIHNsYWIgb3IgdW5tYXBwZWQgcGFnZSBjYWNoZSBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IGl0cyBsaW1pdCwgbGVhdmVcbitcdCAqIHRoYXQgdHlwZSBhbG9uZSBldmVuIGlmIHRoZSBvdGhlciB0eXBlIHRyaXBwZWQgdGhlIGdhdGUgYW5kIGJyb3VnaHRcbitcdCAqIHVzIGludG8gbm9kZSByZWNsYWltLlxuK1x0ICovXG4rXHRzYy5za2lwX3NsYWJfcmVjbGFpbSA9XG4rXHRcdG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2M9XG4rXHRcdHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzO1xuK1x0c2Muc2tpcF9maWxlX3JlY2xhaW0gPVxuK1x0XHRub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXHUwMDNjPSBwZ2RhdC1cdTAwM2VtaW5fdW5tYXBwZWRfcGFnZXM7XG4rXG4gXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKTtcbiBcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIzOjE5Ljg3NzkxMjQ5OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQ4NDEzNjY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBOZWNlc3NpdHkqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS92bXNjYW4uY2AsIGFuZCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgdHdvIGJpdGZpZWxkcywgYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCwgaW50byB0aGUgYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBSaWdodCwgc28gaXQncyBhbGwgYWJvdXQgbWVtb3J5IHJlY2xhaW0g4oCTIHBhZ2UgY2FjaGUsIHNsYWIsIGFub24gcGFnZXMuLi4gbm90aGluZyAqZGlyZWN0bHkqIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxuXG5UaGUgd2F5IGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBpcyBoYW5kbGVkIGlzIGtleSBoZXJlLiBJdCdzIGFsbW9zdCBhbHdheXMgc3RhY2stYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB3aXRoIHRob3NlIG5pY2UgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGxpa2UgaW4gYG5vZGVfcmVjbGFpbWAuIFRoYXQncyBnb29kLCBiZWNhdXNlIHRoZSBjb21waWxlciBhdXRvbWF0aWNhbGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdCwgaW5jbHVkaW5nIHRoZXNlIG5ldyBiaXRmaWVsZHMuIFNvIHRoZXJlJ3Mgbm8gd2F5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtpbmcgYW55d2hlcmUuIEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UuIExldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgYmFsYW5jZV9wZ2RhdGAuLi4gYWxsIHRoZSBvdGhlciBwbGFjZXMgSSBjYW4gdGhpbmsgb2YgYWxzbyBpbml0aWFsaXplIGBzY2FuX2NvbnRyb2xgIHRoYXQgd2F5LiBUaGUgbmV3IGZpZWxkcyBhcmUgYml0ZmllbGRzLCBhbmQgdGh1cyB3aWxsIGJlIHplcm9lZC4gTm8gY29uY2VybnMgdGhlcmUuXG5cblRoZSBjaGFuZ2VzIGRvbuKAmXQgaW52b2x2ZSBhbnl0aGluZyB0aGF0IGNyb3NzZXMgdGhlIHVzZXIva2VybmVsIGJvdW5kYXJ5LiBObyBuZXR3b3JrIHBhY2tldHMsIG5vIGZ1bmt5IGRhdGEgcGFyc2luZywgbm8gY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdHMgd2F5IG91dC4gSXTigJlzIGFsbCBpbnRlcm5hbCByZWNsYWltIHBvbGljeS4gTXkgZ3V0IHNheXMgaXQgd2lsbCBiZSBva2F5IGFuZCBJIHNob3VsZCBmb2xsb3cgdGhyb3VnaCB3aXRoIHRoaXMgZGVjaXNpb24uXG5cblNvIGhlcmUncyB0aGUgc3VtbWFyeSBvZiBteSByZWFzb25pbmc6IFRoaXMgcGF0Y2ggYWRkcyBiaXRmaWVsZHMgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGluIG1lbW9yeSByZWNsYWltLiBgc3RydWN0IHNjYW5fY29udHJvbGAgaW5zdGFuY2VzIGFyZSBpbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGVuc3VyaW5nIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkLiBUaGVyZSdzIG5vIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSBvciBhbnkgY29tcGxpY2F0ZWQgYWxsb2NhdGlvbnMuIFN0YW5kYXJkIEtBU0FOIGFuZCBkZWJ1Z2dpbmcgdG9vbHMgd2lsbCBiZSBlbm91Z2ggdG8gY2F0Y2ggYW55IGJ1Z3MsIG1vc3RseSBsb2dpYyBlcnJvcnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gVGhlcmVmb3JlLCBubyBLTVNBTiBpcyBuZWVkZWQgZm9yIHRoaXMgcGF0Y2guIEkgdGhpbmsgdGhpcyB3aWxsIHN1ZmZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTksIk91dHB1dFRva2VucyI6MjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjM6MzEuMzYyMDUyNzM0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyB0d28gbmV3IGJpdGZpZWxkcyAoYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCkgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIGJldHRlciBjb250cm9sIHNsYWIgYW5kIGZpbGUgcGFnZSByZWNsYWltLiBJbnN0YW5jZXMgb2YgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGFueSB1bnNwZWNpZmllZCBmaWVsZHMgKGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgYml0ZmllbGRzKSBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBwYXJzaW5nIG9mIGV4dGVybmFsIGRhdGEgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIHR3byBuZXcgYml0ZmllbGRzIChgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gKSB0byBgc3RydWN0IHNjYW5fY29udHJvbGAgdG8gYmV0dGVyIGNvbnRyb2wgc2xhYiBhbmQgZmlsZSBwYWdlIHJlY2xhaW0uIEluc3RhbmNlcyBvZiBgc3RydWN0IHNjYW5fY29udHJvbGAgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgYW55IHVuc3BlY2lmaWVkIGZpZWxkcyAoaW5jbHVkaW5nIHRoZSBuZXdseSBhZGRlZCBiaXRmaWVsZHMpIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGNvbXBsZXggbWVtb3J5IGFsbG9jYXRpb25zIG9yIHBhcnNpbmcgb2YgZXh0ZXJuYWwgZGF0YSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxh4k[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 08:20:25 +0000 UTC FinishedAt: 2026-08-21 08:23:32 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "a032d41a86cb82a747bc14d9c82b3e153a9a9ab7", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "NUMA" ], "series_id": "91f35141-41cd-4fe2-81fd-900a23ffed54" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "node_reclaim" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIxPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyB0d28gbmV3IGJpdGZpZWxkcyAoYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCkgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIGJldHRlciBjb250cm9sIHNsYWIgYW5kIGZpbGUgcGFnZSByZWNsYWltLiBJbnN0YW5jZXMgb2YgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGFueSB1bnNwZWNpZmllZCBmaWVsZHMgKGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgYml0ZmllbGRzKSBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBwYXJzaW5nIG9mIGV4dGVybmFsIGRhdGEgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyAodm1zY2FuKSB0byBza2lwIHNsYWIgb3IgZmlsZSByZWNsYWltIHdoZW4gdGhlaXIgcmVzcGVjdGl2ZSBsaW1pdHMgYXJlIG5vdCBleGNlZWRlZCBkdXJpbmcgbm9kZSByZWNsYWltLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBhbGxvY2F0aW9uIHdoZW4gTlVNQSBub2RlIHJlY2xhaW0gaXMgZW5hYmxlZCAoZS5nLiwgdmlhIHZtLnpvbmVfcmVjbGFpbV9tb2RlIHN5c2N0bCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjE8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBkYTUyZTI3NjUxOWQxM2MxMTRlZjk4MDhhZDk5NThmMmIzYmQ4MTZiXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDg6MjE6NTUgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uZDEzODM3Nzk1NzllYSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uY1xuQEAgLTExNCw2ICYjNDM7MTE0LDE4IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0Lyogem9uZV9yZWNsYWltX21vZGUsIGJvb3N0IHJlY2xhaW0sIGNncm91cCByZXN0cmljdGlvbnMgKi9cbiBcdHVuc2lnbmVkIGludCBtYXlfc3dhcDoxO1xuIFxuJiM0MztcdC8qXG4mIzQzO1x0ICogV2hlbiBzZXQsIHRoZSBzbGFiIHNocmlua2VycyBhcmUgbm90IGludm9rZWQgYmVjYXVzZSByZWNsYWltYWJsZVxuJiM0MztcdCAqIHNsYWIgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fc2xhYl9wYWdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2tpcF9zbGFiX3JlY2xhaW06MTtcbiYjNDM7XG4mIzQzO1x0LypcbiYjNDM7XHQgKiBXaGVuIHNldCwgZmlsZSBwYWdlcyBhcmUgbm90IHJlY2xhaW1lZCBiZWNhdXNlIHVubWFwcGVkIHBhZ2UgY2FjaGVcbiYjNDM7XHQgKiBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IG1pbl91bm1hcHBlZF9wYWdlcy5cbiYjNDM7XHQgKi9cbiYjNDM7XHR1bnNpZ25lZCBpbnQgc2tpcF9maWxlX3JlY2xhaW06MTtcbiYjNDM7XG4gXHQvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovXG4gXHR1bnNpZ25lZCBpbnQgbm9fY2FjaGVfdHJpbV9tb2RlOjE7XG4gXG5AQCAtMjU3NSw2ICYjNDM7MjU4NywyMSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG9cbiYjNDM7XHQgKiBtaW5fdW5tYXBwZWRfcGFnZXM6IHNraXAgZmlsZSBwYWdlcyBhbmQgcmVjbGFpbSBhbm9uIG9ubHkuICBBcyB3aXRoXG4mIzQzO1x0ICogdGhlIGFub24tb25seSBjYXNlIGFib3ZlLCBpZiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgdGhlcmUgaXNcbiYjNDM7XHQgKiBub3RoaW5nIHRvIGRvIHdpdGhvdXQgYnJlYWNoaW5nIHRoZSBmbG9vciwgc28gc2NhbiBub3RoaW5nLlxuJiM0MztcdCAqL1xuJiM0MztcdGlmIChzYy1cdTAwM2Vza2lwX2ZpbGVfcmVjbGFpbSkge1xuJiM0MztcdFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiYjNDM7XHRcdFx0bWVtc2V0KG5yLCAwLCBzaXplb2YoKm5yKSAqIE5SX0xSVV9MSVNUUyk7XG4mIzQzO1x0XHRcdHJldHVybjtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcbiYjNDM7XHRcdGdvdG8gb3V0O1xuJiM0MztcdH1cbiYjNDM7XG4gXHQvKiBJZiB3ZSBoYXZlIG5vIHN3YXAgc3BhY2UsIGRvIG5vdCBib3RoZXIgc2Nhbm5pbmcgYW5vbiBmb2xpb3MuICovXG4gXHRpZiAoIXNjLVx1MDAzZW1heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbiBcdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9GSUxFO1xuQEAgLTQ3MzYsNiAmIzQzOzQ3NjMsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFZNX1dBUk5fT05fT05DRShucl90b19zY2FuIFx1MDAzZSBNQVhfTFJVX0JBVENIKTtcbiBcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7XG4gXG4mIzQzO1x0LypcbiYjNDM7XHQgKiBub2RlX3JlY2xhaW0gcHJvdGVjdHMgdW5tYXBwZWQgcGFnZSBjYWNoZSBkb3duIHRvIG1pbl91bm1hcHBlZF9wYWdlcyxcbiYjNDM7XHQgKiBzbyBsZWF2ZSB0aGUgZmlsZSB0eXBlIGFsb25lOyBpc29sYXRlX2ZvbGlvcygpIHRoZW4gZmFsbHMgYmFjayB0b1xuJiM0MztcdCAqIGFub24uXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHNjLVx1MDAzZXNraXBfZmlsZV9yZWNsYWltIFx1MDAyNlx1MDAyNiB0eXBlID09IExSVV9HRU5fRklMRSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcbiBcdGlmIChnZXRfbnJfZ2VucyhscnV2ZWMsIHR5cGUpID09IE1JTl9OUl9HRU5TKVxuIFx0XHRyZXR1cm4gMDtcbiBcbkBAIC01MTExLDcgJiM0Mzs1MTQ2LDggQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXG4gXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xuIFxuLVx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLCBzYy1cdTAwM2Vwcmlvcml0eSk7XG4mIzQzO1x0aWYgKCFzYy1cdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSlcbiYjNDM7XHRcdHNocmlua19zbGFiKHNjLVx1MDAzZWdmcF9tYXNrLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBtZW1jZywgc2MtXHUwMDNlcHJpb3JpdHkpO1xuIFxuIFx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG4gXHRcdHZtcHJlc3N1cmUoc2MtXHUwMDNlZ2ZwX21hc2ssIHNjLVx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXG5AQCAtNjIxNCw4ICYjNDM7NjI1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcbiBcdFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbiBcbi1cdFx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLFxuLVx0XHRcdCAgICBzYy1cdTAwM2Vwcmlvcml0eSk7XG4mIzQzO1x0XHRpZiAoIXNjLVx1MDAzZXNraXBfc2xhYl9yZWNsYWltKVxuJiM0MztcdFx0XHRzaHJpbmtfc2xhYihzYy1cdTAwM2VnZnBfbWFzaywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgbWVtY2csXG4mIzQzO1x0XHRcdFx0ICAgIHNjLVx1MDAzZXByaW9yaXR5KTtcbiBcbiBcdFx0LyogUmVjb3JkIHRoZSBncm91cCYjMzk7cyByZWNsYWltIGVmZmljaWVuY3kgKi9cbiBcdFx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5AQCAtNzg0NiwxNiAmIzQzOzc4ODMsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbiBcdG5vcmVjbGFpbV9mbGFnID0gbWVtYWxsb2Nfbm9yZWNsYWltX3NhdmUoKTtcbiBcdHNldF90YXNrX3JlY2xhaW1fc3RhdGUocCwgXHUwMDI2c2MtXHUwMDNlcmVjbGFpbV9zdGF0ZSk7XG4gXG4tXHRpZiAobm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUocGdkYXQpIFx1MDAzZSBwZ2RhdC1cdTAwM2VtaW5fdW5tYXBwZWRfcGFnZXMgfHxcbi1cdCAgICBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlIHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzKSB7XG4tXHRcdC8qXG4tXHRcdCAqIEZyZWUgbWVtb3J5IGJ5IGNhbGxpbmcgc2hyaW5rIG5vZGUgd2l0aCBpbmNyZWFzaW5nXG4tXHRcdCAqIHByaW9yaXRpZXMgdW50aWwgd2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZyZWVkLlxuLVx0XHQgKi9cbi1cdFx0ZG8ge1xuLVx0XHRcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XG4tXHRcdH0gd2hpbGUgKHNjLVx1MDAzZW5yX3JlY2xhaW1lZCBcdTAwM2MgbnJfcGFnZXMgXHUwMDI2XHUwMDI2IC0tc2MtXHUwMDNlcHJpb3JpdHkgXHUwMDNlPSAwKTtcbi1cdH1cbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZyZWUgbWVtb3J5IGJ5IGNhbGxpbmcgc2hyaW5rIG5vZGUgd2l0aCBpbmNyZWFzaW5nXG4mIzQzO1x0ICogcHJpb3JpdGllcyB1bnRpbCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZnJlZWQuXG4mIzQzO1x0ICpcbiYjNDM7XHQgKiBXaGF0IHRvIHJlY2xhaW0gaXMgZ2F0ZWQgcGVyIHR5cGUgYnkgc2MtXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0gYW5kXG4mIzQzO1x0ICogc2MtXHUwMDNlc2tpcF9maWxlX3JlY2xhaW0uXG4mIzQzO1x0ICovXG4mIzQzO1x0ZG8ge1xuJiM0MztcdFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbiYjNDM7XHR9IHdoaWxlIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiAtLXNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZT0gMCk7XG4gXG4gXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKHAsIE5VTEwpO1xuIFx0bWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUobm9yZWNsYWltX2ZsYWcpO1xuQEAgLTc4ODUsMTggJiM0Mzs3OTIyLDE0IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpXG4gXHR9O1xuIFxuIFx0Lypcbi1cdCAqIE5vZGUgcmVjbGFpbSByZWNsYWltcyB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBhbmRcbi1cdCAqIHNsYWIgcGFnZXMgaWYgd2UgYXJlIG92ZXIgdGhlIGRlZmluZWQgbGltaXRzLlxuLVx0ICpcbi1cdCAqIEEgc21hbGwgcG9ydGlvbiBvZiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBpcyBuZWVkZWQgZm9yXG4tXHQgKiBmaWxlIEkvTyBvdGhlcndpc2UgcGFnZXMgcmVhZCBieSBmaWxlIEkvTyB3aWxsIGJlIGltbWVkaWF0ZWx5XG4tXHQgKiB0aHJvd24gb3V0IGlmIHRoZSBub2RlIGlzIG92ZXJhbGxvY2F0ZWQuIFNvIHdlIGRvIG5vdCByZWNsYWltXG4tXHQgKiBpZiBsZXNzIHRoYW4gYSBzcGVjaWZpZWQgcGVyY2VudGFnZSBvZiB0aGUgbm9kZSBpcyB1c2VkIGJ5XG4tXHQgKiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcy5cbiYjNDM7XHQgKiBtaW5fdW5tYXBwZWRfcGFnZXMgYW5kIG1pbl9zbGFiX3BhZ2VzIG9ubHkgZ2F0ZSBmaWxlIGFuZCBzbGFiLlxuJiM0MztcdCAqIEJhaWwgb3V0IG9ubHkgd2hlbiBib3RoIGFyZSB1bmRlciB0aGVpciBsaW1pdHMgYW5kIGFub24gY2Fubm90XG4mIzQzO1x0ICogYmUgcmVjbGFpbWVkIGVpdGhlciwgc28gd2UgZG8gbm90IHNraXAgcmVjbGFpbWFibGUgYW5vbi5cbiBcdCAqL1xuIFx0aWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcdTAwM2M9IHBnZGF0LVx1MDAzZW1pbl91bm1hcHBlZF9wYWdlcyBcdTAwMjZcdTAwMjZcbiBcdCAgICBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNjPVxuLVx0ICAgIHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzKVxuJiM0MztcdCAgICBwZ2RhdC1cdTAwM2VtaW5fc2xhYl9wYWdlcyBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgXHUwMDI2c2MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qXG5AQCAtNzkxNyw2ICYjNDM7Nzk1MCwxOCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaVxuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGVcbiYjNDM7XHQgKiBzbGFiIG9yIHVubWFwcGVkIHBhZ2UgY2FjaGUgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBpdHMgbGltaXQsIGxlYXZlXG4mIzQzO1x0ICogdGhhdCB0eXBlIGFsb25lIGV2ZW4gaWYgdGhlIG90aGVyIHR5cGUgdHJpcHBlZCB0aGUgZ2F0ZSBhbmQgYnJvdWdodFxuJiM0MztcdCAqIHVzIGludG8gbm9kZSByZWNsYWltLlxuJiM0MztcdCAqL1xuJiM0MztcdHNjLnNraXBfc2xhYl9yZWNsYWltID1cbiYjNDM7XHRcdG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2M9XG4mIzQzO1x0XHRwZ2RhdC1cdTAwM2VtaW5fc2xhYl9wYWdlcztcbiYjNDM7XHRzYy5za2lwX2ZpbGVfcmVjbGFpbSA9XG4mIzQzO1x0XHRub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXHUwMDNjPSBwZ2RhdC1cdTAwM2VtaW5fdW5tYXBwZWRfcGFnZXM7XG4mIzQzO1xuIFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcdTAwMjZzYyk7XG4gXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4gXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjE8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O05VTUEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtub2RlX3JlY2xhaW0mIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IHJlY2xhaW0gbG9naWMgKHZtc2NhbikgdG8gc2tpcCBzbGFiIG9yIGZpbGUgcmVjbGFpbSB3aGVuIHRoZWlyIHJlc3BlY3RpdmUgbGltaXRzIGFyZSBub3QgZXhjZWVkZWQgZHVyaW5nIG5vZGUgcmVjbGFpbS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHBhZ2UgYWxsb2NhdGlvbiB3aGVuIE5VTUEgbm9kZSByZWNsYWltIGlzIGVuYWJsZWQgKGUuZy4sIHZpYSB2bS56b25lX3JlY2xhaW1fbW9kZSBzeXNjdGwpLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGE1MmUyNzY1MTlkMTNjMTE0ZWY5ODA4YWQ5OTU4ZjJiM2JkODE2YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDA4OjIxOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li5kMTM4Mzc3OTU3OWVhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTE0LDYgJiM0MzsxMTQsMTggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJLyogem9uZV9yZWNsYWltX21vZGUsIGJvb3N0IHJlY2xhaW0sIGNncm91cCByZXN0cmljdGlvbnMgKi8KIAl1bnNpZ25lZCBpbnQgbWF5X3N3YXA6MTsKIAomIzQzOwkvKgomIzQzOwkgKiBXaGVuIHNldCwgdGhlIHNsYWIgc2hyaW5rZXJzIGFyZSBub3QgaW52b2tlZCBiZWNhdXNlIHJlY2xhaW1hYmxlCiYjNDM7CSAqIHNsYWIgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fc2xhYl9wYWdlcy4KJiM0MzsJICovCiYjNDM7CXVuc2lnbmVkIGludCBza2lwX3NsYWJfcmVjbGFpbToxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaGVuIHNldCwgZmlsZSBwYWdlcyBhcmUgbm90IHJlY2xhaW1lZCBiZWNhdXNlIHVubWFwcGVkIHBhZ2UgY2FjaGUKJiM0MzsJICogaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fdW5tYXBwZWRfcGFnZXMuCiYjNDM7CSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgc2tpcF9maWxlX3JlY2xhaW06MTsKJiM0MzsKIAkvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovCiAJdW5zaWduZWQgaW50IG5vX2NhY2hlX3RyaW1fbW9kZToxOwogCkBAIC0yNTc1LDYgJiM0MzsyNTg3LDIxIEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBub2RlX3JlY2xhaW0gcHJvdGVjdHMgdW5tYXBwZWQgcGFnZSBjYWNoZSBkb3duIHRvCiYjNDM7CSAqIG1pbl91bm1hcHBlZF9wYWdlczogc2tpcCBmaWxlIHBhZ2VzIGFuZCByZWNsYWltIGFub24gb25seS4gIEFzIHdpdGgKJiM0MzsJICogdGhlIGFub24tb25seSBjYXNlIGFib3ZlLCBpZiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgdGhlcmUgaXMKJiM0MzsJICogbm90aGluZyB0byBkbyB3aXRob3V0IGJyZWFjaGluZyB0aGUgZmxvb3IsIHNvIHNjYW4gbm90aGluZy4KJiM0MzsJICovCiYjNDM7CWlmIChzYy0mZ3Q7c2tpcF9maWxlX3JlY2xhaW0pIHsKJiM0MzsJCWlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtJmd0O25vZGVfaWQsIHNjKSkgewomIzQzOwkJCW1lbXNldChuciwgMCwgc2l6ZW9mKCpucikgKiBOUl9MUlVfTElTVFMpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCXNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJLyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqLwogCWlmICghc2MtJmd0O21heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC0mZ3Q7bm9kZV9pZCwgc2MpKSB7CiAJCXNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTsKQEAgLTQ3MzYsNiAmIzQzOzQ3NjMsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiAmZ3Q7IE1BWF9MUlVfQkFUQ0gpOwogCVZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7CiAKJiM0MzsJLyoKJiM0MzsJICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0byBtaW5fdW5tYXBwZWRfcGFnZXMsCiYjNDM7CSAqIHNvIGxlYXZlIHRoZSBmaWxlIHR5cGUgYWxvbmU7IGlzb2xhdGVfZm9saW9zKCkgdGhlbiBmYWxscyBiYWNrIHRvCiYjNDM7CSAqIGFub24uCiYjNDM7CSAqLwomIzQzOwlpZiAoc2MtJmd0O3NraXBfZmlsZV9yZWNsYWltICZhbXA7JmFtcDsgdHlwZSA9PSBMUlVfR0VOX0ZJTEUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykKIAkJcmV0dXJuIDA7CiAKQEAgLTUxMTEsNyAmIzQzOzUxNDYsOCBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCW5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7CiAKLQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywgc2MtJmd0O3ByaW9yaXR5KTsKJiM0MzsJaWYgKCFzYy0mZ3Q7c2tpcF9zbGFiX3JlY2xhaW0pCiYjNDM7CQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywgc2MtJmd0O3ByaW9yaXR5KTsKIAogCWlmICghc2MtJmd0O3Byb2FjdGl2ZSkKIAkJdm1wcmVzc3VyZShzYy0mZ3Q7Z2ZwX21hc2ssIHNjLSZndDtvcmRlciwgbWVtY2csIGZhbHNlLApAQCAtNjIxNCw4ICYjNDM7NjI1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCQlzaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpOwogCi0JCXNocmlua19zbGFiKHNjLSZndDtnZnBfbWFzaywgcGdkYXQtJmd0O25vZGVfaWQsIG1lbWNnLAotCQkJICAgIHNjLSZndDtwcmlvcml0eSk7CiYjNDM7CQlpZiAoIXNjLSZndDtza2lwX3NsYWJfcmVjbGFpbSkKJiM0MzsJCQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywKJiM0MzsJCQkJICAgIHNjLSZndDtwcmlvcml0eSk7CiAKIAkJLyogUmVjb3JkIHRoZSBncm91cCYjMzk7cyByZWNsYWltIGVmZmljaWVuY3kgKi8KIAkJaWYgKCFzYy0mZ3Q7cHJvYWN0aXZlKQpAQCAtNzg0NiwxNiAmIzQzOzc4ODMsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKIAlub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7CiAJc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCAmYW1wO3NjLSZndDtyZWNsYWltX3N0YXRlKTsKIAotCWlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgJmd0OyBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzIHx8Ci0JICAgIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSAmZ3Q7IHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcykgewotCQkvKgotCQkgKiBGcmVlIG1lbW9yeSBieSBjYWxsaW5nIHNocmluayBub2RlIHdpdGggaW5jcmVhc2luZwotCQkgKiBwcmlvcml0aWVzIHVudGlsIHdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmcmVlZC4KLQkJICovCi0JCWRvIHsKLQkJCXNocmlua19ub2RlKHBnZGF0LCBzYyk7Ci0JCX0gd2hpbGUgKHNjLSZndDtucl9yZWNsYWltZWQgJmx0OyBucl9wYWdlcyAmYW1wOyZhbXA7IC0tc2MtJmd0O3ByaW9yaXR5ICZndDs9IDApOwotCX0KJiM0MzsJLyoKJiM0MzsJICogRnJlZSBtZW1vcnkgYnkgY2FsbGluZyBzaHJpbmsgbm9kZSB3aXRoIGluY3JlYXNpbmcKJiM0MzsJICogcHJpb3JpdGllcyB1bnRpbCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZnJlZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFdoYXQgdG8gcmVjbGFpbSBpcyBnYXRlZCBwZXIgdHlwZSBieSBzYy0mZ3Q7c2tpcF9zbGFiX3JlY2xhaW0gYW5kCiYjNDM7CSAqIHNjLSZndDtza2lwX2ZpbGVfcmVjbGFpbS4KJiM0MzsJICovCiYjNDM7CWRvIHsKJiM0MzsJCXNocmlua19ub2RlKHBnZGF0LCBzYyk7CiYjNDM7CX0gd2hpbGUgKHNjLSZndDtucl9yZWNsYWltZWQgJmx0OyBucl9wYWdlcyAmYW1wOyZhbXA7IC0tc2MtJmd0O3ByaW9yaXR5ICZndDs9IDApOwogCiAJc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCBOVUxMKTsKIAltZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShub3JlY2xhaW1fZmxhZyk7CkBAIC03ODg1LDE4ICYjNDM7NzkyMiwxNCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaQogCX07CiAKIAkvKgotCSAqIE5vZGUgcmVjbGFpbSByZWNsYWltcyB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBhbmQKLQkgKiBzbGFiIHBhZ2VzIGlmIHdlIGFyZSBvdmVyIHRoZSBkZWZpbmVkIGxpbWl0cy4KLQkgKgotCSAqIEEgc21hbGwgcG9ydGlvbiBvZiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBpcyBuZWVkZWQgZm9yCi0JICogZmlsZSBJL08gb3RoZXJ3aXNlIHBhZ2VzIHJlYWQgYnkgZmlsZSBJL08gd2lsbCBiZSBpbW1lZGlhdGVseQotCSAqIHRocm93biBvdXQgaWYgdGhlIG5vZGUgaXMgb3ZlcmFsbG9jYXRlZC4gU28gd2UgZG8gbm90IHJlY2xhaW0KLQkgKiBpZiBsZXNzIHRoYW4gYSBzcGVjaWZpZWQgcGVyY2VudGFnZSBvZiB0aGUgbm9kZSBpcyB1c2VkIGJ5Ci0JICogdW5tYXBwZWQgZmlsZSBiYWNrZWQgcGFnZXMuCiYjNDM7CSAqIG1pbl91bm1hcHBlZF9wYWdlcyBhbmQgbWluX3NsYWJfcGFnZXMgb25seSBnYXRlIGZpbGUgYW5kIHNsYWIuCiYjNDM7CSAqIEJhaWwgb3V0IG9ubHkgd2hlbiBib3RoIGFyZSB1bmRlciB0aGVpciBsaW1pdHMgYW5kIGFub24gY2Fubm90CiYjNDM7CSAqIGJlIHJlY2xhaW1lZCBlaXRoZXIsIHNvIHdlIGRvIG5vdCBza2lwIHJlY2xhaW1hYmxlIGFub24uCiAJICovCiAJaWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSAmbHQ7PSBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzICZhbXA7JmFtcDsKIAkgICAgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZsdDs9Ci0JICAgIHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcykKJiM0MzsJICAgIHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcyAmYW1wOyZhbXA7CiYjNDM7CSAgICAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC0mZ3Q7bm9kZV9pZCwgJmFtcDtzYykpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTc5MTcsNiAmIzQzOzc5NTAsMTggQEAgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGkKIAlpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCAmYW1wO3BnZGF0LSZndDtmbGFncykpCiAJCXJldHVybiAwOwogCiYjNDM7CS8qCiYjNDM7CSAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGUKJiM0MzsJICogc2xhYiBvciB1bm1hcHBlZCBwYWdlIGNhY2hlIGlzIGFscmVhZHkgYXQgb3IgYmVsb3cgaXRzIGxpbWl0LCBsZWF2ZQomIzQzOwkgKiB0aGF0IHR5cGUgYWxvbmUgZXZlbiBpZiB0aGUgb3RoZXIgdHlwZSB0cmlwcGVkIHRoZSBnYXRlIGFuZCBicm91Z2h0CiYjNDM7CSAqIHVzIGludG8gbm9kZSByZWNsYWltLgomIzQzOwkgKi8KJiM0MzsJc2Muc2tpcF9zbGFiX3JlY2xhaW0gPQomIzQzOwkJbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZsdDs9CiYjNDM7CQlwZ2RhdC0mZ3Q7bWluX3NsYWJfcGFnZXM7CiYjNDM7CXNjLnNraXBfZmlsZV9yZWNsYWltID0KJiM0MzsJCW5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSAmbHQ7PSBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzOwomIzQzOwogCXJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBucl9wYWdlcywgJmFtcDtzYyk7CiAJY2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgJmFtcDtwZ2RhdC0mZ3Q7ZmxhZ3MpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIxPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MDIKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAzMDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgUmVjbGFpbSBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGNvcmUgbWVtb3J5IHJlY2xhaW0gbG9naWMg4oCTIGFsd2F5cyBhbiBpbnRlcmVzdGluZyBhcmVhLiBJdCBsb29rcyBsaWtlIHRoZSBjb3JlIGNoYW5nZSBpcyBhZGRpbmcgYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCBmbGFncyB0byB0aGUgYHNjYW5fY29udHJvbGAgc3RydWN0LiBUaGF0JiMzOTtzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyBjb250cm9sbGluZyByZWNsYWltIGJlaGF2aW9yIHRocm91Z2ggZmxhZ3MgaXMgYSBwcmV0dHkgc3RhbmRhcmQgd2F5IHRvIG1hbmFnZSBjb21wbGV4aXR5LCBzbyB0aGF0JiMzOTtzIGEgZ29vZCBhcHByb2FjaC4gVGhlIGBnZXRfc2Nhbl9jb3VudGAgZnVuY3Rpb24gYW5kIGBzY2FuX2ZvbGlvc2AgYXJlIGdldHRpbmcgdG91Y2hlZCB0byByZXNwZWN0IHRob3NlIGZpbGUgcmVjbGFpbSBmbGFncywgd2hpbGUgYHNocmlua19vbmVgIGFuZCBgc2hyaW5rX25vZGVfbWVtY2dzYCBkZWFsIHdpdGggdGhlIHNsYWIgcmVjbGFpbSBmbGFnLiBBbmQgdGhlIG5vZGUgcmVjbGFpbSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gc2V0IHRoZXNlIGZsYWdzIGFuZCBhZGp1c3QgdGhlIHJlY2xhaW0gbG9naWMgYWNjb3JkaW5nbHkuCgpUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGEgcHJldHR5IGRlZXAgb25lIGF0IHRoYXQsIGFmZmVjdGluZyBob3cgbm9kZSByZWNsYWltIG9wZXJhdGVzLCBzcGVjaWZpY2FsbHkgYnkgbGV0dGluZyB1cyB0d2VhayB0aGUgbGltaXRzIG9uIHNsYWIgYW5kIGZpbGUgcmVjbGFpbS4gRGVmaW5pdGVseSBhIGNhbmRpZGF0ZSBmb3Igc29tZSBzZXJpb3VzIGZ1enppbmcuIEdvdHRhIGNoZWNrIHRoZSBlZGdlIGNhc2VzIGhlcmUuCgpBbHJpZ2h0LCBsZXQmIzM5O3MgcGlucG9pbnQgdGhvc2UgZnVuY3Rpb25zIGFnYWluLiBMb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBtb2RpZmllZDogYGdldF9zY2FuX2NvdW50YCwgYHNjYW5fZm9saW9zYCwgYHNocmlua19vbmVgLCBgc2hyaW5rX25vZGVfbWVtY2dzYCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBub2RlX3JlY2xhaW1gLiBIbW0sIGBub2RlX3JlY2xhaW1gIGlzICp0aGUqIGVudHJ5IHBvaW50IGhlcmUsIGEgbm9uLXN0YXRpYyBvbmUgYXQgdGhhdCwgc28gcHJvYmFibHkgdGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZSBidW5jaC4gSXQmIzM5O3MgdGhlIGZyb250IGRvb3IuCgpJJiMzOTttIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYG5vZGVfcmVjbGFpbWAgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtedW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW1cXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ODY1PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4tLVxubW0vdm1zY2FuLmMtNzkwNy1cbm1tL3Ztc2Nhbi5jOjc5MDg6dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbm1tL3Ztc2Nhbi5jLTc5MDkte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ3MDMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKlRyYWNpbmcgYG5vZGVfcmVjbGFpbWAgVXNhZ2UqKgoKQWxyaWdodCwgbGV0JiMzOTtzIGdldCBkb3duIHRvIGJyYXNzIHRhY2tzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93IHN1cnJvdW5kaW5nIGBub2RlX3JlY2xhaW1gLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBtYXAgb3V0IGFsbCB0aGUgY2FsbCBzaXRlcyBmb3IgdGhpcyBmdW5jdGlvbi4gS25vd2luZyB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIHdoZW4gYW5kIHdoeSB0aGUgc3lzdGVtIHRyaWdnZXJzIG5vZGUgcmVjbGFtYXRpb24sIGFuZCBmcm9tIHRoZXJlLCB3aGVyZSB0aGUgcmVzb3VyY2VzIGFyZSBiZWluZyByZS1hbGxvY2F0ZWQuIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgc3RhcnQgd2l0aCBhIGNvZGUgc2VhcmNoIHRvIGlkZW50aWZ5IGFsbCBkaXJlY3QgYW5kIGluZGlyZWN0IGNhbGxzLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRob3NlIGNhbGxzIHdpbGwgYmUgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBvciBwZXJmb3JtYW5jZSBhbmFseXNpcyByZWxhdGVkIHRvIG1lbW9yeSBwcmVzc3VyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub2RlX3JlY2xhaW1cXCgmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC90b3BvbG9neS5oPTQzPWludCBhcmNoX3VwZGF0ZV9jcHVfdG9wb2xvZ3kodm9pZCk7XG4tLVxuaW5jbHVkZS9saW51eC90b3BvbG9neS5oLTU1LSAqIChpbiB3aGF0ZXZlciBhcmNoIHNwZWNpZmljIG1lYXN1cmVtZW50IHVuaXRzIHJldHVybmVkIGJ5IG5vZGVfZGlzdGFuY2UoKSlcbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaDo1NjogKiBhbmQgbm9kZV9yZWNsYWltX21vZGUgaXMgZW5hYmxlZCB0aGVuIHRoZSBWTSB3aWxsIG9ubHkgY2FsbCBub2RlX3JlY2xhaW0oKVxuaW5jbHVkZS9saW51eC90b3BvbG9neS5oLTU3LSAqIG9uIG5vZGVzIHdpdGhpbiB0aGlzIGRpc3RhbmNlLlxuLS1cbm1tL2ludGVybmFsLmg9MTE0NT1leHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xubW0vaW50ZXJuYWwuaC0xMTQ2LVxubW0vaW50ZXJuYWwuaDoxMTQ3OmV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vaW50ZXJuYWwuaC0xMTQ4LVx0XHRcdFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcbm1tL2ludGVybmFsLmg9MTE0OT1leHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKTtcbi0tXG5tbS9pbnRlcm5hbC5oLTExNTItXG5tbS9pbnRlcm5hbC5oOjExNTM6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vaW50ZXJuYWwuaC0xMTU0LVx0XHRcdFx0XHQgZ2ZwX3QgbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3BhZ2VfYWxsb2MuYz0zODAwPWdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxuLS1cbm1tL3BhZ2VfYWxsb2MuYy0zOTI5LVxubW0vcGFnZV9hbGxvYy5jOjM5MzA6XHRcdFx0aWYgKCFub2RlX3JlY2xhaW0oem9uZS1cdTAwM2V6b25lX3BnZGF0LCBnZnBfbWFzaywgb3JkZXIpKVxubW0vcGFnZV9hbGxvYy5jLTM5MzEtXHRcdFx0XHRjb250aW51ZTtcbi0tXG5tbS92bXNjYW4uYz03ODMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzg2NC0gKi9cbm1tL3Ztc2Nhbi5jOjc4NjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc4NjYtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYy03OTA3LVxubW0vdm1zY2FuLmM6NzkwODp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vdm1zY2FuLmMtNzkwOS17XG4tLVxubW0vdm1zY2FuLmMtNzk2NC1cbm1tL3Ztc2Nhbi5jOjc5NjU6XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTc5NjYtXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4tLVxubW0vdm1zY2FuLmMtNzk3Ny1cbm1tL3Ztc2Nhbi5jOjc5Nzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc5NzktXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03OTk4PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy04MDkwLVxubW0vdm1zY2FuLmM6ODA5MTpcdFx0XHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtODA5Mi1cdFx0XHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTc0MAoJCQkJCQkJb3V0cHV0OiAyOQoJCQkJCQkJdGhvdWdodHM6IDEyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGgqKgoKT2theSwgc28gYG5vZGVfcmVjbGFpbWAgaXMgY2FsbGVkIGRpcmVjdGx5IGZyb20gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgLCByaWdodCB0aGVyZSBpbiBgbW0vcGFnZV9hbGxvYy5jYC4gVGhhdCYjMzk7cyBhICpyZWFsbHkqIGhvdCBwYXRoIGluIHRoZSBrZXJuZWwg4oCTIHBhZ2UgYWxsb2NhdGlvbiBpcyBmdW5kYW1lbnRhbC4gTWFrZXMgc2Vuc2UgaXQmIzM5O3MgcGVyZm9ybWFuY2UtY3JpdGljYWwuIEJ1dCBgbm9kZV9yZWNsYWltYCBpcyBpdHNlbGYgdGhlIGVudHJ5IHBvaW50IGZvciBub2RlIHJlY2xhaW0sIHdoaWNoIG9ubHkgZ2V0cyB0cmlnZ2VyZWQgd2hlbiBgbm9kZV9yZWNsYWltX21vZGVgIGlzIGVuYWJsZWQuIE15IGd1dCBzYXlzIE5VTUEgc3lzdGVtcywgbmF0dXJhbGx5LiBJIG5lZWQgdG8gbWFrZSBzdXJlLCB0aG91Z2guIExldCYjMzk7cyBkaWcgaW50byB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gYW5kIHdoZXJlIGBub2RlX3JlY2xhaW1fbW9kZWAgaXMgdHJpZ2dlcmVkLiBJJiMzOTttIHByZXR0eSBzdXJlIGBDT05GSUdfTlVNQWAgaXMgdXN1YWxseSBhIHByZXJlcXVpc2l0ZSwgYnV0IEkgd2FudCB0byBiZSAxMDAlIGNlcnRhaW4uIFRpbWUgdG8gY2hlY2sgYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL2ludGVybmFsLmhgIGFuZCBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub2RlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9pbnRlcm5hbC5oJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2ludGVybmFsLmg9MTE0MT1zdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfZHJhaW5fcmVtb3RlKGludCBjcHUpIHsgfVxuLS1cbm1tL2ludGVybmFsLmgtMTE0NC0jaWZkZWYgQ09ORklHX05VTUFcbm1tL2ludGVybmFsLmg6MTE0NTpleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xubW0vaW50ZXJuYWwuaC0xMTQ2LVxubW0vaW50ZXJuYWwuaDoxMTQ3OmV4dGVybiB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vaW50ZXJuYWwuaC0xMTQ4LVx0XHRcdFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcbm1tL2ludGVybmFsLmg9MTE0OT1leHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKTtcbm1tL2ludGVybmFsLmgtMTE1MC0jZWxzZVxubW0vaW50ZXJuYWwuaDoxMTUxOiNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMFxubW0vaW50ZXJuYWwuaC0xMTUyLVxubW0vaW50ZXJuYWwuaDoxMTUzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL2ludGVybmFsLmgtMTE1NC1cdFx0XHRcdFx0IGdmcF90IG1hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcbi0tXG5tbS9pbnRlcm5hbC5oPTExNTg9c3RhdGljIGlubGluZSBpbnQgZmluZF9uZXh0X2Jlc3Rfbm9kZShpbnQgbm9kZSwgbm9kZW1hc2tfdCAqdXNlZF9ub2RlX21hc2spXG4tLVxubW0vaW50ZXJuYWwuaC0xMTYzLVxubW0vaW50ZXJuYWwuaDoxMTY0OnN0YXRpYyBpbmxpbmUgYm9vbCBub2RlX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxubW0vaW50ZXJuYWwuaC0xMTY1LXtcbm1tL2ludGVybmFsLmg6MTE2NjpcdC8qIElzIGFueSBub2RlX3JlY2xhaW1fbW9kZSBiaXQgc2V0PyAqL1xubW0vaW50ZXJuYWwuaDoxMTY3Olx0cmV0dXJuIG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiAoUkVDTEFJTV9aT05FfFJFQ0xBSU1fV1JJVEV8UkVDTEFJTV9VTk1BUCk7XG5tbS9pbnRlcm5hbC5oLTExNjgtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY1MzUKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIE5VTUEgYW5kIE5vZGUgUmVjbGFtYXRpb24qKgoKUmlnaHQsIHNvIGBDT05GSUdfTlVNQWAgaXMgKmFic29sdXRlbHkqIHRoZSBsaW5jaHBpbi4gSWYgdGhhdCYjMzk7cyBub3QgZW5hYmxlZCwgYG5vZGVfcmVjbGFpbWAgaXMgZXNzZW50aWFsbHkganVzdCBhIHBsYWNlaG9sZGVyLCBhIHNrZWxldGFsIGZ1bmN0aW9uIHdpdGggbm8gcmVhbCBtZWF0IG9uIGl0cyBib25lcy4gSXQmIzM5O3Mgbm90IGdvaW5nIHRvIGRvIGFueXRoaW5nIHVzZWZ1bCB3aXRob3V0IHRoZSB1bmRlcmx5aW5nIE5VTUEgaW5mcmFzdHJ1Y3R1cmUuIEl0JiMzOTtzIGEgZnVuZGFtZW50YWwgZGVwZW5kZW5jeSwgYWxtb3N0IGEgcHJlcmVxdWlzaXRlLgoKTm93LCB0aGF0IGJyaW5ncyB1cCBhIGJyb2FkZXIgcXVlc3Rpb24sIGRvZXNuJiMzOTt0IGl0PyBJZiBgQ09ORklHX05VTUFgIGlzIHRoYXQgY3JpdGljYWwsIGFyZSB0aGVyZSAqb3RoZXIqIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBvciBrZXJuZWwgZmVhdHVyZXMgdGhhdCBtaWdodCBiZSBpbnRlcnR3aW5lZCB3aXRoIGBub2RlX3JlY2xhaW1gIGluIGEgc2ltaWxhciBmYXNoaW9uPyBUaGluZ3MgdGhhdCBhcmUgcmVxdWlyZWQsIG9yIHRoYXQgc2lnbmlmaWNhbnRseSBhbHRlciBpdHMgYmVoYXZpb3VyLCBvciB0aGF0IGl0IGRlcGVuZHMgb24gaW4gc29tZSB3YXkuIFRpbWUgdG8gZGlnIGEgYml0IGRlZXBlciBhbmQgc2VlIHdoYXQgZWxzZSBuZWVkcyB0byBiZSBjb25zaWRlcmVkLiBJJiMzOTtkIGJldHRlciBleHBhbmQgbXkgc2VhcmNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtub2RlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz0yNTYyPXN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4tLVxubW0vdm1zY2FuLmMtMjU5MC1cdC8qXG5tbS92bXNjYW4uYzoyNTkxOlx0ICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0b1xubW0vdm1zY2FuLmMtMjU5Mi1cdCAqIG1pbl91bm1hcHBlZF9wYWdlczogc2tpcCBmaWxlIHBhZ2VzIGFuZCByZWNsYWltIGFub24gb25seS4gIEFzIHdpdGhcbi0tXG5tbS92bXNjYW4uYz00NzQ5PXN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vdm1zY2FuLmMtNDc2Ni1cdC8qXG5tbS92bXNjYW4uYzo0NzY3Olx0ICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0byBtaW5fdW5tYXBwZWRfcGFnZXMsXG5tbS92bXNjYW4uYy00NzY4LVx0ICogc28gbGVhdmUgdGhlIGZpbGUgdHlwZSBhbG9uZTsgaXNvbGF0ZV9mb2xpb3MoKSB0aGVuIGZhbGxzIGJhY2sgdG9cbi0tXG5tbS92bXNjYW4uYz02MjcxPXN0YXRpYyB2b2lkIHNocmlua19ub2RlKHBnX2RhdGFfdCAqcGdkYXQsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxubW0vdm1zY2FuLmMtNjI3Mi17XG5tbS92bXNjYW4uYzo2MjczOlx0dW5zaWduZWQgbG9uZyBucl9yZWNsYWltZWQsIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkO1xubW0vdm1zY2FuLmMtNjI3NC1cdHN0cnVjdCBscnV2ZWMgKnRhcmdldF9scnV2ZWM7XG4tLVxubW0vdm1zY2FuLmMtNjI5OS1cbm1tL3Ztc2Nhbi5jOjYzMDA6XHRucl9ub2RlX3JlY2xhaW1lZCA9IHNjLVx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcbm1tL3Ztc2Nhbi5jLTYzMDEtXG4tLVxubW0vdm1zY2FuLmMtNjMwNC1cdFx0dm1wcmVzc3VyZShzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNlb3JkZXIsIHNjLVx1MDAzZXRhcmdldF9tZW1fY2dyb3VwLCB0cnVlLFxubW0vdm1zY2FuLmM6NjMwNTpcdFx0XHQgICBzYy1cdTAwM2Vucl9zY2FubmVkIC0gbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQpO1xubW0vdm1zY2FuLmMtNjMwNi1cbm1tL3Ztc2Nhbi5jOjYzMDc6XHRpZiAobnJfbm9kZV9yZWNsYWltZWQpXG5tbS92bXNjYW4uYy02MzA4LVx0XHRyZWNsYWltYWJsZSA9IHRydWU7XG4tLVxubW0vdm1zY2FuLmMtNjM2OC1cbm1tL3Ztc2Nhbi5jOjYzNjk6XHRpZiAoc2hvdWxkX2NvbnRpbnVlX3JlY2xhaW0ocGdkYXQsIG5yX25vZGVfcmVjbGFpbWVkLCBzYykpXG5tbS92bXNjYW4uYy02MzcwLVx0XHRnb3RvIGFnYWluO1xuLS1cbm1tL3Ztc2Nhbi5jPTc3NTY9c3RhdGljIGNvbnN0IHN0cnVjdCBjdGxfdGFibGUgdm1zY2FuX3N5c2N0bF90YWJsZVtdID0ge1xuLS1cbm1tL3Ztc2Nhbi5jLTc3NjgtXHRcdC5wcm9jbmFtZVx0PSBcJiMzNDt6b25lX3JlY2xhaW1fbW9kZVwmIzM0Oyxcbm1tL3Ztc2Nhbi5jOjc3Njk6XHRcdC5kYXRhXHRcdD0gXHUwMDI2bm9kZV9yZWNsYWltX21vZGUsXG5tbS92bXNjYW4uYzo3NzcwOlx0XHQubWF4bGVuXHRcdD0gc2l6ZW9mKG5vZGVfcmVjbGFpbV9tb2RlKSxcbm1tL3Ztc2Nhbi5jLTc3NzEtXHRcdC5tb2RlXHRcdD0gMDY0NCxcbi0tXG5tbS92bXNjYW4uYz03Nzg4PW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxuLS1cbm1tL3Ztc2Nhbi5jLTc3OTMtICpcbm1tL3Ztc2Nhbi5jOjc3OTQ6ICogSWYgbm9uLXplcm8gY2FsbCBub2RlX3JlY2xhaW0gd2hlbiB0aGUgbnVtYmVyIG9mIGZyZWUgcGFnZXMgZmFsbHMgYmVsb3dcbm1tL3Ztc2Nhbi5jLTc3OTUtICogdGhlIHdhdGVybWFya3MuXG5tbS92bXNjYW4uYy03Nzk2LSAqL1xubW0vdm1zY2FuLmM6Nzc5NzppbnQgbm9kZV9yZWNsYWltX21vZGUgX19yZWFkX21vc3RseTtcbm1tL3Ztc2Nhbi5jLTc3OTgtXG4tLVxubW0vdm1zY2FuLmMtNzgwNi0vKlxubW0vdm1zY2FuLmM6NzgwNzogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xubW0vdm1zY2FuLmMtNzgwOC0gKiBvY2N1ci5cbi0tXG5tbS92bXNjYW4uYz03ODMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzg0My1cdCAqL1xubW0vdm1zY2FuLmM6Nzg0NDpcdGlmIChub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9VTk1BUClcbm1tL3Ztc2Nhbi5jLTc4NDUtXHRcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XG4tLVxubW0vdm1zY2FuLmMtNzg2NC0gKi9cbm1tL3Ztc2Nhbi5jOjc4NjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc4NjYtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYy03ODcyLVxubW0vdm1zY2FuLmM6Nzg3MzpcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MtXHUwMDNlb3JkZXIsXG5tbS92bXNjYW4uYy03ODc0LVx0XHRcdFx0XHQgICBzYy1cdTAwM2VnZnBfbWFzayk7XG4tLVxubW0vdm1zY2FuLmMtNzkwMi1cbm1tL3Ztc2Nhbi5jOjc5MDM6XHR0cmFjZV9tbV92bXNjYW5fbm9kZV9yZWNsYWltX2VuZChzYy1cdTAwM2Vucl9yZWNsYWltZWQsIE5VTEwpO1xubW0vdm1zY2FuLmMtNzkwNC1cbi0tXG5tbS92bXNjYW4uYy03OTA3LVxubW0vdm1zY2FuLmM6NzkwODp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxubW0vdm1zY2FuLmMtNzkwOS17XG4tLVxubW0vdm1zY2FuLmMtNzkxNy1cdFx0LnByaW9yaXR5ID0gTk9ERV9SRUNMQUlNX1BSSU9SSVRZLFxubW0vdm1zY2FuLmM6NzkxODpcdFx0Lm1heV93cml0ZXBhZ2UgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9XUklURSksXG5tbS92bXNjYW4uYzo3OTE5Olx0XHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXHUwMDI2IFJFQ0xBSU1fVU5NQVApLFxubW0vdm1zY2FuLmMtNzkyMC1cdFx0Lm1heV9zd2FwID0gMSxcbi0tXG5tbS92bXNjYW4uYy03OTY0LVxubW0vdm1zY2FuLmM6Nzk2NTpcdHJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBucl9wYWdlcywgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtNzk2Ni1cdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbi0tXG5tbS92bXNjYW4uYy03OTc3LVxubW0vdm1zY2FuLmM6Nzk3ODpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxubW0vdm1zY2FuLmMtNzk3OS1cdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuLS1cbm1tL3Ztc2Nhbi5jPTc5OTg9aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuLS1cbm1tL3Ztc2Nhbi5jLTgwOTAtXG5tbS92bXNjYW4uYzo4MDkxOlx0XHRcdHJlY2xhaW1lZCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBiYXRjaF9zaXplLCBcdTAwMjZzYyk7XG5tbS92bXNjYW4uYy04MDkyLVx0XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODUzNgoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBhc3N1bWluZyBJJiMzOTttIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG1lbW9yeSBtYW5hZ2VtZW50OgoKKipEaWdnaW5nIGludG8gdGhlIE5vZGUgUmVjbGFpbSBNeXN0ZXJ5KioKCkhtbSwgaW50ZXJlc3RpbmcuIFRoZSBmYWN0IHRoYXQgYF9fbm9kZV9yZWNsYWltYCBpcyBiZWluZyBjYWxsZWQgZnJvbSBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAganVzdCBwaW5nZWQgc29tZXRoaW5nLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGNvbm5lY3Rpb24gbW9yZSB0aG9yb3VnaGx5LiBSaWdodCwgbGV0JiMzOTtzIHRyYWNlIHRoaXMgYmFjay4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIFRpbWUgdG8gZGl2ZSBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoYXQmIzM5O3Mgd2hlcmUgSSBleHBlY3QgdG8gZmluZCB0aGUgY29udGV4dCBhbmQgdGhlIGNhbGwuIEkgd2FudCB0byBzZWUgKndoeSogYW5kICpob3cqIGBfX25vZGVfcmVjbGFpbWAgaXMgYmVpbmcgaW52b2tlZCB0aGVyZS4gSXMgdGhpcyBzdGFuZGFyZCBiZWhhdmlvciwgb3IgaXMgdGhpcyBzb21lIG9wdGltaXplZCBwYXRoIG9yLCBoZWF2ZW4gZm9yYmlkLCBhIHBvdGVudGlhbCBidWc/IFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt1c2VyX3Byb2FjdGl2ZV9yZWNsYWltJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9Nzk5Mj1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XG4tLVxubW0vdm1zY2FuLmMtNzk5Ny1cbm1tL3Ztc2Nhbi5jOjc5OTg6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vdm1zY2FuLmMtNzk5OS1cdFx0XHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmM9ODE1MT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbi0tXG5tbS92bXNjYW4uYy04MTU2LVxubW0vdm1zY2FuLmM6ODE1NzpcdHJldCA9IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oKGNoYXIgKilidWYsIE5VTEwsIE5PREVfREFUQShuaWQpKTtcbm1tL3Ztc2Nhbi5jLTgxNTgtXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTYKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA0NwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipBbmFseXppbmcgdGhlIE1lbW9yeSBSZWNsYWltaW5nIFRyaWdnZXIqKgoKT2theSwgc28gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGJlaW5nIGNhbGxlZCwgYW5kIGl0JiMzOTtzIHRyaWdnZXJlZCB0aHJvdWdoIGEgc3lzZnMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhlIGByZWNsYWltX3N0b3JlYC4gVGhpcyBtZWFucyBhIHVzZXItc3BhY2UgcHJvY2VzcyBpcyBkaXJlY3RseSByZXF1ZXN0aW5nIG1lbW9yeSByZWNsYWltLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBoYXBwZW5pbmcgKmluc2lkZSogdGhhdCBgcmVjbGFpbV9zdG9yZWAgaGFuZGxlciB0byBmaWd1cmUgb3V0IHRoZSBleGFjdCBmbG93LiBUaW1lIHRvIGRpdmUgaW50byB0aGUga2VybmVsIGNvZGUuIExldCYjMzk7cyBoZWFkIG92ZXIgdG8gYG1tL3Ztc2Nhbi5jYCBhbmQgZmluZCB0aGUgYHJlY2xhaW1fc3RvcmVgIGZ1bmN0aW9uLiBJJiMzOTttIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyB0aGlzIHVzZXItaW5pdGlhdGVkIHJlY2xhaW0sIGFuZCBJIG5lZWQgdG8gc2VlIHdoYXQgYWN0aW9ucyBpdCB0YWtlcywgYW5kIHdoYXQgY29udGV4dCBpcyBwcm92aWRlZCB0byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcGFyYW1ldGVycyBhcmUgc2V0IGFuZCB3aGF0IGZsYWdzIGFyZSBpbnZvbHZlZC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgdGhlIHBhdGggb2YgZXhlY3V0aW9uIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIHJlY2xhaW0gdHJpZ2dlci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cmVjbGFpbV9zdG9yZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTgxNDg9RVhQT1JUX1NZTUJPTF9HUEwoY2hlY2tfbW92ZV91bmV2aWN0YWJsZV9mb2xpb3MpO1xuLS1cbm1tL3Ztc2Nhbi5jLTgxNTAtI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbm1tL3Ztc2Nhbi5jOjgxNTE6c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXG5tbS92bXNjYW4uYy04MTUyLVx0XHRcdCAgICAgc3RydWN0IGRldmljZV9hdHRyaWJ1dGUgKmF0dHIsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk0MjUKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAxNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIE5VTUEtUmVsYXRlZCBNZW1vcnkgUmVjbGFpbSBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGByZWNsYWltX3N0b3JlYCBhbmQgYG5vZGVfcmVjbGFpbWAgZnVuY3Rpb25zICpyZXF1aXJlKiBgQ09ORklHX05VTUFgLiBUaGF0JiMzOTtzIHRoZSBiYXNlbGluZS4gSSB3b25kZXIgaWYgdGhlcmUgYXJlIGFueSBvdGhlciBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cywgYnV0IHNvIGZhciwgaXQgbG9va3MgbGlrZSBgQ09ORklHX05VTUFgIGlzIHRoZSBvbmx5IG9uZS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgYG5vZGVfcmVjbGFpbWAgaXMgdGhlICpzb2xlKiBlbnRyeSBwb2ludCBpbnRvIHRoaXMgcGFydCBvZiB0aGUgc3lzdGVtLiBJIHNlZSB0aGlzIHBhdGNoIG1vZGlmaWVzIGBnZXRfc2Nhbl9jb3VudGAsIGBzY2FuX2ZvbGlvc2AsIGBzaHJpbmtfb25lYCwgYW5kIGBzaHJpbmtfbm9kZV9tZW1jZ3NgLiBUaGVzZSBhbGwgbGVhZCBpbnRvIGBzaHJpbmtfbm9kZWAsIHdoaWNoIGlzICpjZXJ0YWlubHkqIGNhbGxlZCBmcm9tIGBfX25vZGVfcmVjbGFpbWAuIEJ1dCB3YWl0LCB0aGVyZSBhcmUgb3RoZXIgY2FsbGVyczogSSYjMzk7bSBzZWVpbmcgYGtzd2FwZGAsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGFuZCBvdGhlcnMgYXMgd2VsbCwgd2hpY2ggYXJlIHN0YW5kYXJkIGNvbXBvbmVudHMhIAoKSG9sZCBvbi4uLnRoaXMgaXMgaW50ZXJlc3RpbmcuIFRoZSBmbGFncyBgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gLi4uIHRoZXkmIzM5O3JlICpvbmx5KiBzZXQgd2l0aGluIGBub2RlX3JlY2xhaW1gISBUaGF0JiMzOTtzIGEgc2lnbmlmaWNhbnQgb2JzZXJ2YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBoZXJlIGlzIGNvcnJlY3QsIHNvIEkmIzM5O2xsIHZlcmlmeSB0aGlzIGFzc2VydGlvbi4gVGhpcyBjb3VsZCBiZSBjcml0aWNhbCBmb3IgZGV0ZXJtaW5pbmcgdGhlIGludGVuZGVkIHNjb3BlIGFuZCBiZWhhdmlvdXIgb2YgdGhlc2UgcmVjbGFpbSBtZWNoYW5pc21zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtza2lwX3NsYWJfcmVjbGFpbSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTc2PXN0cnVjdCBzY2FuX2NvbnRyb2wge1xuLS1cbm1tL3Ztc2Nhbi5jLTEyMC1cdCAqL1xubW0vdm1zY2FuLmM6MTIxOlx0dW5zaWduZWQgaW50IHNraXBfc2xhYl9yZWNsYWltOjE7XG5tbS92bXNjYW4uYy0xMjItXG4tLVxubW0vdm1zY2FuLmM9NTEyNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy01MTQ4LVxubW0vdm1zY2FuLmM6NTE0OTpcdGlmICghc2MtXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0pXG5tbS92bXNjYW4uYy01MTUwLVx0XHRzaHJpbmtfc2xhYihzYy1cdTAwM2VnZnBfbWFzaywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgbWVtY2csIHNjLVx1MDAzZXByaW9yaXR5KTtcbi0tXG5tbS92bXNjYW4uYz02MTkxPXN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbi0tXG5tbS92bXNjYW4uYy02MjUyLVxubW0vdm1zY2FuLmM6NjI1MzpcdFx0aWYgKCFzYy1cdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSlcbm1tL3Ztc2Nhbi5jLTYyNTQtXHRcdFx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLFxuLS1cbm1tL3Ztc2Nhbi5jPTc4NjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbi0tXG5tbS92bXNjYW4uYy03ODg5LVx0ICpcbm1tL3Ztc2Nhbi5jOjc4OTA6XHQgKiBXaGF0IHRvIHJlY2xhaW0gaXMgZ2F0ZWQgcGVyIHR5cGUgYnkgc2MtXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0gYW5kXG5tbS92bXNjYW4uYy03ODkxLVx0ICogc2MtXHUwMDNlc2tpcF9maWxlX3JlY2xhaW0uXG4tLVxubW0vdm1zY2FuLmM9NzkwOD11bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuLS1cbm1tL3Ztc2Nhbi5jLTc5NTgtXHQgKi9cbm1tL3Ztc2Nhbi5jOjc5NTk6XHRzYy5za2lwX3NsYWJfcmVjbGFpbSA9XG5tbS92bXNjYW4uYy03OTYwLVx0XHRub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNjPVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMDQ2MQoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDE2MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbW9yeSBSZWNsYWltIExvZ2ljKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2luZyB0aHJvdWdoIHRoaXMgbmV3IG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLiBJdCBsb29rcyBsaWtlIHRoZSBgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gIGZsYWdzIGFyZSBvbmx5IGV2ZXIgc2V0IHdpdGhpbiB0aGUgYG5vZGVfcmVjbGFpbWAgZnVuY3Rpb24uIFRoYXQmIzM5O3MgdGhlIGtleS4gVGhhdCBtZWFucyB0aGlzIG5ldyBsb2dpYywgdGhlIHNraXBwaW5nIG9mIHNsYWIgYW5kIGZpbGUgcmVjbGFpbSwgaXMgb25seSB0cmlnZ2VyZWQgd2hlbiBgbm9kZV9yZWNsYWltYCBpcyBzcGVjaWZpY2FsbHkgY2FsbGVkLgoKTm93LCB3aGVyZSAqZG9lcyogYG5vZGVfcmVjbGFpbWAgZ2V0IGNhbGxlZCBmcm9tPyBSaWdodCwgaXTigJlzIGNhbGxlZCBmcm9tIGBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0YCwgYnV0IG9ubHkgd2hlbiBgbm9kZV9yZWNsYWltX21vZGVgIGlzIGVuYWJsZWQuIEFoLCBhbmQgYG5vZGVfcmVjbGFpbV9tb2RlYCwgdGhhdCYjMzk7cyBvdXIgZnJpZW5kLCB0aGUgc3lzY3RsIHZhcmlhYmxlIGB2bS56b25lX3JlY2xhaW1fbW9kZWAuIFNvLCBpZiBgdm0uem9uZV9yZWNsYWltX21vZGVgIGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBuZXcgc2tpcHBpbmcgYmVoYXZpb3IgdGFrZXMgZWZmZWN0LgoKVGhlIGNydWNpYWwgcXVlc3Rpb24gbm93IGJlY29tZXM6IFdoYXQmIzM5O3MgdGhlIGRlZmF1bHQgdmFsdWUgb2YgYHZtLnpvbmVfcmVjbGFpbV9tb2RlYD8gSWYgaXQmIzM5O3MgemVybywgdGhlbiB0aGUgbmV3IGxvZ2ljIGlzLCBieSBkZWZhdWx0LCAqbm90KiBpbiBwbGF5IHVubGVzcyBzb21lb25lIGV4cGxpY2l0bHkgc2V0cyBpdC4gSXQmIzM5O3MgcG9zc2libGUgdGhhdCBjZXJ0YWluIGFyY2hpdGVjdHVyZXMgb3IgTlVNQSBzZXR1cHMgbWlnaHQgc2V0IGl0IGFzIGEgZGVmYXVsdCwgc28gdGhhdCYjMzk7cyBzb21ldGhpbmcgSSBuZWVkIHRvIGtlZXAgaW4gbWluZC4gTGV0JiMzOTtzIGRpZyBpbnRvIHRoZSBkZWZhdWx0cyBhbmQgc2VlIHdoYXTigJlzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzbuKAmXQgZW5hYmxlZCBieSBkZWZhdWx0IG9uIG15IHRlc3QgcGxhdGZvcm0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O25vZGVfcmVjbGFpbV9tb2RlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvdG9wb2xvZ3kuaD00Mz1pbnQgYXJjaF91cGRhdGVfY3B1X3RvcG9sb2d5KHZvaWQpO1xuLS1cbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaC01NS0gKiAoaW4gd2hhdGV2ZXIgYXJjaCBzcGVjaWZpYyBtZWFzdXJlbWVudCB1bml0cyByZXR1cm5lZCBieSBub2RlX2Rpc3RhbmNlKCkpXG5pbmNsdWRlL2xpbnV4L3RvcG9sb2d5Lmg6NTY6ICogYW5kIG5vZGVfcmVjbGFpbV9tb2RlIGlzIGVuYWJsZWQgdGhlbiB0aGUgVk0gd2lsbCBvbmx5IGNhbGwgbm9kZV9yZWNsYWltKClcbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaC01Ny0gKiBvbiBub2RlcyB3aXRoaW4gdGhpcyBkaXN0YW5jZS5cbi0tXG5tbS9pbnRlcm5hbC5oPTExNDE9c3RhdGljIGlubGluZSB2b2lkIG1sb2NrX2RyYWluX3JlbW90ZShpbnQgY3B1KSB7IH1cbi0tXG5tbS9pbnRlcm5hbC5oLTExNDQtI2lmZGVmIENPTkZJR19OVU1BXG5tbS9pbnRlcm5hbC5oOjExNDU6ZXh0ZXJuIGludCBub2RlX3JlY2xhaW1fbW9kZTtcbm1tL2ludGVybmFsLmgtMTE0Ni1cbi0tXG5tbS9pbnRlcm5hbC5oPTExNDk9ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayk7XG5tbS9pbnRlcm5hbC5oLTExNTAtI2Vsc2Vcbm1tL2ludGVybmFsLmg6MTE1MTojZGVmaW5lIG5vZGVfcmVjbGFpbV9tb2RlIDBcbm1tL2ludGVybmFsLmgtMTE1Mi1cbi0tXG5tbS9pbnRlcm5hbC5oPTExNjQ9c3RhdGljIGlubGluZSBib29sIG5vZGVfcmVjbGFpbV9lbmFibGVkKHZvaWQpXG5tbS9pbnRlcm5hbC5oLTExNjUte1xubW0vaW50ZXJuYWwuaDoxMTY2Olx0LyogSXMgYW55IG5vZGVfcmVjbGFpbV9tb2RlIGJpdCBzZXQ/ICovXG5tbS9pbnRlcm5hbC5oOjExNjc6XHRyZXR1cm4gbm9kZV9yZWNsYWltX21vZGUgXHUwMDI2IChSRUNMQUlNX1pPTkV8UkVDTEFJTV9XUklURXxSRUNMQUlNX1VOTUFQKTtcbm1tL2ludGVybmFsLmgtMTE2OC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTEwMDQ9c3RhdGljIGJvb2wgY29sbGFwc2Vfc2Nhbl9hYm9ydChpbnQgbmlkLCBzdHJ1Y3QgY29sbGFwc2VfY29udHJvbCAqY2MpXG4tLVxubW0va2h1Z2VwYWdlZC5jLTEwMDgtXHQvKlxubW0va2h1Z2VwYWdlZC5jOjEwMDk6XHQgKiBJZiBub2RlX3JlY2xhaW1fbW9kZSBpcyBkaXNhYmxlZCwgdGhlbiBubyBleHRyYSBlZmZvcnQgaXMgbWFkZSB0b1xubW0va2h1Z2VwYWdlZC5jLTEwMTAtXHQgKiBhbGxvY2F0ZSBtZW1vcnkgbG9jYWxseS5cbi0tXG5tbS9wYWdlX2FsbG9jLmM9MzgwMD1nZXRfcGFnZV9mcm9tX2ZyZWVsaXN0KGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIsIGludCBhbGxvY19mbGFncyxcbi0tXG5tbS9wYWdlX2FsbG9jLmMtMzg3Ni1cdFx0ICoga3N3YXBkIHdha2V1cHMgb24gb25seSBzb21lIG5vZGVzLiBBdm9pZCBhY2NpZGVudGFsXG5tbS9wYWdlX2FsbG9jLmM6Mzg3NzpcdFx0ICogXCYjMzQ7bm9kZV9yZWNsYWltX21vZGVcJiMzNDstbGlrZSBiZWhhdmlvciBpbiB0aGlzIGNhc2UuXG5tbS9wYWdlX2FsbG9jLmMtMzg3OC1cdFx0ICovXG4tLVxubW0vdm1zY2FuLmM9Nzc1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XG4tLVxubW0vdm1zY2FuLmMtNzc2OC1cdFx0LnByb2NuYW1lXHQ9IFwmIzM0O3pvbmVfcmVjbGFpbV9tb2RlXCYjMzQ7LFxubW0vdm1zY2FuLmM6Nzc2OTpcdFx0LmRhdGFcdFx0PSBcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcbm1tL3Ztc2Nhbi5jOjc3NzA6XHRcdC5tYXhsZW5cdFx0PSBzaXplb2Yobm9kZV9yZWNsYWltX21vZGUpLFxubW0vdm1zY2FuLmMtNzc3MS1cdFx0Lm1vZGVcdFx0PSAwNjQ0LFxuLS1cbm1tL3Ztc2Nhbi5jPTc3ODg9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXG4tLVxubW0vdm1zY2FuLmMtNzc5Ni0gKi9cbm1tL3Ztc2Nhbi5jOjc3OTc6aW50IG5vZGVfcmVjbGFpbV9tb2RlIF9fcmVhZF9tb3N0bHk7XG5tbS92bXNjYW4uYy03Nzk4LVxuLS1cbm1tL3Ztc2Nhbi5jPTc4MzM9c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYy03ODQzLVx0ICovXG5tbS92bXNjYW4uYzo3ODQ0Olx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1VOTUFQKVxubW0vdm1zY2FuLmMtNzg0NS1cdFx0bnJfcGFnZWNhY2hlX3JlY2xhaW1hYmxlID0gbm9kZV9wYWdlX3N0YXRlKHBnZGF0LCBOUl9GSUxFX1BBR0VTKTtcbi0tXG5tbS92bXNjYW4uYz03OTA4PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vdm1zY2FuLmMtNzkxNy1cdFx0LnByaW9yaXR5ID0gTk9ERV9SRUNMQUlNX1BSSU9SSVRZLFxubW0vdm1zY2FuLmM6NzkxODpcdFx0Lm1heV93cml0ZXBhZ2UgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcdTAwMjYgUkVDTEFJTV9XUklURSksXG5tbS92bXNjYW4uYzo3OTE5Olx0XHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXHUwMDI2IFJFQ0xBSU1fVU5NQVApLFxubW0vdm1zY2FuLmMtNzkyMC1cdFx0Lm1heV9zd2FwID0gMSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwODMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiA0NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBSZWNsYWltIFBhdGgqKgoKT2theSwgc28gdGhlIGBub2RlX3JlY2xhaW1fbW9kZWAgZGVmYXVsdHMgdG8gMCwgd2hpY2ggaXMgZXhwZWN0ZWQuIEhvd2V2ZXIsIHN5emthbGxlciBjYW4gcmVhZGlseSBtYW5pcHVsYXRlIHRoaXMgdGhyb3VnaCBgdm0uem9uZV9yZWNsYWltX21vZGVgLCBhbmQgdGhhdCYjMzk7cyB0aGUga2V5LiBJIHNlZSB0aGF0IGBub2RlX3JlY2xhaW1gIGdldHMgdHJpZ2dlcmVkIHdpdGhpbiBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAgd2hlbiBgbm9kZV9yZWNsYWltX2VuYWJsZWQoKWAgcmV0dXJucyB0cnVlLiBBbmQgYG5vZGVfcmVjbGFpbV9lbmFibGVkKClgIGlzIGRpcmVjdGx5IHRpZWQgdG8gdGhlIGJpdHMgc2V0IGluIGBub2RlX3JlY2xhaW1fbW9kZWAuIFRoZXJlZm9yZSwgYnkgc2V0dGluZyBgdm0uem9uZV9yZWNsYWltX21vZGVgLCBzeXprYWxsZXIgY2FuIGZvcmNlIGBub2RlX3JlY2xhaW1gIHRvIGV4ZWN1dGUgZHVyaW5nIHBhZ2UgYWxsb2NhdGlvbi4gVGhhdCYjMzk7cyBhIGNsZWFyIHBhdGggdG8gdGVzdGluZyBhbmQgZXhwbG9pdGluZyB0aGlzIGJlaGF2aW9yLgoKTXkgaW1tZWRpYXRlIGZvY3VzIG5vdyBzaGlmdHMgdG8gdGhlIGZ1bmN0aW9ucyBpbnZvbHZlZC4gYG5vZGVfcmVjbGFpbWAgaXMgdGhlIG1haW4gZW50cnkgcG9pbnQsIGFzIEkgc3VzcGVjdGVkLiBJdCBjYWxscyBgc2hyaW5rX25vZGVgLCB3aGljaCBpbiB0dXJuIGxlYWRzIHRvIGEgY2FzY2FkZSB0aHJvdWdoIHRoZSBzdGF0aWMgZnVuY3Rpb25zOiBgZ2V0X3NjYW5fY291bnRgLCBgc2Nhbl9mb2xpb3NgIGFsbCBldmVudHVhbGx5IGZlZWRpbmcgaW50byBgc2hyaW5rX2FjdGl2ZV9saXN0YCBvciBgc2hyaW5rX2luYWN0aXZlX2xpc3RgLiBgc2hyaW5rX29uZWAgYW5kIGBzaHJpbmtfbm9kZV9tZW1jZ3NgIGFyZSBhbHNvIHN0YXRpYy4gU2luY2UgaXQmIzM5O3MgdGhlIG9ubHkgbm9uLXN0YXRpYyBmdW5jdGlvbiwgYG5vZGVfcmVjbGFpbWAgaXMgZGVmaW5pdGVseSB0aGUgdGFyZ2V0LgoKSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbm9kZV9yZWNsYWltYCBpcyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQmIzM5O3MgZGVjbGFyZWQgZ2xvYmFsbHkgaW4gYG1tL2ludGVybmFsLmhgLCBzbyB0aGF0JiMzOTtzIGdvb2QuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBhbSBub3QgbWlzc2luZyBhbnl0aGluZyBlbHNlLiBObywgdGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgYG5vZGVfcmVjbGFpbWAgYW5kIHN0YXRpYyBmdW5jdGlvbnMgaW4gYG1tL3Ztc2Nhbi5jYC4gU28gaXQmIzM5O3MgY29uZmlybWVkLgoKTmV4dCwgSSBuZWVkIHRvIGNoZWNrIGBDT05GSUdfTlVNQWAuIFN5emthbGxlciB1c3VhbGx5IGVuYWJsZXMgTlVNQSBieSBkZWZhdWx0LCBidXQgSSBzaG91bGQgZXhwbGljaXRseSBsaXN0IGl0IGluIGBFbmFibGVDb25maWdzYCBqdXN0IHRvIGJlIGNlcnRhaW4uCgpPa2F5LCBsZXQgbWUganVzdCBjb25maXJtIHRoYXQgYG5vZGVfcmVjbGFpbWAgaXMgdGhlIHNvbGUgbm9uLXN0YXRpYyBmdW5jdGlvbiBleHBvc2VkIGluIHRoZSByZWxldmFudCBjb2RlLiBZZXAsIGl0IGlzLgoKSG9sZCBvbiBhIHNlY29uZC4gRG9lcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYWxzbyBhY3QgYXMgYW4gZW50cnkgcG9pbnQgdG8gYF9fbm9kZV9yZWNsYWltYD8gTm8sIGl0IGNhbGxzIGBfX25vZGVfcmVjbGFpbWAgZGlyZWN0bHkuIFNvIGBub2RlX3JlY2xhaW1gIGlzIGluZGVlZCB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIEkgd2FudCB0byBmb2N1cyBvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X19ub2RlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS92bXNjYW4uYz03ODMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXG4tLVxubW0vdm1zY2FuLmMtNzg2NC0gKi9cbm1tL3Ztc2Nhbi5jOjc4NjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc4NjYtXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03OTA4PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXG4tLVxubW0vdm1zY2FuLmMtNzk2NC1cbm1tL3Ztc2Nhbi5jOjc5NjU6XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKTtcbm1tL3Ztc2Nhbi5jLTc5NjYtXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4tLVxubW0vdm1zY2FuLmMtNzk3Ny1cbm1tL3Ztc2Nhbi5jOjc5Nzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbm1tL3Ztc2Nhbi5jLTc5NzktXHRcdFx0XHQgICAgdW5zaWduZWQgbG9uZyBucl9wYWdlcyxcbi0tXG5tbS92bXNjYW4uYz03OTk4PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1Zixcbi0tXG5tbS92bXNjYW4uYy04MDkwLVxubW0vdm1zY2FuLmM6ODA5MTpcdFx0XHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgXHUwMDI2c2MpO1xubW0vdm1zY2FuLmMtODA5Mi1cdFx0XHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzNTAwCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEZWJ1Z2dpbmcgYSBQb3RlbnRpYWwgUmUtZGVjbGFyYXRpb24qKgoKT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgX19ub2RlX3JlY2xhaW1gIGRlZmluZWQgdHdpY2U/IFRoYXQmIzM5O3MgaW1tZWRpYXRlbHkgc3VzcGVjdC4gV2FpdCwgbm8sIGl0IGxvb2tzIGxpa2Ugb25lIG9mIHRoZW0gaXMganVzdCBhIGZvcndhcmQgZGVjbGFyYXRpb24sIHBlcmhhcHMgZm9yIGEgY2lyY3VsYXIgZGVwZW5kZW5jeSBvciBzb21ldGhpbmcgbGlrZSB0aGF0LiBBbHdheXMgZ29vZCB0byBkb3VibGUtY2hlY2sgdGhlc2UgdGhpbmdzIGJlZm9yZSBqdW1waW5nIHRvIGNvbmNsdXNpb25zLiBMZXQgbWUganVzdCBjb25maXJtIHRoYXQgYnkgdGFraW5nIGEgcGVlayBhdCBsaW5lIDc5NzguIFRoYXQgc2hvdWxkIGNsYXJpZnkgdGhlIHNpdHVhdGlvbiBhbmQgcHJldmVudCBtZSBmcm9tIGdvaW5nIGRvd24gdGhlIHdyb25nIGRlYnVnZ2luZyBwYXRoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzk3MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs3OTcwOlx0XHRlbHNlXG43OTcxOlx0XHRcdGNvdW50X3ZtX2V2ZW50KFBHU0NBTl9aT05FX1JFQ0xBSU1fRkFJTEVEKTtcbjc5NzI6XHRcbjc5NzM6XHRcdHJldHVybiByZXQ7XG43OTc0Olx0fVxuNzk3NTpcdFxuNzk3NjpcdCNlbHNlXG43OTc3Olx0XG43OTc4Olx0c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcbjc5Nzk6XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxuNzk4MDpcdFx0XHRcdFx0ICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuNzk4MTpcdHtcbjc5ODI6XHRcdHJldHVybiAwO1xuNzk4MzpcdH1cbjc5ODQ6XHRcbjc5ODU6XHQjZW5kaWZcbjc5ODY6XHRcbjc5ODc6XHRlbnVtIHtcbjc5ODg6XHRcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxuNzk4OTpcdFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXG43OTkwOlx0XHRNRU1PUllfUkVDTEFJTV9OVUxMLFxuNzk5MTpcdH07XG43OTkyOlx0c3RhdGljIGNvbnN0IG1hdGNoX3RhYmxlX3QgdG9rZW5zID0ge1xuNzk5MzpcdFx0eyBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTLCBcJiMzNDtzd2FwcGluZXNzPSVkXCYjMzQ7fSxcbjc5OTQ6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFwmIzM0O3N3YXBwaW5lc3M9bWF4XCYjMzQ7fSxcbjc5OTU6XHRcdHsgTUVNT1JZX1JFQ0xBSU1fTlVMTCwgTlVMTCB9LFxuNzk5NjpcdH07XG43OTk3Olx0XG43OTk4Olx0aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxuNzk5OTpcdFx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTQxMDgKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE5VTUEtUmVsYXRlZCBNZW1vcnkgUmVjbGFpbSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBpbW1lZGlhdGVseSBJIHNlZSB0aGF0IGBfX25vZGVfcmVjbGFpbWAgaXMgZXNzZW50aWFsbHkgYSBwbGFjZWhvbGRlciwgb3Igc3R1YiwgaWYgYENPTkZJR19OVU1BYCBpc24mIzM5O3QgZW5hYmxlZC4gVGhhdCBtYWtlcyBzZW5zZTsgbm8gTlVNQSwgbm8gbm9kZS1zcGVjaWZpYyByZWNsYWltLiBCdXQgd2FpdC4uLiBJJiMzOTttIGFsc28gc2VlaW5nIHRoaXMgc2FtZSBzdHViIGRlZmluaXRpb24gZm9yIGBub2RlX3JlY2xhaW1gIHdpdGhpbiBgbW0vaW50ZXJuYWwuaGAuIENvbmZ1c2luZywgYnV0IHRoZSBwb2ludCBpcyBjbGVhciwgaXQgZG9lcyBub3RoaW5nIHdoZW4gTlVNQSBpcyBub3QgY29uZmlndXJlZC4KCk5vdywgbXkgbWluZCBnb2VzIHRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYC4gVGhpcyBzZWVtcyB0byBiZSAqb3V0c2lkZSogdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGZvciBgQ09ORklHX05VTUFgLiBIb2xkIG9uLi4uIHllcywgdGhhdCYjMzk7cyByaWdodC4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGF2YWlsYWJsZSwgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIHdlIGhhdmUgTlVNQSBlbmFibGVkLiBUaGF0IGNhbiYjMzk7dCBiZSByaWdodCwgY2FuIGl0PwoKU28gaWYgTlVNQSBpc24mIzM5O3QgZW5hYmxlZCwgYF9fbm9kZV9yZWNsYWltYCBpcyBqdXN0IHRoYXQgc3R1YiBmdW5jdGlvbiwgcmV0dXJuaW5nIDAuIFRoYXQgbXVzdCBtZWFuIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCwgd2hlbiBOVU1BIGlzIG5vdCBwcmVzZW50LCB3aWxsIGVuZCB1cCBjYWxsaW5nIHRoYXQgc3R1YiBhbmQganVzdCByZXR1cm5pbmcgemVyby4gSXQgaXMgZXNzZW50aWFsbHkgYSBuby1vcCBpbiB0aGF0IGNhc2UuIEkmIzM5O20gd29uZGVyaW5nIHdoeSB3ZSBkZWZpbmUgdGhlIGZ1bmN0aW9uIGlmIGl0IGhhcyBubyBmdW5jdGlvbmFsaXR5LgoKV2FpdCBhIHNlY29uZC4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgYmFjay4gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGNhbGxlZCBmcm9tIGByZWNsYWltX3N0b3JlYCwgaXNuJiMzOTt0IGl0PyBMZXQgbWUganVzdCBkb3VibGUgY2hlY2sgaG93IGByZWNsYWltX3N0b3JlYCBpcyBkZWZpbmVkLCBzaW5jZSB0aGF0IGlzIHVuZGVyIHRoZSBgc3lzZnNgIGFuZCBgTlVNQWAgY29uZmlndXJhdGlvbiBvcHRpb25zLiBBaCwgYnV0IHdhaXQsIGByZWNsYWltX3N0b3JlYCBpcyBkZWZpbmVkIGJ5IHRob3NlIGNvbmRpdGlvbnMhIEkgbmVlZCB0byByZS1ldmFsdWF0ZSBob3cgYWxsIG9mIHRoaXMgd29ya3MsIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDgxNDUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7ODE0NTpcdFx0XHRjb3VudF92bV9ldmVudHMoVU5FVklDVEFCTEVfUEdTQ0FOTkVELCBwZ3NjYW5uZWQpO1xuODE0NjpcdFx0fVxuODE0NzpcdH1cbjgxNDg6XHRFWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XG44MTQ5Olx0XG44MTUwOlx0I2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcdTAwMjZcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcbjgxNTE6XHRzdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcbjgxNTI6XHRcdFx0XHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxuODE1MzpcdFx0XHRcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXG44MTU0Olx0e1xuODE1NTpcdFx0aW50IHJldCwgbmlkID0gZGV2LVx1MDAzZWlkO1xuODE1NjpcdFxuODE1NzpcdFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xuODE1ODpcdFx0cmV0dXJuIHJldCA/IHJldCA6IGNvdW50O1xuODE1OTpcdH1cbjgxNjA6XHRcbjgxNjE6XHRzdGF0aWMgREVWSUNFX0FUVFJfV08ocmVjbGFpbSk7XG44MTYyOlx0aW50IHJlY2xhaW1fcmVnaXN0ZXJfbm9kZShzdHJ1Y3Qgbm9kZSAqbm9kZSlcbjgxNjM6XHR7XG44MTY0Olx0XHRyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKFx1MDAyNm5vZGUtXHUwMDNlZGV2LCBcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNTIKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAzNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlLCB1c2luZyB0aGUgZmlyc3QgcGVyc29uIGFuZCBwcm92aWRpbmcgYSAmIzM0O2Z1bHNvbWUmIzM0OyBleHBsYW5hdGlvbjoKCioqTmF2aWdhdGluZyBOVU1BLUF3YXJlIFJlY2xhaW0gTG9naWMqKgoKUmlnaHQsIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGByZWNsYWltX3N0b3JlYCBmdW5jdGlvbiwgYW5kIGl0JiMzOTtzIGZsYWdnZWQgYXMgYmVpbmcgY29uZGl0aW9uYWxseSBjb21waWxlZCB1bmRlciBgQ09ORklHX05VTUFgLiBUaGF0JiMzOTtzIG5vdCB1bmV4cGVjdGVkOyBOVU1BIHN5c3RlbXMgb2Z0ZW4gaGF2ZSBzcGVjaWFsaXplZCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzLCBzbyB0aGUgY29kZSB3b3VsZCBiZSBkaWZmZXJlbnQuIEl0IG1ha2VzIHNlbnNlIHRoYXQgcmVjbGFpbSBmdW5jdGlvbnMgd291bGQgYmUgdGllZCB0byB0aGF0LiBIb3dldmVyLi4uICp0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBkaWcgZGVlcGVyLiogVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBgcmVjbGFpbV9zdG9yZWAgaXMgYWxzbyBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBOVU1BIGNvbnRleHQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZSBmb3IgdGhlc2UgJiMzNDtvdGhlciYjMzQ7IGNhbGxzIHRvIGVuc3VyZSB0aGUgbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kgaGFuZGxlcyBib3RoIE5VTUEgYW5kIG5vbi1OVU1BIHNjZW5hcmlvcyBwcm9wZXJseS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBjb2RlJiMzOTtzIHJvYnVzdG5lc3MuIEFyZSB0aGVyZSBzcGVjaWZpYyBzaXR1YXRpb25zLCBsaWtlIG9mZmxpbmluZyBub2RlcywgdGhhdCB1c2UgdGhlIHNoYXJlZCBjb2RlPyBJcyB0aGVyZSBhIHN1YnRsZSBidWcgbHVya2luZyBkdWUgdG8gdGhpcyBkdWFsaXR5PyBJIG5lZWQgdG8gdHJhY2UgYmFjayB0aG9zZSBjcm9zcy1jYWxscyBhbmQgdW5kZXJzdGFuZCB0aGVpciBwdXJwb3NlLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBjYWxsIGdyYXBocyBhbmQgZmlndXJlIG91dCBob3cgdGhleSByZWxhdGUhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3VzZXJfcHJvYWN0aXZlX3JlY2xhaW0mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vaW50ZXJuYWwuaD02OTk9ZXh0ZXJuIHZvaWQgcmVjbGFpbV90aHJvdHRsZShwZ19kYXRhX3QgKnBnZGF0LCBlbnVtIHZtc2Nhbl90aHJvdHRsZV9zdGF0ZSByZWFzb24pO1xubW0vaW50ZXJuYWwuaDo3MDA6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxubW0vaW50ZXJuYWwuaC03MDEtXHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9NTA3Mj1zdGF0aWMgc3NpemVfdCBtZW1vcnlfcmVjbGFpbShzdHJ1Y3Qga2VybmZzX29wZW5fZmlsZSAqb2YsIGNoYXIgKmJ1Zixcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA3Ny1cbm1tL21lbWNvbnRyb2wuYzo1MDc4Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcbm1tL21lbWNvbnRyb2wuYy01MDc5LVx0aWYgKHJldClcbi0tXG5tbS92bXNjYW4uYz03OTkyPXN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcbi0tXG5tbS92bXNjYW4uYy03OTk3LVxubW0vdm1zY2FuLmM6Nzk5ODppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG5tbS92bXNjYW4uYy03OTk5LVx0XHRcdCAgIHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgcGdfZGF0YV90ICpwZ2RhdClcbi0tXG5tbS92bXNjYW4uYz04MTUxPXN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxuLS1cbm1tL3Ztc2Nhbi5jLTgxNTYtXG5tbS92bXNjYW4uYzo4MTU3Olx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbSgoY2hhciAqKWJ1ZiwgTlVMTCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vdm1zY2FuLmMtODE1OC1cdHJldHVybiByZXQgPyByZXQgOiBjb3VudDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU3NjQKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA2OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0LCB0aGlua2luZyBsaWtlIGFuIGV4cGVydDoKCioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBSZWNsYW1hdGlvbiBQcm9jZXNzKioKCk9rYXksIHNvIEkgc2VlIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBiZWluZyBpbnZva2VkIGZyb20gYG1lbW9yeV9yZWNsYWltYCB3aXRoaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgaW1tZWRpYXRlbHkgdGVsbHMgbWUgdGhpcyBpcyB0aGUgY2dyb3VwIHYyIGBtZW1vcnkucmVjbGFpbWAgaW50ZXJmYWNlIGF0IHBsYXkuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXRhaWxzIG9mIHRoaXMgcHJvYWN0aXZlIHJlY2xhbWF0aW9uLCBhbmQgd2hlcmUgaXQmIzM5O3MgYmVpbmcgdHJpZ2dlcmVkIGZyb20uCgpOb3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpdHNlbGYuIEkmIzM5O20gaGVhZGluZyBvdmVyIHRvIGBtbS92bXNjYW4uY2AgdG8gc2VlIHdoYXQmIzM5O3MgYWN0dWFsbHkgaGFwcGVuaW5nIHdpdGhpbiB0aGF0IGZ1bmN0aW9uLiBJJiMzOTttIGJldHRpbmcgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gaXMgaW1wbGVtZW50ZWQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQmIzM5O3MgZG9pbmcgd2l0aCBwYWdlcyBhbmQgdGhlIGltcGxpY2F0aW9ucyBmb3IgdGhlIHN5c3RlbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS92bXNjYW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5OTgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc5OTg6XHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXG43OTk5Olx0XHRcdFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxuODAwMDpcdHtcbjgwMDE6XHRcdHVuc2lnbmVkIGludCBucl9yZXRyaWVzID0gTUFYX1JFQ0xBSU1fUkVUUklFUztcbjgwMDI6XHRcdHVuc2lnbmVkIGxvbmcgbnJfdG9fcmVjbGFpbSwgbnJfcmVjbGFpbWVkID0gMDtcbjgwMDM6XHRcdGludCBzd2FwcGluZXNzID0gLTE7XG44MDA0Olx0XHRjaGFyICpvbGRfYnVmLCAqc3RhcnQ7XG44MDA1Olx0XHRzdWJzdHJpbmdfdCBhcmdzW01BWF9PUFRfQVJHU107XG44MDA2Olx0XHRnZnBfdCBnZnBfbWFzayA9IEdGUF9LRVJORUw7XG44MDA3Olx0XG44MDA4Olx0XHRpZiAoIWJ1ZiB8fCAoIW1lbWNnIFx1MDAyNlx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcdTAwMjZcdTAwMjYgcGdkYXQpKVxuODAwOTpcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjgwMTA6XHRcbjgwMTE6XHRcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XG44MDEyOlx0XG44MDEzOlx0XHRvbGRfYnVmID0gYnVmO1xuODAxNDpcdFx0bnJfdG9fcmVjbGFpbSA9IG1lbXBhcnNlKGJ1ZiwgXHUwMDI2YnVmKSAvIFBBR0VfU0laRTtcbjgwMTU6XHRcdGlmIChidWYgPT0gb2xkX2J1ZilcbjgwMTY6XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG44MDE3Olx0XG44MDE4Olx0XHRidWYgPSBzdHJzdHJpcChidWYpO1xuODAxOTpcdFxuODAyMDpcdFx0d2hpbGUgKChzdGFydCA9IHN0cnNlcChcdTAwMjZidWYsIFwmIzM0OyBcJiMzNDspKSAhPSBOVUxMKSB7XG44MDIxOlx0XHRcdGlmICghc3RybGVuKHN0YXJ0KSlcbjgwMjI6XHRcdFx0XHRjb250aW51ZTtcbjgwMjM6XHRcdFx0c3dpdGNoIChtYXRjaF90b2tlbihzdGFydCwgdG9rZW5zLCBhcmdzKSkge1xuODAyNDpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XG44MDI1Olx0XHRcdFx0aWYgKG1hdGNoX2ludChcdTAwMjZhcmdzWzBdLCBcdTAwMjZzd2FwcGluZXNzKSlcbjgwMjY6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuODAyNzpcdFx0XHRcdGlmIChzd2FwcGluZXNzIFx1MDAzYyBNSU5fU1dBUFBJTkVTUyB8fFxuODAyODpcdFx0XHRcdCAgICBzd2FwcGluZXNzIFx1MDAzZSBNQVhfU1dBUFBJTkVTUylcbjgwMjk6XHRcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuODAzMDpcdFx0XHRcdGJyZWFrO1xuODAzMTpcdFx0XHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1NfTUFYOlxuODAzMjpcdFx0XHRcdHN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTtcbjgwMzM6XHRcdFx0XHRicmVhaztcbjgwMzQ6XHRcdFx0ZGVmYXVsdDpcbjgwMzU6XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjgwMzY6XHRcdFx0fVxuODAzNzpcdFx0fVxuODAzODpcdFxuODAzOTpcdFx0d2hpbGUgKG5yX3JlY2xhaW1lZCBcdTAwM2MgbnJfdG9fcmVjbGFpbSkge1xuODA0MDpcdFx0XHQvKiBXaWxsIGNvbnZlcmdlIG9uIHplcm8sIGJ1dCByZWNsYWltIGVuZm9yY2VzIGEgbWluaW11bSAqL1xuODA0MTpcdFx0XHR1bnNpZ25lZCBsb25nIGJhdGNoX3NpemUgPSAobnJfdG9fcmVjbGFpbSAtIG5yX3JlY2xhaW1lZCkgLyA0O1xuODA0MjpcdFx0XHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcbjgwNDM6XHRcbjgwNDQ6XHRcdFx0LypcbjgwNDU6XHRcdFx0ICogUmV0dXJuIC1FUkVTVEFSVFNZUyB0byBhbGxvdyB0aGUgZnJlZXplciB0byBpbnRlcnJ1cHQgdGhlXG44MDQ2Olx0XHRcdCAqIHRhc2suIFRoZSBzeXNjYWxsIHdpbGwgYmUgdHJhbnNwYXJlbnRseSByZXN0YXJ0ZWQgdXBvblxuODA0NzpcdFx0XHQgKiByZXN1bWUuIEZvciByZWFsIHNpZ25hbHMsIGl0IGVpdGhlciByZXN0YXJ0cyB0aGUgc3lzY2FsbFxuODA0ODpcdFx0XHQgKiAoaWYgU0FfUkVTVEFSVCBpcyBzZXQpIG9yIGlzIGNvbnZlcnRlZCB0byAtRUlOVFIgYnkgdGhlXG44MDQ5Olx0XHRcdCAqIHNpZ25hbCBsYXllci5cbjgwNTA6XHRcdFx0ICovXG44MDUxOlx0XHRcdGlmIChzaWduYWxfcGVuZGluZyhjdXJyZW50KSlcbjgwNTI6XHRcdFx0XHRyZXR1cm4gLUVSRVNUQVJUU1lTO1xuODA1MzpcdFxuODA1NDpcdFx0XHQvKiBjZ3JvdXBfcm1kaXIoKSB3YWl0cyBmb3IgdXMgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC4gKi9cbjgwNTU6XHRcdFx0aWYgKG1lbWNnIFx1MDAyNlx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpXG44MDU2Olx0XHRcdFx0cmV0dXJuIC1FQUdBSU47XG44MDU3Olx0XG44MDU4Olx0XHRcdC8qXG44MDU5Olx0XHRcdCAqIFRoaXMgaXMgdGhlIGZpbmFsIGF0dGVtcHQsIGRyYWluIHBlcmNwdSBscnUgY2FjaGVzIGluIHRoZVxuODA2MDpcdFx0XHQgKiBob3BlIG9mIGludHJvZHVjaW5nIG1vcmUgZXZpY3RhYmxlIHBhZ2VzLlxuODA2MTpcdFx0XHQgKi9cbjgwNjI6XHRcdFx0aWYgKCFucl9yZXRyaWVzKVxuODA2MzpcdFx0XHRcdGxydV9hZGRfZHJhaW5fYWxsKCk7XG44MDY0Olx0XG44MDY1Olx0XHRcdGlmIChtZW1jZykge1xuODA2NjpcdFx0XHRcdHVuc2lnbmVkIGludCByZWNsYWltX29wdGlvbnM7XG44MDY3Olx0XG44MDY4Olx0XHRcdFx0cmVjbGFpbV9vcHRpb25zID0gTUVNQ0dfUkVDTEFJTV9NQVlfU1dBUCB8XG44MDY5Olx0XHRcdFx0XHRcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XG44MDcwOlx0XHRcdFx0cmVjbGFpbWVkID0gdHJ5X3RvX2ZyZWVfbWVtX2Nncm91cF9wYWdlcyhtZW1jZyxcbjgwNzE6XHRcdFx0XHRcdFx0XHQgYmF0Y2hfc2l6ZSwgZ2ZwX21hc2ssXG44MDcyOlx0XHRcdFx0XHRcdFx0IHJlY2xhaW1fb3B0aW9ucyxcbjgwNzM6XHRcdFx0XHRcdFx0XHQgc3dhcHBpbmVzcyA9PSAtMSA/IE5VTEwgOiBcdTAwMjZzd2FwcGluZXNzKTtcbjgwNzQ6XHRcdFx0fSBlbHNlIHtcbjgwNzU6XHRcdFx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xuODA3NjpcdFx0XHRcdFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXG44MDc3Olx0XHRcdFx0XHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXG44MDc4Olx0XHRcdFx0XHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFx1MDAyNnN3YXBwaW5lc3MsXG44MDc5Olx0XHRcdFx0XHQucHJpb3JpdHkgPSBERUZfUFJJT1JJVFksXG44MDgwOlx0XHRcdFx0XHQubWF5X3dyaXRlcGFnZSA9IDEsXG44MDgxOlx0XHRcdFx0XHQubnJfdG9fcmVjbGFpbSA9IG1heChiYXRjaF9zaXplLCBTV0FQX0NMVVNURVJfTUFYKSxcbjgwODI6XHRcdFx0XHRcdC5tYXlfdW5tYXAgPSAxLFxuODA4MzpcdFx0XHRcdFx0Lm1heV9zd2FwID0gMSxcbjgwODQ6XHRcdFx0XHRcdC5wcm9hY3RpdmUgPSAxLFxuODA4NTpcdFx0XHRcdH07XG44MDg2Olx0XG44MDg3Olx0XHRcdFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCxcbjgwODg6XHRcdFx0XHRcdFx0XHQgIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKSlcbjgwODk6XHRcdFx0XHRcdHJldHVybiAtRUJVU1k7XG44MDkwOlx0XG44MDkxOlx0XHRcdFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFx1MDAyNnNjKTtcbjgwOTI6XHRcdFx0XHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG44MDkzOlx0XHRcdH1cbjgwOTQ6XHRcbjgwOTU6XHRcdFx0aWYgKCFyZWNsYWltZWQgXHUwMDI2XHUwMDI2ICFucl9yZXRyaWVzLS0pXG44MDk2Olx0XHRcdFx0cmV0dXJuIC1FQUdBSU47XG44MDk3Olx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3NjA3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqUmVjbGFpbWluZyBNZW1vcnk6IEEgRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgbWVtb3J5IGlzIGJlaW5nIHJlY2xhaW1lZCwgc3BlY2lmaWNhbGx5IHdpdGggYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBJdCBhcHBlYXJzIHRoYXQgd2hlbiBhIGBwZ2RhdGAgKHBhZ2UgZGF0YSBzdHJ1Y3R1cmUpIGlzIGF2YWlsYWJsZSDigJMgbGlrZSB3aGVuIHdlJiMzOTtyZSB1c2luZyB0aGUgc3lzZnMgaW50ZXJmYWNlIGByZWNsYWltX3N0b3JlYCDigJMgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGNhbGxzIGBfX25vZGVfcmVjbGFpbWAgZGlyZWN0bHkuIFRoYXQgbWFrZXMgc2Vuc2UsIGluIHByaW5jaXBsZSwgZm9yIGVmZmljaWVudCBub2RlLWxldmVsIHJlY2xhaW0uCgpCdXQgaGFuZyBvbiBhIHNlY29uZC4uLnNvbWV0aGluZyBzZWVtcyBvZmYuIEkmIzM5O20gcmVjYWxsaW5nIHRoYXQgYF9fbm9kZV9yZWNsYWltYCBkb2VzbiYjMzk7dCBzZWVtIHRvIHNldCB0aG9zZSBmbGFncyDigJMgYHNraXBfc2xhYl9yZWNsYWltYCBvciBgc2tpcF9maWxlX3JlY2xhaW1gLiBUaG9zZSBhcmUgY3JpdGljYWwgZm9yIGNvbnRyb2xsaW5nIHdoYXQgZ2V0cyByZWNsYWltZWQhIE5vdywgSSBkaXN0aW5jdGx5IHJlbWVtYmVyIHRoYXQgdGhvc2UgZmxhZ3MgYXJlIGFjdHVhbGx5IHNldCBieSBgbm9kZV9yZWNsYWltYC4gSSBuZWVkIHRvIHJldmlzaXQgdGhhdCBmdW5jdGlvbiB0byBiZSBjZXJ0YWluLiBKdXN0IHRvIGNvbmZpcm0gbXkgYXNzdW1wdGlvbnMgYW5kIGVuc3VyZSB0aGlzIGlzIHRoZSBhcHByb3ByaWF0ZSBwYXRoLiBUaGlzIGlzIGltcG9ydGFudCBmb3Igb3B0aW1hbCBwZXJmb3JtYW5jZSwgYW5kIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB3ZSBhcmUgbm90IHNraXBwaW5nIGNydWNpYWwgc3RlcHMgaW4gb3VyIHJlY2xhbWF0aW9uIHByb2Nlc3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA3OTA4LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDYwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0Ozc5MDg6XHR1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxuNzkwOTpcdHtcbjc5MTA6XHRcdHVuc2lnbmVkIGxvbmcgcmV0O1xuNzkxMTpcdFx0LyogTWluaW11bSBwYWdlcyBuZWVkZWQgaW4gb3JkZXIgdG8gc3RheSBvbiBub2RlICovXG43OTEyOlx0XHRjb25zdCB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzID0gMSBcdTAwM2NcdTAwM2Mgb3JkZXI7XG43OTEzOlx0XHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xuNzkxNDpcdFx0XHQubnJfdG9fcmVjbGFpbSA9IG1heChucl9wYWdlcywgU1dBUF9DTFVTVEVSX01BWCksXG43OTE1Olx0XHRcdC5nZnBfbWFzayA9IGN1cnJlbnRfZ2ZwX2NvbnRleHQoZ2ZwX21hc2spLFxuNzkxNjpcdFx0XHQub3JkZXIgPSBvcmRlcixcbjc5MTc6XHRcdFx0LnByaW9yaXR5ID0gTk9ERV9SRUNMQUlNX1BSSU9SSVRZLFxuNzkxODpcdFx0XHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1dSSVRFKSxcbjc5MTk6XHRcdFx0Lm1heV91bm1hcCA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFx1MDAyNiBSRUNMQUlNX1VOTUFQKSxcbjc5MjA6XHRcdFx0Lm1heV9zd2FwID0gMSxcbjc5MjE6XHRcdFx0LnJlY2xhaW1faWR4ID0gZ2ZwX3pvbmUoZ2ZwX21hc2spLFxuNzkyMjpcdFx0fTtcbjc5MjM6XHRcbjc5MjQ6XHRcdC8qXG43OTI1Olx0XHQgKiBtaW5fdW5tYXBwZWRfcGFnZXMgYW5kIG1pbl9zbGFiX3BhZ2VzIG9ubHkgZ2F0ZSBmaWxlIGFuZCBzbGFiLlxuNzkyNjpcdFx0ICogQmFpbCBvdXQgb25seSB3aGVuIGJvdGggYXJlIHVuZGVyIHRoZWlyIGxpbWl0cyBhbmQgYW5vbiBjYW5ub3Rcbjc5Mjc6XHRcdCAqIGJlIHJlY2xhaW1lZCBlaXRoZXIsIHNvIHdlIGRvIG5vdCBza2lwIHJlY2xhaW1hYmxlIGFub24uXG43OTI4Olx0XHQgKi9cbjc5Mjk6XHRcdGlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXHUwMDNjPSBwZ2RhdC1cdTAwM2VtaW5fdW5tYXBwZWRfcGFnZXMgXHUwMDI2XHUwMDI2XG43OTMwOlx0XHQgICAgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzYz1cbjc5MzE6XHRcdCAgICBwZ2RhdC1cdTAwM2VtaW5fc2xhYl9wYWdlcyBcdTAwMjZcdTAwMjZcbjc5MzI6XHRcdCAgICAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBcdTAwMjZzYykpXG43OTMzOlx0XHRcdHJldHVybiAwO1xuNzkzNDpcdFxuNzkzNTpcdFx0Lypcbjc5MzY6XHRcdCAqIERvIG5vdCBzY2FuIGlmIHRoZSBhbGxvY2F0aW9uIHNob3VsZCBub3QgYmUgZGVsYXllZC5cbjc5Mzc6XHRcdCAqL1xuNzkzODpcdFx0aWYgKCFnZnBmbGFnc19hbGxvd19ibG9ja2luZyhnZnBfbWFzaykgfHwgKGN1cnJlbnQtXHUwMDNlZmxhZ3MgXHUwMDI2IFBGX01FTUFMTE9DKSlcbjc5Mzk6XHRcdFx0cmV0dXJuIDA7XG43OTQwOlx0XG43OTQxOlx0XHQvKlxuNzk0MjpcdFx0ICogT25seSBydW4gbm9kZSByZWNsYWltIG9uIHRoZSBsb2NhbCBub2RlIG9yIG9uIG5vZGVzIHRoYXQgZG8gbm90XG43OTQzOlx0XHQgKiBoYXZlIGFzc29jaWF0ZWQgcHJvY2Vzc29ycy4gVGhpcyB3aWxsIGZhdm9yIHRoZSBsb2NhbCBwcm9jZXNzb3Jcbjc5NDQ6XHRcdCAqIG92ZXIgcmVtb3RlIHByb2Nlc3NvcnMgYW5kIHNwcmVhZCBvZmYgbm9kZSBtZW1vcnkgYWxsb2NhdGlvbnNcbjc5NDU6XHRcdCAqIGFzIHdpZGUgYXMgcG9zc2libGUuXG43OTQ2Olx0XHQgKi9cbjc5NDc6XHRcdGlmIChub2RlX3N0YXRlKHBnZGF0LVx1MDAzZW5vZGVfaWQsIE5fQ1BVKSBcdTAwMjZcdTAwMjYgcGdkYXQtXHUwMDNlbm9kZV9pZCAhPSBudW1hX25vZGVfaWQoKSlcbjc5NDg6XHRcdFx0cmV0dXJuIDA7XG43OTQ5Olx0XG43OTUwOlx0XHRpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncykpXG43OTUxOlx0XHRcdHJldHVybiAwO1xuNzk1MjpcdFxuNzk1MzpcdFx0Lypcbjc5NTQ6XHRcdCAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGVcbjc5NTU6XHRcdCAqIHNsYWIgb3IgdW5tYXBwZWQgcGFnZSBjYWNoZSBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IGl0cyBsaW1pdCwgbGVhdmVcbjc5NTY6XHRcdCAqIHRoYXQgdHlwZSBhbG9uZSBldmVuIGlmIHRoZSBvdGhlciB0eXBlIHRyaXBwZWQgdGhlIGdhdGUgYW5kIGJyb3VnaHRcbjc5NTc6XHRcdCAqIHVzIGludG8gbm9kZSByZWNsYWltLlxuNzk1ODpcdFx0ICovXG43OTU5Olx0XHRzYy5za2lwX3NsYWJfcmVjbGFpbSA9XG43OTYwOlx0XHRcdG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2M9XG43OTYxOlx0XHRcdHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzO1xuNzk2MjpcdFx0c2Muc2tpcF9maWxlX3JlY2xhaW0gPVxuNzk2MzpcdFx0XHRub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXHUwMDNjPSBwZ2RhdC1cdTAwM2VtaW5fdW5tYXBwZWRfcGFnZXM7XG43OTY0Olx0XG43OTY1Olx0XHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKTtcbjc5NjY6XHRcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbjc5Njc6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTkwMzcKCQkJCQkJCW91dHB1dDogMTAwCgkJCQkJCQl0aG91Z2h0czogNTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBDb2RlJiMzOTtzIEZ1enppbmcgUG90ZW50aWFsKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgb2JzZXJ2YXRpb24gaXMgY29ycmVjdDogYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCBhcmUgKm9ubHkqIHNldCB3aXRoaW4gdGhlIGBub2RlX3JlY2xhaW1gIGZ1bmN0aW9uLiBUaGlzIG1lYW5zIGBub2RlX3JlY2xhaW1gIGlzIHRoZSBrZXkgZW50cnkgcG9pbnQgZm9yIHRoaXMgbmV3IGxvZ2ljIHRvIGJlIGFjdGl2YXRlZC4gSSBrbm93IGBub2RlX3JlY2xhaW1gIGlzIGludm9rZWQgZnJvbSBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAgd2hlbiBgbm9kZV9yZWNsYWltX21vZGVgIGlzIGFjdGl2ZSwgd2hpY2ggaXRzZWxmIGlzIGVuYWJsZWQgYnkgc2V0dGluZyBgdm0uem9uZV9yZWNsYWltX21vZGVgIHZpYSB0aGUgc3lzY3RsIGludGVyZmFjZS4gQ3J1Y2lhbGx5LCBgQ09ORklHX05VTUFgIGlzIGVzc2VudGlhbDsgd2l0aG91dCBpdCwgYG5vZGVfcmVjbGFpbWAgaXMgZWl0aGVyIG5vdCBjb21waWxlZCBvciBpcyBhIHN0dWIuCgpUaGVyZWZvcmUsIG15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgYG5vZGVfcmVjbGFpbWAgc3ltYm9sLiBJ4oCZbSBjb25maWRlbnQgdGhhdCYjMzk7cyB0aGUgcHJpbWFyeSB0YXJnZXQgZm9yIGZ1enppbmcuIEkmIzM5O3ZlIGRvdWJsZS1jaGVja2VkIHRoYXQgYG5vZGVfcmVjbGFpbWAgaXMgaW5kZWVkIG5vdCBzdGF0aWMgYW5kIGlzIGEgdmFsaWQgZm9jdXMgc3ltYm9sLgoKTGV0JiMzOTtzIHF1aWNrbHkgY2hlY2sgZm9yIGFueSBvdGhlciBkZXBlbmRlbmNpZXMuIEkgbm90ZWQgYENPTkZJR19TWVNGU2AgaXMgcmVxdWlyZWQgZm9yIGByZWNsYWltX3N0b3JlYCwgYnV0IHNpbmNlIGBub2RlX3JlY2xhaW1gIGlzIGNhbGxlZCBmcm9tIGBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0YCwgd2hpY2ggaXMgZnVuZGFtZW50YWwgdG8gbWVtb3J5IGFsbG9jYXRpb24sIGBDT05GSUdfU1lTRlNgIGlzbuKAmXQgKnN0cmljdGx5KiBuZWVkZWQgZm9yIHRyaWdnZXJpbmcgdGhpcyBzcGVjaWZpYyBuZXcgYmVoYXZpb3VyOyBpdOKAmXMgcHJpbWFyaWx5IGRyaXZlbiBieSBgQ09ORklHX05VTUFgLiBJJiMzOTttIGdvaW5nIHRvIHJlaXRlcmF0ZSB0aGF0IGBub2RlX3JlY2xhaW1gIGlzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24gZGlyZWN0bHkgbW9kaWZpZWQgb3IgZGlyZWN0bHkgY2FsbGluZyB0aGUgbW9kaWZpZWQgc3RhdGljIGZ1bmN0aW9ucyB3aXRoIHRoZSBuZXcgZmxhZ3MuCgpOb3csIGEgY3J1Y2lhbCBjb25zaWRlcmF0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIFFFTVUgY2FuIGVtdWxhdGUgTlVNQSBub2RlcywgYW5kIHN5emthbGxlciBjYW4gcHJvZ3JhbW1hdGljYWxseSBzZXQgYHZtLnpvbmVfcmVjbGFpbV9tb2RlYCB0byB0cmlnZ2VyIHRoZSBwYWdlIGFsbG9jYXRpb24uIFRoaXMgY29uZmlybXMgdGhhdCB0aGlzIGxvZ2ljICppcyogcmVhY2hhYmxlIGFuZCBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuCgpUbyBzdW1tYXJpemUgbXkgZmluZGluZ3M6CgoqICAgKipXb3J0aEZ1enppbmc6KiogVHJ1ZQoqICAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIG1vZGlmaWVzIGNvcmUgbWVtb3J5IHJlY2xhaW0sIHNwZWNpZmljYWxseSBpbnRyb2R1Y2luZyBsb2dpYyB0byBza2lwIHNsYWIgb3IgZmlsZSByZWNsYWltIGR1cmluZyBub2RlIHJlY2xhaW0gd2hlbiBhc3NvY2lhdGVkIGxpbWl0cyBhcmVuJiMzOTt0IGV4Y2VlZGVkLiBUaGlzIGlzIGFjY2Vzc2libGUgdmlhIHBhZ2UgYWxsb2NhdGlvbiB3aGVuIE5VTUEgbm9kZSByZWNsYWltIGlzIGVuYWJsZWQgKGUuZy4sIHRocm91Z2ggYHZtLnpvbmVfcmVjbGFpbV9tb2RlYCkuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgWyYjMzQ7bm9kZV9yZWNsYWltJiMzNDtdYAoqICAgKipFbmFibGVDb25maWdzOioqIGBbJiMzNDtOVU1BJiMzNDtdYAoKSnVzdCBhIHF1aWNrIGNoZWNrIHRvIGNvbmZpcm0gYG5vZGVfcmVjbGFpbWAgaXMgbm90IHN0YXRpYyBvciBpbmxpbmUgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQmIzM5O3MgYHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpYCwgc28gaXQmIzM5O3MgZ2xvYmFsLiBFeGNlbGxlbnQuCgpGaW5hbGx5LCB3aGlsZSBgX19ub2RlX3JlY2xhaW1gIGlzIGFsc28gcGFydCBvZiB0aGlzIGNvZGUsIGl0JiMzOTtzIHN0YXRpYyBhbmQgcG90ZW50aWFsbHkgaW5saW5lZCwgbWFraW5nIGBub2RlX3JlY2xhaW1gIHRoZSBiZXR0ZXIsIG1vcmUgYWNjZXNzaWJsZSBmb2N1cyBzeW1ib2wuCgpJJiMzOTttIGNvbmZpZGVudCBJJiMzOTt2ZSBpZGVudGlmaWVkIHRoZSBrZXkgdGFyZ2V0cyBhbmQgY29uZmlndXJhdGlvbnMgZm9yIGZ1enppbmcgdGhpcyBuZXcgZnVuY3Rpb25hbGl0eS4gYENPTkZJR19OVU1BYCBpcyB0aGUgY3JpdGljYWwgcmVxdWlyZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtOVU1BJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bm9kZV9yZWNsYWltJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSByZWNsYWltIGxvZ2ljICh2bXNjYW4pIHRvIHNraXAgc2xhYiBvciBmaWxlIHJlY2xhaW0gd2hlbiB0aGVpciByZXNwZWN0aXZlIGxpbWl0cyBhcmUgbm90IGV4Y2VlZGVkIGR1cmluZyBub2RlIHJlY2xhaW0uIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBwYWdlIGFsbG9jYXRpb24gd2hlbiBOVU1BIG5vZGUgcmVjbGFpbSBpcyBlbmFibGVkIChlLmcuLCB2aWEgdm0uem9uZV9yZWNsYWltX21vZGUgc3lzY3RsKS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TlVNQSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O25vZGVfcmVjbGFpbSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyAodm1zY2FuKSB0byBza2lwIHNsYWIgb3IgZmlsZSByZWNsYWltIHdoZW4gdGhlaXIgcmVzcGVjdGl2ZSBsaW1pdHMgYXJlIG5vdCBleGNlZWRlZCBkdXJpbmcgbm9kZSByZWNsYWltLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBhbGxvY2F0aW9uIHdoZW4gTlVNQSBub2RlIHJlY2xhaW0gaXMgZW5hYmxlZCAoZS5nLiwgdmlhIHZtLnpvbmVfcmVjbGFpbV9tb2RlIHN5c2N0bCkuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA4OjIzPC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDg6MjM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgdHdvIG5ldyBiaXRmaWVsZHMgKGBza2lwX3NsYWJfcmVjbGFpbWAgYW5kIGBza2lwX2ZpbGVfcmVjbGFpbWApIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCB0byBiZXR0ZXIgY29udHJvbCBzbGFiIGFuZCBmaWxlIHBhZ2UgcmVjbGFpbS4gSW5zdGFuY2VzIG9mIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBhbnkgdW5zcGVjaWZpZWQgZmllbGRzIChpbmNsdWRpbmcgdGhlIG5ld2x5IGFkZGVkIGJpdGZpZWxkcykgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgcGFyc2luZyBvZiBleHRlcm5hbCBkYXRhIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgY29ycnVwdGlvbnMgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgZGE1MmUyNzY1MTlkMTNjMTE0ZWY5ODA4YWQ5OTU4ZjJiM2JkODE2YgpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDIxIDA4OjIxOjU1IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uYwppbmRleCBjMTQwNGE1OTUyM2Q2Li5kMTM4Mzc3OTU3OWVhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMTE0LDYgJiM0MzsxMTQsMTggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7CiAJLyogem9uZV9yZWNsYWltX21vZGUsIGJvb3N0IHJlY2xhaW0sIGNncm91cCByZXN0cmljdGlvbnMgKi8KIAl1bnNpZ25lZCBpbnQgbWF5X3N3YXA6MTsKIAomIzQzOwkvKgomIzQzOwkgKiBXaGVuIHNldCwgdGhlIHNsYWIgc2hyaW5rZXJzIGFyZSBub3QgaW52b2tlZCBiZWNhdXNlIHJlY2xhaW1hYmxlCiYjNDM7CSAqIHNsYWIgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fc2xhYl9wYWdlcy4KJiM0MzsJICovCiYjNDM7CXVuc2lnbmVkIGludCBza2lwX3NsYWJfcmVjbGFpbToxOwomIzQzOwomIzQzOwkvKgomIzQzOwkgKiBXaGVuIHNldCwgZmlsZSBwYWdlcyBhcmUgbm90IHJlY2xhaW1lZCBiZWNhdXNlIHVubWFwcGVkIHBhZ2UgY2FjaGUKJiM0MzsJICogaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fdW5tYXBwZWRfcGFnZXMuCiYjNDM7CSAqLwomIzQzOwl1bnNpZ25lZCBpbnQgc2tpcF9maWxlX3JlY2xhaW06MTsKJiM0MzsKIAkvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovCiAJdW5zaWduZWQgaW50IG5vX2NhY2hlX3RyaW1fbW9kZToxOwogCkBAIC0yNTc1LDYgJiM0MzsyNTg3LDIxIEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsCiAJCWdvdG8gb3V0OwogCX0KIAomIzQzOwkvKgomIzQzOwkgKiBub2RlX3JlY2xhaW0gcHJvdGVjdHMgdW5tYXBwZWQgcGFnZSBjYWNoZSBkb3duIHRvCiYjNDM7CSAqIG1pbl91bm1hcHBlZF9wYWdlczogc2tpcCBmaWxlIHBhZ2VzIGFuZCByZWNsYWltIGFub24gb25seS4gIEFzIHdpdGgKJiM0MzsJICogdGhlIGFub24tb25seSBjYXNlIGFib3ZlLCBpZiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgdGhlcmUgaXMKJiM0MzsJICogbm90aGluZyB0byBkbyB3aXRob3V0IGJyZWFjaGluZyB0aGUgZmxvb3IsIHNvIHNjYW4gbm90aGluZy4KJiM0MzsJICovCiYjNDM7CWlmIChzYy0mZ3Q7c2tpcF9maWxlX3JlY2xhaW0pIHsKJiM0MzsJCWlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtJmd0O25vZGVfaWQsIHNjKSkgewomIzQzOwkJCW1lbXNldChuciwgMCwgc2l6ZW9mKCpucikgKiBOUl9MUlVfTElTVFMpOwomIzQzOwkJCXJldHVybjsKJiM0MzsJCX0KJiM0MzsJCXNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjsKJiM0MzsJCWdvdG8gb3V0OwomIzQzOwl9CiYjNDM7CiAJLyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqLwogCWlmICghc2MtJmd0O21heV9zd2FwIHx8ICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC0mZ3Q7bm9kZV9pZCwgc2MpKSB7CiAJCXNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTsKQEAgLTQ3MzYsNiAmIzQzOzQ3NjMsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiAmZ3Q7IE1BWF9MUlVfQkFUQ0gpOwogCVZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7CiAKJiM0MzsJLyoKJiM0MzsJICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0byBtaW5fdW5tYXBwZWRfcGFnZXMsCiYjNDM7CSAqIHNvIGxlYXZlIHRoZSBmaWxlIHR5cGUgYWxvbmU7IGlzb2xhdGVfZm9saW9zKCkgdGhlbiBmYWxscyBiYWNrIHRvCiYjNDM7CSAqIGFub24uCiYjNDM7CSAqLwomIzQzOwlpZiAoc2MtJmd0O3NraXBfZmlsZV9yZWNsYWltICZhbXA7JmFtcDsgdHlwZSA9PSBMUlVfR0VOX0ZJTEUpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsKIAlpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUykKIAkJcmV0dXJuIDA7CiAKQEAgLTUxMTEsNyAmIzQzOzUxNDYsOCBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCW5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7CiAKLQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywgc2MtJmd0O3ByaW9yaXR5KTsKJiM0MzsJaWYgKCFzYy0mZ3Q7c2tpcF9zbGFiX3JlY2xhaW0pCiYjNDM7CQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywgc2MtJmd0O3ByaW9yaXR5KTsKIAogCWlmICghc2MtJmd0O3Byb2FjdGl2ZSkKIAkJdm1wcmVzc3VyZShzYy0mZ3Q7Z2ZwX21hc2ssIHNjLSZndDtvcmRlciwgbWVtY2csIGZhbHNlLApAQCAtNjIxNCw4ICYjNDM7NjI1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYykKIAogCQlzaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpOwogCi0JCXNocmlua19zbGFiKHNjLSZndDtnZnBfbWFzaywgcGdkYXQtJmd0O25vZGVfaWQsIG1lbWNnLAotCQkJICAgIHNjLSZndDtwcmlvcml0eSk7CiYjNDM7CQlpZiAoIXNjLSZndDtza2lwX3NsYWJfcmVjbGFpbSkKJiM0MzsJCQlzaHJpbmtfc2xhYihzYy0mZ3Q7Z2ZwX21hc2ssIHBnZGF0LSZndDtub2RlX2lkLCBtZW1jZywKJiM0MzsJCQkJICAgIHNjLSZndDtwcmlvcml0eSk7CiAKIAkJLyogUmVjb3JkIHRoZSBncm91cCYjMzk7cyByZWNsYWltIGVmZmljaWVuY3kgKi8KIAkJaWYgKCFzYy0mZ3Q7cHJvYWN0aXZlKQpAQCAtNzg0NiwxNiAmIzQzOzc4ODMsMTYgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwKIAlub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7CiAJc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCAmYW1wO3NjLSZndDtyZWNsYWltX3N0YXRlKTsKIAotCWlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgJmd0OyBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzIHx8Ci0JICAgIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSAmZ3Q7IHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcykgewotCQkvKgotCQkgKiBGcmVlIG1lbW9yeSBieSBjYWxsaW5nIHNocmluayBub2RlIHdpdGggaW5jcmVhc2luZwotCQkgKiBwcmlvcml0aWVzIHVudGlsIHdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmcmVlZC4KLQkJICovCi0JCWRvIHsKLQkJCXNocmlua19ub2RlKHBnZGF0LCBzYyk7Ci0JCX0gd2hpbGUgKHNjLSZndDtucl9yZWNsYWltZWQgJmx0OyBucl9wYWdlcyAmYW1wOyZhbXA7IC0tc2MtJmd0O3ByaW9yaXR5ICZndDs9IDApOwotCX0KJiM0MzsJLyoKJiM0MzsJICogRnJlZSBtZW1vcnkgYnkgY2FsbGluZyBzaHJpbmsgbm9kZSB3aXRoIGluY3JlYXNpbmcKJiM0MzsJICogcHJpb3JpdGllcyB1bnRpbCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZnJlZWQuCiYjNDM7CSAqCiYjNDM7CSAqIFdoYXQgdG8gcmVjbGFpbSBpcyBnYXRlZCBwZXIgdHlwZSBieSBzYy0mZ3Q7c2tpcF9zbGFiX3JlY2xhaW0gYW5kCiYjNDM7CSAqIHNjLSZndDtza2lwX2ZpbGVfcmVjbGFpbS4KJiM0MzsJICovCiYjNDM7CWRvIHsKJiM0MzsJCXNocmlua19ub2RlKHBnZGF0LCBzYyk7CiYjNDM7CX0gd2hpbGUgKHNjLSZndDtucl9yZWNsYWltZWQgJmx0OyBucl9wYWdlcyAmYW1wOyZhbXA7IC0tc2MtJmd0O3ByaW9yaXR5ICZndDs9IDApOwogCiAJc2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCBOVUxMKTsKIAltZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShub3JlY2xhaW1fZmxhZyk7CkBAIC03ODg1LDE4ICYjNDM7NzkyMiwxNCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaQogCX07CiAKIAkvKgotCSAqIE5vZGUgcmVjbGFpbSByZWNsYWltcyB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBhbmQKLQkgKiBzbGFiIHBhZ2VzIGlmIHdlIGFyZSBvdmVyIHRoZSBkZWZpbmVkIGxpbWl0cy4KLQkgKgotCSAqIEEgc21hbGwgcG9ydGlvbiBvZiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBpcyBuZWVkZWQgZm9yCi0JICogZmlsZSBJL08gb3RoZXJ3aXNlIHBhZ2VzIHJlYWQgYnkgZmlsZSBJL08gd2lsbCBiZSBpbW1lZGlhdGVseQotCSAqIHRocm93biBvdXQgaWYgdGhlIG5vZGUgaXMgb3ZlcmFsbG9jYXRlZC4gU28gd2UgZG8gbm90IHJlY2xhaW0KLQkgKiBpZiBsZXNzIHRoYW4gYSBzcGVjaWZpZWQgcGVyY2VudGFnZSBvZiB0aGUgbm9kZSBpcyB1c2VkIGJ5Ci0JICogdW5tYXBwZWQgZmlsZSBiYWNrZWQgcGFnZXMuCiYjNDM7CSAqIG1pbl91bm1hcHBlZF9wYWdlcyBhbmQgbWluX3NsYWJfcGFnZXMgb25seSBnYXRlIGZpbGUgYW5kIHNsYWIuCiYjNDM7CSAqIEJhaWwgb3V0IG9ubHkgd2hlbiBib3RoIGFyZSB1bmRlciB0aGVpciBsaW1pdHMgYW5kIGFub24gY2Fubm90CiYjNDM7CSAqIGJlIHJlY2xhaW1lZCBlaXRoZXIsIHNvIHdlIGRvIG5vdCBza2lwIHJlY2xhaW1hYmxlIGFub24uCiAJICovCiAJaWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSAmbHQ7PSBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzICZhbXA7JmFtcDsKIAkgICAgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZsdDs9Ci0JICAgIHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcykKJiM0MzsJICAgIHBnZGF0LSZndDttaW5fc2xhYl9wYWdlcyAmYW1wOyZhbXA7CiYjNDM7CSAgICAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhOVUxMLCBwZ2RhdC0mZ3Q7bm9kZV9pZCwgJmFtcDtzYykpCiAJCXJldHVybiAwOwogCiAJLyoKQEAgLTc5MTcsNiAmIzQzOzc5NTAsMTggQEAgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGkKIAlpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCAmYW1wO3BnZGF0LSZndDtmbGFncykpCiAJCXJldHVybiAwOwogCiYjNDM7CS8qCiYjNDM7CSAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGUKJiM0MzsJICogc2xhYiBvciB1bm1hcHBlZCBwYWdlIGNhY2hlIGlzIGFscmVhZHkgYXQgb3IgYmVsb3cgaXRzIGxpbWl0LCBsZWF2ZQomIzQzOwkgKiB0aGF0IHR5cGUgYWxvbmUgZXZlbiBpZiB0aGUgb3RoZXIgdHlwZSB0cmlwcGVkIHRoZSBnYXRlIGFuZCBicm91Z2h0CiYjNDM7CSAqIHVzIGludG8gbm9kZSByZWNsYWltLgomIzQzOwkgKi8KJiM0MzsJc2Muc2tpcF9zbGFiX3JlY2xhaW0gPQomIzQzOwkJbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpICZsdDs9CiYjNDM7CQlwZ2RhdC0mZ3Q7bWluX3NsYWJfcGFnZXM7CiYjNDM7CXNjLnNraXBfZmlsZV9yZWNsYWltID0KJiM0MzsJCW5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSAmbHQ7PSBwZ2RhdC0mZ3Q7bWluX3VubWFwcGVkX3BhZ2VzOwomIzQzOwogCXJldCA9IF9fbm9kZV9yZWNsYWltKHBnZGF0LCBucl9wYWdlcywgJmFtcDtzYyk7CiAJY2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgJmFtcDtwZ2RhdC0mZ3Q7ZmxhZ3MpOwogCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODk5CgkJCQkJCQlvdXRwdXQ6IDIxOQoJCQkJCQkJdGhvdWdodHM6IDc1MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBOZWNlc3NpdHkqKgoKT2theSwgbGV0IG1lIHRoaW5rIHRoaXMgdGhyb3VnaC4gVGhpcyBwYXRjaCBpcyB0b3VjaGluZyBgbW0vdm1zY2FuLmNgLCBhbmQgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIHR3byBiaXRmaWVsZHMsIGBza2lwX3NsYWJfcmVjbGFpbWAgYW5kIGBza2lwX2ZpbGVfcmVjbGFpbWAsIGludG8gdGhlIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYC4gUmlnaHQsIHNvIGl0JiMzOTtzIGFsbCBhYm91dCBtZW1vcnkgcmVjbGFpbSDigJMgcGFnZSBjYWNoZSwgc2xhYiwgYW5vbiBwYWdlcy4uLiBub3RoaW5nICpkaXJlY3RseSogZXhwb3NlZCB0byB1c2Vyc3BhY2UuCgpUaGUgd2F5IGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBpcyBoYW5kbGVkIGlzIGtleSBoZXJlLiBJdCYjMzk7cyBhbG1vc3QgYWx3YXlzIHN0YWNrLWFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQgd2l0aCB0aG9zZSBuaWNlIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCBsaWtlIGluIGBub2RlX3JlY2xhaW1gLiBUaGF0JiMzOTtzIGdvb2QsIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGF1dG9tYXRpY2FsbHkgemVyby1pbml0aWFsaXplcyB0aGUgcmVzdCBvZiB0aGUgc3RydWN0LCBpbmNsdWRpbmcgdGhlc2UgbmV3IGJpdGZpZWxkcy4gU28gdGhlcmUmIzM5O3Mgbm8gd2F5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtpbmcgYW55d2hlcmUuIEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UuIExldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgYmFsYW5jZV9wZ2RhdGAuLi4gYWxsIHRoZSBvdGhlciBwbGFjZXMgSSBjYW4gdGhpbmsgb2YgYWxzbyBpbml0aWFsaXplIGBzY2FuX2NvbnRyb2xgIHRoYXQgd2F5LiBUaGUgbmV3IGZpZWxkcyBhcmUgYml0ZmllbGRzLCBhbmQgdGh1cyB3aWxsIGJlIHplcm9lZC4gTm8gY29uY2VybnMgdGhlcmUuCgpUaGUgY2hhbmdlcyBkb27igJl0IGludm9sdmUgYW55dGhpbmcgdGhhdCBjcm9zc2VzIHRoZSB1c2VyL2tlcm5lbCBib3VuZGFyeS4gTm8gbmV0d29yayBwYWNrZXRzLCBubyBmdW5reSBkYXRhIHBhcnNpbmcsIG5vIGNoYW5jZSBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBtYWtpbmcgaXRzIHdheSBvdXQuIEl04oCZcyBhbGwgaW50ZXJuYWwgcmVjbGFpbSBwb2xpY3kuIE15IGd1dCBzYXlzIGl0IHdpbGwgYmUgb2theSBhbmQgSSBzaG91bGQgZm9sbG93IHRocm91Z2ggd2l0aCB0aGlzIGRlY2lzaW9uLgoKU28gaGVyZSYjMzk7cyB0aGUgc3VtbWFyeSBvZiBteSByZWFzb25pbmc6IFRoaXMgcGF0Y2ggYWRkcyBiaXRmaWVsZHMgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGluIG1lbW9yeSByZWNsYWltLiBgc3RydWN0IHNjYW5fY29udHJvbGAgaW5zdGFuY2VzIGFyZSBpbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGVuc3VyaW5nIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkLiBUaGVyZSYjMzk7cyBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2Ugb3IgYW55IGNvbXBsaWNhdGVkIGFsbG9jYXRpb25zLiBTdGFuZGFyZCBLQVNBTiBhbmQgZGVidWdnaW5nIHRvb2xzIHdpbGwgYmUgZW5vdWdoIHRvIGNhdGNoIGFueSBidWdzLCBtb3N0bHkgbG9naWMgZXJyb3JzIG9yIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMuIFRoZXJlZm9yZSwgbm8gS01TQU4gaXMgbmVlZGVkIGZvciB0aGlzIHBhdGNoLiBJIHRoaW5rIHRoaXMgd2lsbCBzdWZmaWNlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwODoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyB0d28gbmV3IGJpdGZpZWxkcyAoYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCkgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIGJldHRlciBjb250cm9sIHNsYWIgYW5kIGZpbGUgcGFnZSByZWNsYWltLiBJbnN0YW5jZXMgb2YgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGFueSB1bnNwZWNpZmllZCBmaWVsZHMgKGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgYml0ZmllbGRzKSBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBwYXJzaW5nIG9mIGV4dGVybmFsIGRhdGEgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIG1lbW9yeSByZWNsYWltIGxvZ2ljIGluIGBtbS92bXNjYW4uY2AgYnkgaW50cm9kdWNpbmcgdHdvIG5ldyBiaXRmaWVsZHMgKGBza2lwX3NsYWJfcmVjbGFpbWAgYW5kIGBza2lwX2ZpbGVfcmVjbGFpbWApIHRvIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCB0byBiZXR0ZXIgY29udHJvbCBzbGFiIGFuZCBmaWxlIHBhZ2UgcmVjbGFpbS4gSW5zdGFuY2VzIG9mIGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBhcmUgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgaW5pdGlhbGl6ZWQgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIHdoaWNoIGd1YXJhbnRlZXMgdGhhdCBhbnkgdW5zcGVjaWZpZWQgZmllbGRzIChpbmNsdWRpbmcgdGhlIG5ld2x5IGFkZGVkIGJpdGZpZWxkcykgYXJlIHplcm8taW5pdGlhbGl6ZWQgYnkgdGhlIGNvbXBpbGVyLiBUaGUgY2hhbmdlcyBkbyBub3QgaW52b2x2ZSBhbnkgZGF0YSBzdHJ1Y3R1cmVzIGJlaW5nIGNvcGllZCB0byB1c2VyIHNwYWNlLCBub3IgZG8gdGhleSBpbnRyb2R1Y2UgY29tcGxleCBtZW1vcnkgYWxsb2NhdGlvbnMgb3IgcGFyc2luZyBvZiBleHRlcm5hbCBkYXRhIHdoZXJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGNvdWxkIGJlIGV4cG9zZWQgb3IgbGVha2VkLiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoIHdvdWxkIGJlIGxvZ2ljIGVycm9ycyBvciBtZW1vcnkgY29ycnVwdGlvbnMgKGUuZy4sIG91dC1vZi1ib3VuZHMgYWNjZXNzZXMgb3IgdXNlLWFmdGVyLWZyZWUpLCB3aGljaCBhcmUgYWRlcXVhdGVseSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIEtBU0FOIGFuZCBvdGhlciBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjE6NTcuMTc5MDA0MjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDE4MzA4MTc3NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyB0d28gbmV3IGJpdGZpZWxkcyAoYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCkgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIGJldHRlciBjb250cm9sIHNsYWIgYW5kIGZpbGUgcGFnZSByZWNsYWltLiBJbnN0YW5jZXMgb2YgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGFueSB1bnNwZWNpZmllZCBmaWVsZHMgKGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgYml0ZmllbGRzKSBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBwYXJzaW5nIG9mIGV4dGVybmFsIGRhdGEgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2UsXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIG1lbW9yeSByZWNsYWltIGxvZ2ljICh2bXNjYW4pIHRvIHNraXAgc2xhYiBvciBmaWxlIHJlY2xhaW0gd2hlbiB0aGVpciByZXNwZWN0aXZlIGxpbWl0cyBhcmUgbm90IGV4Y2VlZGVkIGR1cmluZyBub2RlIHJlY2xhaW0uIFRoaXMgaXMgcmVhY2hhYmxlIHZpYSBwYWdlIGFsbG9jYXRpb24gd2hlbiBOVU1BIG5vZGUgcmVjbGFpbSBpcyBlbmFibGVkIChlLmcuLCB2aWEgdm0uem9uZV9yZWNsYWltX21vZGUgc3lzY3RsKS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjE6NTcuMTc5MDEwMzFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyMzU3ODA2MzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBkYTUyZTI3NjUxOWQxM2MxMTRlZjk4MDhhZDk5NThmMmIzYmQ4MTZiXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBGcmkgQXVnIDIxIDA4OjIxOjU1IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcXG5pbmRleCBjMTQwNGE1OTUyM2Q2Li5kMTM4Mzc3OTU3OWVhIDEwMDY0NFxcbi0tLSBhL21tL3Ztc2Nhbi5jXFxuKysrIGIvbW0vdm1zY2FuLmNcXG5AQCAtMTE0LDYgKzExNCwxOCBAQCBzdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4gXFx0Lyogem9uZV9yZWNsYWltX21vZGUsIGJvb3N0IHJlY2xhaW0sIGNncm91cCByZXN0cmljdGlvbnMgKi9cXG4gXFx0dW5zaWduZWQgaW50IG1heV9zd2FwOjE7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBXaGVuIHNldCwgdGhlIHNsYWIgc2hyaW5rZXJzIGFyZSBub3QgaW52b2tlZCBiZWNhdXNlIHJlY2xhaW1hYmxlXFxuK1xcdCAqIHNsYWIgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fc2xhYl9wYWdlcy5cXG4rXFx0ICovXFxuK1xcdHVuc2lnbmVkIGludCBza2lwX3NsYWJfcmVjbGFpbToxO1xcbitcXG4rXFx0LypcXG4rXFx0ICogV2hlbiBzZXQsIGZpbGUgcGFnZXMgYXJlIG5vdCByZWNsYWltZWQgYmVjYXVzZSB1bm1hcHBlZCBwYWdlIGNhY2hlXFxuK1xcdCAqIGlzIGFscmVhZHkgYXQgb3IgYmVsb3cgbWluX3VubWFwcGVkX3BhZ2VzLlxcbitcXHQgKi9cXG4rXFx0dW5zaWduZWQgaW50IHNraXBfZmlsZV9yZWNsYWltOjE7XFxuK1xcbiBcXHQvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovXFxuIFxcdHVuc2lnbmVkIGludCBub19jYWNoZV90cmltX21vZGU6MTtcXG4gXFxuQEAgLTI1NzUsNiArMjU4NywyMSBAQCBzdGF0aWMgdm9pZCBnZXRfc2Nhbl9jb3VudChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjLFxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFx0fVxcbiBcXG4rXFx0LypcXG4rXFx0ICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0b1xcbitcXHQgKiBtaW5fdW5tYXBwZWRfcGFnZXM6IHNraXAgZmlsZSBwYWdlcyBhbmQgcmVjbGFpbSBhbm9uIG9ubHkuICBBcyB3aXRoXFxuK1xcdCAqIHRoZSBhbm9uLW9ubHkgY2FzZSBhYm92ZSwgaWYgYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIHRoZXJlIGlzXFxuK1xcdCAqIG5vdGhpbmcgdG8gZG8gd2l0aG91dCBicmVhY2hpbmcgdGhlIGZsb29yLCBzbyBzY2FuIG5vdGhpbmcuXFxuK1xcdCAqL1xcbitcXHRpZiAoc2MtXFx1MDAzZXNraXBfZmlsZV9yZWNsYWltKSB7XFxuK1xcdFxcdGlmICghY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjKSkge1xcbitcXHRcXHRcXHRtZW1zZXQobnIsIDAsIHNpemVvZigqbnIpICogTlJfTFJVX0xJU1RTKTtcXG4rXFx0XFx0XFx0cmV0dXJuO1xcbitcXHRcXHR9XFxuK1xcdFxcdHNjYW5fYmFsYW5jZSA9IFNDQU5fQU5PTjtcXG4rXFx0XFx0Z290byBvdXQ7XFxuK1xcdH1cXG4rXFxuIFxcdC8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi9cXG4gXFx0aWYgKCFzYy1cXHUwMDNlbWF5X3N3YXAgfHwgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBzYykpIHtcXG4gXFx0XFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9GSUxFO1xcbkBAIC00NzM2LDYgKzQ3NjMsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKG5yX3RvX3NjYW4gXFx1MDAzZSBNQVhfTFJVX0JBVENIKTtcXG4gXFx0Vk1fV0FSTl9PTl9PTkNFKCFsaXN0X2VtcHR5KGxpc3QpKTtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG8gbWluX3VubWFwcGVkX3BhZ2VzLFxcbitcXHQgKiBzbyBsZWF2ZSB0aGUgZmlsZSB0eXBlIGFsb25lOyBpc29sYXRlX2ZvbGlvcygpIHRoZW4gZmFsbHMgYmFjayB0b1xcbitcXHQgKiBhbm9uLlxcbitcXHQgKi9cXG4rXFx0aWYgKHNjLVxcdTAwM2Vza2lwX2ZpbGVfcmVjbGFpbSBcXHUwMDI2XFx1MDAyNiB0eXBlID09IExSVV9HRU5fRklMRSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcbiBcXHRpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbkBAIC01MTExLDcgKzUxNDYsOCBAQCBzdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFxuIFxcdG5lZWRfcm90YXRlID0gdHJ5X3RvX3Nocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxuIFxcbi1cXHRzaHJpbmtfc2xhYihzYy1cXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBtZW1jZywgc2MtXFx1MDAzZXByaW9yaXR5KTtcXG4rXFx0aWYgKCFzYy1cXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0pXFxuK1xcdFxcdHNocmlua19zbGFiKHNjLVxcdTAwM2VnZnBfbWFzaywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIG1lbWNnLCBzYy1cXHUwMDNlcHJpb3JpdHkpO1xcbiBcXG4gXFx0aWYgKCFzYy1cXHUwMDNlcHJvYWN0aXZlKVxcbiBcXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBtZW1jZywgZmFsc2UsXFxuQEAgLTYyMTQsOCArNjI1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4gXFxuIFxcdFxcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XFxuIFxcbi1cXHRcXHRzaHJpbmtfc2xhYihzYy1cXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBtZW1jZyxcXG4tXFx0XFx0XFx0ICAgIHNjLVxcdTAwM2Vwcmlvcml0eSk7XFxuK1xcdFxcdGlmICghc2MtXFx1MDAzZXNraXBfc2xhYl9yZWNsYWltKVxcbitcXHRcXHRcXHRzaHJpbmtfc2xhYihzYy1cXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBtZW1jZyxcXG4rXFx0XFx0XFx0XFx0ICAgIHNjLVxcdTAwM2Vwcmlvcml0eSk7XFxuIFxcbiBcXHRcXHQvKiBSZWNvcmQgdGhlIGdyb3VwJ3MgcmVjbGFpbSBlZmZpY2llbmN5ICovXFxuIFxcdFxcdGlmICghc2MtXFx1MDAzZXByb2FjdGl2ZSlcXG5AQCAtNzg0NiwxNiArNzg4MywxNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbiBcXHRub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XFxuIFxcdHNldF90YXNrX3JlY2xhaW1fc3RhdGUocCwgXFx1MDAyNnNjLVxcdTAwM2VyZWNsYWltX3N0YXRlKTtcXG4gXFxuLVxcdGlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXFx1MDAzZSBwZ2RhdC1cXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzIHx8XFxuLVxcdCAgICBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZSBwZ2RhdC1cXHUwMDNlbWluX3NsYWJfcGFnZXMpIHtcXG4tXFx0XFx0LypcXG4tXFx0XFx0ICogRnJlZSBtZW1vcnkgYnkgY2FsbGluZyBzaHJpbmsgbm9kZSB3aXRoIGluY3JlYXNpbmdcXG4tXFx0XFx0ICogcHJpb3JpdGllcyB1bnRpbCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZnJlZWQuXFxuLVxcdFxcdCAqL1xcbi1cXHRcXHRkbyB7XFxuLVxcdFxcdFxcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XFxuLVxcdFxcdH0gd2hpbGUgKHNjLVxcdTAwM2Vucl9yZWNsYWltZWQgXFx1MDAzYyBucl9wYWdlcyBcXHUwMDI2XFx1MDAyNiAtLXNjLVxcdTAwM2Vwcmlvcml0eSBcXHUwMDNlPSAwKTtcXG4tXFx0fVxcbitcXHQvKlxcbitcXHQgKiBGcmVlIG1lbW9yeSBieSBjYWxsaW5nIHNocmluayBub2RlIHdpdGggaW5jcmVhc2luZ1xcbitcXHQgKiBwcmlvcml0aWVzIHVudGlsIHdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmcmVlZC5cXG4rXFx0ICpcXG4rXFx0ICogV2hhdCB0byByZWNsYWltIGlzIGdhdGVkIHBlciB0eXBlIGJ5IHNjLVxcdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSBhbmRcXG4rXFx0ICogc2MtXFx1MDAzZXNraXBfZmlsZV9yZWNsYWltLlxcbitcXHQgKi9cXG4rXFx0ZG8ge1xcbitcXHRcXHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xcbitcXHR9IHdoaWxlIChzYy1cXHUwMDNlbnJfcmVjbGFpbWVkIFxcdTAwM2MgbnJfcGFnZXMgXFx1MDAyNlxcdTAwMjYgLS1zYy1cXHUwMDNlcHJpb3JpdHkgXFx1MDAzZT0gMCk7XFxuIFxcbiBcXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKHAsIE5VTEwpO1xcbiBcXHRtZW1hbGxvY19ub3JlY2xhaW1fcmVzdG9yZShub3JlY2xhaW1fZmxhZyk7XFxuQEAgLTc4ODUsMTggKzc5MjIsMTQgQEAgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGlcXG4gXFx0fTtcXG4gXFxuIFxcdC8qXFxuLVxcdCAqIE5vZGUgcmVjbGFpbSByZWNsYWltcyB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBhbmRcXG4tXFx0ICogc2xhYiBwYWdlcyBpZiB3ZSBhcmUgb3ZlciB0aGUgZGVmaW5lZCBsaW1pdHMuXFxuLVxcdCAqXFxuLVxcdCAqIEEgc21hbGwgcG9ydGlvbiBvZiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBpcyBuZWVkZWQgZm9yXFxuLVxcdCAqIGZpbGUgSS9PIG90aGVyd2lzZSBwYWdlcyByZWFkIGJ5IGZpbGUgSS9PIHdpbGwgYmUgaW1tZWRpYXRlbHlcXG4tXFx0ICogdGhyb3duIG91dCBpZiB0aGUgbm9kZSBpcyBvdmVyYWxsb2NhdGVkLiBTbyB3ZSBkbyBub3QgcmVjbGFpbVxcbi1cXHQgKiBpZiBsZXNzIHRoYW4gYSBzcGVjaWZpZWQgcGVyY2VudGFnZSBvZiB0aGUgbm9kZSBpcyB1c2VkIGJ5XFxuLVxcdCAqIHVubWFwcGVkIGZpbGUgYmFja2VkIHBhZ2VzLlxcbitcXHQgKiBtaW5fdW5tYXBwZWRfcGFnZXMgYW5kIG1pbl9zbGFiX3BhZ2VzIG9ubHkgZ2F0ZSBmaWxlIGFuZCBzbGFiLlxcbitcXHQgKiBCYWlsIG91dCBvbmx5IHdoZW4gYm90aCBhcmUgdW5kZXIgdGhlaXIgbGltaXRzIGFuZCBhbm9uIGNhbm5vdFxcbitcXHQgKiBiZSByZWNsYWltZWQgZWl0aGVyLCBzbyB3ZSBkbyBub3Qgc2tpcCByZWNsYWltYWJsZSBhbm9uLlxcbiBcXHQgKi9cXG4gXFx0aWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcXHUwMDNjPSBwZ2RhdC1cXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzIFxcdTAwMjZcXHUwMDI2XFxuIFxcdCAgICBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzYz1cXG4tXFx0ICAgIHBnZGF0LVxcdTAwM2VtaW5fc2xhYl9wYWdlcylcXG4rXFx0ICAgIHBnZGF0LVxcdTAwM2VtaW5fc2xhYl9wYWdlcyBcXHUwMDI2XFx1MDAyNlxcbitcXHQgICAgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIFxcdTAwMjZzYykpXFxuIFxcdFxcdHJldHVybiAwO1xcbiBcXG4gXFx0LypcXG5AQCAtNzkxNyw2ICs3OTUwLDE4IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpXFxuIFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdC8qXFxuK1xcdCAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGVcXG4rXFx0ICogc2xhYiBvciB1bm1hcHBlZCBwYWdlIGNhY2hlIGlzIGFscmVhZHkgYXQgb3IgYmVsb3cgaXRzIGxpbWl0LCBsZWF2ZVxcbitcXHQgKiB0aGF0IHR5cGUgYWxvbmUgZXZlbiBpZiB0aGUgb3RoZXIgdHlwZSB0cmlwcGVkIHRoZSBnYXRlIGFuZCBicm91Z2h0XFxuK1xcdCAqIHVzIGludG8gbm9kZSByZWNsYWltLlxcbitcXHQgKi9cXG4rXFx0c2Muc2tpcF9zbGFiX3JlY2xhaW0gPVxcbitcXHRcXHRub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzYz1cXG4rXFx0XFx0cGdkYXQtXFx1MDAzZW1pbl9zbGFiX3BhZ2VzO1xcbitcXHRzYy5za2lwX2ZpbGVfcmVjbGFpbSA9XFxuK1xcdFxcdG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcXHUwMDNjPSBwZ2RhdC1cXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzO1xcbitcXG4gXFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbiBcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG4gXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIxOjU4LjQxNTQxMDEzOVoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjgxNDYxOTk4MjE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJub2RlX3JlY2xhaW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyAodm1zY2FuKSB0byBza2lwIHNsYWIgb3IgZmlsZSByZWNsYWltIHdoZW4gdGhlaXIgcmVzcGVjdGl2ZSBsaW1pdHMgYXJlIG5vdCBleGNlZWRlZCBkdXJpbmcgbm9kZSByZWNsYWltLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBhbGxvY2F0aW9uIHdoZW4gTlVNQSBub2RlIHJlY2xhaW0gaXMgZW5hYmxlZCAoZS5nLiwgdmlhIHZtLnpvbmVfcmVjbGFpbV9tb2RlIHN5c2N0bCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IGRhNTJlMjc2NTE5ZDEzYzExNGVmOTgwOGFkOTk1OGYyYjNiZDgxNmJcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwODoyMTo1NSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmNcbmluZGV4IGMxNDA0YTU5NTIzZDYuLmQxMzgzNzc5NTc5ZWEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0xMTQsNiArMTE0LDE4IEBAIHN0cnVjdCBzY2FuX2NvbnRyb2wge1xuIFx0Lyogem9uZV9yZWNsYWltX21vZGUsIGJvb3N0IHJlY2xhaW0sIGNncm91cCByZXN0cmljdGlvbnMgKi9cbiBcdHVuc2lnbmVkIGludCBtYXlfc3dhcDoxO1xuIFxuK1x0LypcbitcdCAqIFdoZW4gc2V0LCB0aGUgc2xhYiBzaHJpbmtlcnMgYXJlIG5vdCBpbnZva2VkIGJlY2F1c2UgcmVjbGFpbWFibGVcbitcdCAqIHNsYWIgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBtaW5fc2xhYl9wYWdlcy5cbitcdCAqL1xuK1x0dW5zaWduZWQgaW50IHNraXBfc2xhYl9yZWNsYWltOjE7XG4rXG4rXHQvKlxuK1x0ICogV2hlbiBzZXQsIGZpbGUgcGFnZXMgYXJlIG5vdCByZWNsYWltZWQgYmVjYXVzZSB1bm1hcHBlZCBwYWdlIGNhY2hlXG4rXHQgKiBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IG1pbl91bm1hcHBlZF9wYWdlcy5cbitcdCAqL1xuK1x0dW5zaWduZWQgaW50IHNraXBfZmlsZV9yZWNsYWltOjE7XG4rXG4gXHQvKiBOb3QgYWxsb3cgY2FjaGVfdHJpbV9tb2RlIHRvIGJlIHR1cm5lZCBvbiBhcyBwYXJ0IG9mIHJlY2xhaW0/ICovXG4gXHR1bnNpZ25lZCBpbnQgbm9fY2FjaGVfdHJpbV9tb2RlOjE7XG4gXG5AQCAtMjU3NSw2ICsyNTg3LDIxIEBAIHN0YXRpYyB2b2lkIGdldF9zY2FuX2NvdW50KHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MsXG4gXHRcdGdvdG8gb3V0O1xuIFx0fVxuIFxuK1x0LypcbitcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG9cbitcdCAqIG1pbl91bm1hcHBlZF9wYWdlczogc2tpcCBmaWxlIHBhZ2VzIGFuZCByZWNsYWltIGFub24gb25seS4gIEFzIHdpdGhcbitcdCAqIHRoZSBhbm9uLW9ubHkgY2FzZSBhYm92ZSwgaWYgYW5vbiBjYW5ub3QgYmUgcmVjbGFpbWVkIHRoZXJlIGlzXG4rXHQgKiBub3RoaW5nIHRvIGRvIHdpdGhvdXQgYnJlYWNoaW5nIHRoZSBmbG9vciwgc28gc2NhbiBub3RoaW5nLlxuK1x0ICovXG4rXHRpZiAoc2MtXHUwMDNlc2tpcF9maWxlX3JlY2xhaW0pIHtcbitcdFx0aWYgKCFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKG1lbWNnLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBzYykpIHtcbitcdFx0XHRtZW1zZXQobnIsIDAsIHNpemVvZigqbnIpICogTlJfTFJVX0xJU1RTKTtcbitcdFx0XHRyZXR1cm47XG4rXHRcdH1cbitcdFx0c2Nhbl9iYWxhbmNlID0gU0NBTl9BTk9OO1xuK1x0XHRnb3RvIG91dDtcbitcdH1cbitcbiBcdC8qIElmIHdlIGhhdmUgbm8gc3dhcCBzcGFjZSwgZG8gbm90IGJvdGhlciBzY2FubmluZyBhbm9uIGZvbGlvcy4gKi9cbiBcdGlmICghc2MtXHUwMDNlbWF5X3N3YXAgfHwgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSkge1xuIFx0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0ZJTEU7XG5AQCAtNDczNiw2ICs0NzYzLDE0IEBAIHN0YXRpYyBpbnQgc2Nhbl9mb2xpb3ModW5zaWduZWQgbG9uZyBucl90b19zY2FuLCBzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRWTV9XQVJOX09OX09OQ0UobnJfdG9fc2NhbiBcdTAwM2UgTUFYX0xSVV9CQVRDSCk7XG4gXHRWTV9XQVJOX09OX09OQ0UoIWxpc3RfZW1wdHkobGlzdCkpO1xuIFxuK1x0LypcbitcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG8gbWluX3VubWFwcGVkX3BhZ2VzLFxuK1x0ICogc28gbGVhdmUgdGhlIGZpbGUgdHlwZSBhbG9uZTsgaXNvbGF0ZV9mb2xpb3MoKSB0aGVuIGZhbGxzIGJhY2sgdG9cbitcdCAqIGFub24uXG4rXHQgKi9cbitcdGlmIChzYy1cdTAwM2Vza2lwX2ZpbGVfcmVjbGFpbSBcdTAwMjZcdTAwMjYgdHlwZSA9PSBMUlVfR0VOX0ZJTEUpXG4rXHRcdHJldHVybiAwO1xuK1xuIFx0aWYgKGdldF9ucl9nZW5zKGxydXZlYywgdHlwZSkgPT0gTUlOX05SX0dFTlMpXG4gXHRcdHJldHVybiAwO1xuIFxuQEAgLTUxMTEsNyArNTE0Niw4IEBAIHN0YXRpYyBpbnQgc2hyaW5rX29uZShzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxuIFxuIFx0bmVlZF9yb3RhdGUgPSB0cnlfdG9fc2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbiBcbi1cdHNocmlua19zbGFiKHNjLVx1MDAzZWdmcF9tYXNrLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBtZW1jZywgc2MtXHUwMDNlcHJpb3JpdHkpO1xuK1x0aWYgKCFzYy1cdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSlcbitcdFx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLCBzYy1cdTAwM2Vwcmlvcml0eSk7XG4gXG4gXHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSlcbiBcdFx0dm1wcmVzc3VyZShzYy1cdTAwM2VnZnBfbWFzaywgc2MtXHUwMDNlb3JkZXIsIG1lbWNnLCBmYWxzZSxcbkBAIC02MjE0LDggKzYyNTAsOSBAQCBzdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXG4gXHRcdHNocmlua19scnV2ZWMobHJ1dmVjLCBzYyk7XG4gXG4tXHRcdHNocmlua19zbGFiKHNjLVx1MDAzZWdmcF9tYXNrLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBtZW1jZyxcbi1cdFx0XHQgICAgc2MtXHUwMDNlcHJpb3JpdHkpO1xuK1x0XHRpZiAoIXNjLVx1MDAzZXNraXBfc2xhYl9yZWNsYWltKVxuK1x0XHRcdHNocmlua19zbGFiKHNjLVx1MDAzZWdmcF9tYXNrLCBwZ2RhdC1cdTAwM2Vub2RlX2lkLCBtZW1jZyxcbitcdFx0XHRcdCAgICBzYy1cdTAwM2Vwcmlvcml0eSk7XG4gXG4gXHRcdC8qIFJlY29yZCB0aGUgZ3JvdXAncyByZWNsYWltIGVmZmljaWVuY3kgKi9cbiBcdFx0aWYgKCFzYy1cdTAwM2Vwcm9hY3RpdmUpXG5AQCAtNzg0NiwxNiArNzg4MywxNiBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxuIFx0bm9yZWNsYWltX2ZsYWcgPSBtZW1hbGxvY19ub3JlY2xhaW1fc2F2ZSgpO1xuIFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCBcdTAwMjZzYy1cdTAwM2VyZWNsYWltX3N0YXRlKTtcbiBcbi1cdGlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXHUwMDNlIHBnZGF0LVx1MDAzZW1pbl91bm1hcHBlZF9wYWdlcyB8fFxuLVx0ICAgIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2UgcGdkYXQtXHUwMDNlbWluX3NsYWJfcGFnZXMpIHtcbi1cdFx0Lypcbi1cdFx0ICogRnJlZSBtZW1vcnkgYnkgY2FsbGluZyBzaHJpbmsgbm9kZSB3aXRoIGluY3JlYXNpbmdcbi1cdFx0ICogcHJpb3JpdGllcyB1bnRpbCB3ZSBoYXZlIGVub3VnaCBtZW1vcnkgZnJlZWQuXG4tXHRcdCAqL1xuLVx0XHRkbyB7XG4tXHRcdFx0c2hyaW5rX25vZGUocGdkYXQsIHNjKTtcbi1cdFx0fSB3aGlsZSAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgLS1zYy1cdTAwM2Vwcmlvcml0eSBcdTAwM2U9IDApO1xuLVx0fVxuK1x0LypcbitcdCAqIEZyZWUgbWVtb3J5IGJ5IGNhbGxpbmcgc2hyaW5rIG5vZGUgd2l0aCBpbmNyZWFzaW5nXG4rXHQgKiBwcmlvcml0aWVzIHVudGlsIHdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmcmVlZC5cbitcdCAqXG4rXHQgKiBXaGF0IHRvIHJlY2xhaW0gaXMgZ2F0ZWQgcGVyIHR5cGUgYnkgc2MtXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0gYW5kXG4rXHQgKiBzYy1cdTAwM2Vza2lwX2ZpbGVfcmVjbGFpbS5cbitcdCAqL1xuK1x0ZG8ge1xuK1x0XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xuK1x0fSB3aGlsZSAoc2MtXHUwMDNlbnJfcmVjbGFpbWVkIFx1MDAzYyBucl9wYWdlcyBcdTAwMjZcdTAwMjYgLS1zYy1cdTAwM2Vwcmlvcml0eSBcdTAwM2U9IDApO1xuIFxuIFx0c2V0X3Rhc2tfcmVjbGFpbV9zdGF0ZShwLCBOVUxMKTtcbiBcdG1lbWFsbG9jX25vcmVjbGFpbV9yZXN0b3JlKG5vcmVjbGFpbV9mbGFnKTtcbkBAIC03ODg1LDE4ICs3OTIyLDE0IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpXG4gXHR9O1xuIFxuIFx0Lypcbi1cdCAqIE5vZGUgcmVjbGFpbSByZWNsYWltcyB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBhbmRcbi1cdCAqIHNsYWIgcGFnZXMgaWYgd2UgYXJlIG92ZXIgdGhlIGRlZmluZWQgbGltaXRzLlxuLVx0ICpcbi1cdCAqIEEgc21hbGwgcG9ydGlvbiBvZiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcyBpcyBuZWVkZWQgZm9yXG4tXHQgKiBmaWxlIEkvTyBvdGhlcndpc2UgcGFnZXMgcmVhZCBieSBmaWxlIEkvTyB3aWxsIGJlIGltbWVkaWF0ZWx5XG4tXHQgKiB0aHJvd24gb3V0IGlmIHRoZSBub2RlIGlzIG92ZXJhbGxvY2F0ZWQuIFNvIHdlIGRvIG5vdCByZWNsYWltXG4tXHQgKiBpZiBsZXNzIHRoYW4gYSBzcGVjaWZpZWQgcGVyY2VudGFnZSBvZiB0aGUgbm9kZSBpcyB1c2VkIGJ5XG4tXHQgKiB1bm1hcHBlZCBmaWxlIGJhY2tlZCBwYWdlcy5cbitcdCAqIG1pbl91bm1hcHBlZF9wYWdlcyBhbmQgbWluX3NsYWJfcGFnZXMgb25seSBnYXRlIGZpbGUgYW5kIHNsYWIuXG4rXHQgKiBCYWlsIG91dCBvbmx5IHdoZW4gYm90aCBhcmUgdW5kZXIgdGhlaXIgbGltaXRzIGFuZCBhbm9uIGNhbm5vdFxuK1x0ICogYmUgcmVjbGFpbWVkIGVpdGhlciwgc28gd2UgZG8gbm90IHNraXAgcmVjbGFpbWFibGUgYW5vbi5cbiBcdCAqL1xuIFx0aWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcdTAwM2M9IHBnZGF0LVx1MDAzZW1pbl91bm1hcHBlZF9wYWdlcyBcdTAwMjZcdTAwMjZcbiBcdCAgICBub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNjPVxuLVx0ICAgIHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzKVxuK1x0ICAgIHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzIFx1MDAyNlx1MDAyNlxuK1x0ICAgICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVx1MDAzZW5vZGVfaWQsIFx1MDAyNnNjKSlcbiBcdFx0cmV0dXJuIDA7XG4gXG4gXHQvKlxuQEAgLTc5MTcsNiArNzk1MCwxOCBAQCB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaVxuIFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXHUwMDI2cGdkYXQtXHUwMDNlZmxhZ3MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbitcdC8qXG4rXHQgKiBFYWNoIGxpbWl0IG9ubHkgZ2F0ZXMgaXRzIG93biB0eXBlIG9mIHJlY2xhaW0uICBXaGVuIHJlY2xhaW1hYmxlXG4rXHQgKiBzbGFiIG9yIHVubWFwcGVkIHBhZ2UgY2FjaGUgaXMgYWxyZWFkeSBhdCBvciBiZWxvdyBpdHMgbGltaXQsIGxlYXZlXG4rXHQgKiB0aGF0IHR5cGUgYWxvbmUgZXZlbiBpZiB0aGUgb3RoZXIgdHlwZSB0cmlwcGVkIHRoZSBnYXRlIGFuZCBicm91Z2h0XG4rXHQgKiB1cyBpbnRvIG5vZGUgcmVjbGFpbS5cbitcdCAqL1xuK1x0c2Muc2tpcF9zbGFiX3JlY2xhaW0gPVxuK1x0XHRub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNjPVxuK1x0XHRwZ2RhdC1cdTAwM2VtaW5fc2xhYl9wYWdlcztcbitcdHNjLnNraXBfZmlsZV9yZWNsYWltID1cbitcdFx0bm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUocGdkYXQpIFx1MDAzYz0gcGdkYXQtXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzO1xuK1xuIFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcdTAwMjZzYyk7XG4gXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncyk7XG4gXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMTo1OC40MTU0MTE0MDlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NTAyMjk1MjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IFJlY2xhaW0gUGF0Y2gqKlxuXG5Pa2F5LCBzbyB0aGlzIHBhdGNoIGlzIGRpZ2dpbmcgaW50byBgbW0vdm1zY2FuLmNgLCB3aGljaCBtZWFucyB3ZSdyZSBkZWFsaW5nIHdpdGggY29yZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyDigJMgYWx3YXlzIGFuIGludGVyZXN0aW5nIGFyZWEuIEl0IGxvb2tzIGxpa2UgdGhlIGNvcmUgY2hhbmdlIGlzIGFkZGluZyBgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gIGZsYWdzIHRvIHRoZSBgc2Nhbl9jb250cm9sYCBzdHJ1Y3QuIFRoYXQncyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgY29udHJvbGxpbmcgcmVjbGFpbSBiZWhhdmlvciB0aHJvdWdoIGZsYWdzIGlzIGEgcHJldHR5IHN0YW5kYXJkIHdheSB0byBtYW5hZ2UgY29tcGxleGl0eSwgc28gdGhhdCdzIGEgZ29vZCBhcHByb2FjaC4gVGhlIGBnZXRfc2Nhbl9jb3VudGAgZnVuY3Rpb24gYW5kIGBzY2FuX2ZvbGlvc2AgYXJlIGdldHRpbmcgdG91Y2hlZCB0byByZXNwZWN0IHRob3NlIGZpbGUgcmVjbGFpbSBmbGFncywgd2hpbGUgYHNocmlua19vbmVgIGFuZCBgc2hyaW5rX25vZGVfbWVtY2dzYCBkZWFsIHdpdGggdGhlIHNsYWIgcmVjbGFpbSBmbGFnLiBBbmQgdGhlIG5vZGUgcmVjbGFpbSBmdW5jdGlvbnMgYXJlIGJlaW5nIHVwZGF0ZWQgdG8gc2V0IHRoZXNlIGZsYWdzIGFuZCBhZGp1c3QgdGhlIHJlY2xhaW0gbG9naWMgYWNjb3JkaW5nbHkuXG5cblRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSwgYSBwcmV0dHkgZGVlcCBvbmUgYXQgdGhhdCwgYWZmZWN0aW5nIGhvdyBub2RlIHJlY2xhaW0gb3BlcmF0ZXMsIHNwZWNpZmljYWxseSBieSBsZXR0aW5nIHVzIHR3ZWFrIHRoZSBsaW1pdHMgb24gc2xhYiBhbmQgZmlsZSByZWNsYWltLiBEZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBzb21lIHNlcmlvdXMgZnV6emluZy4gR290dGEgY2hlY2sgdGhlIGVkZ2UgY2FzZXMgaGVyZS5cblxuQWxyaWdodCwgbGV0J3MgcGlucG9pbnQgdGhvc2UgZnVuY3Rpb25zIGFnYWluLiBMb29rcyBsaWtlIHRoZSBmb2xsb3dpbmcgZnVuY3Rpb25zIGFyZSBtb2RpZmllZDogYGdldF9zY2FuX2NvdW50YCwgYHNjYW5fZm9saW9zYCwgYHNocmlua19vbmVgLCBgc2hyaW5rX25vZGVfbWVtY2dzYCwgYF9fbm9kZV9yZWNsYWltYCwgYW5kIGBub2RlX3JlY2xhaW1gLiBIbW0sIGBub2RlX3JlY2xhaW1gIGlzICp0aGUqIGVudHJ5IHBvaW50IGhlcmUsIGEgbm9uLXN0YXRpYyBvbmUgYXQgdGhhdCwgc28gcHJvYmFibHkgdGhlIG1vc3QgaW1wb3J0YW50IG9mIHRoZSBidW5jaC4gSXQncyB0aGUgZnJvbnQgZG9vci5cblxuSSdtIGdvaW5nIHRvIGp1bXAgc3RyYWlnaHQgdG8gYG5vZGVfcmVjbGFpbWAgaW4gYG1tL3Ztc2Nhbi5jYCBhbmQgc3RhcnQgZGlnZ2luZyB0aHJvdWdoIHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkwMiwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwMiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjA1LjkxNzcxMDMzN1oiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDYxMTQ2NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJedW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW1cXFxcKFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03ODY1PXN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXFxuLS1cXG5tbS92bXNjYW4uYy03OTA3LVxcbm1tL3Ztc2Nhbi5jOjc5MDg6dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS92bXNjYW4uYy03OTA5LXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6MDUuOTYyMzM4MjQyWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM3Njc4NzM1NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipUcmFjaW5nIGBub2RlX3JlY2xhaW1gIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb250cm9sIGZsb3cgc3Vycm91bmRpbmcgYG5vZGVfcmVjbGFpbWAuIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIG1hcCBvdXQgYWxsIHRoZSBjYWxsIHNpdGVzIGZvciB0aGlzIGZ1bmN0aW9uLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2Ygd2hlbiBhbmQgd2h5IHRoZSBzeXN0ZW0gdHJpZ2dlcnMgbm9kZSByZWNsYW1hdGlvbiwgYW5kIGZyb20gdGhlcmUsIHdoZXJlIHRoZSByZXNvdXJjZXMgYXJlIGJlaW5nIHJlLWFsbG9jYXRlZC4gSSdtIHRoaW5raW5nIEknbGwgc3RhcnQgd2l0aCBhIGNvZGUgc2VhcmNoIHRvIGlkZW50aWZ5IGFsbCBkaXJlY3QgYW5kIGluZGlyZWN0IGNhbGxzLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIHRob3NlIGNhbGxzIHdpbGwgYmUgY3JpdGljYWwgZm9yIGRlYnVnZ2luZyBvciBwZXJmb3JtYW5jZSBhbmFseXNpcyByZWxhdGVkIHRvIG1lbW9yeSBwcmVzc3VyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6NDcwMywiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjA5LjMzOTEyNzY2NloiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTYxNTkzMDk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm5vZGVfcmVjbGFpbVxcXFwoXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2xpbnV4L3RvcG9sb2d5Lmg9NDM9aW50IGFyY2hfdXBkYXRlX2NwdV90b3BvbG9neSh2b2lkKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaC01NS0gKiAoaW4gd2hhdGV2ZXIgYXJjaCBzcGVjaWZpYyBtZWFzdXJlbWVudCB1bml0cyByZXR1cm5lZCBieSBub2RlX2Rpc3RhbmNlKCkpXFxuaW5jbHVkZS9saW51eC90b3BvbG9neS5oOjU2OiAqIGFuZCBub2RlX3JlY2xhaW1fbW9kZSBpcyBlbmFibGVkIHRoZW4gdGhlIFZNIHdpbGwgb25seSBjYWxsIG5vZGVfcmVjbGFpbSgpXFxuaW5jbHVkZS9saW51eC90b3BvbG9neS5oLTU3LSAqIG9uIG5vZGVzIHdpdGhpbiB0aGlzIGRpc3RhbmNlLlxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMTQ1PWV4dGVybiBpbnQgbm9kZV9yZWNsYWltX21vZGU7XFxubW0vaW50ZXJuYWwuaC0xMTQ2LVxcbm1tL2ludGVybmFsLmg6MTE0NzpleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS9pbnRlcm5hbC5oLTExNDgtXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5tbS9pbnRlcm5hbC5oPTExNDk9ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayk7XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTExNTItXFxubW0vaW50ZXJuYWwuaDoxMTUzOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS9pbnRlcm5hbC5oLTExNTQtXFx0XFx0XFx0XFx0XFx0IGdmcF90IG1hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG4tLVxcbm1tL3BhZ2VfYWxsb2MuYz0zODAwPWdldF9wYWdlX2Zyb21fZnJlZWxpc3QoZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlciwgaW50IGFsbG9jX2ZsYWdzLFxcbi0tXFxubW0vcGFnZV9hbGxvYy5jLTM5MjktXFxubW0vcGFnZV9hbGxvYy5jOjM5MzA6XFx0XFx0XFx0aWYgKCFub2RlX3JlY2xhaW0oem9uZS1cXHUwMDNlem9uZV9wZ2RhdCwgZ2ZwX21hc2ssIG9yZGVyKSlcXG5tbS9wYWdlX2FsbG9jLmMtMzkzMS1cXHRcXHRcXHRcXHRjb250aW51ZTtcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4MzM9c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4NjQtICovXFxubW0vdm1zY2FuLmM6Nzg2NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc4NjYtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYy03OTA3LVxcbm1tL3Ztc2Nhbi5jOjc5MDg6dW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGludCBvcmRlcilcXG5tbS92bXNjYW4uYy03OTA5LXtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5NjQtXFxubW0vdm1zY2FuLmM6Nzk2NTpcXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtNzk2Ni1cXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5NzctXFxubW0vdm1zY2FuLmM6Nzk3ODpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc5NzktXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYz03OTk4PWludCB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKGNoYXIgKmJ1ZixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgwOTAtXFxubW0vdm1zY2FuLmM6ODA5MTpcXHRcXHRcXHRyZWNsYWltZWQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgYmF0Y2hfc2l6ZSwgXFx1MDAyNnNjKTtcXG5tbS92bXNjYW4uYy04MDkyLVxcdFxcdFxcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMjoxMS41MDA3MjYyMzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NjI5OTMyMDk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IEFsbG9jYXRpb24gUGF0aCoqXG5cbk9rYXksIHNvIGBub2RlX3JlY2xhaW1gIGlzIGNhbGxlZCBkaXJlY3RseSBmcm9tIGBnZXRfcGFnZV9mcm9tX2ZyZWVsaXN0YCwgcmlnaHQgdGhlcmUgaW4gYG1tL3BhZ2VfYWxsb2MuY2AuIFRoYXQncyBhICpyZWFsbHkqIGhvdCBwYXRoIGluIHRoZSBrZXJuZWwg4oCTIHBhZ2UgYWxsb2NhdGlvbiBpcyBmdW5kYW1lbnRhbC4gTWFrZXMgc2Vuc2UgaXQncyBwZXJmb3JtYW5jZS1jcml0aWNhbC4gQnV0IGBub2RlX3JlY2xhaW1gIGlzIGl0c2VsZiB0aGUgZW50cnkgcG9pbnQgZm9yIG5vZGUgcmVjbGFpbSwgd2hpY2ggb25seSBnZXRzIHRyaWdnZXJlZCB3aGVuIGBub2RlX3JlY2xhaW1fbW9kZWAgaXMgZW5hYmxlZC4gTXkgZ3V0IHNheXMgTlVNQSBzeXN0ZW1zLCBuYXR1cmFsbHkuIEkgbmVlZCB0byBtYWtlIHN1cmUsIHRob3VnaC4gTGV0J3MgZGlnIGludG8gdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGFuZCB3aGVyZSBgbm9kZV9yZWNsYWltX21vZGVgIGlzIHRyaWdnZXJlZC4gSSdtIHByZXR0eSBzdXJlIGBDT05GSUdfTlVNQWAgaXMgdXN1YWxseSBhIHByZXJlcXVpc2l0ZSwgYnV0IEkgd2FudCB0byBiZSAxMDAlIGNlcnRhaW4uIFRpbWUgdG8gY2hlY2sgYG1tL3Ztc2Nhbi5jYCBhbmQgYG1tL2ludGVybmFsLmhgIGFuZCBjb25maXJtIHRob3NlIGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NTc0MCwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMjoxNi4xMzA2NjE3NThaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5NzU2ODQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2ludGVybmFsLmhcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaW50ZXJuYWwuaD0xMTQxPXN0YXRpYyBpbmxpbmUgdm9pZCBtbG9ja19kcmFpbl9yZW1vdGUoaW50IGNwdSkgeyB9XFxuLS1cXG5tbS9pbnRlcm5hbC5oLTExNDQtI2lmZGVmIENPTkZJR19OVU1BXFxubW0vaW50ZXJuYWwuaDoxMTQ1OmV4dGVybiBpbnQgbm9kZV9yZWNsYWltX21vZGU7XFxubW0vaW50ZXJuYWwuaC0xMTQ2LVxcbm1tL2ludGVybmFsLmg6MTE0NzpleHRlcm4gdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS9pbnRlcm5hbC5oLTExNDgtXFx0XFx0XFx0XFx0ICBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKTtcXG5tbS9pbnRlcm5hbC5oPTExNDk9ZXh0ZXJuIGludCBmaW5kX25leHRfYmVzdF9ub2RlKGludCBub2RlLCBub2RlbWFza190ICp1c2VkX25vZGVfbWFzayk7XFxubW0vaW50ZXJuYWwuaC0xMTUwLSNlbHNlXFxubW0vaW50ZXJuYWwuaDoxMTUxOiNkZWZpbmUgbm9kZV9yZWNsYWltX21vZGUgMFxcbm1tL2ludGVybmFsLmgtMTE1Mi1cXG5tbS9pbnRlcm5hbC5oOjExNTM6c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL2ludGVybmFsLmgtMTE1NC1cXHRcXHRcXHRcXHRcXHQgZ2ZwX3QgbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMTU4PXN0YXRpYyBpbmxpbmUgaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKVxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMTYzLVxcbm1tL2ludGVybmFsLmg6MTE2NDpzdGF0aWMgaW5saW5lIGJvb2wgbm9kZV9yZWNsYWltX2VuYWJsZWQodm9pZClcXG5tbS9pbnRlcm5hbC5oLTExNjUte1xcbm1tL2ludGVybmFsLmg6MTE2NjpcXHQvKiBJcyBhbnkgbm9kZV9yZWNsYWltX21vZGUgYml0IHNldD8gKi9cXG5tbS9pbnRlcm5hbC5oOjExNjc6XFx0cmV0dXJuIG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgKFJFQ0xBSU1fWk9ORXxSRUNMQUlNX1dSSVRFfFJFQ0xBSU1fVU5NQVApO1xcbm1tL2ludGVybmFsLmgtMTE2OC19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjE2LjE3NjY0MDQ5M1oiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2NTI5OTYzMjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgTlVNQSBhbmQgTm9kZSBSZWNsYW1hdGlvbioqXG5cblJpZ2h0LCBzbyBgQ09ORklHX05VTUFgIGlzICphYnNvbHV0ZWx5KiB0aGUgbGluY2hwaW4uIElmIHRoYXQncyBub3QgZW5hYmxlZCwgYG5vZGVfcmVjbGFpbWAgaXMgZXNzZW50aWFsbHkganVzdCBhIHBsYWNlaG9sZGVyLCBhIHNrZWxldGFsIGZ1bmN0aW9uIHdpdGggbm8gcmVhbCBtZWF0IG9uIGl0cyBib25lcy4gSXQncyBub3QgZ29pbmcgdG8gZG8gYW55dGhpbmcgdXNlZnVsIHdpdGhvdXQgdGhlIHVuZGVybHlpbmcgTlVNQSBpbmZyYXN0cnVjdHVyZS4gSXQncyBhIGZ1bmRhbWVudGFsIGRlcGVuZGVuY3ksIGFsbW9zdCBhIHByZXJlcXVpc2l0ZS5cblxuTm93LCB0aGF0IGJyaW5ncyB1cCBhIGJyb2FkZXIgcXVlc3Rpb24sIGRvZXNuJ3QgaXQ/IElmIGBDT05GSUdfTlVNQWAgaXMgdGhhdCBjcml0aWNhbCwgYXJlIHRoZXJlICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIG9yIGtlcm5lbCBmZWF0dXJlcyB0aGF0IG1pZ2h0IGJlIGludGVydHdpbmVkIHdpdGggYG5vZGVfcmVjbGFpbWAgaW4gYSBzaW1pbGFyIGZhc2hpb24/IFRoaW5ncyB0aGF0IGFyZSByZXF1aXJlZCwgb3IgdGhhdCBzaWduaWZpY2FudGx5IGFsdGVyIGl0cyBiZWhhdmlvdXIsIG9yIHRoYXQgaXQgZGVwZW5kcyBvbiBpbiBzb21lIHdheS4gVGltZSB0byBkaWcgYSBiaXQgZGVlcGVyIGFuZCBzZWUgd2hhdCBlbHNlIG5lZWRzIHRvIGJlIGNvbnNpZGVyZWQuIEknZCBiZXR0ZXIgZXhwYW5kIG15IHNlYXJjaC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUzNSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjE5LjgyOTYzOTg1N1oiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNzEwNDQsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTI1NjI9c3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTI1OTAtXFx0LypcXG5tbS92bXNjYW4uYzoyNTkxOlxcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG9cXG5tbS92bXNjYW4uYy0yNTkyLVxcdCAqIG1pbl91bm1hcHBlZF9wYWdlczogc2tpcCBmaWxlIHBhZ2VzIGFuZCByZWNsYWltIGFub24gb25seS4gIEFzIHdpdGhcXG4tLVxcbm1tL3Ztc2Nhbi5jPTQ3NDk9c3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTQ3NjYtXFx0LypcXG5tbS92bXNjYW4uYzo0NzY3OlxcdCAqIG5vZGVfcmVjbGFpbSBwcm90ZWN0cyB1bm1hcHBlZCBwYWdlIGNhY2hlIGRvd24gdG8gbWluX3VubWFwcGVkX3BhZ2VzLFxcbm1tL3Ztc2Nhbi5jLTQ3NjgtXFx0ICogc28gbGVhdmUgdGhlIGZpbGUgdHlwZSBhbG9uZTsgaXNvbGF0ZV9mb2xpb3MoKSB0aGVuIGZhbGxzIGJhY2sgdG9cXG4tLVxcbm1tL3Ztc2Nhbi5jPTYyNzE9c3RhdGljIHZvaWQgc2hyaW5rX25vZGUocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxubW0vdm1zY2FuLmMtNjI3Mi17XFxubW0vdm1zY2FuLmM6NjI3MzpcXHR1bnNpZ25lZCBsb25nIG5yX3JlY2xhaW1lZCwgbnJfc2Nhbm5lZCwgbnJfbm9kZV9yZWNsYWltZWQ7XFxubW0vdm1zY2FuLmMtNjI3NC1cXHRzdHJ1Y3QgbHJ1dmVjICp0YXJnZXRfbHJ1dmVjO1xcbi0tXFxubW0vdm1zY2FuLmMtNjI5OS1cXG5tbS92bXNjYW4uYzo2MzAwOlxcdG5yX25vZGVfcmVjbGFpbWVkID0gc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCAtIG5yX3JlY2xhaW1lZDtcXG5tbS92bXNjYW4uYy02MzAxLVxcbi0tXFxubW0vdm1zY2FuLmMtNjMwNC1cXHRcXHR2bXByZXNzdXJlKHNjLVxcdTAwM2VnZnBfbWFzaywgc2MtXFx1MDAzZW9yZGVyLCBzYy1cXHUwMDNldGFyZ2V0X21lbV9jZ3JvdXAsIHRydWUsXFxubW0vdm1zY2FuLmM6NjMwNTpcXHRcXHRcXHQgICBzYy1cXHUwMDNlbnJfc2Nhbm5lZCAtIG5yX3NjYW5uZWQsIG5yX25vZGVfcmVjbGFpbWVkKTtcXG5tbS92bXNjYW4uYy02MzA2LVxcbm1tL3Ztc2Nhbi5jOjYzMDc6XFx0aWYgKG5yX25vZGVfcmVjbGFpbWVkKVxcbm1tL3Ztc2Nhbi5jLTYzMDgtXFx0XFx0cmVjbGFpbWFibGUgPSB0cnVlO1xcbi0tXFxubW0vdm1zY2FuLmMtNjM2OC1cXG5tbS92bXNjYW4uYzo2MzY5OlxcdGlmIChzaG91bGRfY29udGludWVfcmVjbGFpbShwZ2RhdCwgbnJfbm9kZV9yZWNsYWltZWQsIHNjKSlcXG5tbS92bXNjYW4uYy02MzcwLVxcdFxcdGdvdG8gYWdhaW47XFxuLS1cXG5tbS92bXNjYW4uYz03NzU2PXN0YXRpYyBjb25zdCBzdHJ1Y3QgY3RsX3RhYmxlIHZtc2Nhbl9zeXNjdGxfdGFibGVbXSA9IHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc3NjgtXFx0XFx0LnByb2NuYW1lXFx0PSBcXFwiem9uZV9yZWNsYWltX21vZGVcXFwiLFxcbm1tL3Ztc2Nhbi5jOjc3Njk6XFx0XFx0LmRhdGFcXHRcXHQ9IFxcdTAwMjZub2RlX3JlY2xhaW1fbW9kZSxcXG5tbS92bXNjYW4uYzo3NzcwOlxcdFxcdC5tYXhsZW5cXHRcXHQ9IHNpemVvZihub2RlX3JlY2xhaW1fbW9kZSksXFxubW0vdm1zY2FuLmMtNzc3MS1cXHRcXHQubW9kZVxcdFxcdD0gMDY0NCxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc3ODg9bW9kdWxlX2luaXQoa3N3YXBkX2luaXQpXFxuLS1cXG5tbS92bXNjYW4uYy03NzkzLSAqXFxubW0vdm1zY2FuLmM6Nzc5NDogKiBJZiBub24temVybyBjYWxsIG5vZGVfcmVjbGFpbSB3aGVuIHRoZSBudW1iZXIgb2YgZnJlZSBwYWdlcyBmYWxscyBiZWxvd1xcbm1tL3Ztc2Nhbi5jLTc3OTUtICogdGhlIHdhdGVybWFya3MuXFxubW0vdm1zY2FuLmMtNzc5Ni0gKi9cXG5tbS92bXNjYW4uYzo3Nzk3OmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTc3OTgtXFxuLS1cXG5tbS92bXNjYW4uYy03ODA2LS8qXFxubW0vdm1zY2FuLmM6NzgwNzogKiBQZXJjZW50YWdlIG9mIHBhZ2VzIGluIGEgem9uZSB0aGF0IG11c3QgYmUgdW5tYXBwZWQgZm9yIG5vZGVfcmVjbGFpbSB0b1xcbm1tL3Ztc2Nhbi5jLTc4MDgtICogb2NjdXIuXFxuLS1cXG5tbS92bXNjYW4uYz03ODMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODQzLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc4NDQ6XFx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9VTk1BUClcXG5tbS92bXNjYW4uYy03ODQ1LVxcdFxcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XFxuLS1cXG5tbS92bXNjYW4uYy03ODY0LSAqL1xcbm1tL3Ztc2Nhbi5jOjc4NjU6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03ODY2LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmMtNzg3Mi1cXG5tbS92bXNjYW4uYzo3ODczOlxcdHRyYWNlX21tX3Ztc2Nhbl9ub2RlX3JlY2xhaW1fYmVnaW4ocGdkYXQtXFx1MDAzZW5vZGVfaWQsIHNjLVxcdTAwM2VvcmRlcixcXG5tbS92bXNjYW4uYy03ODc0LVxcdFxcdFxcdFxcdFxcdCAgIHNjLVxcdTAwM2VnZnBfbWFzayk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTAyLVxcbm1tL3Ztc2Nhbi5jOjc5MDM6XFx0dHJhY2VfbW1fdm1zY2FuX25vZGVfcmVjbGFpbV9lbmQoc2MtXFx1MDAzZW5yX3JlY2xhaW1lZCwgTlVMTCk7XFxubW0vdm1zY2FuLmMtNzkwNC1cXG4tLVxcbm1tL3Ztc2Nhbi5jLTc5MDctXFxubW0vdm1zY2FuLmM6NzkwODp1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKVxcbm1tL3Ztc2Nhbi5jLTc5MDkte1xcbi0tXFxubW0vdm1zY2FuLmMtNzkxNy1cXHRcXHQucHJpb3JpdHkgPSBOT0RFX1JFQ0xBSU1fUFJJT1JJVFksXFxubW0vdm1zY2FuLmM6NzkxODpcXHRcXHQubWF5X3dyaXRlcGFnZSA9ICEhKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9XUklURSksXFxubW0vdm1zY2FuLmM6NzkxOTpcXHRcXHQubWF5X3VubWFwID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1VOTUFQKSxcXG5tbS92bXNjYW4uYy03OTIwLVxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuLS1cXG5tbS92bXNjYW4uYy03OTY0LVxcbm1tL3Ztc2Nhbi5jOjc5NjU6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc5NjYtXFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTc3LVxcbm1tL3Ztc2Nhbi5jOjc5Nzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03OTc5LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9Nzk5OD1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDkwLVxcbm1tL3Ztc2Nhbi5jOjgwOTE6XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtODA5Mi1cXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6MTkuODczOTE2OTMxWiIsIlNlcSI6MTEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzA1NDAyNDQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGRlZXAgaW4gdGhlIHdlZWRzIG9mIG1lbW9yeSBtYW5hZ2VtZW50OlxuXG4qKkRpZ2dpbmcgaW50byB0aGUgTm9kZSBSZWNsYWltIE15c3RlcnkqKlxuXG5IbW0sIGludGVyZXN0aW5nLiBUaGUgZmFjdCB0aGF0IGBfX25vZGVfcmVjbGFpbWAgaXMgYmVpbmcgY2FsbGVkIGZyb20gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGp1c3QgcGluZ2VkIHNvbWV0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhhdCBjb25uZWN0aW9uIG1vcmUgdGhvcm91Z2hseS4gUmlnaHQsIGxldCdzIHRyYWNlIHRoaXMgYmFjay4gSSBuZWVkIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2YgaG93IHRob3NlIHR3byBmdW5jdGlvbnMgaW50ZXJhY3QuIFRpbWUgdG8gZGl2ZSBpbnRvIGBtbS92bXNjYW4uY2AgYW5kIHRha2UgYSBsb29rIGF0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgY2FsbC4gSSB3YW50IHRvIHNlZSAqd2h5KiBhbmQgKmhvdyogYF9fbm9kZV9yZWNsYWltYCBpcyBiZWluZyBpbnZva2VkIHRoZXJlLiBJcyB0aGlzIHN0YW5kYXJkIGJlaGF2aW9yLCBvciBpcyB0aGlzIHNvbWUgb3B0aW1pemVkIHBhdGggb3IsIGhlYXZlbiBmb3JiaWQsIGEgcG90ZW50aWFsIGJ1Zz8gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg1MzYsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMjoyMy4xNDQ0NTkyNDVaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDQwODQ1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9Nzk5Mj1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03OTk3LVxcbm1tL3Ztc2Nhbi5jOjc5OTg6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc5OTktXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODE1MT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNTYtXFxubW0vdm1zY2FuLmM6ODE1NzpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODE1OC1cXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjIzLjE4NzkwNjQyOVoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzkxNzk3MzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czpcblxuKipBbmFseXppbmcgdGhlIE1lbW9yeSBSZWNsYWltaW5nIFRyaWdnZXIqKlxuXG5Pa2F5LCBzbyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBiZWluZyBjYWxsZWQsIGFuZCBpdCdzIHRyaWdnZXJlZCB0aHJvdWdoIGEgc3lzZnMgaW50ZXJmYWNlLCBzcGVjaWZpY2FsbHkgdGhlIGByZWNsYWltX3N0b3JlYC4gVGhpcyBtZWFucyBhIHVzZXItc3BhY2UgcHJvY2VzcyBpcyBkaXJlY3RseSByZXF1ZXN0aW5nIG1lbW9yeSByZWNsYWltLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGhhcHBlbmluZyAqaW5zaWRlKiB0aGF0IGByZWNsYWltX3N0b3JlYCBoYW5kbGVyIHRvIGZpZ3VyZSBvdXQgdGhlIGV4YWN0IGZsb3cuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBrZXJuZWwgY29kZS4gTGV0J3MgaGVhZCBvdmVyIHRvIGBtbS92bXNjYW4uY2AgYW5kIGZpbmQgdGhlIGByZWNsYWltX3N0b3JlYCBmdW5jdGlvbi4gSSdtIGd1ZXNzaW5nIHRoaXMgZnVuY3Rpb24gaXMgdGhlIGVudHJ5IHBvaW50IGZvciBoYW5kbGluZyB0aGlzIHVzZXItaW5pdGlhdGVkIHJlY2xhaW0sIGFuZCBJIG5lZWQgdG8gc2VlIHdoYXQgYWN0aW9ucyBpdCB0YWtlcywgYW5kIHdoYXQgY29udGV4dCBpcyBwcm92aWRlZCB0byBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgcGFyYW1ldGVycyBhcmUgc2V0IGFuZCB3aGF0IGZsYWdzIGFyZSBpbnZvbHZlZC4gRnJvbSB0aGVyZSwgSSBjYW4gdHJhY2UgdGhlIHBhdGggb2YgZXhlY3V0aW9uIHRvIHRydWx5IHVuZGVyc3RhbmQgdGhlIHJlY2xhaW0gdHJpZ2dlci5cblxuXG4iLCJJbnB1dFRva2VucyI6OTAxNiwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjI2LjU3OTcwNjIzNVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQyNDYyNjUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVjbGFpbV9zdG9yZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz04MTQ4PUVYUE9SVF9TWU1CT0xfR1BMKGNoZWNrX21vdmVfdW5ldmljdGFibGVfZm9saW9zKTtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNTAtI2lmIGRlZmluZWQoQ09ORklHX1NZU0ZTKSBcXHUwMDI2XFx1MDAyNiBkZWZpbmVkKENPTkZJR19OVU1BKVxcbm1tL3Ztc2Nhbi5jOjgxNTE6c3RhdGljIHNzaXplX3QgcmVjbGFpbV9zdG9yZShzdHJ1Y3QgZGV2aWNlICpkZXYsXFxubW0vdm1zY2FuLmMtODE1Mi1cXHRcXHRcXHQgICAgIHN0cnVjdCBkZXZpY2VfYXR0cmlidXRlICphdHRyLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMjoyNi42MjM5NTVaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTQyMzU4NDg3OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgTlVNQS1SZWxhdGVkIE1lbW9yeSBSZWNsYWltIENvZGUqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGl0IHNlZW1zIGxpa2UgdGhlIGByZWNsYWltX3N0b3JlYCBhbmQgYG5vZGVfcmVjbGFpbWAgZnVuY3Rpb25zICpyZXF1aXJlKiBgQ09ORklHX05VTUFgLiBUaGF0J3MgdGhlIGJhc2VsaW5lLiBJIHdvbmRlciBpZiB0aGVyZSBhcmUgYW55IG90aGVyIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLCBidXQgc28gZmFyLCBpdCBsb29rcyBsaWtlIGBDT05GSUdfTlVNQWAgaXMgdGhlIG9ubHkgb25lLlxuXG5Ob3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGlmIGBub2RlX3JlY2xhaW1gIGlzIHRoZSAqc29sZSogZW50cnkgcG9pbnQgaW50byB0aGlzIHBhcnQgb2YgdGhlIHN5c3RlbS4gSSBzZWUgdGhpcyBwYXRjaCBtb2RpZmllcyBgZ2V0X3NjYW5fY291bnRgLCBgc2Nhbl9mb2xpb3NgLCBgc2hyaW5rX29uZWAsIGFuZCBgc2hyaW5rX25vZGVfbWVtY2dzYC4gVGhlc2UgYWxsIGxlYWQgaW50byBgc2hyaW5rX25vZGVgLCB3aGljaCBpcyAqY2VydGFpbmx5KiBjYWxsZWQgZnJvbSBgX19ub2RlX3JlY2xhaW1gLiBCdXQgd2FpdCwgdGhlcmUgYXJlIG90aGVyIGNhbGxlcnM6IEknbSBzZWVpbmcgYGtzd2FwZGAsIGB0cnlfdG9fZnJlZV9wYWdlc2AsIGFuZCBvdGhlcnMgYXMgd2VsbCwgd2hpY2ggYXJlIHN0YW5kYXJkIGNvbXBvbmVudHMhIFxuXG5Ib2xkIG9uLi4udGhpcyBpcyBpbnRlcmVzdGluZy4gVGhlIGZsYWdzIGBza2lwX3NsYWJfcmVjbGFpbWAgYW5kIGBza2lwX2ZpbGVfcmVjbGFpbWAuLi4gdGhleSdyZSAqb25seSogc2V0IHdpdGhpbiBgbm9kZV9yZWNsYWltYCEgVGhhdCdzIGEgc2lnbmlmaWNhbnQgb2JzZXJ2YXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgbXkgdW5kZXJzdGFuZGluZyBoZXJlIGlzIGNvcnJlY3QsIHNvIEknbGwgdmVyaWZ5IHRoaXMgYXNzZXJ0aW9uLiBUaGlzIGNvdWxkIGJlIGNyaXRpY2FsIGZvciBkZXRlcm1pbmluZyB0aGUgaW50ZW5kZWQgc2NvcGUgYW5kIGJlaGF2aW91ciBvZiB0aGVzZSByZWNsYWltIG1lY2hhbmlzbXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk0MjUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6MzIuMDQ3NTQzMTI5WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDAyNTQ5NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJza2lwX3NsYWJfcmVjbGFpbVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz03Nj1zdHJ1Y3Qgc2Nhbl9jb250cm9sIHtcXG4tLVxcbm1tL3Ztc2Nhbi5jLTEyMC1cXHQgKi9cXG5tbS92bXNjYW4uYzoxMjE6XFx0dW5zaWduZWQgaW50IHNraXBfc2xhYl9yZWNsYWltOjE7XFxubW0vdm1zY2FuLmMtMTIyLVxcbi0tXFxubW0vdm1zY2FuLmM9NTEyNz1zdGF0aWMgaW50IHNocmlua19vbmUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTUxNDgtXFxubW0vdm1zY2FuLmM6NTE0OTpcXHRpZiAoIXNjLVxcdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSlcXG5tbS92bXNjYW4uYy01MTUwLVxcdFxcdHNocmlua19zbGFiKHNjLVxcdTAwM2VnZnBfbWFzaywgcGdkYXQtXFx1MDAzZW5vZGVfaWQsIG1lbWNnLCBzYy1cXHUwMDNlcHJpb3JpdHkpO1xcbi0tXFxubW0vdm1zY2FuLmM9NjE5MT1zdGF0aWMgdm9pZCBzaHJpbmtfbm9kZV9tZW1jZ3MocGdfZGF0YV90ICpwZ2RhdCwgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXFxuLS1cXG5tbS92bXNjYW4uYy02MjUyLVxcbm1tL3Ztc2Nhbi5jOjYyNTM6XFx0XFx0aWYgKCFzYy1cXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0pXFxubW0vdm1zY2FuLmMtNjI1NC1cXHRcXHRcXHRzaHJpbmtfc2xhYihzYy1cXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBtZW1jZyxcXG4tLVxcbm1tL3Ztc2Nhbi5jPTc4NjU9c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4ODktXFx0ICpcXG5tbS92bXNjYW4uYzo3ODkwOlxcdCAqIFdoYXQgdG8gcmVjbGFpbSBpcyBnYXRlZCBwZXIgdHlwZSBieSBzYy1cXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0gYW5kXFxubW0vdm1zY2FuLmMtNzg5MS1cXHQgKiBzYy1cXHUwMDNlc2tpcF9maWxlX3JlY2xhaW0uXFxuLS1cXG5tbS92bXNjYW4uYz03OTA4PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03OTU4LVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc5NTk6XFx0c2Muc2tpcF9zbGFiX3JlY2xhaW0gPVxcbm1tL3Ztc2Nhbi5jLTc5NjAtXFx0XFx0bm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFxcdTAwM2M9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjMyLjA5MTU3Mzg1M1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NDU5MDEwNTAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTWVtb3J5IFJlY2xhaW0gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gdHJhY2luZyB0aHJvdWdoIHRoaXMgbmV3IG1lbW9yeSByZWNsYWltIGJlaGF2aW9yLiBJdCBsb29rcyBsaWtlIHRoZSBgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gIGZsYWdzIGFyZSBvbmx5IGV2ZXIgc2V0IHdpdGhpbiB0aGUgYG5vZGVfcmVjbGFpbWAgZnVuY3Rpb24uIFRoYXQncyB0aGUga2V5LiBUaGF0IG1lYW5zIHRoaXMgbmV3IGxvZ2ljLCB0aGUgc2tpcHBpbmcgb2Ygc2xhYiBhbmQgZmlsZSByZWNsYWltLCBpcyBvbmx5IHRyaWdnZXJlZCB3aGVuIGBub2RlX3JlY2xhaW1gIGlzIHNwZWNpZmljYWxseSBjYWxsZWQuXG5cbk5vdywgd2hlcmUgKmRvZXMqIGBub2RlX3JlY2xhaW1gIGdldCBjYWxsZWQgZnJvbT8gUmlnaHQsIGl04oCZcyBjYWxsZWQgZnJvbSBgZ2V0X3BhZ2VfZnJvbV9mcmVlbGlzdGAsIGJ1dCBvbmx5IHdoZW4gYG5vZGVfcmVjbGFpbV9tb2RlYCBpcyBlbmFibGVkLiBBaCwgYW5kIGBub2RlX3JlY2xhaW1fbW9kZWAsIHRoYXQncyBvdXIgZnJpZW5kLCB0aGUgc3lzY3RsIHZhcmlhYmxlIGB2bS56b25lX3JlY2xhaW1fbW9kZWAuIFNvLCBpZiBgdm0uem9uZV9yZWNsYWltX21vZGVgIGlzIGVuYWJsZWQsIHRoZW4gdGhpcyBuZXcgc2tpcHBpbmcgYmVoYXZpb3IgdGFrZXMgZWZmZWN0LlxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBub3cgYmVjb21lczogV2hhdCdzIHRoZSBkZWZhdWx0IHZhbHVlIG9mIGB2bS56b25lX3JlY2xhaW1fbW9kZWA/IElmIGl0J3MgemVybywgdGhlbiB0aGUgbmV3IGxvZ2ljIGlzLCBieSBkZWZhdWx0LCAqbm90KiBpbiBwbGF5IHVubGVzcyBzb21lb25lIGV4cGxpY2l0bHkgc2V0cyBpdC4gSXQncyBwb3NzaWJsZSB0aGF0IGNlcnRhaW4gYXJjaGl0ZWN0dXJlcyBvciBOVU1BIHNldHVwcyBtaWdodCBzZXQgaXQgYXMgYSBkZWZhdWx0LCBzbyB0aGF0J3Mgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQuIExldCdzIGRpZyBpbnRvIHRoZSBkZWZhdWx0cyBhbmQgc2VlIHdoYXTigJlzIGdvaW5nIG9uIGhlcmUuIEkgbmVlZCB0byB2ZXJpZnkgdGhhdCB0aGlzIGlzbuKAmXQgZW5hYmxlZCBieSBkZWZhdWx0IG9uIG15IHRlc3QgcGxhdGZvcm0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwNDYxLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjM3LjU1MDU4NzE2NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTU5ODEwNjkzOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJub2RlX3JlY2xhaW1fbW9kZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiaW5jbHVkZS9saW51eC90b3BvbG9neS5oPTQzPWludCBhcmNoX3VwZGF0ZV9jcHVfdG9wb2xvZ3kodm9pZCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L3RvcG9sb2d5LmgtNTUtICogKGluIHdoYXRldmVyIGFyY2ggc3BlY2lmaWMgbWVhc3VyZW1lbnQgdW5pdHMgcmV0dXJuZWQgYnkgbm9kZV9kaXN0YW5jZSgpKVxcbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaDo1NjogKiBhbmQgbm9kZV9yZWNsYWltX21vZGUgaXMgZW5hYmxlZCB0aGVuIHRoZSBWTSB3aWxsIG9ubHkgY2FsbCBub2RlX3JlY2xhaW0oKVxcbmluY2x1ZGUvbGludXgvdG9wb2xvZ3kuaC01Ny0gKiBvbiBub2RlcyB3aXRoaW4gdGhpcyBkaXN0YW5jZS5cXG4tLVxcbm1tL2ludGVybmFsLmg9MTE0MT1zdGF0aWMgaW5saW5lIHZvaWQgbWxvY2tfZHJhaW5fcmVtb3RlKGludCBjcHUpIHsgfVxcbi0tXFxubW0vaW50ZXJuYWwuaC0xMTQ0LSNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL2ludGVybmFsLmg6MTE0NTpleHRlcm4gaW50IG5vZGVfcmVjbGFpbV9tb2RlO1xcbm1tL2ludGVybmFsLmgtMTE0Ni1cXG4tLVxcbm1tL2ludGVybmFsLmg9MTE0OT1leHRlcm4gaW50IGZpbmRfbmV4dF9iZXN0X25vZGUoaW50IG5vZGUsIG5vZGVtYXNrX3QgKnVzZWRfbm9kZV9tYXNrKTtcXG5tbS9pbnRlcm5hbC5oLTExNTAtI2Vsc2VcXG5tbS9pbnRlcm5hbC5oOjExNTE6I2RlZmluZSBub2RlX3JlY2xhaW1fbW9kZSAwXFxubW0vaW50ZXJuYWwuaC0xMTUyLVxcbi0tXFxubW0vaW50ZXJuYWwuaD0xMTY0PXN0YXRpYyBpbmxpbmUgYm9vbCBub2RlX3JlY2xhaW1fZW5hYmxlZCh2b2lkKVxcbm1tL2ludGVybmFsLmgtMTE2NS17XFxubW0vaW50ZXJuYWwuaDoxMTY2OlxcdC8qIElzIGFueSBub2RlX3JlY2xhaW1fbW9kZSBiaXQgc2V0PyAqL1xcbm1tL2ludGVybmFsLmg6MTE2NzpcXHRyZXR1cm4gbm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiAoUkVDTEFJTV9aT05FfFJFQ0xBSU1fV1JJVEV8UkVDTEFJTV9VTk1BUCk7XFxubW0vaW50ZXJuYWwuaC0xMTY4LX1cXG4tLVxcbm1tL2todWdlcGFnZWQuYz0xMDA0PXN0YXRpYyBib29sIGNvbGxhcHNlX3NjYW5fYWJvcnQoaW50IG5pZCwgc3RydWN0IGNvbGxhcHNlX2NvbnRyb2wgKmNjKVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTEwMDgtXFx0LypcXG5tbS9raHVnZXBhZ2VkLmM6MTAwOTpcXHQgKiBJZiBub2RlX3JlY2xhaW1fbW9kZSBpcyBkaXNhYmxlZCwgdGhlbiBubyBleHRyYSBlZmZvcnQgaXMgbWFkZSB0b1xcbm1tL2todWdlcGFnZWQuYy0xMDEwLVxcdCAqIGFsbG9jYXRlIG1lbW9yeSBsb2NhbGx5Llxcbi0tXFxubW0vcGFnZV9hbGxvYy5jPTM4MDA9Z2V0X3BhZ2VfZnJvbV9mcmVlbGlzdChnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyLCBpbnQgYWxsb2NfZmxhZ3MsXFxuLS1cXG5tbS9wYWdlX2FsbG9jLmMtMzg3Ni1cXHRcXHQgKiBrc3dhcGQgd2FrZXVwcyBvbiBvbmx5IHNvbWUgbm9kZXMuIEF2b2lkIGFjY2lkZW50YWxcXG5tbS9wYWdlX2FsbG9jLmM6Mzg3NzpcXHRcXHQgKiBcXFwibm9kZV9yZWNsYWltX21vZGVcXFwiLWxpa2UgYmVoYXZpb3IgaW4gdGhpcyBjYXNlLlxcbm1tL3BhZ2VfYWxsb2MuYy0zODc4LVxcdFxcdCAqL1xcbi0tXFxubW0vdm1zY2FuLmM9Nzc1Nj1zdGF0aWMgY29uc3Qgc3RydWN0IGN0bF90YWJsZSB2bXNjYW5fc3lzY3RsX3RhYmxlW10gPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03NzY4LVxcdFxcdC5wcm9jbmFtZVxcdD0gXFxcInpvbmVfcmVjbGFpbV9tb2RlXFxcIixcXG5tbS92bXNjYW4uYzo3NzY5OlxcdFxcdC5kYXRhXFx0XFx0PSBcXHUwMDI2bm9kZV9yZWNsYWltX21vZGUsXFxubW0vdm1zY2FuLmM6Nzc3MDpcXHRcXHQubWF4bGVuXFx0XFx0PSBzaXplb2Yobm9kZV9yZWNsYWltX21vZGUpLFxcbm1tL3Ztc2Nhbi5jLTc3NzEtXFx0XFx0Lm1vZGVcXHRcXHQ9IDA2NDQsXFxuLS1cXG5tbS92bXNjYW4uYz03Nzg4PW1vZHVsZV9pbml0KGtzd2FwZF9pbml0KVxcbi0tXFxubW0vdm1zY2FuLmMtNzc5Ni0gKi9cXG5tbS92bXNjYW4uYzo3Nzk3OmludCBub2RlX3JlY2xhaW1fbW9kZSBfX3JlYWRfbW9zdGx5O1xcbm1tL3Ztc2Nhbi5jLTc3OTgtXFxuLS1cXG5tbS92bXNjYW4uYz03ODMzPXN0YXRpYyB1bnNpZ25lZCBsb25nIG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQpXFxuLS1cXG5tbS92bXNjYW4uYy03ODQzLVxcdCAqL1xcbm1tL3Ztc2Nhbi5jOjc4NDQ6XFx0aWYgKG5vZGVfcmVjbGFpbV9tb2RlIFxcdTAwMjYgUkVDTEFJTV9VTk1BUClcXG5tbS92bXNjYW4uYy03ODQ1LVxcdFxcdG5yX3BhZ2VjYWNoZV9yZWNsYWltYWJsZSA9IG5vZGVfcGFnZV9zdGF0ZShwZ2RhdCwgTlJfRklMRV9QQUdFUyk7XFxuLS1cXG5tbS92bXNjYW4uYz03OTA4PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03OTE3LVxcdFxcdC5wcmlvcml0eSA9IE5PREVfUkVDTEFJTV9QUklPUklUWSxcXG5tbS92bXNjYW4uYzo3OTE4OlxcdFxcdC5tYXlfd3JpdGVwYWdlID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1dSSVRFKSxcXG5tbS92bXNjYW4uYzo3OTE5OlxcdFxcdC5tYXlfdW5tYXAgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcXHUwMDI2IFJFQ0xBSU1fVU5NQVApLFxcbm1tL3Ztc2Nhbi5jLTc5MjAtXFx0XFx0Lm1heV9zd2FwID0gMSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6MzkuMTQ4Njk4NzQ0WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjgxMjgwNzM0MTMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBSZWNsYWltIFBhdGgqKlxuXG5Pa2F5LCBzbyB0aGUgYG5vZGVfcmVjbGFpbV9tb2RlYCBkZWZhdWx0cyB0byAwLCB3aGljaCBpcyBleHBlY3RlZC4gSG93ZXZlciwgc3l6a2FsbGVyIGNhbiByZWFkaWx5IG1hbmlwdWxhdGUgdGhpcyB0aHJvdWdoIGB2bS56b25lX3JlY2xhaW1fbW9kZWAsIGFuZCB0aGF0J3MgdGhlIGtleS4gSSBzZWUgdGhhdCBgbm9kZV9yZWNsYWltYCBnZXRzIHRyaWdnZXJlZCB3aXRoaW4gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIHdoZW4gYG5vZGVfcmVjbGFpbV9lbmFibGVkKClgIHJldHVybnMgdHJ1ZS4gQW5kIGBub2RlX3JlY2xhaW1fZW5hYmxlZCgpYCBpcyBkaXJlY3RseSB0aWVkIHRvIHRoZSBiaXRzIHNldCBpbiBgbm9kZV9yZWNsYWltX21vZGVgLiBUaGVyZWZvcmUsIGJ5IHNldHRpbmcgYHZtLnpvbmVfcmVjbGFpbV9tb2RlYCwgc3l6a2FsbGVyIGNhbiBmb3JjZSBgbm9kZV9yZWNsYWltYCB0byBleGVjdXRlIGR1cmluZyBwYWdlIGFsbG9jYXRpb24uIFRoYXQncyBhIGNsZWFyIHBhdGggdG8gdGVzdGluZyBhbmQgZXhwbG9pdGluZyB0aGlzIGJlaGF2aW9yLlxuXG5NeSBpbW1lZGlhdGUgZm9jdXMgbm93IHNoaWZ0cyB0byB0aGUgZnVuY3Rpb25zIGludm9sdmVkLiBgbm9kZV9yZWNsYWltYCBpcyB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYXMgSSBzdXNwZWN0ZWQuIEl0IGNhbGxzIGBzaHJpbmtfbm9kZWAsIHdoaWNoIGluIHR1cm4gbGVhZHMgdG8gYSBjYXNjYWRlIHRocm91Z2ggdGhlIHN0YXRpYyBmdW5jdGlvbnM6IGBnZXRfc2Nhbl9jb3VudGAsIGBzY2FuX2ZvbGlvc2AgYWxsIGV2ZW50dWFsbHkgZmVlZGluZyBpbnRvIGBzaHJpbmtfYWN0aXZlX2xpc3RgIG9yIGBzaHJpbmtfaW5hY3RpdmVfbGlzdGAuIGBzaHJpbmtfb25lYCBhbmQgYHNocmlua19ub2RlX21lbWNnc2AgYXJlIGFsc28gc3RhdGljLiBTaW5jZSBpdCdzIHRoZSBvbmx5IG5vbi1zdGF0aWMgZnVuY3Rpb24sIGBub2RlX3JlY2xhaW1gIGlzIGRlZmluaXRlbHkgdGhlIHRhcmdldC5cblxuSSBuZWVkIHRvIGNvbmZpcm0gdGhhdCBgbm9kZV9yZWNsYWltYCBpcyBnbG9iYWxseSBhY2Nlc3NpYmxlLiBBIHF1aWNrIGNoZWNrIHJldmVhbHMgaXQncyBkZWNsYXJlZCBnbG9iYWxseSBpbiBgbW0vaW50ZXJuYWwuaGAsIHNvIHRoYXQncyBnb29kLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgYW0gbm90IG1pc3NpbmcgYW55dGhpbmcgZWxzZS4gTm8sIHRoZSBwYXRjaCBvbmx5IG1vZGlmaWVzIGBub2RlX3JlY2xhaW1gIGFuZCBzdGF0aWMgZnVuY3Rpb25zIGluIGBtbS92bXNjYW4uY2AuIFNvIGl0J3MgY29uZmlybWVkLlxuXG5OZXh0LCBJIG5lZWQgdG8gY2hlY2sgYENPTkZJR19OVU1BYC4gU3l6a2FsbGVyIHVzdWFsbHkgZW5hYmxlcyBOVU1BIGJ5IGRlZmF1bHQsIGJ1dCBJIHNob3VsZCBleHBsaWNpdGx5IGxpc3QgaXQgaW4gYEVuYWJsZUNvbmZpZ3NgIGp1c3QgdG8gYmUgY2VydGFpbi5cblxuT2theSwgbGV0IG1lIGp1c3QgY29uZmlybSB0aGF0IGBub2RlX3JlY2xhaW1gIGlzIHRoZSBzb2xlIG5vbi1zdGF0aWMgZnVuY3Rpb24gZXhwb3NlZCBpbiB0aGUgcmVsZXZhbnQgY29kZS4gWWVwLCBpdCBpcy5cblxuSG9sZCBvbiBhIHNlY29uZC4gRG9lcyBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgYWxzbyBhY3QgYXMgYW4gZW50cnkgcG9pbnQgdG8gYF9fbm9kZV9yZWNsYWltYD8gTm8sIGl0IGNhbGxzIGBfX25vZGVfcmVjbGFpbWAgZGlyZWN0bHkuIFNvIGBub2RlX3JlY2xhaW1gIGlzIGluZGVlZCB0aGUgbWFpbiBlbnRyeSBwb2ludCwgYW5kIHRoYXQncyB0aGUgZnVuY3Rpb24gSSB3YW50IHRvIGZvY3VzIG9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjA4MywiT3V0cHV0VG9rZW5zIjozMSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMjo0Ny4yNzY3NzY0OTdaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNzAzNjc1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fbm9kZV9yZWNsYWltXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3Ztc2Nhbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3Ztc2Nhbi5jPTc4MzM9c3RhdGljIHVuc2lnbmVkIGxvbmcgbm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUoc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdClcXG4tLVxcbm1tL3Ztc2Nhbi5jLTc4NjQtICovXFxubW0vdm1zY2FuLmM6Nzg2NTpzdGF0aWMgdW5zaWduZWQgbG9uZyBfX25vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LFxcbm1tL3Ztc2Nhbi5jLTc4NjYtXFx0XFx0XFx0XFx0ICAgIHVuc2lnbmVkIGxvbmcgbnJfcGFnZXMsXFxuLS1cXG5tbS92bXNjYW4uYz03OTA4PXVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuLS1cXG5tbS92bXNjYW4uYy03OTY0LVxcbm1tL3Ztc2Nhbi5jOjc5NjU6XFx0cmV0ID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIG5yX3BhZ2VzLCBcXHUwMDI2c2MpO1xcbm1tL3Ztc2Nhbi5jLTc5NjYtXFx0Y2xlYXJfYml0X3VubG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncyk7XFxuLS1cXG5tbS92bXNjYW4uYy03OTc3LVxcbm1tL3Ztc2Nhbi5jOjc5Nzg6c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG5tbS92bXNjYW4uYy03OTc5LVxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbi0tXFxubW0vdm1zY2FuLmM9Nzk5OD1pbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuLS1cXG5tbS92bXNjYW4uYy04MDkwLVxcbm1tL3Ztc2Nhbi5jOjgwOTE6XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxubW0vdm1zY2FuLmMtODA5Mi1cXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6NDcuMzIwNDgzNTMyWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzNDU2NzgxNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGVidWdnaW5nIGEgUG90ZW50aWFsIFJlLWRlY2xhcmF0aW9uKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4uLiBpcyBgX19ub2RlX3JlY2xhaW1gIGRlZmluZWQgdHdpY2U/IFRoYXQncyBpbW1lZGlhdGVseSBzdXNwZWN0LiBXYWl0LCBubywgaXQgbG9va3MgbGlrZSBvbmUgb2YgdGhlbSBpcyBqdXN0IGEgZm9yd2FyZCBkZWNsYXJhdGlvbiwgcGVyaGFwcyBmb3IgYSBjaXJjdWxhciBkZXBlbmRlbmN5IG9yIHNvbWV0aGluZyBsaWtlIHRoYXQuIEFsd2F5cyBnb29kIHRvIGRvdWJsZS1jaGVjayB0aGVzZSB0aGluZ3MgYmVmb3JlIGp1bXBpbmcgdG8gY29uY2x1c2lvbnMuIExldCBtZSBqdXN0IGNvbmZpcm0gdGhhdCBieSB0YWtpbmcgYSBwZWVrIGF0IGxpbmUgNzk3OC4gVGhhdCBzaG91bGQgY2xhcmlmeSB0aGUgc2l0dWF0aW9uIGFuZCBwcmV2ZW50IG1lIGZyb20gZ29pbmcgZG93biB0aGUgd3JvbmcgZGVidWdnaW5nIHBhdGguXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzNTAwLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6NTAuNjY2MTYzNzIzWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM1MDk0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTcwLFxuICBcIkxpbmVDb3VudFwiOiAzMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTcwOlxcdFxcdGVsc2VcXG43OTcxOlxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50KFBHU0NBTl9aT05FX1JFQ0xBSU1fRkFJTEVEKTtcXG43OTcyOlxcdFxcbjc5NzM6XFx0XFx0cmV0dXJuIHJldDtcXG43OTc0OlxcdH1cXG43OTc1OlxcdFxcbjc5NzY6XFx0I2Vsc2VcXG43OTc3OlxcdFxcbjc5Nzg6XFx0c3RhdGljIHVuc2lnbmVkIGxvbmcgX19ub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCxcXG43OTc5OlxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIG5yX3BhZ2VzLFxcbjc5ODA6XFx0XFx0XFx0XFx0XFx0ICAgIHN0cnVjdCBzY2FuX2NvbnRyb2wgKnNjKVxcbjc5ODE6XFx0e1xcbjc5ODI6XFx0XFx0cmV0dXJuIDA7XFxuNzk4MzpcXHR9XFxuNzk4NDpcXHRcXG43OTg1OlxcdCNlbmRpZlxcbjc5ODY6XFx0XFxuNzk4NzpcXHRlbnVtIHtcXG43OTg4OlxcdFxcdE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1MgPSAwLFxcbjc5ODk6XFx0XFx0TUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsXFxuNzk5MDpcXHRcXHRNRU1PUllfUkVDTEFJTV9OVUxMLFxcbjc5OTE6XFx0fTtcXG43OTkyOlxcdHN0YXRpYyBjb25zdCBtYXRjaF90YWJsZV90IHRva2VucyA9IHtcXG43OTkzOlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTUywgXFxcInN3YXBwaW5lc3M9JWRcXFwifSxcXG43OTk0OlxcdFxcdHsgTUVNT1JZX1JFQ0xBSU1fU1dBUFBJTkVTU19NQVgsIFxcXCJzd2FwcGluZXNzPW1heFxcXCJ9LFxcbjc5OTU6XFx0XFx0eyBNRU1PUllfUkVDTEFJTV9OVUxMLCBOVUxMIH0sXFxuNzk5NjpcXHR9O1xcbjc5OTc6XFx0XFxuNzk5ODpcXHRpbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxuNzk5OTpcXHRcXHRcXHRcXHQgICBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHBnX2RhdGFfdCAqcGdkYXQpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIyOjUwLjY2NjUxNTg1M1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NjQzOTU2MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBOVU1BLVJlbGF0ZWQgTWVtb3J5IFJlY2xhaW0gTG9naWMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IEkgc2VlIHRoYXQgYF9fbm9kZV9yZWNsYWltYCBpcyBlc3NlbnRpYWxseSBhIHBsYWNlaG9sZGVyLCBvciBzdHViLCBpZiBgQ09ORklHX05VTUFgIGlzbid0IGVuYWJsZWQuIFRoYXQgbWFrZXMgc2Vuc2U7IG5vIE5VTUEsIG5vIG5vZGUtc3BlY2lmaWMgcmVjbGFpbS4gQnV0IHdhaXQuLi4gSSdtIGFsc28gc2VlaW5nIHRoaXMgc2FtZSBzdHViIGRlZmluaXRpb24gZm9yIGBub2RlX3JlY2xhaW1gIHdpdGhpbiBgbW0vaW50ZXJuYWwuaGAuIENvbmZ1c2luZywgYnV0IHRoZSBwb2ludCBpcyBjbGVhciwgaXQgZG9lcyBub3RoaW5nIHdoZW4gTlVNQSBpcyBub3QgY29uZmlndXJlZC5cblxuTm93LCBteSBtaW5kIGdvZXMgdG8gYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gLiBUaGlzIHNlZW1zIHRvIGJlICpvdXRzaWRlKiB0aGUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gZm9yIGBDT05GSUdfTlVNQWAuIEhvbGQgb24uLi4geWVzLCB0aGF0J3MgcmlnaHQuIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpcyBhdmFpbGFibGUsIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciB3ZSBoYXZlIE5VTUEgZW5hYmxlZC4gVGhhdCBjYW4ndCBiZSByaWdodCwgY2FuIGl0P1xuXG5TbyBpZiBOVU1BIGlzbid0IGVuYWJsZWQsIGBfX25vZGVfcmVjbGFpbWAgaXMganVzdCB0aGF0IHN0dWIgZnVuY3Rpb24sIHJldHVybmluZyAwLiBUaGF0IG11c3QgbWVhbiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAsIHdoZW4gTlVNQSBpcyBub3QgcHJlc2VudCwgd2lsbCBlbmQgdXAgY2FsbGluZyB0aGF0IHN0dWIgYW5kIGp1c3QgcmV0dXJuaW5nIHplcm8uIEl0IGlzIGVzc2VudGlhbGx5IGEgbm8tb3AgaW4gdGhhdCBjYXNlLiBJJ20gd29uZGVyaW5nIHdoeSB3ZSBkZWZpbmUgdGhlIGZ1bmN0aW9uIGlmIGl0IGhhcyBubyBmdW5jdGlvbmFsaXR5LlxuXG5XYWl0IGEgc2Vjb25kLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBiYWNrLiBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAgaXMgY2FsbGVkIGZyb20gYHJlY2xhaW1fc3RvcmVgLCBpc24ndCBpdD8gTGV0IG1lIGp1c3QgZG91YmxlIGNoZWNrIGhvdyBgcmVjbGFpbV9zdG9yZWAgaXMgZGVmaW5lZCwgc2luY2UgdGhhdCBpcyB1bmRlciB0aGUgYHN5c2ZzYCBhbmQgYE5VTUFgIGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gQWgsIGJ1dCB3YWl0LCBgcmVjbGFpbV9zdG9yZWAgaXMgZGVmaW5lZCBieSB0aG9zZSBjb25kaXRpb25zISBJIG5lZWQgdG8gcmUtZXZhbHVhdGUgaG93IGFsbCBvZiB0aGlzIHdvcmtzLCBub3cuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0MTA4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjE2LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6NTYuMzEwNDc0MDA1WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQzNDYyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA4MTQ1LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI4MTQ1OlxcdFxcdFxcdGNvdW50X3ZtX2V2ZW50cyhVTkVWSUNUQUJMRV9QR1NDQU5ORUQsIHBnc2Nhbm5lZCk7XFxuODE0NjpcXHRcXHR9XFxuODE0NzpcXHR9XFxuODE0ODpcXHRFWFBPUlRfU1lNQk9MX0dQTChjaGVja19tb3ZlX3VuZXZpY3RhYmxlX2ZvbGlvcyk7XFxuODE0OTpcXHRcXG44MTUwOlxcdCNpZiBkZWZpbmVkKENPTkZJR19TWVNGUykgXFx1MDAyNlxcdTAwMjYgZGVmaW5lZChDT05GSUdfTlVNQSlcXG44MTUxOlxcdHN0YXRpYyBzc2l6ZV90IHJlY2xhaW1fc3RvcmUoc3RydWN0IGRldmljZSAqZGV2LFxcbjgxNTI6XFx0XFx0XFx0XFx0ICAgICBzdHJ1Y3QgZGV2aWNlX2F0dHJpYnV0ZSAqYXR0cixcXG44MTUzOlxcdFxcdFxcdFxcdCAgICAgY29uc3QgY2hhciAqYnVmLCBzaXplX3QgY291bnQpXFxuODE1NDpcXHR7XFxuODE1NTpcXHRcXHRpbnQgcmV0LCBuaWQgPSBkZXYtXFx1MDAzZWlkO1xcbjgxNTY6XFx0XFxuODE1NzpcXHRcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxuODE1ODpcXHRcXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XFxuODE1OTpcXHR9XFxuODE2MDpcXHRcXG44MTYxOlxcdHN0YXRpYyBERVZJQ0VfQVRUUl9XTyhyZWNsYWltKTtcXG44MTYyOlxcdGludCByZWNsYWltX3JlZ2lzdGVyX25vZGUoc3RydWN0IG5vZGUgKm5vZGUpXFxuODE2MzpcXHR7XFxuODE2NDpcXHRcXHRyZXR1cm4gZGV2aWNlX2NyZWF0ZV9maWxlKFxcdTAwMjZub2RlLVxcdTAwM2VkZXYsIFxcdTAwMjZkZXZfYXR0cl9yZWNsYWltKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjI6NTYuMzEwOTEwMDQ1WiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQyNjY1MDc2OTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRob3NlIHRob3VnaHRzIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmUsIHVzaW5nIHRoZSBmaXJzdCBwZXJzb24gYW5kIHByb3ZpZGluZyBhIFwiZnVsc29tZVwiIGV4cGxhbmF0aW9uOlxuXG4qKk5hdmlnYXRpbmcgTlVNQS1Bd2FyZSBSZWNsYWltIExvZ2ljKipcblxuUmlnaHQsIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYHJlY2xhaW1fc3RvcmVgIGZ1bmN0aW9uLCBhbmQgaXQncyBmbGFnZ2VkIGFzIGJlaW5nIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYENPTkZJR19OVU1BYC4gVGhhdCdzIG5vdCB1bmV4cGVjdGVkOyBOVU1BIHN5c3RlbXMgb2Z0ZW4gaGF2ZSBzcGVjaWFsaXplZCBtZW1vcnkgbWFuYWdlbWVudCBzdHJhdGVnaWVzLCBzbyB0aGUgY29kZSB3b3VsZCBiZSBkaWZmZXJlbnQuIEl0IG1ha2VzIHNlbnNlIHRoYXQgcmVjbGFpbSBmdW5jdGlvbnMgd291bGQgYmUgdGllZCB0byB0aGF0LiBIb3dldmVyLi4uICp0aGlzIGlzIHdoZXJlIEkgbmVlZCB0byBkaWcgZGVlcGVyLiogVGhlIGNvbW1lbnQgc3VnZ2VzdHMgdGhhdCBgcmVjbGFpbV9zdG9yZWAgaXMgYWxzbyBjYWxsZWQgZnJvbSBvdXRzaWRlIHRoZSBOVU1BIGNvbnRleHQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHRoZSB1c2UgY2FzZSBmb3IgdGhlc2UgXCJvdGhlclwiIGNhbGxzIHRvIGVuc3VyZSB0aGUgbWVtb3J5IHJlY2xhaW0gc3RyYXRlZ3kgaGFuZGxlcyBib3RoIE5VTUEgYW5kIG5vbi1OVU1BIHNjZW5hcmlvcyBwcm9wZXJseS4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gZW5zdXJlIHRoZSBjb2RlJ3Mgcm9idXN0bmVzcy4gQXJlIHRoZXJlIHNwZWNpZmljIHNpdHVhdGlvbnMsIGxpa2Ugb2ZmbGluaW5nIG5vZGVzLCB0aGF0IHVzZSB0aGUgc2hhcmVkIGNvZGU/IElzIHRoZXJlIGEgc3VidGxlIGJ1ZyBsdXJraW5nIGR1ZSB0byB0aGlzIGR1YWxpdHk/IEkgbmVlZCB0byB0cmFjZSBiYWNrIHRob3NlIGNyb3NzLWNhbGxzIGFuZCB1bmRlcnN0YW5kIHRoZWlyIHB1cnBvc2UuIEknbSBnb2luZyB0byBoYXZlIHRvIGRpdmUgaW50byB0aGUgY2FsbCBncmFwaHMgYW5kIGZpZ3VyZSBvdXQgaG93IHRoZXkgcmVsYXRlIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTA1MiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjM6MDAuNTc3NDE5NzYzWiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDQ0MTg2MDcyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInVzZXJfcHJvYWN0aXZlX3JlY2xhaW1cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2ludGVybmFsLmg9Njk5PWV4dGVybiB2b2lkIHJlY2xhaW1fdGhyb3R0bGUocGdfZGF0YV90ICpwZ2RhdCwgZW51bSB2bXNjYW5fdGhyb3R0bGVfc3RhdGUgcmVhc29uKTtcXG5tbS9pbnRlcm5hbC5oOjcwMDppbnQgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShjaGFyICpidWYsXFxubW0vaW50ZXJuYWwuaC03MDEtXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDcyPXN0YXRpYyBzc2l6ZV90IG1lbW9yeV9yZWNsYWltKHN0cnVjdCBrZXJuZnNfb3Blbl9maWxlICpvZiwgY2hhciAqYnVmLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwNzctXFxubW0vbWVtY29udHJvbC5jOjUwNzg6XFx0cmV0ID0gdXNlcl9wcm9hY3RpdmVfcmVjbGFpbShidWYsIG1lbWNnLCBOVUxMKTtcXG5tbS9tZW1jb250cm9sLmMtNTA3OS1cXHRpZiAocmV0KVxcbi0tXFxubW0vdm1zY2FuLmM9Nzk5Mj1zdGF0aWMgY29uc3QgbWF0Y2hfdGFibGVfdCB0b2tlbnMgPSB7XFxuLS1cXG5tbS92bXNjYW4uYy03OTk3LVxcbm1tL3Ztc2Nhbi5jOjc5OTg6aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbm1tL3Ztc2Nhbi5jLTc5OTktXFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbi0tXFxubW0vdm1zY2FuLmM9ODE1MT1zdGF0aWMgc3NpemVfdCByZWNsYWltX3N0b3JlKHN0cnVjdCBkZXZpY2UgKmRldixcXG4tLVxcbm1tL3Ztc2Nhbi5jLTgxNTYtXFxubW0vdm1zY2FuLmM6ODE1NzpcXHRyZXQgPSB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltKChjaGFyICopYnVmLCBOVUxMLCBOT0RFX0RBVEEobmlkKSk7XFxubW0vdm1zY2FuLmMtODE1OC1cXHRyZXR1cm4gcmV0ID8gcmV0IDogY291bnQ7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIzOjAyLjAyMTYxNjA4NVoiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MTczODMyOTA4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldCwgdGhpbmtpbmcgbGlrZSBhbiBleHBlcnQ6XG5cbioqRGl2aW5nIGludG8gdGhlIE1lbW9yeSBSZWNsYW1hdGlvbiBQcm9jZXNzKipcblxuT2theSwgc28gSSBzZWUgYHVzZXJfcHJvYWN0aXZlX3JlY2xhaW1gIGlzIGJlaW5nIGludm9rZWQgZnJvbSBgbWVtb3J5X3JlY2xhaW1gIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gVGhhdCBpbW1lZGlhdGVseSB0ZWxscyBtZSB0aGlzIGlzIHRoZSBjZ3JvdXAgdjIgYG1lbW9yeS5yZWNsYWltYCBpbnRlcmZhY2UgYXQgcGxheS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGRldGFpbHMgb2YgdGhpcyBwcm9hY3RpdmUgcmVjbGFtYXRpb24sIGFuZCB3aGVyZSBpdCdzIGJlaW5nIHRyaWdnZXJlZCBmcm9tLlxuXG5Ob3csIG15IG5leHQgc3RlcCBpcyBjbGVhcjogSSBuZWVkIHRvIGRpZyBpbnRvIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBpdHNlbGYuIEknbSBoZWFkaW5nIG92ZXIgdG8gYG1tL3Ztc2Nhbi5jYCB0byBzZWUgd2hhdCdzIGFjdHVhbGx5IGhhcHBlbmluZyB3aXRoaW4gdGhhdCBmdW5jdGlvbi4gSSdtIGJldHRpbmcgdGhpcyBpcyB3aGVyZSB0aGUgY29yZSBsb2dpYyBvZiB0aGUgcHJvYWN0aXZlIHJlY2xhaW0gaXMgaW1wbGVtZW50ZWQsIHNvIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgaXQncyBkb2luZyB3aXRoIHBhZ2VzIGFuZCB0aGUgaW1wbGljYXRpb25zIGZvciB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTc2NCwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIzOjA2LjE5NTQ1MTcxM1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyOTg0MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vdm1zY2FuLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNzk5OCxcbiAgXCJMaW5lQ291bnRcIjogMTAwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjc5OTg6XFx0aW50IHVzZXJfcHJvYWN0aXZlX3JlY2xhaW0oY2hhciAqYnVmLFxcbjc5OTk6XFx0XFx0XFx0XFx0ICAgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBwZ19kYXRhX3QgKnBnZGF0KVxcbjgwMDA6XFx0e1xcbjgwMDE6XFx0XFx0dW5zaWduZWQgaW50IG5yX3JldHJpZXMgPSBNQVhfUkVDTEFJTV9SRVRSSUVTO1xcbjgwMDI6XFx0XFx0dW5zaWduZWQgbG9uZyBucl90b19yZWNsYWltLCBucl9yZWNsYWltZWQgPSAwO1xcbjgwMDM6XFx0XFx0aW50IHN3YXBwaW5lc3MgPSAtMTtcXG44MDA0OlxcdFxcdGNoYXIgKm9sZF9idWYsICpzdGFydDtcXG44MDA1OlxcdFxcdHN1YnN0cmluZ190IGFyZ3NbTUFYX09QVF9BUkdTXTtcXG44MDA2OlxcdFxcdGdmcF90IGdmcF9tYXNrID0gR0ZQX0tFUk5FTDtcXG44MDA3OlxcdFxcbjgwMDg6XFx0XFx0aWYgKCFidWYgfHwgKCFtZW1jZyBcXHUwMDI2XFx1MDAyNiAhcGdkYXQpIHx8IChtZW1jZyBcXHUwMDI2XFx1MDAyNiBwZ2RhdCkpXFxuODAwOTpcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDEwOlxcdFxcbjgwMTE6XFx0XFx0YnVmID0gc3Ryc3RyaXAoYnVmKTtcXG44MDEyOlxcdFxcbjgwMTM6XFx0XFx0b2xkX2J1ZiA9IGJ1ZjtcXG44MDE0OlxcdFxcdG5yX3RvX3JlY2xhaW0gPSBtZW1wYXJzZShidWYsIFxcdTAwMjZidWYpIC8gUEFHRV9TSVpFO1xcbjgwMTU6XFx0XFx0aWYgKGJ1ZiA9PSBvbGRfYnVmKVxcbjgwMTY6XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuODAxNzpcXHRcXG44MDE4OlxcdFxcdGJ1ZiA9IHN0cnN0cmlwKGJ1Zik7XFxuODAxOTpcXHRcXG44MDIwOlxcdFxcdHdoaWxlICgoc3RhcnQgPSBzdHJzZXAoXFx1MDAyNmJ1ZiwgXFxcIiBcXFwiKSkgIT0gTlVMTCkge1xcbjgwMjE6XFx0XFx0XFx0aWYgKCFzdHJsZW4oc3RhcnQpKVxcbjgwMjI6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuODAyMzpcXHRcXHRcXHRzd2l0Y2ggKG1hdGNoX3Rva2VuKHN0YXJ0LCB0b2tlbnMsIGFyZ3MpKSB7XFxuODAyNDpcXHRcXHRcXHRjYXNlIE1FTU9SWV9SRUNMQUlNX1NXQVBQSU5FU1M6XFxuODAyNTpcXHRcXHRcXHRcXHRpZiAobWF0Y2hfaW50KFxcdTAwMjZhcmdzWzBdLCBcXHUwMDI2c3dhcHBpbmVzcykpXFxuODAyNjpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDI3OlxcdFxcdFxcdFxcdGlmIChzd2FwcGluZXNzIFxcdTAwM2MgTUlOX1NXQVBQSU5FU1MgfHxcXG44MDI4OlxcdFxcdFxcdFxcdCAgICBzd2FwcGluZXNzIFxcdTAwM2UgTUFYX1NXQVBQSU5FU1MpXFxuODAyOTpcXHRcXHRcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG44MDMwOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjgwMzE6XFx0XFx0XFx0Y2FzZSBNRU1PUllfUkVDTEFJTV9TV0FQUElORVNTX01BWDpcXG44MDMyOlxcdFxcdFxcdFxcdHN3YXBwaW5lc3MgPSBTV0FQUElORVNTX0FOT05fT05MWTtcXG44MDMzOlxcdFxcdFxcdFxcdGJyZWFrO1xcbjgwMzQ6XFx0XFx0XFx0ZGVmYXVsdDpcXG44MDM1OlxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjgwMzY6XFx0XFx0XFx0fVxcbjgwMzc6XFx0XFx0fVxcbjgwMzg6XFx0XFxuODAzOTpcXHRcXHR3aGlsZSAobnJfcmVjbGFpbWVkIFxcdTAwM2MgbnJfdG9fcmVjbGFpbSkge1xcbjgwNDA6XFx0XFx0XFx0LyogV2lsbCBjb252ZXJnZSBvbiB6ZXJvLCBidXQgcmVjbGFpbSBlbmZvcmNlcyBhIG1pbmltdW0gKi9cXG44MDQxOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYmF0Y2hfc2l6ZSA9IChucl90b19yZWNsYWltIC0gbnJfcmVjbGFpbWVkKSAvIDQ7XFxuODA0MjpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIHJlY2xhaW1lZDtcXG44MDQzOlxcdFxcbjgwNDQ6XFx0XFx0XFx0LypcXG44MDQ1OlxcdFxcdFxcdCAqIFJldHVybiAtRVJFU1RBUlRTWVMgdG8gYWxsb3cgdGhlIGZyZWV6ZXIgdG8gaW50ZXJydXB0IHRoZVxcbjgwNDY6XFx0XFx0XFx0ICogdGFzay4gVGhlIHN5c2NhbGwgd2lsbCBiZSB0cmFuc3BhcmVudGx5IHJlc3RhcnRlZCB1cG9uXFxuODA0NzpcXHRcXHRcXHQgKiByZXN1bWUuIEZvciByZWFsIHNpZ25hbHMsIGl0IGVpdGhlciByZXN0YXJ0cyB0aGUgc3lzY2FsbFxcbjgwNDg6XFx0XFx0XFx0ICogKGlmIFNBX1JFU1RBUlQgaXMgc2V0KSBvciBpcyBjb252ZXJ0ZWQgdG8gLUVJTlRSIGJ5IHRoZVxcbjgwNDk6XFx0XFx0XFx0ICogc2lnbmFsIGxheWVyLlxcbjgwNTA6XFx0XFx0XFx0ICovXFxuODA1MTpcXHRcXHRcXHRpZiAoc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuODA1MjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVSRVNUQVJUU1lTO1xcbjgwNTM6XFx0XFxuODA1NDpcXHRcXHRcXHQvKiBjZ3JvdXBfcm1kaXIoKSB3YWl0cyBmb3IgdXMgd2l0aCBjZ3JvdXBfbXV0ZXggaGVsZC4gKi9cXG44MDU1OlxcdFxcdFxcdGlmIChtZW1jZyBcXHUwMDI2XFx1MDAyNiBtZW1jZ19pc19keWluZyhtZW1jZykpXFxuODA1NjpcXHRcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG44MDU3OlxcdFxcbjgwNTg6XFx0XFx0XFx0LypcXG44MDU5OlxcdFxcdFxcdCAqIFRoaXMgaXMgdGhlIGZpbmFsIGF0dGVtcHQsIGRyYWluIHBlcmNwdSBscnUgY2FjaGVzIGluIHRoZVxcbjgwNjA6XFx0XFx0XFx0ICogaG9wZSBvZiBpbnRyb2R1Y2luZyBtb3JlIGV2aWN0YWJsZSBwYWdlcy5cXG44MDYxOlxcdFxcdFxcdCAqL1xcbjgwNjI6XFx0XFx0XFx0aWYgKCFucl9yZXRyaWVzKVxcbjgwNjM6XFx0XFx0XFx0XFx0bHJ1X2FkZF9kcmFpbl9hbGwoKTtcXG44MDY0OlxcdFxcbjgwNjU6XFx0XFx0XFx0aWYgKG1lbWNnKSB7XFxuODA2NjpcXHRcXHRcXHRcXHR1bnNpZ25lZCBpbnQgcmVjbGFpbV9vcHRpb25zO1xcbjgwNjc6XFx0XFxuODA2ODpcXHRcXHRcXHRcXHRyZWNsYWltX29wdGlvbnMgPSBNRU1DR19SRUNMQUlNX01BWV9TV0FQIHxcXG44MDY5OlxcdFxcdFxcdFxcdFxcdFxcdCAgTUVNQ0dfUkVDTEFJTV9QUk9BQ1RJVkU7XFxuODA3MDpcXHRcXHRcXHRcXHRyZWNsYWltZWQgPSB0cnlfdG9fZnJlZV9tZW1fY2dyb3VwX3BhZ2VzKG1lbWNnLFxcbjgwNzE6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IGJhdGNoX3NpemUsIGdmcF9tYXNrLFxcbjgwNzI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IHJlY2xhaW1fb3B0aW9ucyxcXG44MDczOlxcdFxcdFxcdFxcdFxcdFxcdFxcdCBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFxcdTAwMjZzd2FwcGluZXNzKTtcXG44MDc0OlxcdFxcdFxcdH0gZWxzZSB7XFxuODA3NTpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbjgwNzY6XFx0XFx0XFx0XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxuODA3NzpcXHRcXHRcXHRcXHRcXHQucmVjbGFpbV9pZHggPSBnZnBfem9uZShnZnBfbWFzayksXFxuODA3ODpcXHRcXHRcXHRcXHRcXHQucHJvYWN0aXZlX3N3YXBwaW5lc3MgPSBzd2FwcGluZXNzID09IC0xID8gTlVMTCA6IFxcdTAwMjZzd2FwcGluZXNzLFxcbjgwNzk6XFx0XFx0XFx0XFx0XFx0LnByaW9yaXR5ID0gREVGX1BSSU9SSVRZLFxcbjgwODA6XFx0XFx0XFx0XFx0XFx0Lm1heV93cml0ZXBhZ2UgPSAxLFxcbjgwODE6XFx0XFx0XFx0XFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgoYmF0Y2hfc2l6ZSwgU1dBUF9DTFVTVEVSX01BWCksXFxuODA4MjpcXHRcXHRcXHRcXHRcXHQubWF5X3VubWFwID0gMSxcXG44MDgzOlxcdFxcdFxcdFxcdFxcdC5tYXlfc3dhcCA9IDEsXFxuODA4NDpcXHRcXHRcXHRcXHRcXHQucHJvYWN0aXZlID0gMSxcXG44MDg1OlxcdFxcdFxcdFxcdH07XFxuODA4NjpcXHRcXG44MDg3OlxcdFxcdFxcdFxcdGlmICh0ZXN0X2FuZF9zZXRfYml0X2xvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsXFxuODA4ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgIFxcdTAwMjZwZ2RhdC1cXHUwMDNlZmxhZ3MpKVxcbjgwODk6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FQlVTWTtcXG44MDkwOlxcdFxcbjgwOTE6XFx0XFx0XFx0XFx0cmVjbGFpbWVkID0gX19ub2RlX3JlY2xhaW0ocGdkYXQsIGJhdGNoX3NpemUsIFxcdTAwMjZzYyk7XFxuODA5MjpcXHRcXHRcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG44MDkzOlxcdFxcdFxcdH1cXG44MDk0OlxcdFxcbjgwOTU6XFx0XFx0XFx0aWYgKCFyZWNsYWltZWQgXFx1MDAyNlxcdTAwMjYgIW5yX3JldHJpZXMtLSlcXG44MDk2OlxcdFxcdFxcdFxcdHJldHVybiAtRUFHQUlOO1xcbjgwOTc6XFx0XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIzOjA2LjE5NTc1MTUxM1oiLCJTZXEiOjI5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0Mzg3MzEyNzcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlJlY2xhaW1pbmcgTWVtb3J5OiBBIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGhvdyBtZW1vcnkgaXMgYmVpbmcgcmVjbGFpbWVkLCBzcGVjaWZpY2FsbHkgd2l0aCBgdXNlcl9wcm9hY3RpdmVfcmVjbGFpbWAuIEl0IGFwcGVhcnMgdGhhdCB3aGVuIGEgYHBnZGF0YCAocGFnZSBkYXRhIHN0cnVjdHVyZSkgaXMgYXZhaWxhYmxlIOKAkyBsaWtlIHdoZW4gd2UncmUgdXNpbmcgdGhlIHN5c2ZzIGludGVyZmFjZSBgcmVjbGFpbV9zdG9yZWAg4oCTIGB1c2VyX3Byb2FjdGl2ZV9yZWNsYWltYCBjYWxscyBgX19ub2RlX3JlY2xhaW1gIGRpcmVjdGx5LiBUaGF0IG1ha2VzIHNlbnNlLCBpbiBwcmluY2lwbGUsIGZvciBlZmZpY2llbnQgbm9kZS1sZXZlbCByZWNsYWltLlxuXG5CdXQgaGFuZyBvbiBhIHNlY29uZC4uLnNvbWV0aGluZyBzZWVtcyBvZmYuIEknbSByZWNhbGxpbmcgdGhhdCBgX19ub2RlX3JlY2xhaW1gIGRvZXNuJ3Qgc2VlbSB0byBzZXQgdGhvc2UgZmxhZ3Mg4oCTIGBza2lwX3NsYWJfcmVjbGFpbWAgb3IgYHNraXBfZmlsZV9yZWNsYWltYC4gVGhvc2UgYXJlIGNyaXRpY2FsIGZvciBjb250cm9sbGluZyB3aGF0IGdldHMgcmVjbGFpbWVkISBOb3csIEkgZGlzdGluY3RseSByZW1lbWJlciB0aGF0IHRob3NlIGZsYWdzIGFyZSBhY3R1YWxseSBzZXQgYnkgYG5vZGVfcmVjbGFpbWAuIEkgbmVlZCB0byByZXZpc2l0IHRoYXQgZnVuY3Rpb24gdG8gYmUgY2VydGFpbi4gSnVzdCB0byBjb25maXJtIG15IGFzc3VtcHRpb25zIGFuZCBlbnN1cmUgdGhpcyBpcyB0aGUgYXBwcm9wcmlhdGUgcGF0aC4gVGhpcyBpcyBpbXBvcnRhbnQgZm9yIG9wdGltYWwgcGVyZm9ybWFuY2UsIGFuZCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgd2UgYXJlIG5vdCBza2lwcGluZyBjcnVjaWFsIHN0ZXBzIGluIG91ciByZWNsYW1hdGlvbiBwcm9jZXNzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzYwNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjM6MTAuNTgzMDY2NDAzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI2ODkyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS92bXNjYW4uY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3OTA4LFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI3OTA4OlxcdHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpbnQgb3JkZXIpXFxuNzkwOTpcXHR7XFxuNzkxMDpcXHRcXHR1bnNpZ25lZCBsb25nIHJldDtcXG43OTExOlxcdFxcdC8qIE1pbmltdW0gcGFnZXMgbmVlZGVkIGluIG9yZGVyIHRvIHN0YXkgb24gbm9kZSAqL1xcbjc5MTI6XFx0XFx0Y29uc3QgdW5zaWduZWQgbG9uZyBucl9wYWdlcyA9IDEgXFx1MDAzY1xcdTAwM2Mgb3JkZXI7XFxuNzkxMzpcXHRcXHRzdHJ1Y3Qgc2Nhbl9jb250cm9sIHNjID0ge1xcbjc5MTQ6XFx0XFx0XFx0Lm5yX3RvX3JlY2xhaW0gPSBtYXgobnJfcGFnZXMsIFNXQVBfQ0xVU1RFUl9NQVgpLFxcbjc5MTU6XFx0XFx0XFx0LmdmcF9tYXNrID0gY3VycmVudF9nZnBfY29udGV4dChnZnBfbWFzayksXFxuNzkxNjpcXHRcXHRcXHQub3JkZXIgPSBvcmRlcixcXG43OTE3OlxcdFxcdFxcdC5wcmlvcml0eSA9IE5PREVfUkVDTEFJTV9QUklPUklUWSxcXG43OTE4OlxcdFxcdFxcdC5tYXlfd3JpdGVwYWdlID0gISEobm9kZV9yZWNsYWltX21vZGUgXFx1MDAyNiBSRUNMQUlNX1dSSVRFKSxcXG43OTE5OlxcdFxcdFxcdC5tYXlfdW5tYXAgPSAhIShub2RlX3JlY2xhaW1fbW9kZSBcXHUwMDI2IFJFQ0xBSU1fVU5NQVApLFxcbjc5MjA6XFx0XFx0XFx0Lm1heV9zd2FwID0gMSxcXG43OTIxOlxcdFxcdFxcdC5yZWNsYWltX2lkeCA9IGdmcF96b25lKGdmcF9tYXNrKSxcXG43OTIyOlxcdFxcdH07XFxuNzkyMzpcXHRcXG43OTI0OlxcdFxcdC8qXFxuNzkyNTpcXHRcXHQgKiBtaW5fdW5tYXBwZWRfcGFnZXMgYW5kIG1pbl9zbGFiX3BhZ2VzIG9ubHkgZ2F0ZSBmaWxlIGFuZCBzbGFiLlxcbjc5MjY6XFx0XFx0ICogQmFpbCBvdXQgb25seSB3aGVuIGJvdGggYXJlIHVuZGVyIHRoZWlyIGxpbWl0cyBhbmQgYW5vbiBjYW5ub3RcXG43OTI3OlxcdFxcdCAqIGJlIHJlY2xhaW1lZCBlaXRoZXIsIHNvIHdlIGRvIG5vdCBza2lwIHJlY2xhaW1hYmxlIGFub24uXFxuNzkyODpcXHRcXHQgKi9cXG43OTI5OlxcdFxcdGlmIChub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXFx1MDAzYz0gcGdkYXQtXFx1MDAzZW1pbl91bm1hcHBlZF9wYWdlcyBcXHUwMDI2XFx1MDAyNlxcbjc5MzA6XFx0XFx0ICAgIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcXHUwMDNjPVxcbjc5MzE6XFx0XFx0ICAgIHBnZGF0LVxcdTAwM2VtaW5fc2xhYl9wYWdlcyBcXHUwMDI2XFx1MDAyNlxcbjc5MzI6XFx0XFx0ICAgICFjYW5fcmVjbGFpbV9hbm9uX3BhZ2VzKE5VTEwsIHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBcXHUwMDI2c2MpKVxcbjc5MzM6XFx0XFx0XFx0cmV0dXJuIDA7XFxuNzkzNDpcXHRcXG43OTM1OlxcdFxcdC8qXFxuNzkzNjpcXHRcXHQgKiBEbyBub3Qgc2NhbiBpZiB0aGUgYWxsb2NhdGlvbiBzaG91bGQgbm90IGJlIGRlbGF5ZWQuXFxuNzkzNzpcXHRcXHQgKi9cXG43OTM4OlxcdFxcdGlmICghZ2ZwZmxhZ3NfYWxsb3dfYmxvY2tpbmcoZ2ZwX21hc2spIHx8IChjdXJyZW50LVxcdTAwM2VmbGFncyBcXHUwMDI2IFBGX01FTUFMTE9DKSlcXG43OTM5OlxcdFxcdFxcdHJldHVybiAwO1xcbjc5NDA6XFx0XFxuNzk0MTpcXHRcXHQvKlxcbjc5NDI6XFx0XFx0ICogT25seSBydW4gbm9kZSByZWNsYWltIG9uIHRoZSBsb2NhbCBub2RlIG9yIG9uIG5vZGVzIHRoYXQgZG8gbm90XFxuNzk0MzpcXHRcXHQgKiBoYXZlIGFzc29jaWF0ZWQgcHJvY2Vzc29ycy4gVGhpcyB3aWxsIGZhdm9yIHRoZSBsb2NhbCBwcm9jZXNzb3JcXG43OTQ0OlxcdFxcdCAqIG92ZXIgcmVtb3RlIHByb2Nlc3NvcnMgYW5kIHNwcmVhZCBvZmYgbm9kZSBtZW1vcnkgYWxsb2NhdGlvbnNcXG43OTQ1OlxcdFxcdCAqIGFzIHdpZGUgYXMgcG9zc2libGUuXFxuNzk0NjpcXHRcXHQgKi9cXG43OTQ3OlxcdFxcdGlmIChub2RlX3N0YXRlKHBnZGF0LVxcdTAwM2Vub2RlX2lkLCBOX0NQVSkgXFx1MDAyNlxcdTAwMjYgcGdkYXQtXFx1MDAzZW5vZGVfaWQgIT0gbnVtYV9ub2RlX2lkKCkpXFxuNzk0ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG43OTQ5OlxcdFxcbjc5NTA6XFx0XFx0aWYgKHRlc3RfYW5kX3NldF9iaXRfbG9jayhQR0RBVF9SRUNMQUlNX0xPQ0tFRCwgXFx1MDAyNnBnZGF0LVxcdTAwM2VmbGFncykpXFxuNzk1MTpcXHRcXHRcXHRyZXR1cm4gMDtcXG43OTUyOlxcdFxcbjc5NTM6XFx0XFx0LypcXG43OTU0OlxcdFxcdCAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGVcXG43OTU1OlxcdFxcdCAqIHNsYWIgb3IgdW5tYXBwZWQgcGFnZSBjYWNoZSBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IGl0cyBsaW1pdCwgbGVhdmVcXG43OTU2OlxcdFxcdCAqIHRoYXQgdHlwZSBhbG9uZSBldmVuIGlmIHRoZSBvdGhlciB0eXBlIHRyaXBwZWQgdGhlIGdhdGUgYW5kIGJyb3VnaHRcXG43OTU3OlxcdFxcdCAqIHVzIGludG8gbm9kZSByZWNsYWltLlxcbjc5NTg6XFx0XFx0ICovXFxuNzk1OTpcXHRcXHRzYy5za2lwX3NsYWJfcmVjbGFpbSA9XFxuNzk2MDpcXHRcXHRcXHRub2RlX3BhZ2Vfc3RhdGVfcGFnZXMocGdkYXQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzYz1cXG43OTYxOlxcdFxcdFxcdHBnZGF0LVxcdTAwM2VtaW5fc2xhYl9wYWdlcztcXG43OTYyOlxcdFxcdHNjLnNraXBfZmlsZV9yZWNsYWltID1cXG43OTYzOlxcdFxcdFxcdG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcXHUwMDNjPSBwZ2RhdC1cXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzO1xcbjc5NjQ6XFx0XFxuNzk2NTpcXHRcXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFxcdTAwMjZzYyk7XFxuNzk2NjpcXHRcXHRjbGVhcl9iaXRfdW5sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcXHUwMDI2cGdkYXQtXFx1MDAzZWZsYWdzKTtcXG43OTY3OlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMzoxMC41ODMzMzY1ODNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTIxNDc3MjczNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgQ29kZSdzIEZ1enppbmcgUG90ZW50aWFsKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIGNvcnJlY3Q6IGBza2lwX3NsYWJfcmVjbGFpbWAgYW5kIGBza2lwX2ZpbGVfcmVjbGFpbWAgYXJlICpvbmx5KiBzZXQgd2l0aGluIHRoZSBgbm9kZV9yZWNsYWltYCBmdW5jdGlvbi4gVGhpcyBtZWFucyBgbm9kZV9yZWNsYWltYCBpcyB0aGUga2V5IGVudHJ5IHBvaW50IGZvciB0aGlzIG5ldyBsb2dpYyB0byBiZSBhY3RpdmF0ZWQuIEkga25vdyBgbm9kZV9yZWNsYWltYCBpcyBpbnZva2VkIGZyb20gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgIHdoZW4gYG5vZGVfcmVjbGFpbV9tb2RlYCBpcyBhY3RpdmUsIHdoaWNoIGl0c2VsZiBpcyBlbmFibGVkIGJ5IHNldHRpbmcgYHZtLnpvbmVfcmVjbGFpbV9tb2RlYCB2aWEgdGhlIHN5c2N0bCBpbnRlcmZhY2UuIENydWNpYWxseSwgYENPTkZJR19OVU1BYCBpcyBlc3NlbnRpYWw7IHdpdGhvdXQgaXQsIGBub2RlX3JlY2xhaW1gIGlzIGVpdGhlciBub3QgY29tcGlsZWQgb3IgaXMgYSBzdHViLlxuXG5UaGVyZWZvcmUsIG15IGZvY3VzIHNob3VsZCBiZSBvbiB0aGUgYG5vZGVfcmVjbGFpbWAgc3ltYm9sLiBJ4oCZbSBjb25maWRlbnQgdGhhdCdzIHRoZSBwcmltYXJ5IHRhcmdldCBmb3IgZnV6emluZy4gSSd2ZSBkb3VibGUtY2hlY2tlZCB0aGF0IGBub2RlX3JlY2xhaW1gIGlzIGluZGVlZCBub3Qgc3RhdGljIGFuZCBpcyBhIHZhbGlkIGZvY3VzIHN5bWJvbC5cblxuTGV0J3MgcXVpY2tseSBjaGVjayBmb3IgYW55IG90aGVyIGRlcGVuZGVuY2llcy4gSSBub3RlZCBgQ09ORklHX1NZU0ZTYCBpcyByZXF1aXJlZCBmb3IgYHJlY2xhaW1fc3RvcmVgLCBidXQgc2luY2UgYG5vZGVfcmVjbGFpbWAgaXMgY2FsbGVkIGZyb20gYGdldF9wYWdlX2Zyb21fZnJlZWxpc3RgLCB3aGljaCBpcyBmdW5kYW1lbnRhbCB0byBtZW1vcnkgYWxsb2NhdGlvbiwgYENPTkZJR19TWVNGU2AgaXNu4oCZdCAqc3RyaWN0bHkqIG5lZWRlZCBmb3IgdHJpZ2dlcmluZyB0aGlzIHNwZWNpZmljIG5ldyBiZWhhdmlvdXI7IGl04oCZcyBwcmltYXJpbHkgZHJpdmVuIGJ5IGBDT05GSUdfTlVNQWAuIEknbSBnb2luZyB0byByZWl0ZXJhdGUgdGhhdCBgbm9kZV9yZWNsYWltYCBpcyB0aGUgb25seSBub24tc3RhdGljIGZ1bmN0aW9uIGRpcmVjdGx5IG1vZGlmaWVkIG9yIGRpcmVjdGx5IGNhbGxpbmcgdGhlIG1vZGlmaWVkIHN0YXRpYyBmdW5jdGlvbnMgd2l0aCB0aGUgbmV3IGZsYWdzLlxuXG5Ob3csIGEgY3J1Y2lhbCBjb25zaWRlcmF0aW9uOiBpcyB0aGlzIHJlYWNoYWJsZSBpbiBhIHZpcnR1YWxpemVkIGVudmlyb25tZW50PyBZZXMsIFFFTVUgY2FuIGVtdWxhdGUgTlVNQSBub2RlcywgYW5kIHN5emthbGxlciBjYW4gcHJvZ3JhbW1hdGljYWxseSBzZXQgYHZtLnpvbmVfcmVjbGFpbV9tb2RlYCB0byB0cmlnZ2VyIHRoZSBwYWdlIGFsbG9jYXRpb24uIFRoaXMgY29uZmlybXMgdGhhdCB0aGlzIGxvZ2ljICppcyogcmVhY2hhYmxlIGFuZCBhYnNvbHV0ZWx5IHdvcnRoIGZ1enppbmcuXG5cblRvIHN1bW1hcml6ZSBteSBmaW5kaW5nczpcblxuKiAgICoqV29ydGhGdXp6aW5nOioqIFRydWVcbiogICAqKlJlYXNvbmluZzoqKiBUaGUgcGF0Y2ggbW9kaWZpZXMgY29yZSBtZW1vcnkgcmVjbGFpbSwgc3BlY2lmaWNhbGx5IGludHJvZHVjaW5nIGxvZ2ljIHRvIHNraXAgc2xhYiBvciBmaWxlIHJlY2xhaW0gZHVyaW5nIG5vZGUgcmVjbGFpbSB3aGVuIGFzc29jaWF0ZWQgbGltaXRzIGFyZW4ndCBleGNlZWRlZC4gVGhpcyBpcyBhY2Nlc3NpYmxlIHZpYSBwYWdlIGFsbG9jYXRpb24gd2hlbiBOVU1BIG5vZGUgcmVjbGFpbSBpcyBlbmFibGVkIChlLmcuLCB0aHJvdWdoIGB2bS56b25lX3JlY2xhaW1fbW9kZWApLlxuKiAgICoqRm9jdXNTeW1ib2xzOioqIGBbXCJub2RlX3JlY2xhaW1cIl1gXG4qICAgKipFbmFibGVDb25maWdzOioqIGBbXCJOVU1BXCJdYFxuXG5KdXN0IGEgcXVpY2sgY2hlY2sgdG8gY29uZmlybSBgbm9kZV9yZWNsYWltYCBpcyBub3Qgc3RhdGljIG9yIGlubGluZSBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIGB1bnNpZ25lZCBsb25nIG5vZGVfcmVjbGFpbShzdHJ1Y3QgcGdsaXN0X2RhdGEgKnBnZGF0LCBnZnBfdCBnZnBfbWFzaywgdW5zaWduZWQgaW50IG9yZGVyKWAsIHNvIGl0J3MgZ2xvYmFsLiBFeGNlbGxlbnQuXG5cbkZpbmFsbHksIHdoaWxlIGBfX25vZGVfcmVjbGFpbWAgaXMgYWxzbyBwYXJ0IG9mIHRoaXMgY29kZSwgaXQncyBzdGF0aWMgYW5kIHBvdGVudGlhbGx5IGlubGluZWQsIG1ha2luZyBgbm9kZV9yZWNsYWltYCB0aGUgYmV0dGVyLCBtb3JlIGFjY2Vzc2libGUgZm9jdXMgc3ltYm9sLlxuXG5JJ20gY29uZmlkZW50IEkndmUgaWRlbnRpZmllZCB0aGUga2V5IHRhcmdldHMgYW5kIGNvbmZpZ3VyYXRpb25zIGZvciBmdXp6aW5nIHRoaXMgbmV3IGZ1bmN0aW9uYWxpdHkuIGBDT05GSUdfTlVNQWAgaXMgdGhlIGNyaXRpY2FsIHJlcXVpcmVtZW50LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTAzNywiT3V0cHV0VG9rZW5zIjoxMDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NzksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMzoxOS43OTgxMTE0N1oiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MjkzNjA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJOVU1BXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibm9kZV9yZWNsYWltXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgbWVtb3J5IHJlY2xhaW0gbG9naWMgKHZtc2NhbikgdG8gc2tpcCBzbGFiIG9yIGZpbGUgcmVjbGFpbSB3aGVuIHRoZWlyIHJlc3BlY3RpdmUgbGltaXRzIGFyZSBub3QgZXhjZWVkZWQgZHVyaW5nIG5vZGUgcmVjbGFpbS4gVGhpcyBpcyByZWFjaGFibGUgdmlhIHBhZ2UgYWxsb2NhdGlvbiB3aGVuIE5VTUEgbm9kZSByZWNsYWltIGlzIGVuYWJsZWQgKGUuZy4sIHZpYSB2bS56b25lX3JlY2xhaW1fbW9kZSBzeXNjdGwpLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk5VTUFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJub2RlX3JlY2xhaW1cIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyAodm1zY2FuKSB0byBza2lwIHNsYWIgb3IgZmlsZSByZWNsYWltIHdoZW4gdGhlaXIgcmVzcGVjdGl2ZSBsaW1pdHMgYXJlIG5vdCBleGNlZWRlZCBkdXJpbmcgbm9kZSByZWNsYWltLiBUaGlzIGlzIHJlYWNoYWJsZSB2aWEgcGFnZSBhbGxvY2F0aW9uIHdoZW4gTlVNQSBub2RlIHJlY2xhaW0gaXMgZW5hYmxlZCAoZS5nLiwgdmlhIHZtLnpvbmVfcmVjbGFpbV9tb2RlIHN5c2N0bCkuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIzOjE5Ljg3NzQxMjE5OVoiLCJTZXEiOjMzLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTE0ODQ2NjM5MTYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwODoyMzoxOS44Nzc5MTEyMDlaIiwiU2VxIjozNCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6MTE0ODQxNjA5MTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIHR3byBuZXcgYml0ZmllbGRzIChgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gKSB0byBgc3RydWN0IHNjYW5fY29udHJvbGAgdG8gYmV0dGVyIGNvbnRyb2wgc2xhYiBhbmQgZmlsZSBwYWdlIHJlY2xhaW0uIEluc3RhbmNlcyBvZiBgc3RydWN0IHNjYW5fY29udHJvbGAgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgYW55IHVuc3BlY2lmaWVkIGZpZWxkcyAoaW5jbHVkaW5nIHRoZSBuZXdseSBhZGRlZCBiaXRmaWVsZHMpIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGNvbXBsZXggbWVtb3J5IGFsbG9jYXRpb25zIG9yIHBhcnNpbmcgb2YgZXh0ZXJuYWwgZGF0YSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgZGE1MmUyNzY1MTlkMTNjMTE0ZWY5ODA4YWQ5OTU4ZjJiM2JkODE2YlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA4OjIxOjU1IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggYzE0MDRhNTk1MjNkNi4uZDEzODM3Nzk1NzllYSAxMDA2NDRcbi0tLSBhL21tL3Ztc2Nhbi5jXG4rKysgYi9tbS92bXNjYW4uY1xuQEAgLTExNCw2ICsxMTQsMTggQEAgc3RydWN0IHNjYW5fY29udHJvbCB7XG4gXHQvKiB6b25lX3JlY2xhaW1fbW9kZSwgYm9vc3QgcmVjbGFpbSwgY2dyb3VwIHJlc3RyaWN0aW9ucyAqL1xuIFx0dW5zaWduZWQgaW50IG1heV9zd2FwOjE7XG4gXG4rXHQvKlxuK1x0ICogV2hlbiBzZXQsIHRoZSBzbGFiIHNocmlua2VycyBhcmUgbm90IGludm9rZWQgYmVjYXVzZSByZWNsYWltYWJsZVxuK1x0ICogc2xhYiBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IG1pbl9zbGFiX3BhZ2VzLlxuK1x0ICovXG4rXHR1bnNpZ25lZCBpbnQgc2tpcF9zbGFiX3JlY2xhaW06MTtcbitcbitcdC8qXG4rXHQgKiBXaGVuIHNldCwgZmlsZSBwYWdlcyBhcmUgbm90IHJlY2xhaW1lZCBiZWNhdXNlIHVubWFwcGVkIHBhZ2UgY2FjaGVcbitcdCAqIGlzIGFscmVhZHkgYXQgb3IgYmVsb3cgbWluX3VubWFwcGVkX3BhZ2VzLlxuK1x0ICovXG4rXHR1bnNpZ25lZCBpbnQgc2tpcF9maWxlX3JlY2xhaW06MTtcbitcbiBcdC8qIE5vdCBhbGxvdyBjYWNoZV90cmltX21vZGUgdG8gYmUgdHVybmVkIG9uIGFzIHBhcnQgb2YgcmVjbGFpbT8gKi9cbiBcdHVuc2lnbmVkIGludCBub19jYWNoZV90cmltX21vZGU6MTtcbiBcbkBAIC0yNTc1LDYgKzI1ODcsMjEgQEAgc3RhdGljIHZvaWQgZ2V0X3NjYW5fY291bnQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYyxcbiBcdFx0Z290byBvdXQ7XG4gXHR9XG4gXG4rXHQvKlxuK1x0ICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0b1xuK1x0ICogbWluX3VubWFwcGVkX3BhZ2VzOiBza2lwIGZpbGUgcGFnZXMgYW5kIHJlY2xhaW0gYW5vbiBvbmx5LiAgQXMgd2l0aFxuK1x0ICogdGhlIGFub24tb25seSBjYXNlIGFib3ZlLCBpZiBhbm9uIGNhbm5vdCBiZSByZWNsYWltZWQgdGhlcmUgaXNcbitcdCAqIG5vdGhpbmcgdG8gZG8gd2l0aG91dCBicmVhY2hpbmcgdGhlIGZsb29yLCBzbyBzY2FuIG5vdGhpbmcuXG4rXHQgKi9cbitcdGlmIChzYy1cdTAwM2Vza2lwX2ZpbGVfcmVjbGFpbSkge1xuK1x0XHRpZiAoIWNhbl9yZWNsYWltX2Fub25fcGFnZXMobWVtY2csIHBnZGF0LVx1MDAzZW5vZGVfaWQsIHNjKSkge1xuK1x0XHRcdG1lbXNldChuciwgMCwgc2l6ZW9mKCpucikgKiBOUl9MUlVfTElTVFMpO1xuK1x0XHRcdHJldHVybjtcbitcdFx0fVxuK1x0XHRzY2FuX2JhbGFuY2UgPSBTQ0FOX0FOT047XG4rXHRcdGdvdG8gb3V0O1xuK1x0fVxuK1xuIFx0LyogSWYgd2UgaGF2ZSBubyBzd2FwIHNwYWNlLCBkbyBub3QgYm90aGVyIHNjYW5uaW5nIGFub24gZm9saW9zLiAqL1xuIFx0aWYgKCFzYy1cdTAwM2VtYXlfc3dhcCB8fCAhY2FuX3JlY2xhaW1fYW5vbl9wYWdlcyhtZW1jZywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgc2MpKSB7XG4gXHRcdHNjYW5fYmFsYW5jZSA9IFNDQU5fRklMRTtcbkBAIC00NzM2LDYgKzQ3NjMsMTQgQEAgc3RhdGljIGludCBzY2FuX2ZvbGlvcyh1bnNpZ25lZCBsb25nIG5yX3RvX3NjYW4sIHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdFZNX1dBUk5fT05fT05DRShucl90b19zY2FuIFx1MDAzZSBNQVhfTFJVX0JBVENIKTtcbiBcdFZNX1dBUk5fT05fT05DRSghbGlzdF9lbXB0eShsaXN0KSk7XG4gXG4rXHQvKlxuK1x0ICogbm9kZV9yZWNsYWltIHByb3RlY3RzIHVubWFwcGVkIHBhZ2UgY2FjaGUgZG93biB0byBtaW5fdW5tYXBwZWRfcGFnZXMsXG4rXHQgKiBzbyBsZWF2ZSB0aGUgZmlsZSB0eXBlIGFsb25lOyBpc29sYXRlX2ZvbGlvcygpIHRoZW4gZmFsbHMgYmFjayB0b1xuK1x0ICogYW5vbi5cbitcdCAqL1xuK1x0aWYgKHNjLVx1MDAzZXNraXBfZmlsZV9yZWNsYWltIFx1MDAyNlx1MDAyNiB0eXBlID09IExSVV9HRU5fRklMRSlcbitcdFx0cmV0dXJuIDA7XG4rXG4gXHRpZiAoZ2V0X25yX2dlbnMobHJ1dmVjLCB0eXBlKSA9PSBNSU5fTlJfR0VOUylcbiBcdFx0cmV0dXJuIDA7XG4gXG5AQCAtNTExMSw3ICs1MTQ2LDggQEAgc3RhdGljIGludCBzaHJpbmtfb25lKHN0cnVjdCBscnV2ZWMgKmxydXZlYywgc3RydWN0IHNjYW5fY29udHJvbCAqc2MpXG4gXG4gXHRuZWVkX3JvdGF0ZSA9IHRyeV90b19zaHJpbmtfbHJ1dmVjKGxydXZlYywgc2MpO1xuIFxuLVx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLCBzYy1cdTAwM2Vwcmlvcml0eSk7XG4rXHRpZiAoIXNjLVx1MDAzZXNraXBfc2xhYl9yZWNsYWltKVxuK1x0XHRzaHJpbmtfc2xhYihzYy1cdTAwM2VnZnBfbWFzaywgcGdkYXQtXHUwMDNlbm9kZV9pZCwgbWVtY2csIHNjLVx1MDAzZXByaW9yaXR5KTtcbiBcbiBcdGlmICghc2MtXHUwMDNlcHJvYWN0aXZlKVxuIFx0XHR2bXByZXNzdXJlKHNjLVx1MDAzZWdmcF9tYXNrLCBzYy1cdTAwM2VvcmRlciwgbWVtY2csIGZhbHNlLFxuQEAgLTYyMTQsOCArNjI1MCw5IEBAIHN0YXRpYyB2b2lkIHNocmlua19ub2RlX21lbWNncyhwZ19kYXRhX3QgKnBnZGF0LCBzdHJ1Y3Qgc2Nhbl9jb250cm9sICpzYylcbiBcbiBcdFx0c2hyaW5rX2xydXZlYyhscnV2ZWMsIHNjKTtcbiBcbi1cdFx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLFxuLVx0XHRcdCAgICBzYy1cdTAwM2Vwcmlvcml0eSk7XG4rXHRcdGlmICghc2MtXHUwMDNlc2tpcF9zbGFiX3JlY2xhaW0pXG4rXHRcdFx0c2hyaW5rX3NsYWIoc2MtXHUwMDNlZ2ZwX21hc2ssIHBnZGF0LVx1MDAzZW5vZGVfaWQsIG1lbWNnLFxuK1x0XHRcdFx0ICAgIHNjLVx1MDAzZXByaW9yaXR5KTtcbiBcbiBcdFx0LyogUmVjb3JkIHRoZSBncm91cCdzIHJlY2xhaW0gZWZmaWNpZW5jeSAqL1xuIFx0XHRpZiAoIXNjLVx1MDAzZXByb2FjdGl2ZSlcbkBAIC03ODQ2LDE2ICs3ODgzLDE2IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIF9fbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsXG4gXHRub3JlY2xhaW1fZmxhZyA9IG1lbWFsbG9jX25vcmVjbGFpbV9zYXZlKCk7XG4gXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKHAsIFx1MDAyNnNjLVx1MDAzZXJlY2xhaW1fc3RhdGUpO1xuIFxuLVx0aWYgKG5vZGVfcGFnZWNhY2hlX3JlY2xhaW1hYmxlKHBnZGF0KSBcdTAwM2UgcGdkYXQtXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzIHx8XG4tXHQgICAgbm9kZV9wYWdlX3N0YXRlX3BhZ2VzKHBnZGF0LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZSBwZ2RhdC1cdTAwM2VtaW5fc2xhYl9wYWdlcykge1xuLVx0XHQvKlxuLVx0XHQgKiBGcmVlIG1lbW9yeSBieSBjYWxsaW5nIHNocmluayBub2RlIHdpdGggaW5jcmVhc2luZ1xuLVx0XHQgKiBwcmlvcml0aWVzIHVudGlsIHdlIGhhdmUgZW5vdWdoIG1lbW9yeSBmcmVlZC5cbi1cdFx0ICovXG4tXHRcdGRvIHtcbi1cdFx0XHRzaHJpbmtfbm9kZShwZ2RhdCwgc2MpO1xuLVx0XHR9IHdoaWxlIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiAtLXNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZT0gMCk7XG4tXHR9XG4rXHQvKlxuK1x0ICogRnJlZSBtZW1vcnkgYnkgY2FsbGluZyBzaHJpbmsgbm9kZSB3aXRoIGluY3JlYXNpbmdcbitcdCAqIHByaW9yaXRpZXMgdW50aWwgd2UgaGF2ZSBlbm91Z2ggbWVtb3J5IGZyZWVkLlxuK1x0ICpcbitcdCAqIFdoYXQgdG8gcmVjbGFpbSBpcyBnYXRlZCBwZXIgdHlwZSBieSBzYy1cdTAwM2Vza2lwX3NsYWJfcmVjbGFpbSBhbmRcbitcdCAqIHNjLVx1MDAzZXNraXBfZmlsZV9yZWNsYWltLlxuK1x0ICovXG4rXHRkbyB7XG4rXHRcdHNocmlua19ub2RlKHBnZGF0LCBzYyk7XG4rXHR9IHdoaWxlIChzYy1cdTAwM2Vucl9yZWNsYWltZWQgXHUwMDNjIG5yX3BhZ2VzIFx1MDAyNlx1MDAyNiAtLXNjLVx1MDAzZXByaW9yaXR5IFx1MDAzZT0gMCk7XG4gXG4gXHRzZXRfdGFza19yZWNsYWltX3N0YXRlKHAsIE5VTEwpO1xuIFx0bWVtYWxsb2Nfbm9yZWNsYWltX3Jlc3RvcmUobm9yZWNsYWltX2ZsYWcpO1xuQEAgLTc4ODUsMTggKzc5MjIsMTQgQEAgdW5zaWduZWQgbG9uZyBub2RlX3JlY2xhaW0oc3RydWN0IHBnbGlzdF9kYXRhICpwZ2RhdCwgZ2ZwX3QgZ2ZwX21hc2ssIHVuc2lnbmVkIGlcbiBcdH07XG4gXG4gXHQvKlxuLVx0ICogTm9kZSByZWNsYWltIHJlY2xhaW1zIHVubWFwcGVkIGZpbGUgYmFja2VkIHBhZ2VzIGFuZFxuLVx0ICogc2xhYiBwYWdlcyBpZiB3ZSBhcmUgb3ZlciB0aGUgZGVmaW5lZCBsaW1pdHMuXG4tXHQgKlxuLVx0ICogQSBzbWFsbCBwb3J0aW9uIG9mIHVubWFwcGVkIGZpbGUgYmFja2VkIHBhZ2VzIGlzIG5lZWRlZCBmb3Jcbi1cdCAqIGZpbGUgSS9PIG90aGVyd2lzZSBwYWdlcyByZWFkIGJ5IGZpbGUgSS9PIHdpbGwgYmUgaW1tZWRpYXRlbHlcbi1cdCAqIHRocm93biBvdXQgaWYgdGhlIG5vZGUgaXMgb3ZlcmFsbG9jYXRlZC4gU28gd2UgZG8gbm90IHJlY2xhaW1cbi1cdCAqIGlmIGxlc3MgdGhhbiBhIHNwZWNpZmllZCBwZXJjZW50YWdlIG9mIHRoZSBub2RlIGlzIHVzZWQgYnlcbi1cdCAqIHVubWFwcGVkIGZpbGUgYmFja2VkIHBhZ2VzLlxuK1x0ICogbWluX3VubWFwcGVkX3BhZ2VzIGFuZCBtaW5fc2xhYl9wYWdlcyBvbmx5IGdhdGUgZmlsZSBhbmQgc2xhYi5cbitcdCAqIEJhaWwgb3V0IG9ubHkgd2hlbiBib3RoIGFyZSB1bmRlciB0aGVpciBsaW1pdHMgYW5kIGFub24gY2Fubm90XG4rXHQgKiBiZSByZWNsYWltZWQgZWl0aGVyLCBzbyB3ZSBkbyBub3Qgc2tpcCByZWNsYWltYWJsZSBhbm9uLlxuIFx0ICovXG4gXHRpZiAobm9kZV9wYWdlY2FjaGVfcmVjbGFpbWFibGUocGdkYXQpIFx1MDAzYz0gcGdkYXQtXHUwMDNlbWluX3VubWFwcGVkX3BhZ2VzIFx1MDAyNlx1MDAyNlxuIFx0ICAgIG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2M9XG4tXHQgICAgcGdkYXQtXHUwMDNlbWluX3NsYWJfcGFnZXMpXG4rXHQgICAgcGdkYXQtXHUwMDNlbWluX3NsYWJfcGFnZXMgXHUwMDI2XHUwMDI2XG4rXHQgICAgIWNhbl9yZWNsYWltX2Fub25fcGFnZXMoTlVMTCwgcGdkYXQtXHUwMDNlbm9kZV9pZCwgXHUwMDI2c2MpKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdC8qXG5AQCAtNzkxNyw2ICs3OTUwLDE4IEBAIHVuc2lnbmVkIGxvbmcgbm9kZV9yZWNsYWltKHN0cnVjdCBwZ2xpc3RfZGF0YSAqcGdkYXQsIGdmcF90IGdmcF9tYXNrLCB1bnNpZ25lZCBpXG4gXHRpZiAodGVzdF9hbmRfc2V0X2JpdF9sb2NrKFBHREFUX1JFQ0xBSU1fTE9DS0VELCBcdTAwMjZwZ2RhdC1cdTAwM2VmbGFncykpXG4gXHRcdHJldHVybiAwO1xuIFxuK1x0LypcbitcdCAqIEVhY2ggbGltaXQgb25seSBnYXRlcyBpdHMgb3duIHR5cGUgb2YgcmVjbGFpbS4gIFdoZW4gcmVjbGFpbWFibGVcbitcdCAqIHNsYWIgb3IgdW5tYXBwZWQgcGFnZSBjYWNoZSBpcyBhbHJlYWR5IGF0IG9yIGJlbG93IGl0cyBsaW1pdCwgbGVhdmVcbitcdCAqIHRoYXQgdHlwZSBhbG9uZSBldmVuIGlmIHRoZSBvdGhlciB0eXBlIHRyaXBwZWQgdGhlIGdhdGUgYW5kIGJyb3VnaHRcbitcdCAqIHVzIGludG8gbm9kZSByZWNsYWltLlxuK1x0ICovXG4rXHRzYy5za2lwX3NsYWJfcmVjbGFpbSA9XG4rXHRcdG5vZGVfcGFnZV9zdGF0ZV9wYWdlcyhwZ2RhdCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSBcdTAwM2M9XG4rXHRcdHBnZGF0LVx1MDAzZW1pbl9zbGFiX3BhZ2VzO1xuK1x0c2Muc2tpcF9maWxlX3JlY2xhaW0gPVxuK1x0XHRub2RlX3BhZ2VjYWNoZV9yZWNsYWltYWJsZShwZ2RhdCkgXHUwMDNjPSBwZ2RhdC1cdTAwM2VtaW5fdW5tYXBwZWRfcGFnZXM7XG4rXG4gXHRyZXQgPSBfX25vZGVfcmVjbGFpbShwZ2RhdCwgbnJfcGFnZXMsIFx1MDAyNnNjKTtcbiBcdGNsZWFyX2JpdF91bmxvY2soUEdEQVRfUkVDTEFJTV9MT0NLRUQsIFx1MDAyNnBnZGF0LVx1MDAzZWZsYWdzKTtcbiBcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA4OjIzOjE5Ljg3NzkxMjQ5OVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMTQ4NDEzNjY4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBLTVNBTiBOZWNlc3NpdHkqKlxuXG5Pa2F5LCBsZXQgbWUgdGhpbmsgdGhpcyB0aHJvdWdoLiBUaGlzIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS92bXNjYW4uY2AsIGFuZCBzcGVjaWZpY2FsbHkgaW50cm9kdWNpbmcgdHdvIGJpdGZpZWxkcywgYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCwgaW50byB0aGUgYHN0cnVjdCBzY2FuX2NvbnRyb2xgLiBSaWdodCwgc28gaXQncyBhbGwgYWJvdXQgbWVtb3J5IHJlY2xhaW0g4oCTIHBhZ2UgY2FjaGUsIHNsYWIsIGFub24gcGFnZXMuLi4gbm90aGluZyAqZGlyZWN0bHkqIGV4cG9zZWQgdG8gdXNlcnNwYWNlLlxuXG5UaGUgd2F5IGBzdHJ1Y3Qgc2Nhbl9jb250cm9sYCBpcyBoYW5kbGVkIGlzIGtleSBoZXJlLiBJdCdzIGFsbW9zdCBhbHdheXMgc3RhY2stYWxsb2NhdGVkIGFuZCBpbml0aWFsaXplZCB3aXRoIHRob3NlIG5pY2UgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGxpa2UgaW4gYG5vZGVfcmVjbGFpbWAuIFRoYXQncyBnb29kLCBiZWNhdXNlIHRoZSBjb21waWxlciBhdXRvbWF0aWNhbGx5IHplcm8taW5pdGlhbGl6ZXMgdGhlIHJlc3Qgb2YgdGhlIHN0cnVjdCwgaW5jbHVkaW5nIHRoZXNlIG5ldyBiaXRmaWVsZHMuIFNvIHRoZXJlJ3Mgbm8gd2F5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzIGxlYWtpbmcgYW55d2hlcmUuIEl04oCZcyBwcmV0dHkgc3RhbmRhcmQgcHJhY3RpY2UuIExldCBtZSBkb3VibGUtY2hlY2suLi4gWWVzLCBgc2hyaW5rX2FsbF9tZW1vcnlgLCBgdHJ5X3RvX2ZyZWVfcGFnZXNgLCBgYmFsYW5jZV9wZ2RhdGAuLi4gYWxsIHRoZSBvdGhlciBwbGFjZXMgSSBjYW4gdGhpbmsgb2YgYWxzbyBpbml0aWFsaXplIGBzY2FuX2NvbnRyb2xgIHRoYXQgd2F5LiBUaGUgbmV3IGZpZWxkcyBhcmUgYml0ZmllbGRzLCBhbmQgdGh1cyB3aWxsIGJlIHplcm9lZC4gTm8gY29uY2VybnMgdGhlcmUuXG5cblRoZSBjaGFuZ2VzIGRvbuKAmXQgaW52b2x2ZSBhbnl0aGluZyB0aGF0IGNyb3NzZXMgdGhlIHVzZXIva2VybmVsIGJvdW5kYXJ5LiBObyBuZXR3b3JrIHBhY2tldHMsIG5vIGZ1bmt5IGRhdGEgcGFyc2luZywgbm8gY2hhbmNlIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG1ha2luZyBpdHMgd2F5IG91dC4gSXTigJlzIGFsbCBpbnRlcm5hbCByZWNsYWltIHBvbGljeS4gTXkgZ3V0IHNheXMgaXQgd2lsbCBiZSBva2F5IGFuZCBJIHNob3VsZCBmb2xsb3cgdGhyb3VnaCB3aXRoIHRoaXMgZGVjaXNpb24uXG5cblNvIGhlcmUncyB0aGUgc3VtbWFyeSBvZiBteSByZWFzb25pbmc6IFRoaXMgcGF0Y2ggYWRkcyBiaXRmaWVsZHMgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGluIG1lbW9yeSByZWNsYWltLiBgc3RydWN0IHNjYW5fY29udHJvbGAgaW5zdGFuY2VzIGFyZSBpbml0aWFsaXplZCBvbiB0aGUgc3RhY2sgdXNpbmcgZGVzaWduYXRlZCBpbml0aWFsaXplcnMsIGVuc3VyaW5nIGFueSB1bmluaXRpYWxpemVkIGZpZWxkcyBhcmUgemVyb2VkLiBUaGVyZSdzIG5vIGRhdGEgYmVpbmcgY29waWVkIHRvIHVzZXJzcGFjZSBvciBhbnkgY29tcGxpY2F0ZWQgYWxsb2NhdGlvbnMuIFN0YW5kYXJkIEtBU0FOIGFuZCBkZWJ1Z2dpbmcgdG9vbHMgd2lsbCBiZSBlbm91Z2ggdG8gY2F0Y2ggYW55IGJ1Z3MsIG1vc3RseSBsb2dpYyBlcnJvcnMgb3Igb3V0LW9mLWJvdW5kcyBhY2Nlc3Nlcy4gVGhlcmVmb3JlLCBubyBLTVNBTiBpcyBuZWVkZWQgZm9yIHRoaXMgcGF0Y2guIEkgdGhpbmsgdGhpcyB3aWxsIHN1ZmZpY2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM4OTksIk91dHB1dFRva2VucyI6MjE5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NzUyLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDg6MjM6MzEuMzYyMDUyNzM0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc4MTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgbWVtb3J5IHJlY2xhaW0gbG9naWMgaW4gYG1tL3Ztc2Nhbi5jYCBieSBpbnRyb2R1Y2luZyB0d28gbmV3IGJpdGZpZWxkcyAoYHNraXBfc2xhYl9yZWNsYWltYCBhbmQgYHNraXBfZmlsZV9yZWNsYWltYCkgdG8gYHN0cnVjdCBzY2FuX2NvbnRyb2xgIHRvIGJldHRlciBjb250cm9sIHNsYWIgYW5kIGZpbGUgcGFnZSByZWNsYWltLiBJbnN0YW5jZXMgb2YgYHN0cnVjdCBzY2FuX2NvbnRyb2xgIGFyZSBhbGxvY2F0ZWQgb24gdGhlIHN0YWNrIGFuZCBpbml0aWFsaXplZCB1c2luZyBkZXNpZ25hdGVkIGluaXRpYWxpemVycywgd2hpY2ggZ3VhcmFudGVlcyB0aGF0IGFueSB1bnNwZWNpZmllZCBmaWVsZHMgKGluY2x1ZGluZyB0aGUgbmV3bHkgYWRkZWQgYml0ZmllbGRzKSBhcmUgemVyby1pbml0aWFsaXplZCBieSB0aGUgY29tcGlsZXIuIFRoZSBjaGFuZ2VzIGRvIG5vdCBpbnZvbHZlIGFueSBkYXRhIHN0cnVjdHVyZXMgYmVpbmcgY29waWVkIHRvIHVzZXIgc3BhY2UsIG5vciBkbyB0aGV5IGludHJvZHVjZSBjb21wbGV4IG1lbW9yeSBhbGxvY2F0aW9ucyBvciBwYXJzaW5nIG9mIGV4dGVybmFsIGRhdGEgd2hlcmUgdW5pbml0aWFsaXplZCBtZW1vcnkgY291bGQgYmUgZXhwb3NlZCBvciBsZWFrZWQuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2ggd291bGQgYmUgbG9naWMgZXJyb3JzIG9yIG1lbW9yeSBjb3JydXB0aW9ucyAoZS5nLiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3NlcyBvciB1c2UtYWZ0ZXItZnJlZSksIHdoaWNoIGFyZSBhZGVxdWF0ZWx5IGNvdmVyZWQgYnkgc3RhbmRhcmQgS0FTQU4gYW5kIG90aGVyIGRlYnVnZ2luZyB0b29scy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBtZW1vcnkgcmVjbGFpbSBsb2dpYyBpbiBgbW0vdm1zY2FuLmNgIGJ5IGludHJvZHVjaW5nIHR3byBuZXcgYml0ZmllbGRzIChgc2tpcF9zbGFiX3JlY2xhaW1gIGFuZCBgc2tpcF9maWxlX3JlY2xhaW1gKSB0byBgc3RydWN0IHNjYW5fY29udHJvbGAgdG8gYmV0dGVyIGNvbnRyb2wgc2xhYiBhbmQgZmlsZSBwYWdlIHJlY2xhaW0uIEluc3RhbmNlcyBvZiBgc3RydWN0IHNjYW5fY29udHJvbGAgYXJlIGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIGluaXRpYWxpemVkIHVzaW5nIGRlc2lnbmF0ZWQgaW5pdGlhbGl6ZXJzLCB3aGljaCBndWFyYW50ZWVzIHRoYXQgYW55IHVuc3BlY2lmaWVkIGZpZWxkcyAoaW5jbHVkaW5nIHRoZSBuZXdseSBhZGRlZCBiaXRmaWVsZHMpIGFyZSB6ZXJvLWluaXRpYWxpemVkIGJ5IHRoZSBjb21waWxlci4gVGhlIGNoYW5nZXMgZG8gbm90IGludm9sdmUgYW55IGRhdGEgc3RydWN0dXJlcyBiZWluZyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgbm9yIGRvIHRoZXkgaW50cm9kdWNlIGNvbXBsZXggbWVtb3J5IGFsbG9jYXRpb25zIG9yIHBhcnNpbmcgb2YgZXh0ZXJuYWwgZGF0YSB3aGVyZSB1bmluaXRpYWxpemVkIG1lbW9yeSBjb3VsZCBiZSBleHBvc2VkIG9yIGxlYWtlZC4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBwYXRjaCB3b3VsZCBiZSBsb2dpYyBlcnJvcnMgb3IgbWVtb3J5IGNvcnJ1cHRpb25zIChlLmcuLCBvdXQtb2YtYm91bmRzIGFjY2Vzc2VzIG9yIHVzZS1hZnRlci1mcmVlKSwgd2hpY2ggYXJlIGFkZXF1YXRlbHkgY292ZXJlZCBieSBzdGFuZGFyZCBLQVNBTiBhbmQgb3RoZXIgZGVidWdnaW5nIHRvb2xzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3QgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxh4k[1] Phase: Succeeded StartedAt: 2026-08-21 08:23:42 +0000 UTC FinishedAt: 2026-08-21 08:23:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 08:23:42 +0000 UTC FinishedAt: 2026-08-21 08:23:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2] Phase: Succeeded StartedAt: 2026-08-21 08:23:42 +0000 UTC FinishedAt: 2026-08-21 12:07:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-21 08:23:42 +0000 UTC FinishedAt: 2026-08-21 12:07:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-21 08:23:42 +0000 UTC FinishedAt: 2026-08-21 08:23:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-21 08:23:42 +0000 UTC FinishedAt: 2026-08-21 08:23:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-convert-artifact-3926299171/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-21 08:23:52 +0000 UTC FinishedAt: 2026-08-21 08:40:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-21 08:23:52 +0000 UTC FinishedAt: 2026-08-21 08:40:06 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*befa7d85-c26b-4bd3-8449-3fd00ff2d5ca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-convert-artifact-3926299171/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "54de0e81-a513-4bbe-a146-d199c857ea78", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-build-action-2311128721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-21 08:23:52 +0000 UTC FinishedAt: 2026-08-21 08:39:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*befa7d85-c26b-4bd3-8449-3fd00ff2d5ca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-convert-artifact-3926299171/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "54de0e81-a513-4bbe-a146-d199c857ea78", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-build-action-2311128721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-21 08:40:06 +0000 UTC FinishedAt: 2026-08-21 08:40:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-21 08:40:06 +0000 UTC FinishedAt: 2026-08-21 08:40:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-21 08:40:06 +0000 UTC FinishedAt: 2026-08-21 08:40:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-21 08:40:06 +0000 UTC FinishedAt: 2026-08-21 08:40:11 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-convert-artifact-4231046234/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-21 08:40:16 +0000 UTC FinishedAt: 2026-08-21 08:42:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-21 08:40:16 +0000 UTC FinishedAt: 2026-08-21 08:42:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*54de0e81-a513-4bbe-a146-d199c857ea78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-build-action-2311128721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-21 08:42:17 +0000 UTC FinishedAt: 2026-08-21 08:42:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-21 08:42:17 +0000 UTC FinishedAt: 2026-08-21 08:42:17 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-21 08:42:17 +0000 UTC FinishedAt: 2026-08-21 08:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-21 08:42:17 +0000 UTC FinishedAt: 2026-08-21 08:59:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*befa7d85-c26b-4bd3-8449-3fd00ff2d5ca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-convert-artifact-4231046234/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d0b9476f-da0c-4d20-b76b-68041b89c981", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-build-action-1904472382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-21 08:42:17 +0000 UTC FinishedAt: 2026-08-21 08:58:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*befa7d85-c26b-4bd3-8449-3fd00ff2d5ca,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:request,Path:/tmp/request.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-convert-artifact-4231046234/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "build_id": "d0b9476f-da0c-4d20-b76b-68041b89c981", "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:*,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/output,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-build-action-1904472382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-21 08:59:04 +0000 UTC FinishedAt: 2026-08-21 08:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-21 08:59:04 +0000 UTC FinishedAt: 2026-08-21 08:59:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-21 08:59:04 +0000 UTC FinishedAt: 2026-08-21 09:01:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-21 08:59:04 +0000 UTC FinishedAt: 2026-08-21 09:00:54 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d0b9476f-da0c-4d20-b76b-68041b89c981,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Boot test: Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:report-findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-build-action-1904472382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "success": true },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-21 09:01:04 +0000 UTC FinishedAt: 2026-08-21 12:07:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-21 09:01:04 +0000 UTC FinishedAt: 2026-08-21 12:07:27 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:track,Default:nil,Value:*KASAN,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:base-build-id,Default:nil,Value:*54de0e81-a513-4bbe-a146-d199c857ea78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d0b9476f-da0c-4d20-b76b-68041b89c981,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-build-action-2311128721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-build-action-1904472382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-21 09:01:04 +0000 UTC FinishedAt: 2026-08-21 09:01:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-21 09:01:04 +0000 UTC FinishedAt: 2026-08-21 09:01:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-convert-artifact-1255551759/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-21 09:01:04 +0000 UTC FinishedAt: 2026-08-21 09:01:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-21 09:01:04 +0000 UTC FinishedAt: 2026-08-21 09:01:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-21 09:01:04 +0000 UTC FinishedAt: 2026-08-21 09:01:04 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-21 09:01:14 +0000 UTC FinishedAt: 2026-08-21 12:07:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlxh4k[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["node_reclaim"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"a032d41a86cb82a747bc14d9c82b3e153a9a9ab7","config_name":"upstream-apparmor-kasan.config","enable_configs":["NUMA"],"series_id":"91f35141-41cd-4fe2-81fd-900a23ffed54","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-21 09:01:14 +0000 UTC FinishedAt: 2026-08-21 12:07:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*54de0e81-a513-4bbe-a146-d199c857ea78,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d0b9476f-da0c-4d20-b76b-68041b89c981,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Fuzz,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{Artifact{Name:base-kernel,Path:/base,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-build-action-2311128721/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:patched-kernel,Path:/patched,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-build-action-1904472382/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},Artifact{Name:config,Path:/tmp/config.json,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowlxh4k/series-workflowlxh4k-convert-artifact-1255551759/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,}