Name: series-workflowjvlrs Phase: Succeeded StartedAt: 2026-07-08 05:50:25 +0000 UTC FinishedAt: 2026-07-08 10:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[0] Phase: Succeeded StartedAt: 2026-07-08 05:50:25 +0000 UTC FinishedAt: 2026-07-08 06:00:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[0].run-triage Phase: Succeeded StartedAt: 2026-07-08 05:50:25 +0000 UTC FinishedAt: 2026-07-08 06:00:59 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC_BPF" ], "series_id": "a29d5169-204d-49c5-9178-c2e15dd52e02" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "bpf_binprm_set_interp", "bm_bpf_reg", "bm_bpf_unreg", "create_entry", "bm_register_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA2OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtibV9icGZfcmVnJiMzNDssCiAgICAmIzM0O2JtX2JwZl91bnJlZyYjMzQ7LAogICAgJiMzNDtjcmVhdGVfZW50cnkmIzM0OywKICAgICYjMzQ7Ym1fcmVnaXN0ZXJfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBhY3QgYXMgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLiBJdCBhZGRzIG5ldyBCUEYgc3RydWN0X29wcyBhbmQga2Z1bmNzLCBhbmQgbW9kaWZpZXMgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBhbmQgZXhlY3V0aW9uIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiwgdGhlIG5ldyBrZnVuYywgYW5kIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RyYXRpb24gcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNjowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE2OTEyZDA5NDY0YzkzZjM2NTA1NGRkNjczYzJhZDE5N2YzMDU0ZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDA2OjAwOjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbmluZGV4IGMwYTM0ZmJmODAyMmI1Li5jMGVmYjA3NzM2Mjg0MyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuQEAgLTI2LDExICYjNDM7MjYsMTMgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjpcbiAgICBuYW1lIGJlbG93IGBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjYGA7IGNhbm5vdCBjb250YWluIHNsYXNoZXMgYGAvYGAgZm9yXG4gICAgb2J2aW91cyByZWFzb25zLlxuIC0gYGB0eXBlYGBcbi0gICBpcyB0aGUgdHlwZSBvZiByZWNvZ25pdGlvbi4gR2l2ZSBgYE1gYCBmb3IgbWFnaWMgYW5kIGBgRWBgIGZvciBleHRlbnNpb24uXG4mIzQzOyAgIGlzIHRoZSB0eXBlIG9mIHJlY29nbml0aW9uLiBHaXZlIGBgTWBgIGZvciBtYWdpYywgYGBFYGAgZm9yIGV4dGVuc2lvbiBhbmRcbiYjNDM7ICAgYGBCYGAgZm9yIGEgYnBmLWJhY2tlZCBoYW5kbGVyIChzZWUgYmVsb3cpLlxuIC0gYGBvZmZzZXRgYFxuICAgIGlzIHRoZSBvZmZzZXQgb2YgdGhlIG1hZ2ljL21hc2sgaW4gdGhlIGZpbGUsIGNvdW50ZWQgaW4gYnl0ZXMuIFRoaXNcbiAgICBkZWZhdWx0cyB0byAwIGlmIHlvdSBvbWl0IGl0IChpLmUuIHlvdSB3cml0ZSBgYDpuYW1lOnR5cGU6Om1hZ2ljLi4uYGApLlxuLSAgIElnbm9yZWQgd2hlbiB1c2luZyBmaWxlbmFtZSBleHRlbnNpb24gbWF0Y2hpbmcuXG4mIzQzOyAgIElnbm9yZWQgd2hlbiB1c2luZyBmaWxlbmFtZSBleHRlbnNpb24gbWF0Y2hpbmcuIEZvciBgYEJgYCBlbnRyaWVzIHRoaXNcbiYjNDM7ICAgZmllbGQgY2FycmllcyB0aGUgbmFtZSBvZiB0aGUgYnBmIGhhbmRsZXIgaW5zdGVhZC5cbiAtIGBgbWFnaWNgYFxuICAgIGlzIHRoZSBieXRlIHNlcXVlbmNlIGJpbmZtdF9taXNjIGlzIG1hdGNoaW5nIGZvci4gVGhlIG1hZ2ljIHN0cmluZ1xuICAgIG1heSBjb250YWluIGhleC1lbmNvZGVkIGNoYXJhY3RlcnMgbGlrZSBgYFxceDBhYGAgb3IgYGBcXHhBNGBgLiBOb3RlIHRoYXQgeW91XG5AQCAtOTcsNiAmIzQzOzk5LDQwIEBAIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczpcbiAgICBvZmZzZXQmIzQzO3NpemUobWFnaWMpIGhhcyB0byBiZSBsZXNzIHRoYW4gMTI4XG4gIC0gdGhlIGludGVycHJldGVyIHN0cmluZyBtYXkgbm90IGV4Y2VlZCAxMjcgY2hhcmFjdGVyc1xuIFxuJiM0MztcbiYjNDM7YnBmLWJhY2tlZCBoYW5kbGVyc1xuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0MztXaXRoIGBgQ09ORklHX0JJTkZNVF9NSVNDX0JQRmBgIGJvdGggdGhlIG1hdGNoaW5nIGFuZCB0aGUgaW50ZXJwcmV0ZXJcbiYjNDM7c2VsZWN0aW9uIGNhbiBiZSBkZWxlZ2F0ZWQgdG8gYSBicGYgcHJvZ3JhbS4gQSBoYW5kbGVyIGlzIGFuIGluc3RhbmNlIG9mIHRoZVxuJiM0MztgYGJpbmZtdF9taXNjX29wc2BgIHN0cnVjdF9vcHMgd2l0aCBhIHNsZWVwYWJsZSBgYGxvYWRgYCBwcm9ncmFtIGFuZCBhXG4mIzQzO2BgbmFtZWBgLiBPbmNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCBpcyByZWdpc3RlcmVkIHRoZSBoYW5kbGVyIGNhbiBiZSBhY3RpdmF0ZWRcbiYjNDM7d2l0aCBhIGBgQmBgIGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdCBieSBuYW1lIGFuZCBjYXJyaWVzIG5laXRoZXIgbWFnaWMsXG4mIzQzO21hc2ssIG5vciBpbnRlcnByZXRlcjo6XG4mIzQzO1xuJiM0MzsgICAgZWNobyAmIzM5OzpxZW11OkI6bXlfaGFuZGxlcjo6OjomIzM5OyBcdTAwM2UgcmVnaXN0ZXJcbiYjNDM7XG4mIzQzO0F0IGV4ZWMgdGltZSB0aGUgYGBsb2FkYGAgcHJvZ3JhbSByZWNlaXZlcyB0aGUgYGBsaW51eF9iaW5wcm1gYCBvZiB0aGVcbiYjNDM7YmluYXJ5LiBJdCBjYW4gbWF0Y2ggb24gdGhlIGhlYWRlciBpbiBgYGJwcm0tXHUwMDNlYnVmYGAsIHJlYWQgdGhlIGZpbGUgaXRzZWxmLFxuJiM0MztlLmcuIHRvIHBhcnNlIEVMRiBwcm9ncmFtIGhlYWRlcnMsIGFuZCBkZXJpdmUgdGhlIGludGVycHJldGVyIGZyb20gdGhlXG4mIzQzO2JpbmFyeSYjMzk7cyBsb2NhdGlvbi4gSXQgc2VsZWN0cyB0aGUgaW50ZXJwcmV0ZXIgYnkgY2FsbGluZyB0aGVcbiYjNDM7YGBicGZfYmlucHJtX3NldF9pbnRlcnAoKWBgIGtmdW5jIHdpdGggYW4gYWJzb2x1dGUgcGF0aCBhbmQgcmV0dXJuaW5nIGFcbiYjNDM7cG9zaXRpdmUgdmFsdWUuIFJldHVybmluZyBgYDBgYCBmYWxscyB0aHJvdWdoIHRvIHRoZSBoYW5kbGVycyByZWdpc3RlcmVkXG4mIzQzO2FmdGVyIHRoaXMgb25lLCBhIG5lZ2F0aXZlIGVycm5vIGZhaWxzIHRoZSBleGVjIHdpdGggdGhhdCBlcnJvcjtcbiYjNDM7YGAtRU5PRVhFQ2BgIGVuZHMgdGhlIGJpbmZtdF9taXNjIHNlYXJjaCBidXQgbGV0cyB0aGUgcmVtYWluaW5nIGJpbmFyeVxuJiM0Mztmb3JtYXRzIGhhdmUgYSBnby4gVGhlIGludGVycHJldGVyIGlzIG9wZW5lZCB3aXRoIHRoZSBjcmVkZW50aWFscyBvZiB0aGVcbiYjNDM7dGFzayBkb2luZyB0aGUgZXhlYywgZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3b3VsZFxuJiM0MztiZS5cbiYjNDM7XG4mIzQzO0hhbmRsZXJzIGFyZSBsb29rZWQgdXAgaW4gdGhlIHVzZXIgbmFtZXNwYWNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCB3YXNcbiYjNDM7cmVnaXN0ZXJlZCBpbiwgZmFsbGluZyBiYWNrIHRvIGFuY2VzdG9yIG5hbWVzcGFjZXMsIG1pcnJvcmluZyBob3dcbiYjNDM7YmluZm10X21pc2MgaW5zdGFuY2VzIHRoZW1zZWx2ZXMgYXJlIGxvb2tlZCB1cC4gVGhlIGVudHJ5IGtlZXBzIHRoZSBoYW5kbGVyXG4mIzQzO2FsaXZlOyBkZWxldGluZyB0aGUgc3RydWN0X29wcyBtYXAgb25seSBwcmV2ZW50cyBuZXcgcmVnaXN0cmF0aW9ucy5cbiYjNDM7XG4mIzQzO1RoZSBgYENgYCBhbmQgYGBGYGAgZmxhZ3MgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYGBCYGAgZW50cmllczogdGhlcmUgaXMgbm9cbiYjNDM7Zml4ZWQgaW50ZXJwcmV0ZXIgdG8gcHJlLW9wZW4gYW5kIGEgcHJvZ3JhbS1zZWxlY3RlZCBpbnRlcnByZXRlciBtdXN0IG5ldmVyXG4mIzQzO2luaGVyaXQgdGhlIGNyZWRlbnRpYWxzIG9mIGEgc2V0dWlkIGJpbmFyeS5cbiYjNDM7XG4gVG8gdXNlIGJpbmZtdF9taXNjIHlvdSBoYXZlIHRvIG1vdW50IGl0IGZpcnN0LiBZb3UgY2FuIG1vdW50IGl0IHdpdGhcbiBgYG1vdW50IC10IGJpbmZtdF9taXNjIG5vbmUgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjYGAgY29tbWFuZCwgb3IgeW91IGNhbiBhZGRcbiBhIGxpbmUgYGBub25lICAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgYmluZm10X21pc2MgZGVmYXVsdHMgMCAwYGAgdG8geW91clxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcuYmluZm10IGIvZnMvS2NvbmZpZy5iaW5mbXRcbmluZGV4IDE5NDllMjVjNzc0MWIxLi5kYWVhYzQ4ODlkMDNlZiAxMDA2NDRcbi0tLSBhL2ZzL0tjb25maWcuYmluZm10XG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9LY29uZmlnLmJpbmZtdFxuQEAgLTE2OCw2ICYjNDM7MTY4LDIwIEBAIGNvbmZpZyBCSU5GTVRfTUlTQ1xuIFx0ICB5b3UgaGF2ZSB1c2UgZm9yIGl0OyB0aGUgbW9kdWxlIGlzIGNhbGxlZCBiaW5mbXRfbWlzYy4gSWYgeW91XG4gXHQgIGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gYW5zd2VyIGF0IHRoaXMgcG9pbnQsIHNheSBZLlxuIFxuJiM0Mztjb25maWcgQklORk1UX01JU0NfQlBGXG4mIzQzO1x0Ym9vbCBcJiMzNDtCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBCSU5GTVRfTUlTQz15XG4mIzQzO1x0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBbGxvdyBiaW5mbXRfbWlzYyBiaW5hcnkgdHlwZSBoYW5kbGVycyB0byBiZSBpbXBsZW1lbnRlZCBhcyBicGZcbiYjNDM7XHQgIHN0cnVjdF9vcHMgcHJvZ3JhbXMuIEluc3RlYWQgb2YgbWF0Y2hpbmcgYSBmaXhlZCBtYWdpYyBhbmRcbiYjNDM7XHQgIHJlZGlyZWN0aW5nIHRvIGEgZml4ZWQgaW50ZXJwcmV0ZXIgcmVjb3JkZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWVcbiYjNDM7XHQgIHN1Y2ggaGFuZGxlcnMgbWF0Y2ggYmluYXJpZXMgcHJvZ3JhbW1hdGljYWxseSBhbmQgY29tcHV0ZSB0aGVcbiYjNDM7XHQgIGludGVycHJldGVyIHRvIHVzZSBwZXIgYmluYXJ5LCBlLmcuIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZlxuJiM0MztcdCAgdGhlIGJpbmFyeSBpdHNlbGYuXG4mIzQzO1xuJiM0MztcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gYW5zd2VyIGF0IHRoaXMgcG9pbnQsIHNheSBOLlxuJiM0MztcbiBjb25maWcgQ09SRURVTVBcbiBcdGJvb2wgXCYjMzQ7RW5hYmxlIGNvcmUgZHVtcCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuIFx0ZGVmYXVsdCB5XG5kaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZVxuaW5kZXggODlhOGE5ZDIwN2QxYzUuLjQ5OWM2NjcwZjBjMTgzIDEwMDY0NFxuLS0tIGEvZnMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL01ha2VmaWxlXG5AQCAtMzMsNiAmIzQzOzMzLDcgQEAgb2JqLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXHQmIzQzOz0gY3J5cHRvL1xuIG9iai0kKENPTkZJR19GU19WRVJJVFkpXHRcdCYjNDM7PSB2ZXJpdHkvXG4gb2JqLSQoQ09ORklHX0ZJTEVfTE9DS0lORykgICAgICAmIzQzOz0gbG9ja3Mub1xuIG9iai0kKENPTkZJR19CSU5GTVRfTUlTQylcdCYjNDM7PSBiaW5mbXRfbWlzYy5vXG4mIzQzO29iai0kKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpXHQmIzQzOz0gYmluZm10X21pc2NfYnBmLm9cbiBvYmotJChDT05GSUdfQklORk1UX1NDUklQVClcdCYjNDM7PSBiaW5mbXRfc2NyaXB0Lm9cbiBvYmotJChDT05GSUdfQklORk1UX0VMRilcdCYjNDM7PSBiaW5mbXRfZWxmLm9cbiBvYmotJChDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEYpXHQmIzQzOz0gY29tcGF0X2JpbmZtdF9lbGYub1xuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jXG5pbmRleCA4NDM0OWZjYjkzZjEzYS4uYjgwZTIxOWJhNTg3NmIgMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9iaW5mbXRfbWlzYy5jXG5AQCAtMTcsNiAmIzQzOzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3R5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19oZWxwZXJzLmhcdTAwM2VcbkBAIC00MSw3ICYjNDM7NDIsNyBAQCBlbnVtIHtcbiBcdFZFUkJPU0VfU1RBVFVTID0gMSAvKiBtYWtlIGl0IHplcm8gdG8gc2F2ZSA0MDAgYnl0ZXMga2VybmVsIG1lbW9yeSAqL1xuIH07XG4gXG4tZW51bSB7RW5hYmxlZCwgTWFnaWN9O1xuJiM0MztlbnVtIHtFbmFibGVkLCBNYWdpYywgQnBmfTtcbiAjZGVmaW5lIE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwICgxVUwgXHUwMDNjXHUwMDNjIDMxKVxuICNkZWZpbmUgTUlTQ19GTVRfT1BFTl9CSU5BUlkgKDFVTCBcdTAwM2NcdTAwM2MgMzApXG4gI2RlZmluZSBNSVNDX0ZNVF9DUkVERU5USUFMUyAoMVVMIFx1MDAzY1x1MDAzYyAyOSlcbkBAIC01OCw2ICYjNDM7NTksOCBAQCB0eXBlZGVmIHN0cnVjdCB7XG4gXHRjaGFyICpuYW1lO1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJwZl9vcHM7XHQvKiBicGYtYmFja2VkIGhhbmRsZXIgKCYjMzk7QiYjMzk7KSAqL1xuJiM0MztcdGNvbnN0IGNoYXIgKmJwZl9vcHNfbmFtZTtcbiBcdHJlZmNvdW50X3QgdXNlcnM7XHRcdC8qIHN5bmMgcmVtb3ZhbCB3aXRoIGxvYWRfbWlzY19iaW5hcnkoKSAqL1xuIH0gTm9kZTtcbiBcbkBAIC04MiwxNCAmIzQzOzg1LDE5IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBibV9mc190eXBlO1xuICAqIHNlYXJjaF9iaW5mbXRfaGFuZGxlciAtIHNlYXJjaCBmb3IgYSBiaW5hcnkgaGFuZGxlciBmb3IgQGJwcm1cbiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlXG4gICogQGJwcm06IGJpbmFyeSBmb3Igd2hpY2ggd2UgYXJlIGxvb2tpbmcgZm9yIGEgaGFuZGxlclxuJiM0MzsgKiBAYnBmX3NraXA6IG51bWJlciBvZiBicGYtYmFja2VkIGhhbmRsZXJzIHRvIHNraXAgb3ZlclxuICAqXG4gICogU2VhcmNoIGZvciBhIGJpbmFyeSB0eXBlIGhhbmRsZXIgZm9yIEBicHJtIGluIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgYmluYXJ5XG4tICogdHlwZSBoYW5kbGVycy5cbiYjNDM7ICogdHlwZSBoYW5kbGVycy4gQSBicGYtYmFja2VkIGhhbmRsZXIgY2Fubm90IGJlIG1hdGNoZWQgaGVyZSBhcyBpdHMgcHJvZ3JhbVxuJiM0MzsgKiBtdXN0IHJ1biBpbiBzbGVlcGFibGUgY29udGV4dDsgaXQgaXMgcmV0dXJuZWQgYXMgYSBjYW5kaWRhdGUgYW5kIHRoZVxuJiM0MzsgKiBwcm9ncmFtIGRlY2lkZXMgaW4gbG9hZF9taXNjX2JpbmFyeSgpLiBAYnBmX3NraXAgYWxsb3dzIHRoZSBjYWxsZXIgdG9cbiYjNDM7ICogcmVzdW1lIHRoZSBzZWFyY2ggYWZ0ZXIgdGhlIGZpcnN0IEBicGZfc2tpcCBjYW5kaWRhdGVzIGRlY2xpbmVkLlxuICAqXG4gICogUmV0dXJuOiBiaW5hcnkgdHlwZSBsaXN0IGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBOb2RlICpzZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuLVx0XHRcdFx0ICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBicGZfc2tpcClcbiB7XG4gXHRjaGFyICpwID0gc3RycmNocihicHJtLVx1MDAzZWludGVycCwgJiMzOTsuJiMzOTspO1xuIFx0Tm9kZSAqZTtcbkBAIC0xMDMsNiAmIzQzOzExMSwxNSBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiBcdFx0aWYgKCF0ZXN0X2JpdChFbmFibGVkLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdC8qIFRoZSBwcm9ncmFtIGRlY2lkZXMgaW4gbG9hZF9taXNjX2JpbmFyeSgpLiAqL1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdFx0aWYgKGJwZl9za2lwKSB7XG4mIzQzO1x0XHRcdFx0YnBmX3NraXAtLTtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZXR1cm4gZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIERvIG1hdGNoaW5nIGJhc2VkIG9uIGV4dGVuc2lvbiBpZiBhcHBsaWNhYmxlLiAqL1xuIFx0XHRpZiAoIXRlc3RfYml0KE1hZ2ljLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRcdGlmIChwIFx1MDAyNlx1MDAyNiAhc3RyY21wKGUtXHUwMDNlbWFnaWMsIHAgJiM0MzsgMSkpXG5AQCAtMTMyLDYgJiM0MzsxNDksNyBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiAgKiBnZXRfYmluZm10X2hhbmRsZXIgLSB0cnkgdG8gZmluZCBhIGJpbmFyeSB0eXBlIGhhbmRsZXJcbiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlXG4gICogQGJwcm06IGJpbmFyeSBmb3Igd2hpY2ggd2UgYXJlIGxvb2tpbmcgZm9yIGEgaGFuZGxlclxuJiM0MzsgKiBAYnBmX3NraXA6IG51bWJlciBvZiBicGYtYmFja2VkIGhhbmRsZXJzIHRvIHNraXAgb3ZlclxuICAqXG4gICogVHJ5IHRvIGZpbmQgYSBiaW5mbXQgaGFuZGxlciBmb3IgdGhlIGJpbmFyeSB0eXBlLiBJZiBvbmUgaXMgZm91bmQgdGFrZSBhXG4gICogcmVmZXJlbmNlIHRvIHByb3RlY3QgYWdhaW5zdCByZW1vdmFsIHZpYSBibV97ZW50cnksc3RhdHVzfV93cml0ZSgpLlxuQEAgLTEzOSwxMiAmIzQzOzE1NywxMyBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiAgKiBSZXR1cm46IGJpbmFyeSB0eXBlIGxpc3QgZW50cnkgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlXG4gICovXG4gc3RhdGljIE5vZGUgKmdldF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG4tXHRcdFx0XHRzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IGJwZl9za2lwKVxuIHtcbiBcdE5vZGUgKmU7XG4gXG4gXHRyZWFkX2xvY2soXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzX2xvY2spO1xuLVx0ZSA9IHNlYXJjaF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtKTtcbiYjNDM7XHRlID0gc2VhcmNoX2JpbmZtdF9oYW5kbGVyKG1pc2MsIGJwcm0sIGJwZl9za2lwKTtcbiBcdGlmIChlKVxuIFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2ZS1cdTAwM2V1c2Vycyk7XG4gXHRyZWFkX3VubG9jayhcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXNfbG9jayk7XG5AQCAtMTY0LDYgJiM0MzsxODMsOCBAQCBzdGF0aWMgdm9pZCBwdXRfYmluZm10X2hhbmRsZXIoTm9kZSAqZSlcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZS1cdTAwM2V1c2VycykpIHtcbiBcdFx0aWYgKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSlcbiBcdFx0XHRmaWxwX2Nsb3NlKGUtXHUwMDNlaW50ZXJwX2ZpbGUsIE5VTEwpO1xuJiM0MztcdFx0aWYgKGUtXHUwMDNlYnBmX29wcylcbiYjNDM7XHRcdFx0YmluZm10X21pc2NfcHV0X29wcyhlLVx1MDAzZWJwZl9vcHMpO1xuIFx0XHRrZnJlZShlKTtcbiBcdH1cbiB9XG5AQCAtMjA2LDEyICYjNDM7MjI3LDE1IEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlID0gTlVMTDtcbiBcdGludCByZXR2YWwgPSAtRU5PRVhFQztcbiBcdHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYztcbiYjNDM7XHRjb25zdCBjaGFyICppbnRlcnByZXRlcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYnBmX3NraXAgPSAwO1xuIFxuIFx0bWlzYyA9IGxvYWRfYmluZm10X21pc2MoKTtcbiBcdGlmICghbWlzYy1cdTAwM2VlbmFibGVkKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFxuLVx0Zm10ID0gZ2V0X2JpbmZtdF9oYW5kbGVyKG1pc2MsIGJwcm0pO1xuJiM0MztyZXRyeTpcbiYjNDM7XHRmbXQgPSBnZXRfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSwgYnBmX3NraXApO1xuIFx0aWYgKCFmbXQpXG4gXHRcdHJldHVybiByZXR2YWw7XG4gXG5AQCAtMjIwLDYgJiM0MzsyNDQsMzIgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRpZiAoYnBybS1cdTAwM2VpbnRlcnBfZmxhZ3MgXHUwMDI2IEJJTlBSTV9GTEFHU19QQVRIX0lOQUNDRVNTSUJMRSlcbiBcdFx0Z290byByZXQ7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2Zm10LVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0cmV0dmFsID0gZm10LVx1MDAzZWJwZl9vcHMtXHUwMDNlbG9hZChicHJtKTtcbiYjNDM7XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0LyogS2VlcCBhIHByb2dyYW0tc3VwcGxpZWQgZXJyb3Igd2l0aGluIGVycm5vIHJhbmdlLiAqL1xuJiM0MztcdFx0XHRpZiAocmV0dmFsIFx1MDAzYyAtTUFYX0VSUk5PKVxuJiM0MztcdFx0XHRcdHJldHZhbCA9IC1FTk9FWEVDO1xuJiM0MztcdFx0XHRnb3RvIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICghcmV0dmFsKSB7XG4mIzQzO1x0XHRcdC8qIERlY2xpbmVkLCBtb3ZlIG9uIHRvIGxhdGVyIGhhbmRsZXJzLiAqL1xuJiM0MztcdFx0XHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuJiM0MztcdFx0XHRicHJtLVx1MDAzZWJwZl9pbnRlcnAgPSBOVUxMO1xuJiM0MztcdFx0XHRwdXRfYmluZm10X2hhbmRsZXIoZm10KTtcbiYjNDM7XHRcdFx0YnBmX3NraXAmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRyZXR2YWwgPSAtRU5PRVhFQztcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qIFNlbGVjdGluZyBhbiBpbnRlcnByZXRlciBpcyBwYXJ0IG9mIHRoZSBjb250cmFjdC4gKi9cbiYjNDM7XHRcdHJldHZhbCA9IC1FTk9FWEVDO1xuJiM0MztcdFx0aWYgKCFicHJtLVx1MDAzZWJwZl9pbnRlcnApXG4mIzQzO1x0XHRcdGdvdG8gcmV0O1xuJiM0MztcdFx0aW50ZXJwcmV0ZXIgPSBicHJtLVx1MDAzZWJwZl9pbnRlcnA7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGludGVycHJldGVyID0gZm10LVx1MDAzZWludGVycHJldGVyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoZm10LVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCkge1xuIFx0XHRicHJtLVx1MDAzZWludGVycF9mbGFncyB8PSBCSU5QUk1fRkxBR1NfUFJFU0VSVkVfQVJHVjA7XG4gXHR9IGVsc2Uge1xuQEAgLTIzOCwxMyAmIzQzOzI4OCwxMyBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdGJwcm0tXHUwMDNlYXJnYyYjNDM7JiM0Mzs7XG4gXG4gXHQvKiBhZGQgdGhlIGludGVycCBhcyBhcmd2WzBdICovXG4tXHRyZXR2YWwgPSBjb3B5X3N0cmluZ19rZXJuZWwoZm10LVx1MDAzZWludGVycHJldGVyLCBicHJtKTtcbiYjNDM7XHRyZXR2YWwgPSBjb3B5X3N0cmluZ19rZXJuZWwoaW50ZXJwcmV0ZXIsIGJwcm0pO1xuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byByZXQ7XG4gXHRicHJtLVx1MDAzZWFyZ2MmIzQzOyYjNDM7O1xuIFxuIFx0LyogVXBkYXRlIGludGVycCBpbiBjYXNlIGJpbmZtdF9zY3JpcHQgbmVlZHMgaXQuICovXG4tXHRyZXR2YWwgPSBicHJtX2NoYW5nZV9pbnRlcnAoZm10LVx1MDAzZWludGVycHJldGVyLCBicHJtKTtcbiYjNDM7XHRyZXR2YWwgPSBicHJtX2NoYW5nZV9pbnRlcnAoaW50ZXJwcmV0ZXIsIGJwcm0pO1xuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byByZXQ7XG4gXG5AQCAtMjUzLDcgJiM0MzszMDMsNyBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0aWYgKCFJU19FUlIoaW50ZXJwX2ZpbGUpKVxuIFx0XHRcdGRlbnlfd3JpdGVfYWNjZXNzKGludGVycF9maWxlKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGludGVycF9maWxlID0gb3Blbl9leGVjKGZtdC1cdTAwM2VpbnRlcnByZXRlcik7XG4mIzQzO1x0XHRpbnRlcnBfZmlsZSA9IG9wZW5fZXhlYyhpbnRlcnByZXRlcik7XG4gXHR9XG4gXHRyZXR2YWwgPSBQVFJfRVJSKGludGVycF9maWxlKTtcbiBcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKVxuQEAgLTI2NSw2ICYjNDM7MzE1LDkgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXG4gXHRyZXR2YWwgPSAwO1xuIHJldDpcbiYjNDM7XHQvKiBBIHByb2dyYW0tc2VsZWN0ZWQgaW50ZXJwcmV0ZXIgaXMgY29uc3VtZWQgYnkgdGhpcyBleGVjIGF0dGVtcHQuICovXG4mIzQzO1x0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbiYjNDM7XHRicHJtLVx1MDAzZWJwZl9pbnRlcnAgPSBOVUxMO1xuIFxuIFx0LypcbiBcdCAqIElmIHdlIGFjdHVhbGx5IHB1dCB0aGUgbm9kZSBoZXJlIGFsbCBjb25jdXJyZW50IGNhbGxzIHRvXG5AQCAtNDA0LDEzICYjNDM7NDU3LDQ3IEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuIFx0XHRwcl9kZWJ1ZyhcJiMzNDtyZWdpc3RlcjogdHlwZTogTSAobWFnaWMpXFxuXCYjMzQ7KTtcbiBcdFx0ZS1cdTAwM2VmbGFncyA9ICgxIFx1MDAzY1x1MDAzYyBFbmFibGVkKSB8ICgxIFx1MDAzY1x1MDAzYyBNYWdpYyk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgJiMzOTtCJiMzOTs6XG4mIzQzO1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXG4mIzQzO1x0XHRcdGdvdG8gZWludmFsO1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7cmVnaXN0ZXI6IHR5cGU6IEIgKGJwZilcXG5cJiMzNDspO1xuJiM0MztcdFx0ZS1cdTAwM2VmbGFncyA9ICgxIFx1MDAzY1x1MDAzYyBFbmFibGVkKSB8ICgxIFx1MDAzY1x1MDAzYyBCcGYpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRnb3RvIGVpbnZhbDtcbiBcdH1cbiBcdGlmICgqcCYjNDM7JiM0MzsgIT0gZGVsKVxuIFx0XHRnb3RvIGVpbnZhbDtcbiBcbi1cdGlmICh0ZXN0X2JpdChNYWdpYywgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoQnBmLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0Y2hhciAqcztcbiYjNDM7XG4mIzQzO1x0XHQvKiBUaGUgJiMzOTtvZmZzZXQmIzM5OyBmaWVsZCBjYXJyaWVzIHRoZSBoYW5kbGVyIG5hbWUuICovXG4mIzQzO1x0XHRzID0gc3RyY2hyKHAsIGRlbCk7XG4mIzQzO1x0XHRpZiAoIXMpXG4mIzQzO1x0XHRcdGdvdG8gZWludmFsO1xuJiM0MztcdFx0KnMmIzQzOyYjNDM7ID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdGUtXHUwMDNlYnBmX29wc19uYW1lID0gcDtcbiYjNDM7XHRcdGlmICghZS1cdTAwM2VicGZfb3BzX25hbWVbMF0gfHxcbiYjNDM7XHRcdCAgICBzdHJsZW4oZS1cdTAwM2VicGZfb3BzX25hbWUpIFx1MDAzZT0gQklORk1UX01JU0NfT1BTX05BTUVfTUFYKVxuJiM0MztcdFx0XHRnb3RvIGVpbnZhbDtcbiYjNDM7XHRcdHAgPSBzO1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7cmVnaXN0ZXI6IGJwZiBoYW5kbGVyOiB7JXN9XFxuXCYjMzQ7LCBlLVx1MDAzZWJwZl9vcHNfbmFtZSk7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlICYjMzk7bWFnaWMmIzM5OyBmaWVsZCBtdXN0IGJlIGVtcHR5LiAqL1xuJiM0MztcdFx0cyA9IHN0cmNocihwLCBkZWwpO1xuJiM0MztcdFx0aWYgKCFzIHx8IHMgIT0gcClcbiYjNDM7XHRcdFx0Z290byBlaW52YWw7XG4mIzQzO1x0XHQqcyYjNDM7JiM0MzsgPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdFx0cCA9IHM7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlICYjMzk7bWFzayYjMzk7IGZpZWxkIG11c3QgYmUgZW1wdHkuICovXG4mIzQzO1x0XHRzID0gc3RyY2hyKHAsIGRlbCk7XG4mIzQzO1x0XHRpZiAoIXMgfHwgcyAhPSBwKVxuJiM0MztcdFx0XHRnb3RvIGVpbnZhbDtcbiYjNDM7XHRcdCpzJiM0MzsmIzQzOyA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0XHRwID0gcztcbiYjNDM7XHR9IGVsc2UgaWYgKHRlc3RfYml0KE1hZ2ljLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuIFx0XHQvKiBIYW5kbGUgdGhlICYjMzk7TSYjMzk7IChtYWdpYykgZm9ybWF0LiAqL1xuIFx0XHRjaGFyICpzO1xuIFxuQEAgLTUyNCw4ICYjNDM7NjExLDEzIEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuIFx0aWYgKCFwKVxuIFx0XHRnb3RvIGVpbnZhbDtcbiBcdCpwJiM0MzsmIzQzOyA9ICYjMzk7XFwwJiMzOTs7XG4tXHRpZiAoIWUtXHUwMDNlaW50ZXJwcmV0ZXJbMF0pXG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdC8qIFRoZSBwcm9ncmFtIHNlbGVjdHMgdGhlIGludGVycHJldGVyIGF0IGV4ZWMgdGltZS4gKi9cbiYjNDM7XHRcdGlmIChlLVx1MDAzZWludGVycHJldGVyWzBdKVxuJiM0MztcdFx0XHRnb3RvIGVpbnZhbDtcbiYjNDM7XHR9IGVsc2UgaWYgKCFlLVx1MDAzZWludGVycHJldGVyWzBdKSB7XG4gXHRcdGdvdG8gZWludmFsO1xuJiM0MztcdH1cbiBcdHByX2RlYnVnKFwmIzM0O3JlZ2lzdGVyOiBpbnRlcnByZXRlcjogeyVzfVxcblwmIzM0OywgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4gXG4gXHQvKiBQYXJzZSB0aGUgJiMzOTtmbGFncyYjMzk7IGZpZWxkLiAqL1xuQEAgLTUzNSw2ICYjNDM7NjI3LDE0IEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuIFx0aWYgKHAgIT0gYnVmICYjNDM7IGNvdW50KVxuIFx0XHRnb3RvIGVpbnZhbDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgcHJvZ3JhbS1zZWxlY3RlZCBpbnRlcnByZXRlciBjYW5ub3QgYmUgcHJlLW9wZW5lZCBhbmQgbXVzdCBub3RcbiYjNDM7XHQgKiBpbmhlcml0IHRoZSBjcmVkZW50aWFscyBvZiBhIHNldHVpZCBiaW5hcnkgaXQgd2FzIGNob3NlbiBmb3IuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChlLVx1MDAzZWZsYWdzIFx1MDAyNiAoTUlTQ19GTVRfQ1JFREVOVElBTFMgfCBNSVNDX0ZNVF9PUEVOX0ZJTEUpKSlcbiYjNDM7XHRcdGdvdG8gZWludmFsO1xuJiM0MztcbiBcdHJldHVybiBlO1xuIFxuIG91dDpcbkBAIC01ODgsNyAmIzQzOzY4OCwxMCBAQCBzdGF0aWMgdm9pZCBlbnRyeV9zdGF0dXMoTm9kZSAqZSwgY2hhciAqcGFnZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0ZHAgJiM0Mzs9IHNwcmludGYoZHAsIFwmIzM0OyVzXFxuaW50ZXJwcmV0ZXIgJXNcXG5cJiMzNDssIHN0YXR1cywgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRkcCAmIzQzOz0gc3ByaW50ZihkcCwgXCYjMzQ7JXNcXG5icGYgJXNcXG5cJiMzNDssIHN0YXR1cywgZS1cdTAwM2VicGZfb3BzX25hbWUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRwICYjNDM7PSBzcHJpbnRmKGRwLCBcJiMzNDslc1xcbmludGVycHJldGVyICVzXFxuXCYjMzQ7LCBzdGF0dXMsIGUtXHUwMDNlaW50ZXJwcmV0ZXIpO1xuIFxuIFx0LyogcHJpbnQgdGhlIHNwZWNpYWwgZmxhZ3MgKi9cbiBcdGRwICYjNDM7PSBzcHJpbnRmKGRwLCBcJiMzNDtmbGFnczogXCYjMzQ7KTtcbkBAIC02MDIsNyAmIzQzOzcwNSw5IEBAIHN0YXRpYyB2b2lkIGVudHJ5X3N0YXR1cyhOb2RlICplLCBjaGFyICpwYWdlKVxuIFx0XHQqZHAmIzQzOyYjNDM7ID0gJiMzOTtGJiMzOTs7XG4gXHQqZHAmIzQzOyYjNDM7ID0gJiMzOTtcXG4mIzM5OztcbiBcbi1cdGlmICghdGVzdF9iaXQoTWFnaWMsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdCpkcCA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0fSBlbHNlIGlmICghdGVzdF9iaXQoTWFnaWMsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdHNwcmludGYoZHAsIFwmIzM0O2V4dGVuc2lvbiAuJXNcXG5cJiMzNDssIGUtXHUwMDNlbWFnaWMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZHAgJiM0Mzs9IHNwcmludGYoZHAsIFwmIzM0O29mZnNldCAlaVxcbm1hZ2ljIFwmIzM0OywgZS1cdTAwM2VvZmZzZXQpO1xuQEAgLTgwOSw2ICYjNDM7OTE0LDE2IEBAIHN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0aWYgKElTX0VSUihlKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZSk7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdGUtXHUwMDNlYnBmX29wcyA9IGJpbmZtdF9taXNjX2dldF9vcHMoc2ItXHUwMDNlc191c2VyX25zLCBlLVx1MDAzZWJwZl9vcHNfbmFtZSk7XG4mIzQzO1x0XHRpZiAoIWUtXHUwMDNlYnBmX29wcykge1xuJiM0MztcdFx0XHRwcl9ub3RpY2UoXCYjMzQ7cmVnaXN0ZXI6IG5vIGJwZiBoYW5kbGVyIG5hbWVkICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgZS1cdTAwM2VicGZfb3BzX25hbWUpO1xuJiM0MztcdFx0XHRrZnJlZShlKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogTm93IHRoYXQgd2Ugc3VwcG9ydCB1bnByaXZpbGVnZWQgYmluZm10X21pc2MgbW91bnRzIG1ha2VcbkBAIC04MzQsNiAmIzQzOzk0OSw4IEBAIHN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0XHRcdGV4ZV9maWxlX2FsbG93X3dyaXRlX2FjY2VzcyhmKTtcbiBcdFx0XHRmaWxwX2Nsb3NlKGYsIE5VTEwpO1xuIFx0XHR9XG4mIzQzO1x0XHRpZiAoZS1cdTAwM2VicGZfb3BzKVxuJiM0MztcdFx0XHRiaW5mbXRfbWlzY19wdXRfb3BzKGUtXHUwMDNlYnBmX29wcyk7XG4gXHRcdGtmcmVlKGUpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjX2JwZi5jIGIvZnMvYmluZm10X21pc2NfYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzJkYTA5NjRkOTQ5MTVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9taXNjX2JwZi5jXG5AQCAtMCwwICYjNDM7MSwyNzUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBCUEYtYmFja2VkIGJpbmFyeSB0eXBlIGhhbmRsZXJzIGZvciBiaW5mbXRfbWlzYy5cbiYjNDM7ICpcbiYjNDM7ICogQSBoYW5kbGVyIGlzIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBzdHJ1Y3Rfb3BzIG1hcC4gTG9hZGluZyBhbmRcbiYjNDM7ICogcmVnaXN0ZXJpbmcgaXQgbWFrZXMgdGhlIGhhbmRsZXIgYXZhaWxhYmxlIHVuZGVyIGl0cyBuYW1lIGluIHRoZSB1c2VyXG4mIzQzOyAqIG5hbWVzcGFjZSBpdCB3YXMgcmVnaXN0ZXJlZCBpbi4gQSBiaW5mbXRfbWlzYyAmIzM5O0ImIzM5OyBlbnRyeSBhY3RpdmF0ZXMgaXQ6XG4mIzQzOyAqXG4mIzQzOyAqICAgZWNobyAmIzM5OzplbnRyeTpCOlx1MDAzY2hhbmRsZXItbmFtZVx1MDAzZTo6OjomIzM5OyBcdTAwM2UgXHUwMDNjYmluZm10X21pc2NcdTAwM2UvcmVnaXN0ZXJcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYm1fYnBmX29wc19yZWcge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHM7XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuJiM0MztcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoYm1fYnBmX29wc19sb2NrKTtcbiYjNDM7c3RhdGljIExJU1RfSEVBRChibV9icGZfb3BzX2xpc3QpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfYmluZm10X21pc2Nfb3BzO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBibV9icGZfb3BzX3JlZyAqYm1fYnBmX29wc19maW5kKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKnJlZztcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZibV9icGZfb3BzX2xvY2spO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgXHUwMDI2Ym1fYnBmX29wc19saXN0LCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAocmVnLVx1MDAzZXVzZXJfbnMgPT0gdXNlcl9ucyBcdTAwMjZcdTAwMjYgIXN0cmNtcChyZWctXHUwMDNlb3BzLVx1MDAzZW5hbWUsIG5hbWUpKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVnO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJpbmZtdF9taXNjX2dldF9vcHMgLSBsb29rIHVwIGEgYnBmIGJpbmFyeSB0eXBlIGhhbmRsZXIgYnkgbmFtZVxuJiM0MzsgKiBAdXNlcl9uczogdXNlciBuYW1lc3BhY2Ugb2YgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlXG4mIzQzOyAqIEBuYW1lOiBuYW1lIHRoZSBoYW5kbGVyIHdhcyByZWdpc3RlcmVkIHVuZGVyXG4mIzQzOyAqXG4mIzQzOyAqIFNlYXJjaCBAdXNlcl9ucyBhbmQgaXRzIGFuY2VzdG9ycyBmb3IgYSBoYW5kbGVyIG5hbWVkIEBuYW1lLCBtaXJyb3JpbmdcbiYjNDM7ICogdGhlIGluc3RhbmNlIGxvb2t1cCBpbiBsb2FkX2JpbmZtdF9taXNjKCkuIFRoZSByZXR1cm5lZCBoYW5kbGVyIHN0YXlzXG4mIzQzOyAqIGNhbGxhYmxlIHVudGlsIGJpbmZtdF9taXNjX3B1dF9vcHMoKSBldmVuIGlmIHRoZSBiYWNraW5nIHN0cnVjdF9vcHMgbWFwXG4mIzQzOyAqIGlzIGRldGFjaGVkIG9yIGRlbGV0ZWQgaW4gdGhlIG1lYW50aW1lLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRoZSBoYW5kbGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZVxuJiM0MzsgKi9cbiYjNDM7Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqYmluZm10X21pc2NfZ2V0X29wcyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XG4mIzQzO1x0c3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZibV9icGZfb3BzX2xvY2spO1xuJiM0MztcbiYjNDM7XHRmb3IgKG5zID0gdXNlcl9uczsgbnM7IG5zID0gbnMtXHUwMDNlcGFyZW50KSB7XG4mIzQzO1x0XHRyZWcgPSBibV9icGZfb3BzX2ZpbmQobnMsIG5hbWUpO1xuJiM0MztcdFx0aWYgKCFyZWcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFicGZfc3RydWN0X29wc19nZXQocmVnLVx1MDAzZW9wcykpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIHJlZy1cdTAwM2VvcHM7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGJpbmZtdF9taXNjX3B1dF9vcHMoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VzdF9vcHMgPT0gXHUwMDI2YnBmX2JpbmZtdF9taXNjX29wcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9iaW5wcm1fc2V0X2ludGVycCAtIHNlbGVjdCB0aGUgaW50ZXJwcmV0ZXIgZm9yIHRoZSBjdXJyZW50IGV4ZWNcbiYjNDM7ICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4mIzQzOyAqIEBwYXRoOiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBpbnRlcnByZXRlclxuJiM0MzsgKiBAcGF0aF9fc3o6IHNpemUgb2YgdGhlIEBwYXRoIGJ1ZmZlciwgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUxcbiYjNDM7ICpcbiYjNDM7ICogVG8gYmUgY2FsbGVkIGZyb20gdGhlIGxvYWQgcHJvZ3JhbSBvZiBhIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgaGFuZGxlclxuJiM0MzsgKiBiZWZvcmUgcmV0dXJuaW5nIGEgcG9zaXRpdmUgdmFsdWUuIFRoZSBwYXRoIGlzIG9wZW5lZCB3aXRoIHRoZVxuJiM0MzsgKiBjcmVkZW50aWFscyBvZiB0aGUgdGFzayBkb2luZyB0aGUgZXhlYyBhZnRlciB0aGUgcHJvZ3JhbSByZXR1cm5zLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfX3N6KVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XHRjaGFyICppbnRlcnA7XG4mIzQzO1xuJiM0MztcdGlmICghcGF0aF9fc3opXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRsZW4gPSBzdHJubGVuKHBhdGgsIHBhdGhfX3N6KTtcbiYjNDM7XHRpZiAobGVuID09IHBhdGhfX3N6KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHBhdGhbMF0gIT0gJiMzOTsvJiMzOTspXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAobGVuIFx1MDAzZT0gUEFUSF9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVOQU1FVE9PTE9ORztcbiYjNDM7XG4mIzQzO1x0aW50ZXJwID0ga21lbWR1cF9udWwocGF0aCwgbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWludGVycClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuJiM0MztcdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IGludGVycDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbiYjNDM7XG4mIzQzO0JURl9LRlVOQ1NfU1RBUlQoYm1fYnBmX2tmdW5jX2lkcylcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ludGVycCwgS0ZfU0xFRVBBQkxFKVxuJiM0MztCVEZfS0ZVTkNTX0VORChibV9icGZfa2Z1bmNfaWRzKVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBibV9icGZfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZibV9icGZfa2Z1bmNfaWRzLCBrZnVuY19pZCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKHByb2cpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBibV9icGZfa2Z1bmNfc2V0ID0ge1xuJiM0MztcdC5vd25lclx0PSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0XHQ9IFx1MDAyNmJtX2JwZl9rZnVuY19pZHMsXG4mIzQzO1x0LmZpbHRlclx0PSBibV9icGZfa2Z1bmNfZmlsdGVyLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBibV9icGZfb3BzX19sb2FkKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgYm1fYnBmX29wc19zdHVicyA9IHtcbiYjNDM7XHQubG9hZCA9IGJtX2JwZl9vcHNfX2xvYWQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJtX2JwZl9pbml0KHN0cnVjdCBidGYgKmJ0ZilcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZibV9icGZfa2Z1bmNfc2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBibV9icGZfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKG1vZmYpIHtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiaW5mbXRfbWlzY19vcHMsIGxvYWQpOlxuJiM0MztcdFx0LyogUmVsaWFibGUgZmlsZSByZWFkcyBhdCBleGVjIHRpbWUgcmVxdWlyZSBzbGVlcGluZy4gKi9cbiYjNDM7XHRcdGlmICghcHJvZy1cdTAwM2VzbGVlcGFibGUpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJtX2JwZl9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4mIzQzO1x0XHRcdCAgICAgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKnVvcHMgPSB1ZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMgPSBrZGF0YTtcbiYjNDM7XHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKG1vZmYpIHtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiaW5mbXRfbWlzY19vcHMsIG5hbWUpOlxuJiM0MztcdFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLVx1MDAzZW5hbWUsIHVvcHMtXHUwMDNlbmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVvZihvcHMtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYm1fYnBmX3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzID0ga2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghb3BzLVx1MDAzZWxvYWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBibV9icGZfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMgPSBrZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKnJlZztcbiYjNDM7XG4mIzQzO1x0cmVnID0ga3phbGxvY19vYmooKnJlZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRpZiAoIXJlZylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZWctXHUwMDNlb3BzID0gb3BzO1xuJiM0MztcdHJlZy1cdTAwM2VsaW5rID0gbGluaztcbiYjNDM7XHRyZWctXHUwMDNldXNlcl9ucyA9IGdldF91c2VyX25zKGN1cnJlbnRfdXNlcl9ucygpKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmJtX2JwZl9vcHNfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChibV9icGZfb3BzX2ZpbmQocmVnLVx1MDAzZXVzZXJfbnMsIG9wcy1cdTAwM2VuYW1lKSkge1xuJiM0MztcdFx0cHV0X3VzZXJfbnMocmVnLVx1MDAzZXVzZXJfbnMpO1xuJiM0MztcdFx0a2ZyZWUocmVnKTtcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2cmVnLVx1MDAzZWxpc3QsIFx1MDAyNmJtX2JwZl9vcHNfbGlzdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJtX2JwZl91bnJlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZibV9icGZfb3BzX2xvY2spO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgXHUwMDI2Ym1fYnBmX29wc19saXN0LCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAocmVnLVx1MDAzZW9wcyA9PSBrZGF0YSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZWxpbmsgPT0gbGluaykge1xuJiM0MztcdFx0XHRsaXN0X2RlbChcdTAwMjZyZWctXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRcdHB1dF91c2VyX25zKHJlZy1cdTAwM2V1c2VyX25zKTtcbiYjNDM7XHRcdFx0a2ZyZWUocmVnKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJtX2JwZl92ZXJpZmllcl9vcHMgPSB7XG4mIzQzO1x0LmdldF9mdW5jX3Byb3RvXHRcdD0gYnBmX2Jhc2VfZnVuY19wcm90byxcbiYjNDM7XHQuaXNfdmFsaWRfYWNjZXNzXHQ9IGJwZl90cmFjaW5nX2J0Zl9jdHhfYWNjZXNzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfYmluZm10X21pc2Nfb3BzID0ge1xuJiM0MztcdC52ZXJpZmllcl9vcHNcdD0gXHUwMDI2Ym1fYnBmX3ZlcmlmaWVyX29wcyxcbiYjNDM7XHQuaW5pdFx0XHQ9IGJtX2JwZl9pbml0LFxuJiM0MztcdC5jaGVja19tZW1iZXJcdD0gYm1fYnBmX2NoZWNrX21lbWJlcixcbiYjNDM7XHQuaW5pdF9tZW1iZXJcdD0gYm1fYnBmX2luaXRfbWVtYmVyLFxuJiM0MztcdC52YWxpZGF0ZVx0PSBibV9icGZfdmFsaWRhdGUsXG4mIzQzO1x0LnJlZ1x0XHQ9IGJtX2JwZl9yZWcsXG4mIzQzO1x0LnVucmVnXHRcdD0gYm1fYnBmX3VucmVnLFxuJiM0MztcdC5jZmlfc3R1YnNcdD0gXHUwMDI2Ym1fYnBmX29wc19zdHVicyxcbiYjNDM7XHQubmFtZVx0XHQ9IFwmIzM0O2JpbmZtdF9taXNjX29wc1wmIzM0OyxcbiYjNDM7XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGJtX2JwZl9zdHJ1Y3Rfb3BzX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcdTAwMjZicGZfYmluZm10X21pc2Nfb3BzLCBiaW5mbXRfbWlzY19vcHMpO1xuJiM0Mzt9XG4mIzQzO2xhdGVfaW5pdGNhbGwoYm1fYnBmX3N0cnVjdF9vcHNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvZnMvYnBmX2ZzX2tmdW5jcy5jIGIvZnMvYnBmX2ZzX2tmdW5jcy5jXG5pbmRleCA3NjhhY2EyZGMwZjAzNC4uYWExZmU5ODhiNmQyMjkgMTAwNjQ0XG4tLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuQEAgLTEsNiAmIzQzOzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChjKSAyMDI0IEdvb2dsZSBMTEMuICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdF9taXNjLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG5AQCAtMzg3LDEwICYjNDM7Mzg4LDIwIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXG4gXG4mIzQzOy8qIFNpZGUtZWZmZWN0aW5nIGtmdW5jcyB0aGF0IHN0YXkgZXhjbHVzaXZlIHRvIExTTSBwcm9ncmFtcy4gKi9cbiYjNDM7QlRGX1NFVF9TVEFSVChicGZfZnNfa2Z1bmNfbHNtX29ubHlfaWRzKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpXG4mIzQzO0JURl9JRChmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cilcbiYjNDM7QlRGX1NFVF9FTkQoYnBmX2ZzX2tmdW5jX2xzbV9vbmx5X2lkcylcbiYjNDM7XG4gc3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbiB7XG4tXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmJwZl9mc19rZnVuY19zZXRfaWRzLCBrZnVuY19pZCkgfHxcbi1cdCAgICBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pXG4mIzQzO1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmIChicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMocHJvZykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFidGZfaWRfc2V0X2NvbnRhaW5zKFx1MDAyNmJwZl9mc19rZnVuY19sc21fb25seV9pZHMsIGtmdW5jX2lkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gLUVBQ0NFUztcbiB9XG5AQCAtNDMzLDcgJiM0Mzs0NDQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc19rZnVuY19zZXQgPSB7XG4gXG4gc3RhdGljIGludCBfX2luaXQgYnBmX2ZzX2tmdW5jc19pbml0KHZvaWQpXG4ge1xuLVx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuJiM0MztcdGlmIChyZXQgfHwgIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZicGZfZnNfa2Z1bmNfc2V0KTtcbiB9XG4gXG4gbGF0ZV9pbml0Y2FsbChicGZfZnNfa2Z1bmNzX2luaXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggYjkyZmU3ZGIxNzZjZmYuLjdjOWUyOGY1NDlhNDUzIDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmNcbkBAIC0xNDE4LDYgJiM0MzsxNDE4LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHQvKiBJZiBhIGJpbmZtdCBjaGFuZ2VkIHRoZSBpbnRlcnAsIGZyZWUgaXQuICovXG4gXHRpZiAoYnBybS1cdTAwM2VpbnRlcnAgIT0gYnBybS1cdTAwM2VmaWxlbmFtZSlcbiBcdFx0a2ZyZWUoYnBybS1cdTAwM2VpbnRlcnApO1xuJiM0MztcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycCk7XG4gXHRrZnJlZShicHJtLVx1MDAzZWZkcGF0aCk7XG4gXHRrZnJlZShicHJtKTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmUxZDI2YzQzMDFkYTJjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbkBAIC0wLDAgJiM0MzsxLDQ5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX0xJTlVYX0JJTkZNVF9NSVNDX0hcbiYjNDM7I2RlZmluZSBfTElOVVhfQklORk1UX01JU0NfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IGJwZl9wcm9nO1xuJiM0MztzdHJ1Y3QgbGludXhfYmlucHJtO1xuJiM0MztzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJJTkZNVF9NSVNDX09QU19OQU1FX01BWCAxNlxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgLSBicGYtYmFja2VkIGJpbmFyeSB0eXBlIGhhbmRsZXJcbiYjNDM7ICogQGxvYWQ6IG1hdGNoIEBicHJtIGFuZCBzZWxlY3QgYW4gaW50ZXJwcmV0ZXIgdmlhIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpO1xuJiM0MzsgKiAgICAgICAgcmV0dXJucyBcdTAwM2UgMCBpZiB0aGUgYmluYXJ5IHdhcyBoYW5kbGVkLCAwIHRvIGZhbGwgdGhyb3VnaCB0byB0aGVcbiYjNDM7ICogICAgICAgIGhhbmRsZXJzIHJlZ2lzdGVyZWQgYWZ0ZXIgdGhpcyBvbmUsIGEgbmVnYXRpdmUgZXJybm8gdG8gZmFpbCB0aGVcbiYjNDM7ICogICAgICAgIGV4ZWM7IC1FTk9FWEVDIGRvZXMgbm90IGZhaWwgdGhlIGV4ZWMgYnV0IG1vdmVzIG9uIHRvIHRoZVxuJiM0MzsgKiAgICAgICAgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzXG4mIzQzOyAqIEBuYW1lOiBuYW1lIHRoYXQgJiMzOTtCJiMzOTsgZW50cmllcyByZWZlcmVuY2UgdGhlIGhhbmRsZXIgYnlcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBiaW5mbXRfbWlzY19vcHMge1xuJiM0MztcdGludCAoKmxvYWQpKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pO1xuJiM0MztcdGNoYXIgbmFtZVtCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVhdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19CSU5GTVRfTUlTQ19CUEZcbiYjNDM7Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqYmluZm10X21pc2NfZ2V0X29wcyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgY29uc3QgY2hhciAqbmFtZSk7XG4mIzQzO3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpO1xuJiM0Mztib29sIGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKlxuJiM0MztiaW5mbXRfbWlzY19nZXRfb3BzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19CSU5GTVRfTUlTQ19CUEYgKi9cbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfTElOVVhfQklORk1UX01JU0NfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbmluZGV4IDJjNzdlMzgzZTczNzU3Li4wMDcwZDIwN2Q1NGYwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaFxuQEAgLTY1LDYgJiM0Mzs2NSw3IEBAIHN0cnVjdCBsaW51eF9iaW5wcm0ge1xuIFx0XHRcdFx0ICAgb2YgdGhlIHRpbWUgc2FtZSBhcyBmaWxlbmFtZSwgYnV0IGNvdWxkIGJlXG4gXHRcdFx0XHQgICBkaWZmZXJlbnQgZm9yIGJpbmZtdF97bWlzYyxzY3JpcHR9ICovXG4gXHRjb25zdCBjaGFyICpmZHBhdGg7XHQvKiBnZW5lcmF0ZWQgZmlsZW5hbWUgZm9yIGV4ZWN2ZWF0ICovXG4mIzQzO1x0Y29uc3QgY2hhciAqYnBmX2ludGVycDtcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cbiBcdHVuc2lnbmVkIGludGVycF9mbGFncztcbiBcdGludCBleGVjZmQ7XHRcdC8qIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZXhlY3V0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZyBleGVjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA2OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtibV9icGZfcmVnJiMzNDssCiAgICAmIzM0O2JtX2JwZl91bnJlZyYjMzQ7LAogICAgJiMzNDtjcmVhdGVfZW50cnkmIzM0OywKICAgICYjMzQ7Ym1fcmVnaXN0ZXJfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBhY3QgYXMgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLiBJdCBhZGRzIG5ldyBCUEYgc3RydWN0X29wcyBhbmQga2Z1bmNzLCBhbmQgbW9kaWZpZXMgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBhbmQgZXhlY3V0aW9uIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiwgdGhlIG5ldyBrZnVuYywgYW5kIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RyYXRpb24gcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTY5MTJkMDk0NjRjOTNmMzY1MDU0ZGQ2NzNjMmFkMTk3ZjMwNTRmMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMDY6MDA6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0CmluZGV4IGMwYTM0ZmJmODAyMmI1Li5jMGVmYjA3NzM2Mjg0MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QKQEAgLTI2LDExICYjNDM7MjYsMTMgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjoKICAgIG5hbWUgYmVsb3cgYGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2NgYDsgY2Fubm90IGNvbnRhaW4gc2xhc2hlcyBgYC9gYCBmb3IKICAgIG9idmlvdXMgcmVhc29ucy4KIC0gYGB0eXBlYGAKLSAgIGlzIHRoZSB0eXBlIG9mIHJlY29nbml0aW9uLiBHaXZlIGBgTWBgIGZvciBtYWdpYyBhbmQgYGBFYGAgZm9yIGV4dGVuc2lvbi4KJiM0MzsgICBpcyB0aGUgdHlwZSBvZiByZWNvZ25pdGlvbi4gR2l2ZSBgYE1gYCBmb3IgbWFnaWMsIGBgRWBgIGZvciBleHRlbnNpb24gYW5kCiYjNDM7ICAgYGBCYGAgZm9yIGEgYnBmLWJhY2tlZCBoYW5kbGVyIChzZWUgYmVsb3cpLgogLSBgYG9mZnNldGBgCiAgICBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBtYWdpYy9tYXNrIGluIHRoZSBmaWxlLCBjb3VudGVkIGluIGJ5dGVzLiBUaGlzCiAgICBkZWZhdWx0cyB0byAwIGlmIHlvdSBvbWl0IGl0IChpLmUuIHlvdSB3cml0ZSBgYDpuYW1lOnR5cGU6Om1hZ2ljLi4uYGApLgotICAgSWdub3JlZCB3aGVuIHVzaW5nIGZpbGVuYW1lIGV4dGVuc2lvbiBtYXRjaGluZy4KJiM0MzsgICBJZ25vcmVkIHdoZW4gdXNpbmcgZmlsZW5hbWUgZXh0ZW5zaW9uIG1hdGNoaW5nLiBGb3IgYGBCYGAgZW50cmllcyB0aGlzCiYjNDM7ICAgZmllbGQgY2FycmllcyB0aGUgbmFtZSBvZiB0aGUgYnBmIGhhbmRsZXIgaW5zdGVhZC4KIC0gYGBtYWdpY2BgCiAgICBpcyB0aGUgYnl0ZSBzZXF1ZW5jZSBiaW5mbXRfbWlzYyBpcyBtYXRjaGluZyBmb3IuIFRoZSBtYWdpYyBzdHJpbmcKICAgIG1heSBjb250YWluIGhleC1lbmNvZGVkIGNoYXJhY3RlcnMgbGlrZSBgYFx4MGFgYCBvciBgYFx4QTRgYC4gTm90ZSB0aGF0IHlvdQpAQCAtOTcsNiAmIzQzOzk5LDQwIEBAIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczoKICAgIG9mZnNldCYjNDM7c2l6ZShtYWdpYykgaGFzIHRvIGJlIGxlc3MgdGhhbiAxMjgKICAtIHRoZSBpbnRlcnByZXRlciBzdHJpbmcgbWF5IG5vdCBleGNlZWQgMTI3IGNoYXJhY3RlcnMKIAomIzQzOwomIzQzO2JwZi1iYWNrZWQgaGFuZGxlcnMKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7V2l0aCBgYENPTkZJR19CSU5GTVRfTUlTQ19CUEZgYCBib3RoIHRoZSBtYXRjaGluZyBhbmQgdGhlIGludGVycHJldGVyCiYjNDM7c2VsZWN0aW9uIGNhbiBiZSBkZWxlZ2F0ZWQgdG8gYSBicGYgcHJvZ3JhbS4gQSBoYW5kbGVyIGlzIGFuIGluc3RhbmNlIG9mIHRoZQomIzQzO2BgYmluZm10X21pc2Nfb3BzYGAgc3RydWN0X29wcyB3aXRoIGEgc2xlZXBhYmxlIGBgbG9hZGBgIHByb2dyYW0gYW5kIGEKJiM0MztgYG5hbWVgYC4gT25jZSB0aGUgc3RydWN0X29wcyBtYXAgaXMgcmVnaXN0ZXJlZCB0aGUgaGFuZGxlciBjYW4gYmUgYWN0aXZhdGVkCiYjNDM7d2l0aCBhIGBgQmBgIGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdCBieSBuYW1lIGFuZCBjYXJyaWVzIG5laXRoZXIgbWFnaWMsCiYjNDM7bWFzaywgbm9yIGludGVycHJldGVyOjoKJiM0MzsKJiM0MzsgICAgZWNobyAmIzM5OzpxZW11OkI6bXlfaGFuZGxlcjo6OjomIzM5OyAmZ3Q7IHJlZ2lzdGVyCiYjNDM7CiYjNDM7QXQgZXhlYyB0aW1lIHRoZSBgYGxvYWRgYCBwcm9ncmFtIHJlY2VpdmVzIHRoZSBgYGxpbnV4X2JpbnBybWBgIG9mIHRoZQomIzQzO2JpbmFyeS4gSXQgY2FuIG1hdGNoIG9uIHRoZSBoZWFkZXIgaW4gYGBicHJtLSZndDtidWZgYCwgcmVhZCB0aGUgZmlsZSBpdHNlbGYsCiYjNDM7ZS5nLiB0byBwYXJzZSBFTEYgcHJvZ3JhbSBoZWFkZXJzLCBhbmQgZGVyaXZlIHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZQomIzQzO2JpbmFyeSYjMzk7cyBsb2NhdGlvbi4gSXQgc2VsZWN0cyB0aGUgaW50ZXJwcmV0ZXIgYnkgY2FsbGluZyB0aGUKJiM0MztgYGJwZl9iaW5wcm1fc2V0X2ludGVycCgpYGAga2Z1bmMgd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIGFuZCByZXR1cm5pbmcgYQomIzQzO3Bvc2l0aXZlIHZhbHVlLiBSZXR1cm5pbmcgYGAwYGAgZmFsbHMgdGhyb3VnaCB0byB0aGUgaGFuZGxlcnMgcmVnaXN0ZXJlZAomIzQzO2FmdGVyIHRoaXMgb25lLCBhIG5lZ2F0aXZlIGVycm5vIGZhaWxzIHRoZSBleGVjIHdpdGggdGhhdCBlcnJvcjsKJiM0MztgYC1FTk9FWEVDYGAgZW5kcyB0aGUgYmluZm10X21pc2Mgc2VhcmNoIGJ1dCBsZXRzIHRoZSByZW1haW5pbmcgYmluYXJ5CiYjNDM7Zm9ybWF0cyBoYXZlIGEgZ28uIFRoZSBpbnRlcnByZXRlciBpcyBvcGVuZWQgd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlCiYjNDM7dGFzayBkb2luZyB0aGUgZXhlYywgZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3b3VsZAomIzQzO2JlLgomIzQzOwomIzQzO0hhbmRsZXJzIGFyZSBsb29rZWQgdXAgaW4gdGhlIHVzZXIgbmFtZXNwYWNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCB3YXMKJiM0MztyZWdpc3RlcmVkIGluLCBmYWxsaW5nIGJhY2sgdG8gYW5jZXN0b3IgbmFtZXNwYWNlcywgbWlycm9yaW5nIGhvdwomIzQzO2JpbmZtdF9taXNjIGluc3RhbmNlcyB0aGVtc2VsdmVzIGFyZSBsb29rZWQgdXAuIFRoZSBlbnRyeSBrZWVwcyB0aGUgaGFuZGxlcgomIzQzO2FsaXZlOyBkZWxldGluZyB0aGUgc3RydWN0X29wcyBtYXAgb25seSBwcmV2ZW50cyBuZXcgcmVnaXN0cmF0aW9ucy4KJiM0MzsKJiM0MztUaGUgYGBDYGAgYW5kIGBgRmBgIGZsYWdzIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGBgQmBgIGVudHJpZXM6IHRoZXJlIGlzIG5vCiYjNDM7Zml4ZWQgaW50ZXJwcmV0ZXIgdG8gcHJlLW9wZW4gYW5kIGEgcHJvZ3JhbS1zZWxlY3RlZCBpbnRlcnByZXRlciBtdXN0IG5ldmVyCiYjNDM7aW5oZXJpdCB0aGUgY3JlZGVudGlhbHMgb2YgYSBzZXR1aWQgYmluYXJ5LgomIzQzOwogVG8gdXNlIGJpbmZtdF9taXNjIHlvdSBoYXZlIHRvIG1vdW50IGl0IGZpcnN0LiBZb3UgY2FuIG1vdW50IGl0IHdpdGgKIGBgbW91bnQgLXQgYmluZm10X21pc2Mgbm9uZSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2NgYCBjb21tYW5kLCBvciB5b3UgY2FuIGFkZAogYSBsaW5lIGBgbm9uZSAgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIGJpbmZtdF9taXNjIGRlZmF1bHRzIDAgMGBgIHRvIHlvdXIKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcuYmluZm10IGIvZnMvS2NvbmZpZy5iaW5mbXQKaW5kZXggMTk0OWUyNWM3NzQxYjEuLmRhZWFjNDg4OWQwM2VmIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnLmJpbmZtdAomIzQzOyYjNDM7JiM0MzsgYi9mcy9LY29uZmlnLmJpbmZtdApAQCAtMTY4LDYgJiM0MzsxNjgsMjAgQEAgY29uZmlnIEJJTkZNVF9NSVNDCiAJICB5b3UgaGF2ZSB1c2UgZm9yIGl0OyB0aGUgbW9kdWxlIGlzIGNhbGxlZCBiaW5mbXRfbWlzYy4gSWYgeW91CiAJICBkb24mIzM5O3Qga25vdyB3aGF0IHRvIGFuc3dlciBhdCB0aGlzIHBvaW50LCBzYXkgWS4KIAomIzQzO2NvbmZpZyBCSU5GTVRfTUlTQ19CUEYKJiM0MzsJYm9vbCAmIzM0O0JQRi1zZWxlY3RlZCBpbnRlcnByZXRlcnMgZm9yIG1pc2MgYmluYXJpZXMmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEJJTkZNVF9NSVNDPXkKJiM0MzsJZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCAmYW1wOyZhbXA7IEJQRl9KSVQgJmFtcDsmYW1wOyBERUJVR19JTkZPX0JURgomIzQzOwloZWxwCiYjNDM7CSAgQWxsb3cgYmluZm10X21pc2MgYmluYXJ5IHR5cGUgaGFuZGxlcnMgdG8gYmUgaW1wbGVtZW50ZWQgYXMgYnBmCiYjNDM7CSAgc3RydWN0X29wcyBwcm9ncmFtcy4gSW5zdGVhZCBvZiBtYXRjaGluZyBhIGZpeGVkIG1hZ2ljIGFuZAomIzQzOwkgIHJlZGlyZWN0aW5nIHRvIGEgZml4ZWQgaW50ZXJwcmV0ZXIgcmVjb3JkZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWUKJiM0MzsJICBzdWNoIGhhbmRsZXJzIG1hdGNoIGJpbmFyaWVzIHByb2dyYW1tYXRpY2FsbHkgYW5kIGNvbXB1dGUgdGhlCiYjNDM7CSAgaW50ZXJwcmV0ZXIgdG8gdXNlIHBlciBiaW5hcnksIGUuZy4gcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mCiYjNDM7CSAgdGhlIGJpbmFyeSBpdHNlbGYuCiYjNDM7CiYjNDM7CSAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gYW5zd2VyIGF0IHRoaXMgcG9pbnQsIHNheSBOLgomIzQzOwogY29uZmlnIENPUkVEVU1QCiAJYm9vbCAmIzM0O0VuYWJsZSBjb3JlIGR1bXAgc3VwcG9ydCYjMzQ7IGlmIEVYUEVSVAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZQppbmRleCA4OWE4YTlkMjA3ZDFjNS4uNDk5YzY2NzBmMGMxODMgMTAwNjQ0Ci0tLSBhL2ZzL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL01ha2VmaWxlCkBAIC0zMyw2ICYjNDM7MzMsNyBAQCBvYmotJChDT05GSUdfRlNfRU5DUllQVElPTikJJiM0Mzs9IGNyeXB0by8KIG9iai0kKENPTkZJR19GU19WRVJJVFkpCQkmIzQzOz0gdmVyaXR5Lwogb2JqLSQoQ09ORklHX0ZJTEVfTE9DS0lORykgICAgICAmIzQzOz0gbG9ja3Mubwogb2JqLSQoQ09ORklHX0JJTkZNVF9NSVNDKQkmIzQzOz0gYmluZm10X21pc2MubwomIzQzO29iai0kKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpCSYjNDM7PSBiaW5mbXRfbWlzY19icGYubwogb2JqLSQoQ09ORklHX0JJTkZNVF9TQ1JJUFQpCSYjNDM7PSBiaW5mbXRfc2NyaXB0Lm8KIG9iai0kKENPTkZJR19CSU5GTVRfRUxGKQkmIzQzOz0gYmluZm10X2VsZi5vCiBvYmotJChDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEYpCSYjNDM7PSBjb21wYXRfYmluZm10X2VsZi5vCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuYwppbmRleCA4NDM0OWZjYjkzZjEzYS4uYjgwZTIxOWJhNTg3NmIgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmluZm10X21pc2MuYwpAQCAtMTcsNiAmIzQzOzE3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21hZ2ljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmluZm10cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRfbWlzYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jdHlwZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZ19oZWxwZXJzLmgmZ3Q7CkBAIC00MSw3ICYjNDM7NDIsNyBAQCBlbnVtIHsKIAlWRVJCT1NFX1NUQVRVUyA9IDEgLyogbWFrZSBpdCB6ZXJvIHRvIHNhdmUgNDAwIGJ5dGVzIGtlcm5lbCBtZW1vcnkgKi8KIH07CiAKLWVudW0ge0VuYWJsZWQsIE1hZ2ljfTsKJiM0MztlbnVtIHtFbmFibGVkLCBNYWdpYywgQnBmfTsKICNkZWZpbmUgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAgKDFVTCAmbHQ7Jmx0OyAzMSkKICNkZWZpbmUgTUlTQ19GTVRfT1BFTl9CSU5BUlkgKDFVTCAmbHQ7Jmx0OyAzMCkKICNkZWZpbmUgTUlTQ19GTVRfQ1JFREVOVElBTFMgKDFVTCAmbHQ7Jmx0OyAyOSkKQEAgLTU4LDYgJiM0Mzs1OSw4IEBAIHR5cGVkZWYgc3RydWN0IHsKIAljaGFyICpuYW1lOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGU7CiYjNDM7CWNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJwZl9vcHM7CS8qIGJwZi1iYWNrZWQgaGFuZGxlciAoJiMzOTtCJiMzOTspICovCiYjNDM7CWNvbnN0IGNoYXIgKmJwZl9vcHNfbmFtZTsKIAlyZWZjb3VudF90IHVzZXJzOwkJLyogc3luYyByZW1vdmFsIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpICovCiB9IE5vZGU7CiAKQEAgLTgyLDE0ICYjNDM7ODUsMTkgQEAgc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGJtX2ZzX3R5cGU7CiAgKiBzZWFyY2hfYmluZm10X2hhbmRsZXIgLSBzZWFyY2ggZm9yIGEgYmluYXJ5IGhhbmRsZXIgZm9yIEBicHJtCiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlCiAgKiBAYnBybTogYmluYXJ5IGZvciB3aGljaCB3ZSBhcmUgbG9va2luZyBmb3IgYSBoYW5kbGVyCiYjNDM7ICogQGJwZl9za2lwOiBudW1iZXIgb2YgYnBmLWJhY2tlZCBoYW5kbGVycyB0byBza2lwIG92ZXIKICAqCiAgKiBTZWFyY2ggZm9yIGEgYmluYXJ5IHR5cGUgaGFuZGxlciBmb3IgQGJwcm0gaW4gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBiaW5hcnkKLSAqIHR5cGUgaGFuZGxlcnMuCiYjNDM7ICogdHlwZSBoYW5kbGVycy4gQSBicGYtYmFja2VkIGhhbmRsZXIgY2Fubm90IGJlIG1hdGNoZWQgaGVyZSBhcyBpdHMgcHJvZ3JhbQomIzQzOyAqIG11c3QgcnVuIGluIHNsZWVwYWJsZSBjb250ZXh0OyBpdCBpcyByZXR1cm5lZCBhcyBhIGNhbmRpZGF0ZSBhbmQgdGhlCiYjNDM7ICogcHJvZ3JhbSBkZWNpZGVzIGluIGxvYWRfbWlzY19iaW5hcnkoKS4gQGJwZl9za2lwIGFsbG93cyB0aGUgY2FsbGVyIHRvCiYjNDM7ICogcmVzdW1lIHRoZSBzZWFyY2ggYWZ0ZXIgdGhlIGZpcnN0IEBicGZfc2tpcCBjYW5kaWRhdGVzIGRlY2xpbmVkLgogICoKICAqIFJldHVybjogYmluYXJ5IHR5cGUgbGlzdCBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUKICAqLwogc3RhdGljIE5vZGUgKnNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsCi0JCQkJICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0MzsJCQkJICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IGJwZl9za2lwKQogewogCWNoYXIgKnAgPSBzdHJyY2hyKGJwcm0tJmd0O2ludGVycCwgJiMzOTsuJiMzOTspOwogCU5vZGUgKmU7CkBAIC0xMDMsNiAmIzQzOzExMSwxNSBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywKIAkJaWYgKCF0ZXN0X2JpdChFbmFibGVkLCAmYW1wO2UtJmd0O2ZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQkvKiBUaGUgcHJvZ3JhbSBkZWNpZGVzIGluIGxvYWRfbWlzY19iaW5hcnkoKS4gKi8KJiM0MzsJCWlmICh0ZXN0X2JpdChCcGYsICZhbXA7ZS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQkJaWYgKGJwZl9za2lwKSB7CiYjNDM7CQkJCWJwZl9za2lwLS07CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCQlyZXR1cm4gZTsKJiM0MzsJCX0KJiM0MzsKIAkJLyogRG8gbWF0Y2hpbmcgYmFzZWQgb24gZXh0ZW5zaW9uIGlmIGFwcGxpY2FibGUuICovCiAJCWlmICghdGVzdF9iaXQoTWFnaWMsICZhbXA7ZS0mZ3Q7ZmxhZ3MpKSB7CiAJCQlpZiAocCAmYW1wOyZhbXA7ICFzdHJjbXAoZS0mZ3Q7bWFnaWMsIHAgJiM0MzsgMSkpCkBAIC0xMzIsNiAmIzQzOzE0OSw3IEBAIHN0YXRpYyBOb2RlICpzZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLAogICogZ2V0X2JpbmZtdF9oYW5kbGVyIC0gdHJ5IHRvIGZpbmQgYSBiaW5hcnkgdHlwZSBoYW5kbGVyCiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlCiAgKiBAYnBybTogYmluYXJ5IGZvciB3aGljaCB3ZSBhcmUgbG9va2luZyBmb3IgYSBoYW5kbGVyCiYjNDM7ICogQGJwZl9za2lwOiBudW1iZXIgb2YgYnBmLWJhY2tlZCBoYW5kbGVycyB0byBza2lwIG92ZXIKICAqCiAgKiBUcnkgdG8gZmluZCBhIGJpbmZtdCBoYW5kbGVyIGZvciB0aGUgYmluYXJ5IHR5cGUuIElmIG9uZSBpcyBmb3VuZCB0YWtlIGEKICAqIHJlZmVyZW5jZSB0byBwcm90ZWN0IGFnYWluc3QgcmVtb3ZhbCB2aWEgYm1fe2VudHJ5LHN0YXR1c31fd3JpdGUoKS4KQEAgLTEzOSwxMiAmIzQzOzE1NywxMyBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywKICAqIFJldHVybjogYmluYXJ5IHR5cGUgbGlzdCBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUKICAqLwogc3RhdGljIE5vZGUgKmdldF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsCi0JCQkJc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0MzsJCQkJc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJdW5zaWduZWQgaW50IGJwZl9za2lwKQogewogCU5vZGUgKmU7CiAKIAlyZWFkX2xvY2soJmFtcDttaXNjLSZndDtlbnRyaWVzX2xvY2spOwotCWUgPSBzZWFyY2hfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSk7CiYjNDM7CWUgPSBzZWFyY2hfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSwgYnBmX3NraXApOwogCWlmIChlKQogCQlyZWZjb3VudF9pbmMoJmFtcDtlLSZndDt1c2Vycyk7CiAJcmVhZF91bmxvY2soJmFtcDttaXNjLSZndDtlbnRyaWVzX2xvY2spOwpAQCAtMTY0LDYgJiM0MzsxODMsOCBAQCBzdGF0aWMgdm9pZCBwdXRfYmluZm10X2hhbmRsZXIoTm9kZSAqZSkKIAlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7ZS0mZ3Q7dXNlcnMpKSB7CiAJCWlmIChlLSZndDtmbGFncyAmYW1wOyBNSVNDX0ZNVF9PUEVOX0ZJTEUpCiAJCQlmaWxwX2Nsb3NlKGUtJmd0O2ludGVycF9maWxlLCBOVUxMKTsKJiM0MzsJCWlmIChlLSZndDticGZfb3BzKQomIzQzOwkJCWJpbmZtdF9taXNjX3B1dF9vcHMoZS0mZ3Q7YnBmX29wcyk7CiAJCWtmcmVlKGUpOwogCX0KIH0KQEAgLTIwNiwxMiAmIzQzOzIyNywxNSBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAlzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGUgPSBOVUxMOwogCWludCByZXR2YWwgPSAtRU5PRVhFQzsKIAlzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2M7CiYjNDM7CWNvbnN0IGNoYXIgKmludGVycHJldGVyOwomIzQzOwl1bnNpZ25lZCBpbnQgYnBmX3NraXAgPSAwOwogCiAJbWlzYyA9IGxvYWRfYmluZm10X21pc2MoKTsKIAlpZiAoIW1pc2MtJmd0O2VuYWJsZWQpCiAJCXJldHVybiByZXR2YWw7CiAKLQlmbXQgPSBnZXRfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSk7CiYjNDM7cmV0cnk6CiYjNDM7CWZtdCA9IGdldF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtLCBicGZfc2tpcCk7CiAJaWYgKCFmbXQpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTIyMCw2ICYjNDM7MjQ0LDMyIEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCWlmIChicHJtLSZndDtpbnRlcnBfZmxhZ3MgJmFtcDsgQklOUFJNX0ZMQUdTX1BBVEhfSU5BQ0NFU1NJQkxFKQogCQlnb3RvIHJldDsKIAomIzQzOwlpZiAodGVzdF9iaXQoQnBmLCAmYW1wO2ZtdC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlyZXR2YWwgPSBmbXQtJmd0O2JwZl9vcHMtJmd0O2xvYWQoYnBybSk7CiYjNDM7CQlpZiAocmV0dmFsICZsdDsgMCkgewomIzQzOwkJCS8qIEtlZXAgYSBwcm9ncmFtLXN1cHBsaWVkIGVycm9yIHdpdGhpbiBlcnJubyByYW5nZS4gKi8KJiM0MzsJCQlpZiAocmV0dmFsICZsdDsgLU1BWF9FUlJOTykKJiM0MzsJCQkJcmV0dmFsID0gLUVOT0VYRUM7CiYjNDM7CQkJZ290byByZXQ7CiYjNDM7CQl9CiYjNDM7CQlpZiAoIXJldHZhbCkgewomIzQzOwkJCS8qIERlY2xpbmVkLCBtb3ZlIG9uIHRvIGxhdGVyIGhhbmRsZXJzLiAqLwomIzQzOwkJCWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnApOwomIzQzOwkJCWJwcm0tJmd0O2JwZl9pbnRlcnAgPSBOVUxMOwomIzQzOwkJCXB1dF9iaW5mbXRfaGFuZGxlcihmbXQpOwomIzQzOwkJCWJwZl9za2lwJiM0MzsmIzQzOzsKJiM0MzsJCQlyZXR2YWwgPSAtRU5PRVhFQzsKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJfQomIzQzOwkJLyogU2VsZWN0aW5nIGFuIGludGVycHJldGVyIGlzIHBhcnQgb2YgdGhlIGNvbnRyYWN0LiAqLwomIzQzOwkJcmV0dmFsID0gLUVOT0VYRUM7CiYjNDM7CQlpZiAoIWJwcm0tJmd0O2JwZl9pbnRlcnApCiYjNDM7CQkJZ290byByZXQ7CiYjNDM7CQlpbnRlcnByZXRlciA9IGJwcm0tJmd0O2JwZl9pbnRlcnA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpbnRlcnByZXRlciA9IGZtdC0mZ3Q7aW50ZXJwcmV0ZXI7CiYjNDM7CX0KJiM0MzsKIAlpZiAoZm10LSZndDtmbGFncyAmYW1wOyBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCkgewogCQlicHJtLSZndDtpbnRlcnBfZmxhZ3MgfD0gQklOUFJNX0ZMQUdTX1BSRVNFUlZFX0FSR1YwOwogCX0gZWxzZSB7CkBAIC0yMzgsMTMgJiM0MzsyODgsMTMgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAJYnBybS0mZ3Q7YXJnYyYjNDM7JiM0Mzs7CiAKIAkvKiBhZGQgdGhlIGludGVycCBhcyBhcmd2WzBdICovCi0JcmV0dmFsID0gY29weV9zdHJpbmdfa2VybmVsKGZtdC0mZ3Q7aW50ZXJwcmV0ZXIsIGJwcm0pOwomIzQzOwlyZXR2YWwgPSBjb3B5X3N0cmluZ19rZXJuZWwoaW50ZXJwcmV0ZXIsIGJwcm0pOwogCWlmIChyZXR2YWwgJmx0OyAwKQogCQlnb3RvIHJldDsKIAlicHJtLSZndDthcmdjJiM0MzsmIzQzOzsKIAogCS8qIFVwZGF0ZSBpbnRlcnAgaW4gY2FzZSBiaW5mbXRfc2NyaXB0IG5lZWRzIGl0LiAqLwotCXJldHZhbCA9IGJwcm1fY2hhbmdlX2ludGVycChmbXQtJmd0O2ludGVycHJldGVyLCBicHJtKTsKJiM0MzsJcmV0dmFsID0gYnBybV9jaGFuZ2VfaW50ZXJwKGludGVycHJldGVyLCBicHJtKTsKIAlpZiAocmV0dmFsICZsdDsgMCkKIAkJZ290byByZXQ7CiAKQEAgLTI1Myw3ICYjNDM7MzAzLDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAJCWlmICghSVNfRVJSKGludGVycF9maWxlKSkKIAkJCWRlbnlfd3JpdGVfYWNjZXNzKGludGVycF9maWxlKTsKIAl9IGVsc2UgewotCQlpbnRlcnBfZmlsZSA9IG9wZW5fZXhlYyhmbXQtJmd0O2ludGVycHJldGVyKTsKJiM0MzsJCWludGVycF9maWxlID0gb3Blbl9leGVjKGludGVycHJldGVyKTsKIAl9CiAJcmV0dmFsID0gUFRSX0VSUihpbnRlcnBfZmlsZSk7CiAJaWYgKElTX0VSUihpbnRlcnBfZmlsZSkpCkBAIC0yNjUsNiAmIzQzOzMxNSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCiAJcmV0dmFsID0gMDsKIHJldDoKJiM0MzsJLyogQSBwcm9ncmFtLXNlbGVjdGVkIGludGVycHJldGVyIGlzIGNvbnN1bWVkIGJ5IHRoaXMgZXhlYyBhdHRlbXB0LiAqLwomIzQzOwlrZnJlZShicHJtLSZndDticGZfaW50ZXJwKTsKJiM0MzsJYnBybS0mZ3Q7YnBmX2ludGVycCA9IE5VTEw7CiAKIAkvKgogCSAqIElmIHdlIGFjdHVhbGx5IHB1dCB0aGUgbm9kZSBoZXJlIGFsbCBjb25jdXJyZW50IGNhbGxzIHRvCkBAIC00MDQsMTMgJiM0Mzs0NTcsNDcgQEAgc3RhdGljIE5vZGUgKmNyZWF0ZV9lbnRyeShjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpCiAJCXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IHR5cGU6IE0gKG1hZ2ljKVxuJiMzNDspOwogCQllLSZndDtmbGFncyA9ICgxICZsdDsmbHQ7IEVuYWJsZWQpIHwgKDEgJmx0OyZsdDsgTWFnaWMpOwogCQlicmVhazsKJiM0MzsJY2FzZSAmIzM5O0ImIzM5OzoKJiM0MzsJCWlmICghSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0NfQlBGKSkKJiM0MzsJCQlnb3RvIGVpbnZhbDsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IHR5cGU6IEIgKGJwZilcbiYjMzQ7KTsKJiM0MzsJCWUtJmd0O2ZsYWdzID0gKDEgJmx0OyZsdDsgRW5hYmxlZCkgfCAoMSAmbHQ7Jmx0OyBCcGYpOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZ290byBlaW52YWw7CiAJfQogCWlmICgqcCYjNDM7JiM0MzsgIT0gZGVsKQogCQlnb3RvIGVpbnZhbDsKIAotCWlmICh0ZXN0X2JpdChNYWdpYywgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJaWYgKHRlc3RfYml0KEJwZiwgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJCWNoYXIgKnM7CiYjNDM7CiYjNDM7CQkvKiBUaGUgJiMzOTtvZmZzZXQmIzM5OyBmaWVsZCBjYXJyaWVzIHRoZSBoYW5kbGVyIG5hbWUuICovCiYjNDM7CQlzID0gc3RyY2hyKHAsIGRlbCk7CiYjNDM7CQlpZiAoIXMpCiYjNDM7CQkJZ290byBlaW52YWw7CiYjNDM7CQkqcyYjNDM7JiM0MzsgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQllLSZndDticGZfb3BzX25hbWUgPSBwOwomIzQzOwkJaWYgKCFlLSZndDticGZfb3BzX25hbWVbMF0gfHwKJiM0MzsJCSAgICBzdHJsZW4oZS0mZ3Q7YnBmX29wc19uYW1lKSAmZ3Q7PSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVgpCiYjNDM7CQkJZ290byBlaW52YWw7CiYjNDM7CQlwID0gczsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IGJwZiBoYW5kbGVyOiB7JXN9XG4mIzM0OywgZS0mZ3Q7YnBmX29wc19uYW1lKTsKJiM0MzsKJiM0MzsJCS8qIFRoZSAmIzM5O21hZ2ljJiMzOTsgZmllbGQgbXVzdCBiZSBlbXB0eS4gKi8KJiM0MzsJCXMgPSBzdHJjaHIocCwgZGVsKTsKJiM0MzsJCWlmICghcyB8fCBzICE9IHApCiYjNDM7CQkJZ290byBlaW52YWw7CiYjNDM7CQkqcyYjNDM7JiM0MzsgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQlwID0gczsKJiM0MzsKJiM0MzsJCS8qIFRoZSAmIzM5O21hc2smIzM5OyBmaWVsZCBtdXN0IGJlIGVtcHR5LiAqLwomIzQzOwkJcyA9IHN0cmNocihwLCBkZWwpOwomIzQzOwkJaWYgKCFzIHx8IHMgIT0gcCkKJiM0MzsJCQlnb3RvIGVpbnZhbDsKJiM0MzsJCSpzJiM0MzsmIzQzOyA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXAgPSBzOwomIzQzOwl9IGVsc2UgaWYgKHRlc3RfYml0KE1hZ2ljLCAmYW1wO2UtJmd0O2ZsYWdzKSkgewogCQkvKiBIYW5kbGUgdGhlICYjMzk7TSYjMzk7IChtYWdpYykgZm9ybWF0LiAqLwogCQljaGFyICpzOwogCkBAIC01MjQsOCAmIzQzOzYxMSwxMyBAQCBzdGF0aWMgTm9kZSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCkKIAlpZiAoIXApCiAJCWdvdG8gZWludmFsOwogCSpwJiM0MzsmIzQzOyA9ICYjMzk7XDAmIzM5OzsKLQlpZiAoIWUtJmd0O2ludGVycHJldGVyWzBdKQomIzQzOwlpZiAodGVzdF9iaXQoQnBmLCAmYW1wO2UtJmd0O2ZsYWdzKSkgewomIzQzOwkJLyogVGhlIHByb2dyYW0gc2VsZWN0cyB0aGUgaW50ZXJwcmV0ZXIgYXQgZXhlYyB0aW1lLiAqLwomIzQzOwkJaWYgKGUtJmd0O2ludGVycHJldGVyWzBdKQomIzQzOwkJCWdvdG8gZWludmFsOwomIzQzOwl9IGVsc2UgaWYgKCFlLSZndDtpbnRlcnByZXRlclswXSkgewogCQlnb3RvIGVpbnZhbDsKJiM0MzsJfQogCXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IGludGVycHJldGVyOiB7JXN9XG4mIzM0OywgZS0mZ3Q7aW50ZXJwcmV0ZXIpOwogCiAJLyogUGFyc2UgdGhlICYjMzk7ZmxhZ3MmIzM5OyBmaWVsZC4gKi8KQEAgLTUzNSw2ICYjNDM7NjI3LDE0IEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogCWlmIChwICE9IGJ1ZiAmIzQzOyBjb3VudCkKIAkJZ290byBlaW52YWw7CiAKJiM0MzsJLyoKJiM0MzsJICogQSBwcm9ncmFtLXNlbGVjdGVkIGludGVycHJldGVyIGNhbm5vdCBiZSBwcmUtb3BlbmVkIGFuZCBtdXN0IG5vdAomIzQzOwkgKiBpbmhlcml0IHRoZSBjcmVkZW50aWFscyBvZiBhIHNldHVpZCBiaW5hcnkgaXQgd2FzIGNob3NlbiBmb3IuCiYjNDM7CSAqLwomIzQzOwlpZiAodGVzdF9iaXQoQnBmLCAmYW1wO2UtJmd0O2ZsYWdzKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZS0mZ3Q7ZmxhZ3MgJmFtcDsgKE1JU0NfRk1UX0NSRURFTlRJQUxTIHwgTUlTQ19GTVRfT1BFTl9GSUxFKSkpCiYjNDM7CQlnb3RvIGVpbnZhbDsKJiM0MzsKIAlyZXR1cm4gZTsKIAogb3V0OgpAQCAtNTg4LDcgJiM0Mzs2ODgsMTAgQEAgc3RhdGljIHZvaWQgZW50cnlfc3RhdHVzKE5vZGUgKmUsIGNoYXIgKnBhZ2UpCiAJCXJldHVybjsKIAl9CiAKLQlkcCAmIzQzOz0gc3ByaW50ZihkcCwgJiMzNDslc1xuaW50ZXJwcmV0ZXIgJXNcbiYjMzQ7LCBzdGF0dXMsIGUtJmd0O2ludGVycHJldGVyKTsKJiM0MzsJaWYgKHRlc3RfYml0KEJwZiwgJmFtcDtlLSZndDtmbGFncykpCiYjNDM7CQlkcCAmIzQzOz0gc3ByaW50ZihkcCwgJiMzNDslc1xuYnBmICVzXG4mIzM0Oywgc3RhdHVzLCBlLSZndDticGZfb3BzX25hbWUpOwomIzQzOwllbHNlCiYjNDM7CQlkcCAmIzQzOz0gc3ByaW50ZihkcCwgJiMzNDslc1xuaW50ZXJwcmV0ZXIgJXNcbiYjMzQ7LCBzdGF0dXMsIGUtJmd0O2ludGVycHJldGVyKTsKIAogCS8qIHByaW50IHRoZSBzcGVjaWFsIGZsYWdzICovCiAJZHAgJiM0Mzs9IHNwcmludGYoZHAsICYjMzQ7ZmxhZ3M6ICYjMzQ7KTsKQEAgLTYwMiw3ICYjNDM7NzA1LDkgQEAgc3RhdGljIHZvaWQgZW50cnlfc3RhdHVzKE5vZGUgKmUsIGNoYXIgKnBhZ2UpCiAJCSpkcCYjNDM7JiM0MzsgPSAmIzM5O0YmIzM5OzsKIAkqZHAmIzQzOyYjNDM7ID0gJiMzOTtcbiYjMzk7OwogCi0JaWYgKCF0ZXN0X2JpdChNYWdpYywgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJaWYgKHRlc3RfYml0KEJwZiwgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJCSpkcCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJfSBlbHNlIGlmICghdGVzdF9iaXQoTWFnaWMsICZhbXA7ZS0mZ3Q7ZmxhZ3MpKSB7CiAJCXNwcmludGYoZHAsICYjMzQ7ZXh0ZW5zaW9uIC4lc1xuJiMzNDssIGUtJmd0O21hZ2ljKTsKIAl9IGVsc2UgewogCQlkcCAmIzQzOz0gc3ByaW50ZihkcCwgJiMzNDtvZmZzZXQgJWlcbm1hZ2ljICYjMzQ7LCBlLSZndDtvZmZzZXQpOwpAQCAtODA5LDYgJiM0Mzs5MTQsMTYgQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJaWYgKElTX0VSUihlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZSk7CiAKJiM0MzsJaWYgKHRlc3RfYml0KEJwZiwgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJCWUtJmd0O2JwZl9vcHMgPSBiaW5mbXRfbWlzY19nZXRfb3BzKHNiLSZndDtzX3VzZXJfbnMsIGUtJmd0O2JwZl9vcHNfbmFtZSk7CiYjNDM7CQlpZiAoIWUtJmd0O2JwZl9vcHMpIHsKJiM0MzsJCQlwcl9ub3RpY2UoJiMzNDtyZWdpc3Rlcjogbm8gYnBmIGhhbmRsZXIgbmFtZWQgJXNcbiYjMzQ7LAomIzQzOwkJCQkgIGUtJmd0O2JwZl9vcHNfbmFtZSk7CiYjNDM7CQkJa2ZyZWUoZSk7CiYjNDM7CQkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZS0mZ3Q7ZmxhZ3MgJmFtcDsgTUlTQ19GTVRfT1BFTl9GSUxFKSB7CiAJCS8qCiAJCSAqIE5vdyB0aGF0IHdlIHN1cHBvcnQgdW5wcml2aWxlZ2VkIGJpbmZtdF9taXNjIG1vdW50cyBtYWtlCkBAIC04MzQsNiAmIzQzOzk0OSw4IEBAIHN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpOwogCQkJZmlscF9jbG9zZShmLCBOVUxMKTsKIAkJfQomIzQzOwkJaWYgKGUtJmd0O2JwZl9vcHMpCiYjNDM7CQkJYmluZm10X21pc2NfcHV0X29wcyhlLSZndDticGZfb3BzKTsKIAkJa2ZyZWUoZSk7CiAJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2NfYnBmLmMgYi9mcy9iaW5mbXRfbWlzY19icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNzJkYTA5NjRkOTQ5MTUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy9iaW5mbXRfbWlzY19icGYuYwpAQCAtMCwwICYjNDM7MSwyNzUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBCUEYtYmFja2VkIGJpbmFyeSB0eXBlIGhhbmRsZXJzIGZvciBiaW5mbXRfbWlzYy4KJiM0MzsgKgomIzQzOyAqIEEgaGFuZGxlciBpcyBhIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgc3RydWN0X29wcyBtYXAuIExvYWRpbmcgYW5kCiYjNDM7ICogcmVnaXN0ZXJpbmcgaXQgbWFrZXMgdGhlIGhhbmRsZXIgYXZhaWxhYmxlIHVuZGVyIGl0cyBuYW1lIGluIHRoZSB1c2VyCiYjNDM7ICogbmFtZXNwYWNlIGl0IHdhcyByZWdpc3RlcmVkIGluLiBBIGJpbmZtdF9taXNjICYjMzk7QiYjMzk7IGVudHJ5IGFjdGl2YXRlcyBpdDoKJiM0MzsgKgomIzQzOyAqICAgZWNobyAmIzM5OzplbnRyeTpCOiZsdDtoYW5kbGVyLW5hbWUmZ3Q7Ojo6OiYjMzk7ICZndDsgJmx0O2JpbmZtdF9taXNjJmd0Oy9yZWdpc3RlcgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRfbWlzYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGZfdmVyaWZpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnRmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J0Zl9pZHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91c2VyX25hbWVzcGFjZS5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBibV9icGZfb3BzX3JlZyB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzOwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uczsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoYm1fYnBmX29wc19sb2NrKTsKJiM0MztzdGF0aWMgTElTVF9IRUFEKGJtX2JwZl9vcHNfbGlzdCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfYmluZm10X21pc2Nfb3BzOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKmJtX2JwZl9vcHNfZmluZChjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsCiYjNDM7CQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtibV9icGZfb3BzX2xvY2spOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgJmFtcDtibV9icGZfb3BzX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWlmIChyZWctJmd0O3VzZXJfbnMgPT0gdXNlcl9ucyAmYW1wOyZhbXA7ICFzdHJjbXAocmVnLSZndDtvcHMtJmd0O25hbWUsIG5hbWUpKQomIzQzOwkJCXJldHVybiByZWc7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJpbmZtdF9taXNjX2dldF9vcHMgLSBsb29rIHVwIGEgYnBmIGJpbmFyeSB0eXBlIGhhbmRsZXIgYnkgbmFtZQomIzQzOyAqIEB1c2VyX25zOiB1c2VyIG5hbWVzcGFjZSBvZiB0aGUgYmluZm10X21pc2MgaW5zdGFuY2UKJiM0MzsgKiBAbmFtZTogbmFtZSB0aGUgaGFuZGxlciB3YXMgcmVnaXN0ZXJlZCB1bmRlcgomIzQzOyAqCiYjNDM7ICogU2VhcmNoIEB1c2VyX25zIGFuZCBpdHMgYW5jZXN0b3JzIGZvciBhIGhhbmRsZXIgbmFtZWQgQG5hbWUsIG1pcnJvcmluZwomIzQzOyAqIHRoZSBpbnN0YW5jZSBsb29rdXAgaW4gbG9hZF9iaW5mbXRfbWlzYygpLiBUaGUgcmV0dXJuZWQgaGFuZGxlciBzdGF5cwomIzQzOyAqIGNhbGxhYmxlIHVudGlsIGJpbmZtdF9taXNjX3B1dF9vcHMoKSBldmVuIGlmIHRoZSBiYWNraW5nIHN0cnVjdF9vcHMgbWFwCiYjNDM7ICogaXMgZGV0YWNoZWQgb3IgZGVsZXRlZCBpbiB0aGUgbWVhbnRpbWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBoYW5kbGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJpbmZtdF9taXNjX2dldF9vcHMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLAomIzQzOwkJCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7CiYjNDM7CXN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtibV9icGZfb3BzX2xvY2spOwomIzQzOwomIzQzOwlmb3IgKG5zID0gdXNlcl9uczsgbnM7IG5zID0gbnMtJmd0O3BhcmVudCkgewomIzQzOwkJcmVnID0gYm1fYnBmX29wc19maW5kKG5zLCBuYW1lKTsKJiM0MzsJCWlmICghcmVnKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKCFicGZfc3RydWN0X29wc19nZXQocmVnLSZndDtvcHMpKQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJcmV0dXJuIHJlZy0mZ3Q7b3BzOwomIzQzOwl9CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGJpbmZtdF9taXNjX3B1dF9vcHMoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzKQomIzQzO3sKJiM0MzsJYnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CXJldHVybiBwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBwcm9nLSZndDthdXgtJmd0O3N0X29wcyA9PSAmYW1wO2JwZl9iaW5mbXRfbWlzY19vcHM7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfYmlucHJtX3NldF9pbnRlcnAgLSBzZWxlY3QgdGhlIGludGVycHJldGVyIGZvciB0aGUgY3VycmVudCBleGVjCiYjNDM7ICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkCiYjNDM7ICogQHBhdGg6IGFic29sdXRlIHBhdGggdG8gdGhlIGludGVycHJldGVyCiYjNDM7ICogQHBhdGhfX3N6OiBzaXplIG9mIHRoZSBAcGF0aCBidWZmZXIsIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMCiYjNDM7ICoKJiM0MzsgKiBUbyBiZSBjYWxsZWQgZnJvbSB0aGUgbG9hZCBwcm9ncmFtIG9mIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBoYW5kbGVyCiYjNDM7ICogYmVmb3JlIHJldHVybmluZyBhIHBvc2l0aXZlIHZhbHVlLiBUaGUgcGF0aCBpcyBvcGVuZWQgd2l0aCB0aGUKJiM0MzsgKiBjcmVkZW50aWFscyBvZiB0aGUgdGFzayBkb2luZyB0aGUgZXhlYyBhZnRlciB0aGUgcHJvZ3JhbSByZXR1cm5zLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJICAgICAgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfX3N6KQomIzQzO3sKJiM0MzsJc2l6ZV90IGxlbjsKJiM0MzsJY2hhciAqaW50ZXJwOwomIzQzOwomIzQzOwlpZiAoIXBhdGhfX3N6KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWxlbiA9IHN0cm5sZW4ocGF0aCwgcGF0aF9fc3opOwomIzQzOwlpZiAobGVuID09IHBhdGhfX3N6KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChwYXRoWzBdICE9ICYjMzk7LyYjMzk7KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChsZW4gJmd0Oz0gUEFUSF9NQVgpCiYjNDM7CQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKJiM0MzsKJiM0MzsJaW50ZXJwID0ga21lbWR1cF9udWwocGF0aCwgbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFpbnRlcnApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJa2ZyZWUoYnBybS0mZ3Q7YnBmX2ludGVycCk7CiYjNDM7CWJwcm0tJmd0O2JwZl9pbnRlcnAgPSBpbnRlcnA7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuY19lbmRfZGVmcygpOwomIzQzOwomIzQzO0JURl9LRlVOQ1NfU1RBUlQoYm1fYnBmX2tmdW5jX2lkcykKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwLCBLRl9TTEVFUEFCTEUpCiYjNDM7QlRGX0tGVU5DU19FTkQoYm1fYnBmX2tmdW5jX2lkcykKJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl9rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpCiYjNDM7ewomIzQzOwlpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKCZhbXA7Ym1fYnBmX2tmdW5jX2lkcywga2Z1bmNfaWQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMocHJvZykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FQUNDRVM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBibV9icGZfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIJPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldAk9ICZhbXA7Ym1fYnBmX2tmdW5jX2lkcywKJiM0MzsJLmZpbHRlcgk9IGJtX2JwZl9rZnVuY19maWx0ZXIsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl9vcHNfX2xvYWQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX29wcyBibV9icGZfb3BzX3N0dWJzID0gewomIzQzOwkubG9hZCA9IGJtX2JwZl9vcHNfX2xvYWQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl9pbml0KHN0cnVjdCBidGYgKmJ0ZikKJiM0Mzt7CiYjNDM7CXJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywKJiM0MzsJCQkJCSAmYW1wO2JtX2JwZl9rZnVuY19zZXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7ewomIzQzOwl1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4OwomIzQzOwomIzQzOwlzd2l0Y2ggKG1vZmYpIHsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmluZm10X21pc2Nfb3BzLCBsb2FkKToKJiM0MzsJCS8qIFJlbGlhYmxlIGZpbGUgcmVhZHMgYXQgZXhlYyB0aW1lIHJlcXVpcmUgc2xlZXBpbmcuICovCiYjNDM7CQlpZiAoIXByb2ctJmd0O3NsZWVwYWJsZSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlciwKJiM0MzsJCQkgICAgICB2b2lkICprZGF0YSwgY29uc3Qgdm9pZCAqdWRhdGEpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICp1b3BzID0gdWRhdGE7CiYjNDM7CXN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcyA9IGtkYXRhOwomIzQzOwl1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4OwomIzQzOwomIzQzOwlzd2l0Y2ggKG1vZmYpIHsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmluZm10X21pc2Nfb3BzLCBuYW1lKToKJiM0MzsJCWlmIChicGZfb2JqX25hbWVfY3B5KG9wcy0mZ3Q7bmFtZSwgdW9wcy0mZ3Q7bmFtZSwKJiM0MzsJCQkJICAgICBzaXplb2Yob3BzLSZndDtuYW1lKSkgJmx0Oz0gMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl92YWxpZGF0ZSh2b2lkICprZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcyA9IGtkYXRhOwomIzQzOwomIzQzOwlpZiAoIW9wcy0mZ3Q7bG9hZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBibV9icGZfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMgPSBrZGF0YTsKJiM0MzsJc3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7CiYjNDM7CiYjNDM7CXJlZyA9IGt6YWxsb2Nfb2JqKCpyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghcmVnKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJlZy0mZ3Q7b3BzID0gb3BzOwomIzQzOwlyZWctJmd0O2xpbmsgPSBsaW5rOwomIzQzOwlyZWctJmd0O3VzZXJfbnMgPSBnZXRfdXNlcl9ucyhjdXJyZW50X3VzZXJfbnMoKSk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2JtX2JwZl9vcHNfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChibV9icGZfb3BzX2ZpbmQocmVnLSZndDt1c2VyX25zLCBvcHMtJmd0O25hbWUpKSB7CiYjNDM7CQlwdXRfdXNlcl9ucyhyZWctJmd0O3VzZXJfbnMpOwomIzQzOwkJa2ZyZWUocmVnKTsKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxpc3RfYWRkKCZhbXA7cmVnLSZndDtsaXN0LCAmYW1wO2JtX2JwZl9vcHNfbGlzdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBibV9icGZfdW5yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtibV9icGZfb3BzX2xvY2spOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgJmFtcDtibV9icGZfb3BzX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWlmIChyZWctJmd0O29wcyA9PSBrZGF0YSAmYW1wOyZhbXA7IHJlZy0mZ3Q7bGluayA9PSBsaW5rKSB7CiYjNDM7CQkJbGlzdF9kZWwoJmFtcDtyZWctJmd0O2xpc3QpOwomIzQzOwkJCXB1dF91c2VyX25zKHJlZy0mZ3Q7dXNlcl9ucyk7CiYjNDM7CQkJa2ZyZWUocmVnKTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJtX2JwZl92ZXJpZmllcl9vcHMgPSB7CiYjNDM7CS5nZXRfZnVuY19wcm90bwkJPSBicGZfYmFzZV9mdW5jX3Byb3RvLAomIzQzOwkuaXNfdmFsaWRfYWNjZXNzCT0gYnBmX3RyYWNpbmdfYnRmX2N0eF9hY2Nlc3MsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl9iaW5mbXRfbWlzY19vcHMgPSB7CiYjNDM7CS52ZXJpZmllcl9vcHMJPSAmYW1wO2JtX2JwZl92ZXJpZmllcl9vcHMsCiYjNDM7CS5pbml0CQk9IGJtX2JwZl9pbml0LAomIzQzOwkuY2hlY2tfbWVtYmVyCT0gYm1fYnBmX2NoZWNrX21lbWJlciwKJiM0MzsJLmluaXRfbWVtYmVyCT0gYm1fYnBmX2luaXRfbWVtYmVyLAomIzQzOwkudmFsaWRhdGUJPSBibV9icGZfdmFsaWRhdGUsCiYjNDM7CS5yZWcJCT0gYm1fYnBmX3JlZywKJiM0MzsJLnVucmVnCQk9IGJtX2JwZl91bnJlZywKJiM0MzsJLmNmaV9zdHVicwk9ICZhbXA7Ym1fYnBmX29wc19zdHVicywKJiM0MzsJLm5hbWUJCT0gJiMzNDtiaW5mbXRfbWlzY19vcHMmIzM0OywKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgYm1fYnBmX3N0cnVjdF9vcHNfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKCZhbXA7YnBmX2JpbmZtdF9taXNjX29wcywgYmluZm10X21pc2Nfb3BzKTsKJiM0Mzt9CiYjNDM7bGF0ZV9pbml0Y2FsbChibV9icGZfc3RydWN0X29wc19pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL2JwZl9mc19rZnVuY3MuYyBiL2ZzL2JwZl9mc19rZnVuY3MuYwppbmRleCA3NjhhY2EyZGMwZjAzNC4uYWExZmU5ODhiNmQyMjkgMTAwNjQ0Ci0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9icGZfZnNfa2Z1bmNzLmMKQEAgLTEsNiAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qIENvcHlyaWdodCAoYykgMjAyNCBHb29nbGUgTExDLiAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpbmZtdF9taXNjLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmX2xzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J0Zi5oJmd0OwpAQCAtMzg3LDEwICYjNDM7Mzg4LDIwIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWFsX2lub2RlLCBLRl9TTEVFUEFCTEUgfCBLRl9SRVRfTlVMTCkKIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKQogCiYjNDM7LyogU2lkZS1lZmZlY3Rpbmcga2Z1bmNzIHRoYXQgc3RheSBleGNsdXNpdmUgdG8gTFNNIHByb2dyYW1zLiAqLwomIzQzO0JURl9TRVRfU1RBUlQoYnBmX2ZzX2tmdW5jX2xzbV9vbmx5X2lkcykKJiM0MztCVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpCiYjNDM7QlRGX0lEKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyKQomIzQzO0JURl9TRVRfRU5EKGJwZl9mc19rZnVuY19sc21fb25seV9pZHMpCiYjNDM7CiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKQogewotCWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDticGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpIHx8Ci0JICAgIHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pCiYjNDM7CWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDticGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMocHJvZykgJmFtcDsmYW1wOwomIzQzOwkgICAgIWJ0Zl9pZF9zZXRfY29udGFpbnMoJmFtcDticGZfZnNfa2Z1bmNfbHNtX29ubHlfaWRzLCBrZnVuY19pZCkpCiAJCXJldHVybiAwOwogCXJldHVybiAtRUFDQ0VTOwogfQpAQCAtNDMzLDcgJiM0Mzs0NDQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc19rZnVuY19zZXQgPSB7CiAKIHN0YXRpYyBpbnQgX19pbml0IGJwZl9mc19rZnVuY3NfaW5pdCh2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCAmYW1wO2JwZl9mc19rZnVuY19zZXQpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCAmYW1wO2JwZl9mc19rZnVuY19zZXQpOwomIzQzOwlpZiAocmV0IHx8ICFJU19FTkFCTEVEKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLAomIzQzOwkJCQkJICZhbXA7YnBmX2ZzX2tmdW5jX3NldCk7CiB9CiAKIGxhdGVfaW5pdGNhbGwoYnBmX2ZzX2tmdW5jc19pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBiOTJmZTdkYjE3NmNmZi4uN2M5ZTI4ZjU0OWE0NTMgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTE0MTgsNiAmIzQzOzE0MTgsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAkvKiBJZiBhIGJpbmZtdCBjaGFuZ2VkIHRoZSBpbnRlcnAsIGZyZWUgaXQuICovCiAJaWYgKGJwcm0tJmd0O2ludGVycCAhPSBicHJtLSZndDtmaWxlbmFtZSkKIAkJa2ZyZWUoYnBybS0mZ3Q7aW50ZXJwKTsKJiM0MzsJa2ZyZWUoYnBybS0mZ3Q7YnBmX2ludGVycCk7CiAJa2ZyZWUoYnBybS0mZ3Q7ZmRwYXRoKTsKIAlrZnJlZShicHJtKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaCBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZTFkMjZjNDMwMWRhMmMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmgKQEAgLTAsMCAmIzQzOzEsNDkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX0xJTlVYX0JJTkZNVF9NSVNDX0gKJiM0MzsjZGVmaW5lIF9MSU5VWF9CSU5GTVRfTUlTQ19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGJwZl9wcm9nOwomIzQzO3N0cnVjdCBsaW51eF9iaW5wcm07CiYjNDM7c3RydWN0IHVzZXJfbmFtZXNwYWNlOwomIzQzOwomIzQzOyNkZWZpbmUgQklORk1UX01JU0NfT1BTX05BTUVfTUFYIDE2CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGJpbmZtdF9taXNjX29wcyAtIGJwZi1iYWNrZWQgYmluYXJ5IHR5cGUgaGFuZGxlcgomIzQzOyAqIEBsb2FkOiBtYXRjaCBAYnBybSBhbmQgc2VsZWN0IGFuIGludGVycHJldGVyIHZpYSBicGZfYmlucHJtX3NldF9pbnRlcnAoKTsKJiM0MzsgKiAgICAgICAgcmV0dXJucyAmZ3Q7IDAgaWYgdGhlIGJpbmFyeSB3YXMgaGFuZGxlZCwgMCB0byBmYWxsIHRocm91Z2ggdG8gdGhlCiYjNDM7ICogICAgICAgIGhhbmRsZXJzIHJlZ2lzdGVyZWQgYWZ0ZXIgdGhpcyBvbmUsIGEgbmVnYXRpdmUgZXJybm8gdG8gZmFpbCB0aGUKJiM0MzsgKiAgICAgICAgZXhlYzsgLUVOT0VYRUMgZG9lcyBub3QgZmFpbCB0aGUgZXhlYyBidXQgbW92ZXMgb24gdG8gdGhlCiYjNDM7ICogICAgICAgIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0cwomIzQzOyAqIEBuYW1lOiBuYW1lIHRoYXQgJiMzOTtCJiMzOTsgZW50cmllcyByZWZlcmVuY2UgdGhlIGhhbmRsZXIgYnkKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIHsKJiM0MzsJaW50ICgqbG9hZCkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CiYjNDM7CWNoYXIgbmFtZVtCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVhdOwomIzQzO307CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19CSU5GTVRfTUlTQ19CUEYKJiM0Mztjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpiaW5mbXRfbWlzY19nZXRfb3BzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywKJiM0MzsJCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpOwomIzQzO3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpOwomIzQzO2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKgomIzQzO2JpbmZtdF9taXNjX2dldF9vcHMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBiaW5mbXRfbWlzY19wdXRfb3BzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcykKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0JJTkZNVF9NSVNDX0JQRiAqLwomIzQzOwomIzQzOyNlbmRpZiAvKiBfTElOVVhfQklORk1UX01JU0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAppbmRleCAyYzc3ZTM4M2U3Mzc1Ny4uMDA3MGQyMDdkNTRmMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCkBAIC02NSw2ICYjNDM7NjUsNyBAQCBzdHJ1Y3QgbGludXhfYmlucHJtIHsKIAkJCQkgICBvZiB0aGUgdGltZSBzYW1lIGFzIGZpbGVuYW1lLCBidXQgY291bGQgYmUKIAkJCQkgICBkaWZmZXJlbnQgZm9yIGJpbmZtdF97bWlzYyxzY3JpcHR9ICovCiAJY29uc3QgY2hhciAqZmRwYXRoOwkvKiBnZW5lcmF0ZWQgZmlsZW5hbWUgZm9yIGV4ZWN2ZWF0ICovCiYjNDM7CWNvbnN0IGNoYXIgKmJwZl9pbnRlcnA7CS8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi8KIAl1bnNpZ25lZCBpbnRlcnBfZmxhZ3M7CiAJaW50IGV4ZWNmZDsJCS8qIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZXhlY3V0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcgZXhlYzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwOTAKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMTMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIEJQRi1CYWNrZWQgYGJpbmZtdF9taXNjYCBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZ290IG15IGF0dGVudGlvbi4gSXQgaW50cm9kdWNlcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlOiBCUEYgcHJvZ3JhbXMgaGFuZGxpbmcgYmluYXJ5IGZvcm1hdHMgdmlhIGBiaW5mbXRfbWlzY2AuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBmcy9iaW5mbXRfbWlzYy5jYCwgYSBuZXcgYGZzL2JpbmZtdF9taXNjX2JwZi5jYCwgYW5kIGNoYW5nZXMgdG8gYGZzL2V4ZWMuY2AgYW5kIGBmcy9icGZfZnNfa2Z1bmNzLmNgLiAgVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLCBnaXZlbiB0aGUgYWRkZWQgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGZvciBuZXcgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGtleSBpcyB0aGlzIG5ldyBjb25maWcsIGBCSU5GTVRfTUlTQ19CUEZgLiAgSSBxdWlja2x5IGNoZWNrZWQgYGZzL0tjb25maWcuYmluZm10YCB0byBtYWtlIHN1cmUgSSYjMzk7bSByaWdodCBhYm91dCB0aGUgY29uZmlnIG5hbWUgKHl1cCwgYEJJTkZNVF9NSVNDX0JQRmApLCBhbmQgdmVyaWZpZWQgaXRzIGRlcGVuZGVuY2llczogaXQgbmVlZHMgYEJJTkZNVF9NSVNDPXlgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLgoKTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGFuZCBhcmVhcyB0byB0YXJnZXQuIExvb2tpbmcgYXQgdGhlIGNvZGUgY2hhbmdlcywgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBzdGFuZCBvdXQgaW4gdGhlIG1vZGlmaWVkIGZpbGVzOgoKSW4gYGZzL2JpbmZtdF9taXNjLmNgOiBgc2VhcmNoX2JpbmZtdF9oYW5kbGVyYCwgYGdldF9iaW5mbXRfaGFuZGxlcmAsIGBsb2FkX21pc2NfYmluYXJ5YCwgYGNyZWF0ZV9lbnRyeWAsIGBlbnRyeV9zdGF0dXNgLCBgYm1fcmVnaXN0ZXJfd3JpdGVgLgoKSW4gYGZzL2JpbmZtdF9taXNjX2JwZi5jYDogYGJpbmZtdF9taXNjX2dldF9vcHNgLCBgYmluZm10X21pc2NfcHV0X29wc2AsIGBicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHNgLCBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCwgYGJtX2JwZl9rZnVuY19maWx0ZXJgLCBgYm1fYnBmX29wc19fbG9hZGAsIGBibV9icGZfaW5pdGAsIGBibV9icGZfY2hlY2tfbWVtYmVyYCwgYGJtX2JwZl9pbml0X21lbWJlcmAsIGBibV9icGZfdmFsaWRhdGVgLCBgYm1fYnBmX3JlZ2AsIGBibV9icGZfdW5yZWdgLCBgYm1fYnBmX3N0cnVjdF9vcHNfaW5pdGAuCgpJbiBgZnMvYnBmX2ZzX2tmdW5jcy5jYDogYGJwZl9mc19rZnVuY3NfZmlsdGVyYCwgYGJwZl9mc19rZnVuY3NfaW5pdGAuCgpBbmQgaW4gYGZzL2V4ZWMuY2A6IGBmcmVlX2Jwcm1gLgoKU28sICpkZWZpbml0ZWx5KiBmdXp6YWJsZS4gIFRoZSBjb25maWcgdG8gZW5hYmxlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpcyBgQklORk1UX01JU0NfQlBGYC4gYEJJTkZNVF9NSVNDYCBpcyBhbHNvIGEgZGVwZW5kZW5jeSwgYnV0IHRoYXQmIzM5O3MgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSYjMzk7bGwganVzdCBsaXN0IGBCSU5GTVRfTUlTQ19CUEZgIGZvciBub3cuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlICpiZXN0KiB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZz8gYGxvYWRfbWlzY19iaW5hcnlgIGxvb2tzIHRlbXB0aW5nLCBhcyBpdCYjMzk7cyBhdCB0aGUgY29yZSBvZiB0aGUgZXhlYyBwYXRoLCBidXQgaXQgbWlnaHQgYmUgdG9vIGJyb2FkIGEgdGFyZ2V0IGlmIGl0JiMzOTtzIGNhbGxlZCBvbiBldmVyeSBgZXhlY3ZlYCBpZiBgYmluZm10X21pc2NgIGlzIGVuYWJsZWQuIEl0IGhhcyBuZXcgQlBGIGxvZ2ljIHRob3VnaCwgc28gaXQgbWlnaHQgYmUgZ29vZC4gYGNyZWF0ZV9lbnRyeWAgYW5kIGBibV9yZWdpc3Rlcl93cml0ZWAgYXJlIHRyaWdnZXJlZCB3aGVuIHdyaXRpbmcgdG8gYC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlcmAsIHdoaWNoIGlzIGEgZ29vZCB0YXJnZXRlZCBhcHByb2FjaCwgYW5kIG5ldyBmb3IgdGhpcyBmZWF0dXJlLiBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCBpcyBhIEJQRiBrZnVuYyBzcGVjaWZpY2FsbHkgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzbyBpdCYjMzk7cyBjcml0aWNhbC4gYGJtX2JwZl9yZWdgIGFuZCBgYm1fYnBmX3VucmVnYCBhcmUgYWxzbyBrZXksIGFzIHRoZXkgYXJlIGludm9sdmVkIGluIHJlZ2lzdGVyaW5nIGFuZCB1bnJlZ2lzdGVyaW5nIHRoZSBCUEYgYHN0cnVjdF9vcHNgLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgY29uZmlncyBhbmQgZm9jdXMgc3ltYm9scyBhcmUgY29ycmVjdDoKCkNvbmZpZzogYEJJTkZNVF9NSVNDX0JQRmAKRm9jdXMgU3ltYm9sczogYGJwZl9iaW5wcm1fc2V0X2ludGVycGAsIGBibV9icGZfcmVnYCwgYGJtX2JwZl91bnJlZ2AsIGBjcmVhdGVfZW50cnlgLCBgYm1fcmVnaXN0ZXJfd3JpdGVgCgpJJiMzOTtsbCBvbWl0IGBsb2FkX21pc2NfYmluYXJ5YCB0byBhdm9pZCB0ZXN0aW5nIGV4ZWN2ZSBpbiBnZW5lcmFsIGFuZCB0byBmb2N1cyB0ZXN0cyBvbiBuZXcgY29kZSwgYnV0IGBjcmVhdGVfZW50cnlgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGxvb2sgdmVyeSBnb29kLgoKT2theSwgdGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4KCmBXb3J0aEZ1enppbmc6IHRydWVgCmBFbmFibGVDb25maWdzOiBbJiMzNDtCSU5GTVRfTUlTQ19CUEYmIzM0O11gCmBGb2N1c1N5bWJvbHM6IFsmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LCAmIzM0O2JtX2JwZl9yZWcmIzM0OywgJiMzNDtibV9icGZfdW5yZWcmIzM0OywgJiMzNDtjcmVhdGVfZW50cnkmIzM0OywgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7XWAKYFJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBhY3QgYXMgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLiBJdAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtibV9icGZfcmVnJiMzNDssCiAgICAmIzM0O2JtX2JwZl91bnJlZyYjMzQ7LAogICAgJiMzNDtjcmVhdGVfZW50cnkmIzM0OywKICAgICYjMzQ7Ym1fcmVnaXN0ZXJfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBhY3QgYXMgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLiBJdCBhZGRzIG5ldyBCUEYgc3RydWN0X29wcyBhbmQga2Z1bmNzLCBhbmQgbW9kaWZpZXMgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBhbmQgZXhlY3V0aW9uIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiwgdGhlIG5ldyBrZnVuYywgYW5kIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RyYXRpb24gcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0NfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2JpbnBybV9zZXRfaW50ZXJwJiMzNDssCiAgICAmIzM0O2JtX2JwZl9yZWcmIzM0OywKICAgICYjMzQ7Ym1fYnBmX3VucmVnJiMzNDssCiAgICAmIzM0O2NyZWF0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGFjdCBhcyBoYW5kbGVycyBmb3IgYmluZm10X21pc2MuIEl0IGFkZHMgbmV3IEJQRiBzdHJ1Y3Rfb3BzIGFuZCBrZnVuY3MsIGFuZCBtb2RpZmllcyB0aGUgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIGFuZCBleGVjdXRpb24gbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uLCB0aGUgbmV3IGtmdW5jLCBhbmQgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMDY6MDA6MjguNTIyODIwNzI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NzExMjAzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2JpbnBybV9zZXRfaW50ZXJwXCIsXG4gICAgXCJibV9icGZfcmVnXCIsXG4gICAgXCJibV9icGZfdW5yZWdcIixcbiAgICBcImNyZWF0ZV9lbnRyeVwiLFxuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGFjdCBhcyBoYW5kbGVycyBmb3IgYmluZm10X21pc2MuIEl0IGFkZHMgbmV3IEJQRiBzdHJ1Y3Rfb3BzIGFuZCBrZnVuY3MsIGFuZCBtb2RpZmllcyB0aGUgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIGFuZCBleGVjdXRpb24gbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uLCB0aGUgbmV3IGtmdW5jLCBhbmQgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNjowMDoyOC41MjI4MzAzMDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4Mjc1MjU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE2OTEyZDA5NDY0YzkzZjM2NTA1NGRkNjczYzJhZDE5N2YzMDU0ZjNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAwNjowMDoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XFxuaW5kZXggYzBhMzRmYmY4MDIyYjUuLmMwZWZiMDc3MzYyODQzIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcXG5AQCAtMjYsMTEgKzI2LDEzIEBAIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46XFxuICAgIG5hbWUgYmVsb3cgYGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2NgYDsgY2Fubm90IGNvbnRhaW4gc2xhc2hlcyBgYC9gYCBmb3JcXG4gICAgb2J2aW91cyByZWFzb25zLlxcbiAtIGBgdHlwZWBgXFxuLSAgIGlzIHRoZSB0eXBlIG9mIHJlY29nbml0aW9uLiBHaXZlIGBgTWBgIGZvciBtYWdpYyBhbmQgYGBFYGAgZm9yIGV4dGVuc2lvbi5cXG4rICAgaXMgdGhlIHR5cGUgb2YgcmVjb2duaXRpb24uIEdpdmUgYGBNYGAgZm9yIG1hZ2ljLCBgYEVgYCBmb3IgZXh0ZW5zaW9uIGFuZFxcbisgICBgYEJgYCBmb3IgYSBicGYtYmFja2VkIGhhbmRsZXIgKHNlZSBiZWxvdykuXFxuIC0gYGBvZmZzZXRgYFxcbiAgICBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBtYWdpYy9tYXNrIGluIHRoZSBmaWxlLCBjb3VudGVkIGluIGJ5dGVzLiBUaGlzXFxuICAgIGRlZmF1bHRzIHRvIDAgaWYgeW91IG9taXQgaXQgKGkuZS4geW91IHdyaXRlIGBgOm5hbWU6dHlwZTo6bWFnaWMuLi5gYCkuXFxuLSAgIElnbm9yZWQgd2hlbiB1c2luZyBmaWxlbmFtZSBleHRlbnNpb24gbWF0Y2hpbmcuXFxuKyAgIElnbm9yZWQgd2hlbiB1c2luZyBmaWxlbmFtZSBleHRlbnNpb24gbWF0Y2hpbmcuIEZvciBgYEJgYCBlbnRyaWVzIHRoaXNcXG4rICAgZmllbGQgY2FycmllcyB0aGUgbmFtZSBvZiB0aGUgYnBmIGhhbmRsZXIgaW5zdGVhZC5cXG4gLSBgYG1hZ2ljYGBcXG4gICAgaXMgdGhlIGJ5dGUgc2VxdWVuY2UgYmluZm10X21pc2MgaXMgbWF0Y2hpbmcgZm9yLiBUaGUgbWFnaWMgc3RyaW5nXFxuICAgIG1heSBjb250YWluIGhleC1lbmNvZGVkIGNoYXJhY3RlcnMgbGlrZSBgYFxcXFx4MGFgYCBvciBgYFxcXFx4QTRgYC4gTm90ZSB0aGF0IHlvdVxcbkBAIC05Nyw2ICs5OSw0MCBAQCBUaGVyZSBhcmUgc29tZSByZXN0cmljdGlvbnM6XFxuICAgIG9mZnNldCtzaXplKG1hZ2ljKSBoYXMgdG8gYmUgbGVzcyB0aGFuIDEyOFxcbiAgLSB0aGUgaW50ZXJwcmV0ZXIgc3RyaW5nIG1heSBub3QgZXhjZWVkIDEyNyBjaGFyYWN0ZXJzXFxuIFxcbitcXG4rYnBmLWJhY2tlZCBoYW5kbGVyc1xcbistLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbitXaXRoIGBgQ09ORklHX0JJTkZNVF9NSVNDX0JQRmBgIGJvdGggdGhlIG1hdGNoaW5nIGFuZCB0aGUgaW50ZXJwcmV0ZXJcXG4rc2VsZWN0aW9uIGNhbiBiZSBkZWxlZ2F0ZWQgdG8gYSBicGYgcHJvZ3JhbS4gQSBoYW5kbGVyIGlzIGFuIGluc3RhbmNlIG9mIHRoZVxcbitgYGJpbmZtdF9taXNjX29wc2BgIHN0cnVjdF9vcHMgd2l0aCBhIHNsZWVwYWJsZSBgYGxvYWRgYCBwcm9ncmFtIGFuZCBhXFxuK2BgbmFtZWBgLiBPbmNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCBpcyByZWdpc3RlcmVkIHRoZSBoYW5kbGVyIGNhbiBiZSBhY3RpdmF0ZWRcXG4rd2l0aCBhIGBgQmBgIGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdCBieSBuYW1lIGFuZCBjYXJyaWVzIG5laXRoZXIgbWFnaWMsXFxuK21hc2ssIG5vciBpbnRlcnByZXRlcjo6XFxuK1xcbisgICAgZWNobyAnOnFlbXU6QjpteV9oYW5kbGVyOjo6OicgXFx1MDAzZSByZWdpc3RlclxcbitcXG4rQXQgZXhlYyB0aW1lIHRoZSBgYGxvYWRgYCBwcm9ncmFtIHJlY2VpdmVzIHRoZSBgYGxpbnV4X2JpbnBybWBgIG9mIHRoZVxcbitiaW5hcnkuIEl0IGNhbiBtYXRjaCBvbiB0aGUgaGVhZGVyIGluIGBgYnBybS1cXHUwMDNlYnVmYGAsIHJlYWQgdGhlIGZpbGUgaXRzZWxmLFxcbitlLmcuIHRvIHBhcnNlIEVMRiBwcm9ncmFtIGhlYWRlcnMsIGFuZCBkZXJpdmUgdGhlIGludGVycHJldGVyIGZyb20gdGhlXFxuK2JpbmFyeSdzIGxvY2F0aW9uLiBJdCBzZWxlY3RzIHRoZSBpbnRlcnByZXRlciBieSBjYWxsaW5nIHRoZVxcbitgYGJwZl9iaW5wcm1fc2V0X2ludGVycCgpYGAga2Z1bmMgd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIGFuZCByZXR1cm5pbmcgYVxcbitwb3NpdGl2ZSB2YWx1ZS4gUmV0dXJuaW5nIGBgMGBgIGZhbGxzIHRocm91Z2ggdG8gdGhlIGhhbmRsZXJzIHJlZ2lzdGVyZWRcXG4rYWZ0ZXIgdGhpcyBvbmUsIGEgbmVnYXRpdmUgZXJybm8gZmFpbHMgdGhlIGV4ZWMgd2l0aCB0aGF0IGVycm9yO1xcbitgYC1FTk9FWEVDYGAgZW5kcyB0aGUgYmluZm10X21pc2Mgc2VhcmNoIGJ1dCBsZXRzIHRoZSByZW1haW5pbmcgYmluYXJ5XFxuK2Zvcm1hdHMgaGF2ZSBhIGdvLiBUaGUgaW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZVxcbit0YXNrIGRvaW5nIHRoZSBleGVjLCBleGFjdGx5IGFzIGEgc3RhdGljYWxseSByZWdpc3RlcmVkIGludGVycHJldGVyIHdvdWxkXFxuK2JlLlxcbitcXG4rSGFuZGxlcnMgYXJlIGxvb2tlZCB1cCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgdGhlIHN0cnVjdF9vcHMgbWFwIHdhc1xcbityZWdpc3RlcmVkIGluLCBmYWxsaW5nIGJhY2sgdG8gYW5jZXN0b3IgbmFtZXNwYWNlcywgbWlycm9yaW5nIGhvd1xcbitiaW5mbXRfbWlzYyBpbnN0YW5jZXMgdGhlbXNlbHZlcyBhcmUgbG9va2VkIHVwLiBUaGUgZW50cnkga2VlcHMgdGhlIGhhbmRsZXJcXG4rYWxpdmU7IGRlbGV0aW5nIHRoZSBzdHJ1Y3Rfb3BzIG1hcCBvbmx5IHByZXZlbnRzIG5ldyByZWdpc3RyYXRpb25zLlxcbitcXG4rVGhlIGBgQ2BgIGFuZCBgYEZgYCBmbGFncyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgYEJgYCBlbnRyaWVzOiB0aGVyZSBpcyBub1xcbitmaXhlZCBpbnRlcnByZXRlciB0byBwcmUtb3BlbiBhbmQgYSBwcm9ncmFtLXNlbGVjdGVkIGludGVycHJldGVyIG11c3QgbmV2ZXJcXG4raW5oZXJpdCB0aGUgY3JlZGVudGlhbHMgb2YgYSBzZXR1aWQgYmluYXJ5LlxcbitcXG4gVG8gdXNlIGJpbmZtdF9taXNjIHlvdSBoYXZlIHRvIG1vdW50IGl0IGZpcnN0LiBZb3UgY2FuIG1vdW50IGl0IHdpdGhcXG4gYGBtb3VudCAtdCBiaW5mbXRfbWlzYyBub25lIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzY2BgIGNvbW1hbmQsIG9yIHlvdSBjYW4gYWRkXFxuIGEgbGluZSBgYG5vbmUgIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyBiaW5mbXRfbWlzYyBkZWZhdWx0cyAwIDBgYCB0byB5b3VyXFxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcuYmluZm10IGIvZnMvS2NvbmZpZy5iaW5mbXRcXG5pbmRleCAxOTQ5ZTI1Yzc3NDFiMS4uZGFlYWM0ODg5ZDAzZWYgMTAwNjQ0XFxuLS0tIGEvZnMvS2NvbmZpZy5iaW5mbXRcXG4rKysgYi9mcy9LY29uZmlnLmJpbmZtdFxcbkBAIC0xNjgsNiArMTY4LDIwIEBAIGNvbmZpZyBCSU5GTVRfTUlTQ1xcbiBcXHQgIHlvdSBoYXZlIHVzZSBmb3IgaXQ7IHRoZSBtb2R1bGUgaXMgY2FsbGVkIGJpbmZtdF9taXNjLiBJZiB5b3VcXG4gXFx0ICBkb24ndCBrbm93IHdoYXQgdG8gYW5zd2VyIGF0IHRoaXMgcG9pbnQsIHNheSBZLlxcbiBcXG4rY29uZmlnIEJJTkZNVF9NSVNDX0JQRlxcbitcXHRib29sIFxcXCJCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXFxcIlxcbitcXHRkZXBlbmRzIG9uIEJJTkZNVF9NSVNDPXlcXG4rXFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuK1xcdGhlbHBcXG4rXFx0ICBBbGxvdyBiaW5mbXRfbWlzYyBiaW5hcnkgdHlwZSBoYW5kbGVycyB0byBiZSBpbXBsZW1lbnRlZCBhcyBicGZcXG4rXFx0ICBzdHJ1Y3Rfb3BzIHByb2dyYW1zLiBJbnN0ZWFkIG9mIG1hdGNoaW5nIGEgZml4ZWQgbWFnaWMgYW5kXFxuK1xcdCAgcmVkaXJlY3RpbmcgdG8gYSBmaXhlZCBpbnRlcnByZXRlciByZWNvcmRlZCBhdCByZWdpc3RyYXRpb24gdGltZVxcbitcXHQgIHN1Y2ggaGFuZGxlcnMgbWF0Y2ggYmluYXJpZXMgcHJvZ3JhbW1hdGljYWxseSBhbmQgY29tcHV0ZSB0aGVcXG4rXFx0ICBpbnRlcnByZXRlciB0byB1c2UgcGVyIGJpbmFyeSwgZS5nLiByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gb2ZcXG4rXFx0ICB0aGUgYmluYXJ5IGl0c2VsZi5cXG4rXFxuK1xcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBhbnN3ZXIgYXQgdGhpcyBwb2ludCwgc2F5IE4uXFxuK1xcbiBjb25maWcgQ09SRURVTVBcXG4gXFx0Ym9vbCBcXFwiRW5hYmxlIGNvcmUgZHVtcCBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4gXFx0ZGVmYXVsdCB5XFxuZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGVcXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uNDk5YzY2NzBmMGMxODMgMTAwNjQ0XFxuLS0tIGEvZnMvTWFrZWZpbGVcXG4rKysgYi9mcy9NYWtlZmlsZVxcbkBAIC0zMyw2ICszMyw3IEBAIG9iai0kKENPTkZJR19GU19FTkNSWVBUSU9OKVxcdCs9IGNyeXB0by9cXG4gb2JqLSQoQ09ORklHX0ZTX1ZFUklUWSlcXHRcXHQrPSB2ZXJpdHkvXFxuIG9iai0kKENPTkZJR19GSUxFX0xPQ0tJTkcpICAgICAgKz0gbG9ja3Mub1xcbiBvYmotJChDT05GSUdfQklORk1UX01JU0MpXFx0Kz0gYmluZm10X21pc2Mub1xcbitvYmotJChDT05GSUdfQklORk1UX01JU0NfQlBGKVxcdCs9IGJpbmZtdF9taXNjX2JwZi5vXFxuIG9iai0kKENPTkZJR19CSU5GTVRfU0NSSVBUKVxcdCs9IGJpbmZtdF9zY3JpcHQub1xcbiBvYmotJChDT05GSUdfQklORk1UX0VMRilcXHQrPSBiaW5mbXRfZWxmLm9cXG4gb2JqLSQoQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGKVxcdCs9IGNvbXBhdF9iaW5mbXRfZWxmLm9cXG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmNcXG5pbmRleCA4NDM0OWZjYjkzZjEzYS4uYjgwZTIxOWJhNTg3NmIgMTAwNjQ0XFxuLS0tIGEvZnMvYmluZm10X21pc2MuY1xcbisrKyBiL2ZzL2JpbmZtdF9taXNjLmNcXG5AQCAtMTcsNiArMTcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21hZ2ljLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3R5cGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ19oZWxwZXJzLmhcXHUwMDNlXFxuQEAgLTQxLDcgKzQyLDcgQEAgZW51bSB7XFxuIFxcdFZFUkJPU0VfU1RBVFVTID0gMSAvKiBtYWtlIGl0IHplcm8gdG8gc2F2ZSA0MDAgYnl0ZXMga2VybmVsIG1lbW9yeSAqL1xcbiB9O1xcbiBcXG4tZW51bSB7RW5hYmxlZCwgTWFnaWN9O1xcbitlbnVtIHtFbmFibGVkLCBNYWdpYywgQnBmfTtcXG4gI2RlZmluZSBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCAoMVVMIFxcdTAwM2NcXHUwMDNjIDMxKVxcbiAjZGVmaW5lIE1JU0NfRk1UX09QRU5fQklOQVJZICgxVUwgXFx1MDAzY1xcdTAwM2MgMzApXFxuICNkZWZpbmUgTUlTQ19GTVRfQ1JFREVOVElBTFMgKDFVTCBcXHUwMDNjXFx1MDAzYyAyOSlcXG5AQCAtNTgsNiArNTksOCBAQCB0eXBlZGVmIHN0cnVjdCB7XFxuIFxcdGNoYXIgKm5hbWU7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4gXFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlO1xcbitcXHRjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpicGZfb3BzO1xcdC8qIGJwZi1iYWNrZWQgaGFuZGxlciAoJ0InKSAqL1xcbitcXHRjb25zdCBjaGFyICpicGZfb3BzX25hbWU7XFxuIFxcdHJlZmNvdW50X3QgdXNlcnM7XFx0XFx0Lyogc3luYyByZW1vdmFsIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpICovXFxuIH0gTm9kZTtcXG4gXFxuQEAgLTgyLDE0ICs4NSwxOSBAQCBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYm1fZnNfdHlwZTtcXG4gICogc2VhcmNoX2JpbmZtdF9oYW5kbGVyIC0gc2VhcmNoIGZvciBhIGJpbmFyeSBoYW5kbGVyIGZvciBAYnBybVxcbiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlXFxuICAqIEBicHJtOiBiaW5hcnkgZm9yIHdoaWNoIHdlIGFyZSBsb29raW5nIGZvciBhIGhhbmRsZXJcXG4rICogQGJwZl9za2lwOiBudW1iZXIgb2YgYnBmLWJhY2tlZCBoYW5kbGVycyB0byBza2lwIG92ZXJcXG4gICpcXG4gICogU2VhcmNoIGZvciBhIGJpbmFyeSB0eXBlIGhhbmRsZXIgZm9yIEBicHJtIGluIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgYmluYXJ5XFxuLSAqIHR5cGUgaGFuZGxlcnMuXFxuKyAqIHR5cGUgaGFuZGxlcnMuIEEgYnBmLWJhY2tlZCBoYW5kbGVyIGNhbm5vdCBiZSBtYXRjaGVkIGhlcmUgYXMgaXRzIHByb2dyYW1cXG4rICogbXVzdCBydW4gaW4gc2xlZXBhYmxlIGNvbnRleHQ7IGl0IGlzIHJldHVybmVkIGFzIGEgY2FuZGlkYXRlIGFuZCB0aGVcXG4rICogcHJvZ3JhbSBkZWNpZGVzIGluIGxvYWRfbWlzY19iaW5hcnkoKS4gQGJwZl9za2lwIGFsbG93cyB0aGUgY2FsbGVyIHRvXFxuKyAqIHJlc3VtZSB0aGUgc2VhcmNoIGFmdGVyIHRoZSBmaXJzdCBAYnBmX3NraXAgY2FuZGlkYXRlcyBkZWNsaW5lZC5cXG4gICpcXG4gICogUmV0dXJuOiBiaW5hcnkgdHlwZSBsaXN0IGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZVxcbiAgKi9cXG4gc3RhdGljIE5vZGUgKnNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBicGZfc2tpcClcXG4ge1xcbiBcXHRjaGFyICpwID0gc3RycmNocihicHJtLVxcdTAwM2VpbnRlcnAsICcuJyk7XFxuIFxcdE5vZGUgKmU7XFxuQEAgLTEwMyw2ICsxMTEsMTUgQEAgc3RhdGljIE5vZGUgKnNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuIFxcdFxcdGlmICghdGVzdF9iaXQoRW5hYmxlZCwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHQvKiBUaGUgcHJvZ3JhbSBkZWNpZGVzIGluIGxvYWRfbWlzY19iaW5hcnkoKS4gKi9cXG4rXFx0XFx0aWYgKHRlc3RfYml0KEJwZiwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRcXHRpZiAoYnBmX3NraXApIHtcXG4rXFx0XFx0XFx0XFx0YnBmX3NraXAtLTtcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0dXJuIGU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIERvIG1hdGNoaW5nIGJhc2VkIG9uIGV4dGVuc2lvbiBpZiBhcHBsaWNhYmxlLiAqL1xcbiBcXHRcXHRpZiAoIXRlc3RfYml0KE1hZ2ljLCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdFxcdGlmIChwIFxcdTAwMjZcXHUwMDI2ICFzdHJjbXAoZS1cXHUwMDNlbWFnaWMsIHAgKyAxKSlcXG5AQCAtMTMyLDYgKzE0OSw3IEBAIHN0YXRpYyBOb2RlICpzZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbiAgKiBnZXRfYmluZm10X2hhbmRsZXIgLSB0cnkgdG8gZmluZCBhIGJpbmFyeSB0eXBlIGhhbmRsZXJcXG4gICogQG1pc2M6IGhhbmRsZSB0byBiaW5mbXRfbWlzYyBpbnN0YW5jZVxcbiAgKiBAYnBybTogYmluYXJ5IGZvciB3aGljaCB3ZSBhcmUgbG9va2luZyBmb3IgYSBoYW5kbGVyXFxuKyAqIEBicGZfc2tpcDogbnVtYmVyIG9mIGJwZi1iYWNrZWQgaGFuZGxlcnMgdG8gc2tpcCBvdmVyXFxuICAqXFxuICAqIFRyeSB0byBmaW5kIGEgYmluZm10IGhhbmRsZXIgZm9yIHRoZSBiaW5hcnkgdHlwZS4gSWYgb25lIGlzIGZvdW5kIHRha2UgYVxcbiAgKiByZWZlcmVuY2UgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlbW92YWwgdmlhIGJtX3tlbnRyeSxzdGF0dXN9X3dyaXRlKCkuXFxuQEAgLTEzOSwxMiArMTU3LDEzIEBAIHN0YXRpYyBOb2RlICpzZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbiAgKiBSZXR1cm46IGJpbmFyeSB0eXBlIGxpc3QgZW50cnkgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlXFxuICAqL1xcbiBzdGF0aWMgTm9kZSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGJwZl9za2lwKVxcbiB7XFxuIFxcdE5vZGUgKmU7XFxuIFxcbiBcXHRyZWFkX2xvY2soXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXNfbG9jayk7XFxuLVxcdGUgPSBzZWFyY2hfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSk7XFxuK1xcdGUgPSBzZWFyY2hfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSwgYnBmX3NraXApO1xcbiBcXHRpZiAoZSlcXG4gXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZlLVxcdTAwM2V1c2Vycyk7XFxuIFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZtaXNjLVxcdTAwM2VlbnRyaWVzX2xvY2spO1xcbkBAIC0xNjQsNiArMTgzLDggQEAgc3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKE5vZGUgKmUpXFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmUtXFx1MDAzZXVzZXJzKSkge1xcbiBcXHRcXHRpZiAoZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpXFxuIFxcdFxcdFxcdGZpbHBfY2xvc2UoZS1cXHUwMDNlaW50ZXJwX2ZpbGUsIE5VTEwpO1xcbitcXHRcXHRpZiAoZS1cXHUwMDNlYnBmX29wcylcXG4rXFx0XFx0XFx0YmluZm10X21pc2NfcHV0X29wcyhlLVxcdTAwM2VicGZfb3BzKTtcXG4gXFx0XFx0a2ZyZWUoZSk7XFxuIFxcdH1cXG4gfVxcbkBAIC0yMDYsMTIgKzIyNywxNSBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlID0gTlVMTDtcXG4gXFx0aW50IHJldHZhbCA9IC1FTk9FWEVDO1xcbiBcXHRzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2M7XFxuK1xcdGNvbnN0IGNoYXIgKmludGVycHJldGVyO1xcbitcXHR1bnNpZ25lZCBpbnQgYnBmX3NraXAgPSAwO1xcbiBcXG4gXFx0bWlzYyA9IGxvYWRfYmluZm10X21pc2MoKTtcXG4gXFx0aWYgKCFtaXNjLVxcdTAwM2VlbmFibGVkKVxcbiBcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4tXFx0Zm10ID0gZ2V0X2JpbmZtdF9oYW5kbGVyKG1pc2MsIGJwcm0pO1xcbityZXRyeTpcXG4rXFx0Zm10ID0gZ2V0X2JpbmZtdF9oYW5kbGVyKG1pc2MsIGJwcm0sIGJwZl9za2lwKTtcXG4gXFx0aWYgKCFmbXQpXFxuIFxcdFxcdHJldHVybiByZXR2YWw7XFxuIFxcbkBAIC0yMjAsNiArMjQ0LDMyIEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiBcXHRpZiAoYnBybS1cXHUwMDNlaW50ZXJwX2ZsYWdzIFxcdTAwMjYgQklOUFJNX0ZMQUdTX1BBVEhfSU5BQ0NFU1NJQkxFKVxcbiBcXHRcXHRnb3RvIHJldDtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChCcGYsIFxcdTAwMjZmbXQtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRyZXR2YWwgPSBmbXQtXFx1MDAzZWJwZl9vcHMtXFx1MDAzZWxvYWQoYnBybSk7XFxuK1xcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdC8qIEtlZXAgYSBwcm9ncmFtLXN1cHBsaWVkIGVycm9yIHdpdGhpbiBlcnJubyByYW5nZS4gKi9cXG4rXFx0XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIC1NQVhfRVJSTk8pXFxuK1xcdFxcdFxcdFxcdHJldHZhbCA9IC1FTk9FWEVDO1xcbitcXHRcXHRcXHRnb3RvIHJldDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIXJldHZhbCkge1xcbitcXHRcXHRcXHQvKiBEZWNsaW5lZCwgbW92ZSBvbiB0byBsYXRlciBoYW5kbGVycy4gKi9cXG4rXFx0XFx0XFx0a2ZyZWUoYnBybS1cXHUwMDNlYnBmX2ludGVycCk7XFxuK1xcdFxcdFxcdGJwcm0tXFx1MDAzZWJwZl9pbnRlcnAgPSBOVUxMO1xcbitcXHRcXHRcXHRwdXRfYmluZm10X2hhbmRsZXIoZm10KTtcXG4rXFx0XFx0XFx0YnBmX3NraXArKztcXG4rXFx0XFx0XFx0cmV0dmFsID0gLUVOT0VYRUM7XFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0LyogU2VsZWN0aW5nIGFuIGludGVycHJldGVyIGlzIHBhcnQgb2YgdGhlIGNvbnRyYWN0LiAqL1xcbitcXHRcXHRyZXR2YWwgPSAtRU5PRVhFQztcXG4rXFx0XFx0aWYgKCFicHJtLVxcdTAwM2VicGZfaW50ZXJwKVxcbitcXHRcXHRcXHRnb3RvIHJldDtcXG4rXFx0XFx0aW50ZXJwcmV0ZXIgPSBicHJtLVxcdTAwM2VicGZfaW50ZXJwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpbnRlcnByZXRlciA9IGZtdC1cXHUwMDNlaW50ZXJwcmV0ZXI7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChmbXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjApIHtcXG4gXFx0XFx0YnBybS1cXHUwMDNlaW50ZXJwX2ZsYWdzIHw9IEJJTlBSTV9GTEFHU19QUkVTRVJWRV9BUkdWMDtcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMjM4LDEzICsyODgsMTMgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIFxcdGJwcm0tXFx1MDAzZWFyZ2MrKztcXG4gXFxuIFxcdC8qIGFkZCB0aGUgaW50ZXJwIGFzIGFyZ3ZbMF0gKi9cXG4tXFx0cmV0dmFsID0gY29weV9zdHJpbmdfa2VybmVsKGZtdC1cXHUwMDNlaW50ZXJwcmV0ZXIsIGJwcm0pO1xcbitcXHRyZXR2YWwgPSBjb3B5X3N0cmluZ19rZXJuZWwoaW50ZXJwcmV0ZXIsIGJwcm0pO1xcbiBcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byByZXQ7XFxuIFxcdGJwcm0tXFx1MDAzZWFyZ2MrKztcXG4gXFxuIFxcdC8qIFVwZGF0ZSBpbnRlcnAgaW4gY2FzZSBiaW5mbXRfc2NyaXB0IG5lZWRzIGl0LiAqL1xcbi1cXHRyZXR2YWwgPSBicHJtX2NoYW5nZV9pbnRlcnAoZm10LVxcdTAwM2VpbnRlcnByZXRlciwgYnBybSk7XFxuK1xcdHJldHZhbCA9IGJwcm1fY2hhbmdlX2ludGVycChpbnRlcnByZXRlciwgYnBybSk7XFxuIFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHJldDtcXG4gXFxuQEAgLTI1Myw3ICszMDMsNyBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFx0XFx0aWYgKCFJU19FUlIoaW50ZXJwX2ZpbGUpKVxcbiBcXHRcXHRcXHRkZW55X3dyaXRlX2FjY2VzcyhpbnRlcnBfZmlsZSk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGludGVycF9maWxlID0gb3Blbl9leGVjKGZtdC1cXHUwMDNlaW50ZXJwcmV0ZXIpO1xcbitcXHRcXHRpbnRlcnBfZmlsZSA9IG9wZW5fZXhlYyhpbnRlcnByZXRlcik7XFxuIFxcdH1cXG4gXFx0cmV0dmFsID0gUFRSX0VSUihpbnRlcnBfZmlsZSk7XFxuIFxcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKVxcbkBAIC0yNjUsNiArMzE1LDkgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIFxcbiBcXHRyZXR2YWwgPSAwO1xcbiByZXQ6XFxuK1xcdC8qIEEgcHJvZ3JhbS1zZWxlY3RlZCBpbnRlcnByZXRlciBpcyBjb25zdW1lZCBieSB0aGlzIGV4ZWMgYXR0ZW1wdC4gKi9cXG4rXFx0a2ZyZWUoYnBybS1cXHUwMDNlYnBmX2ludGVycCk7XFxuK1xcdGJwcm0tXFx1MDAzZWJwZl9pbnRlcnAgPSBOVUxMO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogSWYgd2UgYWN0dWFsbHkgcHV0IHRoZSBub2RlIGhlcmUgYWxsIGNvbmN1cnJlbnQgY2FsbHMgdG9cXG5AQCAtNDA0LDEzICs0NTcsNDcgQEAgc3RhdGljIE5vZGUgKmNyZWF0ZV9lbnRyeShjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpXFxuIFxcdFxcdHByX2RlYnVnKFxcXCJyZWdpc3RlcjogdHlwZTogTSAobWFnaWMpXFxcXG5cXFwiKTtcXG4gXFx0XFx0ZS1cXHUwMDNlZmxhZ3MgPSAoMSBcXHUwMDNjXFx1MDAzYyBFbmFibGVkKSB8ICgxIFxcdTAwM2NcXHUwMDNjIE1hZ2ljKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgJ0InOlxcbitcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXFxuK1xcdFxcdFxcdGdvdG8gZWludmFsO1xcbitcXHRcXHRwcl9kZWJ1ZyhcXFwicmVnaXN0ZXI6IHR5cGU6IEIgKGJwZilcXFxcblxcXCIpO1xcbitcXHRcXHRlLVxcdTAwM2VmbGFncyA9ICgxIFxcdTAwM2NcXHUwMDNjIEVuYWJsZWQpIHwgKDEgXFx1MDAzY1xcdTAwM2MgQnBmKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGdvdG8gZWludmFsO1xcbiBcXHR9XFxuIFxcdGlmICgqcCsrICE9IGRlbClcXG4gXFx0XFx0Z290byBlaW52YWw7XFxuIFxcbi1cXHRpZiAodGVzdF9iaXQoTWFnaWMsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0aWYgKHRlc3RfYml0KEJwZiwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRjaGFyICpzO1xcbitcXG4rXFx0XFx0LyogVGhlICdvZmZzZXQnIGZpZWxkIGNhcnJpZXMgdGhlIGhhbmRsZXIgbmFtZS4gKi9cXG4rXFx0XFx0cyA9IHN0cmNocihwLCBkZWwpO1xcbitcXHRcXHRpZiAoIXMpXFxuK1xcdFxcdFxcdGdvdG8gZWludmFsO1xcbitcXHRcXHQqcysrID0gJ1xcXFwwJztcXG4rXFx0XFx0ZS1cXHUwMDNlYnBmX29wc19uYW1lID0gcDtcXG4rXFx0XFx0aWYgKCFlLVxcdTAwM2VicGZfb3BzX25hbWVbMF0gfHxcXG4rXFx0XFx0ICAgIHN0cmxlbihlLVxcdTAwM2VicGZfb3BzX25hbWUpIFxcdTAwM2U9IEJJTkZNVF9NSVNDX09QU19OQU1FX01BWClcXG4rXFx0XFx0XFx0Z290byBlaW52YWw7XFxuK1xcdFxcdHAgPSBzO1xcbitcXHRcXHRwcl9kZWJ1ZyhcXFwicmVnaXN0ZXI6IGJwZiBoYW5kbGVyOiB7JXN9XFxcXG5cXFwiLCBlLVxcdTAwM2VicGZfb3BzX25hbWUpO1xcbitcXG4rXFx0XFx0LyogVGhlICdtYWdpYycgZmllbGQgbXVzdCBiZSBlbXB0eS4gKi9cXG4rXFx0XFx0cyA9IHN0cmNocihwLCBkZWwpO1xcbitcXHRcXHRpZiAoIXMgfHwgcyAhPSBwKVxcbitcXHRcXHRcXHRnb3RvIGVpbnZhbDtcXG4rXFx0XFx0KnMrKyA9ICdcXFxcMCc7XFxuK1xcdFxcdHAgPSBzO1xcbitcXG4rXFx0XFx0LyogVGhlICdtYXNrJyBmaWVsZCBtdXN0IGJlIGVtcHR5LiAqL1xcbitcXHRcXHRzID0gc3RyY2hyKHAsIGRlbCk7XFxuK1xcdFxcdGlmICghcyB8fCBzICE9IHApXFxuK1xcdFxcdFxcdGdvdG8gZWludmFsO1xcbitcXHRcXHQqcysrID0gJ1xcXFwwJztcXG4rXFx0XFx0cCA9IHM7XFxuK1xcdH0gZWxzZSBpZiAodGVzdF9iaXQoTWFnaWMsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykpIHtcXG4gXFx0XFx0LyogSGFuZGxlIHRoZSAnTScgKG1hZ2ljKSBmb3JtYXQuICovXFxuIFxcdFxcdGNoYXIgKnM7XFxuIFxcbkBAIC01MjQsOCArNjExLDEzIEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxcbiBcXHRpZiAoIXApXFxuIFxcdFxcdGdvdG8gZWludmFsO1xcbiBcXHQqcCsrID0gJ1xcXFwwJztcXG4tXFx0aWYgKCFlLVxcdTAwM2VpbnRlcnByZXRlclswXSlcXG4rXFx0aWYgKHRlc3RfYml0KEJwZiwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHQvKiBUaGUgcHJvZ3JhbSBzZWxlY3RzIHRoZSBpbnRlcnByZXRlciBhdCBleGVjIHRpbWUuICovXFxuK1xcdFxcdGlmIChlLVxcdTAwM2VpbnRlcnByZXRlclswXSlcXG4rXFx0XFx0XFx0Z290byBlaW52YWw7XFxuK1xcdH0gZWxzZSBpZiAoIWUtXFx1MDAzZWludGVycHJldGVyWzBdKSB7XFxuIFxcdFxcdGdvdG8gZWludmFsO1xcbitcXHR9XFxuIFxcdHByX2RlYnVnKFxcXCJyZWdpc3RlcjogaW50ZXJwcmV0ZXI6IHslc31cXFxcblxcXCIsIGUtXFx1MDAzZWludGVycHJldGVyKTtcXG4gXFxuIFxcdC8qIFBhcnNlIHRoZSAnZmxhZ3MnIGZpZWxkLiAqL1xcbkBAIC01MzUsNiArNjI3LDE0IEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxcbiBcXHRpZiAocCAhPSBidWYgKyBjb3VudClcXG4gXFx0XFx0Z290byBlaW52YWw7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBIHByb2dyYW0tc2VsZWN0ZWQgaW50ZXJwcmV0ZXIgY2Fubm90IGJlIHByZS1vcGVuZWQgYW5kIG11c3Qgbm90XFxuK1xcdCAqIGluaGVyaXQgdGhlIGNyZWRlbnRpYWxzIG9mIGEgc2V0dWlkIGJpbmFyeSBpdCB3YXMgY2hvc2VuIGZvci5cXG4rXFx0ICovXFxuK1xcdGlmICh0ZXN0X2JpdChCcGYsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IChNSVNDX0ZNVF9DUkVERU5USUFMUyB8IE1JU0NfRk1UX09QRU5fRklMRSkpKVxcbitcXHRcXHRnb3RvIGVpbnZhbDtcXG4rXFxuIFxcdHJldHVybiBlO1xcbiBcXG4gb3V0OlxcbkBAIC01ODgsNyArNjg4LDEwIEBAIHN0YXRpYyB2b2lkIGVudHJ5X3N0YXR1cyhOb2RlICplLCBjaGFyICpwYWdlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGRwICs9IHNwcmludGYoZHAsIFxcXCIlc1xcXFxuaW50ZXJwcmV0ZXIgJXNcXFxcblxcXCIsIHN0YXR1cywgZS1cXHUwMDNlaW50ZXJwcmV0ZXIpO1xcbitcXHRpZiAodGVzdF9iaXQoQnBmLCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRkcCArPSBzcHJpbnRmKGRwLCBcXFwiJXNcXFxcbmJwZiAlc1xcXFxuXFxcIiwgc3RhdHVzLCBlLVxcdTAwM2VicGZfb3BzX25hbWUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGRwICs9IHNwcmludGYoZHAsIFxcXCIlc1xcXFxuaW50ZXJwcmV0ZXIgJXNcXFxcblxcXCIsIHN0YXR1cywgZS1cXHUwMDNlaW50ZXJwcmV0ZXIpO1xcbiBcXG4gXFx0LyogcHJpbnQgdGhlIHNwZWNpYWwgZmxhZ3MgKi9cXG4gXFx0ZHAgKz0gc3ByaW50ZihkcCwgXFxcImZsYWdzOiBcXFwiKTtcXG5AQCAtNjAyLDcgKzcwNSw5IEBAIHN0YXRpYyB2b2lkIGVudHJ5X3N0YXR1cyhOb2RlICplLCBjaGFyICpwYWdlKVxcbiBcXHRcXHQqZHArKyA9ICdGJztcXG4gXFx0KmRwKysgPSAnXFxcXG4nO1xcbiBcXG4tXFx0aWYgKCF0ZXN0X2JpdChNYWdpYywgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRpZiAodGVzdF9iaXQoQnBmLCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdCpkcCA9ICdcXFxcMCc7XFxuK1xcdH0gZWxzZSBpZiAoIXRlc3RfYml0KE1hZ2ljLCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdHNwcmludGYoZHAsIFxcXCJleHRlbnNpb24gLiVzXFxcXG5cXFwiLCBlLVxcdTAwM2VtYWdpYyk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGRwICs9IHNwcmludGYoZHAsIFxcXCJvZmZzZXQgJWlcXFxcbm1hZ2ljIFxcXCIsIGUtXFx1MDAzZW9mZnNldCk7XFxuQEAgLTgwOSw2ICs5MTQsMTYgQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdGlmIChJU19FUlIoZSkpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGUpO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KEJwZiwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRlLVxcdTAwM2VicGZfb3BzID0gYmluZm10X21pc2NfZ2V0X29wcyhzYi1cXHUwMDNlc191c2VyX25zLCBlLVxcdTAwM2VicGZfb3BzX25hbWUpO1xcbitcXHRcXHRpZiAoIWUtXFx1MDAzZWJwZl9vcHMpIHtcXG4rXFx0XFx0XFx0cHJfbm90aWNlKFxcXCJyZWdpc3Rlcjogbm8gYnBmIGhhbmRsZXIgbmFtZWQgJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgZS1cXHUwMDNlYnBmX29wc19uYW1lKTtcXG4rXFx0XFx0XFx0a2ZyZWUoZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBOb3cgdGhhdCB3ZSBzdXBwb3J0IHVucHJpdmlsZWdlZCBiaW5mbXRfbWlzYyBtb3VudHMgbWFrZVxcbkBAIC04MzQsNiArOTQ5LDggQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdFxcdFxcdGV4ZV9maWxlX2FsbG93X3dyaXRlX2FjY2VzcyhmKTtcXG4gXFx0XFx0XFx0ZmlscF9jbG9zZShmLCBOVUxMKTtcXG4gXFx0XFx0fVxcbitcXHRcXHRpZiAoZS1cXHUwMDNlYnBmX29wcylcXG4rXFx0XFx0XFx0YmluZm10X21pc2NfcHV0X29wcyhlLVxcdTAwM2VicGZfb3BzKTtcXG4gXFx0XFx0a2ZyZWUoZSk7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2NfYnBmLmMgYi9mcy9iaW5mbXRfbWlzY19icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcyZGEwOTY0ZDk0OTE1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL2JpbmZtdF9taXNjX2JwZi5jXFxuQEAgLTAsMCArMSwyNzUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBCUEYtYmFja2VkIGJpbmFyeSB0eXBlIGhhbmRsZXJzIGZvciBiaW5mbXRfbWlzYy5cXG4rICpcXG4rICogQSBoYW5kbGVyIGlzIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBzdHJ1Y3Rfb3BzIG1hcC4gTG9hZGluZyBhbmRcXG4rICogcmVnaXN0ZXJpbmcgaXQgbWFrZXMgdGhlIGhhbmRsZXIgYXZhaWxhYmxlIHVuZGVyIGl0cyBuYW1lIGluIHRoZSB1c2VyXFxuKyAqIG5hbWVzcGFjZSBpdCB3YXMgcmVnaXN0ZXJlZCBpbi4gQSBiaW5mbXRfbWlzYyAnQicgZW50cnkgYWN0aXZhdGVzIGl0OlxcbisgKlxcbisgKiAgIGVjaG8gJzplbnRyeTpCOlxcdTAwM2NoYW5kbGVyLW5hbWVcXHUwMDNlOjo6OicgXFx1MDAzZSBcXHUwMDNjYmluZm10X21pc2NcXHUwMDNlL3JlZ2lzdGVyXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpbmZtdF9taXNjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgYm1fYnBmX29wc19yZWcge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK1xcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcztcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbitcXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XFxuK307XFxuK1xcbitzdGF0aWMgREVGSU5FX01VVEVYKGJtX2JwZl9vcHNfbG9jayk7XFxuK3N0YXRpYyBMSVNUX0hFQUQoYm1fYnBmX29wc19saXN0KTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2JpbmZtdF9taXNjX29wcztcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKmJtX2JwZl9vcHNfZmluZChjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZibV9icGZfb3BzX2xvY2spO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsIFxcdTAwMjZibV9icGZfb3BzX2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKHJlZy1cXHUwMDNldXNlcl9ucyA9PSB1c2VyX25zIFxcdTAwMjZcXHUwMDI2ICFzdHJjbXAocmVnLVxcdTAwM2VvcHMtXFx1MDAzZW5hbWUsIG5hbWUpKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVnO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKipcXG4rICogYmluZm10X21pc2NfZ2V0X29wcyAtIGxvb2sgdXAgYSBicGYgYmluYXJ5IHR5cGUgaGFuZGxlciBieSBuYW1lXFxuKyAqIEB1c2VyX25zOiB1c2VyIG5hbWVzcGFjZSBvZiB0aGUgYmluZm10X21pc2MgaW5zdGFuY2VcXG4rICogQG5hbWU6IG5hbWUgdGhlIGhhbmRsZXIgd2FzIHJlZ2lzdGVyZWQgdW5kZXJcXG4rICpcXG4rICogU2VhcmNoIEB1c2VyX25zIGFuZCBpdHMgYW5jZXN0b3JzIGZvciBhIGhhbmRsZXIgbmFtZWQgQG5hbWUsIG1pcnJvcmluZ1xcbisgKiB0aGUgaW5zdGFuY2UgbG9va3VwIGluIGxvYWRfYmluZm10X21pc2MoKS4gVGhlIHJldHVybmVkIGhhbmRsZXIgc3RheXNcXG4rICogY2FsbGFibGUgdW50aWwgYmluZm10X21pc2NfcHV0X29wcygpIGV2ZW4gaWYgdGhlIGJhY2tpbmcgc3RydWN0X29wcyBtYXBcXG4rICogaXMgZGV0YWNoZWQgb3IgZGVsZXRlZCBpbiB0aGUgbWVhbnRpbWUuXFxuKyAqXFxuKyAqIFJldHVybjogdGhlIGhhbmRsZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlXFxuKyAqL1xcbitjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpiaW5mbXRfbWlzY19nZXRfb3BzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XFxuK1xcdHN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZibV9icGZfb3BzX2xvY2spO1xcbitcXG4rXFx0Zm9yIChucyA9IHVzZXJfbnM7IG5zOyBucyA9IG5zLVxcdTAwM2VwYXJlbnQpIHtcXG4rXFx0XFx0cmVnID0gYm1fYnBmX29wc19maW5kKG5zLCBuYW1lKTtcXG4rXFx0XFx0aWYgKCFyZWcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoIWJwZl9zdHJ1Y3Rfb3BzX2dldChyZWctXFx1MDAzZW9wcykpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHRyZXR1cm4gcmVnLVxcdTAwM2VvcHM7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpXFxuK3tcXG4rXFx0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XFxuK31cXG4rXFxuK2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4re1xcbitcXHRyZXR1cm4gcHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlc3Rfb3BzID09IFxcdTAwMjZicGZfYmluZm10X21pc2Nfb3BzO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuK1xcbisvKipcXG4rICogYnBmX2JpbnBybV9zZXRfaW50ZXJwIC0gc2VsZWN0IHRoZSBpbnRlcnByZXRlciBmb3IgdGhlIGN1cnJlbnQgZXhlY1xcbisgKiBAYnBybTogYmluYXJ5IHRoYXQgaXMgYmVpbmcgZXhlY3V0ZWRcXG4rICogQHBhdGg6IGFic29sdXRlIHBhdGggdG8gdGhlIGludGVycHJldGVyXFxuKyAqIEBwYXRoX19zejogc2l6ZSBvZiB0aGUgQHBhdGggYnVmZmVyLCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTFxcbisgKlxcbisgKiBUbyBiZSBjYWxsZWQgZnJvbSB0aGUgbG9hZCBwcm9ncmFtIG9mIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBoYW5kbGVyXFxuKyAqIGJlZm9yZSByZXR1cm5pbmcgYSBwb3NpdGl2ZSB2YWx1ZS4gVGhlIHBhdGggaXMgb3BlbmVkIHdpdGggdGhlXFxuKyAqIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZSBleGVjIGFmdGVyIHRoZSBwcm9ncmFtIHJldHVybnMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfX3N6KVxcbit7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdGNoYXIgKmludGVycDtcXG4rXFxuK1xcdGlmICghcGF0aF9fc3opXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRsZW4gPSBzdHJubGVuKHBhdGgsIHBhdGhfX3N6KTtcXG4rXFx0aWYgKGxlbiA9PSBwYXRoX19zeilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChwYXRoWzBdICE9ICcvJylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChsZW4gXFx1MDAzZT0gUEFUSF9NQVgpXFxuK1xcdFxcdHJldHVybiAtRU5BTUVUT09MT05HO1xcbitcXG4rXFx0aW50ZXJwID0ga21lbWR1cF9udWwocGF0aCwgbGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFpbnRlcnApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0a2ZyZWUoYnBybS1cXHUwMDNlYnBmX2ludGVycCk7XFxuK1xcdGJwcm0tXFx1MDAzZWJwZl9pbnRlcnAgPSBpbnRlcnA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbitcXG4rQlRGX0tGVU5DU19TVEFSVChibV9icGZfa2Z1bmNfaWRzKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9LRlVOQ1NfRU5EKGJtX2JwZl9rZnVuY19pZHMpXFxuK1xcbitzdGF0aWMgaW50IGJtX2JwZl9rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuK3tcXG4rXFx0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcXHUwMDI2Ym1fYnBmX2tmdW5jX2lkcywga2Z1bmNfaWQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhwcm9nKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAtRUFDQ0VTO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYm1fYnBmX2tmdW5jX3NldCA9IHtcXG4rXFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG4rXFx0LnNldFxcdD0gXFx1MDAyNmJtX2JwZl9rZnVuY19pZHMsXFxuK1xcdC5maWx0ZXJcXHQ9IGJtX2JwZl9rZnVuY19maWx0ZXIsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IGJtX2JwZl9vcHNfX2xvYWQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgYm1fYnBmX29wc19zdHVicyA9IHtcXG4rXFx0LmxvYWQgPSBibV9icGZfb3BzX19sb2FkLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBibV9icGZfaW5pdChzdHJ1Y3QgYnRmICpidGYpXFxuK3tcXG4rXFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmJtX2JwZl9rZnVuY19zZXQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJtX2JwZl9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4re1xcbitcXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xcbitcXG4rXFx0c3dpdGNoIChtb2ZmKSB7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJpbmZtdF9taXNjX29wcywgbG9hZCk6XFxuK1xcdFxcdC8qIFJlbGlhYmxlIGZpbGUgcmVhZHMgYXQgZXhlYyB0aW1lIHJlcXVpcmUgc2xlZXBpbmcuICovXFxuK1xcdFxcdGlmICghcHJvZy1cXHUwMDNlc2xlZXBhYmxlKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYm1fYnBmX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcXG4rXFx0XFx0XFx0ICAgICAgdm9pZCAqa2RhdGEsIGNvbnN0IHZvaWQgKnVkYXRhKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKnVvcHMgPSB1ZGF0YTtcXG4rXFx0c3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzID0ga2RhdGE7XFxuK1xcdHUzMiBtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7XFxuK1xcbitcXHRzd2l0Y2ggKG1vZmYpIHtcXG4rXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmluZm10X21pc2Nfb3BzLCBuYW1lKTpcXG4rXFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLVxcdTAwM2VuYW1lLCB1b3BzLVxcdTAwM2VuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVvZihvcHMtXFx1MDAzZW5hbWUpKSBcXHUwMDNjPSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYm1fYnBmX3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcyA9IGtkYXRhO1xcbitcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWxvYWQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBibV9icGZfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuK3tcXG4rXFx0c3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzID0ga2RhdGE7XFxuK1xcdHN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnO1xcbitcXG4rXFx0cmVnID0ga3phbGxvY19vYmooKnJlZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0aWYgKCFyZWcpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmVnLVxcdTAwM2VvcHMgPSBvcHM7XFxuK1xcdHJlZy1cXHUwMDNlbGluayA9IGxpbms7XFxuK1xcdHJlZy1cXHUwMDNldXNlcl9ucyA9IGdldF91c2VyX25zKGN1cnJlbnRfdXNlcl9ucygpKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2Ym1fYnBmX29wc19sb2NrKTtcXG4rXFxuK1xcdGlmIChibV9icGZfb3BzX2ZpbmQocmVnLVxcdTAwM2V1c2VyX25zLCBvcHMtXFx1MDAzZW5hbWUpKSB7XFxuK1xcdFxcdHB1dF91c2VyX25zKHJlZy1cXHUwMDNldXNlcl9ucyk7XFxuK1xcdFxcdGtmcmVlKHJlZyk7XFxuK1xcdFxcdHJldHVybiAtRUVYSVNUO1xcbitcXHR9XFxuK1xcbitcXHRsaXN0X2FkZChcXHUwMDI2cmVnLVxcdTAwM2VsaXN0LCBcXHUwMDI2Ym1fYnBmX29wc19saXN0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJtX2JwZl91bnJlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbit7XFxuK1xcdHN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZibV9icGZfb3BzX2xvY2spO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsIFxcdTAwMjZibV9icGZfb3BzX2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKHJlZy1cXHUwMDNlb3BzID09IGtkYXRhIFxcdTAwMjZcXHUwMDI2IHJlZy1cXHUwMDNlbGluayA9PSBsaW5rKSB7XFxuK1xcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZyZWctXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRcXHRwdXRfdXNlcl9ucyhyZWctXFx1MDAzZXVzZXJfbnMpO1xcbitcXHRcXHRcXHRrZnJlZShyZWcpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYm1fYnBmX3ZlcmlmaWVyX29wcyA9IHtcXG4rXFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBicGZfYmFzZV9mdW5jX3Byb3RvLFxcbitcXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBicGZfdHJhY2luZ19idGZfY3R4X2FjY2VzcyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2JpbmZtdF9taXNjX29wcyA9IHtcXG4rXFx0LnZlcmlmaWVyX29wc1xcdD0gXFx1MDAyNmJtX2JwZl92ZXJpZmllcl9vcHMsXFxuK1xcdC5pbml0XFx0XFx0PSBibV9icGZfaW5pdCxcXG4rXFx0LmNoZWNrX21lbWJlclxcdD0gYm1fYnBmX2NoZWNrX21lbWJlcixcXG4rXFx0LmluaXRfbWVtYmVyXFx0PSBibV9icGZfaW5pdF9tZW1iZXIsXFxuK1xcdC52YWxpZGF0ZVxcdD0gYm1fYnBmX3ZhbGlkYXRlLFxcbitcXHQucmVnXFx0XFx0PSBibV9icGZfcmVnLFxcbitcXHQudW5yZWdcXHRcXHQ9IGJtX2JwZl91bnJlZyxcXG4rXFx0LmNmaV9zdHVic1xcdD0gXFx1MDAyNmJtX2JwZl9vcHNfc3R1YnMsXFxuK1xcdC5uYW1lXFx0XFx0PSBcXFwiYmluZm10X21pc2Nfb3BzXFxcIixcXG4rXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IGJtX2JwZl9zdHJ1Y3Rfb3BzX2luaXQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gcmVnaXN0ZXJfYnBmX3N0cnVjdF9vcHMoXFx1MDAyNmJwZl9iaW5mbXRfbWlzY19vcHMsIGJpbmZtdF9taXNjX29wcyk7XFxuK31cXG4rbGF0ZV9pbml0Y2FsbChibV9icGZfc3RydWN0X29wc19pbml0KTtcXG5kaWZmIC0tZ2l0IGEvZnMvYnBmX2ZzX2tmdW5jcy5jIGIvZnMvYnBmX2ZzX2tmdW5jcy5jXFxuaW5kZXggNzY4YWNhMmRjMGYwMzQuLmFhMWZlOTg4YjZkMjI5IDEwMDY0NFxcbi0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuY1xcbisrKyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xcbkBAIC0xLDYgKzEsNyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgR29vZ2xlIExMQy4gKi9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfbHNtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG5AQCAtMzg3LDEwICszODgsMjAgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXFxuIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKVxcbiBcXG4rLyogU2lkZS1lZmZlY3Rpbmcga2Z1bmNzIHRoYXQgc3RheSBleGNsdXNpdmUgdG8gTFNNIHByb2dyYW1zLiAqL1xcbitCVEZfU0VUX1NUQVJUKGJwZl9mc19rZnVuY19sc21fb25seV9pZHMpXFxuK0JURl9JRChmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0cilcXG4rQlRGX0lEKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyKVxcbitCVEZfU0VUX0VORChicGZfZnNfa2Z1bmNfbHNtX29ubHlfaWRzKVxcbitcXG4gc3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG4ge1xcbi1cXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFxcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpIHx8XFxuLVxcdCAgICBwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNKVxcbitcXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFxcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKHByb2cpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhYnRmX2lkX3NldF9jb250YWlucyhcXHUwMDI2YnBmX2ZzX2tmdW5jX2xzbV9vbmx5X2lkcywga2Z1bmNfaWQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0dXJuIC1FQUNDRVM7XFxuIH1cXG5AQCAtNDMzLDcgKzQ0NCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2ZzX2tmdW5jX3NldCA9IHtcXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IGJwZl9mc19rZnVuY3NfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcXHUwMDI2YnBmX2ZzX2tmdW5jX3NldCk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcXHUwMDI2YnBmX2ZzX2tmdW5jX3NldCk7XFxuK1xcdGlmIChyZXQgfHwgIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcXG4rXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZicGZfZnNfa2Z1bmNfc2V0KTtcXG4gfVxcbiBcXG4gbGF0ZV9pbml0Y2FsbChicGZfZnNfa2Z1bmNzX2luaXQpO1xcbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcXG5pbmRleCBiOTJmZTdkYjE3NmNmZi4uN2M5ZTI4ZjU0OWE0NTMgMTAwNjQ0XFxuLS0tIGEvZnMvZXhlYy5jXFxuKysrIGIvZnMvZXhlYy5jXFxuQEAgLTE0MTgsNiArMTQxOCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiBcXHQvKiBJZiBhIGJpbmZtdCBjaGFuZ2VkIHRoZSBpbnRlcnAsIGZyZWUgaXQuICovXFxuIFxcdGlmIChicHJtLVxcdTAwM2VpbnRlcnAgIT0gYnBybS1cXHUwMDNlZmlsZW5hbWUpXFxuIFxcdFxcdGtmcmVlKGJwcm0tXFx1MDAzZWludGVycCk7XFxuK1xcdGtmcmVlKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnApO1xcbiBcXHRrZnJlZShicHJtLVxcdTAwM2VmZHBhdGgpO1xcbiBcXHRrZnJlZShicHJtKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lMWQyNmM0MzAxZGEyY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcXG5AQCAtMCwwICsxLDQ5IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZm5kZWYgX0xJTlVYX0JJTkZNVF9NSVNDX0hcXG4rI2RlZmluZSBfTElOVVhfQklORk1UX01JU0NfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgYnBmX3Byb2c7XFxuK3N0cnVjdCBsaW51eF9iaW5wcm07XFxuK3N0cnVjdCB1c2VyX25hbWVzcGFjZTtcXG4rXFxuKyNkZWZpbmUgQklORk1UX01JU0NfT1BTX05BTUVfTUFYIDE2XFxuK1xcbisvKipcXG4rICogc3RydWN0IGJpbmZtdF9taXNjX29wcyAtIGJwZi1iYWNrZWQgYmluYXJ5IHR5cGUgaGFuZGxlclxcbisgKiBAbG9hZDogbWF0Y2ggQGJwcm0gYW5kIHNlbGVjdCBhbiBpbnRlcnByZXRlciB2aWEgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCk7XFxuKyAqICAgICAgICByZXR1cm5zIFxcdTAwM2UgMCBpZiB0aGUgYmluYXJ5IHdhcyBoYW5kbGVkLCAwIHRvIGZhbGwgdGhyb3VnaCB0byB0aGVcXG4rICogICAgICAgIGhhbmRsZXJzIHJlZ2lzdGVyZWQgYWZ0ZXIgdGhpcyBvbmUsIGEgbmVnYXRpdmUgZXJybm8gdG8gZmFpbCB0aGVcXG4rICogICAgICAgIGV4ZWM7IC1FTk9FWEVDIGRvZXMgbm90IGZhaWwgdGhlIGV4ZWMgYnV0IG1vdmVzIG9uIHRvIHRoZVxcbisgKiAgICAgICAgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzXFxuKyAqIEBuYW1lOiBuYW1lIHRoYXQgJ0InIGVudHJpZXMgcmVmZXJlbmNlIHRoZSBoYW5kbGVyIGJ5XFxuKyAqL1xcbitzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIHtcXG4rXFx0aW50ICgqbG9hZCkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7XFxuK1xcdGNoYXIgbmFtZVtCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVhdO1xcbit9O1xcbitcXG4rI2lmZGVmIENPTkZJR19CSU5GTVRfTUlTQ19CUEZcXG4rY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqYmluZm10X21pc2NfZ2V0X29wcyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqbmFtZSk7XFxuK3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpO1xcbitib29sIGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKlxcbitiaW5mbXRfbWlzY19nZXRfb3BzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGJpbmZtdF9taXNjX3B1dF9vcHMoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWYgLyogQ09ORklHX0JJTkZNVF9NSVNDX0JQRiAqL1xcbitcXG4rI2VuZGlmIC8qIF9MSU5VWF9CSU5GTVRfTUlTQ19IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcXG5pbmRleCAyYzc3ZTM4M2U3Mzc1Ny4uMDA3MGQyMDdkNTRmMDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaFxcbkBAIC02NSw2ICs2NSw3IEBAIHN0cnVjdCBsaW51eF9iaW5wcm0ge1xcbiBcXHRcXHRcXHRcXHQgICBvZiB0aGUgdGltZSBzYW1lIGFzIGZpbGVuYW1lLCBidXQgY291bGQgYmVcXG4gXFx0XFx0XFx0XFx0ICAgZGlmZmVyZW50IGZvciBiaW5mbXRfe21pc2Msc2NyaXB0fSAqL1xcbiBcXHRjb25zdCBjaGFyICpmZHBhdGg7XFx0LyogZ2VuZXJhdGVkIGZpbGVuYW1lIGZvciBleGVjdmVhdCAqL1xcbitcXHRjb25zdCBjaGFyICpicGZfaW50ZXJwO1xcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cXG4gXFx0dW5zaWduZWQgaW50ZXJwX2ZsYWdzO1xcbiBcXHRpbnQgZXhlY2ZkO1xcdFxcdC8qIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZXhlY3V0YWJsZSAqL1xcbiBcXHR1bnNpZ25lZCBsb25nIGV4ZWM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA2OjAwOjI5LjIwNjY5NjYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjc4NzIxNDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCSU5GTVRfTUlTQ19CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfYmlucHJtX3NldF9pbnRlcnBcIixcbiAgICBcImJtX2JwZl9yZWdcIixcbiAgICBcImJtX2JwZl91bnJlZ1wiLFxuICAgIFwiY3JlYXRlX2VudHJ5XCIsXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gYWN0IGFzIGhhbmRsZXJzIGZvciBiaW5mbXRfbWlzYy4gSXQgYWRkcyBuZXcgQlBGIHN0cnVjdF9vcHMgYW5kIGtmdW5jcywgYW5kIG1vZGlmaWVzIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RyYXRpb24gYW5kIGV4ZWN1dGlvbiBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24sIHRoZSBuZXcga2Z1bmMsIGFuZCB0aGUgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTY5MTJkMDk0NjRjOTNmMzY1MDU0ZGQ2NzNjMmFkMTk3ZjMwNTRmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMDY6MDA6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5pbmRleCBjMGEzNGZiZjgwMjJiNS4uYzBlZmIwNzczNjI4NDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbkBAIC0yNiwxMSArMjYsMTMgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjpcbiAgICBuYW1lIGJlbG93IGBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjYGA7IGNhbm5vdCBjb250YWluIHNsYXNoZXMgYGAvYGAgZm9yXG4gICAgb2J2aW91cyByZWFzb25zLlxuIC0gYGB0eXBlYGBcbi0gICBpcyB0aGUgdHlwZSBvZiByZWNvZ25pdGlvbi4gR2l2ZSBgYE1gYCBmb3IgbWFnaWMgYW5kIGBgRWBgIGZvciBleHRlbnNpb24uXG4rICAgaXMgdGhlIHR5cGUgb2YgcmVjb2duaXRpb24uIEdpdmUgYGBNYGAgZm9yIG1hZ2ljLCBgYEVgYCBmb3IgZXh0ZW5zaW9uIGFuZFxuKyAgIGBgQmBgIGZvciBhIGJwZi1iYWNrZWQgaGFuZGxlciAoc2VlIGJlbG93KS5cbiAtIGBgb2Zmc2V0YGBcbiAgICBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBtYWdpYy9tYXNrIGluIHRoZSBmaWxlLCBjb3VudGVkIGluIGJ5dGVzLiBUaGlzXG4gICAgZGVmYXVsdHMgdG8gMCBpZiB5b3Ugb21pdCBpdCAoaS5lLiB5b3Ugd3JpdGUgYGA6bmFtZTp0eXBlOjptYWdpYy4uLmBgKS5cbi0gICBJZ25vcmVkIHdoZW4gdXNpbmcgZmlsZW5hbWUgZXh0ZW5zaW9uIG1hdGNoaW5nLlxuKyAgIElnbm9yZWQgd2hlbiB1c2luZyBmaWxlbmFtZSBleHRlbnNpb24gbWF0Y2hpbmcuIEZvciBgYEJgYCBlbnRyaWVzIHRoaXNcbisgICBmaWVsZCBjYXJyaWVzIHRoZSBuYW1lIG9mIHRoZSBicGYgaGFuZGxlciBpbnN0ZWFkLlxuIC0gYGBtYWdpY2BgXG4gICAgaXMgdGhlIGJ5dGUgc2VxdWVuY2UgYmluZm10X21pc2MgaXMgbWF0Y2hpbmcgZm9yLiBUaGUgbWFnaWMgc3RyaW5nXG4gICAgbWF5IGNvbnRhaW4gaGV4LWVuY29kZWQgY2hhcmFjdGVycyBsaWtlIGBgXFx4MGFgYCBvciBgYFxceEE0YGAuIE5vdGUgdGhhdCB5b3VcbkBAIC05Nyw2ICs5OSw0MCBAQCBUaGVyZSBhcmUgc29tZSByZXN0cmljdGlvbnM6XG4gICAgb2Zmc2V0K3NpemUobWFnaWMpIGhhcyB0byBiZSBsZXNzIHRoYW4gMTI4XG4gIC0gdGhlIGludGVycHJldGVyIHN0cmluZyBtYXkgbm90IGV4Y2VlZCAxMjcgY2hhcmFjdGVyc1xuIFxuK1xuK2JwZi1iYWNrZWQgaGFuZGxlcnNcbistLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rV2l0aCBgYENPTkZJR19CSU5GTVRfTUlTQ19CUEZgYCBib3RoIHRoZSBtYXRjaGluZyBhbmQgdGhlIGludGVycHJldGVyXG4rc2VsZWN0aW9uIGNhbiBiZSBkZWxlZ2F0ZWQgdG8gYSBicGYgcHJvZ3JhbS4gQSBoYW5kbGVyIGlzIGFuIGluc3RhbmNlIG9mIHRoZVxuK2BgYmluZm10X21pc2Nfb3BzYGAgc3RydWN0X29wcyB3aXRoIGEgc2xlZXBhYmxlIGBgbG9hZGBgIHByb2dyYW0gYW5kIGFcbitgYG5hbWVgYC4gT25jZSB0aGUgc3RydWN0X29wcyBtYXAgaXMgcmVnaXN0ZXJlZCB0aGUgaGFuZGxlciBjYW4gYmUgYWN0aXZhdGVkXG4rd2l0aCBhIGBgQmBgIGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdCBieSBuYW1lIGFuZCBjYXJyaWVzIG5laXRoZXIgbWFnaWMsXG4rbWFzaywgbm9yIGludGVycHJldGVyOjpcbitcbisgICAgZWNobyAnOnFlbXU6QjpteV9oYW5kbGVyOjo6OicgXHUwMDNlIHJlZ2lzdGVyXG4rXG4rQXQgZXhlYyB0aW1lIHRoZSBgYGxvYWRgYCBwcm9ncmFtIHJlY2VpdmVzIHRoZSBgYGxpbnV4X2JpbnBybWBgIG9mIHRoZVxuK2JpbmFyeS4gSXQgY2FuIG1hdGNoIG9uIHRoZSBoZWFkZXIgaW4gYGBicHJtLVx1MDAzZWJ1ZmBgLCByZWFkIHRoZSBmaWxlIGl0c2VsZixcbitlLmcuIHRvIHBhcnNlIEVMRiBwcm9ncmFtIGhlYWRlcnMsIGFuZCBkZXJpdmUgdGhlIGludGVycHJldGVyIGZyb20gdGhlXG4rYmluYXJ5J3MgbG9jYXRpb24uIEl0IHNlbGVjdHMgdGhlIGludGVycHJldGVyIGJ5IGNhbGxpbmcgdGhlXG4rYGBicGZfYmlucHJtX3NldF9pbnRlcnAoKWBgIGtmdW5jIHdpdGggYW4gYWJzb2x1dGUgcGF0aCBhbmQgcmV0dXJuaW5nIGFcbitwb3NpdGl2ZSB2YWx1ZS4gUmV0dXJuaW5nIGBgMGBgIGZhbGxzIHRocm91Z2ggdG8gdGhlIGhhbmRsZXJzIHJlZ2lzdGVyZWRcbithZnRlciB0aGlzIG9uZSwgYSBuZWdhdGl2ZSBlcnJubyBmYWlscyB0aGUgZXhlYyB3aXRoIHRoYXQgZXJyb3I7XG4rYGAtRU5PRVhFQ2BgIGVuZHMgdGhlIGJpbmZtdF9taXNjIHNlYXJjaCBidXQgbGV0cyB0aGUgcmVtYWluaW5nIGJpbmFyeVxuK2Zvcm1hdHMgaGF2ZSBhIGdvLiBUaGUgaW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZVxuK3Rhc2sgZG9pbmcgdGhlIGV4ZWMsIGV4YWN0bHkgYXMgYSBzdGF0aWNhbGx5IHJlZ2lzdGVyZWQgaW50ZXJwcmV0ZXIgd291bGRcbitiZS5cbitcbitIYW5kbGVycyBhcmUgbG9va2VkIHVwIGluIHRoZSB1c2VyIG5hbWVzcGFjZSB0aGUgc3RydWN0X29wcyBtYXAgd2FzXG4rcmVnaXN0ZXJlZCBpbiwgZmFsbGluZyBiYWNrIHRvIGFuY2VzdG9yIG5hbWVzcGFjZXMsIG1pcnJvcmluZyBob3dcbitiaW5mbXRfbWlzYyBpbnN0YW5jZXMgdGhlbXNlbHZlcyBhcmUgbG9va2VkIHVwLiBUaGUgZW50cnkga2VlcHMgdGhlIGhhbmRsZXJcbithbGl2ZTsgZGVsZXRpbmcgdGhlIHN0cnVjdF9vcHMgbWFwIG9ubHkgcHJldmVudHMgbmV3IHJlZ2lzdHJhdGlvbnMuXG4rXG4rVGhlIGBgQ2BgIGFuZCBgYEZgYCBmbGFncyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgYEJgYCBlbnRyaWVzOiB0aGVyZSBpcyBub1xuK2ZpeGVkIGludGVycHJldGVyIHRvIHByZS1vcGVuIGFuZCBhIHByb2dyYW0tc2VsZWN0ZWQgaW50ZXJwcmV0ZXIgbXVzdCBuZXZlclxuK2luaGVyaXQgdGhlIGNyZWRlbnRpYWxzIG9mIGEgc2V0dWlkIGJpbmFyeS5cbitcbiBUbyB1c2UgYmluZm10X21pc2MgeW91IGhhdmUgdG8gbW91bnQgaXQgZmlyc3QuIFlvdSBjYW4gbW91bnQgaXQgd2l0aFxuIGBgbW91bnQgLXQgYmluZm10X21pc2Mgbm9uZSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2NgYCBjb21tYW5kLCBvciB5b3UgY2FuIGFkZFxuIGEgbGluZSBgYG5vbmUgIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyBiaW5mbXRfbWlzYyBkZWZhdWx0cyAwIDBgYCB0byB5b3VyXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZy5iaW5mbXQgYi9mcy9LY29uZmlnLmJpbmZtdFxuaW5kZXggMTk0OWUyNWM3NzQxYjEuLmRhZWFjNDg4OWQwM2VmIDEwMDY0NFxuLS0tIGEvZnMvS2NvbmZpZy5iaW5mbXRcbisrKyBiL2ZzL0tjb25maWcuYmluZm10XG5AQCAtMTY4LDYgKzE2OCwyMCBAQCBjb25maWcgQklORk1UX01JU0NcbiBcdCAgeW91IGhhdmUgdXNlIGZvciBpdDsgdGhlIG1vZHVsZSBpcyBjYWxsZWQgYmluZm10X21pc2MuIElmIHlvdVxuIFx0ICBkb24ndCBrbm93IHdoYXQgdG8gYW5zd2VyIGF0IHRoaXMgcG9pbnQsIHNheSBZLlxuIFxuK2NvbmZpZyBCSU5GTVRfTUlTQ19CUEZcbitcdGJvb2wgXCJCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXCJcbitcdGRlcGVuZHMgb24gQklORk1UX01JU0M9eVxuK1x0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbitcdGhlbHBcbitcdCAgQWxsb3cgYmluZm10X21pc2MgYmluYXJ5IHR5cGUgaGFuZGxlcnMgdG8gYmUgaW1wbGVtZW50ZWQgYXMgYnBmXG4rXHQgIHN0cnVjdF9vcHMgcHJvZ3JhbXMuIEluc3RlYWQgb2YgbWF0Y2hpbmcgYSBmaXhlZCBtYWdpYyBhbmRcbitcdCAgcmVkaXJlY3RpbmcgdG8gYSBmaXhlZCBpbnRlcnByZXRlciByZWNvcmRlZCBhdCByZWdpc3RyYXRpb24gdGltZVxuK1x0ICBzdWNoIGhhbmRsZXJzIG1hdGNoIGJpbmFyaWVzIHByb2dyYW1tYXRpY2FsbHkgYW5kIGNvbXB1dGUgdGhlXG4rXHQgIGludGVycHJldGVyIHRvIHVzZSBwZXIgYmluYXJ5LCBlLmcuIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZlxuK1x0ICB0aGUgYmluYXJ5IGl0c2VsZi5cbitcbitcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBhbnN3ZXIgYXQgdGhpcyBwb2ludCwgc2F5IE4uXG4rXG4gY29uZmlnIENPUkVEVU1QXG4gXHRib29sIFwiRW5hYmxlIGNvcmUgZHVtcCBzdXBwb3J0XCIgaWYgRVhQRVJUXG4gXHRkZWZhdWx0IHlcbmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uNDk5YzY2NzBmMGMxODMgMTAwNjQ0XG4tLS0gYS9mcy9NYWtlZmlsZVxuKysrIGIvZnMvTWFrZWZpbGVcbkBAIC0zMyw2ICszMyw3IEBAIG9iai0kKENPTkZJR19GU19FTkNSWVBUSU9OKVx0Kz0gY3J5cHRvL1xuIG9iai0kKENPTkZJR19GU19WRVJJVFkpXHRcdCs9IHZlcml0eS9cbiBvYmotJChDT05GSUdfRklMRV9MT0NLSU5HKSAgICAgICs9IGxvY2tzLm9cbiBvYmotJChDT05GSUdfQklORk1UX01JU0MpXHQrPSBiaW5mbXRfbWlzYy5vXG4rb2JqLSQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRilcdCs9IGJpbmZtdF9taXNjX2JwZi5vXG4gb2JqLSQoQ09ORklHX0JJTkZNVF9TQ1JJUFQpXHQrPSBiaW5mbXRfc2NyaXB0Lm9cbiBvYmotJChDT05GSUdfQklORk1UX0VMRilcdCs9IGJpbmZtdF9lbGYub1xuIG9iai0kKENPTkZJR19DT01QQVRfQklORk1UX0VMRilcdCs9IGNvbXBhdF9iaW5mbXRfZWxmLm9cbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuY1xuaW5kZXggODQzNDlmY2I5M2YxM2EuLmI4MGUyMTliYTU4NzZiIDEwMDY0NFxuLS0tIGEvZnMvYmluZm10X21pc2MuY1xuKysrIGIvZnMvYmluZm10X21pc2MuY1xuQEAgLTE3LDYgKzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdF9taXNjLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2hlbHBlcnMuaFx1MDAzZVxuQEAgLTQxLDcgKzQyLDcgQEAgZW51bSB7XG4gXHRWRVJCT1NFX1NUQVRVUyA9IDEgLyogbWFrZSBpdCB6ZXJvIHRvIHNhdmUgNDAwIGJ5dGVzIGtlcm5lbCBtZW1vcnkgKi9cbiB9O1xuIFxuLWVudW0ge0VuYWJsZWQsIE1hZ2ljfTtcbitlbnVtIHtFbmFibGVkLCBNYWdpYywgQnBmfTtcbiAjZGVmaW5lIE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwICgxVUwgXHUwMDNjXHUwMDNjIDMxKVxuICNkZWZpbmUgTUlTQ19GTVRfT1BFTl9CSU5BUlkgKDFVTCBcdTAwM2NcdTAwM2MgMzApXG4gI2RlZmluZSBNSVNDX0ZNVF9DUkVERU5USUFMUyAoMVVMIFx1MDAzY1x1MDAzYyAyOSlcbkBAIC01OCw2ICs1OSw4IEBAIHR5cGVkZWYgc3RydWN0IHtcbiBcdGNoYXIgKm5hbWU7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXHRzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGU7XG4rXHRjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpicGZfb3BzO1x0LyogYnBmLWJhY2tlZCBoYW5kbGVyICgnQicpICovXG4rXHRjb25zdCBjaGFyICpicGZfb3BzX25hbWU7XG4gXHRyZWZjb3VudF90IHVzZXJzO1x0XHQvKiBzeW5jIHJlbW92YWwgd2l0aCBsb2FkX21pc2NfYmluYXJ5KCkgKi9cbiB9IE5vZGU7XG4gXG5AQCAtODIsMTQgKzg1LDE5IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBibV9mc190eXBlO1xuICAqIHNlYXJjaF9iaW5mbXRfaGFuZGxlciAtIHNlYXJjaCBmb3IgYSBiaW5hcnkgaGFuZGxlciBmb3IgQGJwcm1cbiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlXG4gICogQGJwcm06IGJpbmFyeSBmb3Igd2hpY2ggd2UgYXJlIGxvb2tpbmcgZm9yIGEgaGFuZGxlclxuKyAqIEBicGZfc2tpcDogbnVtYmVyIG9mIGJwZi1iYWNrZWQgaGFuZGxlcnMgdG8gc2tpcCBvdmVyXG4gICpcbiAgKiBTZWFyY2ggZm9yIGEgYmluYXJ5IHR5cGUgaGFuZGxlciBmb3IgQGJwcm0gaW4gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBiaW5hcnlcbi0gKiB0eXBlIGhhbmRsZXJzLlxuKyAqIHR5cGUgaGFuZGxlcnMuIEEgYnBmLWJhY2tlZCBoYW5kbGVyIGNhbm5vdCBiZSBtYXRjaGVkIGhlcmUgYXMgaXRzIHByb2dyYW1cbisgKiBtdXN0IHJ1biBpbiBzbGVlcGFibGUgY29udGV4dDsgaXQgaXMgcmV0dXJuZWQgYXMgYSBjYW5kaWRhdGUgYW5kIHRoZVxuKyAqIHByb2dyYW0gZGVjaWRlcyBpbiBsb2FkX21pc2NfYmluYXJ5KCkuIEBicGZfc2tpcCBhbGxvd3MgdGhlIGNhbGxlciB0b1xuKyAqIHJlc3VtZSB0aGUgc2VhcmNoIGFmdGVyIHRoZSBmaXJzdCBAYnBmX3NraXAgY2FuZGlkYXRlcyBkZWNsaW5lZC5cbiAgKlxuICAqIFJldHVybjogYmluYXJ5IHR5cGUgbGlzdCBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmVcbiAgKi9cbiBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbi1cdFx0XHRcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IGJwZl9za2lwKVxuIHtcbiBcdGNoYXIgKnAgPSBzdHJyY2hyKGJwcm0tXHUwMDNlaW50ZXJwLCAnLicpO1xuIFx0Tm9kZSAqZTtcbkBAIC0xMDMsNiArMTExLDE1IEBAIHN0YXRpYyBOb2RlICpzZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuIFx0XHRpZiAoIXRlc3RfYml0KEVuYWJsZWQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHQvKiBUaGUgcHJvZ3JhbSBkZWNpZGVzIGluIGxvYWRfbWlzY19iaW5hcnkoKS4gKi9cbitcdFx0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbitcdFx0XHRpZiAoYnBmX3NraXApIHtcbitcdFx0XHRcdGJwZl9za2lwLS07XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIGU7XG4rXHRcdH1cbitcbiBcdFx0LyogRG8gbWF0Y2hpbmcgYmFzZWQgb24gZXh0ZW5zaW9uIGlmIGFwcGxpY2FibGUuICovXG4gXHRcdGlmICghdGVzdF9iaXQoTWFnaWMsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdFx0aWYgKHAgXHUwMDI2XHUwMDI2ICFzdHJjbXAoZS1cdTAwM2VtYWdpYywgcCArIDEpKVxuQEAgLTEzMiw2ICsxNDksNyBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiAgKiBnZXRfYmluZm10X2hhbmRsZXIgLSB0cnkgdG8gZmluZCBhIGJpbmFyeSB0eXBlIGhhbmRsZXJcbiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlXG4gICogQGJwcm06IGJpbmFyeSBmb3Igd2hpY2ggd2UgYXJlIGxvb2tpbmcgZm9yIGEgaGFuZGxlclxuKyAqIEBicGZfc2tpcDogbnVtYmVyIG9mIGJwZi1iYWNrZWQgaGFuZGxlcnMgdG8gc2tpcCBvdmVyXG4gICpcbiAgKiBUcnkgdG8gZmluZCBhIGJpbmZtdCBoYW5kbGVyIGZvciB0aGUgYmluYXJ5IHR5cGUuIElmIG9uZSBpcyBmb3VuZCB0YWtlIGFcbiAgKiByZWZlcmVuY2UgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlbW92YWwgdmlhIGJtX3tlbnRyeSxzdGF0dXN9X3dyaXRlKCkuXG5AQCAtMTM5LDEyICsxNTcsMTMgQEAgc3RhdGljIE5vZGUgKnNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG4gICogUmV0dXJuOiBiaW5hcnkgdHlwZSBsaXN0IGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBOb2RlICpnZXRfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuLVx0XHRcdFx0c3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbitcdFx0XHRcdHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgYnBmX3NraXApXG4ge1xuIFx0Tm9kZSAqZTtcbiBcbiBcdHJlYWRfbG9jayhcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXNfbG9jayk7XG4tXHRlID0gc2VhcmNoX2JpbmZtdF9oYW5kbGVyKG1pc2MsIGJwcm0pO1xuK1x0ZSA9IHNlYXJjaF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtLCBicGZfc2tpcCk7XG4gXHRpZiAoZSlcbiBcdFx0cmVmY291bnRfaW5jKFx1MDAyNmUtXHUwMDNldXNlcnMpO1xuIFx0cmVhZF91bmxvY2soXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzX2xvY2spO1xuQEAgLTE2NCw2ICsxODMsOCBAQCBzdGF0aWMgdm9pZCBwdXRfYmluZm10X2hhbmRsZXIoTm9kZSAqZSlcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZS1cdTAwM2V1c2VycykpIHtcbiBcdFx0aWYgKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSlcbiBcdFx0XHRmaWxwX2Nsb3NlKGUtXHUwMDNlaW50ZXJwX2ZpbGUsIE5VTEwpO1xuK1x0XHRpZiAoZS1cdTAwM2VicGZfb3BzKVxuK1x0XHRcdGJpbmZtdF9taXNjX3B1dF9vcHMoZS1cdTAwM2VicGZfb3BzKTtcbiBcdFx0a2ZyZWUoZSk7XG4gXHR9XG4gfVxuQEAgLTIwNiwxMiArMjI3LDE1IEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlID0gTlVMTDtcbiBcdGludCByZXR2YWwgPSAtRU5PRVhFQztcbiBcdHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYztcbitcdGNvbnN0IGNoYXIgKmludGVycHJldGVyO1xuK1x0dW5zaWduZWQgaW50IGJwZl9za2lwID0gMDtcbiBcbiBcdG1pc2MgPSBsb2FkX2JpbmZtdF9taXNjKCk7XG4gXHRpZiAoIW1pc2MtXHUwMDNlZW5hYmxlZClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdGZtdCA9IGdldF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtKTtcbityZXRyeTpcbitcdGZtdCA9IGdldF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtLCBicGZfc2tpcCk7XG4gXHRpZiAoIWZtdClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbkBAIC0yMjAsNiArMjQ0LDMyIEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0aWYgKGJwcm0tXHUwMDNlaW50ZXJwX2ZsYWdzIFx1MDAyNiBCSU5QUk1fRkxBR1NfUEFUSF9JTkFDQ0VTU0lCTEUpXG4gXHRcdGdvdG8gcmV0O1xuIFxuK1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2Zm10LVx1MDAzZWZsYWdzKSkge1xuK1x0XHRyZXR2YWwgPSBmbXQtXHUwMDNlYnBmX29wcy1cdTAwM2Vsb2FkKGJwcm0pO1xuK1x0XHRpZiAocmV0dmFsIFx1MDAzYyAwKSB7XG4rXHRcdFx0LyogS2VlcCBhIHByb2dyYW0tc3VwcGxpZWQgZXJyb3Igd2l0aGluIGVycm5vIHJhbmdlLiAqL1xuK1x0XHRcdGlmIChyZXR2YWwgXHUwMDNjIC1NQVhfRVJSTk8pXG4rXHRcdFx0XHRyZXR2YWwgPSAtRU5PRVhFQztcbitcdFx0XHRnb3RvIHJldDtcbitcdFx0fVxuK1x0XHRpZiAoIXJldHZhbCkge1xuK1x0XHRcdC8qIERlY2xpbmVkLCBtb3ZlIG9uIHRvIGxhdGVyIGhhbmRsZXJzLiAqL1xuK1x0XHRcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycCk7XG4rXHRcdFx0YnBybS1cdTAwM2VicGZfaW50ZXJwID0gTlVMTDtcbitcdFx0XHRwdXRfYmluZm10X2hhbmRsZXIoZm10KTtcbitcdFx0XHRicGZfc2tpcCsrO1xuK1x0XHRcdHJldHZhbCA9IC1FTk9FWEVDO1xuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdH1cbitcdFx0LyogU2VsZWN0aW5nIGFuIGludGVycHJldGVyIGlzIHBhcnQgb2YgdGhlIGNvbnRyYWN0LiAqL1xuK1x0XHRyZXR2YWwgPSAtRU5PRVhFQztcbitcdFx0aWYgKCFicHJtLVx1MDAzZWJwZl9pbnRlcnApXG4rXHRcdFx0Z290byByZXQ7XG4rXHRcdGludGVycHJldGVyID0gYnBybS1cdTAwM2VicGZfaW50ZXJwO1xuK1x0fSBlbHNlIHtcbitcdFx0aW50ZXJwcmV0ZXIgPSBmbXQtXHUwMDNlaW50ZXJwcmV0ZXI7XG4rXHR9XG4rXG4gXHRpZiAoZm10LVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCkge1xuIFx0XHRicHJtLVx1MDAzZWludGVycF9mbGFncyB8PSBCSU5QUk1fRkxBR1NfUFJFU0VSVkVfQVJHVjA7XG4gXHR9IGVsc2Uge1xuQEAgLTIzOCwxMyArMjg4LDEzIEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0YnBybS1cdTAwM2VhcmdjKys7XG4gXG4gXHQvKiBhZGQgdGhlIGludGVycCBhcyBhcmd2WzBdICovXG4tXHRyZXR2YWwgPSBjb3B5X3N0cmluZ19rZXJuZWwoZm10LVx1MDAzZWludGVycHJldGVyLCBicHJtKTtcbitcdHJldHZhbCA9IGNvcHlfc3RyaW5nX2tlcm5lbChpbnRlcnByZXRlciwgYnBybSk7XG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHJldDtcbiBcdGJwcm0tXHUwMDNlYXJnYysrO1xuIFxuIFx0LyogVXBkYXRlIGludGVycCBpbiBjYXNlIGJpbmZtdF9zY3JpcHQgbmVlZHMgaXQuICovXG4tXHRyZXR2YWwgPSBicHJtX2NoYW5nZV9pbnRlcnAoZm10LVx1MDAzZWludGVycHJldGVyLCBicHJtKTtcbitcdHJldHZhbCA9IGJwcm1fY2hhbmdlX2ludGVycChpbnRlcnByZXRlciwgYnBybSk7XG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHJldDtcbiBcbkBAIC0yNTMsNyArMzAzLDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRcdGlmICghSVNfRVJSKGludGVycF9maWxlKSlcbiBcdFx0XHRkZW55X3dyaXRlX2FjY2VzcyhpbnRlcnBfZmlsZSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRpbnRlcnBfZmlsZSA9IG9wZW5fZXhlYyhmbXQtXHUwMDNlaW50ZXJwcmV0ZXIpO1xuK1x0XHRpbnRlcnBfZmlsZSA9IG9wZW5fZXhlYyhpbnRlcnByZXRlcik7XG4gXHR9XG4gXHRyZXR2YWwgPSBQVFJfRVJSKGludGVycF9maWxlKTtcbiBcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKVxuQEAgLTI2NSw2ICszMTUsOSBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcbiBcdHJldHZhbCA9IDA7XG4gcmV0OlxuK1x0LyogQSBwcm9ncmFtLXNlbGVjdGVkIGludGVycHJldGVyIGlzIGNvbnN1bWVkIGJ5IHRoaXMgZXhlYyBhdHRlbXB0LiAqL1xuK1x0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IE5VTEw7XG4gXG4gXHQvKlxuIFx0ICogSWYgd2UgYWN0dWFsbHkgcHV0IHRoZSBub2RlIGhlcmUgYWxsIGNvbmN1cnJlbnQgY2FsbHMgdG9cbkBAIC00MDQsMTMgKzQ1Nyw0NyBAQCBzdGF0aWMgTm9kZSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcbiBcdFx0cHJfZGVidWcoXCJyZWdpc3RlcjogdHlwZTogTSAobWFnaWMpXFxuXCIpO1xuIFx0XHRlLVx1MDAzZWZsYWdzID0gKDEgXHUwMDNjXHUwMDNjIEVuYWJsZWQpIHwgKDEgXHUwMDNjXHUwMDNjIE1hZ2ljKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlICdCJzpcbitcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpKVxuK1x0XHRcdGdvdG8gZWludmFsO1xuK1x0XHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiB0eXBlOiBCIChicGYpXFxuXCIpO1xuK1x0XHRlLVx1MDAzZWZsYWdzID0gKDEgXHUwMDNjXHUwMDNjIEVuYWJsZWQpIHwgKDEgXHUwMDNjXHUwMDNjIEJwZik7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0Z290byBlaW52YWw7XG4gXHR9XG4gXHRpZiAoKnArKyAhPSBkZWwpXG4gXHRcdGdvdG8gZWludmFsO1xuIFxuLVx0aWYgKHRlc3RfYml0KE1hZ2ljLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuK1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbitcdFx0Y2hhciAqcztcbitcbitcdFx0LyogVGhlICdvZmZzZXQnIGZpZWxkIGNhcnJpZXMgdGhlIGhhbmRsZXIgbmFtZS4gKi9cbitcdFx0cyA9IHN0cmNocihwLCBkZWwpO1xuK1x0XHRpZiAoIXMpXG4rXHRcdFx0Z290byBlaW52YWw7XG4rXHRcdCpzKysgPSAnXFwwJztcbitcdFx0ZS1cdTAwM2VicGZfb3BzX25hbWUgPSBwO1xuK1x0XHRpZiAoIWUtXHUwMDNlYnBmX29wc19uYW1lWzBdIHx8XG4rXHRcdCAgICBzdHJsZW4oZS1cdTAwM2VicGZfb3BzX25hbWUpIFx1MDAzZT0gQklORk1UX01JU0NfT1BTX05BTUVfTUFYKVxuK1x0XHRcdGdvdG8gZWludmFsO1xuK1x0XHRwID0gcztcbitcdFx0cHJfZGVidWcoXCJyZWdpc3RlcjogYnBmIGhhbmRsZXI6IHslc31cXG5cIiwgZS1cdTAwM2VicGZfb3BzX25hbWUpO1xuK1xuK1x0XHQvKiBUaGUgJ21hZ2ljJyBmaWVsZCBtdXN0IGJlIGVtcHR5LiAqL1xuK1x0XHRzID0gc3RyY2hyKHAsIGRlbCk7XG4rXHRcdGlmICghcyB8fCBzICE9IHApXG4rXHRcdFx0Z290byBlaW52YWw7XG4rXHRcdCpzKysgPSAnXFwwJztcbitcdFx0cCA9IHM7XG4rXG4rXHRcdC8qIFRoZSAnbWFzaycgZmllbGQgbXVzdCBiZSBlbXB0eS4gKi9cbitcdFx0cyA9IHN0cmNocihwLCBkZWwpO1xuK1x0XHRpZiAoIXMgfHwgcyAhPSBwKVxuK1x0XHRcdGdvdG8gZWludmFsO1xuK1x0XHQqcysrID0gJ1xcMCc7XG4rXHRcdHAgPSBzO1xuK1x0fSBlbHNlIGlmICh0ZXN0X2JpdChNYWdpYywgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiBcdFx0LyogSGFuZGxlIHRoZSAnTScgKG1hZ2ljKSBmb3JtYXQuICovXG4gXHRcdGNoYXIgKnM7XG4gXG5AQCAtNTI0LDggKzYxMSwxMyBAQCBzdGF0aWMgTm9kZSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcbiBcdGlmICghcClcbiBcdFx0Z290byBlaW52YWw7XG4gXHQqcCsrID0gJ1xcMCc7XG4tXHRpZiAoIWUtXHUwMDNlaW50ZXJwcmV0ZXJbMF0pXG4rXHRpZiAodGVzdF9iaXQoQnBmLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuK1x0XHQvKiBUaGUgcHJvZ3JhbSBzZWxlY3RzIHRoZSBpbnRlcnByZXRlciBhdCBleGVjIHRpbWUuICovXG4rXHRcdGlmIChlLVx1MDAzZWludGVycHJldGVyWzBdKVxuK1x0XHRcdGdvdG8gZWludmFsO1xuK1x0fSBlbHNlIGlmICghZS1cdTAwM2VpbnRlcnByZXRlclswXSkge1xuIFx0XHRnb3RvIGVpbnZhbDtcbitcdH1cbiBcdHByX2RlYnVnKFwicmVnaXN0ZXI6IGludGVycHJldGVyOiB7JXN9XFxuXCIsIGUtXHUwMDNlaW50ZXJwcmV0ZXIpO1xuIFxuIFx0LyogUGFyc2UgdGhlICdmbGFncycgZmllbGQuICovXG5AQCAtNTM1LDYgKzYyNywxNCBAQCBzdGF0aWMgTm9kZSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcbiBcdGlmIChwICE9IGJ1ZiArIGNvdW50KVxuIFx0XHRnb3RvIGVpbnZhbDtcbiBcbitcdC8qXG4rXHQgKiBBIHByb2dyYW0tc2VsZWN0ZWQgaW50ZXJwcmV0ZXIgY2Fubm90IGJlIHByZS1vcGVuZWQgYW5kIG11c3Qgbm90XG4rXHQgKiBpbmhlcml0IHRoZSBjcmVkZW50aWFscyBvZiBhIHNldHVpZCBiaW5hcnkgaXQgd2FzIGNob3NlbiBmb3IuXG4rXHQgKi9cbitcdGlmICh0ZXN0X2JpdChCcGYsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChlLVx1MDAzZWZsYWdzIFx1MDAyNiAoTUlTQ19GTVRfQ1JFREVOVElBTFMgfCBNSVNDX0ZNVF9PUEVOX0ZJTEUpKSlcbitcdFx0Z290byBlaW52YWw7XG4rXG4gXHRyZXR1cm4gZTtcbiBcbiBvdXQ6XG5AQCAtNTg4LDcgKzY4OCwxMCBAQCBzdGF0aWMgdm9pZCBlbnRyeV9zdGF0dXMoTm9kZSAqZSwgY2hhciAqcGFnZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0ZHAgKz0gc3ByaW50ZihkcCwgXCIlc1xcbmludGVycHJldGVyICVzXFxuXCIsIHN0YXR1cywgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4rXHRpZiAodGVzdF9iaXQoQnBmLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSlcbitcdFx0ZHAgKz0gc3ByaW50ZihkcCwgXCIlc1xcbmJwZiAlc1xcblwiLCBzdGF0dXMsIGUtXHUwMDNlYnBmX29wc19uYW1lKTtcbitcdGVsc2VcbitcdFx0ZHAgKz0gc3ByaW50ZihkcCwgXCIlc1xcbmludGVycHJldGVyICVzXFxuXCIsIHN0YXR1cywgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4gXG4gXHQvKiBwcmludCB0aGUgc3BlY2lhbCBmbGFncyAqL1xuIFx0ZHAgKz0gc3ByaW50ZihkcCwgXCJmbGFnczogXCIpO1xuQEAgLTYwMiw3ICs3MDUsOSBAQCBzdGF0aWMgdm9pZCBlbnRyeV9zdGF0dXMoTm9kZSAqZSwgY2hhciAqcGFnZSlcbiBcdFx0KmRwKysgPSAnRic7XG4gXHQqZHArKyA9ICdcXG4nO1xuIFxuLVx0aWYgKCF0ZXN0X2JpdChNYWdpYywgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbitcdGlmICh0ZXN0X2JpdChCcGYsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdCpkcCA9ICdcXDAnO1xuK1x0fSBlbHNlIGlmICghdGVzdF9iaXQoTWFnaWMsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdHNwcmludGYoZHAsIFwiZXh0ZW5zaW9uIC4lc1xcblwiLCBlLVx1MDAzZW1hZ2ljKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRwICs9IHNwcmludGYoZHAsIFwib2Zmc2V0ICVpXFxubWFnaWMgXCIsIGUtXHUwMDNlb2Zmc2V0KTtcbkBAIC04MDksNiArOTE0LDE2IEBAIHN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0aWYgKElTX0VSUihlKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZSk7XG4gXG4rXHRpZiAodGVzdF9iaXQoQnBmLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRlLVx1MDAzZWJwZl9vcHMgPSBiaW5mbXRfbWlzY19nZXRfb3BzKHNiLVx1MDAzZXNfdXNlcl9ucywgZS1cdTAwM2VicGZfb3BzX25hbWUpO1xuK1x0XHRpZiAoIWUtXHUwMDNlYnBmX29wcykge1xuK1x0XHRcdHByX25vdGljZShcInJlZ2lzdGVyOiBubyBicGYgaGFuZGxlciBuYW1lZCAlc1xcblwiLFxuK1x0XHRcdFx0ICBlLVx1MDAzZWJwZl9vcHNfbmFtZSk7XG4rXHRcdFx0a2ZyZWUoZSk7XG4rXHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogTm93IHRoYXQgd2Ugc3VwcG9ydCB1bnByaXZpbGVnZWQgYmluZm10X21pc2MgbW91bnRzIG1ha2VcbkBAIC04MzQsNiArOTQ5LDggQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdFx0ZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpO1xuIFx0XHRcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XG4gXHRcdH1cbitcdFx0aWYgKGUtXHUwMDNlYnBmX29wcylcbitcdFx0XHRiaW5mbXRfbWlzY19wdXRfb3BzKGUtXHUwMDNlYnBmX29wcyk7XG4gXHRcdGtmcmVlKGUpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjX2JwZi5jIGIvZnMvYmluZm10X21pc2NfYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzJkYTA5NjRkOTQ5MTVcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL2JpbmZtdF9taXNjX2JwZi5jXG5AQCAtMCwwICsxLDI3NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIEJQRi1iYWNrZWQgYmluYXJ5IHR5cGUgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLlxuKyAqXG4rICogQSBoYW5kbGVyIGlzIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBzdHJ1Y3Rfb3BzIG1hcC4gTG9hZGluZyBhbmRcbisgKiByZWdpc3RlcmluZyBpdCBtYWtlcyB0aGUgaGFuZGxlciBhdmFpbGFibGUgdW5kZXIgaXRzIG5hbWUgaW4gdGhlIHVzZXJcbisgKiBuYW1lc3BhY2UgaXQgd2FzIHJlZ2lzdGVyZWQgaW4uIEEgYmluZm10X21pc2MgJ0InIGVudHJ5IGFjdGl2YXRlcyBpdDpcbisgKlxuKyAqICAgZWNobyAnOmVudHJ5OkI6XHUwMDNjaGFuZGxlci1uYW1lXHUwMDNlOjo6OicgXHUwMDNlIFx1MDAzY2JpbmZtdF9taXNjXHUwMDNlL3JlZ2lzdGVyXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10X21pc2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3ZlcmlmaWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9uYW1lc3BhY2UuaFx1MDAzZVxuK1xuK3N0cnVjdCBibV9icGZfb3BzX3JlZyB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHM7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4rXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX01VVEVYKGJtX2JwZl9vcHNfbG9jayk7XG4rc3RhdGljIExJU1RfSEVBRChibV9icGZfb3BzX2xpc3QpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2JpbmZtdF9taXNjX29wcztcbitcbitzdGF0aWMgc3RydWN0IGJtX2JwZl9vcHNfcmVnICpibV9icGZfb3BzX2ZpbmQoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLFxuK1x0XHRcdFx0XHQgICAgICBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZibV9icGZfb3BzX2xvY2spO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsIFx1MDAyNmJtX2JwZl9vcHNfbGlzdCwgbGlzdCkge1xuK1x0XHRpZiAocmVnLVx1MDAzZXVzZXJfbnMgPT0gdXNlcl9ucyBcdTAwMjZcdTAwMjYgIXN0cmNtcChyZWctXHUwMDNlb3BzLVx1MDAzZW5hbWUsIG5hbWUpKVxuK1x0XHRcdHJldHVybiByZWc7XG4rXHR9XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rLyoqXG4rICogYmluZm10X21pc2NfZ2V0X29wcyAtIGxvb2sgdXAgYSBicGYgYmluYXJ5IHR5cGUgaGFuZGxlciBieSBuYW1lXG4rICogQHVzZXJfbnM6IHVzZXIgbmFtZXNwYWNlIG9mIHRoZSBiaW5mbXRfbWlzYyBpbnN0YW5jZVxuKyAqIEBuYW1lOiBuYW1lIHRoZSBoYW5kbGVyIHdhcyByZWdpc3RlcmVkIHVuZGVyXG4rICpcbisgKiBTZWFyY2ggQHVzZXJfbnMgYW5kIGl0cyBhbmNlc3RvcnMgZm9yIGEgaGFuZGxlciBuYW1lZCBAbmFtZSwgbWlycm9yaW5nXG4rICogdGhlIGluc3RhbmNlIGxvb2t1cCBpbiBsb2FkX2JpbmZtdF9taXNjKCkuIFRoZSByZXR1cm5lZCBoYW5kbGVyIHN0YXlzXG4rICogY2FsbGFibGUgdW50aWwgYmluZm10X21pc2NfcHV0X29wcygpIGV2ZW4gaWYgdGhlIGJhY2tpbmcgc3RydWN0X29wcyBtYXBcbisgKiBpcyBkZXRhY2hlZCBvciBkZWxldGVkIGluIHRoZSBtZWFudGltZS5cbisgKlxuKyAqIFJldHVybjogdGhlIGhhbmRsZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlXG4rICovXG4rY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqYmluZm10X21pc2NfZ2V0X29wcyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXG4rXHRcdFx0XHRcdFx0ICBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XG4rXHRzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKnJlZztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZibV9icGZfb3BzX2xvY2spO1xuK1xuK1x0Zm9yIChucyA9IHVzZXJfbnM7IG5zOyBucyA9IG5zLVx1MDAzZXBhcmVudCkge1xuK1x0XHRyZWcgPSBibV9icGZfb3BzX2ZpbmQobnMsIG5hbWUpO1xuK1x0XHRpZiAoIXJlZylcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCFicGZfc3RydWN0X29wc19nZXQocmVnLVx1MDAzZW9wcykpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdHJldHVybiByZWctXHUwMDNlb3BzO1xuK1x0fVxuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpXG4re1xuK1x0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4rfVxuK1xuK2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbit7XG4rXHRyZXR1cm4gcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VzdF9vcHMgPT0gXHUwMDI2YnBmX2JpbmZtdF9taXNjX29wcztcbit9XG4rXG4rX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuK1xuKy8qKlxuKyAqIGJwZl9iaW5wcm1fc2V0X2ludGVycCAtIHNlbGVjdCB0aGUgaW50ZXJwcmV0ZXIgZm9yIHRoZSBjdXJyZW50IGV4ZWNcbisgKiBAYnBybTogYmluYXJ5IHRoYXQgaXMgYmVpbmcgZXhlY3V0ZWRcbisgKiBAcGF0aDogYWJzb2x1dGUgcGF0aCB0byB0aGUgaW50ZXJwcmV0ZXJcbisgKiBAcGF0aF9fc3o6IHNpemUgb2YgdGhlIEBwYXRoIGJ1ZmZlciwgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUxcbisgKlxuKyAqIFRvIGJlIGNhbGxlZCBmcm9tIHRoZSBsb2FkIHByb2dyYW0gb2YgYSBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGhhbmRsZXJcbisgKiBiZWZvcmUgcmV0dXJuaW5nIGEgcG9zaXRpdmUgdmFsdWUuIFRoZSBwYXRoIGlzIG9wZW5lZCB3aXRoIHRoZVxuKyAqIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZSBleGVjIGFmdGVyIHRoZSBwcm9ncmFtIHJldHVybnMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfX3N6KVxuK3tcbitcdHNpemVfdCBsZW47XG4rXHRjaGFyICppbnRlcnA7XG4rXG4rXHRpZiAoIXBhdGhfX3N6KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGxlbiA9IHN0cm5sZW4ocGF0aCwgcGF0aF9fc3opO1xuK1x0aWYgKGxlbiA9PSBwYXRoX19zeilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAocGF0aFswXSAhPSAnLycpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKGxlbiBcdTAwM2U9IFBBVEhfTUFYKVxuK1x0XHRyZXR1cm4gLUVOQU1FVE9PTE9ORztcbitcbitcdGludGVycCA9IGttZW1kdXBfbnVsKHBhdGgsIGxlbiwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWludGVycClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuK1x0YnBybS1cdTAwM2VicGZfaW50ZXJwID0gaW50ZXJwO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4rXG4rQlRGX0tGVU5DU19TVEFSVChibV9icGZfa2Z1bmNfaWRzKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NldF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcbitCVEZfS0ZVTkNTX0VORChibV9icGZfa2Z1bmNfaWRzKVxuK1xuK3N0YXRpYyBpbnQgYm1fYnBmX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbit7XG4rXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmJtX2JwZl9rZnVuY19pZHMsIGtmdW5jX2lkKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAoYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKHByb2cpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAtRUFDQ0VTO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYm1fYnBmX2tmdW5jX3NldCA9IHtcbitcdC5vd25lclx0PSBUSElTX01PRFVMRSxcbitcdC5zZXRcdD0gXHUwMDI2Ym1fYnBmX2tmdW5jX2lkcyxcbitcdC5maWx0ZXJcdD0gYm1fYnBmX2tmdW5jX2ZpbHRlcixcbit9O1xuK1xuK3N0YXRpYyBpbnQgYm1fYnBmX29wc19fbG9hZChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX29wcyBibV9icGZfb3BzX3N0dWJzID0ge1xuK1x0LmxvYWQgPSBibV9icGZfb3BzX19sb2FkLFxuK307XG4rXG4rc3RhdGljIGludCBibV9icGZfaW5pdChzdHJ1Y3QgYnRmICpidGYpXG4re1xuK1x0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxuK1x0XHRcdFx0XHQgXHUwMDI2Ym1fYnBmX2tmdW5jX3NldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYm1fYnBmX2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbit7XG4rXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xuK1xuK1x0c3dpdGNoIChtb2ZmKSB7XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiaW5mbXRfbWlzY19vcHMsIGxvYWQpOlxuK1x0XHQvKiBSZWxpYWJsZSBmaWxlIHJlYWRzIGF0IGV4ZWMgdGltZSByZXF1aXJlIHNsZWVwaW5nLiAqL1xuK1x0XHRpZiAoIXByb2ctXHUwMDNlc2xlZXBhYmxlKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRicmVhaztcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJtX2JwZl9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4rXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcbitcdFx0XHQgICAgICB2b2lkICprZGF0YSwgY29uc3Qgdm9pZCAqdWRhdGEpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqdW9wcyA9IHVkYXRhO1xuK1x0c3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzID0ga2RhdGE7XG4rXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xuK1xuK1x0c3dpdGNoIChtb2ZmKSB7XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiaW5mbXRfbWlzY19vcHMsIG5hbWUpOlxuK1x0XHRpZiAoYnBmX29ial9uYW1lX2NweShvcHMtXHUwMDNlbmFtZSwgdW9wcy1cdTAwM2VuYW1lLFxuK1x0XHRcdFx0ICAgICBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKSBcdTAwM2M9IDApXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYm1fYnBmX3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxuK3tcbitcdHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcyA9IGtkYXRhO1xuK1xuK1x0aWYgKCFvcHMtXHUwMDNlbG9hZClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBibV9icGZfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4re1xuK1x0c3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzID0ga2RhdGE7XG4rXHRzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKnJlZztcbitcbitcdHJlZyA9IGt6YWxsb2Nfb2JqKCpyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRpZiAoIXJlZylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZWctXHUwMDNlb3BzID0gb3BzO1xuK1x0cmVnLVx1MDAzZWxpbmsgPSBsaW5rO1xuK1x0cmVnLVx1MDAzZXVzZXJfbnMgPSBnZXRfdXNlcl9ucyhjdXJyZW50X3VzZXJfbnMoKSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2Ym1fYnBmX29wc19sb2NrKTtcbitcbitcdGlmIChibV9icGZfb3BzX2ZpbmQocmVnLVx1MDAzZXVzZXJfbnMsIG9wcy1cdTAwM2VuYW1lKSkge1xuK1x0XHRwdXRfdXNlcl9ucyhyZWctXHUwMDNldXNlcl9ucyk7XG4rXHRcdGtmcmVlKHJlZyk7XG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1x0fVxuK1xuK1x0bGlzdF9hZGQoXHUwMDI2cmVnLVx1MDAzZWxpc3QsIFx1MDAyNmJtX2JwZl9vcHNfbGlzdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYm1fYnBmX3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4re1xuK1x0c3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2Ym1fYnBmX29wc19sb2NrKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkocmVnLCBcdTAwMjZibV9icGZfb3BzX2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKHJlZy1cdTAwM2VvcHMgPT0ga2RhdGEgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2VsaW5rID09IGxpbmspIHtcbitcdFx0XHRsaXN0X2RlbChcdTAwMjZyZWctXHUwMDNlbGlzdCk7XG4rXHRcdFx0cHV0X3VzZXJfbnMocmVnLVx1MDAzZXVzZXJfbnMpO1xuK1x0XHRcdGtmcmVlKHJlZyk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBibV9icGZfdmVyaWZpZXJfb3BzID0ge1xuK1x0LmdldF9mdW5jX3Byb3RvXHRcdD0gYnBmX2Jhc2VfZnVuY19wcm90byxcbitcdC5pc192YWxpZF9hY2Nlc3NcdD0gYnBmX3RyYWNpbmdfYnRmX2N0eF9hY2Nlc3MsXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl9iaW5mbXRfbWlzY19vcHMgPSB7XG4rXHQudmVyaWZpZXJfb3BzXHQ9IFx1MDAyNmJtX2JwZl92ZXJpZmllcl9vcHMsXG4rXHQuaW5pdFx0XHQ9IGJtX2JwZl9pbml0LFxuK1x0LmNoZWNrX21lbWJlclx0PSBibV9icGZfY2hlY2tfbWVtYmVyLFxuK1x0LmluaXRfbWVtYmVyXHQ9IGJtX2JwZl9pbml0X21lbWJlcixcbitcdC52YWxpZGF0ZVx0PSBibV9icGZfdmFsaWRhdGUsXG4rXHQucmVnXHRcdD0gYm1fYnBmX3JlZyxcbitcdC51bnJlZ1x0XHQ9IGJtX2JwZl91bnJlZyxcbitcdC5jZmlfc3R1YnNcdD0gXHUwMDI2Ym1fYnBmX29wc19zdHVicyxcbitcdC5uYW1lXHRcdD0gXCJiaW5mbXRfbWlzY19vcHNcIixcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK307XG4rXG4rc3RhdGljIGludCBfX2luaXQgYm1fYnBmX3N0cnVjdF9vcHNfaW5pdCh2b2lkKVxuK3tcbitcdHJldHVybiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcdTAwMjZicGZfYmluZm10X21pc2Nfb3BzLCBiaW5mbXRfbWlzY19vcHMpO1xuK31cbitsYXRlX2luaXRjYWxsKGJtX2JwZl9zdHJ1Y3Rfb3BzX2luaXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2JwZl9mc19rZnVuY3MuYyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuaW5kZXggNzY4YWNhMmRjMGYwMzQuLmFhMWZlOTg4YjZkMjI5IDEwMDY0NFxuLS0tIGEvZnMvYnBmX2ZzX2tmdW5jcy5jXG4rKysgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbkBAIC0xLDYgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChjKSAyMDI0IEdvb2dsZSBMTEMuICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10X21pc2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX2xzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbkBAIC0zODcsMTAgKzM4OCwyMCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKVxuIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKVxuIFxuKy8qIFNpZGUtZWZmZWN0aW5nIGtmdW5jcyB0aGF0IHN0YXkgZXhjbHVzaXZlIHRvIExTTSBwcm9ncmFtcy4gKi9cbitCVEZfU0VUX1NUQVJUKGJwZl9mc19rZnVuY19sc21fb25seV9pZHMpXG4rQlRGX0lEKGZ1bmMsIGJwZl9zZXRfZGVudHJ5X3hhdHRyKVxuK0JURl9JRChmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cilcbitCVEZfU0VUX0VORChicGZfZnNfa2Z1bmNfbHNtX29ubHlfaWRzKVxuK1xuIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4ge1xuLVx0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpIHx8XG4tXHQgICAgcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNKVxuK1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpKVxuK1x0XHRyZXR1cm4gMDtcbitcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhwcm9nKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhYnRmX2lkX3NldF9jb250YWlucyhcdTAwMjZicGZfZnNfa2Z1bmNfbHNtX29ubHlfaWRzLCBrZnVuY19pZCkpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIC1FQUNDRVM7XG4gfVxuQEAgLTQzMyw3ICs0NDQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc19rZnVuY19zZXQgPSB7XG4gXG4gc3RhdGljIGludCBfX2luaXQgYnBmX2ZzX2tmdW5jc19pbml0KHZvaWQpXG4ge1xuLVx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuK1x0aWYgKHJldCB8fCAhSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0NfQlBGKSlcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcbitcdFx0XHRcdFx0IFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuIH1cbiBcbiBsYXRlX2luaXRjYWxsKGJwZl9mc19rZnVuY3NfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXG5pbmRleCBiOTJmZTdkYjE3NmNmZi4uN2M5ZTI4ZjU0OWE0NTMgMTAwNjQ0XG4tLS0gYS9mcy9leGVjLmNcbisrKyBiL2ZzL2V4ZWMuY1xuQEAgLTE0MTgsNiArMTQxOCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0LyogSWYgYSBiaW5mbXQgY2hhbmdlZCB0aGUgaW50ZXJwLCBmcmVlIGl0LiAqL1xuIFx0aWYgKGJwcm0tXHUwMDNlaW50ZXJwICE9IGJwcm0tXHUwMDNlZmlsZW5hbWUpXG4gXHRcdGtmcmVlKGJwcm0tXHUwMDNlaW50ZXJwKTtcbitcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycCk7XG4gXHRrZnJlZShicHJtLVx1MDAzZWZkcGF0aCk7XG4gXHRrZnJlZShicHJtKTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmUxZDI2YzQzMDFkYTJjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbkBAIC0wLDAgKzEsNDkgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX0xJTlVYX0JJTkZNVF9NSVNDX0hcbisjZGVmaW5lIF9MSU5VWF9CSU5GTVRfTUlTQ19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuK1xuK3N0cnVjdCBicGZfcHJvZztcbitzdHJ1Y3QgbGludXhfYmlucHJtO1xuK3N0cnVjdCB1c2VyX25hbWVzcGFjZTtcbitcbisjZGVmaW5lIEJJTkZNVF9NSVNDX09QU19OQU1FX01BWCAxNlxuK1xuKy8qKlxuKyAqIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgLSBicGYtYmFja2VkIGJpbmFyeSB0eXBlIGhhbmRsZXJcbisgKiBAbG9hZDogbWF0Y2ggQGJwcm0gYW5kIHNlbGVjdCBhbiBpbnRlcnByZXRlciB2aWEgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCk7XG4rICogICAgICAgIHJldHVybnMgXHUwMDNlIDAgaWYgdGhlIGJpbmFyeSB3YXMgaGFuZGxlZCwgMCB0byBmYWxsIHRocm91Z2ggdG8gdGhlXG4rICogICAgICAgIGhhbmRsZXJzIHJlZ2lzdGVyZWQgYWZ0ZXIgdGhpcyBvbmUsIGEgbmVnYXRpdmUgZXJybm8gdG8gZmFpbCB0aGVcbisgKiAgICAgICAgZXhlYzsgLUVOT0VYRUMgZG9lcyBub3QgZmFpbCB0aGUgZXhlYyBidXQgbW92ZXMgb24gdG8gdGhlXG4rICogICAgICAgIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0c1xuKyAqIEBuYW1lOiBuYW1lIHRoYXQgJ0InIGVudHJpZXMgcmVmZXJlbmNlIHRoZSBoYW5kbGVyIGJ5XG4rICovXG4rc3RydWN0IGJpbmZtdF9taXNjX29wcyB7XG4rXHRpbnQgKCpsb2FkKShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTtcbitcdGNoYXIgbmFtZVtCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVhdO1xuK307XG4rXG4rI2lmZGVmIENPTkZJR19CSU5GTVRfTUlTQ19CUEZcbitjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpiaW5mbXRfbWlzY19nZXRfb3BzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcbitcdFx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWUpO1xuK3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpO1xuK2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKlxuK2JpbmZtdF9taXNjX2dldF9vcHMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfQklORk1UX01JU0NfQlBGICovXG4rXG4rI2VuZGlmIC8qIF9MSU5VWF9CSU5GTVRfTUlTQ19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaFxuaW5kZXggMmM3N2UzODNlNzM3NTcuLjAwNzBkMjA3ZDU0ZjA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oXG5AQCAtNjUsNiArNjUsNyBAQCBzdHJ1Y3QgbGludXhfYmlucHJtIHtcbiBcdFx0XHRcdCAgIG9mIHRoZSB0aW1lIHNhbWUgYXMgZmlsZW5hbWUsIGJ1dCBjb3VsZCBiZVxuIFx0XHRcdFx0ICAgZGlmZmVyZW50IGZvciBiaW5mbXRfe21pc2Msc2NyaXB0fSAqL1xuIFx0Y29uc3QgY2hhciAqZmRwYXRoO1x0LyogZ2VuZXJhdGVkIGZpbGVuYW1lIGZvciBleGVjdmVhdCAqL1xuK1x0Y29uc3QgY2hhciAqYnBmX2ludGVycDtcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cbiBcdHVuc2lnbmVkIGludGVycF9mbGFncztcbiBcdGludCBleGVjZmQ7XHRcdC8qIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZXhlY3V0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZyBleGVjO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDY6MDA6MjkuMjA2Njk5NTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjY0NjkwMTMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIEJQRi1CYWNrZWQgYGJpbmZtdF9taXNjYCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZ290IG15IGF0dGVudGlvbi4gSXQgaW50cm9kdWNlcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlOiBCUEYgcHJvZ3JhbXMgaGFuZGxpbmcgYmluYXJ5IGZvcm1hdHMgdmlhIGBiaW5mbXRfbWlzY2AuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBmcy9iaW5mbXRfbWlzYy5jYCwgYSBuZXcgYGZzL2JpbmZtdF9taXNjX2JwZi5jYCwgYW5kIGNoYW5nZXMgdG8gYGZzL2V4ZWMuY2AgYW5kIGBmcy9icGZfZnNfa2Z1bmNzLmNgLiAgVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLCBnaXZlbiB0aGUgYWRkZWQgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGZvciBuZXcgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUga2V5IGlzIHRoaXMgbmV3IGNvbmZpZywgYEJJTkZNVF9NSVNDX0JQRmAuICBJIHF1aWNrbHkgY2hlY2tlZCBgZnMvS2NvbmZpZy5iaW5mbXRgIHRvIG1ha2Ugc3VyZSBJJ20gcmlnaHQgYWJvdXQgdGhlIGNvbmZpZyBuYW1lICh5dXAsIGBCSU5GTVRfTUlTQ19CUEZgKSwgYW5kIHZlcmlmaWVkIGl0cyBkZXBlbmRlbmNpZXM6IGl0IG5lZWRzIGBCSU5GTVRfTUlTQz15YCwgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC5cblxuTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGFuZCBhcmVhcyB0byB0YXJnZXQuIExvb2tpbmcgYXQgdGhlIGNvZGUgY2hhbmdlcywgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBzdGFuZCBvdXQgaW4gdGhlIG1vZGlmaWVkIGZpbGVzOlxuXG5JbiBgZnMvYmluZm10X21pc2MuY2A6IGBzZWFyY2hfYmluZm10X2hhbmRsZXJgLCBgZ2V0X2JpbmZtdF9oYW5kbGVyYCwgYGxvYWRfbWlzY19iaW5hcnlgLCBgY3JlYXRlX2VudHJ5YCwgYGVudHJ5X3N0YXR1c2AsIGBibV9yZWdpc3Rlcl93cml0ZWAuXG5cbkluIGBmcy9iaW5mbXRfbWlzY19icGYuY2A6IGBiaW5mbXRfbWlzY19nZXRfb3BzYCwgYGJpbmZtdF9taXNjX3B1dF9vcHNgLCBgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzYCwgYGJwZl9iaW5wcm1fc2V0X2ludGVycGAsIGBibV9icGZfa2Z1bmNfZmlsdGVyYCwgYGJtX2JwZl9vcHNfX2xvYWRgLCBgYm1fYnBmX2luaXRgLCBgYm1fYnBmX2NoZWNrX21lbWJlcmAsIGBibV9icGZfaW5pdF9tZW1iZXJgLCBgYm1fYnBmX3ZhbGlkYXRlYCwgYGJtX2JwZl9yZWdgLCBgYm1fYnBmX3VucmVnYCwgYGJtX2JwZl9zdHJ1Y3Rfb3BzX2luaXRgLlxuXG5JbiBgZnMvYnBmX2ZzX2tmdW5jcy5jYDogYGJwZl9mc19rZnVuY3NfZmlsdGVyYCwgYGJwZl9mc19rZnVuY3NfaW5pdGAuXG5cbkFuZCBpbiBgZnMvZXhlYy5jYDogYGZyZWVfYnBybWAuXG5cblNvLCAqZGVmaW5pdGVseSogZnV6emFibGUuICBUaGUgY29uZmlnIHRvIGVuYWJsZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYEJJTkZNVF9NSVNDX0JQRmAuIGBCSU5GTVRfTUlTQ2AgaXMgYWxzbyBhIGRlcGVuZGVuY3ksIGJ1dCB0aGF0J3MgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSdsbCBqdXN0IGxpc3QgYEJJTkZNVF9NSVNDX0JQRmAgZm9yIG5vdy5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSAqYmVzdCogdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmc/IGBsb2FkX21pc2NfYmluYXJ5YCBsb29rcyB0ZW1wdGluZywgYXMgaXQncyBhdCB0aGUgY29yZSBvZiB0aGUgZXhlYyBwYXRoLCBidXQgaXQgbWlnaHQgYmUgdG9vIGJyb2FkIGEgdGFyZ2V0IGlmIGl0J3MgY2FsbGVkIG9uIGV2ZXJ5IGBleGVjdmVgIGlmIGBiaW5mbXRfbWlzY2AgaXMgZW5hYmxlZC4gSXQgaGFzIG5ldyBCUEYgbG9naWMgdGhvdWdoLCBzbyBpdCBtaWdodCBiZSBnb29kLiBgY3JlYXRlX2VudHJ5YCBhbmQgYGJtX3JlZ2lzdGVyX3dyaXRlYCBhcmUgdHJpZ2dlcmVkIHdoZW4gd3JpdGluZyB0byBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYCwgd2hpY2ggaXMgYSBnb29kIHRhcmdldGVkIGFwcHJvYWNoLCBhbmQgbmV3IGZvciB0aGlzIGZlYXR1cmUuIGBicGZfYmlucHJtX3NldF9pbnRlcnBgIGlzIGEgQlBGIGtmdW5jIHNwZWNpZmljYWxseSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHNvIGl0J3MgY3JpdGljYWwuIGBibV9icGZfcmVnYCBhbmQgYGJtX2JwZl91bnJlZ2AgYXJlIGFsc28ga2V5LCBhcyB0aGV5IGFyZSBpbnZvbHZlZCBpbiByZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZyB0aGUgQlBGIGBzdHJ1Y3Rfb3BzYC5cblxuTGV0J3MgbWFrZSBzdXJlIHRoZSBjb25maWdzIGFuZCBmb2N1cyBzeW1ib2xzIGFyZSBjb3JyZWN0OlxuXG5Db25maWc6IGBCSU5GTVRfTUlTQ19CUEZgXG5Gb2N1cyBTeW1ib2xzOiBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCwgYGJtX2JwZl9yZWdgLCBgYm1fYnBmX3VucmVnYCwgYGNyZWF0ZV9lbnRyeWAsIGBibV9yZWdpc3Rlcl93cml0ZWBcblxuSSdsbCBvbWl0IGBsb2FkX21pc2NfYmluYXJ5YCB0byBhdm9pZCB0ZXN0aW5nIGV4ZWN2ZSBpbiBnZW5lcmFsIGFuZCB0byBmb2N1cyB0ZXN0cyBvbiBuZXcgY29kZSwgYnV0IGBjcmVhdGVfZW50cnlgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGxvb2sgdmVyeSBnb29kLlxuXG5Pa2F5LCB0aW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5gV29ydGhGdXp6aW5nOiB0cnVlYFxuYEVuYWJsZUNvbmZpZ3M6IFtcIkJJTkZNVF9NSVNDX0JQRlwiXWBcbmBGb2N1c1N5bWJvbHM6IFtcImJwZl9iaW5wcm1fc2V0X2ludGVycFwiLCBcImJtX2JwZl9yZWdcIiwgXCJibV9icGZfdW5yZWdcIiwgXCJjcmVhdGVfZW50cnlcIiwgXCJibV9yZWdpc3Rlcl93cml0ZVwiXWBcbmBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gYWN0IGFzIGhhbmRsZXJzIGZvciBiaW5mbXRfbWlzYy4gSXRcblxuIiwiSW5wdXRUb2tlbnMiOjEyMDkwLCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNjowMDo0NS44NTM2MDQyMjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDI5MDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2JpbnBybV9zZXRfaW50ZXJwXCIsXG4gICAgXCJibV9icGZfcmVnXCIsXG4gICAgXCJibV9icGZfdW5yZWdcIixcbiAgICBcImNyZWF0ZV9lbnRyeVwiLFxuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGFjdCBhcyBoYW5kbGVycyBmb3IgYmluZm10X21pc2MuIEl0IGFkZHMgbmV3IEJQRiBzdHJ1Y3Rfb3BzIGFuZCBrZnVuY3MsIGFuZCBtb2RpZmllcyB0aGUgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIGFuZCBleGVjdXRpb24gbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uLCB0aGUgbmV3IGtmdW5jLCBhbmQgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9iaW5wcm1fc2V0X2ludGVycFwiLFxuICAgIFwiYm1fYnBmX3JlZ1wiLFxuICAgIFwiYm1fYnBmX3VucmVnXCIsXG4gICAgXCJjcmVhdGVfZW50cnlcIixcbiAgICBcImJtX3JlZ2lzdGVyX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBhY3QgYXMgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLiBJdCBhZGRzIG5ldyBCUEYgc3RydWN0X29wcyBhbmQga2Z1bmNzLCBhbmQgbW9kaWZpZXMgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBhbmQgZXhlY3V0aW9uIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiwgdGhlIG5ldyBrZnVuYywgYW5kIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RyYXRpb24gcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjvlrs[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-08 05:50:25 +0000 UTC FinishedAt: 2026-07-08 06:00:47 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC_BPF" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "bpf-next", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "BINFMT_MISC_BPF" ], "series_id": "a29d5169-204d-49c5-9178-c2e15dd52e02" }, "track": "KASAN", "fuzz": { "focus": [ "bpf", "fs" ], "focus_symbols": [ "bpf_binprm_set_interp", "bm_bpf_reg", "bm_bpf_unreg", "create_entry", "bm_register_write" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db", "https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA2OjAwPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtibV9icGZfcmVnJiMzNDssCiAgICAmIzM0O2JtX2JwZl91bnJlZyYjMzQ7LAogICAgJiMzNDtjcmVhdGVfZW50cnkmIzM0OywKICAgICYjMzQ7Ym1fcmVnaXN0ZXJfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBhY3QgYXMgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLiBJdCBhZGRzIG5ldyBCUEYgc3RydWN0X29wcyBhbmQga2Z1bmNzLCBhbmQgbW9kaWZpZXMgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBhbmQgZXhlY3V0aW9uIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiwgdGhlIG5ldyBrZnVuYywgYW5kIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RyYXRpb24gcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wOCAwNjowMDwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IGE2OTEyZDA5NDY0YzkzZjM2NTA1NGRkNjczYzJhZDE5N2YzMDU0ZjNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgV2VkIEp1bCA4IDA2OjAwOjI2IDIwMjYgJiM0MzswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbmluZGV4IGMwYTM0ZmJmODAyMmI1Li5jMGVmYjA3NzM2Mjg0MyAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG4mIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuQEAgLTI2LDExICYjNDM7MjYsMTMgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjpcbiAgICBuYW1lIGJlbG93IGBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjYGA7IGNhbm5vdCBjb250YWluIHNsYXNoZXMgYGAvYGAgZm9yXG4gICAgb2J2aW91cyByZWFzb25zLlxuIC0gYGB0eXBlYGBcbi0gICBpcyB0aGUgdHlwZSBvZiByZWNvZ25pdGlvbi4gR2l2ZSBgYE1gYCBmb3IgbWFnaWMgYW5kIGBgRWBgIGZvciBleHRlbnNpb24uXG4mIzQzOyAgIGlzIHRoZSB0eXBlIG9mIHJlY29nbml0aW9uLiBHaXZlIGBgTWBgIGZvciBtYWdpYywgYGBFYGAgZm9yIGV4dGVuc2lvbiBhbmRcbiYjNDM7ICAgYGBCYGAgZm9yIGEgYnBmLWJhY2tlZCBoYW5kbGVyIChzZWUgYmVsb3cpLlxuIC0gYGBvZmZzZXRgYFxuICAgIGlzIHRoZSBvZmZzZXQgb2YgdGhlIG1hZ2ljL21hc2sgaW4gdGhlIGZpbGUsIGNvdW50ZWQgaW4gYnl0ZXMuIFRoaXNcbiAgICBkZWZhdWx0cyB0byAwIGlmIHlvdSBvbWl0IGl0IChpLmUuIHlvdSB3cml0ZSBgYDpuYW1lOnR5cGU6Om1hZ2ljLi4uYGApLlxuLSAgIElnbm9yZWQgd2hlbiB1c2luZyBmaWxlbmFtZSBleHRlbnNpb24gbWF0Y2hpbmcuXG4mIzQzOyAgIElnbm9yZWQgd2hlbiB1c2luZyBmaWxlbmFtZSBleHRlbnNpb24gbWF0Y2hpbmcuIEZvciBgYEJgYCBlbnRyaWVzIHRoaXNcbiYjNDM7ICAgZmllbGQgY2FycmllcyB0aGUgbmFtZSBvZiB0aGUgYnBmIGhhbmRsZXIgaW5zdGVhZC5cbiAtIGBgbWFnaWNgYFxuICAgIGlzIHRoZSBieXRlIHNlcXVlbmNlIGJpbmZtdF9taXNjIGlzIG1hdGNoaW5nIGZvci4gVGhlIG1hZ2ljIHN0cmluZ1xuICAgIG1heSBjb250YWluIGhleC1lbmNvZGVkIGNoYXJhY3RlcnMgbGlrZSBgYFxceDBhYGAgb3IgYGBcXHhBNGBgLiBOb3RlIHRoYXQgeW91XG5AQCAtOTcsNiAmIzQzOzk5LDQwIEBAIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczpcbiAgICBvZmZzZXQmIzQzO3NpemUobWFnaWMpIGhhcyB0byBiZSBsZXNzIHRoYW4gMTI4XG4gIC0gdGhlIGludGVycHJldGVyIHN0cmluZyBtYXkgbm90IGV4Y2VlZCAxMjcgY2hhcmFjdGVyc1xuIFxuJiM0MztcbiYjNDM7YnBmLWJhY2tlZCBoYW5kbGVyc1xuJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tXG4mIzQzO1xuJiM0MztXaXRoIGBgQ09ORklHX0JJTkZNVF9NSVNDX0JQRmBgIGJvdGggdGhlIG1hdGNoaW5nIGFuZCB0aGUgaW50ZXJwcmV0ZXJcbiYjNDM7c2VsZWN0aW9uIGNhbiBiZSBkZWxlZ2F0ZWQgdG8gYSBicGYgcHJvZ3JhbS4gQSBoYW5kbGVyIGlzIGFuIGluc3RhbmNlIG9mIHRoZVxuJiM0MztgYGJpbmZtdF9taXNjX29wc2BgIHN0cnVjdF9vcHMgd2l0aCBhIHNsZWVwYWJsZSBgYGxvYWRgYCBwcm9ncmFtIGFuZCBhXG4mIzQzO2BgbmFtZWBgLiBPbmNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCBpcyByZWdpc3RlcmVkIHRoZSBoYW5kbGVyIGNhbiBiZSBhY3RpdmF0ZWRcbiYjNDM7d2l0aCBhIGBgQmBgIGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdCBieSBuYW1lIGFuZCBjYXJyaWVzIG5laXRoZXIgbWFnaWMsXG4mIzQzO21hc2ssIG5vciBpbnRlcnByZXRlcjo6XG4mIzQzO1xuJiM0MzsgICAgZWNobyAmIzM5OzpxZW11OkI6bXlfaGFuZGxlcjo6OjomIzM5OyBcdTAwM2UgcmVnaXN0ZXJcbiYjNDM7XG4mIzQzO0F0IGV4ZWMgdGltZSB0aGUgYGBsb2FkYGAgcHJvZ3JhbSByZWNlaXZlcyB0aGUgYGBsaW51eF9iaW5wcm1gYCBvZiB0aGVcbiYjNDM7YmluYXJ5LiBJdCBjYW4gbWF0Y2ggb24gdGhlIGhlYWRlciBpbiBgYGJwcm0tXHUwMDNlYnVmYGAsIHJlYWQgdGhlIGZpbGUgaXRzZWxmLFxuJiM0MztlLmcuIHRvIHBhcnNlIEVMRiBwcm9ncmFtIGhlYWRlcnMsIGFuZCBkZXJpdmUgdGhlIGludGVycHJldGVyIGZyb20gdGhlXG4mIzQzO2JpbmFyeSYjMzk7cyBsb2NhdGlvbi4gSXQgc2VsZWN0cyB0aGUgaW50ZXJwcmV0ZXIgYnkgY2FsbGluZyB0aGVcbiYjNDM7YGBicGZfYmlucHJtX3NldF9pbnRlcnAoKWBgIGtmdW5jIHdpdGggYW4gYWJzb2x1dGUgcGF0aCBhbmQgcmV0dXJuaW5nIGFcbiYjNDM7cG9zaXRpdmUgdmFsdWUuIFJldHVybmluZyBgYDBgYCBmYWxscyB0aHJvdWdoIHRvIHRoZSBoYW5kbGVycyByZWdpc3RlcmVkXG4mIzQzO2FmdGVyIHRoaXMgb25lLCBhIG5lZ2F0aXZlIGVycm5vIGZhaWxzIHRoZSBleGVjIHdpdGggdGhhdCBlcnJvcjtcbiYjNDM7YGAtRU5PRVhFQ2BgIGVuZHMgdGhlIGJpbmZtdF9taXNjIHNlYXJjaCBidXQgbGV0cyB0aGUgcmVtYWluaW5nIGJpbmFyeVxuJiM0Mztmb3JtYXRzIGhhdmUgYSBnby4gVGhlIGludGVycHJldGVyIGlzIG9wZW5lZCB3aXRoIHRoZSBjcmVkZW50aWFscyBvZiB0aGVcbiYjNDM7dGFzayBkb2luZyB0aGUgZXhlYywgZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3b3VsZFxuJiM0MztiZS5cbiYjNDM7XG4mIzQzO0hhbmRsZXJzIGFyZSBsb29rZWQgdXAgaW4gdGhlIHVzZXIgbmFtZXNwYWNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCB3YXNcbiYjNDM7cmVnaXN0ZXJlZCBpbiwgZmFsbGluZyBiYWNrIHRvIGFuY2VzdG9yIG5hbWVzcGFjZXMsIG1pcnJvcmluZyBob3dcbiYjNDM7YmluZm10X21pc2MgaW5zdGFuY2VzIHRoZW1zZWx2ZXMgYXJlIGxvb2tlZCB1cC4gVGhlIGVudHJ5IGtlZXBzIHRoZSBoYW5kbGVyXG4mIzQzO2FsaXZlOyBkZWxldGluZyB0aGUgc3RydWN0X29wcyBtYXAgb25seSBwcmV2ZW50cyBuZXcgcmVnaXN0cmF0aW9ucy5cbiYjNDM7XG4mIzQzO1RoZSBgYENgYCBhbmQgYGBGYGAgZmxhZ3MgY2Fubm90IGJlIGNvbWJpbmVkIHdpdGggYGBCYGAgZW50cmllczogdGhlcmUgaXMgbm9cbiYjNDM7Zml4ZWQgaW50ZXJwcmV0ZXIgdG8gcHJlLW9wZW4gYW5kIGEgcHJvZ3JhbS1zZWxlY3RlZCBpbnRlcnByZXRlciBtdXN0IG5ldmVyXG4mIzQzO2luaGVyaXQgdGhlIGNyZWRlbnRpYWxzIG9mIGEgc2V0dWlkIGJpbmFyeS5cbiYjNDM7XG4gVG8gdXNlIGJpbmZtdF9taXNjIHlvdSBoYXZlIHRvIG1vdW50IGl0IGZpcnN0LiBZb3UgY2FuIG1vdW50IGl0IHdpdGhcbiBgYG1vdW50IC10IGJpbmZtdF9taXNjIG5vbmUgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjYGAgY29tbWFuZCwgb3IgeW91IGNhbiBhZGRcbiBhIGxpbmUgYGBub25lICAvcHJvYy9zeXMvZnMvYmluZm10X21pc2MgYmluZm10X21pc2MgZGVmYXVsdHMgMCAwYGAgdG8geW91clxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcuYmluZm10IGIvZnMvS2NvbmZpZy5iaW5mbXRcbmluZGV4IDE5NDllMjVjNzc0MWIxLi5kYWVhYzQ4ODlkMDNlZiAxMDA2NDRcbi0tLSBhL2ZzL0tjb25maWcuYmluZm10XG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9LY29uZmlnLmJpbmZtdFxuQEAgLTE2OCw2ICYjNDM7MTY4LDIwIEBAIGNvbmZpZyBCSU5GTVRfTUlTQ1xuIFx0ICB5b3UgaGF2ZSB1c2UgZm9yIGl0OyB0aGUgbW9kdWxlIGlzIGNhbGxlZCBiaW5mbXRfbWlzYy4gSWYgeW91XG4gXHQgIGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gYW5zd2VyIGF0IHRoaXMgcG9pbnQsIHNheSBZLlxuIFxuJiM0Mztjb25maWcgQklORk1UX01JU0NfQlBGXG4mIzQzO1x0Ym9vbCBcJiMzNDtCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBCSU5GTVRfTUlTQz15XG4mIzQzO1x0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbiYjNDM7XHRoZWxwXG4mIzQzO1x0ICBBbGxvdyBiaW5mbXRfbWlzYyBiaW5hcnkgdHlwZSBoYW5kbGVycyB0byBiZSBpbXBsZW1lbnRlZCBhcyBicGZcbiYjNDM7XHQgIHN0cnVjdF9vcHMgcHJvZ3JhbXMuIEluc3RlYWQgb2YgbWF0Y2hpbmcgYSBmaXhlZCBtYWdpYyBhbmRcbiYjNDM7XHQgIHJlZGlyZWN0aW5nIHRvIGEgZml4ZWQgaW50ZXJwcmV0ZXIgcmVjb3JkZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWVcbiYjNDM7XHQgIHN1Y2ggaGFuZGxlcnMgbWF0Y2ggYmluYXJpZXMgcHJvZ3JhbW1hdGljYWxseSBhbmQgY29tcHV0ZSB0aGVcbiYjNDM7XHQgIGludGVycHJldGVyIHRvIHVzZSBwZXIgYmluYXJ5LCBlLmcuIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZlxuJiM0MztcdCAgdGhlIGJpbmFyeSBpdHNlbGYuXG4mIzQzO1xuJiM0MztcdCAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gYW5zd2VyIGF0IHRoaXMgcG9pbnQsIHNheSBOLlxuJiM0MztcbiBjb25maWcgQ09SRURVTVBcbiBcdGJvb2wgXCYjMzQ7RW5hYmxlIGNvcmUgZHVtcCBzdXBwb3J0XCYjMzQ7IGlmIEVYUEVSVFxuIFx0ZGVmYXVsdCB5XG5kaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZVxuaW5kZXggODlhOGE5ZDIwN2QxYzUuLjQ5OWM2NjcwZjBjMTgzIDEwMDY0NFxuLS0tIGEvZnMvTWFrZWZpbGVcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL01ha2VmaWxlXG5AQCAtMzMsNiAmIzQzOzMzLDcgQEAgb2JqLSQoQ09ORklHX0ZTX0VOQ1JZUFRJT04pXHQmIzQzOz0gY3J5cHRvL1xuIG9iai0kKENPTkZJR19GU19WRVJJVFkpXHRcdCYjNDM7PSB2ZXJpdHkvXG4gb2JqLSQoQ09ORklHX0ZJTEVfTE9DS0lORykgICAgICAmIzQzOz0gbG9ja3Mub1xuIG9iai0kKENPTkZJR19CSU5GTVRfTUlTQylcdCYjNDM7PSBiaW5mbXRfbWlzYy5vXG4mIzQzO29iai0kKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpXHQmIzQzOz0gYmluZm10X21pc2NfYnBmLm9cbiBvYmotJChDT05GSUdfQklORk1UX1NDUklQVClcdCYjNDM7PSBiaW5mbXRfc2NyaXB0Lm9cbiBvYmotJChDT05GSUdfQklORk1UX0VMRilcdCYjNDM7PSBiaW5mbXRfZWxmLm9cbiBvYmotJChDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEYpXHQmIzQzOz0gY29tcGF0X2JpbmZtdF9lbGYub1xuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjLmMgYi9mcy9iaW5mbXRfbWlzYy5jXG5pbmRleCA4NDM0OWZjYjkzZjEzYS4uYjgwZTIxOWJhNTg3NmIgMTAwNjQ0XG4tLS0gYS9mcy9iaW5mbXRfbWlzYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9iaW5mbXRfbWlzYy5jXG5AQCAtMTcsNiAmIzQzOzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2xhYi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvY3R5cGUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZ19oZWxwZXJzLmhcdTAwM2VcbkBAIC00MSw3ICYjNDM7NDIsNyBAQCBlbnVtIHtcbiBcdFZFUkJPU0VfU1RBVFVTID0gMSAvKiBtYWtlIGl0IHplcm8gdG8gc2F2ZSA0MDAgYnl0ZXMga2VybmVsIG1lbW9yeSAqL1xuIH07XG4gXG4tZW51bSB7RW5hYmxlZCwgTWFnaWN9O1xuJiM0MztlbnVtIHtFbmFibGVkLCBNYWdpYywgQnBmfTtcbiAjZGVmaW5lIE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwICgxVUwgXHUwMDNjXHUwMDNjIDMxKVxuICNkZWZpbmUgTUlTQ19GTVRfT1BFTl9CSU5BUlkgKDFVTCBcdTAwM2NcdTAwM2MgMzApXG4gI2RlZmluZSBNSVNDX0ZNVF9DUkVERU5USUFMUyAoMVVMIFx1MDAzY1x1MDAzYyAyOSlcbkBAIC01OCw2ICYjNDM7NTksOCBAQCB0eXBlZGVmIHN0cnVjdCB7XG4gXHRjaGFyICpuYW1lO1xuIFx0c3RydWN0IGRlbnRyeSAqZGVudHJ5O1xuIFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlO1xuJiM0MztcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJwZl9vcHM7XHQvKiBicGYtYmFja2VkIGhhbmRsZXIgKCYjMzk7QiYjMzk7KSAqL1xuJiM0MztcdGNvbnN0IGNoYXIgKmJwZl9vcHNfbmFtZTtcbiBcdHJlZmNvdW50X3QgdXNlcnM7XHRcdC8qIHN5bmMgcmVtb3ZhbCB3aXRoIGxvYWRfbWlzY19iaW5hcnkoKSAqL1xuIH0gTm9kZTtcbiBcbkBAIC04MiwxNCAmIzQzOzg1LDE5IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBibV9mc190eXBlO1xuICAqIHNlYXJjaF9iaW5mbXRfaGFuZGxlciAtIHNlYXJjaCBmb3IgYSBiaW5hcnkgaGFuZGxlciBmb3IgQGJwcm1cbiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlXG4gICogQGJwcm06IGJpbmFyeSBmb3Igd2hpY2ggd2UgYXJlIGxvb2tpbmcgZm9yIGEgaGFuZGxlclxuJiM0MzsgKiBAYnBmX3NraXA6IG51bWJlciBvZiBicGYtYmFja2VkIGhhbmRsZXJzIHRvIHNraXAgb3ZlclxuICAqXG4gICogU2VhcmNoIGZvciBhIGJpbmFyeSB0eXBlIGhhbmRsZXIgZm9yIEBicHJtIGluIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgYmluYXJ5XG4tICogdHlwZSBoYW5kbGVycy5cbiYjNDM7ICogdHlwZSBoYW5kbGVycy4gQSBicGYtYmFja2VkIGhhbmRsZXIgY2Fubm90IGJlIG1hdGNoZWQgaGVyZSBhcyBpdHMgcHJvZ3JhbVxuJiM0MzsgKiBtdXN0IHJ1biBpbiBzbGVlcGFibGUgY29udGV4dDsgaXQgaXMgcmV0dXJuZWQgYXMgYSBjYW5kaWRhdGUgYW5kIHRoZVxuJiM0MzsgKiBwcm9ncmFtIGRlY2lkZXMgaW4gbG9hZF9taXNjX2JpbmFyeSgpLiBAYnBmX3NraXAgYWxsb3dzIHRoZSBjYWxsZXIgdG9cbiYjNDM7ICogcmVzdW1lIHRoZSBzZWFyY2ggYWZ0ZXIgdGhlIGZpcnN0IEBicGZfc2tpcCBjYW5kaWRhdGVzIGRlY2xpbmVkLlxuICAqXG4gICogUmV0dXJuOiBiaW5hcnkgdHlwZSBsaXN0IGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBOb2RlICpzZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuLVx0XHRcdFx0ICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiYjNDM7XHRcdFx0XHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuJiM0MztcdFx0XHRcdCAgIHVuc2lnbmVkIGludCBicGZfc2tpcClcbiB7XG4gXHRjaGFyICpwID0gc3RycmNocihicHJtLVx1MDAzZWludGVycCwgJiMzOTsuJiMzOTspO1xuIFx0Tm9kZSAqZTtcbkBAIC0xMDMsNiAmIzQzOzExMSwxNSBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiBcdFx0aWYgKCF0ZXN0X2JpdChFbmFibGVkLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSlcbiBcdFx0XHRjb250aW51ZTtcbiBcbiYjNDM7XHRcdC8qIFRoZSBwcm9ncmFtIGRlY2lkZXMgaW4gbG9hZF9taXNjX2JpbmFyeSgpLiAqL1xuJiM0MztcdFx0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdFx0aWYgKGJwZl9za2lwKSB7XG4mIzQzO1x0XHRcdFx0YnBmX3NraXAtLTtcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0fVxuJiM0MztcdFx0XHRyZXR1cm4gZTtcbiYjNDM7XHRcdH1cbiYjNDM7XG4gXHRcdC8qIERvIG1hdGNoaW5nIGJhc2VkIG9uIGV4dGVuc2lvbiBpZiBhcHBsaWNhYmxlLiAqL1xuIFx0XHRpZiAoIXRlc3RfYml0KE1hZ2ljLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuIFx0XHRcdGlmIChwIFx1MDAyNlx1MDAyNiAhc3RyY21wKGUtXHUwMDNlbWFnaWMsIHAgJiM0MzsgMSkpXG5AQCAtMTMyLDYgJiM0MzsxNDksNyBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiAgKiBnZXRfYmluZm10X2hhbmRsZXIgLSB0cnkgdG8gZmluZCBhIGJpbmFyeSB0eXBlIGhhbmRsZXJcbiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlXG4gICogQGJwcm06IGJpbmFyeSBmb3Igd2hpY2ggd2UgYXJlIGxvb2tpbmcgZm9yIGEgaGFuZGxlclxuJiM0MzsgKiBAYnBmX3NraXA6IG51bWJlciBvZiBicGYtYmFja2VkIGhhbmRsZXJzIHRvIHNraXAgb3ZlclxuICAqXG4gICogVHJ5IHRvIGZpbmQgYSBiaW5mbXQgaGFuZGxlciBmb3IgdGhlIGJpbmFyeSB0eXBlLiBJZiBvbmUgaXMgZm91bmQgdGFrZSBhXG4gICogcmVmZXJlbmNlIHRvIHByb3RlY3QgYWdhaW5zdCByZW1vdmFsIHZpYSBibV97ZW50cnksc3RhdHVzfV93cml0ZSgpLlxuQEAgLTEzOSwxMiAmIzQzOzE1NywxMyBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiAgKiBSZXR1cm46IGJpbmFyeSB0eXBlIGxpc3QgZW50cnkgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlXG4gICovXG4gc3RhdGljIE5vZGUgKmdldF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG4tXHRcdFx0XHRzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuJiM0MztcdFx0XHRcdHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4mIzQzO1x0XHRcdFx0dW5zaWduZWQgaW50IGJwZl9za2lwKVxuIHtcbiBcdE5vZGUgKmU7XG4gXG4gXHRyZWFkX2xvY2soXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzX2xvY2spO1xuLVx0ZSA9IHNlYXJjaF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtKTtcbiYjNDM7XHRlID0gc2VhcmNoX2JpbmZtdF9oYW5kbGVyKG1pc2MsIGJwcm0sIGJwZl9za2lwKTtcbiBcdGlmIChlKVxuIFx0XHRyZWZjb3VudF9pbmMoXHUwMDI2ZS1cdTAwM2V1c2Vycyk7XG4gXHRyZWFkX3VubG9jayhcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXNfbG9jayk7XG5AQCAtMTY0LDYgJiM0MzsxODMsOCBAQCBzdGF0aWMgdm9pZCBwdXRfYmluZm10X2hhbmRsZXIoTm9kZSAqZSlcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZS1cdTAwM2V1c2VycykpIHtcbiBcdFx0aWYgKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSlcbiBcdFx0XHRmaWxwX2Nsb3NlKGUtXHUwMDNlaW50ZXJwX2ZpbGUsIE5VTEwpO1xuJiM0MztcdFx0aWYgKGUtXHUwMDNlYnBmX29wcylcbiYjNDM7XHRcdFx0YmluZm10X21pc2NfcHV0X29wcyhlLVx1MDAzZWJwZl9vcHMpO1xuIFx0XHRrZnJlZShlKTtcbiBcdH1cbiB9XG5AQCAtMjA2LDEyICYjNDM7MjI3LDE1IEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlID0gTlVMTDtcbiBcdGludCByZXR2YWwgPSAtRU5PRVhFQztcbiBcdHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYztcbiYjNDM7XHRjb25zdCBjaGFyICppbnRlcnByZXRlcjtcbiYjNDM7XHR1bnNpZ25lZCBpbnQgYnBmX3NraXAgPSAwO1xuIFxuIFx0bWlzYyA9IGxvYWRfYmluZm10X21pc2MoKTtcbiBcdGlmICghbWlzYy1cdTAwM2VlbmFibGVkKVxuIFx0XHRyZXR1cm4gcmV0dmFsO1xuIFxuLVx0Zm10ID0gZ2V0X2JpbmZtdF9oYW5kbGVyKG1pc2MsIGJwcm0pO1xuJiM0MztyZXRyeTpcbiYjNDM7XHRmbXQgPSBnZXRfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSwgYnBmX3NraXApO1xuIFx0aWYgKCFmbXQpXG4gXHRcdHJldHVybiByZXR2YWw7XG4gXG5AQCAtMjIwLDYgJiM0MzsyNDQsMzIgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRpZiAoYnBybS1cdTAwM2VpbnRlcnBfZmxhZ3MgXHUwMDI2IEJJTlBSTV9GTEFHU19QQVRIX0lOQUNDRVNTSUJMRSlcbiBcdFx0Z290byByZXQ7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2Zm10LVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0cmV0dmFsID0gZm10LVx1MDAzZWJwZl9vcHMtXHUwMDNlbG9hZChicHJtKTtcbiYjNDM7XHRcdGlmIChyZXR2YWwgXHUwMDNjIDApIHtcbiYjNDM7XHRcdFx0LyogS2VlcCBhIHByb2dyYW0tc3VwcGxpZWQgZXJyb3Igd2l0aGluIGVycm5vIHJhbmdlLiAqL1xuJiM0MztcdFx0XHRpZiAocmV0dmFsIFx1MDAzYyAtTUFYX0VSUk5PKVxuJiM0MztcdFx0XHRcdHJldHZhbCA9IC1FTk9FWEVDO1xuJiM0MztcdFx0XHRnb3RvIHJldDtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdGlmICghcmV0dmFsKSB7XG4mIzQzO1x0XHRcdC8qIERlY2xpbmVkLCBtb3ZlIG9uIHRvIGxhdGVyIGhhbmRsZXJzLiAqL1xuJiM0MztcdFx0XHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuJiM0MztcdFx0XHRicHJtLVx1MDAzZWJwZl9pbnRlcnAgPSBOVUxMO1xuJiM0MztcdFx0XHRwdXRfYmluZm10X2hhbmRsZXIoZm10KTtcbiYjNDM7XHRcdFx0YnBmX3NraXAmIzQzOyYjNDM7O1xuJiM0MztcdFx0XHRyZXR2YWwgPSAtRU5PRVhFQztcbiYjNDM7XHRcdFx0Z290byByZXRyeTtcbiYjNDM7XHRcdH1cbiYjNDM7XHRcdC8qIFNlbGVjdGluZyBhbiBpbnRlcnByZXRlciBpcyBwYXJ0IG9mIHRoZSBjb250cmFjdC4gKi9cbiYjNDM7XHRcdHJldHZhbCA9IC1FTk9FWEVDO1xuJiM0MztcdFx0aWYgKCFicHJtLVx1MDAzZWJwZl9pbnRlcnApXG4mIzQzO1x0XHRcdGdvdG8gcmV0O1xuJiM0MztcdFx0aW50ZXJwcmV0ZXIgPSBicHJtLVx1MDAzZWJwZl9pbnRlcnA7XG4mIzQzO1x0fSBlbHNlIHtcbiYjNDM7XHRcdGludGVycHJldGVyID0gZm10LVx1MDAzZWludGVycHJldGVyO1xuJiM0MztcdH1cbiYjNDM7XG4gXHRpZiAoZm10LVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCkge1xuIFx0XHRicHJtLVx1MDAzZWludGVycF9mbGFncyB8PSBCSU5QUk1fRkxBR1NfUFJFU0VSVkVfQVJHVjA7XG4gXHR9IGVsc2Uge1xuQEAgLTIzOCwxMyAmIzQzOzI4OCwxMyBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdGJwcm0tXHUwMDNlYXJnYyYjNDM7JiM0Mzs7XG4gXG4gXHQvKiBhZGQgdGhlIGludGVycCBhcyBhcmd2WzBdICovXG4tXHRyZXR2YWwgPSBjb3B5X3N0cmluZ19rZXJuZWwoZm10LVx1MDAzZWludGVycHJldGVyLCBicHJtKTtcbiYjNDM7XHRyZXR2YWwgPSBjb3B5X3N0cmluZ19rZXJuZWwoaW50ZXJwcmV0ZXIsIGJwcm0pO1xuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byByZXQ7XG4gXHRicHJtLVx1MDAzZWFyZ2MmIzQzOyYjNDM7O1xuIFxuIFx0LyogVXBkYXRlIGludGVycCBpbiBjYXNlIGJpbmZtdF9zY3JpcHQgbmVlZHMgaXQuICovXG4tXHRyZXR2YWwgPSBicHJtX2NoYW5nZV9pbnRlcnAoZm10LVx1MDAzZWludGVycHJldGVyLCBicHJtKTtcbiYjNDM7XHRyZXR2YWwgPSBicHJtX2NoYW5nZV9pbnRlcnAoaW50ZXJwcmV0ZXIsIGJwcm0pO1xuIFx0aWYgKHJldHZhbCBcdTAwM2MgMClcbiBcdFx0Z290byByZXQ7XG4gXG5AQCAtMjUzLDcgJiM0MzszMDMsNyBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcdFx0aWYgKCFJU19FUlIoaW50ZXJwX2ZpbGUpKVxuIFx0XHRcdGRlbnlfd3JpdGVfYWNjZXNzKGludGVycF9maWxlKTtcbiBcdH0gZWxzZSB7XG4tXHRcdGludGVycF9maWxlID0gb3Blbl9leGVjKGZtdC1cdTAwM2VpbnRlcnByZXRlcik7XG4mIzQzO1x0XHRpbnRlcnBfZmlsZSA9IG9wZW5fZXhlYyhpbnRlcnByZXRlcik7XG4gXHR9XG4gXHRyZXR2YWwgPSBQVFJfRVJSKGludGVycF9maWxlKTtcbiBcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKVxuQEAgLTI2NSw2ICYjNDM7MzE1LDkgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXG4gXHRyZXR2YWwgPSAwO1xuIHJldDpcbiYjNDM7XHQvKiBBIHByb2dyYW0tc2VsZWN0ZWQgaW50ZXJwcmV0ZXIgaXMgY29uc3VtZWQgYnkgdGhpcyBleGVjIGF0dGVtcHQuICovXG4mIzQzO1x0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbiYjNDM7XHRicHJtLVx1MDAzZWJwZl9pbnRlcnAgPSBOVUxMO1xuIFxuIFx0LypcbiBcdCAqIElmIHdlIGFjdHVhbGx5IHB1dCB0aGUgbm9kZSBoZXJlIGFsbCBjb25jdXJyZW50IGNhbGxzIHRvXG5AQCAtNDA0LDEzICYjNDM7NDU3LDQ3IEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuIFx0XHRwcl9kZWJ1ZyhcJiMzNDtyZWdpc3RlcjogdHlwZTogTSAobWFnaWMpXFxuXCYjMzQ7KTtcbiBcdFx0ZS1cdTAwM2VmbGFncyA9ICgxIFx1MDAzY1x1MDAzYyBFbmFibGVkKSB8ICgxIFx1MDAzY1x1MDAzYyBNYWdpYyk7XG4gXHRcdGJyZWFrO1xuJiM0MztcdGNhc2UgJiMzOTtCJiMzOTs6XG4mIzQzO1x0XHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXG4mIzQzO1x0XHRcdGdvdG8gZWludmFsO1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7cmVnaXN0ZXI6IHR5cGU6IEIgKGJwZilcXG5cJiMzNDspO1xuJiM0MztcdFx0ZS1cdTAwM2VmbGFncyA9ICgxIFx1MDAzY1x1MDAzYyBFbmFibGVkKSB8ICgxIFx1MDAzY1x1MDAzYyBCcGYpO1xuJiM0MztcdFx0YnJlYWs7XG4gXHRkZWZhdWx0OlxuIFx0XHRnb3RvIGVpbnZhbDtcbiBcdH1cbiBcdGlmICgqcCYjNDM7JiM0MzsgIT0gZGVsKVxuIFx0XHRnb3RvIGVpbnZhbDtcbiBcbi1cdGlmICh0ZXN0X2JpdChNYWdpYywgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRpZiAodGVzdF9iaXQoQnBmLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuJiM0MztcdFx0Y2hhciAqcztcbiYjNDM7XG4mIzQzO1x0XHQvKiBUaGUgJiMzOTtvZmZzZXQmIzM5OyBmaWVsZCBjYXJyaWVzIHRoZSBoYW5kbGVyIG5hbWUuICovXG4mIzQzO1x0XHRzID0gc3RyY2hyKHAsIGRlbCk7XG4mIzQzO1x0XHRpZiAoIXMpXG4mIzQzO1x0XHRcdGdvdG8gZWludmFsO1xuJiM0MztcdFx0KnMmIzQzOyYjNDM7ID0gJiMzOTtcXDAmIzM5OztcbiYjNDM7XHRcdGUtXHUwMDNlYnBmX29wc19uYW1lID0gcDtcbiYjNDM7XHRcdGlmICghZS1cdTAwM2VicGZfb3BzX25hbWVbMF0gfHxcbiYjNDM7XHRcdCAgICBzdHJsZW4oZS1cdTAwM2VicGZfb3BzX25hbWUpIFx1MDAzZT0gQklORk1UX01JU0NfT1BTX05BTUVfTUFYKVxuJiM0MztcdFx0XHRnb3RvIGVpbnZhbDtcbiYjNDM7XHRcdHAgPSBzO1xuJiM0MztcdFx0cHJfZGVidWcoXCYjMzQ7cmVnaXN0ZXI6IGJwZiBoYW5kbGVyOiB7JXN9XFxuXCYjMzQ7LCBlLVx1MDAzZWJwZl9vcHNfbmFtZSk7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlICYjMzk7bWFnaWMmIzM5OyBmaWVsZCBtdXN0IGJlIGVtcHR5LiAqL1xuJiM0MztcdFx0cyA9IHN0cmNocihwLCBkZWwpO1xuJiM0MztcdFx0aWYgKCFzIHx8IHMgIT0gcClcbiYjNDM7XHRcdFx0Z290byBlaW52YWw7XG4mIzQzO1x0XHQqcyYjNDM7JiM0MzsgPSAmIzM5O1xcMCYjMzk7O1xuJiM0MztcdFx0cCA9IHM7XG4mIzQzO1xuJiM0MztcdFx0LyogVGhlICYjMzk7bWFzayYjMzk7IGZpZWxkIG11c3QgYmUgZW1wdHkuICovXG4mIzQzO1x0XHRzID0gc3RyY2hyKHAsIGRlbCk7XG4mIzQzO1x0XHRpZiAoIXMgfHwgcyAhPSBwKVxuJiM0MztcdFx0XHRnb3RvIGVpbnZhbDtcbiYjNDM7XHRcdCpzJiM0MzsmIzQzOyA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0XHRwID0gcztcbiYjNDM7XHR9IGVsc2UgaWYgKHRlc3RfYml0KE1hZ2ljLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuIFx0XHQvKiBIYW5kbGUgdGhlICYjMzk7TSYjMzk7IChtYWdpYykgZm9ybWF0LiAqL1xuIFx0XHRjaGFyICpzO1xuIFxuQEAgLTUyNCw4ICYjNDM7NjExLDEzIEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuIFx0aWYgKCFwKVxuIFx0XHRnb3RvIGVpbnZhbDtcbiBcdCpwJiM0MzsmIzQzOyA9ICYjMzk7XFwwJiMzOTs7XG4tXHRpZiAoIWUtXHUwMDNlaW50ZXJwcmV0ZXJbMF0pXG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdC8qIFRoZSBwcm9ncmFtIHNlbGVjdHMgdGhlIGludGVycHJldGVyIGF0IGV4ZWMgdGltZS4gKi9cbiYjNDM7XHRcdGlmIChlLVx1MDAzZWludGVycHJldGVyWzBdKVxuJiM0MztcdFx0XHRnb3RvIGVpbnZhbDtcbiYjNDM7XHR9IGVsc2UgaWYgKCFlLVx1MDAzZWludGVycHJldGVyWzBdKSB7XG4gXHRcdGdvdG8gZWludmFsO1xuJiM0MztcdH1cbiBcdHByX2RlYnVnKFwmIzM0O3JlZ2lzdGVyOiBpbnRlcnByZXRlcjogeyVzfVxcblwmIzM0OywgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4gXG4gXHQvKiBQYXJzZSB0aGUgJiMzOTtmbGFncyYjMzk7IGZpZWxkLiAqL1xuQEAgLTUzNSw2ICYjNDM7NjI3LDE0IEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxuIFx0aWYgKHAgIT0gYnVmICYjNDM7IGNvdW50KVxuIFx0XHRnb3RvIGVpbnZhbDtcbiBcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEEgcHJvZ3JhbS1zZWxlY3RlZCBpbnRlcnByZXRlciBjYW5ub3QgYmUgcHJlLW9wZW5lZCBhbmQgbXVzdCBub3RcbiYjNDM7XHQgKiBpbmhlcml0IHRoZSBjcmVkZW50aWFscyBvZiBhIHNldHVpZCBiaW5hcnkgaXQgd2FzIGNob3NlbiBmb3IuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgIChlLVx1MDAzZWZsYWdzIFx1MDAyNiAoTUlTQ19GTVRfQ1JFREVOVElBTFMgfCBNSVNDX0ZNVF9PUEVOX0ZJTEUpKSlcbiYjNDM7XHRcdGdvdG8gZWludmFsO1xuJiM0MztcbiBcdHJldHVybiBlO1xuIFxuIG91dDpcbkBAIC01ODgsNyAmIzQzOzY4OCwxMCBAQCBzdGF0aWMgdm9pZCBlbnRyeV9zdGF0dXMoTm9kZSAqZSwgY2hhciAqcGFnZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0ZHAgJiM0Mzs9IHNwcmludGYoZHAsIFwmIzM0OyVzXFxuaW50ZXJwcmV0ZXIgJXNcXG5cJiMzNDssIHN0YXR1cywgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpXG4mIzQzO1x0XHRkcCAmIzQzOz0gc3ByaW50ZihkcCwgXCYjMzQ7JXNcXG5icGYgJXNcXG5cJiMzNDssIHN0YXR1cywgZS1cdTAwM2VicGZfb3BzX25hbWUpO1xuJiM0MztcdGVsc2VcbiYjNDM7XHRcdGRwICYjNDM7PSBzcHJpbnRmKGRwLCBcJiMzNDslc1xcbmludGVycHJldGVyICVzXFxuXCYjMzQ7LCBzdGF0dXMsIGUtXHUwMDNlaW50ZXJwcmV0ZXIpO1xuIFxuIFx0LyogcHJpbnQgdGhlIHNwZWNpYWwgZmxhZ3MgKi9cbiBcdGRwICYjNDM7PSBzcHJpbnRmKGRwLCBcJiMzNDtmbGFnczogXCYjMzQ7KTtcbkBAIC02MDIsNyAmIzQzOzcwNSw5IEBAIHN0YXRpYyB2b2lkIGVudHJ5X3N0YXR1cyhOb2RlICplLCBjaGFyICpwYWdlKVxuIFx0XHQqZHAmIzQzOyYjNDM7ID0gJiMzOTtGJiMzOTs7XG4gXHQqZHAmIzQzOyYjNDM7ID0gJiMzOTtcXG4mIzM5OztcbiBcbi1cdGlmICghdGVzdF9iaXQoTWFnaWMsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdCpkcCA9ICYjMzk7XFwwJiMzOTs7XG4mIzQzO1x0fSBlbHNlIGlmICghdGVzdF9iaXQoTWFnaWMsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdHNwcmludGYoZHAsIFwmIzM0O2V4dGVuc2lvbiAuJXNcXG5cJiMzNDssIGUtXHUwMDNlbWFnaWMpO1xuIFx0fSBlbHNlIHtcbiBcdFx0ZHAgJiM0Mzs9IHNwcmludGYoZHAsIFwmIzM0O29mZnNldCAlaVxcbm1hZ2ljIFwmIzM0OywgZS1cdTAwM2VvZmZzZXQpO1xuQEAgLTgwOSw2ICYjNDM7OTE0LDE2IEBAIHN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0aWYgKElTX0VSUihlKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZSk7XG4gXG4mIzQzO1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiYjNDM7XHRcdGUtXHUwMDNlYnBmX29wcyA9IGJpbmZtdF9taXNjX2dldF9vcHMoc2ItXHUwMDNlc191c2VyX25zLCBlLVx1MDAzZWJwZl9vcHNfbmFtZSk7XG4mIzQzO1x0XHRpZiAoIWUtXHUwMDNlYnBmX29wcykge1xuJiM0MztcdFx0XHRwcl9ub3RpY2UoXCYjMzQ7cmVnaXN0ZXI6IG5vIGJwZiBoYW5kbGVyIG5hbWVkICVzXFxuXCYjMzQ7LFxuJiM0MztcdFx0XHRcdCAgZS1cdTAwM2VicGZfb3BzX25hbWUpO1xuJiM0MztcdFx0XHRrZnJlZShlKTtcbiYjNDM7XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiBcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogTm93IHRoYXQgd2Ugc3VwcG9ydCB1bnByaXZpbGVnZWQgYmluZm10X21pc2MgbW91bnRzIG1ha2VcbkBAIC04MzQsNiAmIzQzOzk0OSw4IEBAIHN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0XHRcdGV4ZV9maWxlX2FsbG93X3dyaXRlX2FjY2VzcyhmKTtcbiBcdFx0XHRmaWxwX2Nsb3NlKGYsIE5VTEwpO1xuIFx0XHR9XG4mIzQzO1x0XHRpZiAoZS1cdTAwM2VicGZfb3BzKVxuJiM0MztcdFx0XHRiaW5mbXRfbWlzY19wdXRfb3BzKGUtXHUwMDNlYnBmX29wcyk7XG4gXHRcdGtmcmVlKGUpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjX2JwZi5jIGIvZnMvYmluZm10X21pc2NfYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzJkYTA5NjRkOTQ5MTVcbi0tLSAvZGV2L251bGxcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JpbmZtdF9taXNjX2JwZi5jXG5AQCAtMCwwICYjNDM7MSwyNzUgQEBcbiYjNDM7Ly8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxuJiM0MzsvKlxuJiM0MzsgKiBCUEYtYmFja2VkIGJpbmFyeSB0eXBlIGhhbmRsZXJzIGZvciBiaW5mbXRfbWlzYy5cbiYjNDM7ICpcbiYjNDM7ICogQSBoYW5kbGVyIGlzIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBzdHJ1Y3Rfb3BzIG1hcC4gTG9hZGluZyBhbmRcbiYjNDM7ICogcmVnaXN0ZXJpbmcgaXQgbWFrZXMgdGhlIGhhbmRsZXIgYXZhaWxhYmxlIHVuZGVyIGl0cyBuYW1lIGluIHRoZSB1c2VyXG4mIzQzOyAqIG5hbWVzcGFjZSBpdCB3YXMgcmVnaXN0ZXJlZCBpbi4gQSBiaW5mbXRfbWlzYyAmIzM5O0ImIzM5OyBlbnRyeSBhY3RpdmF0ZXMgaXQ6XG4mIzQzOyAqXG4mIzQzOyAqICAgZWNobyAmIzM5OzplbnRyeTpCOlx1MDAzY2hhbmRsZXItbmFtZVx1MDAzZTo6OjomIzM5OyBcdTAwM2UgXHUwMDNjYmluZm10X21pc2NcdTAwM2UvcmVnaXN0ZXJcbiYjNDM7ICovXG4mIzQzO1xuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9icGZfdmVyaWZpZXIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9idGZfaWRzLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3JlZC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9saW1pdHMuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9tdXRleC5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9zdHJpbmcuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC91c2VyX25hbWVzcGFjZS5oXHUwMDNlXG4mIzQzO1xuJiM0MztzdHJ1Y3QgYm1fYnBmX29wc19yZWcge1xuJiM0MztcdHN0cnVjdCBsaXN0X2hlYWQgbGlzdDtcbiYjNDM7XHRjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHM7XG4mIzQzO1x0c3RydWN0IGJwZl9saW5rICpsaW5rO1xuJiM0MztcdHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucztcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoYm1fYnBmX29wc19sb2NrKTtcbiYjNDM7c3RhdGljIExJU1RfSEVBRChibV9icGZfb3BzX2xpc3QpO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfYmluZm10X21pc2Nfb3BzO1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBibV9icGZfb3BzX3JlZyAqYm1fYnBmX29wc19maW5kKGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcbiYjNDM7XHRcdFx0XHRcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKnJlZztcbiYjNDM7XG4mIzQzO1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZibV9icGZfb3BzX2xvY2spO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgXHUwMDI2Ym1fYnBmX29wc19saXN0LCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAocmVnLVx1MDAzZXVzZXJfbnMgPT0gdXNlcl9ucyBcdTAwMjZcdTAwMjYgIXN0cmNtcChyZWctXHUwMDNlb3BzLVx1MDAzZW5hbWUsIG5hbWUpKVxuJiM0MztcdFx0XHRyZXR1cm4gcmVnO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJpbmZtdF9taXNjX2dldF9vcHMgLSBsb29rIHVwIGEgYnBmIGJpbmFyeSB0eXBlIGhhbmRsZXIgYnkgbmFtZVxuJiM0MzsgKiBAdXNlcl9uczogdXNlciBuYW1lc3BhY2Ugb2YgdGhlIGJpbmZtdF9taXNjIGluc3RhbmNlXG4mIzQzOyAqIEBuYW1lOiBuYW1lIHRoZSBoYW5kbGVyIHdhcyByZWdpc3RlcmVkIHVuZGVyXG4mIzQzOyAqXG4mIzQzOyAqIFNlYXJjaCBAdXNlcl9ucyBhbmQgaXRzIGFuY2VzdG9ycyBmb3IgYSBoYW5kbGVyIG5hbWVkIEBuYW1lLCBtaXJyb3JpbmdcbiYjNDM7ICogdGhlIGluc3RhbmNlIGxvb2t1cCBpbiBsb2FkX2JpbmZtdF9taXNjKCkuIFRoZSByZXR1cm5lZCBoYW5kbGVyIHN0YXlzXG4mIzQzOyAqIGNhbGxhYmxlIHVudGlsIGJpbmZtdF9taXNjX3B1dF9vcHMoKSBldmVuIGlmIHRoZSBiYWNraW5nIHN0cnVjdF9vcHMgbWFwXG4mIzQzOyAqIGlzIGRldGFjaGVkIG9yIGRlbGV0ZWQgaW4gdGhlIG1lYW50aW1lLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IHRoZSBoYW5kbGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZVxuJiM0MzsgKi9cbiYjNDM7Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqYmluZm10X21pc2NfZ2V0X29wcyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XG4mIzQzO1x0c3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZibV9icGZfb3BzX2xvY2spO1xuJiM0MztcbiYjNDM7XHRmb3IgKG5zID0gdXNlcl9uczsgbnM7IG5zID0gbnMtXHUwMDNlcGFyZW50KSB7XG4mIzQzO1x0XHRyZWcgPSBibV9icGZfb3BzX2ZpbmQobnMsIG5hbWUpO1xuJiM0MztcdFx0aWYgKCFyZWcpXG4mIzQzO1x0XHRcdGNvbnRpbnVlO1xuJiM0MztcdFx0aWYgKCFicGZfc3RydWN0X29wc19nZXQocmVnLVx1MDAzZW9wcykpXG4mIzQzO1x0XHRcdHJldHVybiBOVUxMO1xuJiM0MztcdFx0cmV0dXJuIHJlZy1cdTAwM2VvcHM7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGJpbmZtdF9taXNjX3B1dF9vcHMoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzKVxuJiM0Mzt7XG4mIzQzO1x0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4mIzQzO31cbiYjNDM7XG4mIzQzO2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbiYjNDM7e1xuJiM0MztcdHJldHVybiBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTIFx1MDAyNlx1MDAyNlxuJiM0MztcdCAgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VzdF9vcHMgPT0gXHUwMDI2YnBmX2JpbmZtdF9taXNjX29wcztcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIGJwZl9iaW5wcm1fc2V0X2ludGVycCAtIHNlbGVjdCB0aGUgaW50ZXJwcmV0ZXIgZm9yIHRoZSBjdXJyZW50IGV4ZWNcbiYjNDM7ICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkXG4mIzQzOyAqIEBwYXRoOiBhYnNvbHV0ZSBwYXRoIHRvIHRoZSBpbnRlcnByZXRlclxuJiM0MzsgKiBAcGF0aF9fc3o6IHNpemUgb2YgdGhlIEBwYXRoIGJ1ZmZlciwgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUxcbiYjNDM7ICpcbiYjNDM7ICogVG8gYmUgY2FsbGVkIGZyb20gdGhlIGxvYWQgcHJvZ3JhbSBvZiBhIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgaGFuZGxlclxuJiM0MzsgKiBiZWZvcmUgcmV0dXJuaW5nIGEgcG9zaXRpdmUgdmFsdWUuIFRoZSBwYXRoIGlzIG9wZW5lZCB3aXRoIHRoZVxuJiM0MzsgKiBjcmVkZW50aWFscyBvZiB0aGUgdGFzayBkb2luZyB0aGUgZXhlYyBhZnRlciB0aGUgcHJvZ3JhbSByZXR1cm5zLlxuJiM0MzsgKlxuJiM0MzsgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXG4mIzQzOyAqL1xuJiM0MztfX2JwZl9rZnVuYyBpbnQgYnBmX2JpbnBybV9zZXRfaW50ZXJwKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4mIzQzO1x0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfX3N6KVxuJiM0Mzt7XG4mIzQzO1x0c2l6ZV90IGxlbjtcbiYjNDM7XHRjaGFyICppbnRlcnA7XG4mIzQzO1xuJiM0MztcdGlmICghcGF0aF9fc3opXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRsZW4gPSBzdHJubGVuKHBhdGgsIHBhdGhfX3N6KTtcbiYjNDM7XHRpZiAobGVuID09IHBhdGhfX3N6KVxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0aWYgKHBhdGhbMF0gIT0gJiMzOTsvJiMzOTspXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRpZiAobGVuIFx1MDAzZT0gUEFUSF9NQVgpXG4mIzQzO1x0XHRyZXR1cm4gLUVOQU1FVE9PTE9ORztcbiYjNDM7XG4mIzQzO1x0aW50ZXJwID0ga21lbWR1cF9udWwocGF0aCwgbGVuLCBHRlBfS0VSTkVMKTtcbiYjNDM7XHRpZiAoIWludGVycClcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuJiM0MztcdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IGludGVycDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7X19icGZfa2Z1bmNfZW5kX2RlZnMoKTtcbiYjNDM7XG4mIzQzO0JURl9LRlVOQ1NfU1RBUlQoYm1fYnBmX2tmdW5jX2lkcylcbiYjNDM7QlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9iaW5wcm1fc2V0X2ludGVycCwgS0ZfU0xFRVBBQkxFKVxuJiM0MztCVEZfS0ZVTkNTX0VORChibV9icGZfa2Z1bmNfaWRzKVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBibV9icGZfa2Z1bmNfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZibV9icGZfa2Z1bmNfaWRzLCBrZnVuY19pZCkpXG4mIzQzO1x0XHRyZXR1cm4gMDtcbiYjNDM7XHRpZiAoYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKHByb2cpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0cmV0dXJuIC1FQUNDRVM7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBibV9icGZfa2Z1bmNfc2V0ID0ge1xuJiM0MztcdC5vd25lclx0PSBUSElTX01PRFVMRSxcbiYjNDM7XHQuc2V0XHQ9IFx1MDAyNmJtX2JwZl9rZnVuY19pZHMsXG4mIzQzO1x0LmZpbHRlclx0PSBibV9icGZfa2Z1bmNfZmlsdGVyLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIGludCBibV9icGZfb3BzX19sb2FkKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgYm1fYnBmX29wc19zdHVicyA9IHtcbiYjNDM7XHQubG9hZCA9IGJtX2JwZl9vcHNfX2xvYWQsXG4mIzQzO307XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJtX2JwZl9pbml0KHN0cnVjdCBidGYgKmJ0ZilcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZibV9icGZfa2Z1bmNfc2V0KTtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBibV9icGZfY2hlY2tfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcbiYjNDM7XHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4mIzQzO1x0XHRcdCAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKG1vZmYpIHtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiaW5mbXRfbWlzY19vcHMsIGxvYWQpOlxuJiM0MztcdFx0LyogUmVsaWFibGUgZmlsZSByZWFkcyBhdCBleGVjIHRpbWUgcmVxdWlyZSBzbGVlcGluZy4gKi9cbiYjNDM7XHRcdGlmICghcHJvZy1cdTAwM2VzbGVlcGFibGUpXG4mIzQzO1x0XHRcdHJldHVybiAtRUlOVkFMO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuJiM0MztcdHJldHVybiAwO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IGJtX2JwZl9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4mIzQzO1x0XHRcdCAgICAgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4mIzQzO1x0XHRcdCAgICAgIHZvaWQgKmtkYXRhLCBjb25zdCB2b2lkICp1ZGF0YSlcbiYjNDM7e1xuJiM0MztcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKnVvcHMgPSB1ZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMgPSBrZGF0YTtcbiYjNDM7XHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xuJiM0MztcbiYjNDM7XHRzd2l0Y2ggKG1vZmYpIHtcbiYjNDM7XHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiaW5mbXRfbWlzY19vcHMsIG5hbWUpOlxuJiM0MztcdFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLVx1MDAzZW5hbWUsIHVvcHMtXHUwMDNlbmFtZSxcbiYjNDM7XHRcdFx0XHQgICAgIHNpemVvZihvcHMtXHUwMDNlbmFtZSkpIFx1MDAzYz0gMClcbiYjNDM7XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0XHRyZXR1cm4gMTtcbiYjNDM7XHR9XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgYm1fYnBmX3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzID0ga2RhdGE7XG4mIzQzO1xuJiM0MztcdGlmICghb3BzLVx1MDAzZWxvYWQpXG4mIzQzO1x0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBibV9icGZfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMgPSBrZGF0YTtcbiYjNDM7XHRzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKnJlZztcbiYjNDM7XG4mIzQzO1x0cmVnID0ga3phbGxvY19vYmooKnJlZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcbiYjNDM7XHRpZiAoIXJlZylcbiYjNDM7XHRcdHJldHVybiAtRU5PTUVNO1xuJiM0MztcbiYjNDM7XHRyZWctXHUwMDNlb3BzID0gb3BzO1xuJiM0MztcdHJlZy1cdTAwM2VsaW5rID0gbGluaztcbiYjNDM7XHRyZWctXHUwMDNldXNlcl9ucyA9IGdldF91c2VyX25zKGN1cnJlbnRfdXNlcl9ucygpKTtcbiYjNDM7XG4mIzQzO1x0Z3VhcmQobXV0ZXgpKFx1MDAyNmJtX2JwZl9vcHNfbG9jayk7XG4mIzQzO1xuJiM0MztcdGlmIChibV9icGZfb3BzX2ZpbmQocmVnLVx1MDAzZXVzZXJfbnMsIG9wcy1cdTAwM2VuYW1lKSkge1xuJiM0MztcdFx0cHV0X3VzZXJfbnMocmVnLVx1MDAzZXVzZXJfbnMpO1xuJiM0MztcdFx0a2ZyZWUocmVnKTtcbiYjNDM7XHRcdHJldHVybiAtRUVYSVNUO1xuJiM0MztcdH1cbiYjNDM7XG4mIzQzO1x0bGlzdF9hZGQoXHUwMDI2cmVnLVx1MDAzZWxpc3QsIFx1MDAyNmJtX2JwZl9vcHNfbGlzdCk7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGJtX2JwZl91bnJlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7XG4mIzQzO1xuJiM0MztcdGd1YXJkKG11dGV4KShcdTAwMjZibV9icGZfb3BzX2xvY2spO1xuJiM0MztcbiYjNDM7XHRsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgXHUwMDI2Ym1fYnBmX29wc19saXN0LCBsaXN0KSB7XG4mIzQzO1x0XHRpZiAocmVnLVx1MDAzZW9wcyA9PSBrZGF0YSBcdTAwMjZcdTAwMjYgcmVnLVx1MDAzZWxpbmsgPT0gbGluaykge1xuJiM0MztcdFx0XHRsaXN0X2RlbChcdTAwMjZyZWctXHUwMDNlbGlzdCk7XG4mIzQzO1x0XHRcdHB1dF91c2VyX25zKHJlZy1cdTAwM2V1c2VyX25zKTtcbiYjNDM7XHRcdFx0a2ZyZWUocmVnKTtcbiYjNDM7XHRcdFx0cmV0dXJuO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJtX2JwZl92ZXJpZmllcl9vcHMgPSB7XG4mIzQzO1x0LmdldF9mdW5jX3Byb3RvXHRcdD0gYnBmX2Jhc2VfZnVuY19wcm90byxcbiYjNDM7XHQuaXNfdmFsaWRfYWNjZXNzXHQ9IGJwZl90cmFjaW5nX2J0Zl9jdHhfYWNjZXNzLFxuJiM0Mzt9O1xuJiM0MztcbiYjNDM7c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfYmluZm10X21pc2Nfb3BzID0ge1xuJiM0MztcdC52ZXJpZmllcl9vcHNcdD0gXHUwMDI2Ym1fYnBmX3ZlcmlmaWVyX29wcyxcbiYjNDM7XHQuaW5pdFx0XHQ9IGJtX2JwZl9pbml0LFxuJiM0MztcdC5jaGVja19tZW1iZXJcdD0gYm1fYnBmX2NoZWNrX21lbWJlcixcbiYjNDM7XHQuaW5pdF9tZW1iZXJcdD0gYm1fYnBmX2luaXRfbWVtYmVyLFxuJiM0MztcdC52YWxpZGF0ZVx0PSBibV9icGZfdmFsaWRhdGUsXG4mIzQzO1x0LnJlZ1x0XHQ9IGJtX2JwZl9yZWcsXG4mIzQzO1x0LnVucmVnXHRcdD0gYm1fYnBmX3VucmVnLFxuJiM0MztcdC5jZmlfc3R1YnNcdD0gXHUwMDI2Ym1fYnBmX29wc19zdHVicyxcbiYjNDM7XHQubmFtZVx0XHQ9IFwmIzM0O2JpbmZtdF9taXNjX29wc1wmIzM0OyxcbiYjNDM7XHQub3duZXJcdFx0PSBUSElTX01PRFVMRSxcbiYjNDM7fTtcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbnQgX19pbml0IGJtX2JwZl9zdHJ1Y3Rfb3BzX2luaXQodm9pZClcbiYjNDM7e1xuJiM0MztcdHJldHVybiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcdTAwMjZicGZfYmluZm10X21pc2Nfb3BzLCBiaW5mbXRfbWlzY19vcHMpO1xuJiM0Mzt9XG4mIzQzO2xhdGVfaW5pdGNhbGwoYm1fYnBmX3N0cnVjdF9vcHNfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvZnMvYnBmX2ZzX2tmdW5jcy5jIGIvZnMvYnBmX2ZzX2tmdW5jcy5jXG5pbmRleCA3NjhhY2EyZGMwZjAzNC4uYWExZmU5ODhiNmQyMjkgMTAwNjQ0XG4tLS0gYS9mcy9icGZfZnNfa2Z1bmNzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuQEAgLTEsNiAmIzQzOzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChjKSAyMDI0IEdvb2dsZSBMTEMuICovXG4gXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdF9taXNjLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9icGYuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZl9sc20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zi5oXHUwMDNlXG5AQCAtMzg3LDEwICYjNDM7Mzg4LDIwIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKVxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXG4gQlRGX0tGVU5DU19FTkQoYnBmX2ZzX2tmdW5jX3NldF9pZHMpXG4gXG4mIzQzOy8qIFNpZGUtZWZmZWN0aW5nIGtmdW5jcyB0aGF0IHN0YXkgZXhjbHVzaXZlIHRvIExTTSBwcm9ncmFtcy4gKi9cbiYjNDM7QlRGX1NFVF9TVEFSVChicGZfZnNfa2Z1bmNfbHNtX29ubHlfaWRzKVxuJiM0MztCVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpXG4mIzQzO0JURl9JRChmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cilcbiYjNDM7QlRGX1NFVF9FTkQoYnBmX2ZzX2tmdW5jX2xzbV9vbmx5X2lkcylcbiYjNDM7XG4gc3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbiB7XG4tXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmJwZl9mc19rZnVuY19zZXRfaWRzLCBrZnVuY19pZCkgfHxcbi1cdCAgICBwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pXG4mIzQzO1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpKVxuJiM0MztcdFx0cmV0dXJuIDA7XG4mIzQzO1x0aWYgKHByb2ctXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX0xTTSlcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdGlmIChicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMocHJvZykgXHUwMDI2XHUwMDI2XG4mIzQzO1x0ICAgICFidGZfaWRfc2V0X2NvbnRhaW5zKFx1MDAyNmJwZl9mc19rZnVuY19sc21fb25seV9pZHMsIGtmdW5jX2lkKSlcbiBcdFx0cmV0dXJuIDA7XG4gXHRyZXR1cm4gLUVBQ0NFUztcbiB9XG5AQCAtNDMzLDcgJiM0Mzs0NDQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc19rZnVuY19zZXQgPSB7XG4gXG4gc3RhdGljIGludCBfX2luaXQgYnBmX2ZzX2tmdW5jc19pbml0KHZvaWQpXG4ge1xuLVx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuJiM0MztcdGludCByZXQ7XG4mIzQzO1xuJiM0MztcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuJiM0MztcdGlmIChyZXQgfHwgIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXG4mIzQzO1x0XHRyZXR1cm4gcmV0O1xuJiM0MztcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcbiYjNDM7XHRcdFx0XHRcdCBcdTAwMjZicGZfZnNfa2Z1bmNfc2V0KTtcbiB9XG4gXG4gbGF0ZV9pbml0Y2FsbChicGZfZnNfa2Z1bmNzX2luaXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuY1xuaW5kZXggYjkyZmU3ZGIxNzZjZmYuLjdjOWUyOGY1NDlhNDUzIDEwMDY0NFxuLS0tIGEvZnMvZXhlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmNcbkBAIC0xNDE4LDYgJiM0MzsxNDE4LDcgQEAgc3RhdGljIHZvaWQgZnJlZV9icHJtKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHQvKiBJZiBhIGJpbmZtdCBjaGFuZ2VkIHRoZSBpbnRlcnAsIGZyZWUgaXQuICovXG4gXHRpZiAoYnBybS1cdTAwM2VpbnRlcnAgIT0gYnBybS1cdTAwM2VmaWxlbmFtZSlcbiBcdFx0a2ZyZWUoYnBybS1cdTAwM2VpbnRlcnApO1xuJiM0MztcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycCk7XG4gXHRrZnJlZShicHJtLVx1MDAzZWZkcGF0aCk7XG4gXHRrZnJlZShicHJtKTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmUxZDI2YzQzMDFkYTJjXG4tLS0gL2Rldi9udWxsXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbkBAIC0wLDAgJiM0MzsxLDQ5IEBAXG4mIzQzOy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXG4mIzQzOyNpZm5kZWYgX0xJTlVYX0JJTkZNVF9NSVNDX0hcbiYjNDM7I2RlZmluZSBfTElOVVhfQklORk1UX01JU0NfSFxuJiM0MztcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuJiM0MztcbiYjNDM7c3RydWN0IGJwZl9wcm9nO1xuJiM0MztzdHJ1Y3QgbGludXhfYmlucHJtO1xuJiM0MztzdHJ1Y3QgdXNlcl9uYW1lc3BhY2U7XG4mIzQzO1xuJiM0MzsjZGVmaW5lIEJJTkZNVF9NSVNDX09QU19OQU1FX01BWCAxNlxuJiM0MztcbiYjNDM7LyoqXG4mIzQzOyAqIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgLSBicGYtYmFja2VkIGJpbmFyeSB0eXBlIGhhbmRsZXJcbiYjNDM7ICogQGxvYWQ6IG1hdGNoIEBicHJtIGFuZCBzZWxlY3QgYW4gaW50ZXJwcmV0ZXIgdmlhIGJwZl9iaW5wcm1fc2V0X2ludGVycCgpO1xuJiM0MzsgKiAgICAgICAgcmV0dXJucyBcdTAwM2UgMCBpZiB0aGUgYmluYXJ5IHdhcyBoYW5kbGVkLCAwIHRvIGZhbGwgdGhyb3VnaCB0byB0aGVcbiYjNDM7ICogICAgICAgIGhhbmRsZXJzIHJlZ2lzdGVyZWQgYWZ0ZXIgdGhpcyBvbmUsIGEgbmVnYXRpdmUgZXJybm8gdG8gZmFpbCB0aGVcbiYjNDM7ICogICAgICAgIGV4ZWM7IC1FTk9FWEVDIGRvZXMgbm90IGZhaWwgdGhlIGV4ZWMgYnV0IG1vdmVzIG9uIHRvIHRoZVxuJiM0MzsgKiAgICAgICAgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzXG4mIzQzOyAqIEBuYW1lOiBuYW1lIHRoYXQgJiMzOTtCJiMzOTsgZW50cmllcyByZWZlcmVuY2UgdGhlIGhhbmRsZXIgYnlcbiYjNDM7ICovXG4mIzQzO3N0cnVjdCBiaW5mbXRfbWlzY19vcHMge1xuJiM0MztcdGludCAoKmxvYWQpKHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pO1xuJiM0MztcdGNoYXIgbmFtZVtCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVhdO1xuJiM0Mzt9O1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19CSU5GTVRfTUlTQ19CUEZcbiYjNDM7Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqYmluZm10X21pc2NfZ2V0X29wcyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXG4mIzQzO1x0XHRcdFx0XHRcdCAgY29uc3QgY2hhciAqbmFtZSk7XG4mIzQzO3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpO1xuJiM0Mztib29sIGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKlxuJiM0MztiaW5mbXRfbWlzY19nZXRfb3BzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgY29uc3QgY2hhciAqbmFtZSlcbiYjNDM7e1xuJiM0MztcdHJldHVybiBOVUxMO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpXG4mIzQzO3tcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGlubGluZSBib29sIGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gZmFsc2U7XG4mIzQzO31cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19CSU5GTVRfTUlTQ19CUEYgKi9cbiYjNDM7XG4mIzQzOyNlbmRpZiAvKiBfTElOVVhfQklORk1UX01JU0NfSCAqL1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbmluZGV4IDJjNzdlMzgzZTczNzU3Li4wMDcwZDIwN2Q1NGYwNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaFxuQEAgLTY1LDYgJiM0Mzs2NSw3IEBAIHN0cnVjdCBsaW51eF9iaW5wcm0ge1xuIFx0XHRcdFx0ICAgb2YgdGhlIHRpbWUgc2FtZSBhcyBmaWxlbmFtZSwgYnV0IGNvdWxkIGJlXG4gXHRcdFx0XHQgICBkaWZmZXJlbnQgZm9yIGJpbmZtdF97bWlzYyxzY3JpcHR9ICovXG4gXHRjb25zdCBjaGFyICpmZHBhdGg7XHQvKiBnZW5lcmF0ZWQgZmlsZW5hbWUgZm9yIGV4ZWN2ZWF0ICovXG4mIzQzO1x0Y29uc3QgY2hhciAqYnBmX2ludGVycDtcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cbiBcdHVuc2lnbmVkIGludGVycF9mbGFncztcbiBcdGludCBleGVjZmQ7XHRcdC8qIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZXhlY3V0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZyBleGVjO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzA4IDA2OjAwPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtibV9icGZfcmVnJiMzNDssCiAgICAmIzM0O2JtX2JwZl91bnJlZyYjMzQ7LAogICAgJiMzNDtjcmVhdGVfZW50cnkmIzM0OywKICAgICYjMzQ7Ym1fcmVnaXN0ZXJfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBhY3QgYXMgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLiBJdCBhZGRzIG5ldyBCUEYgc3RydWN0X29wcyBhbmQga2Z1bmNzLCBhbmQgbW9kaWZpZXMgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBhbmQgZXhlY3V0aW9uIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiwgdGhlIG5ldyBrZnVuYywgYW5kIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RyYXRpb24gcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYTY5MTJkMDk0NjRjOTNmMzY1MDU0ZGQ2NzNjMmFkMTk3ZjMwNTRmMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgSnVsIDggMDY6MDA6MjYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0CmluZGV4IGMwYTM0ZmJmODAyMmI1Li5jMGVmYjA3NzM2Mjg0MyAxMDA2NDQKLS0tIGEvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QKJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3QKQEAgLTI2LDExICYjNDM7MjYsMTMgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjoKICAgIG5hbWUgYmVsb3cgYGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2NgYDsgY2Fubm90IGNvbnRhaW4gc2xhc2hlcyBgYC9gYCBmb3IKICAgIG9idmlvdXMgcmVhc29ucy4KIC0gYGB0eXBlYGAKLSAgIGlzIHRoZSB0eXBlIG9mIHJlY29nbml0aW9uLiBHaXZlIGBgTWBgIGZvciBtYWdpYyBhbmQgYGBFYGAgZm9yIGV4dGVuc2lvbi4KJiM0MzsgICBpcyB0aGUgdHlwZSBvZiByZWNvZ25pdGlvbi4gR2l2ZSBgYE1gYCBmb3IgbWFnaWMsIGBgRWBgIGZvciBleHRlbnNpb24gYW5kCiYjNDM7ICAgYGBCYGAgZm9yIGEgYnBmLWJhY2tlZCBoYW5kbGVyIChzZWUgYmVsb3cpLgogLSBgYG9mZnNldGBgCiAgICBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBtYWdpYy9tYXNrIGluIHRoZSBmaWxlLCBjb3VudGVkIGluIGJ5dGVzLiBUaGlzCiAgICBkZWZhdWx0cyB0byAwIGlmIHlvdSBvbWl0IGl0IChpLmUuIHlvdSB3cml0ZSBgYDpuYW1lOnR5cGU6Om1hZ2ljLi4uYGApLgotICAgSWdub3JlZCB3aGVuIHVzaW5nIGZpbGVuYW1lIGV4dGVuc2lvbiBtYXRjaGluZy4KJiM0MzsgICBJZ25vcmVkIHdoZW4gdXNpbmcgZmlsZW5hbWUgZXh0ZW5zaW9uIG1hdGNoaW5nLiBGb3IgYGBCYGAgZW50cmllcyB0aGlzCiYjNDM7ICAgZmllbGQgY2FycmllcyB0aGUgbmFtZSBvZiB0aGUgYnBmIGhhbmRsZXIgaW5zdGVhZC4KIC0gYGBtYWdpY2BgCiAgICBpcyB0aGUgYnl0ZSBzZXF1ZW5jZSBiaW5mbXRfbWlzYyBpcyBtYXRjaGluZyBmb3IuIFRoZSBtYWdpYyBzdHJpbmcKICAgIG1heSBjb250YWluIGhleC1lbmNvZGVkIGNoYXJhY3RlcnMgbGlrZSBgYFx4MGFgYCBvciBgYFx4QTRgYC4gTm90ZSB0aGF0IHlvdQpAQCAtOTcsNiAmIzQzOzk5LDQwIEBAIFRoZXJlIGFyZSBzb21lIHJlc3RyaWN0aW9uczoKICAgIG9mZnNldCYjNDM7c2l6ZShtYWdpYykgaGFzIHRvIGJlIGxlc3MgdGhhbiAxMjgKICAtIHRoZSBpbnRlcnByZXRlciBzdHJpbmcgbWF5IG5vdCBleGNlZWQgMTI3IGNoYXJhY3RlcnMKIAomIzQzOwomIzQzO2JwZi1iYWNrZWQgaGFuZGxlcnMKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tCiYjNDM7CiYjNDM7V2l0aCBgYENPTkZJR19CSU5GTVRfTUlTQ19CUEZgYCBib3RoIHRoZSBtYXRjaGluZyBhbmQgdGhlIGludGVycHJldGVyCiYjNDM7c2VsZWN0aW9uIGNhbiBiZSBkZWxlZ2F0ZWQgdG8gYSBicGYgcHJvZ3JhbS4gQSBoYW5kbGVyIGlzIGFuIGluc3RhbmNlIG9mIHRoZQomIzQzO2BgYmluZm10X21pc2Nfb3BzYGAgc3RydWN0X29wcyB3aXRoIGEgc2xlZXBhYmxlIGBgbG9hZGBgIHByb2dyYW0gYW5kIGEKJiM0MztgYG5hbWVgYC4gT25jZSB0aGUgc3RydWN0X29wcyBtYXAgaXMgcmVnaXN0ZXJlZCB0aGUgaGFuZGxlciBjYW4gYmUgYWN0aXZhdGVkCiYjNDM7d2l0aCBhIGBgQmBgIGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdCBieSBuYW1lIGFuZCBjYXJyaWVzIG5laXRoZXIgbWFnaWMsCiYjNDM7bWFzaywgbm9yIGludGVycHJldGVyOjoKJiM0MzsKJiM0MzsgICAgZWNobyAmIzM5OzpxZW11OkI6bXlfaGFuZGxlcjo6OjomIzM5OyAmZ3Q7IHJlZ2lzdGVyCiYjNDM7CiYjNDM7QXQgZXhlYyB0aW1lIHRoZSBgYGxvYWRgYCBwcm9ncmFtIHJlY2VpdmVzIHRoZSBgYGxpbnV4X2JpbnBybWBgIG9mIHRoZQomIzQzO2JpbmFyeS4gSXQgY2FuIG1hdGNoIG9uIHRoZSBoZWFkZXIgaW4gYGBicHJtLSZndDtidWZgYCwgcmVhZCB0aGUgZmlsZSBpdHNlbGYsCiYjNDM7ZS5nLiB0byBwYXJzZSBFTEYgcHJvZ3JhbSBoZWFkZXJzLCBhbmQgZGVyaXZlIHRoZSBpbnRlcnByZXRlciBmcm9tIHRoZQomIzQzO2JpbmFyeSYjMzk7cyBsb2NhdGlvbi4gSXQgc2VsZWN0cyB0aGUgaW50ZXJwcmV0ZXIgYnkgY2FsbGluZyB0aGUKJiM0MztgYGJwZl9iaW5wcm1fc2V0X2ludGVycCgpYGAga2Z1bmMgd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIGFuZCByZXR1cm5pbmcgYQomIzQzO3Bvc2l0aXZlIHZhbHVlLiBSZXR1cm5pbmcgYGAwYGAgZmFsbHMgdGhyb3VnaCB0byB0aGUgaGFuZGxlcnMgcmVnaXN0ZXJlZAomIzQzO2FmdGVyIHRoaXMgb25lLCBhIG5lZ2F0aXZlIGVycm5vIGZhaWxzIHRoZSBleGVjIHdpdGggdGhhdCBlcnJvcjsKJiM0MztgYC1FTk9FWEVDYGAgZW5kcyB0aGUgYmluZm10X21pc2Mgc2VhcmNoIGJ1dCBsZXRzIHRoZSByZW1haW5pbmcgYmluYXJ5CiYjNDM7Zm9ybWF0cyBoYXZlIGEgZ28uIFRoZSBpbnRlcnByZXRlciBpcyBvcGVuZWQgd2l0aCB0aGUgY3JlZGVudGlhbHMgb2YgdGhlCiYjNDM7dGFzayBkb2luZyB0aGUgZXhlYywgZXhhY3RseSBhcyBhIHN0YXRpY2FsbHkgcmVnaXN0ZXJlZCBpbnRlcnByZXRlciB3b3VsZAomIzQzO2JlLgomIzQzOwomIzQzO0hhbmRsZXJzIGFyZSBsb29rZWQgdXAgaW4gdGhlIHVzZXIgbmFtZXNwYWNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCB3YXMKJiM0MztyZWdpc3RlcmVkIGluLCBmYWxsaW5nIGJhY2sgdG8gYW5jZXN0b3IgbmFtZXNwYWNlcywgbWlycm9yaW5nIGhvdwomIzQzO2JpbmZtdF9taXNjIGluc3RhbmNlcyB0aGVtc2VsdmVzIGFyZSBsb29rZWQgdXAuIFRoZSBlbnRyeSBrZWVwcyB0aGUgaGFuZGxlcgomIzQzO2FsaXZlOyBkZWxldGluZyB0aGUgc3RydWN0X29wcyBtYXAgb25seSBwcmV2ZW50cyBuZXcgcmVnaXN0cmF0aW9ucy4KJiM0MzsKJiM0MztUaGUgYGBDYGAgYW5kIGBgRmBgIGZsYWdzIGNhbm5vdCBiZSBjb21iaW5lZCB3aXRoIGBgQmBgIGVudHJpZXM6IHRoZXJlIGlzIG5vCiYjNDM7Zml4ZWQgaW50ZXJwcmV0ZXIgdG8gcHJlLW9wZW4gYW5kIGEgcHJvZ3JhbS1zZWxlY3RlZCBpbnRlcnByZXRlciBtdXN0IG5ldmVyCiYjNDM7aW5oZXJpdCB0aGUgY3JlZGVudGlhbHMgb2YgYSBzZXR1aWQgYmluYXJ5LgomIzQzOwogVG8gdXNlIGJpbmZtdF9taXNjIHlvdSBoYXZlIHRvIG1vdW50IGl0IGZpcnN0LiBZb3UgY2FuIG1vdW50IGl0IHdpdGgKIGBgbW91bnQgLXQgYmluZm10X21pc2Mgbm9uZSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2NgYCBjb21tYW5kLCBvciB5b3UgY2FuIGFkZAogYSBsaW5lIGBgbm9uZSAgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjIGJpbmZtdF9taXNjIGRlZmF1bHRzIDAgMGBgIHRvIHlvdXIKZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcuYmluZm10IGIvZnMvS2NvbmZpZy5iaW5mbXQKaW5kZXggMTk0OWUyNWM3NzQxYjEuLmRhZWFjNDg4OWQwM2VmIDEwMDY0NAotLS0gYS9mcy9LY29uZmlnLmJpbmZtdAomIzQzOyYjNDM7JiM0MzsgYi9mcy9LY29uZmlnLmJpbmZtdApAQCAtMTY4LDYgJiM0MzsxNjgsMjAgQEAgY29uZmlnIEJJTkZNVF9NSVNDCiAJICB5b3UgaGF2ZSB1c2UgZm9yIGl0OyB0aGUgbW9kdWxlIGlzIGNhbGxlZCBiaW5mbXRfbWlzYy4gSWYgeW91CiAJICBkb24mIzM5O3Qga25vdyB3aGF0IHRvIGFuc3dlciBhdCB0aGlzIHBvaW50LCBzYXkgWS4KIAomIzQzO2NvbmZpZyBCSU5GTVRfTUlTQ19CUEYKJiM0MzsJYm9vbCAmIzM0O0JQRi1zZWxlY3RlZCBpbnRlcnByZXRlcnMgZm9yIG1pc2MgYmluYXJpZXMmIzM0OwomIzQzOwlkZXBlbmRzIG9uIEJJTkZNVF9NSVNDPXkKJiM0MzsJZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCAmYW1wOyZhbXA7IEJQRl9KSVQgJmFtcDsmYW1wOyBERUJVR19JTkZPX0JURgomIzQzOwloZWxwCiYjNDM7CSAgQWxsb3cgYmluZm10X21pc2MgYmluYXJ5IHR5cGUgaGFuZGxlcnMgdG8gYmUgaW1wbGVtZW50ZWQgYXMgYnBmCiYjNDM7CSAgc3RydWN0X29wcyBwcm9ncmFtcy4gSW5zdGVhZCBvZiBtYXRjaGluZyBhIGZpeGVkIG1hZ2ljIGFuZAomIzQzOwkgIHJlZGlyZWN0aW5nIHRvIGEgZml4ZWQgaW50ZXJwcmV0ZXIgcmVjb3JkZWQgYXQgcmVnaXN0cmF0aW9uIHRpbWUKJiM0MzsJICBzdWNoIGhhbmRsZXJzIG1hdGNoIGJpbmFyaWVzIHByb2dyYW1tYXRpY2FsbHkgYW5kIGNvbXB1dGUgdGhlCiYjNDM7CSAgaW50ZXJwcmV0ZXIgdG8gdXNlIHBlciBiaW5hcnksIGUuZy4gcmVsYXRpdmUgdG8gdGhlIGxvY2F0aW9uIG9mCiYjNDM7CSAgdGhlIGJpbmFyeSBpdHNlbGYuCiYjNDM7CiYjNDM7CSAgSWYgeW91IGRvbiYjMzk7dCBrbm93IHdoYXQgdG8gYW5zd2VyIGF0IHRoaXMgcG9pbnQsIHNheSBOLgomIzQzOwogY29uZmlnIENPUkVEVU1QCiAJYm9vbCAmIzM0O0VuYWJsZSBjb3JlIGR1bXAgc3VwcG9ydCYjMzQ7IGlmIEVYUEVSVAogCWRlZmF1bHQgeQpkaWZmIC0tZ2l0IGEvZnMvTWFrZWZpbGUgYi9mcy9NYWtlZmlsZQppbmRleCA4OWE4YTlkMjA3ZDFjNS4uNDk5YzY2NzBmMGMxODMgMTAwNjQ0Ci0tLSBhL2ZzL01ha2VmaWxlCiYjNDM7JiM0MzsmIzQzOyBiL2ZzL01ha2VmaWxlCkBAIC0zMyw2ICYjNDM7MzMsNyBAQCBvYmotJChDT05GSUdfRlNfRU5DUllQVElPTikJJiM0Mzs9IGNyeXB0by8KIG9iai0kKENPTkZJR19GU19WRVJJVFkpCQkmIzQzOz0gdmVyaXR5Lwogb2JqLSQoQ09ORklHX0ZJTEVfTE9DS0lORykgICAgICAmIzQzOz0gbG9ja3Mubwogb2JqLSQoQ09ORklHX0JJTkZNVF9NSVNDKQkmIzQzOz0gYmluZm10X21pc2MubwomIzQzO29iai0kKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpCSYjNDM7PSBiaW5mbXRfbWlzY19icGYubwogb2JqLSQoQ09ORklHX0JJTkZNVF9TQ1JJUFQpCSYjNDM7PSBiaW5mbXRfc2NyaXB0Lm8KIG9iai0kKENPTkZJR19CSU5GTVRfRUxGKQkmIzQzOz0gYmluZm10X2VsZi5vCiBvYmotJChDT05GSUdfQ09NUEFUX0JJTkZNVF9FTEYpCSYjNDM7PSBjb21wYXRfYmluZm10X2VsZi5vCmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuYwppbmRleCA4NDM0OWZjYjkzZjEzYS4uYjgwZTIxOWJhNTg3NmIgMTAwNjQ0Ci0tLSBhL2ZzL2JpbmZtdF9taXNjLmMKJiM0MzsmIzQzOyYjNDM7IGIvZnMvYmluZm10X21pc2MuYwpAQCAtMTcsNiAmIzQzOzE3LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9zY2hlZC9tbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L21hZ2ljLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYmluZm10cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRfbWlzYy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NsYWIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9jdHlwZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZ19oZWxwZXJzLmgmZ3Q7CkBAIC00MSw3ICYjNDM7NDIsNyBAQCBlbnVtIHsKIAlWRVJCT1NFX1NUQVRVUyA9IDEgLyogbWFrZSBpdCB6ZXJvIHRvIHNhdmUgNDAwIGJ5dGVzIGtlcm5lbCBtZW1vcnkgKi8KIH07CiAKLWVudW0ge0VuYWJsZWQsIE1hZ2ljfTsKJiM0MztlbnVtIHtFbmFibGVkLCBNYWdpYywgQnBmfTsKICNkZWZpbmUgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjAgKDFVTCAmbHQ7Jmx0OyAzMSkKICNkZWZpbmUgTUlTQ19GTVRfT1BFTl9CSU5BUlkgKDFVTCAmbHQ7Jmx0OyAzMCkKICNkZWZpbmUgTUlTQ19GTVRfQ1JFREVOVElBTFMgKDFVTCAmbHQ7Jmx0OyAyOSkKQEAgLTU4LDYgJiM0Mzs1OSw4IEBAIHR5cGVkZWYgc3RydWN0IHsKIAljaGFyICpuYW1lOwogCXN0cnVjdCBkZW50cnkgKmRlbnRyeTsKIAlzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGU7CiYjNDM7CWNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJwZl9vcHM7CS8qIGJwZi1iYWNrZWQgaGFuZGxlciAoJiMzOTtCJiMzOTspICovCiYjNDM7CWNvbnN0IGNoYXIgKmJwZl9vcHNfbmFtZTsKIAlyZWZjb3VudF90IHVzZXJzOwkJLyogc3luYyByZW1vdmFsIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpICovCiB9IE5vZGU7CiAKQEAgLTgyLDE0ICYjNDM7ODUsMTkgQEAgc3RhdGljIHN0cnVjdCBmaWxlX3N5c3RlbV90eXBlIGJtX2ZzX3R5cGU7CiAgKiBzZWFyY2hfYmluZm10X2hhbmRsZXIgLSBzZWFyY2ggZm9yIGEgYmluYXJ5IGhhbmRsZXIgZm9yIEBicHJtCiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlCiAgKiBAYnBybTogYmluYXJ5IGZvciB3aGljaCB3ZSBhcmUgbG9va2luZyBmb3IgYSBoYW5kbGVyCiYjNDM7ICogQGJwZl9za2lwOiBudW1iZXIgb2YgYnBmLWJhY2tlZCBoYW5kbGVycyB0byBza2lwIG92ZXIKICAqCiAgKiBTZWFyY2ggZm9yIGEgYmluYXJ5IHR5cGUgaGFuZGxlciBmb3IgQGJwcm0gaW4gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBiaW5hcnkKLSAqIHR5cGUgaGFuZGxlcnMuCiYjNDM7ICogdHlwZSBoYW5kbGVycy4gQSBicGYtYmFja2VkIGhhbmRsZXIgY2Fubm90IGJlIG1hdGNoZWQgaGVyZSBhcyBpdHMgcHJvZ3JhbQomIzQzOyAqIG11c3QgcnVuIGluIHNsZWVwYWJsZSBjb250ZXh0OyBpdCBpcyByZXR1cm5lZCBhcyBhIGNhbmRpZGF0ZSBhbmQgdGhlCiYjNDM7ICogcHJvZ3JhbSBkZWNpZGVzIGluIGxvYWRfbWlzY19iaW5hcnkoKS4gQGJwZl9za2lwIGFsbG93cyB0aGUgY2FsbGVyIHRvCiYjNDM7ICogcmVzdW1lIHRoZSBzZWFyY2ggYWZ0ZXIgdGhlIGZpcnN0IEBicGZfc2tpcCBjYW5kaWRhdGVzIGRlY2xpbmVkLgogICoKICAqIFJldHVybjogYmluYXJ5IHR5cGUgbGlzdCBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUKICAqLwogc3RhdGljIE5vZGUgKnNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsCi0JCQkJICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0MzsJCQkJICAgc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJICAgdW5zaWduZWQgaW50IGJwZl9za2lwKQogewogCWNoYXIgKnAgPSBzdHJyY2hyKGJwcm0tJmd0O2ludGVycCwgJiMzOTsuJiMzOTspOwogCU5vZGUgKmU7CkBAIC0xMDMsNiAmIzQzOzExMSwxNSBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywKIAkJaWYgKCF0ZXN0X2JpdChFbmFibGVkLCAmYW1wO2UtJmd0O2ZsYWdzKSkKIAkJCWNvbnRpbnVlOwogCiYjNDM7CQkvKiBUaGUgcHJvZ3JhbSBkZWNpZGVzIGluIGxvYWRfbWlzY19iaW5hcnkoKS4gKi8KJiM0MzsJCWlmICh0ZXN0X2JpdChCcGYsICZhbXA7ZS0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQkJaWYgKGJwZl9za2lwKSB7CiYjNDM7CQkJCWJwZl9za2lwLS07CiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCX0KJiM0MzsJCQlyZXR1cm4gZTsKJiM0MzsJCX0KJiM0MzsKIAkJLyogRG8gbWF0Y2hpbmcgYmFzZWQgb24gZXh0ZW5zaW9uIGlmIGFwcGxpY2FibGUuICovCiAJCWlmICghdGVzdF9iaXQoTWFnaWMsICZhbXA7ZS0mZ3Q7ZmxhZ3MpKSB7CiAJCQlpZiAocCAmYW1wOyZhbXA7ICFzdHJjbXAoZS0mZ3Q7bWFnaWMsIHAgJiM0MzsgMSkpCkBAIC0xMzIsNiAmIzQzOzE0OSw3IEBAIHN0YXRpYyBOb2RlICpzZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLAogICogZ2V0X2JpbmZtdF9oYW5kbGVyIC0gdHJ5IHRvIGZpbmQgYSBiaW5hcnkgdHlwZSBoYW5kbGVyCiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlCiAgKiBAYnBybTogYmluYXJ5IGZvciB3aGljaCB3ZSBhcmUgbG9va2luZyBmb3IgYSBoYW5kbGVyCiYjNDM7ICogQGJwZl9za2lwOiBudW1iZXIgb2YgYnBmLWJhY2tlZCBoYW5kbGVycyB0byBza2lwIG92ZXIKICAqCiAgKiBUcnkgdG8gZmluZCBhIGJpbmZtdCBoYW5kbGVyIGZvciB0aGUgYmluYXJ5IHR5cGUuIElmIG9uZSBpcyBmb3VuZCB0YWtlIGEKICAqIHJlZmVyZW5jZSB0byBwcm90ZWN0IGFnYWluc3QgcmVtb3ZhbCB2aWEgYm1fe2VudHJ5LHN0YXR1c31fd3JpdGUoKS4KQEAgLTEzOSwxMiAmIzQzOzE1NywxMyBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYywKICAqIFJldHVybjogYmluYXJ5IHR5cGUgbGlzdCBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmUKICAqLwogc3RhdGljIE5vZGUgKmdldF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsCi0JCQkJc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0MzsJCQkJc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJdW5zaWduZWQgaW50IGJwZl9za2lwKQogewogCU5vZGUgKmU7CiAKIAlyZWFkX2xvY2soJmFtcDttaXNjLSZndDtlbnRyaWVzX2xvY2spOwotCWUgPSBzZWFyY2hfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSk7CiYjNDM7CWUgPSBzZWFyY2hfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSwgYnBmX3NraXApOwogCWlmIChlKQogCQlyZWZjb3VudF9pbmMoJmFtcDtlLSZndDt1c2Vycyk7CiAJcmVhZF91bmxvY2soJmFtcDttaXNjLSZndDtlbnRyaWVzX2xvY2spOwpAQCAtMTY0LDYgJiM0MzsxODMsOCBAQCBzdGF0aWMgdm9pZCBwdXRfYmluZm10X2hhbmRsZXIoTm9kZSAqZSkKIAlpZiAocmVmY291bnRfZGVjX2FuZF90ZXN0KCZhbXA7ZS0mZ3Q7dXNlcnMpKSB7CiAJCWlmIChlLSZndDtmbGFncyAmYW1wOyBNSVNDX0ZNVF9PUEVOX0ZJTEUpCiAJCQlmaWxwX2Nsb3NlKGUtJmd0O2ludGVycF9maWxlLCBOVUxMKTsKJiM0MzsJCWlmIChlLSZndDticGZfb3BzKQomIzQzOwkJCWJpbmZtdF9taXNjX3B1dF9vcHMoZS0mZ3Q7YnBmX29wcyk7CiAJCWtmcmVlKGUpOwogCX0KIH0KQEAgLTIwNiwxMiAmIzQzOzIyNywxNSBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAlzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGUgPSBOVUxMOwogCWludCByZXR2YWwgPSAtRU5PRVhFQzsKIAlzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2M7CiYjNDM7CWNvbnN0IGNoYXIgKmludGVycHJldGVyOwomIzQzOwl1bnNpZ25lZCBpbnQgYnBmX3NraXAgPSAwOwogCiAJbWlzYyA9IGxvYWRfYmluZm10X21pc2MoKTsKIAlpZiAoIW1pc2MtJmd0O2VuYWJsZWQpCiAJCXJldHVybiByZXR2YWw7CiAKLQlmbXQgPSBnZXRfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSk7CiYjNDM7cmV0cnk6CiYjNDM7CWZtdCA9IGdldF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtLCBicGZfc2tpcCk7CiAJaWYgKCFmbXQpCiAJCXJldHVybiByZXR2YWw7CiAKQEAgLTIyMCw2ICYjNDM7MjQ0LDMyIEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCWlmIChicHJtLSZndDtpbnRlcnBfZmxhZ3MgJmFtcDsgQklOUFJNX0ZMQUdTX1BBVEhfSU5BQ0NFU1NJQkxFKQogCQlnb3RvIHJldDsKIAomIzQzOwlpZiAodGVzdF9iaXQoQnBmLCAmYW1wO2ZtdC0mZ3Q7ZmxhZ3MpKSB7CiYjNDM7CQlyZXR2YWwgPSBmbXQtJmd0O2JwZl9vcHMtJmd0O2xvYWQoYnBybSk7CiYjNDM7CQlpZiAocmV0dmFsICZsdDsgMCkgewomIzQzOwkJCS8qIEtlZXAgYSBwcm9ncmFtLXN1cHBsaWVkIGVycm9yIHdpdGhpbiBlcnJubyByYW5nZS4gKi8KJiM0MzsJCQlpZiAocmV0dmFsICZsdDsgLU1BWF9FUlJOTykKJiM0MzsJCQkJcmV0dmFsID0gLUVOT0VYRUM7CiYjNDM7CQkJZ290byByZXQ7CiYjNDM7CQl9CiYjNDM7CQlpZiAoIXJldHZhbCkgewomIzQzOwkJCS8qIERlY2xpbmVkLCBtb3ZlIG9uIHRvIGxhdGVyIGhhbmRsZXJzLiAqLwomIzQzOwkJCWtmcmVlKGJwcm0tJmd0O2JwZl9pbnRlcnApOwomIzQzOwkJCWJwcm0tJmd0O2JwZl9pbnRlcnAgPSBOVUxMOwomIzQzOwkJCXB1dF9iaW5mbXRfaGFuZGxlcihmbXQpOwomIzQzOwkJCWJwZl9za2lwJiM0MzsmIzQzOzsKJiM0MzsJCQlyZXR2YWwgPSAtRU5PRVhFQzsKJiM0MzsJCQlnb3RvIHJldHJ5OwomIzQzOwkJfQomIzQzOwkJLyogU2VsZWN0aW5nIGFuIGludGVycHJldGVyIGlzIHBhcnQgb2YgdGhlIGNvbnRyYWN0LiAqLwomIzQzOwkJcmV0dmFsID0gLUVOT0VYRUM7CiYjNDM7CQlpZiAoIWJwcm0tJmd0O2JwZl9pbnRlcnApCiYjNDM7CQkJZ290byByZXQ7CiYjNDM7CQlpbnRlcnByZXRlciA9IGJwcm0tJmd0O2JwZl9pbnRlcnA7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQlpbnRlcnByZXRlciA9IGZtdC0mZ3Q7aW50ZXJwcmV0ZXI7CiYjNDM7CX0KJiM0MzsKIAlpZiAoZm10LSZndDtmbGFncyAmYW1wOyBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCkgewogCQlicHJtLSZndDtpbnRlcnBfZmxhZ3MgfD0gQklOUFJNX0ZMQUdTX1BSRVNFUlZFX0FSR1YwOwogCX0gZWxzZSB7CkBAIC0yMzgsMTMgJiM0MzsyODgsMTMgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAJYnBybS0mZ3Q7YXJnYyYjNDM7JiM0Mzs7CiAKIAkvKiBhZGQgdGhlIGludGVycCBhcyBhcmd2WzBdICovCi0JcmV0dmFsID0gY29weV9zdHJpbmdfa2VybmVsKGZtdC0mZ3Q7aW50ZXJwcmV0ZXIsIGJwcm0pOwomIzQzOwlyZXR2YWwgPSBjb3B5X3N0cmluZ19rZXJuZWwoaW50ZXJwcmV0ZXIsIGJwcm0pOwogCWlmIChyZXR2YWwgJmx0OyAwKQogCQlnb3RvIHJldDsKIAlicHJtLSZndDthcmdjJiM0MzsmIzQzOzsKIAogCS8qIFVwZGF0ZSBpbnRlcnAgaW4gY2FzZSBiaW5mbXRfc2NyaXB0IG5lZWRzIGl0LiAqLwotCXJldHZhbCA9IGJwcm1fY2hhbmdlX2ludGVycChmbXQtJmd0O2ludGVycHJldGVyLCBicHJtKTsKJiM0MzsJcmV0dmFsID0gYnBybV9jaGFuZ2VfaW50ZXJwKGludGVycHJldGVyLCBicHJtKTsKIAlpZiAocmV0dmFsICZsdDsgMCkKIAkJZ290byByZXQ7CiAKQEAgLTI1Myw3ICYjNDM7MzAzLDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pCiAJCWlmICghSVNfRVJSKGludGVycF9maWxlKSkKIAkJCWRlbnlfd3JpdGVfYWNjZXNzKGludGVycF9maWxlKTsKIAl9IGVsc2UgewotCQlpbnRlcnBfZmlsZSA9IG9wZW5fZXhlYyhmbXQtJmd0O2ludGVycHJldGVyKTsKJiM0MzsJCWludGVycF9maWxlID0gb3Blbl9leGVjKGludGVycHJldGVyKTsKIAl9CiAJcmV0dmFsID0gUFRSX0VSUihpbnRlcnBfZmlsZSk7CiAJaWYgKElTX0VSUihpbnRlcnBfZmlsZSkpCkBAIC0yNjUsNiAmIzQzOzMxNSw5IEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKQogCiAJcmV0dmFsID0gMDsKIHJldDoKJiM0MzsJLyogQSBwcm9ncmFtLXNlbGVjdGVkIGludGVycHJldGVyIGlzIGNvbnN1bWVkIGJ5IHRoaXMgZXhlYyBhdHRlbXB0LiAqLwomIzQzOwlrZnJlZShicHJtLSZndDticGZfaW50ZXJwKTsKJiM0MzsJYnBybS0mZ3Q7YnBmX2ludGVycCA9IE5VTEw7CiAKIAkvKgogCSAqIElmIHdlIGFjdHVhbGx5IHB1dCB0aGUgbm9kZSBoZXJlIGFsbCBjb25jdXJyZW50IGNhbGxzIHRvCkBAIC00MDQsMTMgJiM0Mzs0NTcsNDcgQEAgc3RhdGljIE5vZGUgKmNyZWF0ZV9lbnRyeShjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpCiAJCXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IHR5cGU6IE0gKG1hZ2ljKVxuJiMzNDspOwogCQllLSZndDtmbGFncyA9ICgxICZsdDsmbHQ7IEVuYWJsZWQpIHwgKDEgJmx0OyZsdDsgTWFnaWMpOwogCQlicmVhazsKJiM0MzsJY2FzZSAmIzM5O0ImIzM5OzoKJiM0MzsJCWlmICghSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0NfQlBGKSkKJiM0MzsJCQlnb3RvIGVpbnZhbDsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IHR5cGU6IEIgKGJwZilcbiYjMzQ7KTsKJiM0MzsJCWUtJmd0O2ZsYWdzID0gKDEgJmx0OyZsdDsgRW5hYmxlZCkgfCAoMSAmbHQ7Jmx0OyBCcGYpOwomIzQzOwkJYnJlYWs7CiAJZGVmYXVsdDoKIAkJZ290byBlaW52YWw7CiAJfQogCWlmICgqcCYjNDM7JiM0MzsgIT0gZGVsKQogCQlnb3RvIGVpbnZhbDsKIAotCWlmICh0ZXN0X2JpdChNYWdpYywgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJaWYgKHRlc3RfYml0KEJwZiwgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJCWNoYXIgKnM7CiYjNDM7CiYjNDM7CQkvKiBUaGUgJiMzOTtvZmZzZXQmIzM5OyBmaWVsZCBjYXJyaWVzIHRoZSBoYW5kbGVyIG5hbWUuICovCiYjNDM7CQlzID0gc3RyY2hyKHAsIGRlbCk7CiYjNDM7CQlpZiAoIXMpCiYjNDM7CQkJZ290byBlaW52YWw7CiYjNDM7CQkqcyYjNDM7JiM0MzsgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQllLSZndDticGZfb3BzX25hbWUgPSBwOwomIzQzOwkJaWYgKCFlLSZndDticGZfb3BzX25hbWVbMF0gfHwKJiM0MzsJCSAgICBzdHJsZW4oZS0mZ3Q7YnBmX29wc19uYW1lKSAmZ3Q7PSBCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVgpCiYjNDM7CQkJZ290byBlaW52YWw7CiYjNDM7CQlwID0gczsKJiM0MzsJCXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IGJwZiBoYW5kbGVyOiB7JXN9XG4mIzM0OywgZS0mZ3Q7YnBmX29wc19uYW1lKTsKJiM0MzsKJiM0MzsJCS8qIFRoZSAmIzM5O21hZ2ljJiMzOTsgZmllbGQgbXVzdCBiZSBlbXB0eS4gKi8KJiM0MzsJCXMgPSBzdHJjaHIocCwgZGVsKTsKJiM0MzsJCWlmICghcyB8fCBzICE9IHApCiYjNDM7CQkJZ290byBlaW52YWw7CiYjNDM7CQkqcyYjNDM7JiM0MzsgPSAmIzM5O1wwJiMzOTs7CiYjNDM7CQlwID0gczsKJiM0MzsKJiM0MzsJCS8qIFRoZSAmIzM5O21hc2smIzM5OyBmaWVsZCBtdXN0IGJlIGVtcHR5LiAqLwomIzQzOwkJcyA9IHN0cmNocihwLCBkZWwpOwomIzQzOwkJaWYgKCFzIHx8IHMgIT0gcCkKJiM0MzsJCQlnb3RvIGVpbnZhbDsKJiM0MzsJCSpzJiM0MzsmIzQzOyA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJCXAgPSBzOwomIzQzOwl9IGVsc2UgaWYgKHRlc3RfYml0KE1hZ2ljLCAmYW1wO2UtJmd0O2ZsYWdzKSkgewogCQkvKiBIYW5kbGUgdGhlICYjMzk7TSYjMzk7IChtYWdpYykgZm9ybWF0LiAqLwogCQljaGFyICpzOwogCkBAIC01MjQsOCAmIzQzOzYxMSwxMyBAQCBzdGF0aWMgTm9kZSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudCkKIAlpZiAoIXApCiAJCWdvdG8gZWludmFsOwogCSpwJiM0MzsmIzQzOyA9ICYjMzk7XDAmIzM5OzsKLQlpZiAoIWUtJmd0O2ludGVycHJldGVyWzBdKQomIzQzOwlpZiAodGVzdF9iaXQoQnBmLCAmYW1wO2UtJmd0O2ZsYWdzKSkgewomIzQzOwkJLyogVGhlIHByb2dyYW0gc2VsZWN0cyB0aGUgaW50ZXJwcmV0ZXIgYXQgZXhlYyB0aW1lLiAqLwomIzQzOwkJaWYgKGUtJmd0O2ludGVycHJldGVyWzBdKQomIzQzOwkJCWdvdG8gZWludmFsOwomIzQzOwl9IGVsc2UgaWYgKCFlLSZndDtpbnRlcnByZXRlclswXSkgewogCQlnb3RvIGVpbnZhbDsKJiM0MzsJfQogCXByX2RlYnVnKCYjMzQ7cmVnaXN0ZXI6IGludGVycHJldGVyOiB7JXN9XG4mIzM0OywgZS0mZ3Q7aW50ZXJwcmV0ZXIpOwogCiAJLyogUGFyc2UgdGhlICYjMzk7ZmxhZ3MmIzM5OyBmaWVsZC4gKi8KQEAgLTUzNSw2ICYjNDM7NjI3LDE0IEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KQogCWlmIChwICE9IGJ1ZiAmIzQzOyBjb3VudCkKIAkJZ290byBlaW52YWw7CiAKJiM0MzsJLyoKJiM0MzsJICogQSBwcm9ncmFtLXNlbGVjdGVkIGludGVycHJldGVyIGNhbm5vdCBiZSBwcmUtb3BlbmVkIGFuZCBtdXN0IG5vdAomIzQzOwkgKiBpbmhlcml0IHRoZSBjcmVkZW50aWFscyBvZiBhIHNldHVpZCBiaW5hcnkgaXQgd2FzIGNob3NlbiBmb3IuCiYjNDM7CSAqLwomIzQzOwlpZiAodGVzdF9iaXQoQnBmLCAmYW1wO2UtJmd0O2ZsYWdzKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAoZS0mZ3Q7ZmxhZ3MgJmFtcDsgKE1JU0NfRk1UX0NSRURFTlRJQUxTIHwgTUlTQ19GTVRfT1BFTl9GSUxFKSkpCiYjNDM7CQlnb3RvIGVpbnZhbDsKJiM0MzsKIAlyZXR1cm4gZTsKIAogb3V0OgpAQCAtNTg4LDcgJiM0Mzs2ODgsMTAgQEAgc3RhdGljIHZvaWQgZW50cnlfc3RhdHVzKE5vZGUgKmUsIGNoYXIgKnBhZ2UpCiAJCXJldHVybjsKIAl9CiAKLQlkcCAmIzQzOz0gc3ByaW50ZihkcCwgJiMzNDslc1xuaW50ZXJwcmV0ZXIgJXNcbiYjMzQ7LCBzdGF0dXMsIGUtJmd0O2ludGVycHJldGVyKTsKJiM0MzsJaWYgKHRlc3RfYml0KEJwZiwgJmFtcDtlLSZndDtmbGFncykpCiYjNDM7CQlkcCAmIzQzOz0gc3ByaW50ZihkcCwgJiMzNDslc1xuYnBmICVzXG4mIzM0Oywgc3RhdHVzLCBlLSZndDticGZfb3BzX25hbWUpOwomIzQzOwllbHNlCiYjNDM7CQlkcCAmIzQzOz0gc3ByaW50ZihkcCwgJiMzNDslc1xuaW50ZXJwcmV0ZXIgJXNcbiYjMzQ7LCBzdGF0dXMsIGUtJmd0O2ludGVycHJldGVyKTsKIAogCS8qIHByaW50IHRoZSBzcGVjaWFsIGZsYWdzICovCiAJZHAgJiM0Mzs9IHNwcmludGYoZHAsICYjMzQ7ZmxhZ3M6ICYjMzQ7KTsKQEAgLTYwMiw3ICYjNDM7NzA1LDkgQEAgc3RhdGljIHZvaWQgZW50cnlfc3RhdHVzKE5vZGUgKmUsIGNoYXIgKnBhZ2UpCiAJCSpkcCYjNDM7JiM0MzsgPSAmIzM5O0YmIzM5OzsKIAkqZHAmIzQzOyYjNDM7ID0gJiMzOTtcbiYjMzk7OwogCi0JaWYgKCF0ZXN0X2JpdChNYWdpYywgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJaWYgKHRlc3RfYml0KEJwZiwgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJCSpkcCA9ICYjMzk7XDAmIzM5OzsKJiM0MzsJfSBlbHNlIGlmICghdGVzdF9iaXQoTWFnaWMsICZhbXA7ZS0mZ3Q7ZmxhZ3MpKSB7CiAJCXNwcmludGYoZHAsICYjMzQ7ZXh0ZW5zaW9uIC4lc1xuJiMzNDssIGUtJmd0O21hZ2ljKTsKIAl9IGVsc2UgewogCQlkcCAmIzQzOz0gc3ByaW50ZihkcCwgJiMzNDtvZmZzZXQgJWlcbm1hZ2ljICYjMzQ7LCBlLSZndDtvZmZzZXQpOwpAQCAtODA5LDYgJiM0Mzs5MTQsMTYgQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsCiAJaWYgKElTX0VSUihlKSkKIAkJcmV0dXJuIFBUUl9FUlIoZSk7CiAKJiM0MzsJaWYgKHRlc3RfYml0KEJwZiwgJmFtcDtlLSZndDtmbGFncykpIHsKJiM0MzsJCWUtJmd0O2JwZl9vcHMgPSBiaW5mbXRfbWlzY19nZXRfb3BzKHNiLSZndDtzX3VzZXJfbnMsIGUtJmd0O2JwZl9vcHNfbmFtZSk7CiYjNDM7CQlpZiAoIWUtJmd0O2JwZl9vcHMpIHsKJiM0MzsJCQlwcl9ub3RpY2UoJiMzNDtyZWdpc3Rlcjogbm8gYnBmIGhhbmRsZXIgbmFtZWQgJXNcbiYjMzQ7LAomIzQzOwkJCQkgIGUtJmd0O2JwZl9vcHNfbmFtZSk7CiYjNDM7CQkJa2ZyZWUoZSk7CiYjNDM7CQkJcmV0dXJuIC1FTk9FTlQ7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKIAlpZiAoZS0mZ3Q7ZmxhZ3MgJmFtcDsgTUlTQ19GTVRfT1BFTl9GSUxFKSB7CiAJCS8qCiAJCSAqIE5vdyB0aGF0IHdlIHN1cHBvcnQgdW5wcml2aWxlZ2VkIGJpbmZtdF9taXNjIG1vdW50cyBtYWtlCkBAIC04MzQsNiAmIzQzOzk0OSw4IEBAIHN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLAogCQkJZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpOwogCQkJZmlscF9jbG9zZShmLCBOVUxMKTsKIAkJfQomIzQzOwkJaWYgKGUtJmd0O2JwZl9vcHMpCiYjNDM7CQkJYmluZm10X21pc2NfcHV0X29wcyhlLSZndDticGZfb3BzKTsKIAkJa2ZyZWUoZSk7CiAJCXJldHVybiBlcnI7CiAJfQpkaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2NfYnBmLmMgYi9mcy9iaW5mbXRfbWlzY19icGYuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uNzJkYTA5NjRkOTQ5MTUKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9mcy9iaW5mbXRfbWlzY19icGYuYwpAQCAtMCwwICYjNDM7MSwyNzUgQEAKJiM0MzsvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vbmx5CiYjNDM7LyoKJiM0MzsgKiBCUEYtYmFja2VkIGJpbmFyeSB0eXBlIGhhbmRsZXJzIGZvciBiaW5mbXRfbWlzYy4KJiM0MzsgKgomIzQzOyAqIEEgaGFuZGxlciBpcyBhIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgc3RydWN0X29wcyBtYXAuIExvYWRpbmcgYW5kCiYjNDM7ICogcmVnaXN0ZXJpbmcgaXQgbWFrZXMgdGhlIGhhbmRsZXIgYXZhaWxhYmxlIHVuZGVyIGl0cyBuYW1lIGluIHRoZSB1c2VyCiYjNDM7ICogbmFtZXNwYWNlIGl0IHdhcyByZWdpc3RlcmVkIGluLiBBIGJpbmZtdF9taXNjICYjMzk7QiYjMzk7IGVudHJ5IGFjdGl2YXRlcyBpdDoKJiM0MzsgKgomIzQzOyAqICAgZWNobyAmIzM5OzplbnRyeTpCOiZsdDtoYW5kbGVyLW5hbWUmZ3Q7Ojo6OiYjMzk7ICZndDsgJmx0O2JpbmZtdF9taXNjJmd0Oy9yZWdpc3RlcgomIzQzOyAqLwomIzQzOwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRfbWlzYy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9iaW5mbXRzLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JwZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9icGZfdmVyaWZpZXIuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvYnRmLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2J0Zl9pZHMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvY3JlZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9pbml0LmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2xpbWl0cy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9tdXRleC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9zbGFiLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3N0cmluZy5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC91c2VyX25hbWVzcGFjZS5oJmd0OwomIzQzOwomIzQzO3N0cnVjdCBibV9icGZfb3BzX3JlZyB7CiYjNDM7CXN0cnVjdCBsaXN0X2hlYWQgbGlzdDsKJiM0MzsJY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzOwomIzQzOwlzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7CiYjNDM7CXN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9uczsKJiM0Mzt9OwomIzQzOwomIzQzO3N0YXRpYyBERUZJTkVfTVVURVgoYm1fYnBmX29wc19sb2NrKTsKJiM0MztzdGF0aWMgTElTVF9IRUFEKGJtX2JwZl9vcHNfbGlzdCk7CiYjNDM7CiYjNDM7c3RhdGljIHN0cnVjdCBicGZfc3RydWN0X29wcyBicGZfYmluZm10X21pc2Nfb3BzOwomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKmJtX2JwZl9vcHNfZmluZChjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsCiYjNDM7CQkJCQkgICAgICBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJc3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7CiYjNDM7CiYjNDM7CWxvY2tkZXBfYXNzZXJ0X2hlbGQoJmFtcDtibV9icGZfb3BzX2xvY2spOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgJmFtcDtibV9icGZfb3BzX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWlmIChyZWctJmd0O3VzZXJfbnMgPT0gdXNlcl9ucyAmYW1wOyZhbXA7ICFzdHJjbXAocmVnLSZndDtvcHMtJmd0O25hbWUsIG5hbWUpKQomIzQzOwkJCXJldHVybiByZWc7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzOy8qKgomIzQzOyAqIGJpbmZtdF9taXNjX2dldF9vcHMgLSBsb29rIHVwIGEgYnBmIGJpbmFyeSB0eXBlIGhhbmRsZXIgYnkgbmFtZQomIzQzOyAqIEB1c2VyX25zOiB1c2VyIG5hbWVzcGFjZSBvZiB0aGUgYmluZm10X21pc2MgaW5zdGFuY2UKJiM0MzsgKiBAbmFtZTogbmFtZSB0aGUgaGFuZGxlciB3YXMgcmVnaXN0ZXJlZCB1bmRlcgomIzQzOyAqCiYjNDM7ICogU2VhcmNoIEB1c2VyX25zIGFuZCBpdHMgYW5jZXN0b3JzIGZvciBhIGhhbmRsZXIgbmFtZWQgQG5hbWUsIG1pcnJvcmluZwomIzQzOyAqIHRoZSBpbnN0YW5jZSBsb29rdXAgaW4gbG9hZF9iaW5mbXRfbWlzYygpLiBUaGUgcmV0dXJuZWQgaGFuZGxlciBzdGF5cwomIzQzOyAqIGNhbGxhYmxlIHVudGlsIGJpbmZtdF9taXNjX3B1dF9vcHMoKSBldmVuIGlmIHRoZSBiYWNraW5nIHN0cnVjdF9vcHMgbWFwCiYjNDM7ICogaXMgZGV0YWNoZWQgb3IgZGVsZXRlZCBpbiB0aGUgbWVhbnRpbWUuCiYjNDM7ICoKJiM0MzsgKiBSZXR1cm46IHRoZSBoYW5kbGVyIG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO2NvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKmJpbmZtdF9taXNjX2dldF9vcHMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLAomIzQzOwkJCQkJCSAgY29uc3QgY2hhciAqbmFtZSkKJiM0Mzt7CiYjNDM7CWNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7CiYjNDM7CXN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtibV9icGZfb3BzX2xvY2spOwomIzQzOwomIzQzOwlmb3IgKG5zID0gdXNlcl9uczsgbnM7IG5zID0gbnMtJmd0O3BhcmVudCkgewomIzQzOwkJcmVnID0gYm1fYnBmX29wc19maW5kKG5zLCBuYW1lKTsKJiM0MzsJCWlmICghcmVnKQomIzQzOwkJCWNvbnRpbnVlOwomIzQzOwkJaWYgKCFicGZfc3RydWN0X29wc19nZXQocmVnLSZndDtvcHMpKQomIzQzOwkJCXJldHVybiBOVUxMOwomIzQzOwkJcmV0dXJuIHJlZy0mZ3Q7b3BzOwomIzQzOwl9CiYjNDM7CXJldHVybiBOVUxMOwomIzQzO30KJiM0MzsKJiM0Mzt2b2lkIGJpbmZtdF9taXNjX3B1dF9vcHMoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzKQomIzQzO3sKJiM0MzsJYnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7CiYjNDM7fQomIzQzOwomIzQzO2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZykKJiM0Mzt7CiYjNDM7CXJldHVybiBwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBwcm9nLSZndDthdXgtJmd0O3N0X29wcyA9PSAmYW1wO2JwZl9iaW5mbXRfbWlzY19vcHM7CiYjNDM7fQomIzQzOwomIzQzO19fYnBmX2tmdW5jX3N0YXJ0X2RlZnMoKTsKJiM0MzsKJiM0MzsvKioKJiM0MzsgKiBicGZfYmlucHJtX3NldF9pbnRlcnAgLSBzZWxlY3QgdGhlIGludGVycHJldGVyIGZvciB0aGUgY3VycmVudCBleGVjCiYjNDM7ICogQGJwcm06IGJpbmFyeSB0aGF0IGlzIGJlaW5nIGV4ZWN1dGVkCiYjNDM7ICogQHBhdGg6IGFic29sdXRlIHBhdGggdG8gdGhlIGludGVycHJldGVyCiYjNDM7ICogQHBhdGhfX3N6OiBzaXplIG9mIHRoZSBAcGF0aCBidWZmZXIsIGluY2x1ZGluZyB0aGUgdGVybWluYXRpbmcgTlVMCiYjNDM7ICoKJiM0MzsgKiBUbyBiZSBjYWxsZWQgZnJvbSB0aGUgbG9hZCBwcm9ncmFtIG9mIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBoYW5kbGVyCiYjNDM7ICogYmVmb3JlIHJldHVybmluZyBhIHBvc2l0aXZlIHZhbHVlLiBUaGUgcGF0aCBpcyBvcGVuZWQgd2l0aCB0aGUKJiM0MzsgKiBjcmVkZW50aWFscyBvZiB0aGUgdGFzayBkb2luZyB0aGUgZXhlYyBhZnRlciB0aGUgcHJvZ3JhbSByZXR1cm5zLgomIzQzOyAqCiYjNDM7ICogUmV0dXJuOiAwIG9uIHN1Y2Nlc3MsIGEgbmVnYXRpdmUgZXJybm8gb24gZmFpbHVyZQomIzQzOyAqLwomIzQzO19fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSwKJiM0MzsJCQkJICAgICAgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfX3N6KQomIzQzO3sKJiM0MzsJc2l6ZV90IGxlbjsKJiM0MzsJY2hhciAqaW50ZXJwOwomIzQzOwomIzQzOwlpZiAoIXBhdGhfX3N6KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWxlbiA9IHN0cm5sZW4ocGF0aCwgcGF0aF9fc3opOwomIzQzOwlpZiAobGVuID09IHBhdGhfX3N6KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChwYXRoWzBdICE9ICYjMzk7LyYjMzk7KQomIzQzOwkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CWlmIChsZW4gJmd0Oz0gUEFUSF9NQVgpCiYjNDM7CQlyZXR1cm4gLUVOQU1FVE9PTE9ORzsKJiM0MzsKJiM0MzsJaW50ZXJwID0ga21lbWR1cF9udWwocGF0aCwgbGVuLCBHRlBfS0VSTkVMKTsKJiM0MzsJaWYgKCFpbnRlcnApCiYjNDM7CQlyZXR1cm4gLUVOT01FTTsKJiM0MzsKJiM0MzsJa2ZyZWUoYnBybS0mZ3Q7YnBmX2ludGVycCk7CiYjNDM7CWJwcm0tJmd0O2JwZl9pbnRlcnAgPSBpbnRlcnA7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztfX2JwZl9rZnVuY19lbmRfZGVmcygpOwomIzQzOwomIzQzO0JURl9LRlVOQ1NfU1RBUlQoYm1fYnBmX2tmdW5jX2lkcykKJiM0MztCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwLCBLRl9TTEVFUEFCTEUpCiYjNDM7QlRGX0tGVU5DU19FTkQoYm1fYnBmX2tmdW5jX2lkcykKJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl9rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpCiYjNDM7ewomIzQzOwlpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKCZhbXA7Ym1fYnBmX2tmdW5jX2lkcywga2Z1bmNfaWQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMocHJvZykpCiYjNDM7CQlyZXR1cm4gMDsKJiM0MzsJcmV0dXJuIC1FQUNDRVM7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnRmX2tmdW5jX2lkX3NldCBibV9icGZfa2Z1bmNfc2V0ID0gewomIzQzOwkub3duZXIJPSBUSElTX01PRFVMRSwKJiM0MzsJLnNldAk9ICZhbXA7Ym1fYnBmX2tmdW5jX2lkcywKJiM0MzsJLmZpbHRlcgk9IGJtX2JwZl9rZnVuY19maWx0ZXIsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl9vcHNfX2xvYWQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKJiM0Mzt7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX29wcyBibV9icGZfb3BzX3N0dWJzID0gewomIzQzOwkubG9hZCA9IGJtX2JwZl9vcHNfX2xvYWQsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl9pbml0KHN0cnVjdCBidGYgKmJ0ZikKJiM0Mzt7CiYjNDM7CXJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUywKJiM0MzsJCQkJCSAmYW1wO2JtX2JwZl9rZnVuY19zZXQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnRmX21lbWJlciAqbWVtYmVyLAomIzQzOwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpCiYjNDM7ewomIzQzOwl1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4OwomIzQzOwomIzQzOwlzd2l0Y2ggKG1vZmYpIHsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmluZm10X21pc2Nfb3BzLCBsb2FkKToKJiM0MzsJCS8qIFJlbGlhYmxlIGZpbGUgcmVhZHMgYXQgZXhlYyB0aW1lIHJlcXVpcmUgc2xlZXBpbmcuICovCiYjNDM7CQlpZiAoIXByb2ctJmd0O3NsZWVwYWJsZSkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsCiYjNDM7CQkJICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlciwKJiM0MzsJCQkgICAgICB2b2lkICprZGF0YSwgY29uc3Qgdm9pZCAqdWRhdGEpCiYjNDM7ewomIzQzOwljb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICp1b3BzID0gdWRhdGE7CiYjNDM7CXN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcyA9IGtkYXRhOwomIzQzOwl1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4OwomIzQzOwomIzQzOwlzd2l0Y2ggKG1vZmYpIHsKJiM0MzsJY2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmluZm10X21pc2Nfb3BzLCBuYW1lKToKJiM0MzsJCWlmIChicGZfb2JqX25hbWVfY3B5KG9wcy0mZ3Q7bmFtZSwgdW9wcy0mZ3Q7bmFtZSwKJiM0MzsJCQkJICAgICBzaXplb2Yob3BzLSZndDtuYW1lKSkgJmx0Oz0gMCkKJiM0MzsJCQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJCXJldHVybiAxOwomIzQzOwl9CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IGJtX2JwZl92YWxpZGF0ZSh2b2lkICprZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcyA9IGtkYXRhOwomIzQzOwomIzQzOwlpZiAoIW9wcy0mZ3Q7bG9hZCkKJiM0MzsJCXJldHVybiAtRUlOVkFMOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBibV9icGZfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspCiYjNDM7ewomIzQzOwlzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMgPSBrZGF0YTsKJiM0MzsJc3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7CiYjNDM7CiYjNDM7CXJlZyA9IGt6YWxsb2Nfb2JqKCpyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7CiYjNDM7CWlmICghcmVnKQomIzQzOwkJcmV0dXJuIC1FTk9NRU07CiYjNDM7CiYjNDM7CXJlZy0mZ3Q7b3BzID0gb3BzOwomIzQzOwlyZWctJmd0O2xpbmsgPSBsaW5rOwomIzQzOwlyZWctJmd0O3VzZXJfbnMgPSBnZXRfdXNlcl9ucyhjdXJyZW50X3VzZXJfbnMoKSk7CiYjNDM7CiYjNDM7CWd1YXJkKG11dGV4KSgmYW1wO2JtX2JwZl9vcHNfbG9jayk7CiYjNDM7CiYjNDM7CWlmIChibV9icGZfb3BzX2ZpbmQocmVnLSZndDt1c2VyX25zLCBvcHMtJmd0O25hbWUpKSB7CiYjNDM7CQlwdXRfdXNlcl9ucyhyZWctJmd0O3VzZXJfbnMpOwomIzQzOwkJa2ZyZWUocmVnKTsKJiM0MzsJCXJldHVybiAtRUVYSVNUOwomIzQzOwl9CiYjNDM7CiYjNDM7CWxpc3RfYWRkKCZhbXA7cmVnLSZndDtsaXN0LCAmYW1wO2JtX2JwZl9vcHNfbGlzdCk7CiYjNDM7CXJldHVybiAwOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBibV9icGZfdW5yZWcodm9pZCAqa2RhdGEsIHN0cnVjdCBicGZfbGluayAqbGluaykKJiM0Mzt7CiYjNDM7CXN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnOwomIzQzOwomIzQzOwlndWFyZChtdXRleCkoJmFtcDtibV9icGZfb3BzX2xvY2spOwomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KHJlZywgJmFtcDtibV9icGZfb3BzX2xpc3QsIGxpc3QpIHsKJiM0MzsJCWlmIChyZWctJmd0O29wcyA9PSBrZGF0YSAmYW1wOyZhbXA7IHJlZy0mZ3Q7bGluayA9PSBsaW5rKSB7CiYjNDM7CQkJbGlzdF9kZWwoJmFtcDtyZWctJmd0O2xpc3QpOwomIzQzOwkJCXB1dF91c2VyX25zKHJlZy0mZ3Q7dXNlcl9ucyk7CiYjNDM7CQkJa2ZyZWUocmVnKTsKJiM0MzsJCQlyZXR1cm47CiYjNDM7CQl9CiYjNDM7CX0KJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGNvbnN0IHN0cnVjdCBicGZfdmVyaWZpZXJfb3BzIGJtX2JwZl92ZXJpZmllcl9vcHMgPSB7CiYjNDM7CS5nZXRfZnVuY19wcm90bwkJPSBicGZfYmFzZV9mdW5jX3Byb3RvLAomIzQzOwkuaXNfdmFsaWRfYWNjZXNzCT0gYnBmX3RyYWNpbmdfYnRmX2N0eF9hY2Nlc3MsCiYjNDM7fTsKJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl9iaW5mbXRfbWlzY19vcHMgPSB7CiYjNDM7CS52ZXJpZmllcl9vcHMJPSAmYW1wO2JtX2JwZl92ZXJpZmllcl9vcHMsCiYjNDM7CS5pbml0CQk9IGJtX2JwZl9pbml0LAomIzQzOwkuY2hlY2tfbWVtYmVyCT0gYm1fYnBmX2NoZWNrX21lbWJlciwKJiM0MzsJLmluaXRfbWVtYmVyCT0gYm1fYnBmX2luaXRfbWVtYmVyLAomIzQzOwkudmFsaWRhdGUJPSBibV9icGZfdmFsaWRhdGUsCiYjNDM7CS5yZWcJCT0gYm1fYnBmX3JlZywKJiM0MzsJLnVucmVnCQk9IGJtX2JwZl91bnJlZywKJiM0MzsJLmNmaV9zdHVicwk9ICZhbXA7Ym1fYnBmX29wc19zdHVicywKJiM0MzsJLm5hbWUJCT0gJiMzNDtiaW5mbXRfbWlzY19vcHMmIzM0OywKJiM0MzsJLm93bmVyCQk9IFRISVNfTU9EVUxFLAomIzQzO307CiYjNDM7CiYjNDM7c3RhdGljIGludCBfX2luaXQgYm1fYnBmX3N0cnVjdF9vcHNfaW5pdCh2b2lkKQomIzQzO3sKJiM0MzsJcmV0dXJuIHJlZ2lzdGVyX2JwZl9zdHJ1Y3Rfb3BzKCZhbXA7YnBmX2JpbmZtdF9taXNjX29wcywgYmluZm10X21pc2Nfb3BzKTsKJiM0Mzt9CiYjNDM7bGF0ZV9pbml0Y2FsbChibV9icGZfc3RydWN0X29wc19pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL2JwZl9mc19rZnVuY3MuYyBiL2ZzL2JwZl9mc19rZnVuY3MuYwppbmRleCA3NjhhY2EyZGMwZjAzNC4uYWExZmU5ODhiNmQyMjkgMTAwNjQ0Ci0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9icGZfZnNfa2Z1bmNzLmMKQEAgLTEsNiAmIzQzOzEsNyBAQAogLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAKIC8qIENvcHlyaWdodCAoYykgMjAyNCBHb29nbGUgTExDLiAqLwogCiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2JpbmZtdF9taXNjLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvYnBmX2xzbS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2J0Zi5oJmd0OwpAQCAtMzg3LDEwICYjNDM7Mzg4LDIwIEBAIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0ciwgS0ZfU0xFRVBBQkxFKQogQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZWFsX2lub2RlLCBLRl9TTEVFUEFCTEUgfCBLRl9SRVRfTlVMTCkKIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKQogCiYjNDM7LyogU2lkZS1lZmZlY3Rpbmcga2Z1bmNzIHRoYXQgc3RheSBleGNsdXNpdmUgdG8gTFNNIHByb2dyYW1zLiAqLwomIzQzO0JURl9TRVRfU1RBUlQoYnBmX2ZzX2tmdW5jX2xzbV9vbmx5X2lkcykKJiM0MztCVEZfSUQoZnVuYywgYnBmX3NldF9kZW50cnlfeGF0dHIpCiYjNDM7QlRGX0lEKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyKQomIzQzO0JURl9TRVRfRU5EKGJwZl9mc19rZnVuY19sc21fb25seV9pZHMpCiYjNDM7CiBzdGF0aWMgaW50IGJwZl9mc19rZnVuY3NfZmlsdGVyKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZywgdTMyIGtmdW5jX2lkKQogewotCWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDticGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpIHx8Ci0JICAgIHByb2ctJmd0O3R5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pCiYjNDM7CWlmICghYnRmX2lkX3NldDhfY29udGFpbnMoJmFtcDticGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChwcm9nLSZndDt0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNKQomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CWlmIChicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMocHJvZykgJmFtcDsmYW1wOwomIzQzOwkgICAgIWJ0Zl9pZF9zZXRfY29udGFpbnMoJmFtcDticGZfZnNfa2Z1bmNfbHNtX29ubHlfaWRzLCBrZnVuY19pZCkpCiAJCXJldHVybiAwOwogCXJldHVybiAtRUFDQ0VTOwogfQpAQCAtNDMzLDcgJiM0Mzs0NDQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc19rZnVuY19zZXQgPSB7CiAKIHN0YXRpYyBpbnQgX19pbml0IGJwZl9mc19rZnVuY3NfaW5pdCh2b2lkKQogewotCXJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCAmYW1wO2JwZl9mc19rZnVuY19zZXQpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCAmYW1wO2JwZl9mc19rZnVuY19zZXQpOwomIzQzOwlpZiAocmV0IHx8ICFJU19FTkFCTEVEKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpKQomIzQzOwkJcmV0dXJuIHJldDsKJiM0MzsJcmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLAomIzQzOwkJCQkJICZhbXA7YnBmX2ZzX2tmdW5jX3NldCk7CiB9CiAKIGxhdGVfaW5pdGNhbGwoYnBmX2ZzX2tmdW5jc19pbml0KTsKZGlmZiAtLWdpdCBhL2ZzL2V4ZWMuYyBiL2ZzL2V4ZWMuYwppbmRleCBiOTJmZTdkYjE3NmNmZi4uN2M5ZTI4ZjU0OWE0NTMgMTAwNjQ0Ci0tLSBhL2ZzL2V4ZWMuYwomIzQzOyYjNDM7JiM0MzsgYi9mcy9leGVjLmMKQEAgLTE0MTgsNiAmIzQzOzE0MTgsNyBAQCBzdGF0aWMgdm9pZCBmcmVlX2Jwcm0oc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSkKIAkvKiBJZiBhIGJpbmZtdCBjaGFuZ2VkIHRoZSBpbnRlcnAsIGZyZWUgaXQuICovCiAJaWYgKGJwcm0tJmd0O2ludGVycCAhPSBicHJtLSZndDtmaWxlbmFtZSkKIAkJa2ZyZWUoYnBybS0mZ3Q7aW50ZXJwKTsKJiM0MzsJa2ZyZWUoYnBybS0mZ3Q7YnBmX2ludGVycCk7CiAJa2ZyZWUoYnBybS0mZ3Q7ZmRwYXRoKTsKIAlrZnJlZShicHJtKTsKIH0KZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaCBiL2luY2x1ZGUvbGludXgvYmluZm10X21pc2MuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMC4uZTFkMjZjNDMwMWRhMmMKLS0tIC9kZXYvbnVsbAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmgKQEAgLTAsMCAmIzQzOzEsNDkgQEAKJiM0MzsvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqLwomIzQzOyNpZm5kZWYgX0xJTlVYX0JJTkZNVF9NSVNDX0gKJiM0MzsjZGVmaW5lIF9MSU5VWF9CSU5GTVRfTUlTQ19ICiYjNDM7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L3R5cGVzLmgmZ3Q7CiYjNDM7CiYjNDM7c3RydWN0IGJwZl9wcm9nOwomIzQzO3N0cnVjdCBsaW51eF9iaW5wcm07CiYjNDM7c3RydWN0IHVzZXJfbmFtZXNwYWNlOwomIzQzOwomIzQzOyNkZWZpbmUgQklORk1UX01JU0NfT1BTX05BTUVfTUFYIDE2CiYjNDM7CiYjNDM7LyoqCiYjNDM7ICogc3RydWN0IGJpbmZtdF9taXNjX29wcyAtIGJwZi1iYWNrZWQgYmluYXJ5IHR5cGUgaGFuZGxlcgomIzQzOyAqIEBsb2FkOiBtYXRjaCBAYnBybSBhbmQgc2VsZWN0IGFuIGludGVycHJldGVyIHZpYSBicGZfYmlucHJtX3NldF9pbnRlcnAoKTsKJiM0MzsgKiAgICAgICAgcmV0dXJucyAmZ3Q7IDAgaWYgdGhlIGJpbmFyeSB3YXMgaGFuZGxlZCwgMCB0byBmYWxsIHRocm91Z2ggdG8gdGhlCiYjNDM7ICogICAgICAgIGhhbmRsZXJzIHJlZ2lzdGVyZWQgYWZ0ZXIgdGhpcyBvbmUsIGEgbmVnYXRpdmUgZXJybm8gdG8gZmFpbCB0aGUKJiM0MzsgKiAgICAgICAgZXhlYzsgLUVOT0VYRUMgZG9lcyBub3QgZmFpbCB0aGUgZXhlYyBidXQgbW92ZXMgb24gdG8gdGhlCiYjNDM7ICogICAgICAgIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0cwomIzQzOyAqIEBuYW1lOiBuYW1lIHRoYXQgJiMzOTtCJiMzOTsgZW50cmllcyByZWZlcmVuY2UgdGhlIGhhbmRsZXIgYnkKJiM0MzsgKi8KJiM0MztzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIHsKJiM0MzsJaW50ICgqbG9hZCkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7CiYjNDM7CWNoYXIgbmFtZVtCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVhdOwomIzQzO307CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19CSU5GTVRfTUlTQ19CUEYKJiM0Mztjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpiaW5mbXRfbWlzY19nZXRfb3BzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywKJiM0MzsJCQkJCQkgIGNvbnN0IGNoYXIgKm5hbWUpOwomIzQzO3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpOwomIzQzO2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKgomIzQzO2JpbmZtdF9taXNjX2dldF9vcHMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBjb25zdCBjaGFyICpuYW1lKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBiaW5mbXRfbWlzY19wdXRfb3BzKGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcykKJiM0Mzt7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKQomIzQzO3sKJiM0MzsJcmV0dXJuIGZhbHNlOwomIzQzO30KJiM0MzsjZW5kaWYgLyogQ09ORklHX0JJTkZNVF9NSVNDX0JQRiAqLwomIzQzOwomIzQzOyNlbmRpZiAvKiBfTElOVVhfQklORk1UX01JU0NfSCAqLwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaAppbmRleCAyYzc3ZTM4M2U3Mzc1Ny4uMDA3MGQyMDdkNTRmMDQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oCkBAIC02NSw2ICYjNDM7NjUsNyBAQCBzdHJ1Y3QgbGludXhfYmlucHJtIHsKIAkJCQkgICBvZiB0aGUgdGltZSBzYW1lIGFzIGZpbGVuYW1lLCBidXQgY291bGQgYmUKIAkJCQkgICBkaWZmZXJlbnQgZm9yIGJpbmZtdF97bWlzYyxzY3JpcHR9ICovCiAJY29uc3QgY2hhciAqZmRwYXRoOwkvKiBnZW5lcmF0ZWQgZmlsZW5hbWUgZm9yIGV4ZWN2ZWF0ICovCiYjNDM7CWNvbnN0IGNoYXIgKmJwZl9pbnRlcnA7CS8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi8KIAl1bnNpZ25lZCBpbnRlcnBfZmxhZ3M7CiAJaW50IGV4ZWNmZDsJCS8qIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZXhlY3V0YWJsZSAqLwogCXVuc2lnbmVkIGxvbmcgZXhlYzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDY6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTIwOTAKCQkJCQkJCW91dHB1dDogMTYzCgkJCQkJCQl0aG91Z2h0czogMTMxMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXNpcyBvZiBhIEJQRi1CYWNrZWQgYGJpbmZtdF9taXNjYCBQYXRjaCBmb3IgRnV6emluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgZ290IG15IGF0dGVudGlvbi4gSXQgaW50cm9kdWNlcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlOiBCUEYgcHJvZ3JhbXMgaGFuZGxpbmcgYmluYXJ5IGZvcm1hdHMgdmlhIGBiaW5mbXRfbWlzY2AuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBmcy9iaW5mbXRfbWlzYy5jYCwgYSBuZXcgYGZzL2JpbmZtdF9taXNjX2JwZi5jYCwgYW5kIGNoYW5nZXMgdG8gYGZzL2V4ZWMuY2AgYW5kIGBmcy9icGZfZnNfa2Z1bmNzLmNgLiAgVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLCBnaXZlbiB0aGUgYWRkZWQgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGZvciBuZXcgdnVsbmVyYWJpbGl0aWVzLgoKVGhlIGtleSBpcyB0aGlzIG5ldyBjb25maWcsIGBCSU5GTVRfTUlTQ19CUEZgLiAgSSBxdWlja2x5IGNoZWNrZWQgYGZzL0tjb25maWcuYmluZm10YCB0byBtYWtlIHN1cmUgSSYjMzk7bSByaWdodCBhYm91dCB0aGUgY29uZmlnIG5hbWUgKHl1cCwgYEJJTkZNVF9NSVNDX0JQRmApLCBhbmQgdmVyaWZpZWQgaXRzIGRlcGVuZGVuY2llczogaXQgbmVlZHMgYEJJTkZNVF9NSVNDPXlgLCBgQlBGX1NZU0NBTExgLCBgQlBGX0pJVGAsIGFuZCBgREVCVUdfSU5GT19CVEZgLgoKTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGFuZCBhcmVhcyB0byB0YXJnZXQuIExvb2tpbmcgYXQgdGhlIGNvZGUgY2hhbmdlcywgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBzdGFuZCBvdXQgaW4gdGhlIG1vZGlmaWVkIGZpbGVzOgoKSW4gYGZzL2JpbmZtdF9taXNjLmNgOiBgc2VhcmNoX2JpbmZtdF9oYW5kbGVyYCwgYGdldF9iaW5mbXRfaGFuZGxlcmAsIGBsb2FkX21pc2NfYmluYXJ5YCwgYGNyZWF0ZV9lbnRyeWAsIGBlbnRyeV9zdGF0dXNgLCBgYm1fcmVnaXN0ZXJfd3JpdGVgLgoKSW4gYGZzL2JpbmZtdF9taXNjX2JwZi5jYDogYGJpbmZtdF9taXNjX2dldF9vcHNgLCBgYmluZm10X21pc2NfcHV0X29wc2AsIGBicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHNgLCBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCwgYGJtX2JwZl9rZnVuY19maWx0ZXJgLCBgYm1fYnBmX29wc19fbG9hZGAsIGBibV9icGZfaW5pdGAsIGBibV9icGZfY2hlY2tfbWVtYmVyYCwgYGJtX2JwZl9pbml0X21lbWJlcmAsIGBibV9icGZfdmFsaWRhdGVgLCBgYm1fYnBmX3JlZ2AsIGBibV9icGZfdW5yZWdgLCBgYm1fYnBmX3N0cnVjdF9vcHNfaW5pdGAuCgpJbiBgZnMvYnBmX2ZzX2tmdW5jcy5jYDogYGJwZl9mc19rZnVuY3NfZmlsdGVyYCwgYGJwZl9mc19rZnVuY3NfaW5pdGAuCgpBbmQgaW4gYGZzL2V4ZWMuY2A6IGBmcmVlX2Jwcm1gLgoKU28sICpkZWZpbml0ZWx5KiBmdXp6YWJsZS4gIFRoZSBjb25maWcgdG8gZW5hYmxlIHRoZSBuZXcgZnVuY3Rpb25hbGl0eSBpcyBgQklORk1UX01JU0NfQlBGYC4gYEJJTkZNVF9NSVNDYCBpcyBhbHNvIGEgZGVwZW5kZW5jeSwgYnV0IHRoYXQmIzM5O3MgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSYjMzk7bGwganVzdCBsaXN0IGBCSU5GTVRfTUlTQ19CUEZgIGZvciBub3cuCgpOb3csIHdoaWNoIGZ1bmN0aW9ucyBhcmUgdGhlICpiZXN0KiB0byBmb2N1cyBvbiBkdXJpbmcgZnV6emluZz8gYGxvYWRfbWlzY19iaW5hcnlgIGxvb2tzIHRlbXB0aW5nLCBhcyBpdCYjMzk7cyBhdCB0aGUgY29yZSBvZiB0aGUgZXhlYyBwYXRoLCBidXQgaXQgbWlnaHQgYmUgdG9vIGJyb2FkIGEgdGFyZ2V0IGlmIGl0JiMzOTtzIGNhbGxlZCBvbiBldmVyeSBgZXhlY3ZlYCBpZiBgYmluZm10X21pc2NgIGlzIGVuYWJsZWQuIEl0IGhhcyBuZXcgQlBGIGxvZ2ljIHRob3VnaCwgc28gaXQgbWlnaHQgYmUgZ29vZC4gYGNyZWF0ZV9lbnRyeWAgYW5kIGBibV9yZWdpc3Rlcl93cml0ZWAgYXJlIHRyaWdnZXJlZCB3aGVuIHdyaXRpbmcgdG8gYC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYy9yZWdpc3RlcmAsIHdoaWNoIGlzIGEgZ29vZCB0YXJnZXRlZCBhcHByb2FjaCwgYW5kIG5ldyBmb3IgdGhpcyBmZWF0dXJlLiBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCBpcyBhIEJQRiBrZnVuYyBzcGVjaWZpY2FsbHkgaW50cm9kdWNlZCBieSB0aGlzIHBhdGNoLCBzbyBpdCYjMzk7cyBjcml0aWNhbC4gYGJtX2JwZl9yZWdgIGFuZCBgYm1fYnBmX3VucmVnYCBhcmUgYWxzbyBrZXksIGFzIHRoZXkgYXJlIGludm9sdmVkIGluIHJlZ2lzdGVyaW5nIGFuZCB1bnJlZ2lzdGVyaW5nIHRoZSBCUEYgYHN0cnVjdF9vcHNgLgoKTGV0JiMzOTtzIG1ha2Ugc3VyZSB0aGUgY29uZmlncyBhbmQgZm9jdXMgc3ltYm9scyBhcmUgY29ycmVjdDoKCkNvbmZpZzogYEJJTkZNVF9NSVNDX0JQRmAKRm9jdXMgU3ltYm9sczogYGJwZl9iaW5wcm1fc2V0X2ludGVycGAsIGBibV9icGZfcmVnYCwgYGJtX2JwZl91bnJlZ2AsIGBjcmVhdGVfZW50cnlgLCBgYm1fcmVnaXN0ZXJfd3JpdGVgCgpJJiMzOTtsbCBvbWl0IGBsb2FkX21pc2NfYmluYXJ5YCB0byBhdm9pZCB0ZXN0aW5nIGV4ZWN2ZSBpbiBnZW5lcmFsIGFuZCB0byBmb2N1cyB0ZXN0cyBvbiBuZXcgY29kZSwgYnV0IGBjcmVhdGVfZW50cnlgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGxvb2sgdmVyeSBnb29kLgoKT2theSwgdGltZSB0byB1c2UgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbC4KCmBXb3J0aEZ1enppbmc6IHRydWVgCmBFbmFibGVDb25maWdzOiBbJiMzNDtCSU5GTVRfTUlTQ19CUEYmIzM0O11gCmBGb2N1c1N5bWJvbHM6IFsmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LCAmIzM0O2JtX2JwZl9yZWcmIzM0OywgJiMzNDtibV9icGZfdW5yZWcmIzM0OywgJiMzNDtjcmVhdGVfZW50cnkmIzM0OywgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7XWAKYFJlYXNvbmluZzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBhY3QgYXMgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLiBJdAoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDggMDY6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0JJTkZNVF9NSVNDX0JQRiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2JwZl9iaW5wcm1fc2V0X2ludGVycCYjMzQ7LAogICAgJiMzNDtibV9icGZfcmVnJiMzNDssCiAgICAmIzM0O2JtX2JwZl91bnJlZyYjMzQ7LAogICAgJiMzNDtjcmVhdGVfZW50cnkmIzM0OywKICAgICYjMzQ7Ym1fcmVnaXN0ZXJfd3JpdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBhY3QgYXMgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLiBJdCBhZGRzIG5ldyBCUEYgc3RydWN0X29wcyBhbmQga2Z1bmNzLCBhbmQgbW9kaWZpZXMgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBhbmQgZXhlY3V0aW9uIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiwgdGhlIG5ldyBrZnVuYywgYW5kIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RyYXRpb24gcGF0aC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7QklORk1UX01JU0NfQlBGJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YnBmX2JpbnBybV9zZXRfaW50ZXJwJiMzNDssCiAgICAmIzM0O2JtX2JwZl9yZWcmIzM0OywKICAgICYjMzQ7Ym1fYnBmX3VucmVnJiMzNDssCiAgICAmIzM0O2NyZWF0ZV9lbnRyeSYjMzQ7LAogICAgJiMzNDtibV9yZWdpc3Rlcl93cml0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGFjdCBhcyBoYW5kbGVycyBmb3IgYmluZm10X21pc2MuIEl0IGFkZHMgbmV3IEJQRiBzdHJ1Y3Rfb3BzIGFuZCBrZnVuY3MsIGFuZCBtb2RpZmllcyB0aGUgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIGFuZCBleGVjdXRpb24gbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uLCB0aGUgbmV3IGtmdW5jLCBhbmQgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBwYXRoLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDctMDhUMDY6MDA6MjguNTIyODIwNzI3WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTc0NzExMjAzNTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2JpbnBybV9zZXRfaW50ZXJwXCIsXG4gICAgXCJibV9icGZfcmVnXCIsXG4gICAgXCJibV9icGZfdW5yZWdcIixcbiAgICBcImNyZWF0ZV9lbnRyeVwiLFxuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGFjdCBhcyBoYW5kbGVycyBmb3IgYmluZm10X21pc2MuIEl0IGFkZHMgbmV3IEJQRiBzdHJ1Y3Rfb3BzIGFuZCBrZnVuY3MsIGFuZCBtb2RpZmllcyB0aGUgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIGFuZCBleGVjdXRpb24gbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uLCB0aGUgbmV3IGtmdW5jLCBhbmQgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNjowMDoyOC41MjI4MzAzMDdaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4Mjc1MjU3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IGE2OTEyZDA5NDY0YzkzZjM2NTA1NGRkNjczYzJhZDE5N2YzMDU0ZjNcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIFdlZCBKdWwgOCAwNjowMDoyNiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XFxuaW5kZXggYzBhMzRmYmY4MDIyYjUuLmMwZWZiMDc3MzYyODQzIDEwMDY0NFxcbi0tLSBhL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcXG5AQCAtMjYsMTEgKzI2LDEzIEBAIEhlcmUgaXMgd2hhdCB0aGUgZmllbGRzIG1lYW46XFxuICAgIG5hbWUgYmVsb3cgYGAvcHJvYy9zeXMvZnMvYmluZm10X21pc2NgYDsgY2Fubm90IGNvbnRhaW4gc2xhc2hlcyBgYC9gYCBmb3JcXG4gICAgb2J2aW91cyByZWFzb25zLlxcbiAtIGBgdHlwZWBgXFxuLSAgIGlzIHRoZSB0eXBlIG9mIHJlY29nbml0aW9uLiBHaXZlIGBgTWBgIGZvciBtYWdpYyBhbmQgYGBFYGAgZm9yIGV4dGVuc2lvbi5cXG4rICAgaXMgdGhlIHR5cGUgb2YgcmVjb2duaXRpb24uIEdpdmUgYGBNYGAgZm9yIG1hZ2ljLCBgYEVgYCBmb3IgZXh0ZW5zaW9uIGFuZFxcbisgICBgYEJgYCBmb3IgYSBicGYtYmFja2VkIGhhbmRsZXIgKHNlZSBiZWxvdykuXFxuIC0gYGBvZmZzZXRgYFxcbiAgICBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBtYWdpYy9tYXNrIGluIHRoZSBmaWxlLCBjb3VudGVkIGluIGJ5dGVzLiBUaGlzXFxuICAgIGRlZmF1bHRzIHRvIDAgaWYgeW91IG9taXQgaXQgKGkuZS4geW91IHdyaXRlIGBgOm5hbWU6dHlwZTo6bWFnaWMuLi5gYCkuXFxuLSAgIElnbm9yZWQgd2hlbiB1c2luZyBmaWxlbmFtZSBleHRlbnNpb24gbWF0Y2hpbmcuXFxuKyAgIElnbm9yZWQgd2hlbiB1c2luZyBmaWxlbmFtZSBleHRlbnNpb24gbWF0Y2hpbmcuIEZvciBgYEJgYCBlbnRyaWVzIHRoaXNcXG4rICAgZmllbGQgY2FycmllcyB0aGUgbmFtZSBvZiB0aGUgYnBmIGhhbmRsZXIgaW5zdGVhZC5cXG4gLSBgYG1hZ2ljYGBcXG4gICAgaXMgdGhlIGJ5dGUgc2VxdWVuY2UgYmluZm10X21pc2MgaXMgbWF0Y2hpbmcgZm9yLiBUaGUgbWFnaWMgc3RyaW5nXFxuICAgIG1heSBjb250YWluIGhleC1lbmNvZGVkIGNoYXJhY3RlcnMgbGlrZSBgYFxcXFx4MGFgYCBvciBgYFxcXFx4QTRgYC4gTm90ZSB0aGF0IHlvdVxcbkBAIC05Nyw2ICs5OSw0MCBAQCBUaGVyZSBhcmUgc29tZSByZXN0cmljdGlvbnM6XFxuICAgIG9mZnNldCtzaXplKG1hZ2ljKSBoYXMgdG8gYmUgbGVzcyB0aGFuIDEyOFxcbiAgLSB0aGUgaW50ZXJwcmV0ZXIgc3RyaW5nIG1heSBub3QgZXhjZWVkIDEyNyBjaGFyYWN0ZXJzXFxuIFxcbitcXG4rYnBmLWJhY2tlZCBoYW5kbGVyc1xcbistLS0tLS0tLS0tLS0tLS0tLS0tXFxuK1xcbitXaXRoIGBgQ09ORklHX0JJTkZNVF9NSVNDX0JQRmBgIGJvdGggdGhlIG1hdGNoaW5nIGFuZCB0aGUgaW50ZXJwcmV0ZXJcXG4rc2VsZWN0aW9uIGNhbiBiZSBkZWxlZ2F0ZWQgdG8gYSBicGYgcHJvZ3JhbS4gQSBoYW5kbGVyIGlzIGFuIGluc3RhbmNlIG9mIHRoZVxcbitgYGJpbmZtdF9taXNjX29wc2BgIHN0cnVjdF9vcHMgd2l0aCBhIHNsZWVwYWJsZSBgYGxvYWRgYCBwcm9ncmFtIGFuZCBhXFxuK2BgbmFtZWBgLiBPbmNlIHRoZSBzdHJ1Y3Rfb3BzIG1hcCBpcyByZWdpc3RlcmVkIHRoZSBoYW5kbGVyIGNhbiBiZSBhY3RpdmF0ZWRcXG4rd2l0aCBhIGBgQmBgIGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdCBieSBuYW1lIGFuZCBjYXJyaWVzIG5laXRoZXIgbWFnaWMsXFxuK21hc2ssIG5vciBpbnRlcnByZXRlcjo6XFxuK1xcbisgICAgZWNobyAnOnFlbXU6QjpteV9oYW5kbGVyOjo6OicgXFx1MDAzZSByZWdpc3RlclxcbitcXG4rQXQgZXhlYyB0aW1lIHRoZSBgYGxvYWRgYCBwcm9ncmFtIHJlY2VpdmVzIHRoZSBgYGxpbnV4X2JpbnBybWBgIG9mIHRoZVxcbitiaW5hcnkuIEl0IGNhbiBtYXRjaCBvbiB0aGUgaGVhZGVyIGluIGBgYnBybS1cXHUwMDNlYnVmYGAsIHJlYWQgdGhlIGZpbGUgaXRzZWxmLFxcbitlLmcuIHRvIHBhcnNlIEVMRiBwcm9ncmFtIGhlYWRlcnMsIGFuZCBkZXJpdmUgdGhlIGludGVycHJldGVyIGZyb20gdGhlXFxuK2JpbmFyeSdzIGxvY2F0aW9uLiBJdCBzZWxlY3RzIHRoZSBpbnRlcnByZXRlciBieSBjYWxsaW5nIHRoZVxcbitgYGJwZl9iaW5wcm1fc2V0X2ludGVycCgpYGAga2Z1bmMgd2l0aCBhbiBhYnNvbHV0ZSBwYXRoIGFuZCByZXR1cm5pbmcgYVxcbitwb3NpdGl2ZSB2YWx1ZS4gUmV0dXJuaW5nIGBgMGBgIGZhbGxzIHRocm91Z2ggdG8gdGhlIGhhbmRsZXJzIHJlZ2lzdGVyZWRcXG4rYWZ0ZXIgdGhpcyBvbmUsIGEgbmVnYXRpdmUgZXJybm8gZmFpbHMgdGhlIGV4ZWMgd2l0aCB0aGF0IGVycm9yO1xcbitgYC1FTk9FWEVDYGAgZW5kcyB0aGUgYmluZm10X21pc2Mgc2VhcmNoIGJ1dCBsZXRzIHRoZSByZW1haW5pbmcgYmluYXJ5XFxuK2Zvcm1hdHMgaGF2ZSBhIGdvLiBUaGUgaW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZVxcbit0YXNrIGRvaW5nIHRoZSBleGVjLCBleGFjdGx5IGFzIGEgc3RhdGljYWxseSByZWdpc3RlcmVkIGludGVycHJldGVyIHdvdWxkXFxuK2JlLlxcbitcXG4rSGFuZGxlcnMgYXJlIGxvb2tlZCB1cCBpbiB0aGUgdXNlciBuYW1lc3BhY2UgdGhlIHN0cnVjdF9vcHMgbWFwIHdhc1xcbityZWdpc3RlcmVkIGluLCBmYWxsaW5nIGJhY2sgdG8gYW5jZXN0b3IgbmFtZXNwYWNlcywgbWlycm9yaW5nIGhvd1xcbitiaW5mbXRfbWlzYyBpbnN0YW5jZXMgdGhlbXNlbHZlcyBhcmUgbG9va2VkIHVwLiBUaGUgZW50cnkga2VlcHMgdGhlIGhhbmRsZXJcXG4rYWxpdmU7IGRlbGV0aW5nIHRoZSBzdHJ1Y3Rfb3BzIG1hcCBvbmx5IHByZXZlbnRzIG5ldyByZWdpc3RyYXRpb25zLlxcbitcXG4rVGhlIGBgQ2BgIGFuZCBgYEZgYCBmbGFncyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgYEJgYCBlbnRyaWVzOiB0aGVyZSBpcyBub1xcbitmaXhlZCBpbnRlcnByZXRlciB0byBwcmUtb3BlbiBhbmQgYSBwcm9ncmFtLXNlbGVjdGVkIGludGVycHJldGVyIG11c3QgbmV2ZXJcXG4raW5oZXJpdCB0aGUgY3JlZGVudGlhbHMgb2YgYSBzZXR1aWQgYmluYXJ5LlxcbitcXG4gVG8gdXNlIGJpbmZtdF9taXNjIHlvdSBoYXZlIHRvIG1vdW50IGl0IGZpcnN0LiBZb3UgY2FuIG1vdW50IGl0IHdpdGhcXG4gYGBtb3VudCAtdCBiaW5mbXRfbWlzYyBub25lIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzY2BgIGNvbW1hbmQsIG9yIHlvdSBjYW4gYWRkXFxuIGEgbGluZSBgYG5vbmUgIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyBiaW5mbXRfbWlzYyBkZWZhdWx0cyAwIDBgYCB0byB5b3VyXFxuZGlmZiAtLWdpdCBhL2ZzL0tjb25maWcuYmluZm10IGIvZnMvS2NvbmZpZy5iaW5mbXRcXG5pbmRleCAxOTQ5ZTI1Yzc3NDFiMS4uZGFlYWM0ODg5ZDAzZWYgMTAwNjQ0XFxuLS0tIGEvZnMvS2NvbmZpZy5iaW5mbXRcXG4rKysgYi9mcy9LY29uZmlnLmJpbmZtdFxcbkBAIC0xNjgsNiArMTY4LDIwIEBAIGNvbmZpZyBCSU5GTVRfTUlTQ1xcbiBcXHQgIHlvdSBoYXZlIHVzZSBmb3IgaXQ7IHRoZSBtb2R1bGUgaXMgY2FsbGVkIGJpbmZtdF9taXNjLiBJZiB5b3VcXG4gXFx0ICBkb24ndCBrbm93IHdoYXQgdG8gYW5zd2VyIGF0IHRoaXMgcG9pbnQsIHNheSBZLlxcbiBcXG4rY29uZmlnIEJJTkZNVF9NSVNDX0JQRlxcbitcXHRib29sIFxcXCJCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXFxcIlxcbitcXHRkZXBlbmRzIG9uIEJJTkZNVF9NSVNDPXlcXG4rXFx0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcXHUwMDI2XFx1MDAyNiBCUEZfSklUIFxcdTAwMjZcXHUwMDI2IERFQlVHX0lORk9fQlRGXFxuK1xcdGhlbHBcXG4rXFx0ICBBbGxvdyBiaW5mbXRfbWlzYyBiaW5hcnkgdHlwZSBoYW5kbGVycyB0byBiZSBpbXBsZW1lbnRlZCBhcyBicGZcXG4rXFx0ICBzdHJ1Y3Rfb3BzIHByb2dyYW1zLiBJbnN0ZWFkIG9mIG1hdGNoaW5nIGEgZml4ZWQgbWFnaWMgYW5kXFxuK1xcdCAgcmVkaXJlY3RpbmcgdG8gYSBmaXhlZCBpbnRlcnByZXRlciByZWNvcmRlZCBhdCByZWdpc3RyYXRpb24gdGltZVxcbitcXHQgIHN1Y2ggaGFuZGxlcnMgbWF0Y2ggYmluYXJpZXMgcHJvZ3JhbW1hdGljYWxseSBhbmQgY29tcHV0ZSB0aGVcXG4rXFx0ICBpbnRlcnByZXRlciB0byB1c2UgcGVyIGJpbmFyeSwgZS5nLiByZWxhdGl2ZSB0byB0aGUgbG9jYXRpb24gb2ZcXG4rXFx0ICB0aGUgYmluYXJ5IGl0c2VsZi5cXG4rXFxuK1xcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBhbnN3ZXIgYXQgdGhpcyBwb2ludCwgc2F5IE4uXFxuK1xcbiBjb25maWcgQ09SRURVTVBcXG4gXFx0Ym9vbCBcXFwiRW5hYmxlIGNvcmUgZHVtcCBzdXBwb3J0XFxcIiBpZiBFWFBFUlRcXG4gXFx0ZGVmYXVsdCB5XFxuZGlmZiAtLWdpdCBhL2ZzL01ha2VmaWxlIGIvZnMvTWFrZWZpbGVcXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uNDk5YzY2NzBmMGMxODMgMTAwNjQ0XFxuLS0tIGEvZnMvTWFrZWZpbGVcXG4rKysgYi9mcy9NYWtlZmlsZVxcbkBAIC0zMyw2ICszMyw3IEBAIG9iai0kKENPTkZJR19GU19FTkNSWVBUSU9OKVxcdCs9IGNyeXB0by9cXG4gb2JqLSQoQ09ORklHX0ZTX1ZFUklUWSlcXHRcXHQrPSB2ZXJpdHkvXFxuIG9iai0kKENPTkZJR19GSUxFX0xPQ0tJTkcpICAgICAgKz0gbG9ja3Mub1xcbiBvYmotJChDT05GSUdfQklORk1UX01JU0MpXFx0Kz0gYmluZm10X21pc2Mub1xcbitvYmotJChDT05GSUdfQklORk1UX01JU0NfQlBGKVxcdCs9IGJpbmZtdF9taXNjX2JwZi5vXFxuIG9iai0kKENPTkZJR19CSU5GTVRfU0NSSVBUKVxcdCs9IGJpbmZtdF9zY3JpcHQub1xcbiBvYmotJChDT05GSUdfQklORk1UX0VMRilcXHQrPSBiaW5mbXRfZWxmLm9cXG4gb2JqLSQoQ09ORklHX0NPTVBBVF9CSU5GTVRfRUxGKVxcdCs9IGNvbXBhdF9iaW5mbXRfZWxmLm9cXG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2MuYyBiL2ZzL2JpbmZtdF9taXNjLmNcXG5pbmRleCA4NDM0OWZjYjkzZjEzYS4uYjgwZTIxOWJhNTg3NmIgMTAwNjQ0XFxuLS0tIGEvZnMvYmluZm10X21pc2MuY1xcbisrKyBiL2ZzL2JpbmZtdF9taXNjLmNcXG5AQCAtMTcsNiArMTcsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2NoZWQvbW0uaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L21hZ2ljLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvY3R5cGUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3N0cmluZ19oZWxwZXJzLmhcXHUwMDNlXFxuQEAgLTQxLDcgKzQyLDcgQEAgZW51bSB7XFxuIFxcdFZFUkJPU0VfU1RBVFVTID0gMSAvKiBtYWtlIGl0IHplcm8gdG8gc2F2ZSA0MDAgYnl0ZXMga2VybmVsIG1lbW9yeSAqL1xcbiB9O1xcbiBcXG4tZW51bSB7RW5hYmxlZCwgTWFnaWN9O1xcbitlbnVtIHtFbmFibGVkLCBNYWdpYywgQnBmfTtcXG4gI2RlZmluZSBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCAoMVVMIFxcdTAwM2NcXHUwMDNjIDMxKVxcbiAjZGVmaW5lIE1JU0NfRk1UX09QRU5fQklOQVJZICgxVUwgXFx1MDAzY1xcdTAwM2MgMzApXFxuICNkZWZpbmUgTUlTQ19GTVRfQ1JFREVOVElBTFMgKDFVTCBcXHUwMDNjXFx1MDAzYyAyOSlcXG5AQCAtNTgsNiArNTksOCBAQCB0eXBlZGVmIHN0cnVjdCB7XFxuIFxcdGNoYXIgKm5hbWU7XFxuIFxcdHN0cnVjdCBkZW50cnkgKmRlbnRyeTtcXG4gXFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlO1xcbitcXHRjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpicGZfb3BzO1xcdC8qIGJwZi1iYWNrZWQgaGFuZGxlciAoJ0InKSAqL1xcbitcXHRjb25zdCBjaGFyICpicGZfb3BzX25hbWU7XFxuIFxcdHJlZmNvdW50X3QgdXNlcnM7XFx0XFx0Lyogc3luYyByZW1vdmFsIHdpdGggbG9hZF9taXNjX2JpbmFyeSgpICovXFxuIH0gTm9kZTtcXG4gXFxuQEAgLTgyLDE0ICs4NSwxOSBAQCBzdGF0aWMgc3RydWN0IGZpbGVfc3lzdGVtX3R5cGUgYm1fZnNfdHlwZTtcXG4gICogc2VhcmNoX2JpbmZtdF9oYW5kbGVyIC0gc2VhcmNoIGZvciBhIGJpbmFyeSBoYW5kbGVyIGZvciBAYnBybVxcbiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlXFxuICAqIEBicHJtOiBiaW5hcnkgZm9yIHdoaWNoIHdlIGFyZSBsb29raW5nIGZvciBhIGhhbmRsZXJcXG4rICogQGJwZl9za2lwOiBudW1iZXIgb2YgYnBmLWJhY2tlZCBoYW5kbGVycyB0byBza2lwIG92ZXJcXG4gICpcXG4gICogU2VhcmNoIGZvciBhIGJpbmFyeSB0eXBlIGhhbmRsZXIgZm9yIEBicHJtIGluIHRoZSBsaXN0IG9mIHJlZ2lzdGVyZWQgYmluYXJ5XFxuLSAqIHR5cGUgaGFuZGxlcnMuXFxuKyAqIHR5cGUgaGFuZGxlcnMuIEEgYnBmLWJhY2tlZCBoYW5kbGVyIGNhbm5vdCBiZSBtYXRjaGVkIGhlcmUgYXMgaXRzIHByb2dyYW1cXG4rICogbXVzdCBydW4gaW4gc2xlZXBhYmxlIGNvbnRleHQ7IGl0IGlzIHJldHVybmVkIGFzIGEgY2FuZGlkYXRlIGFuZCB0aGVcXG4rICogcHJvZ3JhbSBkZWNpZGVzIGluIGxvYWRfbWlzY19iaW5hcnkoKS4gQGJwZl9za2lwIGFsbG93cyB0aGUgY2FsbGVyIHRvXFxuKyAqIHJlc3VtZSB0aGUgc2VhcmNoIGFmdGVyIHRoZSBmaXJzdCBAYnBmX3NraXAgY2FuZGlkYXRlcyBkZWNsaW5lZC5cXG4gICpcXG4gICogUmV0dXJuOiBiaW5hcnkgdHlwZSBsaXN0IGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZVxcbiAgKi9cXG4gc3RhdGljIE5vZGUgKnNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuLVxcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuK1xcdFxcdFxcdFxcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXFxuK1xcdFxcdFxcdFxcdCAgIHVuc2lnbmVkIGludCBicGZfc2tpcClcXG4ge1xcbiBcXHRjaGFyICpwID0gc3RycmNocihicHJtLVxcdTAwM2VpbnRlcnAsICcuJyk7XFxuIFxcdE5vZGUgKmU7XFxuQEAgLTEwMyw2ICsxMTEsMTUgQEAgc3RhdGljIE5vZGUgKnNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXFxuIFxcdFxcdGlmICghdGVzdF9iaXQoRW5hYmxlZCwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSlcXG4gXFx0XFx0XFx0Y29udGludWU7XFxuIFxcbitcXHRcXHQvKiBUaGUgcHJvZ3JhbSBkZWNpZGVzIGluIGxvYWRfbWlzY19iaW5hcnkoKS4gKi9cXG4rXFx0XFx0aWYgKHRlc3RfYml0KEJwZiwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRcXHRpZiAoYnBmX3NraXApIHtcXG4rXFx0XFx0XFx0XFx0YnBmX3NraXAtLTtcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdH1cXG4rXFx0XFx0XFx0cmV0dXJuIGU7XFxuK1xcdFxcdH1cXG4rXFxuIFxcdFxcdC8qIERvIG1hdGNoaW5nIGJhc2VkIG9uIGV4dGVuc2lvbiBpZiBhcHBsaWNhYmxlLiAqL1xcbiBcXHRcXHRpZiAoIXRlc3RfYml0KE1hZ2ljLCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdFxcdGlmIChwIFxcdTAwMjZcXHUwMDI2ICFzdHJjbXAoZS1cXHUwMDNlbWFnaWMsIHAgKyAxKSlcXG5AQCAtMTMyLDYgKzE0OSw3IEBAIHN0YXRpYyBOb2RlICpzZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbiAgKiBnZXRfYmluZm10X2hhbmRsZXIgLSB0cnkgdG8gZmluZCBhIGJpbmFyeSB0eXBlIGhhbmRsZXJcXG4gICogQG1pc2M6IGhhbmRsZSB0byBiaW5mbXRfbWlzYyBpbnN0YW5jZVxcbiAgKiBAYnBybTogYmluYXJ5IGZvciB3aGljaCB3ZSBhcmUgbG9va2luZyBmb3IgYSBoYW5kbGVyXFxuKyAqIEBicGZfc2tpcDogbnVtYmVyIG9mIGJwZi1iYWNrZWQgaGFuZGxlcnMgdG8gc2tpcCBvdmVyXFxuICAqXFxuICAqIFRyeSB0byBmaW5kIGEgYmluZm10IGhhbmRsZXIgZm9yIHRoZSBiaW5hcnkgdHlwZS4gSWYgb25lIGlzIGZvdW5kIHRha2UgYVxcbiAgKiByZWZlcmVuY2UgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlbW92YWwgdmlhIGJtX3tlbnRyeSxzdGF0dXN9X3dyaXRlKCkuXFxuQEAgLTEzOSwxMiArMTU3LDEzIEBAIHN0YXRpYyBOb2RlICpzZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxcbiAgKiBSZXR1cm46IGJpbmFyeSB0eXBlIGxpc3QgZW50cnkgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlXFxuICAqL1xcbiBzdGF0aWMgTm9kZSAqZ2V0X2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcXG4tXFx0XFx0XFx0XFx0c3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4rXFx0XFx0XFx0XFx0c3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4rXFx0XFx0XFx0XFx0dW5zaWduZWQgaW50IGJwZl9za2lwKVxcbiB7XFxuIFxcdE5vZGUgKmU7XFxuIFxcbiBcXHRyZWFkX2xvY2soXFx1MDAyNm1pc2MtXFx1MDAzZWVudHJpZXNfbG9jayk7XFxuLVxcdGUgPSBzZWFyY2hfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSk7XFxuK1xcdGUgPSBzZWFyY2hfYmluZm10X2hhbmRsZXIobWlzYywgYnBybSwgYnBmX3NraXApO1xcbiBcXHRpZiAoZSlcXG4gXFx0XFx0cmVmY291bnRfaW5jKFxcdTAwMjZlLVxcdTAwM2V1c2Vycyk7XFxuIFxcdHJlYWRfdW5sb2NrKFxcdTAwMjZtaXNjLVxcdTAwM2VlbnRyaWVzX2xvY2spO1xcbkBAIC0xNjQsNiArMTgzLDggQEAgc3RhdGljIHZvaWQgcHV0X2JpbmZtdF9oYW5kbGVyKE5vZGUgKmUpXFxuIFxcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXFx1MDAyNmUtXFx1MDAzZXVzZXJzKSkge1xcbiBcXHRcXHRpZiAoZS1cXHUwMDNlZmxhZ3MgXFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpXFxuIFxcdFxcdFxcdGZpbHBfY2xvc2UoZS1cXHUwMDNlaW50ZXJwX2ZpbGUsIE5VTEwpO1xcbitcXHRcXHRpZiAoZS1cXHUwMDNlYnBmX29wcylcXG4rXFx0XFx0XFx0YmluZm10X21pc2NfcHV0X29wcyhlLVxcdTAwM2VicGZfb3BzKTtcXG4gXFx0XFx0a2ZyZWUoZSk7XFxuIFxcdH1cXG4gfVxcbkBAIC0yMDYsMTIgKzIyNywxNSBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlID0gTlVMTDtcXG4gXFx0aW50IHJldHZhbCA9IC1FTk9FWEVDO1xcbiBcXHRzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2M7XFxuK1xcdGNvbnN0IGNoYXIgKmludGVycHJldGVyO1xcbitcXHR1bnNpZ25lZCBpbnQgYnBmX3NraXAgPSAwO1xcbiBcXG4gXFx0bWlzYyA9IGxvYWRfYmluZm10X21pc2MoKTtcXG4gXFx0aWYgKCFtaXNjLVxcdTAwM2VlbmFibGVkKVxcbiBcXHRcXHRyZXR1cm4gcmV0dmFsO1xcbiBcXG4tXFx0Zm10ID0gZ2V0X2JpbmZtdF9oYW5kbGVyKG1pc2MsIGJwcm0pO1xcbityZXRyeTpcXG4rXFx0Zm10ID0gZ2V0X2JpbmZtdF9oYW5kbGVyKG1pc2MsIGJwcm0sIGJwZl9za2lwKTtcXG4gXFx0aWYgKCFmbXQpXFxuIFxcdFxcdHJldHVybiByZXR2YWw7XFxuIFxcbkBAIC0yMjAsNiArMjQ0LDMyIEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiBcXHRpZiAoYnBybS1cXHUwMDNlaW50ZXJwX2ZsYWdzIFxcdTAwMjYgQklOUFJNX0ZMQUdTX1BBVEhfSU5BQ0NFU1NJQkxFKVxcbiBcXHRcXHRnb3RvIHJldDtcXG4gXFxuK1xcdGlmICh0ZXN0X2JpdChCcGYsIFxcdTAwMjZmbXQtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRyZXR2YWwgPSBmbXQtXFx1MDAzZWJwZl9vcHMtXFx1MDAzZWxvYWQoYnBybSk7XFxuK1xcdFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKSB7XFxuK1xcdFxcdFxcdC8qIEtlZXAgYSBwcm9ncmFtLXN1cHBsaWVkIGVycm9yIHdpdGhpbiBlcnJubyByYW5nZS4gKi9cXG4rXFx0XFx0XFx0aWYgKHJldHZhbCBcXHUwMDNjIC1NQVhfRVJSTk8pXFxuK1xcdFxcdFxcdFxcdHJldHZhbCA9IC1FTk9FWEVDO1xcbitcXHRcXHRcXHRnb3RvIHJldDtcXG4rXFx0XFx0fVxcbitcXHRcXHRpZiAoIXJldHZhbCkge1xcbitcXHRcXHRcXHQvKiBEZWNsaW5lZCwgbW92ZSBvbiB0byBsYXRlciBoYW5kbGVycy4gKi9cXG4rXFx0XFx0XFx0a2ZyZWUoYnBybS1cXHUwMDNlYnBmX2ludGVycCk7XFxuK1xcdFxcdFxcdGJwcm0tXFx1MDAzZWJwZl9pbnRlcnAgPSBOVUxMO1xcbitcXHRcXHRcXHRwdXRfYmluZm10X2hhbmRsZXIoZm10KTtcXG4rXFx0XFx0XFx0YnBmX3NraXArKztcXG4rXFx0XFx0XFx0cmV0dmFsID0gLUVOT0VYRUM7XFxuK1xcdFxcdFxcdGdvdG8gcmV0cnk7XFxuK1xcdFxcdH1cXG4rXFx0XFx0LyogU2VsZWN0aW5nIGFuIGludGVycHJldGVyIGlzIHBhcnQgb2YgdGhlIGNvbnRyYWN0LiAqL1xcbitcXHRcXHRyZXR2YWwgPSAtRU5PRVhFQztcXG4rXFx0XFx0aWYgKCFicHJtLVxcdTAwM2VicGZfaW50ZXJwKVxcbitcXHRcXHRcXHRnb3RvIHJldDtcXG4rXFx0XFx0aW50ZXJwcmV0ZXIgPSBicHJtLVxcdTAwM2VicGZfaW50ZXJwO1xcbitcXHR9IGVsc2Uge1xcbitcXHRcXHRpbnRlcnByZXRlciA9IGZtdC1cXHUwMDNlaW50ZXJwcmV0ZXI7XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChmbXQtXFx1MDAzZWZsYWdzIFxcdTAwMjYgTUlTQ19GTVRfUFJFU0VSVkVfQVJHVjApIHtcXG4gXFx0XFx0YnBybS1cXHUwMDNlaW50ZXJwX2ZsYWdzIHw9IEJJTlBSTV9GTEFHU19QUkVTRVJWRV9BUkdWMDtcXG4gXFx0fSBlbHNlIHtcXG5AQCAtMjM4LDEzICsyODgsMTMgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIFxcdGJwcm0tXFx1MDAzZWFyZ2MrKztcXG4gXFxuIFxcdC8qIGFkZCB0aGUgaW50ZXJwIGFzIGFyZ3ZbMF0gKi9cXG4tXFx0cmV0dmFsID0gY29weV9zdHJpbmdfa2VybmVsKGZtdC1cXHUwMDNlaW50ZXJwcmV0ZXIsIGJwcm0pO1xcbitcXHRyZXR2YWwgPSBjb3B5X3N0cmluZ19rZXJuZWwoaW50ZXJwcmV0ZXIsIGJwcm0pO1xcbiBcXHRpZiAocmV0dmFsIFxcdTAwM2MgMClcXG4gXFx0XFx0Z290byByZXQ7XFxuIFxcdGJwcm0tXFx1MDAzZWFyZ2MrKztcXG4gXFxuIFxcdC8qIFVwZGF0ZSBpbnRlcnAgaW4gY2FzZSBiaW5mbXRfc2NyaXB0IG5lZWRzIGl0LiAqL1xcbi1cXHRyZXR2YWwgPSBicHJtX2NoYW5nZV9pbnRlcnAoZm10LVxcdTAwM2VpbnRlcnByZXRlciwgYnBybSk7XFxuK1xcdHJldHZhbCA9IGJwcm1fY2hhbmdlX2ludGVycChpbnRlcnByZXRlciwgYnBybSk7XFxuIFxcdGlmIChyZXR2YWwgXFx1MDAzYyAwKVxcbiBcXHRcXHRnb3RvIHJldDtcXG4gXFxuQEAgLTI1Myw3ICszMDMsNyBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4gXFx0XFx0aWYgKCFJU19FUlIoaW50ZXJwX2ZpbGUpKVxcbiBcXHRcXHRcXHRkZW55X3dyaXRlX2FjY2VzcyhpbnRlcnBfZmlsZSk7XFxuIFxcdH0gZWxzZSB7XFxuLVxcdFxcdGludGVycF9maWxlID0gb3Blbl9leGVjKGZtdC1cXHUwMDNlaW50ZXJwcmV0ZXIpO1xcbitcXHRcXHRpbnRlcnBfZmlsZSA9IG9wZW5fZXhlYyhpbnRlcnByZXRlcik7XFxuIFxcdH1cXG4gXFx0cmV0dmFsID0gUFRSX0VSUihpbnRlcnBfZmlsZSk7XFxuIFxcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKVxcbkBAIC0yNjUsNiArMzE1LDkgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXFxuIFxcbiBcXHRyZXR2YWwgPSAwO1xcbiByZXQ6XFxuK1xcdC8qIEEgcHJvZ3JhbS1zZWxlY3RlZCBpbnRlcnByZXRlciBpcyBjb25zdW1lZCBieSB0aGlzIGV4ZWMgYXR0ZW1wdC4gKi9cXG4rXFx0a2ZyZWUoYnBybS1cXHUwMDNlYnBmX2ludGVycCk7XFxuK1xcdGJwcm0tXFx1MDAzZWJwZl9pbnRlcnAgPSBOVUxMO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogSWYgd2UgYWN0dWFsbHkgcHV0IHRoZSBub2RlIGhlcmUgYWxsIGNvbmN1cnJlbnQgY2FsbHMgdG9cXG5AQCAtNDA0LDEzICs0NTcsNDcgQEAgc3RhdGljIE5vZGUgKmNyZWF0ZV9lbnRyeShjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLCBzaXplX3QgY291bnQpXFxuIFxcdFxcdHByX2RlYnVnKFxcXCJyZWdpc3RlcjogdHlwZTogTSAobWFnaWMpXFxcXG5cXFwiKTtcXG4gXFx0XFx0ZS1cXHUwMDNlZmxhZ3MgPSAoMSBcXHUwMDNjXFx1MDAzYyBFbmFibGVkKSB8ICgxIFxcdTAwM2NcXHUwMDNjIE1hZ2ljKTtcXG4gXFx0XFx0YnJlYWs7XFxuK1xcdGNhc2UgJ0InOlxcbitcXHRcXHRpZiAoIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXFxuK1xcdFxcdFxcdGdvdG8gZWludmFsO1xcbitcXHRcXHRwcl9kZWJ1ZyhcXFwicmVnaXN0ZXI6IHR5cGU6IEIgKGJwZilcXFxcblxcXCIpO1xcbitcXHRcXHRlLVxcdTAwM2VmbGFncyA9ICgxIFxcdTAwM2NcXHUwMDNjIEVuYWJsZWQpIHwgKDEgXFx1MDAzY1xcdTAwM2MgQnBmKTtcXG4rXFx0XFx0YnJlYWs7XFxuIFxcdGRlZmF1bHQ6XFxuIFxcdFxcdGdvdG8gZWludmFsO1xcbiBcXHR9XFxuIFxcdGlmICgqcCsrICE9IGRlbClcXG4gXFx0XFx0Z290byBlaW52YWw7XFxuIFxcbi1cXHRpZiAodGVzdF9iaXQoTWFnaWMsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykpIHtcXG4rXFx0aWYgKHRlc3RfYml0KEJwZiwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRjaGFyICpzO1xcbitcXG4rXFx0XFx0LyogVGhlICdvZmZzZXQnIGZpZWxkIGNhcnJpZXMgdGhlIGhhbmRsZXIgbmFtZS4gKi9cXG4rXFx0XFx0cyA9IHN0cmNocihwLCBkZWwpO1xcbitcXHRcXHRpZiAoIXMpXFxuK1xcdFxcdFxcdGdvdG8gZWludmFsO1xcbitcXHRcXHQqcysrID0gJ1xcXFwwJztcXG4rXFx0XFx0ZS1cXHUwMDNlYnBmX29wc19uYW1lID0gcDtcXG4rXFx0XFx0aWYgKCFlLVxcdTAwM2VicGZfb3BzX25hbWVbMF0gfHxcXG4rXFx0XFx0ICAgIHN0cmxlbihlLVxcdTAwM2VicGZfb3BzX25hbWUpIFxcdTAwM2U9IEJJTkZNVF9NSVNDX09QU19OQU1FX01BWClcXG4rXFx0XFx0XFx0Z290byBlaW52YWw7XFxuK1xcdFxcdHAgPSBzO1xcbitcXHRcXHRwcl9kZWJ1ZyhcXFwicmVnaXN0ZXI6IGJwZiBoYW5kbGVyOiB7JXN9XFxcXG5cXFwiLCBlLVxcdTAwM2VicGZfb3BzX25hbWUpO1xcbitcXG4rXFx0XFx0LyogVGhlICdtYWdpYycgZmllbGQgbXVzdCBiZSBlbXB0eS4gKi9cXG4rXFx0XFx0cyA9IHN0cmNocihwLCBkZWwpO1xcbitcXHRcXHRpZiAoIXMgfHwgcyAhPSBwKVxcbitcXHRcXHRcXHRnb3RvIGVpbnZhbDtcXG4rXFx0XFx0KnMrKyA9ICdcXFxcMCc7XFxuK1xcdFxcdHAgPSBzO1xcbitcXG4rXFx0XFx0LyogVGhlICdtYXNrJyBmaWVsZCBtdXN0IGJlIGVtcHR5LiAqL1xcbitcXHRcXHRzID0gc3RyY2hyKHAsIGRlbCk7XFxuK1xcdFxcdGlmICghcyB8fCBzICE9IHApXFxuK1xcdFxcdFxcdGdvdG8gZWludmFsO1xcbitcXHRcXHQqcysrID0gJ1xcXFwwJztcXG4rXFx0XFx0cCA9IHM7XFxuK1xcdH0gZWxzZSBpZiAodGVzdF9iaXQoTWFnaWMsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykpIHtcXG4gXFx0XFx0LyogSGFuZGxlIHRoZSAnTScgKG1hZ2ljKSBmb3JtYXQuICovXFxuIFxcdFxcdGNoYXIgKnM7XFxuIFxcbkBAIC01MjQsOCArNjExLDEzIEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxcbiBcXHRpZiAoIXApXFxuIFxcdFxcdGdvdG8gZWludmFsO1xcbiBcXHQqcCsrID0gJ1xcXFwwJztcXG4tXFx0aWYgKCFlLVxcdTAwM2VpbnRlcnByZXRlclswXSlcXG4rXFx0aWYgKHRlc3RfYml0KEJwZiwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHQvKiBUaGUgcHJvZ3JhbSBzZWxlY3RzIHRoZSBpbnRlcnByZXRlciBhdCBleGVjIHRpbWUuICovXFxuK1xcdFxcdGlmIChlLVxcdTAwM2VpbnRlcnByZXRlclswXSlcXG4rXFx0XFx0XFx0Z290byBlaW52YWw7XFxuK1xcdH0gZWxzZSBpZiAoIWUtXFx1MDAzZWludGVycHJldGVyWzBdKSB7XFxuIFxcdFxcdGdvdG8gZWludmFsO1xcbitcXHR9XFxuIFxcdHByX2RlYnVnKFxcXCJyZWdpc3RlcjogaW50ZXJwcmV0ZXI6IHslc31cXFxcblxcXCIsIGUtXFx1MDAzZWludGVycHJldGVyKTtcXG4gXFxuIFxcdC8qIFBhcnNlIHRoZSAnZmxhZ3MnIGZpZWxkLiAqL1xcbkBAIC01MzUsNiArNjI3LDE0IEBAIHN0YXRpYyBOb2RlICpjcmVhdGVfZW50cnkoY29uc3QgY2hhciBfX3VzZXIgKmJ1ZmZlciwgc2l6ZV90IGNvdW50KVxcbiBcXHRpZiAocCAhPSBidWYgKyBjb3VudClcXG4gXFx0XFx0Z290byBlaW52YWw7XFxuIFxcbitcXHQvKlxcbitcXHQgKiBBIHByb2dyYW0tc2VsZWN0ZWQgaW50ZXJwcmV0ZXIgY2Fubm90IGJlIHByZS1vcGVuZWQgYW5kIG11c3Qgbm90XFxuK1xcdCAqIGluaGVyaXQgdGhlIGNyZWRlbnRpYWxzIG9mIGEgc2V0dWlkIGJpbmFyeSBpdCB3YXMgY2hvc2VuIGZvci5cXG4rXFx0ICovXFxuK1xcdGlmICh0ZXN0X2JpdChCcGYsIFxcdTAwMjZlLVxcdTAwM2VmbGFncykgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IChNSVNDX0ZNVF9DUkVERU5USUFMUyB8IE1JU0NfRk1UX09QRU5fRklMRSkpKVxcbitcXHRcXHRnb3RvIGVpbnZhbDtcXG4rXFxuIFxcdHJldHVybiBlO1xcbiBcXG4gb3V0OlxcbkBAIC01ODgsNyArNjg4LDEwIEBAIHN0YXRpYyB2b2lkIGVudHJ5X3N0YXR1cyhOb2RlICplLCBjaGFyICpwYWdlKVxcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4gXFxuLVxcdGRwICs9IHNwcmludGYoZHAsIFxcXCIlc1xcXFxuaW50ZXJwcmV0ZXIgJXNcXFxcblxcXCIsIHN0YXR1cywgZS1cXHUwMDNlaW50ZXJwcmV0ZXIpO1xcbitcXHRpZiAodGVzdF9iaXQoQnBmLCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpKVxcbitcXHRcXHRkcCArPSBzcHJpbnRmKGRwLCBcXFwiJXNcXFxcbmJwZiAlc1xcXFxuXFxcIiwgc3RhdHVzLCBlLVxcdTAwM2VicGZfb3BzX25hbWUpO1xcbitcXHRlbHNlXFxuK1xcdFxcdGRwICs9IHNwcmludGYoZHAsIFxcXCIlc1xcXFxuaW50ZXJwcmV0ZXIgJXNcXFxcblxcXCIsIHN0YXR1cywgZS1cXHUwMDNlaW50ZXJwcmV0ZXIpO1xcbiBcXG4gXFx0LyogcHJpbnQgdGhlIHNwZWNpYWwgZmxhZ3MgKi9cXG4gXFx0ZHAgKz0gc3ByaW50ZihkcCwgXFxcImZsYWdzOiBcXFwiKTtcXG5AQCAtNjAyLDcgKzcwNSw5IEBAIHN0YXRpYyB2b2lkIGVudHJ5X3N0YXR1cyhOb2RlICplLCBjaGFyICpwYWdlKVxcbiBcXHRcXHQqZHArKyA9ICdGJztcXG4gXFx0KmRwKysgPSAnXFxcXG4nO1xcbiBcXG4tXFx0aWYgKCF0ZXN0X2JpdChNYWdpYywgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRpZiAodGVzdF9iaXQoQnBmLCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpKSB7XFxuK1xcdFxcdCpkcCA9ICdcXFxcMCc7XFxuK1xcdH0gZWxzZSBpZiAoIXRlc3RfYml0KE1hZ2ljLCBcXHUwMDI2ZS1cXHUwMDNlZmxhZ3MpKSB7XFxuIFxcdFxcdHNwcmludGYoZHAsIFxcXCJleHRlbnNpb24gLiVzXFxcXG5cXFwiLCBlLVxcdTAwM2VtYWdpYyk7XFxuIFxcdH0gZWxzZSB7XFxuIFxcdFxcdGRwICs9IHNwcmludGYoZHAsIFxcXCJvZmZzZXQgJWlcXFxcbm1hZ2ljIFxcXCIsIGUtXFx1MDAzZW9mZnNldCk7XFxuQEAgLTgwOSw2ICs5MTQsMTYgQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdGlmIChJU19FUlIoZSkpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKGUpO1xcbiBcXG4rXFx0aWYgKHRlc3RfYml0KEJwZiwgXFx1MDAyNmUtXFx1MDAzZWZsYWdzKSkge1xcbitcXHRcXHRlLVxcdTAwM2VicGZfb3BzID0gYmluZm10X21pc2NfZ2V0X29wcyhzYi1cXHUwMDNlc191c2VyX25zLCBlLVxcdTAwM2VicGZfb3BzX25hbWUpO1xcbitcXHRcXHRpZiAoIWUtXFx1MDAzZWJwZl9vcHMpIHtcXG4rXFx0XFx0XFx0cHJfbm90aWNlKFxcXCJyZWdpc3Rlcjogbm8gYnBmIGhhbmRsZXIgbmFtZWQgJXNcXFxcblxcXCIsXFxuK1xcdFxcdFxcdFxcdCAgZS1cXHUwMDNlYnBmX29wc19uYW1lKTtcXG4rXFx0XFx0XFx0a2ZyZWUoZSk7XFxuK1xcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbitcXHRcXHR9XFxuK1xcdH1cXG4rXFxuIFxcdGlmIChlLVxcdTAwM2VmbGFncyBcXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSkge1xcbiBcXHRcXHQvKlxcbiBcXHRcXHQgKiBOb3cgdGhhdCB3ZSBzdXBwb3J0IHVucHJpdmlsZWdlZCBiaW5mbXRfbWlzYyBtb3VudHMgbWFrZVxcbkBAIC04MzQsNiArOTQ5LDggQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXFxuIFxcdFxcdFxcdGV4ZV9maWxlX2FsbG93X3dyaXRlX2FjY2VzcyhmKTtcXG4gXFx0XFx0XFx0ZmlscF9jbG9zZShmLCBOVUxMKTtcXG4gXFx0XFx0fVxcbitcXHRcXHRpZiAoZS1cXHUwMDNlYnBmX29wcylcXG4rXFx0XFx0XFx0YmluZm10X21pc2NfcHV0X29wcyhlLVxcdTAwM2VicGZfb3BzKTtcXG4gXFx0XFx0a2ZyZWUoZSk7XFxuIFxcdFxcdHJldHVybiBlcnI7XFxuIFxcdH1cXG5kaWZmIC0tZ2l0IGEvZnMvYmluZm10X21pc2NfYnBmLmMgYi9mcy9iaW5mbXRfbWlzY19icGYuY1xcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLjcyZGEwOTY0ZDk0OTE1XFxuLS0tIC9kZXYvbnVsbFxcbisrKyBiL2ZzL2JpbmZtdF9taXNjX2JwZi5jXFxuQEAgLTAsMCArMSwyNzUgQEBcXG4rLy8gU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb25seVxcbisvKlxcbisgKiBCUEYtYmFja2VkIGJpbmFyeSB0eXBlIGhhbmRsZXJzIGZvciBiaW5mbXRfbWlzYy5cXG4rICpcXG4rICogQSBoYW5kbGVyIGlzIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBzdHJ1Y3Rfb3BzIG1hcC4gTG9hZGluZyBhbmRcXG4rICogcmVnaXN0ZXJpbmcgaXQgbWFrZXMgdGhlIGhhbmRsZXIgYXZhaWxhYmxlIHVuZGVyIGl0cyBuYW1lIGluIHRoZSB1c2VyXFxuKyAqIG5hbWVzcGFjZSBpdCB3YXMgcmVnaXN0ZXJlZCBpbi4gQSBiaW5mbXRfbWlzYyAnQicgZW50cnkgYWN0aXZhdGVzIGl0OlxcbisgKlxcbisgKiAgIGVjaG8gJzplbnRyeTpCOlxcdTAwM2NoYW5kbGVyLW5hbWVcXHUwMDNlOjo6OicgXFx1MDAzZSBcXHUwMDNjYmluZm10X21pc2NcXHUwMDNlL3JlZ2lzdGVyXFxuKyAqL1xcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JpbmZtdF9taXNjLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGYuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2JwZl92ZXJpZmllci5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvYnRmLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGZfaWRzLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9jcmVkLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9pbml0LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9saW1pdHMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L211dGV4LmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zbGFiLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9zdHJpbmcuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3VzZXJfbmFtZXNwYWNlLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgYm1fYnBmX29wc19yZWcge1xcbitcXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XFxuK1xcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcztcXG4rXFx0c3RydWN0IGJwZl9saW5rICpsaW5rO1xcbitcXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XFxuK307XFxuK1xcbitzdGF0aWMgREVGSU5FX01VVEVYKGJtX2JwZl9vcHNfbG9jayk7XFxuK3N0YXRpYyBMSVNUX0hFQUQoYm1fYnBmX29wc19saXN0KTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2JpbmZtdF9taXNjX29wcztcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKmJtX2JwZl9vcHNfZmluZChjb25zdCBzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXFxuK1xcdFxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IGNoYXIgKm5hbWUpXFxuK3tcXG4rXFx0c3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7XFxuK1xcbitcXHRsb2NrZGVwX2Fzc2VydF9oZWxkKFxcdTAwMjZibV9icGZfb3BzX2xvY2spO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsIFxcdTAwMjZibV9icGZfb3BzX2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKHJlZy1cXHUwMDNldXNlcl9ucyA9PSB1c2VyX25zIFxcdTAwMjZcXHUwMDI2ICFzdHJjbXAocmVnLVxcdTAwM2VvcHMtXFx1MDAzZW5hbWUsIG5hbWUpKVxcbitcXHRcXHRcXHRyZXR1cm4gcmVnO1xcbitcXHR9XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbisvKipcXG4rICogYmluZm10X21pc2NfZ2V0X29wcyAtIGxvb2sgdXAgYSBicGYgYmluYXJ5IHR5cGUgaGFuZGxlciBieSBuYW1lXFxuKyAqIEB1c2VyX25zOiB1c2VyIG5hbWVzcGFjZSBvZiB0aGUgYmluZm10X21pc2MgaW5zdGFuY2VcXG4rICogQG5hbWU6IG5hbWUgdGhlIGhhbmRsZXIgd2FzIHJlZ2lzdGVyZWQgdW5kZXJcXG4rICpcXG4rICogU2VhcmNoIEB1c2VyX25zIGFuZCBpdHMgYW5jZXN0b3JzIGZvciBhIGhhbmRsZXIgbmFtZWQgQG5hbWUsIG1pcnJvcmluZ1xcbisgKiB0aGUgaW5zdGFuY2UgbG9va3VwIGluIGxvYWRfYmluZm10X21pc2MoKS4gVGhlIHJldHVybmVkIGhhbmRsZXIgc3RheXNcXG4rICogY2FsbGFibGUgdW50aWwgYmluZm10X21pc2NfcHV0X29wcygpIGV2ZW4gaWYgdGhlIGJhY2tpbmcgc3RydWN0X29wcyBtYXBcXG4rICogaXMgZGV0YWNoZWQgb3IgZGVsZXRlZCBpbiB0aGUgbWVhbnRpbWUuXFxuKyAqXFxuKyAqIFJldHVybjogdGhlIGhhbmRsZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlXFxuKyAqL1xcbitjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpiaW5mbXRfbWlzY19nZXRfb3BzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0ICBjb25zdCBjaGFyICpuYW1lKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XFxuK1xcdHN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZibV9icGZfb3BzX2xvY2spO1xcbitcXG4rXFx0Zm9yIChucyA9IHVzZXJfbnM7IG5zOyBucyA9IG5zLVxcdTAwM2VwYXJlbnQpIHtcXG4rXFx0XFx0cmVnID0gYm1fYnBmX29wc19maW5kKG5zLCBuYW1lKTtcXG4rXFx0XFx0aWYgKCFyZWcpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXHRcXHRpZiAoIWJwZl9zdHJ1Y3Rfb3BzX2dldChyZWctXFx1MDAzZW9wcykpXFxuK1xcdFxcdFxcdHJldHVybiBOVUxMO1xcbitcXHRcXHRyZXR1cm4gcmVnLVxcdTAwM2VvcHM7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIE5VTEw7XFxuK31cXG4rXFxuK3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpXFxuK3tcXG4rXFx0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XFxuK31cXG4rXFxuK2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4re1xcbitcXHRyZXR1cm4gcHJvZy1cXHUwMDNldHlwZSA9PSBCUEZfUFJPR19UWVBFX1NUUlVDVF9PUFMgXFx1MDAyNlxcdTAwMjZcXG4rXFx0ICAgICAgIHByb2ctXFx1MDAzZWF1eC1cXHUwMDNlc3Rfb3BzID09IFxcdTAwMjZicGZfYmluZm10X21pc2Nfb3BzO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuY19zdGFydF9kZWZzKCk7XFxuK1xcbisvKipcXG4rICogYnBmX2JpbnBybV9zZXRfaW50ZXJwIC0gc2VsZWN0IHRoZSBpbnRlcnByZXRlciBmb3IgdGhlIGN1cnJlbnQgZXhlY1xcbisgKiBAYnBybTogYmluYXJ5IHRoYXQgaXMgYmVpbmcgZXhlY3V0ZWRcXG4rICogQHBhdGg6IGFic29sdXRlIHBhdGggdG8gdGhlIGludGVycHJldGVyXFxuKyAqIEBwYXRoX19zejogc2l6ZSBvZiB0aGUgQHBhdGggYnVmZmVyLCBpbmNsdWRpbmcgdGhlIHRlcm1pbmF0aW5nIE5VTFxcbisgKlxcbisgKiBUbyBiZSBjYWxsZWQgZnJvbSB0aGUgbG9hZCBwcm9ncmFtIG9mIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBoYW5kbGVyXFxuKyAqIGJlZm9yZSByZXR1cm5pbmcgYSBwb3NpdGl2ZSB2YWx1ZS4gVGhlIHBhdGggaXMgb3BlbmVkIHdpdGggdGhlXFxuKyAqIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZSBleGVjIGFmdGVyIHRoZSBwcm9ncmFtIHJldHVybnMuXFxuKyAqXFxuKyAqIFJldHVybjogMCBvbiBzdWNjZXNzLCBhIG5lZ2F0aXZlIGVycm5vIG9uIGZhaWx1cmVcXG4rICovXFxuK19fYnBmX2tmdW5jIGludCBicGZfYmlucHJtX3NldF9pbnRlcnAoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSxcXG4rXFx0XFx0XFx0XFx0ICAgICAgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfX3N6KVxcbit7XFxuK1xcdHNpemVfdCBsZW47XFxuK1xcdGNoYXIgKmludGVycDtcXG4rXFxuK1xcdGlmICghcGF0aF9fc3opXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRsZW4gPSBzdHJubGVuKHBhdGgsIHBhdGhfX3N6KTtcXG4rXFx0aWYgKGxlbiA9PSBwYXRoX19zeilcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChwYXRoWzBdICE9ICcvJylcXG4rXFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdGlmIChsZW4gXFx1MDAzZT0gUEFUSF9NQVgpXFxuK1xcdFxcdHJldHVybiAtRU5BTUVUT09MT05HO1xcbitcXG4rXFx0aW50ZXJwID0ga21lbWR1cF9udWwocGF0aCwgbGVuLCBHRlBfS0VSTkVMKTtcXG4rXFx0aWYgKCFpbnRlcnApXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0a2ZyZWUoYnBybS1cXHUwMDNlYnBmX2ludGVycCk7XFxuK1xcdGJwcm0tXFx1MDAzZWJwZl9pbnRlcnAgPSBpbnRlcnA7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbitfX2JwZl9rZnVuY19lbmRfZGVmcygpO1xcbitcXG4rQlRGX0tGVU5DU19TVEFSVChibV9icGZfa2Z1bmNfaWRzKVxcbitCVEZfSURfRkxBR1MoZnVuYywgYnBmX2JpbnBybV9zZXRfaW50ZXJwLCBLRl9TTEVFUEFCTEUpXFxuK0JURl9LRlVOQ1NfRU5EKGJtX2JwZl9rZnVuY19pZHMpXFxuK1xcbitzdGF0aWMgaW50IGJtX2JwZl9rZnVuY19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXFxuK3tcXG4rXFx0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcXHUwMDI2Ym1fYnBmX2tmdW5jX2lkcywga2Z1bmNfaWQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhwcm9nKSlcXG4rXFx0XFx0cmV0dXJuIDA7XFxuK1xcdHJldHVybiAtRUFDQ0VTO1xcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYm1fYnBmX2tmdW5jX3NldCA9IHtcXG4rXFx0Lm93bmVyXFx0PSBUSElTX01PRFVMRSxcXG4rXFx0LnNldFxcdD0gXFx1MDAyNmJtX2JwZl9rZnVuY19pZHMsXFxuK1xcdC5maWx0ZXJcXHQ9IGJtX2JwZl9rZnVuY19maWx0ZXIsXFxuK307XFxuK1xcbitzdGF0aWMgaW50IGJtX2JwZl9vcHNfX2xvYWQoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcXG4re1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgYm1fYnBmX29wc19zdHVicyA9IHtcXG4rXFx0LmxvYWQgPSBibV9icGZfb3BzX19sb2FkLFxcbit9O1xcbitcXG4rc3RhdGljIGludCBibV9icGZfaW5pdChzdHJ1Y3QgYnRmICpidGYpXFxuK3tcXG4rXFx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxcbitcXHRcXHRcXHRcXHRcXHQgXFx1MDAyNmJtX2JwZl9rZnVuY19zZXQpO1xcbit9XFxuK1xcbitzdGF0aWMgaW50IGJtX2JwZl9jaGVja19tZW1iZXIoY29uc3Qgc3RydWN0IGJ0Zl90eXBlICp0LFxcbitcXHRcXHRcXHQgICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcXG4rXFx0XFx0XFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcXG4re1xcbitcXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xcbitcXG4rXFx0c3dpdGNoIChtb2ZmKSB7XFxuK1xcdGNhc2Ugb2Zmc2V0b2Yoc3RydWN0IGJpbmZtdF9taXNjX29wcywgbG9hZCk6XFxuK1xcdFxcdC8qIFJlbGlhYmxlIGZpbGUgcmVhZHMgYXQgZXhlYyB0aW1lIHJlcXVpcmUgc2xlZXBpbmcuICovXFxuK1xcdFxcdGlmICghcHJvZy1cXHUwMDNlc2xlZXBhYmxlKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0YnJlYWs7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYm1fYnBmX2luaXRfbWVtYmVyKGNvbnN0IHN0cnVjdCBidGZfdHlwZSAqdCxcXG4rXFx0XFx0XFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcXG4rXFx0XFx0XFx0ICAgICAgdm9pZCAqa2RhdGEsIGNvbnN0IHZvaWQgKnVkYXRhKVxcbit7XFxuK1xcdGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKnVvcHMgPSB1ZGF0YTtcXG4rXFx0c3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzID0ga2RhdGE7XFxuK1xcdHUzMiBtb2ZmID0gX19idGZfbWVtYmVyX2JpdF9vZmZzZXQodCwgbWVtYmVyKSAvIDg7XFxuK1xcbitcXHRzd2l0Y2ggKG1vZmYpIHtcXG4rXFx0Y2FzZSBvZmZzZXRvZihzdHJ1Y3QgYmluZm10X21pc2Nfb3BzLCBuYW1lKTpcXG4rXFx0XFx0aWYgKGJwZl9vYmpfbmFtZV9jcHkob3BzLVxcdTAwM2VuYW1lLCB1b3BzLVxcdTAwM2VuYW1lLFxcbitcXHRcXHRcXHRcXHQgICAgIHNpemVvZihvcHMtXFx1MDAzZW5hbWUpKSBcXHUwMDNjPSAwKVxcbitcXHRcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdH1cXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQgYm1fYnBmX3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxcbit7XFxuK1xcdHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcyA9IGtkYXRhO1xcbitcXG4rXFx0aWYgKCFvcHMtXFx1MDAzZWxvYWQpXFxuK1xcdFxcdHJldHVybiAtRUlOVkFMO1xcbitcXHRyZXR1cm4gMDtcXG4rfVxcbitcXG4rc3RhdGljIGludCBibV9icGZfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXFxuK3tcXG4rXFx0c3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzID0ga2RhdGE7XFxuK1xcdHN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnO1xcbitcXG4rXFx0cmVnID0ga3phbGxvY19vYmooKnJlZywgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4rXFx0aWYgKCFyZWcpXFxuK1xcdFxcdHJldHVybiAtRU5PTUVNO1xcbitcXG4rXFx0cmVnLVxcdTAwM2VvcHMgPSBvcHM7XFxuK1xcdHJlZy1cXHUwMDNlbGluayA9IGxpbms7XFxuK1xcdHJlZy1cXHUwMDNldXNlcl9ucyA9IGdldF91c2VyX25zKGN1cnJlbnRfdXNlcl9ucygpKTtcXG4rXFxuK1xcdGd1YXJkKG11dGV4KShcXHUwMDI2Ym1fYnBmX29wc19sb2NrKTtcXG4rXFxuK1xcdGlmIChibV9icGZfb3BzX2ZpbmQocmVnLVxcdTAwM2V1c2VyX25zLCBvcHMtXFx1MDAzZW5hbWUpKSB7XFxuK1xcdFxcdHB1dF91c2VyX25zKHJlZy1cXHUwMDNldXNlcl9ucyk7XFxuK1xcdFxcdGtmcmVlKHJlZyk7XFxuK1xcdFxcdHJldHVybiAtRUVYSVNUO1xcbitcXHR9XFxuK1xcbitcXHRsaXN0X2FkZChcXHUwMDI2cmVnLVxcdTAwM2VsaXN0LCBcXHUwMDI2Ym1fYnBmX29wc19saXN0KTtcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyB2b2lkIGJtX2JwZl91bnJlZyh2b2lkICprZGF0YSwgc3RydWN0IGJwZl9saW5rICpsaW5rKVxcbit7XFxuK1xcdHN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnO1xcbitcXG4rXFx0Z3VhcmQobXV0ZXgpKFxcdTAwMjZibV9icGZfb3BzX2xvY2spO1xcbitcXG4rXFx0bGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsIFxcdTAwMjZibV9icGZfb3BzX2xpc3QsIGxpc3QpIHtcXG4rXFx0XFx0aWYgKHJlZy1cXHUwMDNlb3BzID09IGtkYXRhIFxcdTAwMjZcXHUwMDI2IHJlZy1cXHUwMDNlbGluayA9PSBsaW5rKSB7XFxuK1xcdFxcdFxcdGxpc3RfZGVsKFxcdTAwMjZyZWctXFx1MDAzZWxpc3QpO1xcbitcXHRcXHRcXHRwdXRfdXNlcl9ucyhyZWctXFx1MDAzZXVzZXJfbnMpO1xcbitcXHRcXHRcXHRrZnJlZShyZWcpO1xcbitcXHRcXHRcXHRyZXR1cm47XFxuK1xcdFxcdH1cXG4rXFx0fVxcbit9XFxuK1xcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJwZl92ZXJpZmllcl9vcHMgYm1fYnBmX3ZlcmlmaWVyX29wcyA9IHtcXG4rXFx0LmdldF9mdW5jX3Byb3RvXFx0XFx0PSBicGZfYmFzZV9mdW5jX3Byb3RvLFxcbitcXHQuaXNfdmFsaWRfYWNjZXNzXFx0PSBicGZfdHJhY2luZ19idGZfY3R4X2FjY2VzcyxcXG4rfTtcXG4rXFxuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2JpbmZtdF9taXNjX29wcyA9IHtcXG4rXFx0LnZlcmlmaWVyX29wc1xcdD0gXFx1MDAyNmJtX2JwZl92ZXJpZmllcl9vcHMsXFxuK1xcdC5pbml0XFx0XFx0PSBibV9icGZfaW5pdCxcXG4rXFx0LmNoZWNrX21lbWJlclxcdD0gYm1fYnBmX2NoZWNrX21lbWJlcixcXG4rXFx0LmluaXRfbWVtYmVyXFx0PSBibV9icGZfaW5pdF9tZW1iZXIsXFxuK1xcdC52YWxpZGF0ZVxcdD0gYm1fYnBmX3ZhbGlkYXRlLFxcbitcXHQucmVnXFx0XFx0PSBibV9icGZfcmVnLFxcbitcXHQudW5yZWdcXHRcXHQ9IGJtX2JwZl91bnJlZyxcXG4rXFx0LmNmaV9zdHVic1xcdD0gXFx1MDAyNmJtX2JwZl9vcHNfc3R1YnMsXFxuK1xcdC5uYW1lXFx0XFx0PSBcXFwiYmluZm10X21pc2Nfb3BzXFxcIixcXG4rXFx0Lm93bmVyXFx0XFx0PSBUSElTX01PRFVMRSxcXG4rfTtcXG4rXFxuK3N0YXRpYyBpbnQgX19pbml0IGJtX2JwZl9zdHJ1Y3Rfb3BzX2luaXQodm9pZClcXG4re1xcbitcXHRyZXR1cm4gcmVnaXN0ZXJfYnBmX3N0cnVjdF9vcHMoXFx1MDAyNmJwZl9iaW5mbXRfbWlzY19vcHMsIGJpbmZtdF9taXNjX29wcyk7XFxuK31cXG4rbGF0ZV9pbml0Y2FsbChibV9icGZfc3RydWN0X29wc19pbml0KTtcXG5kaWZmIC0tZ2l0IGEvZnMvYnBmX2ZzX2tmdW5jcy5jIGIvZnMvYnBmX2ZzX2tmdW5jcy5jXFxuaW5kZXggNzY4YWNhMmRjMGYwMzQuLmFhMWZlOTg4YjZkMjI5IDEwMDY0NFxcbi0tLSBhL2ZzL2JwZl9mc19rZnVuY3MuY1xcbisrKyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xcbkBAIC0xLDYgKzEsNyBAQFxcbiAvLyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxcbiAvKiBDb3B5cmlnaHQgKGMpIDIwMjQgR29vZ2xlIExMQy4gKi9cXG4gXFxuKyNpbmNsdWRlIFxcdTAwM2NsaW51eC9iaW5mbXRfbWlzYy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYnBmLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9icGZfbHNtLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9idGYuaFxcdTAwM2VcXG5AQCAtMzg3LDEwICszODgsMjAgQEAgQlRGX0lEX0ZMQUdTKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyLCBLRl9TTEVFUEFCTEUpXFxuIEJURl9JRF9GTEFHUyhmdW5jLCBicGZfcmVhbF9pbm9kZSwgS0ZfU0xFRVBBQkxFIHwgS0ZfUkVUX05VTEwpXFxuIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKVxcbiBcXG4rLyogU2lkZS1lZmZlY3Rpbmcga2Z1bmNzIHRoYXQgc3RheSBleGNsdXNpdmUgdG8gTFNNIHByb2dyYW1zLiAqL1xcbitCVEZfU0VUX1NUQVJUKGJwZl9mc19rZnVuY19sc21fb25seV9pZHMpXFxuK0JURl9JRChmdW5jLCBicGZfc2V0X2RlbnRyeV94YXR0cilcXG4rQlRGX0lEKGZ1bmMsIGJwZl9yZW1vdmVfZGVudHJ5X3hhdHRyKVxcbitCVEZfU0VUX0VORChicGZfZnNfa2Z1bmNfbHNtX29ubHlfaWRzKVxcbitcXG4gc3RhdGljIGludCBicGZfZnNfa2Z1bmNzX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcXG4ge1xcbi1cXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFxcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpIHx8XFxuLVxcdCAgICBwcm9nLVxcdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNKVxcbitcXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFxcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpKVxcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0aWYgKHByb2ctXFx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pXFxuK1xcdFxcdHJldHVybiAwO1xcbitcXHRpZiAoYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKHByb2cpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAhYnRmX2lkX3NldF9jb250YWlucyhcXHUwMDI2YnBmX2ZzX2tmdW5jX2xzbV9vbmx5X2lkcywga2Z1bmNfaWQpKVxcbiBcXHRcXHRyZXR1cm4gMDtcXG4gXFx0cmV0dXJuIC1FQUNDRVM7XFxuIH1cXG5AQCAtNDMzLDcgKzQ0NCwxMyBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYnBmX2ZzX2tmdW5jX3NldCA9IHtcXG4gXFxuIHN0YXRpYyBpbnQgX19pbml0IGJwZl9mc19rZnVuY3NfaW5pdCh2b2lkKVxcbiB7XFxuLVxcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcXHUwMDI2YnBmX2ZzX2tmdW5jX3NldCk7XFxuK1xcdGludCByZXQ7XFxuK1xcbitcXHRyZXQgPSByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfTFNNLCBcXHUwMDI2YnBmX2ZzX2tmdW5jX3NldCk7XFxuK1xcdGlmIChyZXQgfHwgIUlTX0VOQUJMRUQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRikpXFxuK1xcdFxcdHJldHVybiByZXQ7XFxuK1xcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcXG4rXFx0XFx0XFx0XFx0XFx0IFxcdTAwMjZicGZfZnNfa2Z1bmNfc2V0KTtcXG4gfVxcbiBcXG4gbGF0ZV9pbml0Y2FsbChicGZfZnNfa2Z1bmNzX2luaXQpO1xcbmRpZmYgLS1naXQgYS9mcy9leGVjLmMgYi9mcy9leGVjLmNcXG5pbmRleCBiOTJmZTdkYjE3NmNmZi4uN2M5ZTI4ZjU0OWE0NTMgMTAwNjQ0XFxuLS0tIGEvZnMvZXhlYy5jXFxuKysrIGIvZnMvZXhlYy5jXFxuQEAgLTE0MTgsNiArMTQxOCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxcbiBcXHQvKiBJZiBhIGJpbmZtdCBjaGFuZ2VkIHRoZSBpbnRlcnAsIGZyZWUgaXQuICovXFxuIFxcdGlmIChicHJtLVxcdTAwM2VpbnRlcnAgIT0gYnBybS1cXHUwMDNlZmlsZW5hbWUpXFxuIFxcdFxcdGtmcmVlKGJwcm0tXFx1MDAzZWludGVycCk7XFxuK1xcdGtmcmVlKGJwcm0tXFx1MDAzZWJwZl9pbnRlcnApO1xcbiBcXHRrZnJlZShicHJtLVxcdTAwM2VmZHBhdGgpO1xcbiBcXHRrZnJlZShicHJtKTtcXG4gfVxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxcbmluZGV4IDAwMDAwMDAwMDAwMDAwLi5lMWQyNmM0MzAxZGEyY1xcbi0tLSAvZGV2L251bGxcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcXG5AQCAtMCwwICsxLDQ5IEBAXFxuKy8qIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wICovXFxuKyNpZm5kZWYgX0xJTlVYX0JJTkZNVF9NSVNDX0hcXG4rI2RlZmluZSBfTElOVVhfQklORk1UX01JU0NfSFxcbitcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3R5cGVzLmhcXHUwMDNlXFxuK1xcbitzdHJ1Y3QgYnBmX3Byb2c7XFxuK3N0cnVjdCBsaW51eF9iaW5wcm07XFxuK3N0cnVjdCB1c2VyX25hbWVzcGFjZTtcXG4rXFxuKyNkZWZpbmUgQklORk1UX01JU0NfT1BTX05BTUVfTUFYIDE2XFxuK1xcbisvKipcXG4rICogc3RydWN0IGJpbmZtdF9taXNjX29wcyAtIGJwZi1iYWNrZWQgYmluYXJ5IHR5cGUgaGFuZGxlclxcbisgKiBAbG9hZDogbWF0Y2ggQGJwcm0gYW5kIHNlbGVjdCBhbiBpbnRlcnByZXRlciB2aWEgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCk7XFxuKyAqICAgICAgICByZXR1cm5zIFxcdTAwM2UgMCBpZiB0aGUgYmluYXJ5IHdhcyBoYW5kbGVkLCAwIHRvIGZhbGwgdGhyb3VnaCB0byB0aGVcXG4rICogICAgICAgIGhhbmRsZXJzIHJlZ2lzdGVyZWQgYWZ0ZXIgdGhpcyBvbmUsIGEgbmVnYXRpdmUgZXJybm8gdG8gZmFpbCB0aGVcXG4rICogICAgICAgIGV4ZWM7IC1FTk9FWEVDIGRvZXMgbm90IGZhaWwgdGhlIGV4ZWMgYnV0IG1vdmVzIG9uIHRvIHRoZVxcbisgKiAgICAgICAgcmVtYWluaW5nIGJpbmFyeSBmb3JtYXRzXFxuKyAqIEBuYW1lOiBuYW1lIHRoYXQgJ0InIGVudHJpZXMgcmVmZXJlbmNlIHRoZSBoYW5kbGVyIGJ5XFxuKyAqL1xcbitzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIHtcXG4rXFx0aW50ICgqbG9hZCkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSk7XFxuK1xcdGNoYXIgbmFtZVtCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVhdO1xcbit9O1xcbitcXG4rI2lmZGVmIENPTkZJR19CSU5GTVRfTUlTQ19CUEZcXG4rY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqYmluZm10X21pc2NfZ2V0X29wcyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXFxuK1xcdFxcdFxcdFxcdFxcdFxcdCAgY29uc3QgY2hhciAqbmFtZSk7XFxuK3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpO1xcbitib29sIGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2cpO1xcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKlxcbitiaW5mbXRfbWlzY19nZXRfb3BzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucywgY29uc3QgY2hhciAqbmFtZSlcXG4re1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbitcXG4rc3RhdGljIGlubGluZSB2b2lkIGJpbmZtdF9taXNjX3B1dF9vcHMoY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzKVxcbit7XFxuK31cXG4rXFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBicGZfcHJvZ19pc19iaW5mbXRfbWlzY19vcHMoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nKVxcbit7XFxuK1xcdHJldHVybiBmYWxzZTtcXG4rfVxcbisjZW5kaWYgLyogQ09ORklHX0JJTkZNVF9NSVNDX0JQRiAqL1xcbitcXG4rI2VuZGlmIC8qIF9MSU5VWF9CSU5GTVRfTUlTQ19IICovXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvYmluZm10cy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcXG5pbmRleCAyYzc3ZTM4M2U3Mzc1Ny4uMDA3MGQyMDdkNTRmMDQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaFxcbkBAIC02NSw2ICs2NSw3IEBAIHN0cnVjdCBsaW51eF9iaW5wcm0ge1xcbiBcXHRcXHRcXHRcXHQgICBvZiB0aGUgdGltZSBzYW1lIGFzIGZpbGVuYW1lLCBidXQgY291bGQgYmVcXG4gXFx0XFx0XFx0XFx0ICAgZGlmZmVyZW50IGZvciBiaW5mbXRfe21pc2Msc2NyaXB0fSAqL1xcbiBcXHRjb25zdCBjaGFyICpmZHBhdGg7XFx0LyogZ2VuZXJhdGVkIGZpbGVuYW1lIGZvciBleGVjdmVhdCAqL1xcbitcXHRjb25zdCBjaGFyICpicGZfaW50ZXJwO1xcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cXG4gXFx0dW5zaWduZWQgaW50ZXJwX2ZsYWdzO1xcbiBcXHRpbnQgZXhlY2ZkO1xcdFxcdC8qIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZXhlY3V0YWJsZSAqL1xcbiBcXHR1bnNpZ25lZCBsb25nIGV4ZWM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTA4VDA2OjAwOjI5LjIwNjY5NjYxWiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjc4NzIxNDc5MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJCSU5GTVRfTUlTQ19CUEZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJicGZfYmlucHJtX3NldF9pbnRlcnBcIixcbiAgICBcImJtX2JwZl9yZWdcIixcbiAgICBcImJtX2JwZl91bnJlZ1wiLFxuICAgIFwiY3JlYXRlX2VudHJ5XCIsXG4gICAgXCJibV9yZWdpc3Rlcl93cml0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gYWN0IGFzIGhhbmRsZXJzIGZvciBiaW5mbXRfbWlzYy4gSXQgYWRkcyBuZXcgQlBGIHN0cnVjdF9vcHMgYW5kIGtmdW5jcywgYW5kIG1vZGlmaWVzIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RyYXRpb24gYW5kIGV4ZWN1dGlvbiBsb2dpYy4gRnV6emluZyBzaG91bGQgZm9jdXMgb24gdGhlIEJQRiByZWdpc3RyYXRpb24vdW5yZWdpc3RyYXRpb24sIHRoZSBuZXcga2Z1bmMsIGFuZCB0aGUgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIHBhdGguXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYTY5MTJkMDk0NjRjOTNmMzY1MDU0ZGQ2NzNjMmFkMTk3ZjMwNTRmM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDggMDY6MDA6MjYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdCBiL0RvY3VtZW50YXRpb24vYWRtaW4tZ3VpZGUvYmluZm10LW1pc2MucnN0XG5pbmRleCBjMGEzNGZiZjgwMjJiNS4uYzBlZmIwNzczNjI4NDMgMTAwNjQ0XG4tLS0gYS9Eb2N1bWVudGF0aW9uL2FkbWluLWd1aWRlL2JpbmZtdC1taXNjLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi9hZG1pbi1ndWlkZS9iaW5mbXQtbWlzYy5yc3RcbkBAIC0yNiwxMSArMjYsMTMgQEAgSGVyZSBpcyB3aGF0IHRoZSBmaWVsZHMgbWVhbjpcbiAgICBuYW1lIGJlbG93IGBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjYGA7IGNhbm5vdCBjb250YWluIHNsYXNoZXMgYGAvYGAgZm9yXG4gICAgb2J2aW91cyByZWFzb25zLlxuIC0gYGB0eXBlYGBcbi0gICBpcyB0aGUgdHlwZSBvZiByZWNvZ25pdGlvbi4gR2l2ZSBgYE1gYCBmb3IgbWFnaWMgYW5kIGBgRWBgIGZvciBleHRlbnNpb24uXG4rICAgaXMgdGhlIHR5cGUgb2YgcmVjb2duaXRpb24uIEdpdmUgYGBNYGAgZm9yIG1hZ2ljLCBgYEVgYCBmb3IgZXh0ZW5zaW9uIGFuZFxuKyAgIGBgQmBgIGZvciBhIGJwZi1iYWNrZWQgaGFuZGxlciAoc2VlIGJlbG93KS5cbiAtIGBgb2Zmc2V0YGBcbiAgICBpcyB0aGUgb2Zmc2V0IG9mIHRoZSBtYWdpYy9tYXNrIGluIHRoZSBmaWxlLCBjb3VudGVkIGluIGJ5dGVzLiBUaGlzXG4gICAgZGVmYXVsdHMgdG8gMCBpZiB5b3Ugb21pdCBpdCAoaS5lLiB5b3Ugd3JpdGUgYGA6bmFtZTp0eXBlOjptYWdpYy4uLmBgKS5cbi0gICBJZ25vcmVkIHdoZW4gdXNpbmcgZmlsZW5hbWUgZXh0ZW5zaW9uIG1hdGNoaW5nLlxuKyAgIElnbm9yZWQgd2hlbiB1c2luZyBmaWxlbmFtZSBleHRlbnNpb24gbWF0Y2hpbmcuIEZvciBgYEJgYCBlbnRyaWVzIHRoaXNcbisgICBmaWVsZCBjYXJyaWVzIHRoZSBuYW1lIG9mIHRoZSBicGYgaGFuZGxlciBpbnN0ZWFkLlxuIC0gYGBtYWdpY2BgXG4gICAgaXMgdGhlIGJ5dGUgc2VxdWVuY2UgYmluZm10X21pc2MgaXMgbWF0Y2hpbmcgZm9yLiBUaGUgbWFnaWMgc3RyaW5nXG4gICAgbWF5IGNvbnRhaW4gaGV4LWVuY29kZWQgY2hhcmFjdGVycyBsaWtlIGBgXFx4MGFgYCBvciBgYFxceEE0YGAuIE5vdGUgdGhhdCB5b3VcbkBAIC05Nyw2ICs5OSw0MCBAQCBUaGVyZSBhcmUgc29tZSByZXN0cmljdGlvbnM6XG4gICAgb2Zmc2V0K3NpemUobWFnaWMpIGhhcyB0byBiZSBsZXNzIHRoYW4gMTI4XG4gIC0gdGhlIGludGVycHJldGVyIHN0cmluZyBtYXkgbm90IGV4Y2VlZCAxMjcgY2hhcmFjdGVyc1xuIFxuK1xuK2JwZi1iYWNrZWQgaGFuZGxlcnNcbistLS0tLS0tLS0tLS0tLS0tLS0tXG4rXG4rV2l0aCBgYENPTkZJR19CSU5GTVRfTUlTQ19CUEZgYCBib3RoIHRoZSBtYXRjaGluZyBhbmQgdGhlIGludGVycHJldGVyXG4rc2VsZWN0aW9uIGNhbiBiZSBkZWxlZ2F0ZWQgdG8gYSBicGYgcHJvZ3JhbS4gQSBoYW5kbGVyIGlzIGFuIGluc3RhbmNlIG9mIHRoZVxuK2BgYmluZm10X21pc2Nfb3BzYGAgc3RydWN0X29wcyB3aXRoIGEgc2xlZXBhYmxlIGBgbG9hZGBgIHByb2dyYW0gYW5kIGFcbitgYG5hbWVgYC4gT25jZSB0aGUgc3RydWN0X29wcyBtYXAgaXMgcmVnaXN0ZXJlZCB0aGUgaGFuZGxlciBjYW4gYmUgYWN0aXZhdGVkXG4rd2l0aCBhIGBgQmBgIGVudHJ5IHRoYXQgcmVmZXJlbmNlcyBpdCBieSBuYW1lIGFuZCBjYXJyaWVzIG5laXRoZXIgbWFnaWMsXG4rbWFzaywgbm9yIGludGVycHJldGVyOjpcbitcbisgICAgZWNobyAnOnFlbXU6QjpteV9oYW5kbGVyOjo6OicgXHUwMDNlIHJlZ2lzdGVyXG4rXG4rQXQgZXhlYyB0aW1lIHRoZSBgYGxvYWRgYCBwcm9ncmFtIHJlY2VpdmVzIHRoZSBgYGxpbnV4X2JpbnBybWBgIG9mIHRoZVxuK2JpbmFyeS4gSXQgY2FuIG1hdGNoIG9uIHRoZSBoZWFkZXIgaW4gYGBicHJtLVx1MDAzZWJ1ZmBgLCByZWFkIHRoZSBmaWxlIGl0c2VsZixcbitlLmcuIHRvIHBhcnNlIEVMRiBwcm9ncmFtIGhlYWRlcnMsIGFuZCBkZXJpdmUgdGhlIGludGVycHJldGVyIGZyb20gdGhlXG4rYmluYXJ5J3MgbG9jYXRpb24uIEl0IHNlbGVjdHMgdGhlIGludGVycHJldGVyIGJ5IGNhbGxpbmcgdGhlXG4rYGBicGZfYmlucHJtX3NldF9pbnRlcnAoKWBgIGtmdW5jIHdpdGggYW4gYWJzb2x1dGUgcGF0aCBhbmQgcmV0dXJuaW5nIGFcbitwb3NpdGl2ZSB2YWx1ZS4gUmV0dXJuaW5nIGBgMGBgIGZhbGxzIHRocm91Z2ggdG8gdGhlIGhhbmRsZXJzIHJlZ2lzdGVyZWRcbithZnRlciB0aGlzIG9uZSwgYSBuZWdhdGl2ZSBlcnJubyBmYWlscyB0aGUgZXhlYyB3aXRoIHRoYXQgZXJyb3I7XG4rYGAtRU5PRVhFQ2BgIGVuZHMgdGhlIGJpbmZtdF9taXNjIHNlYXJjaCBidXQgbGV0cyB0aGUgcmVtYWluaW5nIGJpbmFyeVxuK2Zvcm1hdHMgaGF2ZSBhIGdvLiBUaGUgaW50ZXJwcmV0ZXIgaXMgb3BlbmVkIHdpdGggdGhlIGNyZWRlbnRpYWxzIG9mIHRoZVxuK3Rhc2sgZG9pbmcgdGhlIGV4ZWMsIGV4YWN0bHkgYXMgYSBzdGF0aWNhbGx5IHJlZ2lzdGVyZWQgaW50ZXJwcmV0ZXIgd291bGRcbitiZS5cbitcbitIYW5kbGVycyBhcmUgbG9va2VkIHVwIGluIHRoZSB1c2VyIG5hbWVzcGFjZSB0aGUgc3RydWN0X29wcyBtYXAgd2FzXG4rcmVnaXN0ZXJlZCBpbiwgZmFsbGluZyBiYWNrIHRvIGFuY2VzdG9yIG5hbWVzcGFjZXMsIG1pcnJvcmluZyBob3dcbitiaW5mbXRfbWlzYyBpbnN0YW5jZXMgdGhlbXNlbHZlcyBhcmUgbG9va2VkIHVwLiBUaGUgZW50cnkga2VlcHMgdGhlIGhhbmRsZXJcbithbGl2ZTsgZGVsZXRpbmcgdGhlIHN0cnVjdF9vcHMgbWFwIG9ubHkgcHJldmVudHMgbmV3IHJlZ2lzdHJhdGlvbnMuXG4rXG4rVGhlIGBgQ2BgIGFuZCBgYEZgYCBmbGFncyBjYW5ub3QgYmUgY29tYmluZWQgd2l0aCBgYEJgYCBlbnRyaWVzOiB0aGVyZSBpcyBub1xuK2ZpeGVkIGludGVycHJldGVyIHRvIHByZS1vcGVuIGFuZCBhIHByb2dyYW0tc2VsZWN0ZWQgaW50ZXJwcmV0ZXIgbXVzdCBuZXZlclxuK2luaGVyaXQgdGhlIGNyZWRlbnRpYWxzIG9mIGEgc2V0dWlkIGJpbmFyeS5cbitcbiBUbyB1c2UgYmluZm10X21pc2MgeW91IGhhdmUgdG8gbW91bnQgaXQgZmlyc3QuIFlvdSBjYW4gbW91bnQgaXQgd2l0aFxuIGBgbW91bnQgLXQgYmluZm10X21pc2Mgbm9uZSAvcHJvYy9zeXMvZnMvYmluZm10X21pc2NgYCBjb21tYW5kLCBvciB5b3UgY2FuIGFkZFxuIGEgbGluZSBgYG5vbmUgIC9wcm9jL3N5cy9mcy9iaW5mbXRfbWlzYyBiaW5mbXRfbWlzYyBkZWZhdWx0cyAwIDBgYCB0byB5b3VyXG5kaWZmIC0tZ2l0IGEvZnMvS2NvbmZpZy5iaW5mbXQgYi9mcy9LY29uZmlnLmJpbmZtdFxuaW5kZXggMTk0OWUyNWM3NzQxYjEuLmRhZWFjNDg4OWQwM2VmIDEwMDY0NFxuLS0tIGEvZnMvS2NvbmZpZy5iaW5mbXRcbisrKyBiL2ZzL0tjb25maWcuYmluZm10XG5AQCAtMTY4LDYgKzE2OCwyMCBAQCBjb25maWcgQklORk1UX01JU0NcbiBcdCAgeW91IGhhdmUgdXNlIGZvciBpdDsgdGhlIG1vZHVsZSBpcyBjYWxsZWQgYmluZm10X21pc2MuIElmIHlvdVxuIFx0ICBkb24ndCBrbm93IHdoYXQgdG8gYW5zd2VyIGF0IHRoaXMgcG9pbnQsIHNheSBZLlxuIFxuK2NvbmZpZyBCSU5GTVRfTUlTQ19CUEZcbitcdGJvb2wgXCJCUEYtc2VsZWN0ZWQgaW50ZXJwcmV0ZXJzIGZvciBtaXNjIGJpbmFyaWVzXCJcbitcdGRlcGVuZHMgb24gQklORk1UX01JU0M9eVxuK1x0ZGVwZW5kcyBvbiBCUEZfU1lTQ0FMTCBcdTAwMjZcdTAwMjYgQlBGX0pJVCBcdTAwMjZcdTAwMjYgREVCVUdfSU5GT19CVEZcbitcdGhlbHBcbitcdCAgQWxsb3cgYmluZm10X21pc2MgYmluYXJ5IHR5cGUgaGFuZGxlcnMgdG8gYmUgaW1wbGVtZW50ZWQgYXMgYnBmXG4rXHQgIHN0cnVjdF9vcHMgcHJvZ3JhbXMuIEluc3RlYWQgb2YgbWF0Y2hpbmcgYSBmaXhlZCBtYWdpYyBhbmRcbitcdCAgcmVkaXJlY3RpbmcgdG8gYSBmaXhlZCBpbnRlcnByZXRlciByZWNvcmRlZCBhdCByZWdpc3RyYXRpb24gdGltZVxuK1x0ICBzdWNoIGhhbmRsZXJzIG1hdGNoIGJpbmFyaWVzIHByb2dyYW1tYXRpY2FsbHkgYW5kIGNvbXB1dGUgdGhlXG4rXHQgIGludGVycHJldGVyIHRvIHVzZSBwZXIgYmluYXJ5LCBlLmcuIHJlbGF0aXZlIHRvIHRoZSBsb2NhdGlvbiBvZlxuK1x0ICB0aGUgYmluYXJ5IGl0c2VsZi5cbitcbitcdCAgSWYgeW91IGRvbid0IGtub3cgd2hhdCB0byBhbnN3ZXIgYXQgdGhpcyBwb2ludCwgc2F5IE4uXG4rXG4gY29uZmlnIENPUkVEVU1QXG4gXHRib29sIFwiRW5hYmxlIGNvcmUgZHVtcCBzdXBwb3J0XCIgaWYgRVhQRVJUXG4gXHRkZWZhdWx0IHlcbmRpZmYgLS1naXQgYS9mcy9NYWtlZmlsZSBiL2ZzL01ha2VmaWxlXG5pbmRleCA4OWE4YTlkMjA3ZDFjNS4uNDk5YzY2NzBmMGMxODMgMTAwNjQ0XG4tLS0gYS9mcy9NYWtlZmlsZVxuKysrIGIvZnMvTWFrZWZpbGVcbkBAIC0zMyw2ICszMyw3IEBAIG9iai0kKENPTkZJR19GU19FTkNSWVBUSU9OKVx0Kz0gY3J5cHRvL1xuIG9iai0kKENPTkZJR19GU19WRVJJVFkpXHRcdCs9IHZlcml0eS9cbiBvYmotJChDT05GSUdfRklMRV9MT0NLSU5HKSAgICAgICs9IGxvY2tzLm9cbiBvYmotJChDT05GSUdfQklORk1UX01JU0MpXHQrPSBiaW5mbXRfbWlzYy5vXG4rb2JqLSQoQ09ORklHX0JJTkZNVF9NSVNDX0JQRilcdCs9IGJpbmZtdF9taXNjX2JwZi5vXG4gb2JqLSQoQ09ORklHX0JJTkZNVF9TQ1JJUFQpXHQrPSBiaW5mbXRfc2NyaXB0Lm9cbiBvYmotJChDT05GSUdfQklORk1UX0VMRilcdCs9IGJpbmZtdF9lbGYub1xuIG9iai0kKENPTkZJR19DT01QQVRfQklORk1UX0VMRilcdCs9IGNvbXBhdF9iaW5mbXRfZWxmLm9cbmRpZmYgLS1naXQgYS9mcy9iaW5mbXRfbWlzYy5jIGIvZnMvYmluZm10X21pc2MuY1xuaW5kZXggODQzNDlmY2I5M2YxM2EuLmI4MGUyMTliYTU4NzZiIDEwMDY0NFxuLS0tIGEvZnMvYmluZm10X21pc2MuY1xuKysrIGIvZnMvYmluZm10X21pc2MuY1xuQEAgLTE3LDYgKzE3LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zY2hlZC9tbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbWFnaWMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdF9taXNjLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9jdHlwZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc3RyaW5nX2hlbHBlcnMuaFx1MDAzZVxuQEAgLTQxLDcgKzQyLDcgQEAgZW51bSB7XG4gXHRWRVJCT1NFX1NUQVRVUyA9IDEgLyogbWFrZSBpdCB6ZXJvIHRvIHNhdmUgNDAwIGJ5dGVzIGtlcm5lbCBtZW1vcnkgKi9cbiB9O1xuIFxuLWVudW0ge0VuYWJsZWQsIE1hZ2ljfTtcbitlbnVtIHtFbmFibGVkLCBNYWdpYywgQnBmfTtcbiAjZGVmaW5lIE1JU0NfRk1UX1BSRVNFUlZFX0FSR1YwICgxVUwgXHUwMDNjXHUwMDNjIDMxKVxuICNkZWZpbmUgTUlTQ19GTVRfT1BFTl9CSU5BUlkgKDFVTCBcdTAwM2NcdTAwM2MgMzApXG4gI2RlZmluZSBNSVNDX0ZNVF9DUkVERU5USUFMUyAoMVVMIFx1MDAzY1x1MDAzYyAyOSlcbkBAIC01OCw2ICs1OSw4IEBAIHR5cGVkZWYgc3RydWN0IHtcbiBcdGNoYXIgKm5hbWU7XG4gXHRzdHJ1Y3QgZGVudHJ5ICpkZW50cnk7XG4gXHRzdHJ1Y3QgZmlsZSAqaW50ZXJwX2ZpbGU7XG4rXHRjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpicGZfb3BzO1x0LyogYnBmLWJhY2tlZCBoYW5kbGVyICgnQicpICovXG4rXHRjb25zdCBjaGFyICpicGZfb3BzX25hbWU7XG4gXHRyZWZjb3VudF90IHVzZXJzO1x0XHQvKiBzeW5jIHJlbW92YWwgd2l0aCBsb2FkX21pc2NfYmluYXJ5KCkgKi9cbiB9IE5vZGU7XG4gXG5AQCAtODIsMTQgKzg1LDE5IEBAIHN0YXRpYyBzdHJ1Y3QgZmlsZV9zeXN0ZW1fdHlwZSBibV9mc190eXBlO1xuICAqIHNlYXJjaF9iaW5mbXRfaGFuZGxlciAtIHNlYXJjaCBmb3IgYSBiaW5hcnkgaGFuZGxlciBmb3IgQGJwcm1cbiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlXG4gICogQGJwcm06IGJpbmFyeSBmb3Igd2hpY2ggd2UgYXJlIGxvb2tpbmcgZm9yIGEgaGFuZGxlclxuKyAqIEBicGZfc2tpcDogbnVtYmVyIG9mIGJwZi1iYWNrZWQgaGFuZGxlcnMgdG8gc2tpcCBvdmVyXG4gICpcbiAgKiBTZWFyY2ggZm9yIGEgYmluYXJ5IHR5cGUgaGFuZGxlciBmb3IgQGJwcm0gaW4gdGhlIGxpc3Qgb2YgcmVnaXN0ZXJlZCBiaW5hcnlcbi0gKiB0eXBlIGhhbmRsZXJzLlxuKyAqIHR5cGUgaGFuZGxlcnMuIEEgYnBmLWJhY2tlZCBoYW5kbGVyIGNhbm5vdCBiZSBtYXRjaGVkIGhlcmUgYXMgaXRzIHByb2dyYW1cbisgKiBtdXN0IHJ1biBpbiBzbGVlcGFibGUgY29udGV4dDsgaXQgaXMgcmV0dXJuZWQgYXMgYSBjYW5kaWRhdGUgYW5kIHRoZVxuKyAqIHByb2dyYW0gZGVjaWRlcyBpbiBsb2FkX21pc2NfYmluYXJ5KCkuIEBicGZfc2tpcCBhbGxvd3MgdGhlIGNhbGxlciB0b1xuKyAqIHJlc3VtZSB0aGUgc2VhcmNoIGFmdGVyIHRoZSBmaXJzdCBAYnBmX3NraXAgY2FuZGlkYXRlcyBkZWNsaW5lZC5cbiAgKlxuICAqIFJldHVybjogYmluYXJ5IHR5cGUgbGlzdCBlbnRyeSBvbiBzdWNjZXNzLCBOVUxMIG9uIGZhaWx1cmVcbiAgKi9cbiBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbi1cdFx0XHRcdCAgIHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4rXHRcdFx0XHQgICBzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0ICAgdW5zaWduZWQgaW50IGJwZl9za2lwKVxuIHtcbiBcdGNoYXIgKnAgPSBzdHJyY2hyKGJwcm0tXHUwMDNlaW50ZXJwLCAnLicpO1xuIFx0Tm9kZSAqZTtcbkBAIC0xMDMsNiArMTExLDE1IEBAIHN0YXRpYyBOb2RlICpzZWFyY2hfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuIFx0XHRpZiAoIXRlc3RfYml0KEVuYWJsZWQsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuK1x0XHQvKiBUaGUgcHJvZ3JhbSBkZWNpZGVzIGluIGxvYWRfbWlzY19iaW5hcnkoKS4gKi9cbitcdFx0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbitcdFx0XHRpZiAoYnBmX3NraXApIHtcbitcdFx0XHRcdGJwZl9za2lwLS07XG4rXHRcdFx0XHRjb250aW51ZTtcbitcdFx0XHR9XG4rXHRcdFx0cmV0dXJuIGU7XG4rXHRcdH1cbitcbiBcdFx0LyogRG8gbWF0Y2hpbmcgYmFzZWQgb24gZXh0ZW5zaW9uIGlmIGFwcGxpY2FibGUuICovXG4gXHRcdGlmICghdGVzdF9iaXQoTWFnaWMsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdFx0aWYgKHAgXHUwMDI2XHUwMDI2ICFzdHJjbXAoZS1cdTAwM2VtYWdpYywgcCArIDEpKVxuQEAgLTEzMiw2ICsxNDksNyBAQCBzdGF0aWMgTm9kZSAqc2VhcmNoX2JpbmZtdF9oYW5kbGVyKHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYyxcbiAgKiBnZXRfYmluZm10X2hhbmRsZXIgLSB0cnkgdG8gZmluZCBhIGJpbmFyeSB0eXBlIGhhbmRsZXJcbiAgKiBAbWlzYzogaGFuZGxlIHRvIGJpbmZtdF9taXNjIGluc3RhbmNlXG4gICogQGJwcm06IGJpbmFyeSBmb3Igd2hpY2ggd2UgYXJlIGxvb2tpbmcgZm9yIGEgaGFuZGxlclxuKyAqIEBicGZfc2tpcDogbnVtYmVyIG9mIGJwZi1iYWNrZWQgaGFuZGxlcnMgdG8gc2tpcCBvdmVyXG4gICpcbiAgKiBUcnkgdG8gZmluZCBhIGJpbmZtdCBoYW5kbGVyIGZvciB0aGUgYmluYXJ5IHR5cGUuIElmIG9uZSBpcyBmb3VuZCB0YWtlIGFcbiAgKiByZWZlcmVuY2UgdG8gcHJvdGVjdCBhZ2FpbnN0IHJlbW92YWwgdmlhIGJtX3tlbnRyeSxzdGF0dXN9X3dyaXRlKCkuXG5AQCAtMTM5LDEyICsxNTcsMTMgQEAgc3RhdGljIE5vZGUgKnNlYXJjaF9iaW5mbXRfaGFuZGxlcihzdHJ1Y3QgYmluZm10X21pc2MgKm1pc2MsXG4gICogUmV0dXJuOiBiaW5hcnkgdHlwZSBsaXN0IGVudHJ5IG9uIHN1Y2Nlc3MsIE5VTEwgb24gZmFpbHVyZVxuICAqL1xuIHN0YXRpYyBOb2RlICpnZXRfYmluZm10X2hhbmRsZXIoc3RydWN0IGJpbmZtdF9taXNjICptaXNjLFxuLVx0XHRcdFx0c3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbitcdFx0XHRcdHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0sXG4rXHRcdFx0XHR1bnNpZ25lZCBpbnQgYnBmX3NraXApXG4ge1xuIFx0Tm9kZSAqZTtcbiBcbiBcdHJlYWRfbG9jayhcdTAwMjZtaXNjLVx1MDAzZWVudHJpZXNfbG9jayk7XG4tXHRlID0gc2VhcmNoX2JpbmZtdF9oYW5kbGVyKG1pc2MsIGJwcm0pO1xuK1x0ZSA9IHNlYXJjaF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtLCBicGZfc2tpcCk7XG4gXHRpZiAoZSlcbiBcdFx0cmVmY291bnRfaW5jKFx1MDAyNmUtXHUwMDNldXNlcnMpO1xuIFx0cmVhZF91bmxvY2soXHUwMDI2bWlzYy1cdTAwM2VlbnRyaWVzX2xvY2spO1xuQEAgLTE2NCw2ICsxODMsOCBAQCBzdGF0aWMgdm9pZCBwdXRfYmluZm10X2hhbmRsZXIoTm9kZSAqZSlcbiBcdGlmIChyZWZjb3VudF9kZWNfYW5kX3Rlc3QoXHUwMDI2ZS1cdTAwM2V1c2VycykpIHtcbiBcdFx0aWYgKGUtXHUwMDNlZmxhZ3MgXHUwMDI2IE1JU0NfRk1UX09QRU5fRklMRSlcbiBcdFx0XHRmaWxwX2Nsb3NlKGUtXHUwMDNlaW50ZXJwX2ZpbGUsIE5VTEwpO1xuK1x0XHRpZiAoZS1cdTAwM2VicGZfb3BzKVxuK1x0XHRcdGJpbmZtdF9taXNjX3B1dF9vcHMoZS1cdTAwM2VicGZfb3BzKTtcbiBcdFx0a2ZyZWUoZSk7XG4gXHR9XG4gfVxuQEAgLTIwNiwxMiArMjI3LDE1IEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0c3RydWN0IGZpbGUgKmludGVycF9maWxlID0gTlVMTDtcbiBcdGludCByZXR2YWwgPSAtRU5PRVhFQztcbiBcdHN0cnVjdCBiaW5mbXRfbWlzYyAqbWlzYztcbitcdGNvbnN0IGNoYXIgKmludGVycHJldGVyO1xuK1x0dW5zaWduZWQgaW50IGJwZl9za2lwID0gMDtcbiBcbiBcdG1pc2MgPSBsb2FkX2JpbmZtdF9taXNjKCk7XG4gXHRpZiAoIW1pc2MtXHUwMDNlZW5hYmxlZClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbi1cdGZtdCA9IGdldF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtKTtcbityZXRyeTpcbitcdGZtdCA9IGdldF9iaW5mbXRfaGFuZGxlcihtaXNjLCBicHJtLCBicGZfc2tpcCk7XG4gXHRpZiAoIWZtdClcbiBcdFx0cmV0dXJuIHJldHZhbDtcbiBcbkBAIC0yMjAsNiArMjQ0LDMyIEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0aWYgKGJwcm0tXHUwMDNlaW50ZXJwX2ZsYWdzIFx1MDAyNiBCSU5QUk1fRkxBR1NfUEFUSF9JTkFDQ0VTU0lCTEUpXG4gXHRcdGdvdG8gcmV0O1xuIFxuK1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2Zm10LVx1MDAzZWZsYWdzKSkge1xuK1x0XHRyZXR2YWwgPSBmbXQtXHUwMDNlYnBmX29wcy1cdTAwM2Vsb2FkKGJwcm0pO1xuK1x0XHRpZiAocmV0dmFsIFx1MDAzYyAwKSB7XG4rXHRcdFx0LyogS2VlcCBhIHByb2dyYW0tc3VwcGxpZWQgZXJyb3Igd2l0aGluIGVycm5vIHJhbmdlLiAqL1xuK1x0XHRcdGlmIChyZXR2YWwgXHUwMDNjIC1NQVhfRVJSTk8pXG4rXHRcdFx0XHRyZXR2YWwgPSAtRU5PRVhFQztcbitcdFx0XHRnb3RvIHJldDtcbitcdFx0fVxuK1x0XHRpZiAoIXJldHZhbCkge1xuK1x0XHRcdC8qIERlY2xpbmVkLCBtb3ZlIG9uIHRvIGxhdGVyIGhhbmRsZXJzLiAqL1xuK1x0XHRcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycCk7XG4rXHRcdFx0YnBybS1cdTAwM2VicGZfaW50ZXJwID0gTlVMTDtcbitcdFx0XHRwdXRfYmluZm10X2hhbmRsZXIoZm10KTtcbitcdFx0XHRicGZfc2tpcCsrO1xuK1x0XHRcdHJldHZhbCA9IC1FTk9FWEVDO1xuK1x0XHRcdGdvdG8gcmV0cnk7XG4rXHRcdH1cbitcdFx0LyogU2VsZWN0aW5nIGFuIGludGVycHJldGVyIGlzIHBhcnQgb2YgdGhlIGNvbnRyYWN0LiAqL1xuK1x0XHRyZXR2YWwgPSAtRU5PRVhFQztcbitcdFx0aWYgKCFicHJtLVx1MDAzZWJwZl9pbnRlcnApXG4rXHRcdFx0Z290byByZXQ7XG4rXHRcdGludGVycHJldGVyID0gYnBybS1cdTAwM2VicGZfaW50ZXJwO1xuK1x0fSBlbHNlIHtcbitcdFx0aW50ZXJwcmV0ZXIgPSBmbXQtXHUwMDNlaW50ZXJwcmV0ZXI7XG4rXHR9XG4rXG4gXHRpZiAoZm10LVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9QUkVTRVJWRV9BUkdWMCkge1xuIFx0XHRicHJtLVx1MDAzZWludGVycF9mbGFncyB8PSBCSU5QUk1fRkxBR1NfUFJFU0VSVkVfQVJHVjA7XG4gXHR9IGVsc2Uge1xuQEAgLTIzOCwxMyArMjg4LDEzIEBAIHN0YXRpYyBpbnQgbG9hZF9taXNjX2JpbmFyeShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0YnBybS1cdTAwM2VhcmdjKys7XG4gXG4gXHQvKiBhZGQgdGhlIGludGVycCBhcyBhcmd2WzBdICovXG4tXHRyZXR2YWwgPSBjb3B5X3N0cmluZ19rZXJuZWwoZm10LVx1MDAzZWludGVycHJldGVyLCBicHJtKTtcbitcdHJldHZhbCA9IGNvcHlfc3RyaW5nX2tlcm5lbChpbnRlcnByZXRlciwgYnBybSk7XG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHJldDtcbiBcdGJwcm0tXHUwMDNlYXJnYysrO1xuIFxuIFx0LyogVXBkYXRlIGludGVycCBpbiBjYXNlIGJpbmZtdF9zY3JpcHQgbmVlZHMgaXQuICovXG4tXHRyZXR2YWwgPSBicHJtX2NoYW5nZV9pbnRlcnAoZm10LVx1MDAzZWludGVycHJldGVyLCBicHJtKTtcbitcdHJldHZhbCA9IGJwcm1fY2hhbmdlX2ludGVycChpbnRlcnByZXRlciwgYnBybSk7XG4gXHRpZiAocmV0dmFsIFx1MDAzYyAwKVxuIFx0XHRnb3RvIHJldDtcbiBcbkBAIC0yNTMsNyArMzAzLDcgQEAgc3RhdGljIGludCBsb2FkX21pc2NfYmluYXJ5KHN0cnVjdCBsaW51eF9iaW5wcm0gKmJwcm0pXG4gXHRcdGlmICghSVNfRVJSKGludGVycF9maWxlKSlcbiBcdFx0XHRkZW55X3dyaXRlX2FjY2VzcyhpbnRlcnBfZmlsZSk7XG4gXHR9IGVsc2Uge1xuLVx0XHRpbnRlcnBfZmlsZSA9IG9wZW5fZXhlYyhmbXQtXHUwMDNlaW50ZXJwcmV0ZXIpO1xuK1x0XHRpbnRlcnBfZmlsZSA9IG9wZW5fZXhlYyhpbnRlcnByZXRlcik7XG4gXHR9XG4gXHRyZXR2YWwgPSBQVFJfRVJSKGludGVycF9maWxlKTtcbiBcdGlmIChJU19FUlIoaW50ZXJwX2ZpbGUpKVxuQEAgLTI2NSw2ICszMTUsOSBAQCBzdGF0aWMgaW50IGxvYWRfbWlzY19iaW5hcnkoc3RydWN0IGxpbnV4X2JpbnBybSAqYnBybSlcbiBcbiBcdHJldHZhbCA9IDA7XG4gcmV0OlxuK1x0LyogQSBwcm9ncmFtLXNlbGVjdGVkIGludGVycHJldGVyIGlzIGNvbnN1bWVkIGJ5IHRoaXMgZXhlYyBhdHRlbXB0LiAqL1xuK1x0a2ZyZWUoYnBybS1cdTAwM2VicGZfaW50ZXJwKTtcbitcdGJwcm0tXHUwMDNlYnBmX2ludGVycCA9IE5VTEw7XG4gXG4gXHQvKlxuIFx0ICogSWYgd2UgYWN0dWFsbHkgcHV0IHRoZSBub2RlIGhlcmUgYWxsIGNvbmN1cnJlbnQgY2FsbHMgdG9cbkBAIC00MDQsMTMgKzQ1Nyw0NyBAQCBzdGF0aWMgTm9kZSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcbiBcdFx0cHJfZGVidWcoXCJyZWdpc3RlcjogdHlwZTogTSAobWFnaWMpXFxuXCIpO1xuIFx0XHRlLVx1MDAzZWZsYWdzID0gKDEgXHUwMDNjXHUwMDNjIEVuYWJsZWQpIHwgKDEgXHUwMDNjXHUwMDNjIE1hZ2ljKTtcbiBcdFx0YnJlYWs7XG4rXHRjYXNlICdCJzpcbitcdFx0aWYgKCFJU19FTkFCTEVEKENPTkZJR19CSU5GTVRfTUlTQ19CUEYpKVxuK1x0XHRcdGdvdG8gZWludmFsO1xuK1x0XHRwcl9kZWJ1ZyhcInJlZ2lzdGVyOiB0eXBlOiBCIChicGYpXFxuXCIpO1xuK1x0XHRlLVx1MDAzZWZsYWdzID0gKDEgXHUwMDNjXHUwMDNjIEVuYWJsZWQpIHwgKDEgXHUwMDNjXHUwMDNjIEJwZik7XG4rXHRcdGJyZWFrO1xuIFx0ZGVmYXVsdDpcbiBcdFx0Z290byBlaW52YWw7XG4gXHR9XG4gXHRpZiAoKnArKyAhPSBkZWwpXG4gXHRcdGdvdG8gZWludmFsO1xuIFxuLVx0aWYgKHRlc3RfYml0KE1hZ2ljLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuK1x0aWYgKHRlc3RfYml0KEJwZiwgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbitcdFx0Y2hhciAqcztcbitcbitcdFx0LyogVGhlICdvZmZzZXQnIGZpZWxkIGNhcnJpZXMgdGhlIGhhbmRsZXIgbmFtZS4gKi9cbitcdFx0cyA9IHN0cmNocihwLCBkZWwpO1xuK1x0XHRpZiAoIXMpXG4rXHRcdFx0Z290byBlaW52YWw7XG4rXHRcdCpzKysgPSAnXFwwJztcbitcdFx0ZS1cdTAwM2VicGZfb3BzX25hbWUgPSBwO1xuK1x0XHRpZiAoIWUtXHUwMDNlYnBmX29wc19uYW1lWzBdIHx8XG4rXHRcdCAgICBzdHJsZW4oZS1cdTAwM2VicGZfb3BzX25hbWUpIFx1MDAzZT0gQklORk1UX01JU0NfT1BTX05BTUVfTUFYKVxuK1x0XHRcdGdvdG8gZWludmFsO1xuK1x0XHRwID0gcztcbitcdFx0cHJfZGVidWcoXCJyZWdpc3RlcjogYnBmIGhhbmRsZXI6IHslc31cXG5cIiwgZS1cdTAwM2VicGZfb3BzX25hbWUpO1xuK1xuK1x0XHQvKiBUaGUgJ21hZ2ljJyBmaWVsZCBtdXN0IGJlIGVtcHR5LiAqL1xuK1x0XHRzID0gc3RyY2hyKHAsIGRlbCk7XG4rXHRcdGlmICghcyB8fCBzICE9IHApXG4rXHRcdFx0Z290byBlaW52YWw7XG4rXHRcdCpzKysgPSAnXFwwJztcbitcdFx0cCA9IHM7XG4rXG4rXHRcdC8qIFRoZSAnbWFzaycgZmllbGQgbXVzdCBiZSBlbXB0eS4gKi9cbitcdFx0cyA9IHN0cmNocihwLCBkZWwpO1xuK1x0XHRpZiAoIXMgfHwgcyAhPSBwKVxuK1x0XHRcdGdvdG8gZWludmFsO1xuK1x0XHQqcysrID0gJ1xcMCc7XG4rXHRcdHAgPSBzO1xuK1x0fSBlbHNlIGlmICh0ZXN0X2JpdChNYWdpYywgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbiBcdFx0LyogSGFuZGxlIHRoZSAnTScgKG1hZ2ljKSBmb3JtYXQuICovXG4gXHRcdGNoYXIgKnM7XG4gXG5AQCAtNTI0LDggKzYxMSwxMyBAQCBzdGF0aWMgTm9kZSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcbiBcdGlmICghcClcbiBcdFx0Z290byBlaW52YWw7XG4gXHQqcCsrID0gJ1xcMCc7XG4tXHRpZiAoIWUtXHUwMDNlaW50ZXJwcmV0ZXJbMF0pXG4rXHRpZiAodGVzdF9iaXQoQnBmLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuK1x0XHQvKiBUaGUgcHJvZ3JhbSBzZWxlY3RzIHRoZSBpbnRlcnByZXRlciBhdCBleGVjIHRpbWUuICovXG4rXHRcdGlmIChlLVx1MDAzZWludGVycHJldGVyWzBdKVxuK1x0XHRcdGdvdG8gZWludmFsO1xuK1x0fSBlbHNlIGlmICghZS1cdTAwM2VpbnRlcnByZXRlclswXSkge1xuIFx0XHRnb3RvIGVpbnZhbDtcbitcdH1cbiBcdHByX2RlYnVnKFwicmVnaXN0ZXI6IGludGVycHJldGVyOiB7JXN9XFxuXCIsIGUtXHUwMDNlaW50ZXJwcmV0ZXIpO1xuIFxuIFx0LyogUGFyc2UgdGhlICdmbGFncycgZmllbGQuICovXG5AQCAtNTM1LDYgKzYyNywxNCBAQCBzdGF0aWMgTm9kZSAqY3JlYXRlX2VudHJ5KGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsIHNpemVfdCBjb3VudClcbiBcdGlmIChwICE9IGJ1ZiArIGNvdW50KVxuIFx0XHRnb3RvIGVpbnZhbDtcbiBcbitcdC8qXG4rXHQgKiBBIHByb2dyYW0tc2VsZWN0ZWQgaW50ZXJwcmV0ZXIgY2Fubm90IGJlIHByZS1vcGVuZWQgYW5kIG11c3Qgbm90XG4rXHQgKiBpbmhlcml0IHRoZSBjcmVkZW50aWFscyBvZiBhIHNldHVpZCBiaW5hcnkgaXQgd2FzIGNob3NlbiBmb3IuXG4rXHQgKi9cbitcdGlmICh0ZXN0X2JpdChCcGYsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpIFx1MDAyNlx1MDAyNlxuK1x0ICAgIChlLVx1MDAzZWZsYWdzIFx1MDAyNiAoTUlTQ19GTVRfQ1JFREVOVElBTFMgfCBNSVNDX0ZNVF9PUEVOX0ZJTEUpKSlcbitcdFx0Z290byBlaW52YWw7XG4rXG4gXHRyZXR1cm4gZTtcbiBcbiBvdXQ6XG5AQCAtNTg4LDcgKzY4OCwxMCBAQCBzdGF0aWMgdm9pZCBlbnRyeV9zdGF0dXMoTm9kZSAqZSwgY2hhciAqcGFnZSlcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0ZHAgKz0gc3ByaW50ZihkcCwgXCIlc1xcbmludGVycHJldGVyICVzXFxuXCIsIHN0YXR1cywgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4rXHRpZiAodGVzdF9iaXQoQnBmLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSlcbitcdFx0ZHAgKz0gc3ByaW50ZihkcCwgXCIlc1xcbmJwZiAlc1xcblwiLCBzdGF0dXMsIGUtXHUwMDNlYnBmX29wc19uYW1lKTtcbitcdGVsc2VcbitcdFx0ZHAgKz0gc3ByaW50ZihkcCwgXCIlc1xcbmludGVycHJldGVyICVzXFxuXCIsIHN0YXR1cywgZS1cdTAwM2VpbnRlcnByZXRlcik7XG4gXG4gXHQvKiBwcmludCB0aGUgc3BlY2lhbCBmbGFncyAqL1xuIFx0ZHAgKz0gc3ByaW50ZihkcCwgXCJmbGFnczogXCIpO1xuQEAgLTYwMiw3ICs3MDUsOSBAQCBzdGF0aWMgdm9pZCBlbnRyeV9zdGF0dXMoTm9kZSAqZSwgY2hhciAqcGFnZSlcbiBcdFx0KmRwKysgPSAnRic7XG4gXHQqZHArKyA9ICdcXG4nO1xuIFxuLVx0aWYgKCF0ZXN0X2JpdChNYWdpYywgXHUwMDI2ZS1cdTAwM2VmbGFncykpIHtcbitcdGlmICh0ZXN0X2JpdChCcGYsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4rXHRcdCpkcCA9ICdcXDAnO1xuK1x0fSBlbHNlIGlmICghdGVzdF9iaXQoTWFnaWMsIFx1MDAyNmUtXHUwMDNlZmxhZ3MpKSB7XG4gXHRcdHNwcmludGYoZHAsIFwiZXh0ZW5zaW9uIC4lc1xcblwiLCBlLVx1MDAzZW1hZ2ljKTtcbiBcdH0gZWxzZSB7XG4gXHRcdGRwICs9IHNwcmludGYoZHAsIFwib2Zmc2V0ICVpXFxubWFnaWMgXCIsIGUtXHUwMDNlb2Zmc2V0KTtcbkBAIC04MDksNiArOTE0LDE2IEBAIHN0YXRpYyBzc2l6ZV90IGJtX3JlZ2lzdGVyX3dyaXRlKHN0cnVjdCBmaWxlICpmaWxlLCBjb25zdCBjaGFyIF9fdXNlciAqYnVmZmVyLFxuIFx0aWYgKElTX0VSUihlKSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoZSk7XG4gXG4rXHRpZiAodGVzdF9iaXQoQnBmLCBcdTAwMjZlLVx1MDAzZWZsYWdzKSkge1xuK1x0XHRlLVx1MDAzZWJwZl9vcHMgPSBiaW5mbXRfbWlzY19nZXRfb3BzKHNiLVx1MDAzZXNfdXNlcl9ucywgZS1cdTAwM2VicGZfb3BzX25hbWUpO1xuK1x0XHRpZiAoIWUtXHUwMDNlYnBmX29wcykge1xuK1x0XHRcdHByX25vdGljZShcInJlZ2lzdGVyOiBubyBicGYgaGFuZGxlciBuYW1lZCAlc1xcblwiLFxuK1x0XHRcdFx0ICBlLVx1MDAzZWJwZl9vcHNfbmFtZSk7XG4rXHRcdFx0a2ZyZWUoZSk7XG4rXHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4rXHRcdH1cbitcdH1cbitcbiBcdGlmIChlLVx1MDAzZWZsYWdzIFx1MDAyNiBNSVNDX0ZNVF9PUEVOX0ZJTEUpIHtcbiBcdFx0LypcbiBcdFx0ICogTm93IHRoYXQgd2Ugc3VwcG9ydCB1bnByaXZpbGVnZWQgYmluZm10X21pc2MgbW91bnRzIG1ha2VcbkBAIC04MzQsNiArOTQ5LDggQEAgc3RhdGljIHNzaXplX3QgYm1fcmVnaXN0ZXJfd3JpdGUoc3RydWN0IGZpbGUgKmZpbGUsIGNvbnN0IGNoYXIgX191c2VyICpidWZmZXIsXG4gXHRcdFx0ZXhlX2ZpbGVfYWxsb3dfd3JpdGVfYWNjZXNzKGYpO1xuIFx0XHRcdGZpbHBfY2xvc2UoZiwgTlVMTCk7XG4gXHRcdH1cbitcdFx0aWYgKGUtXHUwMDNlYnBmX29wcylcbitcdFx0XHRiaW5mbXRfbWlzY19wdXRfb3BzKGUtXHUwMDNlYnBmX29wcyk7XG4gXHRcdGtmcmVlKGUpO1xuIFx0XHRyZXR1cm4gZXJyO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2ZzL2JpbmZtdF9taXNjX2JwZi5jIGIvZnMvYmluZm10X21pc2NfYnBmLmNcbm5ldyBmaWxlIG1vZGUgMTAwNjQ0XG5pbmRleCAwMDAwMDAwMDAwMDAwMC4uNzJkYTA5NjRkOTQ5MTVcbi0tLSAvZGV2L251bGxcbisrKyBiL2ZzL2JpbmZtdF9taXNjX2JwZi5jXG5AQCAtMCwwICsxLDI3NSBAQFxuKy8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbisvKlxuKyAqIEJQRi1iYWNrZWQgYmluYXJ5IHR5cGUgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLlxuKyAqXG4rICogQSBoYW5kbGVyIGlzIGEgc3RydWN0IGJpbmZtdF9taXNjX29wcyBzdHJ1Y3Rfb3BzIG1hcC4gTG9hZGluZyBhbmRcbisgKiByZWdpc3RlcmluZyBpdCBtYWtlcyB0aGUgaGFuZGxlciBhdmFpbGFibGUgdW5kZXIgaXRzIG5hbWUgaW4gdGhlIHVzZXJcbisgKiBuYW1lc3BhY2UgaXQgd2FzIHJlZ2lzdGVyZWQgaW4uIEEgYmluZm10X21pc2MgJ0InIGVudHJ5IGFjdGl2YXRlcyBpdDpcbisgKlxuKyAqICAgZWNobyAnOmVudHJ5OkI6XHUwMDNjaGFuZGxlci1uYW1lXHUwMDNlOjo6OicgXHUwMDNlIFx1MDAzY2JpbmZtdF9taXNjXHUwMDNlL3JlZ2lzdGVyXG4rICovXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10X21pc2MuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpbmZtdHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX3ZlcmlmaWVyLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9idGYuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2J0Zl9pZHMuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyZWQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2luaXQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L2xpbWl0cy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbXV0ZXguaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3NsYWIuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2xpbnV4L3N0cmluZy5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdXNlcl9uYW1lc3BhY2UuaFx1MDAzZVxuK1xuK3N0cnVjdCBibV9icGZfb3BzX3JlZyB7XG4rXHRzdHJ1Y3QgbGlzdF9oZWFkIGxpc3Q7XG4rXHRjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHM7XG4rXHRzdHJ1Y3QgYnBmX2xpbmsgKmxpbms7XG4rXHRzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnM7XG4rfTtcbitcbitzdGF0aWMgREVGSU5FX01VVEVYKGJtX2JwZl9vcHNfbG9jayk7XG4rc3RhdGljIExJU1RfSEVBRChibV9icGZfb3BzX2xpc3QpO1xuK1xuK3N0YXRpYyBzdHJ1Y3QgYnBmX3N0cnVjdF9vcHMgYnBmX2JpbmZtdF9taXNjX29wcztcbitcbitzdGF0aWMgc3RydWN0IGJtX2JwZl9vcHNfcmVnICpibV9icGZfb3BzX2ZpbmQoY29uc3Qgc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLFxuK1x0XHRcdFx0XHQgICAgICBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHN0cnVjdCBibV9icGZfb3BzX3JlZyAqcmVnO1xuK1xuK1x0bG9ja2RlcF9hc3NlcnRfaGVsZChcdTAwMjZibV9icGZfb3BzX2xvY2spO1xuK1xuK1x0bGlzdF9mb3JfZWFjaF9lbnRyeShyZWcsIFx1MDAyNmJtX2JwZl9vcHNfbGlzdCwgbGlzdCkge1xuK1x0XHRpZiAocmVnLVx1MDAzZXVzZXJfbnMgPT0gdXNlcl9ucyBcdTAwMjZcdTAwMjYgIXN0cmNtcChyZWctXHUwMDNlb3BzLVx1MDAzZW5hbWUsIG5hbWUpKVxuK1x0XHRcdHJldHVybiByZWc7XG4rXHR9XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rXG4rLyoqXG4rICogYmluZm10X21pc2NfZ2V0X29wcyAtIGxvb2sgdXAgYSBicGYgYmluYXJ5IHR5cGUgaGFuZGxlciBieSBuYW1lXG4rICogQHVzZXJfbnM6IHVzZXIgbmFtZXNwYWNlIG9mIHRoZSBiaW5mbXRfbWlzYyBpbnN0YW5jZVxuKyAqIEBuYW1lOiBuYW1lIHRoZSBoYW5kbGVyIHdhcyByZWdpc3RlcmVkIHVuZGVyXG4rICpcbisgKiBTZWFyY2ggQHVzZXJfbnMgYW5kIGl0cyBhbmNlc3RvcnMgZm9yIGEgaGFuZGxlciBuYW1lZCBAbmFtZSwgbWlycm9yaW5nXG4rICogdGhlIGluc3RhbmNlIGxvb2t1cCBpbiBsb2FkX2JpbmZtdF9taXNjKCkuIFRoZSByZXR1cm5lZCBoYW5kbGVyIHN0YXlzXG4rICogY2FsbGFibGUgdW50aWwgYmluZm10X21pc2NfcHV0X29wcygpIGV2ZW4gaWYgdGhlIGJhY2tpbmcgc3RydWN0X29wcyBtYXBcbisgKiBpcyBkZXRhY2hlZCBvciBkZWxldGVkIGluIHRoZSBtZWFudGltZS5cbisgKlxuKyAqIFJldHVybjogdGhlIGhhbmRsZXIgb24gc3VjY2VzcywgTlVMTCBvbiBmYWlsdXJlXG4rICovXG4rY29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqYmluZm10X21pc2NfZ2V0X29wcyhzdHJ1Y3QgdXNlcl9uYW1lc3BhY2UgKnVzZXJfbnMsXG4rXHRcdFx0XHRcdFx0ICBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdGNvbnN0IHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqbnM7XG4rXHRzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKnJlZztcbitcbitcdGd1YXJkKG11dGV4KShcdTAwMjZibV9icGZfb3BzX2xvY2spO1xuK1xuK1x0Zm9yIChucyA9IHVzZXJfbnM7IG5zOyBucyA9IG5zLVx1MDAzZXBhcmVudCkge1xuK1x0XHRyZWcgPSBibV9icGZfb3BzX2ZpbmQobnMsIG5hbWUpO1xuK1x0XHRpZiAoIXJlZylcbitcdFx0XHRjb250aW51ZTtcbitcdFx0aWYgKCFicGZfc3RydWN0X29wc19nZXQocmVnLVx1MDAzZW9wcykpXG4rXHRcdFx0cmV0dXJuIE5VTEw7XG4rXHRcdHJldHVybiByZWctXHUwMDNlb3BzO1xuK1x0fVxuK1x0cmV0dXJuIE5VTEw7XG4rfVxuK1xuK3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpXG4re1xuK1x0YnBmX3N0cnVjdF9vcHNfcHV0KG9wcyk7XG4rfVxuK1xuK2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbit7XG4rXHRyZXR1cm4gcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBwcm9nLVx1MDAzZWF1eC1cdTAwM2VzdF9vcHMgPT0gXHUwMDI2YnBmX2JpbmZtdF9taXNjX29wcztcbit9XG4rXG4rX19icGZfa2Z1bmNfc3RhcnRfZGVmcygpO1xuK1xuKy8qKlxuKyAqIGJwZl9iaW5wcm1fc2V0X2ludGVycCAtIHNlbGVjdCB0aGUgaW50ZXJwcmV0ZXIgZm9yIHRoZSBjdXJyZW50IGV4ZWNcbisgKiBAYnBybTogYmluYXJ5IHRoYXQgaXMgYmVpbmcgZXhlY3V0ZWRcbisgKiBAcGF0aDogYWJzb2x1dGUgcGF0aCB0byB0aGUgaW50ZXJwcmV0ZXJcbisgKiBAcGF0aF9fc3o6IHNpemUgb2YgdGhlIEBwYXRoIGJ1ZmZlciwgaW5jbHVkaW5nIHRoZSB0ZXJtaW5hdGluZyBOVUxcbisgKlxuKyAqIFRvIGJlIGNhbGxlZCBmcm9tIHRoZSBsb2FkIHByb2dyYW0gb2YgYSBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzIGhhbmRsZXJcbisgKiBiZWZvcmUgcmV0dXJuaW5nIGEgcG9zaXRpdmUgdmFsdWUuIFRoZSBwYXRoIGlzIG9wZW5lZCB3aXRoIHRoZVxuKyAqIGNyZWRlbnRpYWxzIG9mIHRoZSB0YXNrIGRvaW5nIHRoZSBleGVjIGFmdGVyIHRoZSBwcm9ncmFtIHJldHVybnMuXG4rICpcbisgKiBSZXR1cm46IDAgb24gc3VjY2VzcywgYSBuZWdhdGl2ZSBlcnJubyBvbiBmYWlsdXJlXG4rICovXG4rX19icGZfa2Z1bmMgaW50IGJwZl9iaW5wcm1fc2V0X2ludGVycChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtLFxuK1x0XHRcdFx0ICAgICAgY29uc3QgY2hhciAqcGF0aCwgc2l6ZV90IHBhdGhfX3N6KVxuK3tcbitcdHNpemVfdCBsZW47XG4rXHRjaGFyICppbnRlcnA7XG4rXG4rXHRpZiAoIXBhdGhfX3N6KVxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdGxlbiA9IHN0cm5sZW4ocGF0aCwgcGF0aF9fc3opO1xuK1x0aWYgKGxlbiA9PSBwYXRoX19zeilcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRpZiAocGF0aFswXSAhPSAnLycpXG4rXHRcdHJldHVybiAtRUlOVkFMO1xuK1x0aWYgKGxlbiBcdTAwM2U9IFBBVEhfTUFYKVxuK1x0XHRyZXR1cm4gLUVOQU1FVE9PTE9ORztcbitcbitcdGludGVycCA9IGttZW1kdXBfbnVsKHBhdGgsIGxlbiwgR0ZQX0tFUk5FTCk7XG4rXHRpZiAoIWludGVycClcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRrZnJlZShicHJtLVx1MDAzZWJwZl9pbnRlcnApO1xuK1x0YnBybS1cdTAwM2VicGZfaW50ZXJwID0gaW50ZXJwO1xuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK19fYnBmX2tmdW5jX2VuZF9kZWZzKCk7XG4rXG4rQlRGX0tGVU5DU19TVEFSVChibV9icGZfa2Z1bmNfaWRzKVxuK0JURl9JRF9GTEFHUyhmdW5jLCBicGZfYmlucHJtX3NldF9pbnRlcnAsIEtGX1NMRUVQQUJMRSlcbitCVEZfS0ZVTkNTX0VORChibV9icGZfa2Z1bmNfaWRzKVxuK1xuK3N0YXRpYyBpbnQgYm1fYnBmX2tmdW5jX2ZpbHRlcihjb25zdCBzdHJ1Y3QgYnBmX3Byb2cgKnByb2csIHUzMiBrZnVuY19pZClcbit7XG4rXHRpZiAoIWJ0Zl9pZF9zZXQ4X2NvbnRhaW5zKFx1MDAyNmJtX2JwZl9rZnVuY19pZHMsIGtmdW5jX2lkKSlcbitcdFx0cmV0dXJuIDA7XG4rXHRpZiAoYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKHByb2cpKVxuK1x0XHRyZXR1cm4gMDtcbitcdHJldHVybiAtRUFDQ0VTO1xuK31cbitcbitzdGF0aWMgY29uc3Qgc3RydWN0IGJ0Zl9rZnVuY19pZF9zZXQgYm1fYnBmX2tmdW5jX3NldCA9IHtcbitcdC5vd25lclx0PSBUSElTX01PRFVMRSxcbitcdC5zZXRcdD0gXHUwMDI2Ym1fYnBmX2tmdW5jX2lkcyxcbitcdC5maWx0ZXJcdD0gYm1fYnBmX2tmdW5jX2ZpbHRlcixcbit9O1xuK1xuK3N0YXRpYyBpbnQgYm1fYnBmX29wc19fbG9hZChzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuK3tcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgc3RydWN0IGJpbmZtdF9taXNjX29wcyBibV9icGZfb3BzX3N0dWJzID0ge1xuK1x0LmxvYWQgPSBibV9icGZfb3BzX19sb2FkLFxuK307XG4rXG4rc3RhdGljIGludCBibV9icGZfaW5pdChzdHJ1Y3QgYnRmICpidGYpXG4re1xuK1x0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9TVFJVQ1RfT1BTLFxuK1x0XHRcdFx0XHQgXHUwMDI2Ym1fYnBmX2tmdW5jX3NldCk7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYm1fYnBmX2NoZWNrX21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBidGZfbWVtYmVyICptZW1iZXIsXG4rXHRcdFx0ICAgICAgIGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbit7XG4rXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xuK1xuK1x0c3dpdGNoIChtb2ZmKSB7XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiaW5mbXRfbWlzY19vcHMsIGxvYWQpOlxuK1x0XHQvKiBSZWxpYWJsZSBmaWxlIHJlYWRzIGF0IGV4ZWMgdGltZSByZXF1aXJlIHNsZWVwaW5nLiAqL1xuK1x0XHRpZiAoIXByb2ctXHUwMDNlc2xlZXBhYmxlKVxuK1x0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRicmVhaztcbitcdH1cbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGJtX2JwZl9pbml0X21lbWJlcihjb25zdCBzdHJ1Y3QgYnRmX3R5cGUgKnQsXG4rXHRcdFx0ICAgICAgY29uc3Qgc3RydWN0IGJ0Zl9tZW1iZXIgKm1lbWJlcixcbitcdFx0XHQgICAgICB2b2lkICprZGF0YSwgY29uc3Qgdm9pZCAqdWRhdGEpXG4re1xuK1x0Y29uc3Qgc3RydWN0IGJpbmZtdF9taXNjX29wcyAqdW9wcyA9IHVkYXRhO1xuK1x0c3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzID0ga2RhdGE7XG4rXHR1MzIgbW9mZiA9IF9fYnRmX21lbWJlcl9iaXRfb2Zmc2V0KHQsIG1lbWJlcikgLyA4O1xuK1xuK1x0c3dpdGNoIChtb2ZmKSB7XG4rXHRjYXNlIG9mZnNldG9mKHN0cnVjdCBiaW5mbXRfbWlzY19vcHMsIG5hbWUpOlxuK1x0XHRpZiAoYnBmX29ial9uYW1lX2NweShvcHMtXHUwMDNlbmFtZSwgdW9wcy1cdTAwM2VuYW1lLFxuK1x0XHRcdFx0ICAgICBzaXplb2Yob3BzLVx1MDAzZW5hbWUpKSBcdTAwM2M9IDApXG4rXHRcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRcdHJldHVybiAxO1xuK1x0fVxuK1x0cmV0dXJuIDA7XG4rfVxuK1xuK3N0YXRpYyBpbnQgYm1fYnBmX3ZhbGlkYXRlKHZvaWQgKmtkYXRhKVxuK3tcbitcdHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKm9wcyA9IGtkYXRhO1xuK1xuK1x0aWYgKCFvcHMtXHUwMDNlbG9hZClcbitcdFx0cmV0dXJuIC1FSU5WQUw7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIGludCBibV9icGZfcmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4re1xuK1x0c3RydWN0IGJpbmZtdF9taXNjX29wcyAqb3BzID0ga2RhdGE7XG4rXHRzdHJ1Y3QgYm1fYnBmX29wc19yZWcgKnJlZztcbitcbitcdHJlZyA9IGt6YWxsb2Nfb2JqKCpyZWcsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG4rXHRpZiAoIXJlZylcbitcdFx0cmV0dXJuIC1FTk9NRU07XG4rXG4rXHRyZWctXHUwMDNlb3BzID0gb3BzO1xuK1x0cmVnLVx1MDAzZWxpbmsgPSBsaW5rO1xuK1x0cmVnLVx1MDAzZXVzZXJfbnMgPSBnZXRfdXNlcl9ucyhjdXJyZW50X3VzZXJfbnMoKSk7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2Ym1fYnBmX29wc19sb2NrKTtcbitcbitcdGlmIChibV9icGZfb3BzX2ZpbmQocmVnLVx1MDAzZXVzZXJfbnMsIG9wcy1cdTAwM2VuYW1lKSkge1xuK1x0XHRwdXRfdXNlcl9ucyhyZWctXHUwMDNldXNlcl9ucyk7XG4rXHRcdGtmcmVlKHJlZyk7XG4rXHRcdHJldHVybiAtRUVYSVNUO1xuK1x0fVxuK1xuK1x0bGlzdF9hZGQoXHUwMDI2cmVnLVx1MDAzZWxpc3QsIFx1MDAyNmJtX2JwZl9vcHNfbGlzdCk7XG4rXHRyZXR1cm4gMDtcbit9XG4rXG4rc3RhdGljIHZvaWQgYm1fYnBmX3VucmVnKHZvaWQgKmtkYXRhLCBzdHJ1Y3QgYnBmX2xpbmsgKmxpbmspXG4re1xuK1x0c3RydWN0IGJtX2JwZl9vcHNfcmVnICpyZWc7XG4rXG4rXHRndWFyZChtdXRleCkoXHUwMDI2Ym1fYnBmX29wc19sb2NrKTtcbitcbitcdGxpc3RfZm9yX2VhY2hfZW50cnkocmVnLCBcdTAwMjZibV9icGZfb3BzX2xpc3QsIGxpc3QpIHtcbitcdFx0aWYgKHJlZy1cdTAwM2VvcHMgPT0ga2RhdGEgXHUwMDI2XHUwMDI2IHJlZy1cdTAwM2VsaW5rID09IGxpbmspIHtcbitcdFx0XHRsaXN0X2RlbChcdTAwMjZyZWctXHUwMDNlbGlzdCk7XG4rXHRcdFx0cHV0X3VzZXJfbnMocmVnLVx1MDAzZXVzZXJfbnMpO1xuK1x0XHRcdGtmcmVlKHJlZyk7XG4rXHRcdFx0cmV0dXJuO1xuK1x0XHR9XG4rXHR9XG4rfVxuK1xuK3N0YXRpYyBjb25zdCBzdHJ1Y3QgYnBmX3ZlcmlmaWVyX29wcyBibV9icGZfdmVyaWZpZXJfb3BzID0ge1xuK1x0LmdldF9mdW5jX3Byb3RvXHRcdD0gYnBmX2Jhc2VfZnVuY19wcm90byxcbitcdC5pc192YWxpZF9hY2Nlc3NcdD0gYnBmX3RyYWNpbmdfYnRmX2N0eF9hY2Nlc3MsXG4rfTtcbitcbitzdGF0aWMgc3RydWN0IGJwZl9zdHJ1Y3Rfb3BzIGJwZl9iaW5mbXRfbWlzY19vcHMgPSB7XG4rXHQudmVyaWZpZXJfb3BzXHQ9IFx1MDAyNmJtX2JwZl92ZXJpZmllcl9vcHMsXG4rXHQuaW5pdFx0XHQ9IGJtX2JwZl9pbml0LFxuK1x0LmNoZWNrX21lbWJlclx0PSBibV9icGZfY2hlY2tfbWVtYmVyLFxuK1x0LmluaXRfbWVtYmVyXHQ9IGJtX2JwZl9pbml0X21lbWJlcixcbitcdC52YWxpZGF0ZVx0PSBibV9icGZfdmFsaWRhdGUsXG4rXHQucmVnXHRcdD0gYm1fYnBmX3JlZyxcbitcdC51bnJlZ1x0XHQ9IGJtX2JwZl91bnJlZyxcbitcdC5jZmlfc3R1YnNcdD0gXHUwMDI2Ym1fYnBmX29wc19zdHVicyxcbitcdC5uYW1lXHRcdD0gXCJiaW5mbXRfbWlzY19vcHNcIixcbitcdC5vd25lclx0XHQ9IFRISVNfTU9EVUxFLFxuK307XG4rXG4rc3RhdGljIGludCBfX2luaXQgYm1fYnBmX3N0cnVjdF9vcHNfaW5pdCh2b2lkKVxuK3tcbitcdHJldHVybiByZWdpc3Rlcl9icGZfc3RydWN0X29wcyhcdTAwMjZicGZfYmluZm10X21pc2Nfb3BzLCBiaW5mbXRfbWlzY19vcHMpO1xuK31cbitsYXRlX2luaXRjYWxsKGJtX2JwZl9zdHJ1Y3Rfb3BzX2luaXQpO1xuZGlmZiAtLWdpdCBhL2ZzL2JwZl9mc19rZnVuY3MuYyBiL2ZzL2JwZl9mc19rZnVuY3MuY1xuaW5kZXggNzY4YWNhMmRjMGYwMzQuLmFhMWZlOTg4YjZkMjI5IDEwMDY0NFxuLS0tIGEvZnMvYnBmX2ZzX2tmdW5jcy5jXG4rKysgYi9mcy9icGZfZnNfa2Z1bmNzLmNcbkBAIC0xLDYgKzEsNyBAQFxuIC8vIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gLyogQ29weXJpZ2h0IChjKSAyMDI0IEdvb2dsZSBMTEMuICovXG4gXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvYmluZm10X21pc2MuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JwZi5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnBmX2xzbS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvYnRmLmhcdTAwM2VcbkBAIC0zODcsMTAgKzM4OCwyMCBAQCBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlbW92ZV9kZW50cnlfeGF0dHIsIEtGX1NMRUVQQUJMRSlcbiBCVEZfSURfRkxBR1MoZnVuYywgYnBmX3JlYWxfaW5vZGUsIEtGX1NMRUVQQUJMRSB8IEtGX1JFVF9OVUxMKVxuIEJURl9LRlVOQ1NfRU5EKGJwZl9mc19rZnVuY19zZXRfaWRzKVxuIFxuKy8qIFNpZGUtZWZmZWN0aW5nIGtmdW5jcyB0aGF0IHN0YXkgZXhjbHVzaXZlIHRvIExTTSBwcm9ncmFtcy4gKi9cbitCVEZfU0VUX1NUQVJUKGJwZl9mc19rZnVuY19sc21fb25seV9pZHMpXG4rQlRGX0lEKGZ1bmMsIGJwZl9zZXRfZGVudHJ5X3hhdHRyKVxuK0JURl9JRChmdW5jLCBicGZfcmVtb3ZlX2RlbnRyeV94YXR0cilcbitCVEZfU0VUX0VORChicGZfZnNfa2Z1bmNfbHNtX29ubHlfaWRzKVxuK1xuIHN0YXRpYyBpbnQgYnBmX2ZzX2tmdW5jc19maWx0ZXIoY29uc3Qgc3RydWN0IGJwZl9wcm9nICpwcm9nLCB1MzIga2Z1bmNfaWQpXG4ge1xuLVx0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpIHx8XG4tXHQgICAgcHJvZy1cdTAwM2V0eXBlID09IEJQRl9QUk9HX1RZUEVfTFNNKVxuK1x0aWYgKCFidGZfaWRfc2V0OF9jb250YWlucyhcdTAwMjZicGZfZnNfa2Z1bmNfc2V0X2lkcywga2Z1bmNfaWQpKVxuK1x0XHRyZXR1cm4gMDtcbitcdGlmIChwcm9nLVx1MDAzZXR5cGUgPT0gQlBGX1BST0dfVFlQRV9MU00pXG4rXHRcdHJldHVybiAwO1xuK1x0aWYgKGJwZl9wcm9nX2lzX2JpbmZtdF9taXNjX29wcyhwcm9nKSBcdTAwMjZcdTAwMjZcbitcdCAgICAhYnRmX2lkX3NldF9jb250YWlucyhcdTAwMjZicGZfZnNfa2Z1bmNfbHNtX29ubHlfaWRzLCBrZnVuY19pZCkpXG4gXHRcdHJldHVybiAwO1xuIFx0cmV0dXJuIC1FQUNDRVM7XG4gfVxuQEAgLTQzMyw3ICs0NDQsMTMgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBidGZfa2Z1bmNfaWRfc2V0IGJwZl9mc19rZnVuY19zZXQgPSB7XG4gXG4gc3RhdGljIGludCBfX2luaXQgYnBmX2ZzX2tmdW5jc19pbml0KHZvaWQpXG4ge1xuLVx0cmV0dXJuIHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuK1x0aW50IHJldDtcbitcbitcdHJldCA9IHJlZ2lzdGVyX2J0Zl9rZnVuY19pZF9zZXQoQlBGX1BST0dfVFlQRV9MU00sIFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuK1x0aWYgKHJldCB8fCAhSVNfRU5BQkxFRChDT05GSUdfQklORk1UX01JU0NfQlBGKSlcbitcdFx0cmV0dXJuIHJldDtcbitcdHJldHVybiByZWdpc3Rlcl9idGZfa2Z1bmNfaWRfc2V0KEJQRl9QUk9HX1RZUEVfU1RSVUNUX09QUyxcbitcdFx0XHRcdFx0IFx1MDAyNmJwZl9mc19rZnVuY19zZXQpO1xuIH1cbiBcbiBsYXRlX2luaXRjYWxsKGJwZl9mc19rZnVuY3NfaW5pdCk7XG5kaWZmIC0tZ2l0IGEvZnMvZXhlYy5jIGIvZnMvZXhlYy5jXG5pbmRleCBiOTJmZTdkYjE3NmNmZi4uN2M5ZTI4ZjU0OWE0NTMgMTAwNjQ0XG4tLS0gYS9mcy9leGVjLmNcbisrKyBiL2ZzL2V4ZWMuY1xuQEAgLTE0MTgsNiArMTQxOCw3IEBAIHN0YXRpYyB2b2lkIGZyZWVfYnBybShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKVxuIFx0LyogSWYgYSBiaW5mbXQgY2hhbmdlZCB0aGUgaW50ZXJwLCBmcmVlIGl0LiAqL1xuIFx0aWYgKGJwcm0tXHUwMDNlaW50ZXJwICE9IGJwcm0tXHUwMDNlZmlsZW5hbWUpXG4gXHRcdGtmcmVlKGJwcm0tXHUwMDNlaW50ZXJwKTtcbitcdGtmcmVlKGJwcm0tXHUwMDNlYnBmX2ludGVycCk7XG4gXHRrZnJlZShicHJtLVx1MDAzZWZkcGF0aCk7XG4gXHRrZnJlZShicHJtKTtcbiB9XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oIGIvaW5jbHVkZS9saW51eC9iaW5mbXRfbWlzYy5oXG5uZXcgZmlsZSBtb2RlIDEwMDY0NFxuaW5kZXggMDAwMDAwMDAwMDAwMDAuLmUxZDI2YzQzMDFkYTJjXG4tLS0gL2Rldi9udWxsXG4rKysgYi9pbmNsdWRlL2xpbnV4L2JpbmZtdF9taXNjLmhcbkBAIC0wLDAgKzEsNDkgQEBcbisvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCAqL1xuKyNpZm5kZWYgX0xJTlVYX0JJTkZNVF9NSVNDX0hcbisjZGVmaW5lIF9MSU5VWF9CSU5GTVRfTUlTQ19IXG4rXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvdHlwZXMuaFx1MDAzZVxuK1xuK3N0cnVjdCBicGZfcHJvZztcbitzdHJ1Y3QgbGludXhfYmlucHJtO1xuK3N0cnVjdCB1c2VyX25hbWVzcGFjZTtcbitcbisjZGVmaW5lIEJJTkZNVF9NSVNDX09QU19OQU1FX01BWCAxNlxuK1xuKy8qKlxuKyAqIHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgLSBicGYtYmFja2VkIGJpbmFyeSB0eXBlIGhhbmRsZXJcbisgKiBAbG9hZDogbWF0Y2ggQGJwcm0gYW5kIHNlbGVjdCBhbiBpbnRlcnByZXRlciB2aWEgYnBmX2JpbnBybV9zZXRfaW50ZXJwKCk7XG4rICogICAgICAgIHJldHVybnMgXHUwMDNlIDAgaWYgdGhlIGJpbmFyeSB3YXMgaGFuZGxlZCwgMCB0byBmYWxsIHRocm91Z2ggdG8gdGhlXG4rICogICAgICAgIGhhbmRsZXJzIHJlZ2lzdGVyZWQgYWZ0ZXIgdGhpcyBvbmUsIGEgbmVnYXRpdmUgZXJybm8gdG8gZmFpbCB0aGVcbisgKiAgICAgICAgZXhlYzsgLUVOT0VYRUMgZG9lcyBub3QgZmFpbCB0aGUgZXhlYyBidXQgbW92ZXMgb24gdG8gdGhlXG4rICogICAgICAgIHJlbWFpbmluZyBiaW5hcnkgZm9ybWF0c1xuKyAqIEBuYW1lOiBuYW1lIHRoYXQgJ0InIGVudHJpZXMgcmVmZXJlbmNlIHRoZSBoYW5kbGVyIGJ5XG4rICovXG4rc3RydWN0IGJpbmZtdF9taXNjX29wcyB7XG4rXHRpbnQgKCpsb2FkKShzdHJ1Y3QgbGludXhfYmlucHJtICpicHJtKTtcbitcdGNoYXIgbmFtZVtCSU5GTVRfTUlTQ19PUFNfTkFNRV9NQVhdO1xuK307XG4rXG4rI2lmZGVmIENPTkZJR19CSU5GTVRfTUlTQ19CUEZcbitjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpiaW5mbXRfbWlzY19nZXRfb3BzKHN0cnVjdCB1c2VyX25hbWVzcGFjZSAqdXNlcl9ucyxcbitcdFx0XHRcdFx0XHQgIGNvbnN0IGNoYXIgKm5hbWUpO1xuK3ZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpO1xuK2Jvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZyk7XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIGNvbnN0IHN0cnVjdCBiaW5mbXRfbWlzY19vcHMgKlxuK2JpbmZtdF9taXNjX2dldF9vcHMoc3RydWN0IHVzZXJfbmFtZXNwYWNlICp1c2VyX25zLCBjb25zdCBjaGFyICpuYW1lKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgaW5saW5lIHZvaWQgYmluZm10X21pc2NfcHV0X29wcyhjb25zdCBzdHJ1Y3QgYmluZm10X21pc2Nfb3BzICpvcHMpXG4re1xuK31cbitcbitzdGF0aWMgaW5saW5lIGJvb2wgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzKGNvbnN0IHN0cnVjdCBicGZfcHJvZyAqcHJvZylcbit7XG4rXHRyZXR1cm4gZmFsc2U7XG4rfVxuKyNlbmRpZiAvKiBDT05GSUdfQklORk1UX01JU0NfQlBGICovXG4rXG4rI2VuZGlmIC8qIF9MSU5VWF9CSU5GTVRfTUlTQ19IICovXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmggYi9pbmNsdWRlL2xpbnV4L2JpbmZtdHMuaFxuaW5kZXggMmM3N2UzODNlNzM3NTcuLjAwNzBkMjA3ZDU0ZjA0IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9iaW5mbXRzLmhcbisrKyBiL2luY2x1ZGUvbGludXgvYmluZm10cy5oXG5AQCAtNjUsNiArNjUsNyBAQCBzdHJ1Y3QgbGludXhfYmlucHJtIHtcbiBcdFx0XHRcdCAgIG9mIHRoZSB0aW1lIHNhbWUgYXMgZmlsZW5hbWUsIGJ1dCBjb3VsZCBiZVxuIFx0XHRcdFx0ICAgZGlmZmVyZW50IGZvciBiaW5mbXRfe21pc2Msc2NyaXB0fSAqL1xuIFx0Y29uc3QgY2hhciAqZmRwYXRoO1x0LyogZ2VuZXJhdGVkIGZpbGVuYW1lIGZvciBleGVjdmVhdCAqL1xuK1x0Y29uc3QgY2hhciAqYnBmX2ludGVycDtcdC8qIGludGVycHJldGVyIHNlbGVjdGVkIGJ5IGEgYnBmIGhhbmRsZXIgKi9cbiBcdHVuc2lnbmVkIGludGVycF9mbGFncztcbiBcdGludCBleGVjZmQ7XHRcdC8qIEZpbGUgZGVzY3JpcHRvciBvZiB0aGUgZXhlY3V0YWJsZSAqL1xuIFx0dW5zaWduZWQgbG9uZyBleGVjO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDhUMDY6MDA6MjkuMjA2Njk5NTJaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxNjY0NjkwMTMwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXNpcyBvZiBhIEJQRi1CYWNrZWQgYGJpbmZtdF9taXNjYCBQYXRjaCBmb3IgRnV6emluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZ290IG15IGF0dGVudGlvbi4gSXQgaW50cm9kdWNlcyBhIHNpZ25pZmljYW50IGZ1bmN0aW9uYWwgY2hhbmdlOiBCUEYgcHJvZ3JhbXMgaGFuZGxpbmcgYmluYXJ5IGZvcm1hdHMgdmlhIGBiaW5mbXRfbWlzY2AuIFRoZSBjb3JlIG1vZGlmaWNhdGlvbnMgYXJlIGluIGBmcy9iaW5mbXRfbWlzYy5jYCwgYSBuZXcgYGZzL2JpbmZtdF9taXNjX2JwZi5jYCwgYW5kIGNoYW5nZXMgdG8gYGZzL2V4ZWMuY2AgYW5kIGBmcy9icGZfZnNfa2Z1bmNzLmNgLiAgVGhpcyBpcyBkZWZpbml0ZWx5IHNvbWV0aGluZyB3b3J0aCBmdXp6aW5nLCBnaXZlbiB0aGUgYWRkZWQgY29tcGxleGl0eSBhbmQgcG90ZW50aWFsIGZvciBuZXcgdnVsbmVyYWJpbGl0aWVzLlxuXG5UaGUga2V5IGlzIHRoaXMgbmV3IGNvbmZpZywgYEJJTkZNVF9NSVNDX0JQRmAuICBJIHF1aWNrbHkgY2hlY2tlZCBgZnMvS2NvbmZpZy5iaW5mbXRgIHRvIG1ha2Ugc3VyZSBJJ20gcmlnaHQgYWJvdXQgdGhlIGNvbmZpZyBuYW1lICh5dXAsIGBCSU5GTVRfTUlTQ19CUEZgKSwgYW5kIHZlcmlmaWVkIGl0cyBkZXBlbmRlbmNpZXM6IGl0IG5lZWRzIGBCSU5GTVRfTUlTQz15YCwgYEJQRl9TWVNDQUxMYCwgYEJQRl9KSVRgLCBhbmQgYERFQlVHX0lORk9fQlRGYC5cblxuTm93LCBJIG5lZWQgdG8gaWRlbnRpZnkgdGhlIGNydWNpYWwgZnVuY3Rpb25zIGFuZCBhcmVhcyB0byB0YXJnZXQuIExvb2tpbmcgYXQgdGhlIGNvZGUgY2hhbmdlcywgdGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgdGhhdCBpbW1lZGlhdGVseSBzdGFuZCBvdXQgaW4gdGhlIG1vZGlmaWVkIGZpbGVzOlxuXG5JbiBgZnMvYmluZm10X21pc2MuY2A6IGBzZWFyY2hfYmluZm10X2hhbmRsZXJgLCBgZ2V0X2JpbmZtdF9oYW5kbGVyYCwgYGxvYWRfbWlzY19iaW5hcnlgLCBgY3JlYXRlX2VudHJ5YCwgYGVudHJ5X3N0YXR1c2AsIGBibV9yZWdpc3Rlcl93cml0ZWAuXG5cbkluIGBmcy9iaW5mbXRfbWlzY19icGYuY2A6IGBiaW5mbXRfbWlzY19nZXRfb3BzYCwgYGJpbmZtdF9taXNjX3B1dF9vcHNgLCBgYnBmX3Byb2dfaXNfYmluZm10X21pc2Nfb3BzYCwgYGJwZl9iaW5wcm1fc2V0X2ludGVycGAsIGBibV9icGZfa2Z1bmNfZmlsdGVyYCwgYGJtX2JwZl9vcHNfX2xvYWRgLCBgYm1fYnBmX2luaXRgLCBgYm1fYnBmX2NoZWNrX21lbWJlcmAsIGBibV9icGZfaW5pdF9tZW1iZXJgLCBgYm1fYnBmX3ZhbGlkYXRlYCwgYGJtX2JwZl9yZWdgLCBgYm1fYnBmX3VucmVnYCwgYGJtX2JwZl9zdHJ1Y3Rfb3BzX2luaXRgLlxuXG5JbiBgZnMvYnBmX2ZzX2tmdW5jcy5jYDogYGJwZl9mc19rZnVuY3NfZmlsdGVyYCwgYGJwZl9mc19rZnVuY3NfaW5pdGAuXG5cbkFuZCBpbiBgZnMvZXhlYy5jYDogYGZyZWVfYnBybWAuXG5cblNvLCAqZGVmaW5pdGVseSogZnV6emFibGUuICBUaGUgY29uZmlnIHRvIGVuYWJsZSB0aGUgbmV3IGZ1bmN0aW9uYWxpdHkgaXMgYEJJTkZNVF9NSVNDX0JQRmAuIGBCSU5GTVRfTUlTQ2AgaXMgYWxzbyBhIGRlcGVuZGVuY3ksIGJ1dCB0aGF0J3MgdHlwaWNhbGx5IGVuYWJsZWQgYnkgZGVmYXVsdCwgc28gSSdsbCBqdXN0IGxpc3QgYEJJTkZNVF9NSVNDX0JQRmAgZm9yIG5vdy5cblxuTm93LCB3aGljaCBmdW5jdGlvbnMgYXJlIHRoZSAqYmVzdCogdG8gZm9jdXMgb24gZHVyaW5nIGZ1enppbmc/IGBsb2FkX21pc2NfYmluYXJ5YCBsb29rcyB0ZW1wdGluZywgYXMgaXQncyBhdCB0aGUgY29yZSBvZiB0aGUgZXhlYyBwYXRoLCBidXQgaXQgbWlnaHQgYmUgdG9vIGJyb2FkIGEgdGFyZ2V0IGlmIGl0J3MgY2FsbGVkIG9uIGV2ZXJ5IGBleGVjdmVgIGlmIGBiaW5mbXRfbWlzY2AgaXMgZW5hYmxlZC4gSXQgaGFzIG5ldyBCUEYgbG9naWMgdGhvdWdoLCBzbyBpdCBtaWdodCBiZSBnb29kLiBgY3JlYXRlX2VudHJ5YCBhbmQgYGJtX3JlZ2lzdGVyX3dyaXRlYCBhcmUgdHJpZ2dlcmVkIHdoZW4gd3JpdGluZyB0byBgL3Byb2Mvc3lzL2ZzL2JpbmZtdF9taXNjL3JlZ2lzdGVyYCwgd2hpY2ggaXMgYSBnb29kIHRhcmdldGVkIGFwcHJvYWNoLCBhbmQgbmV3IGZvciB0aGlzIGZlYXR1cmUuIGBicGZfYmlucHJtX3NldF9pbnRlcnBgIGlzIGEgQlBGIGtmdW5jIHNwZWNpZmljYWxseSBpbnRyb2R1Y2VkIGJ5IHRoaXMgcGF0Y2gsIHNvIGl0J3MgY3JpdGljYWwuIGBibV9icGZfcmVnYCBhbmQgYGJtX2JwZl91bnJlZ2AgYXJlIGFsc28ga2V5LCBhcyB0aGV5IGFyZSBpbnZvbHZlZCBpbiByZWdpc3RlcmluZyBhbmQgdW5yZWdpc3RlcmluZyB0aGUgQlBGIGBzdHJ1Y3Rfb3BzYC5cblxuTGV0J3MgbWFrZSBzdXJlIHRoZSBjb25maWdzIGFuZCBmb2N1cyBzeW1ib2xzIGFyZSBjb3JyZWN0OlxuXG5Db25maWc6IGBCSU5GTVRfTUlTQ19CUEZgXG5Gb2N1cyBTeW1ib2xzOiBgYnBmX2JpbnBybV9zZXRfaW50ZXJwYCwgYGJtX2JwZl9yZWdgLCBgYm1fYnBmX3VucmVnYCwgYGNyZWF0ZV9lbnRyeWAsIGBibV9yZWdpc3Rlcl93cml0ZWBcblxuSSdsbCBvbWl0IGBsb2FkX21pc2NfYmluYXJ5YCB0byBhdm9pZCB0ZXN0aW5nIGV4ZWN2ZSBpbiBnZW5lcmFsIGFuZCB0byBmb2N1cyB0ZXN0cyBvbiBuZXcgY29kZSwgYnV0IGBjcmVhdGVfZW50cnlgIGFuZCBgYm1fcmVnaXN0ZXJfd3JpdGVgIGxvb2sgdmVyeSBnb29kLlxuXG5Pa2F5LCB0aW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sLlxuXG5gV29ydGhGdXp6aW5nOiB0cnVlYFxuYEVuYWJsZUNvbmZpZ3M6IFtcIkJJTkZNVF9NSVNDX0JQRlwiXWBcbmBGb2N1c1N5bWJvbHM6IFtcImJwZl9iaW5wcm1fc2V0X2ludGVycFwiLCBcImJtX2JwZl9yZWdcIiwgXCJibV9icGZfdW5yZWdcIiwgXCJjcmVhdGVfZW50cnlcIiwgXCJibV9yZWdpc3Rlcl93cml0ZVwiXWBcbmBSZWFzb25pbmc6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgZmVhdHVyZSBhbGxvd2luZyBCUEYgcHJvZ3JhbXMgdG8gYWN0IGFzIGhhbmRsZXJzIGZvciBiaW5mbXRfbWlzYy4gSXRcblxuIiwiSW5wdXRUb2tlbnMiOjEyMDkwLCJPdXRwdXRUb2tlbnMiOjE2MywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzMTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wOFQwNjowMDo0NS44NTM2MDQyMjFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDI5MDc1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiQklORk1UX01JU0NfQlBGXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYnBmX2JpbnBybV9zZXRfaW50ZXJwXCIsXG4gICAgXCJibV9icGZfcmVnXCIsXG4gICAgXCJibV9icGZfdW5yZWdcIixcbiAgICBcImNyZWF0ZV9lbnRyeVwiLFxuICAgIFwiYm1fcmVnaXN0ZXJfd3JpdGVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IGZlYXR1cmUgYWxsb3dpbmcgQlBGIHByb2dyYW1zIHRvIGFjdCBhcyBoYW5kbGVycyBmb3IgYmluZm10X21pc2MuIEl0IGFkZHMgbmV3IEJQRiBzdHJ1Y3Rfb3BzIGFuZCBrZnVuY3MsIGFuZCBtb2RpZmllcyB0aGUgYmluZm10X21pc2MgcmVnaXN0cmF0aW9uIGFuZCBleGVjdXRpb24gbG9naWMuIEZ1enppbmcgc2hvdWxkIGZvY3VzIG9uIHRoZSBCUEYgcmVnaXN0cmF0aW9uL3VucmVnaXN0cmF0aW9uLCB0aGUgbmV3IGtmdW5jLCBhbmQgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBwYXRoLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkJJTkZNVF9NSVNDX0JQRlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImJwZl9iaW5wcm1fc2V0X2ludGVycFwiLFxuICAgIFwiYm1fYnBmX3JlZ1wiLFxuICAgIFwiYm1fYnBmX3VucmVnXCIsXG4gICAgXCJjcmVhdGVfZW50cnlcIixcbiAgICBcImJtX3JlZ2lzdGVyX3dyaXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBmZWF0dXJlIGFsbG93aW5nIEJQRiBwcm9ncmFtcyB0byBhY3QgYXMgaGFuZGxlcnMgZm9yIGJpbmZtdF9taXNjLiBJdCBhZGRzIG5ldyBCUEYgc3RydWN0X29wcyBhbmQga2Z1bmNzLCBhbmQgbW9kaWZpZXMgdGhlIGJpbmZtdF9taXNjIHJlZ2lzdHJhdGlvbiBhbmQgZXhlY3V0aW9uIGxvZ2ljLiBGdXp6aW5nIHNob3VsZCBmb2N1cyBvbiB0aGUgQlBGIHJlZ2lzdHJhdGlvbi91bnJlZ2lzdHJhdGlvbiwgdGhlIG5ldyBrZnVuYywgYW5kIHRoZSBiaW5mbXRfbWlzYyByZWdpc3RyYXRpb24gcGF0aC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowjvlrs[1] Phase: Succeeded StartedAt: 2026-07-08 06:00:59 +0000 UTC FinishedAt: 2026-07-08 06:00:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-08 06:00:59 +0000 UTC FinishedAt: 2026-07-08 06:00:59 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2] Phase: Succeeded StartedAt: 2026-07-08 06:00:59 +0000 UTC FinishedAt: 2026-07-08 10:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-08 06:00:59 +0000 UTC FinishedAt: 2026-07-08 10:40:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-08 06:00:59 +0000 UTC FinishedAt: 2026-07-08 06:01:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-08 06:00:59 +0000 UTC FinishedAt: 2026-07-08 06:01:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjvlrs/series-workflowjvlrs-convert-artifact-832682045/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-08 06:01:20 +0000 UTC FinishedAt: 2026-07-08 07:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-08 06:01:20 +0000 UTC FinishedAt: 2026-07-08 07:08:20 +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:*cf0992c2-85ba-4d8c-924e-869acc006ab0,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-workflowjvlrs/series-workflowjvlrs-convert-artifact-832682045/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": "dfa1bf59-3ab7-4722-84a1-05ee035ee1e1", "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-workflowjvlrs/series-workflowjvlrs-build-action-1408950643/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-08 06:01:20 +0000 UTC FinishedAt: 2026-07-08 07:08:08 +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:*cf0992c2-85ba-4d8c-924e-869acc006ab0,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-workflowjvlrs/series-workflowjvlrs-convert-artifact-832682045/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": "dfa1bf59-3ab7-4722-84a1-05ee035ee1e1", "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-workflowjvlrs/series-workflowjvlrs-build-action-1408950643/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-08 07:08:20 +0000 UTC FinishedAt: 2026-07-08 07:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-08 07:08:20 +0000 UTC FinishedAt: 2026-07-08 07:08:20 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-08 07:08:20 +0000 UTC FinishedAt: 2026-07-08 07:08:41 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-08 07:08:20 +0000 UTC FinishedAt: 2026-07-08 07:08:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowjvlrs/series-workflowjvlrs-convert-artifact-3914830744/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-08 07:08:41 +0000 UTC FinishedAt: 2026-07-08 07:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-08 07:08:41 +0000 UTC FinishedAt: 2026-07-08 07:10:32 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dfa1bf59-3ab7-4722-84a1-05ee035ee1e1,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-workflowjvlrs/series-workflowjvlrs-build-action-1408950643/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-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-08 07:10:42 +0000 UTC FinishedAt: 2026-07-08 07:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-08 07:10:42 +0000 UTC FinishedAt: 2026-07-08 07:10:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-08 07:10:42 +0000 UTC FinishedAt: 2026-07-08 07:35:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-08 07:10:42 +0000 UTC FinishedAt: 2026-07-08 07:35:05 +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:*cf0992c2-85ba-4d8c-924e-869acc006ab0,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-workflowjvlrs/series-workflowjvlrs-convert-artifact-3914830744/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": "28232918-1292-4719-874e-bfde27124a4d", "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-workflowjvlrs/series-workflowjvlrs-build-action-2177559556/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-08 07:10:42 +0000 UTC FinishedAt: 2026-07-08 07:34:55 +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:*cf0992c2-85ba-4d8c-924e-869acc006ab0,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-workflowjvlrs/series-workflowjvlrs-convert-artifact-3914830744/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": "28232918-1292-4719-874e-bfde27124a4d", "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-workflowjvlrs/series-workflowjvlrs-build-action-2177559556/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-08 07:35:05 +0000 UTC FinishedAt: 2026-07-08 07:35:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-08 07:35:05 +0000 UTC FinishedAt: 2026-07-08 07:35:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-08 07:35:05 +0000 UTC FinishedAt: 2026-07-08 07:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-08 07:35:05 +0000 UTC FinishedAt: 2026-07-08 07:37:07 +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:*28232918-1292-4719-874e-bfde27124a4d,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-workflowjvlrs/series-workflowjvlrs-build-action-2177559556/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-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-08 07:37:16 +0000 UTC FinishedAt: 2026-07-08 10:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-08 07:37:16 +0000 UTC FinishedAt: 2026-07-08 10:40:45 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"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:*dfa1bf59-3ab7-4722-84a1-05ee035ee1e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*28232918-1292-4719-874e-bfde27124a4d,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-workflowjvlrs/series-workflowjvlrs-build-action-1408950643/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-workflowjvlrs/series-workflowjvlrs-build-action-2177559556/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-08 07:37:16 +0000 UTC FinishedAt: 2026-07-08 07:37:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-08 07:37:16 +0000 UTC FinishedAt: 2026-07-08 07:37:36 +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-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"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-workflowjvlrs/series-workflowjvlrs-convert-artifact-1014727281/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-08 07:37:16 +0000 UTC FinishedAt: 2026-07-08 07:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-08 07:37:16 +0000 UTC FinishedAt: 2026-07-08 07:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-08 07:37:16 +0000 UTC FinishedAt: 2026-07-08 07:37:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-08 07:37:38 +0000 UTC FinishedAt: 2026-07-08 10:40:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowjvlrs[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-bpf-kasan-gce-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db","https://storage.googleapis.com/syzkaller/corpus/ci2-upstream-fs-corpus.db"],"focus":["bpf","fs"],"focus_symbols":["bpf_binprm_set_interp","bm_bpf_reg","bm_bpf_unreg","create_entry","bm_register_write"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["BINFMT_MISC_BPF"],"series_id":"a29d5169-204d-49c5-9178-c2e15dd52e02","tree_name":"bpf-next","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/bpf/bpf-next.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-08 07:37:38 +0000 UTC FinishedAt: 2026-07-08 10:40:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*dfa1bf59-3ab7-4722-84a1-05ee035ee1e1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*28232918-1292-4719-874e-bfde27124a4d,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-workflowjvlrs/series-workflowjvlrs-build-action-1408950643/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-workflowjvlrs/series-workflowjvlrs-build-action-2177559556/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-workflowjvlrs/series-workflowjvlrs-convert-artifact-1014727281/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,}