Name: series-workflowrs878 Phase: Succeeded StartedAt: 2026-09-08 04:00:27 +0000 UTC FinishedAt: 2026-09-08 08:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[0] Phase: Succeeded StartedAt: 2026-09-08 04:00:27 +0000 UTC FinishedAt: 2026-09-08 04:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[0].run-triage Phase: Succeeded StartedAt: 2026-09-08 04:00:27 +0000 UTC FinishedAt: 2026-09-08 04:49:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "12e9ac7bc5b254048f886bf421e3a15491106c1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "12e9ac7bc5b254048f886bf421e3a15491106c1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "18fe9e2e-c9c3-488e-939f-e8fda10262a7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "reparent_memcg_lruvec_state_local", "reparent_v2_lruvec_state_local", "memcg_reparent_objcgs", "count_shadow_nodes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbCYjMzQ7LAogICAgJiMzNDttZW1jZ19yZXBhcmVudF9vYmpjZ3MmIzM0OywKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL3dvcmtpbmdzZXQuYyBhbmQgbW0vbWVtY29udHJvbC5jLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgbm9uLWhpZXJhcmNoaWNhbCBMUlUgYW5kIHNsYWIgc3RhdGlzdGljcyBhcmUgcHJvcGVybHkgcmVwYXJlbnRlZCB0byBwYXJlbnQgY2dyb3VwcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIG1lbWNnIG9mZmxpbmluZyB0byBhdm9pZCB1bmRlcmZsb3dzIGluIHNoYWRvdyBub2RlIGFjY291bnRpbmcuXG5cbi0gTm8gbWVtb3J5IGFsbG9jYXRpb25zIChzdGFjayBvciBoZWFwIGJ1ZmZlcnMpIGFyZSBpbnRyb2R1Y2VkIG9yIGxlZnQgdW5pbml0aWFsaXplZC5cbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIGNvdWxkIGxlYWsuXG4tIFRoZSBwYXRjaCBvcGVyYXRlcyBzb2xlbHkgb24gZXhpc3Rpbmcga2VybmVsIGNvdW50ZXJzIGFuZCBkYXRhIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGBzdHJ1Y3QgbHJ1dmVjYCwgbm9kZSBzdGF0cykuXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyByZWZjb3VudGluZywgbG9ja2luZy9yYWNlcywgb3IgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyB3b3VsZCBiZSBhZGRyZXNzZWQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIGdlbmVyYWwga2VybmVsIHRlc3RpbmcsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyBkb2VzIG5vdCBwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmU2MTIwZWE3ZjU5MTkwNjM3NWE1YTFjYjI3NjY4ZDA1ZTNhMWQ0NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDQ6NDg6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXG5pbmRleCAxZTM5NDI2OWM2MTNkLi4wNTc4YjcwNzY3NjRkIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmhcbkBAIC0yNSw2ICYjNDM7MjUsOSBAQCBpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBuKTtcbiBcbiYjNDM7dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcbiYjNDM7XG4gLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBcbkBAIC03Myw4ICYjNDM7NzYsNiBAQCB2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2NnclxuIFxuIHZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XG4tdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuIFxuIHZvaWQgbWVtY2cxX2FjY291bnRfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcyk7XG4gc3RhdGljIGlubGluZSBib29sIG1lbWNnMV90Y3BtZW1fYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLmYxMzAzMGY3NWZhNTQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTIzMiwxNCAmIzQzOzIzMiwyOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY1xuIFx0cmV0dXJuIG9iamNnO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiYjNDM7LypcbiYjNDM7ICogUmVwYXJlbnQgdGhlIG5vbi1oaWVyYXJjaGljYWwgbHJ1dmVjIHN0YXRzIHRoYXQgY291bnRfc2hhZG93X25vZGVzKCkgcmVhZHNcbiYjNDM7ICogdG8gYXBwcm94aW1hdGUgdGhlIHNoYWRvdyBub2RlIGJ1ZGdldC4gIFRoZXkgYXJlIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZVxuJiM0MzsgKiBvbiBjZ3JvdXAgdjIsIGJ1dCB0aGV5IG11c3QgZm9sbG93IHRoZSByZXBhcmVudGVkIGZvbGlvczsgb3RoZXJ3aXNlIHRoZVxuJiM0MzsgKiBhbmNlc3RvciB3b3VsZCBvbmx5IHJlY2VpdmUgdGhlIG5lZ2F0aXZlIGRlbHRhcyB3aGVuIHRoZSBmb2xpb3MgYXJlIGZyZWVkXG4mIzQzOyAqIHdpdGhvdXQgZXZlciBoYXZpbmcgcmVjZWl2ZWQgdGhlIHBvc2l0aXZlIGJhc2UsIGFuZCBpdHMgbG9jYWwgc3RhdHMgd291bGRcbiYjNDM7ICogcGVybWFuZW50bHkgdW5kZXJmbG93LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4tXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIE5SX0xSVV9CQVNFICYjNDM7IGkpO1xuJiM0MztcbiYjNDM7XHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKTtcbiYjNDM7XHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IpO1xuJiM0Mzt9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4mIzQzO3tcbiBcdC8qXG4gXHQgKiBSZXBhcmVudCBzdGF0cyBleHBvc2VkIG5vbi1oaWVyYXJjaGljYWxseS4gRmx1c2ggQG1lbWNnJiMzOTtzIHN0YXRzIGZpcnN0XG4gXHQgKiB0byByZWFkIGl0cyBzdGF0cyBhY2N1cmF0ZWx5ICwgYW5kIGNvbnNlcnZhdGl2ZWx5IGZsdXNoIEBwYXJlbnQmIzM5O3NcbkBAIC0yNDgsMTcgJiM0MzsyNjMsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JcbiBcdCAqL1xuIFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTtcbiBcbi1cdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xuLVx0cmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuLVx0cmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbiYjNDM7XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xuJiM0MztcdFx0cmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiYjNDM7XHRcdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xuJiM0MztcdFx0cmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuJiM0MztcdFx0cmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0fVxuIFxuIFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHBhcmVudCwgdHJ1ZSk7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi17XG4tfVxuLSNlbmRpZlxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9sb2NrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4ge1xuQEAgLTU3MCw3ICYjNDM7NTg2LDYgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4gXHRcdFx0XHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCk7XG4gXG5AQCAtNTkyLDcgJiM0Mzs2MDcsNiBAQCB2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShwYXJlbnRfcG4sIGlkeCwgdmFsdWUpO1xuIFx0fVxuIH1cbi0jZW5kaWZcbiBcbiAvKiBTdWJzZXQgb2Ygdm1fZXZlbnRfaXRlbSB0byByZXBvcnQgZm9yIG1lbWNnIGV2ZW50IHN0YXRzICovXG4gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG5AQCAtODQ1LDE2ICYjNDM7ODU5LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4mIzQzOyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4mIzQzOyAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxuJiM0MzsgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbiYjNDM7Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXG4ge1xuLVx0LyogUmViaW5kaW5nIGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIGNoYW5nZWQgYXQgcnVudGltZSAqL1xuLVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcbiYjNDM7XHQgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9ja1xuJiM0MztcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4mIzQzO1x0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTg3NSwxNyAmIzQzOzg5NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHRcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXG4te1xuLVx0cmV0dXJuIG1lbWNnO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuLXtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCA3YWMyYjg4YzgwYWU1Li44NDEyZjQ4NDBhZTM1IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC02ODgsMTAgJiM0Mzs2ODgsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcbiBcdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cdTAwM2VtZW1jZyk7XG4gXHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVx1MDAzZW1lbWNnLCBOT0RFX0RBVEEoc2MtXHUwMDNlbmlkKSk7XG4tXG4gXHRcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7XG4tXG4mIzQzO1x0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IE5SX0xSVV9CQVNFICYjNDM7IGkpO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gXHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwmIzM0OywKICAgICYjMzQ7cmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O21lbWNnX3JlcGFyZW50X29iamNncyYjMzQ7LAogICAgJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmU2MTIwZWE3ZjU5MTkwNjM3NWE1YTFjYjI3NjY4ZDA1ZTNhMWQ0NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDQ6NDg6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmgKaW5kZXggMWUzOTQyNjljNjEzZC4uMDU3OGI3MDc2NzY0ZCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC12MS5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuaApAQCAtMjUsNiAmIzQzOzI1LDkgQEAgaW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTsKIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJCQkgICAgdW5zaWduZWQgaW50IG4pOwogCiYjNDM7dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7CiYjNDM7CiAvKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCiAKQEAgLTczLDggJiM0Mzs3Niw2IEBAIHZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyCiAKIHZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpOwotdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCSAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTsKIAogdm9pZCBtZW1jZzFfYWNjb3VudF9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKTsKIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfdGNwbWVtX2FjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uZjEzMDMwZjc1ZmE1NCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMjMyLDE0ICYjNDM7MjMyLDI5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jCiAJcmV0dXJuIG9iamNnOwogfQogCi0jaWZkZWYgQ09ORklHX01FTUNHX1YxCiBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKJiM0MzsvKgomIzQzOyAqIFJlcGFyZW50IHRoZSBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0cyB0aGF0IGNvdW50X3NoYWRvd19ub2RlcygpIHJlYWRzCiYjNDM7ICogdG8gYXBwcm94aW1hdGUgdGhlIHNoYWRvdyBub2RlIGJ1ZGdldC4gIFRoZXkgYXJlIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZQomIzQzOyAqIG9uIGNncm91cCB2MiwgYnV0IHRoZXkgbXVzdCBmb2xsb3cgdGhlIHJlcGFyZW50ZWQgZm9saW9zOyBvdGhlcndpc2UgdGhlCiYjNDM7ICogYW5jZXN0b3Igd291bGQgb25seSByZWNlaXZlIHRoZSBuZWdhdGl2ZSBkZWx0YXMgd2hlbiB0aGUgZm9saW9zIGFyZSBmcmVlZAomIzQzOyAqIHdpdGhvdXQgZXZlciBoYXZpbmcgcmVjZWl2ZWQgdGhlIHBvc2l0aXZlIGJhc2UsIGFuZCBpdHMgbG9jYWwgc3RhdHMgd291bGQKJiM0MzsgKiBwZXJtYW5lbnRseSB1bmRlcmZsb3cuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIHsKLQlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkKLQkJcmV0dXJuOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspCiYjNDM7CQlyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfTFJVX0JBU0UgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CXJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpOwomIzQzOwlyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IpOwomIzQzO30KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiYjNDM7ewogCS8qCiAJICogUmVwYXJlbnQgc3RhdHMgZXhwb3NlZCBub24taGllcmFyY2hpY2FsbHkuIEZsdXNoIEBtZW1jZyYjMzk7cyBzdGF0cyBmaXJzdAogCSAqIHRvIHJlYWQgaXRzIHN0YXRzIGFjY3VyYXRlbHkgLCBhbmQgY29uc2VydmF0aXZlbHkgZmx1c2ggQHBhcmVudCYjMzk7cwpAQCAtMjQ4LDE3ICYjNDM7MjYzLDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyCiAJICovCiAJX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTsKIAotCS8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqLwotCXJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTsKLQlyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpOwomIzQzOwlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkgewomIzQzOwkJcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpOwomIzQzOwl9IGVsc2UgewomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKJiM0MzsJCS8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqLwomIzQzOwkJcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpOwomIzQzOwkJcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTsKJiM0MzsjZW5kaWYKJiM0MzsJfQogCiAJX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHBhcmVudCwgdHJ1ZSk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKLXsKLX0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfbG9ja3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKQogewpAQCAtNTcwLDcgJiM0Mzs1ODYsNiBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlyZXR1cm4geDsKIH0KIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQogc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbiwKIAkJCQkgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCk7CiAKQEAgLTU5Miw3ICYjNDM7NjA3LDYgQEAgdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQlfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocGFyZW50X3BuLCBpZHgsIHZhbHVlKTsKIAl9CiB9Ci0jZW5kaWYKIAogLyogU3Vic2V0IG9mIHZtX2V2ZW50X2l0ZW0gdG8gcmVwb3J0IGZvciBtZW1jZyBldmVudCBzdGF0cyAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7CkBAIC04NDUsMTYgJiM0Mzs4NTksMjEgQEAgc3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKQogCXJldHVybiB2YWwgJmx0OyAwID8gLXJlcyA6IHJlczsKIH0KIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQogLyoKLSAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlIHdpdGgKLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLgomIzQzOyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlCiYjNDM7ICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhCiYjNDM7ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJCQkgICBib29sICpyY3VfbG9ja2VkKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKgomIzQzO2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKQogewotCS8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi8KLQlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkgewomIzQzOwkvKgomIzQzOwkgKiBGYXN0IHBhdGg6IHRoZSBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gQG1lbWNnLCBzbyByZWFkaW5nCiYjNDM7CSAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrCiYjNDM7CSAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoCiYjNDM7CSAqIGhhcHBlbnMgb25seSB3aGlsZSBhIG1lbWNnIGlzIGFjdHVhbGx5IGJlaW5nIG9mZmxpbmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHsKIAkJKnJjdV9sb2NrZWQgPSBmYWxzZTsKIAkJcmV0dXJuIG1lbWNnOwogCX0KQEAgLTg3NSwxNyAmIzQzOzg5NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpCiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJCQkgICBib29sICpyY3VfbG9ja2VkKQotewotCXJldHVybiBtZW1jZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZCkKLXsKLX0KLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkgICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKQpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTY4OCwxMCAmIzQzOzY4OCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLAogCiAJCW1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtJmd0O21lbWNnKTsKIAkJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtJmd0O21lbWNnLCBOT0RFX0RBVEEoc2MtJmd0O25pZCkpOwotCiAJCWZvciAocGFnZXMgPSAwLCBpID0gMDsgaSAmbHQ7IE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspCi0JCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7Ci0KJiM0MzsJCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLAomIzQzOwkJCQkJCQkgTlJfTFJVX0JBU0UgJiM0MzsgaSk7CiAJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgKIAkJCWxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBMb29raW5nIGF0IHRoZSBwYXRjaCBkZXRhaWxzLCBpdCYjMzk7cyBmb2N1c2VkIG9uIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgc3RhdHMgcmVwYXJlbnRpbmcgYW5kIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmcsIHByaW1hcmlseSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL2ApLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGluIGBtbS9tZW1jb250cm9sLmNgIGxvb2sgaW50ZXJlc3RpbmcuCgpUaGV5JiMzOTt2ZSBhZGRlZCBgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsYCB0byBoYW5kbGUgbm9uLWhpZXJhcmNoaWNhbCBMUlV2ZWMgc3RhdHMgZm9yIGNncm91cCB2Mi4gVGhleSYjMzk7cmUgYWxzbyB1cGRhdGluZyBgcmVwYXJlbnRfc3RhdGVfbG9jYWxgIHRvIGNhbGwgdGhpcyBuZXcgZnVuY3Rpb24gb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5LCB3aGljaCBpcyBjZ3JvdXAgdjIuIEl0IHNlZW1zIGxpa2UgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgdW5jb25kaXRpb25hbGx5IG5vdywgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLiBBbHNvLCBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAgYW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZGAgYXJlIGFsc28gbm93IHVuY29uZGl0aW9uYWxseSBlbmFibGVkIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLgoKSW4gYG1tL3dvcmtpbmdzZXQuY2AsIGBjb3VudF9zaGFkb3dfbm9kZXNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgIGluc3RlYWQgb2YgYGxydXZlY19scnVfc2l6ZWAuIFRoYXQmIzM5O3MgYSBzaGlmdCBpbiBob3cgdGhleSYjMzk7cmUgY2FsY3VsYXRpbmcgc29tZXRoaW5nLCB3aGljaCBpcyBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by4KCkFscmlnaHQsIGlzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZWZmb3J0IHRvIGNvbnNpZGVyIGl0IGZvciBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbS9gKSwgbWVtY2csIGFuZCB3b3JraW5nc2V0IOKAkyBhbGwgYXJlYXMgdGhhdCBhcmUgZnVsbHkgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2NhbGxzLCBjZ3JvdXBmcywgZmlsZSBJL08sIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UuIENvcmUgc3Vic3lzdGVtIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYWx3YXlzIGdldCBteSBhdHRlbnRpb24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nLCBhbmQgc3lzY2FsbCBoYW5kbGluZyBhc3BlY3RzLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGUgcGF0Y2ggZml0cyBvdXIgZXN0YWJsaXNoZWQgZnV6emluZyBydWxlcy4gJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBpcyBkZWZpbml0ZWx5IHRydWUuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsuIEkgbmVlZCB0byBwcmlvcml0aXplIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBmZWF0dXJlLXNwZWNpZmljIGVudHJ5cG9pbnRzLCBhbmQgYXZvaWQgZnVuY3Rpb25zIHRoYXQgYXJlIHViaXF1aXRvdXMuIFNvLCBsZXQgbWUgbWFrZSBhIGxpc3Qgb2YgY2FuZGlkYXRlIGZ1bmN0aW9uczoKCiogICBgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsYCAoVGhpcyBvbmUgc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nKQoqICAgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoVGhpcyBpcyBpbmxpbmUvYSBjYWxsZXIsIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgY2FsbGVkKQoqICAgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgKE1hZGUgdW5jb25kaXRpb25hbCBub3cpCiogICBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAKKiAgIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZGAKKiAgIGBjb3VudF9zaGFkb3dfbm9kZXNgCgpJJiMzOTtsbCB1c2UgYGdpdCBncmVwYCB0byBmaW5kIGNhbGxlcnMgb2YgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCBhbmQgd2hlcmUgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgaXMgdXNlZCBmb3IgZnVydGhlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXBhcmVudF9zdGF0ZV9sb2NhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjQ1PXN0YXRpYyB2b2lkIHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTI1NS1cbm1tL21lbWNvbnRyb2wuYzoyNTY6c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wuYy0yNTcte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yOTM9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzIzLVxubW0vbWVtY29udHJvbC5jOjMyNDpcdHJlcGFyZW50X3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xubW0vbWVtY29udHJvbC5jLTMyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IENvbnRyb2wgRGV0YWlscyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgYnVzaW5lc3MsIGFuZCB0aGUgcmVsYXRlZCBgY291bnRfc2hhZG93X25vZGVzYCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZXkgYXJlIGNsb3NlbHkgbGlua2VkIGFuZCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgb2YgdGhlaXIgcmVsYXRpb25zaGlwLiBJJiMzOTtsbCBvcGVuIHVwIGBtbS9tZW1jb250cm9sLmNgIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDMyNC4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSByZXZlYWxzIGFib3V0IHRoZSBsb2dpYyBhbmQgcHVycG9zZSBvZiB0aGVzZSBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sIHN1YnN5c3RlbS4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIG9iamVjdCBncm91cCByZXBhcmVudGluZywgbWF5YmUgc29tZSBraW5kIG9mIGNvdW50ZXIgbWFuYWdlbWVudCwgb3Igc2hhZG93IG5vZGUgbWFuaXB1bGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGFjdHVhbCBjb2RlIHNheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm9iamNnX2xvY2spO1xuIDI5MTpcdH1cbiAyOTI6XHRcbiAyOTM6XHRzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIDI5NDpcdHtcbiAyOTU6XHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiAyOTY6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4gMjk3Olx0XHRpbnQgbmlkO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbiAzMDA6XHRyZXRyeTpcbiAzMDE6XHRcdFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxuIDMwMjpcdFx0XHRcdG1heF9scnVfZ2VuX21lbWNnKHBhcmVudCwgbmlkKTtcbiAzMDM6XHRcbiAzMDQ6XHRcdFx0cmVwYXJlbnRfbG9ja3MobWVtY2csIHBhcmVudCwgbmlkKTtcbiAzMDU6XHRcbiAzMDY6XHRcdFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG4gMzA3Olx0XHRcdFx0aWYgKCFyZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHBhcmVudCwgbmlkKSkge1xuIDMwODpcdFx0XHRcdFx0cmVwYXJlbnRfdW5sb2NrcyhtZW1jZywgcGFyZW50LCBuaWQpO1xuIDMwOTpcdFx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gMzEwOlx0XHRcdFx0XHRnb3RvIHJldHJ5O1xuIDMxMTpcdFx0XHRcdH1cbiAzMTI6XHRcdFx0XHRscnVfZ2VuX3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG4gMzEzOlx0XHRcdH0gZWxzZSB7XG4gMzE0Olx0XHRcdFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG4gMzE1Olx0XHRcdH1cbiAzMTY6XHRcbiAzMTc6XHRcdFx0b2JqY2cgPSBfX21lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZywgcGFyZW50LCBuaWQpO1xuIDMxODpcdFxuIDMxOTpcdFx0XHRyZXBhcmVudF91bmxvY2tzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG4gMzIwOlx0XG4gMzIxOlx0XHRcdHBlcmNwdV9yZWZfa2lsbChcdTAwMjZvYmpjZy1cdTAwM2VyZWZjbnQpO1xuIDMyMjpcdFx0fVxuIDMyMzpcdFxuIDMyNDpcdFx0cmVwYXJlbnRfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XG4gMzI1Olx0fVxuIDMyNjpcdFxuIDMyNzpcdC8qXG4gMzI4Olx0ICogQSBsb3Qgb2YgdGhlIGNhbGxzIHRvIHRoZSBjYWNoZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmVcbiAzMjk6XHQgKiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgdGhlIGNhbGxzIHRvIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKCkgYXJlXG4gMzMwOlx0ICogY29uZGl0aW9uYWwgdG8gdGhpcyBzdGF0aWMgYnJhbmNoLCB3ZSYjMzk7bGwgaGF2ZSB0byBhbGxvdyBtb2R1bGVzIHRoYXQgZG9lc1xuIDMzMTpcdCAqIGttZW1fY2FjaGVfYWxsb2MgYW5kIHRoZSBzdWNoIHRvIHNlZSB0aGlzIHN5bWJvbCBhcyB3ZWxsXG4gMzMyOlx0ICovXG4gMzMzOlx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobWVtY2dfa21lbV9vbmxpbmVfa2V5KTtcbiAzMzQ6XHRFWFBPUlRfU1lNQk9MKG1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4gMzM1Olx0XG4gMzM2Olx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobWVtY2dfYnBmX2VuYWJsZWRfa2V5KTtcbiAzMzc6XHRFWFBPUlRfU1lNQk9MKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XG4gMzM4Olx0XG4gMzM5Olx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbWVtY2dfcmVwYXJlbnRfb2JqY2dzYCBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGV4YWN0bHkgaXMgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgYmVpbmcgaW52b2tlZD8mIzM0OyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgaXRzIHB1cnBvc2UsIHBvdGVudGlhbCBpbXBhY3QsIG9yIGFueSByZWxhdGVkIGlzc3Vlcy4gS25vd2luZyB0aGUgY29udGV4dCBvZiBpdHMgZXhlY3V0aW9uIGlzIHBhcmFtb3VudC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2Ygd2hlbiBhbmQgd2h5IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSB0cmlnZ2VyaW5nIGV2ZW50cyBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGhhbmRsZS4gQSBxdWljayBncmVwIG1pZ2h0IGdpdmUgbWUgYSBsaXN0LCBidXQgSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGRvbmUgaW4gdGhlIGNvZGUsIGFuZCBob3cgdGhhdCByZWxhdGVzIHRvIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfcmVwYXJlbnRfb2JqY2dzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0xOTY9c3RhdGljIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpfY2dyb3VwX2FsbG9jKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTIxNC1cbm1tL21lbWNvbnRyb2wuYzoyMTU6c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTIxNi1cdFx0XHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yODY9c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3VubG9ja3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yOTItXG5tbS9tZW1jb250cm9sLmM6MjkzOnN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtMjk0LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE2LVxubW0vbWVtY29udHJvbC5jOjMxNzpcdFx0b2JqY2cgPSBfX21lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZywgcGFyZW50LCBuaWQpO1xubW0vbWVtY29udHJvbC5jLTMxOC1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDM1Nj1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNzItXHQgKi9cbm1tL21lbWNvbnRyb2wuYzo0MzczOlx0bWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00Mzc0LVx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NDAyPXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQxNi0gKlxubW0vbWVtY29udHJvbC5jOjU0MTc6ICogbWVtY2dfcmVwYXJlbnRfb2JqY2dzKCkgcmVwYXJlbnRzIGEgZHlpbmcgY2dyb3VwIG9uZSBub2RlIGF0IGEgdGltZTogdGhlXG5tbS9tZW1jb250cm9sLmMtNTQxOC0gKiBmb2xpb3Mgb24gdGhhdCBub2RlJiMzOTtzIExSVSBsaXN0cyBtb3ZlIHRvIHRoZSBwYXJlbnQgYW5kIHRoYXQgbm9kZSYjMzk7cyBvYmpjZyBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzcGVjaWZpY2FsbHkgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhbmQgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kYCBhcmUgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIHRyYWNrIHRob3NlIGNhbGxzIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlLCBhbmQgd2hhdCBzdGF0ZSB0aGV5IGRlcGVuZCBvbi4gVGhpcyBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgY2dyb3VwIGxpZmVjeWNsZXMgYW5kIHRyYW5zaXRpb25zLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGluc3RydW1lbnRhbCBmb3IgdW5kZXJzdGFuZGluZyBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGRlYXRoIGhhbmRsaW5nLCByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGV2ZW4gYWNjb3VudGluZyBkdXJpbmcgdmFyaW91cyBzdGF0ZXMgb2YgdGhlIGNncm91cCBoaWVyYXJjaHkuIEtub3dpbmcgdGhlaXIgY2FsbGVycyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNhbGxzIGluIHJlbGF0aW9uIHRvIHJlc291cmNlIGxpbWl0YXRpb25zIGFuZCB0aGUgZGVhdGggc3RhdGUgb2YgbWVtb3J5IGNncm91cHMsIHdoaWNoIGNvdWxkIGV4cG9zZSByYWNlIGNvbmRpdGlvbnMgb3IgcG90ZW50aWFsIGRlYWRsb2Nrcy4gVWx0aW1hdGVseSwgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgcG9pbnRzIHdpbGwgY2xhcmlmeSBob3cgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIGFuZCBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmRgIGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9ub25fZHlpbmdfbWVtY2dfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz04Njc9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG5tbS9tZW1jb250cm9sLmM6ODY4OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxubW0vbWVtY29udHJvbC5jLTg2OS17XG4tLVxubW0vbWVtY29udHJvbC5jLTg4OS1cbm1tL21lbWNvbnRyb2wuYzo4OTA6c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbm1tL21lbWNvbnRyb2wuYy04OTEte1xuLS1cbm1tL21lbWNvbnRyb2wuYz05MjQ9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkzMS1cbm1tL21lbWNvbnRyb2wuYzo5MzI6XHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFx1MDAyNnJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTkzMy1cdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG5tbS9tZW1jb250cm9sLmM6OTM0Olx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTM1LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9OTkwPXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy05OTktXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xubW0vbWVtY29udHJvbC5jOjEwMDA6XHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQocG4tXHUwMDNlbWVtY2csIFx1MDAyNnJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTEwMDEtXHRwbiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xMDA0LVxubW0vbWVtY29udHJvbC5jOjEwMDU6XHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wuYy0xMDA2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIxMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE1FTUNHIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGFyZSAqYWJzb2x1dGVseSogZXNzZW50aWFsIGZvciBNRU1DRyB0byBmdW5jdGlvbi4gTm8gc2hvcnRjdXRzIGhlcmU7IGEgcHJvcGVyIGRlcGVuZGVuY3kgYW5hbHlzaXMgaXMgY3JpdGljYWwuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBkbyBpcyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBwcmltYXJ5IGRlZmluaXRpb25zIHdpbGwgcmVzaWRlIGluIGVpdGhlciBgaW5pdC9LY29uZmlnYCDigJMgZ2l2ZW4gaXRzIHJvbGUgaW4gc3lzdGVtIGluaXRpYWxpemF0aW9uIGFuZCBtb2R1bGUgbG9hZGluZyDigJMgb3IsIG1vcmUgbGlrZWx5LCBgbW0vS2NvbmZpZ2AsIGFzIE1FTUNHIGlzIGZ1bmRhbWVudGFsbHkgbWVtb3J5IG1hbmFnZW1lbnQtY2VudHJpYy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSByaWdodCBmaWxlcy4gVGhhdCYjMzk7bGwgYmUgdGhlIGZhc3Rlc3QgcGF0aCB0byB1bmNvdmVyIGFueSBpbXBsaWNpdCBvciBleHBsaWNpdCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDctXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA5LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRXhhbWluaW5nIE1FTUNHIERlcGVuZGVuY2llcyBpbiBgaW5pdC9LY29uZmlnYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluaXQvS2NvbmZpZ2AuIExpbmUgMTA4NSBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBiZWdpbiB0aGUgaW52ZXN0aWdhdGlvbi4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgcmVsYXRpb25zaGlwcyBhcmUgY2xlYXJseSBkZWZpbmVkIGFyb3VuZCB0aGF0IHNwb3QuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBwb3NzaWJseSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBpZGVhbGx5LCBzb21lIGNvbmNpc2UgY29tbWVudHMgdGhhdCBvdXRsaW5lIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYE1FTUNHYCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0gYnVpbGQgYXMgYSB3aG9sZS4gSSBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgcHJlcmVxdWlzaXRlcywgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCBhbnkgaW1wbGllZCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xuMTA4MTpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA4MjpcdFxuMTA4MzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDg0Olx0XG4xMDg1Olx0Y29uZmlnIE1FTUNHXG4xMDg2Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDg3Olx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDg4Olx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4OTpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA5MDpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDkxOlx0XHRoZWxwXG4xMDkyOlx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuMTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTEwMjpcdFx0Ym9vbFxuMTEwMzpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTEwNDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTEwNTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTEwNjpcdFx0ZGVmYXVsdCB5XG4xMTA3Olx0XG4xMTA4Olx0Y29uZmlnIE1FTUNHX1YxXG4xMTA5Olx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMTA6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMTE6XHRcdGRlZmF1bHQgblxuMTExMjpcdFx0aGVscFxuMTExMzpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjExMTQ6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IENvbXBvbmVudHMqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtZW1jb250cm9sLmNgIGFuZCBgd29ya2luZ3NldC5jYCBhcmUgYmVpbmcgY29tcGlsZWQgYW5kIGxpbmtlZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGBtbS9gIGRpcmVjdG9yeSBpcyB0aGUgbGlrZWx5IHBsYWNlIGZvciB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIGRpcmVjdGx5LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWxlcyBmb3IgdGhvc2Ugc3BlY2lmaWMgc291cmNlIGZpbGVzIGFuZCB0aGVpciB0YXJnZXRzIHdpbGwgYmUgZGVmaW5lZCwgYW5kIEkmIzM5O2xsIGJlIGFibGUgdG8gdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGFueSBjdXN0b20gYnVpbGQgZmxhZ3MgYmVpbmcgdXNlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGhvdyB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kLCB1bHRpbWF0ZWx5LCB3aGF0IHRoZSBjb21waWxlZCBvdXRwdXRzIGxvb2sgbGlrZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sfHdvcmtpbmdzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlOjI5OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01Ni1cdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxubW0vTWFrZWZpbGU6NTc6XHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG5tbS9NYWtlZmlsZS01OC1cdFx0XHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcbi0tXG5tbS9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA0Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBicGZfbWVtY29udHJvbC5vXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbWNnIENvZGUgZm9yIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBlbmFibGluZyBgQ09ORklHX01FTUNHYCBjb21waWxlcyBgbWVtY29udHJvbC5vYCwgYW5kIGB3b3JraW5nc2V0Lm9gIGlzIGFsd2F5cyBidWlsdC4gU2luY2UgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggYm90aCB2MSBhbmQgdjIgbWVtY2dzLCBgQ09ORklHX01FTUNHX1YxYCBtaWdodCBiZSByZWxldmFudCwgYnV0IGBNRU1DR2AgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgaW5jbHVkZSBgTUVNQ0dgIGFzIHRoZSBjb3JlIGNvbmNlcm4uCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gSGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIG5vdGVkOgoKKiAgIGByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWxgIChpbiBgbWVtY29udHJvbC5jYCwgbm9uLXN0YXRpYykgLSB0aGlzIGlzIHRoZSBuZXdseSB1bi1pZmRlZiYjMzk7ZCBmdW5jdGlvbiBhbmQgbWlnaHQgYmUgc2lnbmlmaWNhbnQuCiogICBgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsYCAoc3RhdGljIGluIGBtZW1jb250cm9sLmNgKQoqICAgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoc3RhdGljIGluIGBtZW1jb250cm9sLmNgKQoqICAgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgKGNhbGxzIGByZXBhcmVudF9zdGF0ZV9sb2NhbGAgZHVyaW5nIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCkgLSB0aGlzIHNvdW5kcyBsaWtlIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uLCB3aGljaCBjb3VsZCBiZSBhbiBpbXBvcnRhbnQgb3BlcmF0aW9uIHRvIG9wdGltaXplLgoqICAgYGNvdW50X3NoYWRvd19ub2Rlc2AgKGluIGB3b3JraW5nc2V0LmNgKSAtIHRoaXMgaXMgdGhlIHNocmlua2VyIGNvdW50IGNhbGxiYWNrIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2Rlcy4KKiAgIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCAoc3RhdGljIGlubGluZSBpbiBgbWVtY29udHJvbC5jYCkgLSB3aGljaCBpcyBjYWxsZWQgYnkgYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYC4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgIGFyZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBvciBzcGVjaWZpYyB0byBjZXJ0YWluIGZlYXR1cmVzLiBJdCBsb29rcyBsaWtlIHRoZXkgYXJlIG1lbWNnIHN0YXQgbW9kaWZpZXJzLiBBbmQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgdGhlIHNocmlua2VyIGNvdW50IGNhbGxiYWNrIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2Rlcy4gYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgaXMgdGhlIG5ldyBmdW5jdGlvbi4gRmluYWxseSwgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgaXMgd2hhdCBhY3R1YWxseSBkb2VzIHRoZSByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uLgoKTmV4dCBzdGVwOiBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjYWxsZXJzIGFuZCBkZWZpbml0aW9uIG9mIGBjb3VudF9zaGFkb3dfbm9kZXNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jPTYyND12b2lkIHdvcmtpbmdzZXRfdXBkYXRlX25vZGUoc3RydWN0IHhhX25vZGUgKm5vZGUpXG4tLVxubW0vd29ya2luZ3NldC5jLTY1MC1cbm1tL3dvcmtpbmdzZXQuYzo2NTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG5tbS93b3JraW5nc2V0LmMtNjUyLVx0XHRcdFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3dvcmtpbmdzZXQuYz03OTI9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXG4tLVxubW0vd29ya2luZ3NldC5jLTgyOC1cbm1tL3dvcmtpbmdzZXQuYzo4Mjk6XHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzO1xubW0vd29ya2luZ3NldC5jLTgzMC1cdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHNjYW5fc2hhZG93X25vZGVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE1OQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBDb25maXJtZWQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBiYXNlZCBvbiBteSBhbmFseXNpcywgaXQgbG9va3MgbGlrZSBhIGdvIGZvciBmdXp6aW5nLiBIZXJlJiMzOTtzIHRoZSBicmVha2Rvd246IEkgc2VlIHRoYXQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgYmVpbmcgZGlyZWN0bHkgdHdlYWtlZCBpbiBgbW0vd29ya2luZ3NldC5jYCwgYW5kIEkmIzM5O3ZlIGFsc28gaWRlbnRpZmllZCBzZXZlcmFsIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS9tZW1jb250cm9sLmNgOiBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbGAgKHdoaWNoLCBieSB0aGUgd2F5LCBpcyBtYXJrZWQgc3RhdGljKSwgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoYWxzbyBzdGF0aWMgaW5saW5lKSwgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgKGFub3RoZXIgc3RhdGljIG9uZSEpLCBhbmQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCB3aGljaCBpcyB0aGUgQ1NTIGNhbGxiYWNrIGZvciBjZ3JvdXAgZGVzdHJ1Y3Rpb24uIFBsdXMsIHRoZSBjcml0aWNhbCBzeW1ib2wsIGBjb3VudF9zaGFkb3dfbm9kZXNgLCBpcyBsaXN0ZWQgYXMgYmVpbmcgZGlyZWN0bHkgcmVsZXZhbnQuCgpJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGUgcHJlLXJlcXVpc2l0ZXM6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGVzIGBNRU1DR2AuIE15IGZvY3VzIHN5bWJvbHMgYXJlIHNwb3Qgb246IGBjb3VudF9zaGFkb3dfbm9kZXNgLCBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbGAsIGFuZCBgbWVtY2dfcmVwYXJlbnRfb2JqY2dzYCB3aGljaCBhbGlnbnMgd2l0aCB0aGUgb2JzZXJ2ZWQgbW9kaWZpY2F0aW9ucy4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBtZW1vcnkgY2dyb3VwIHJlcGFyZW50aW5nLCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCB2MiYjMzk7cyBub24taGllcmFyY2hpY2FsIExSVSB2ZWN0b3Igc3RhdGlzdGljcy4gSXQmIzM5O3MgYWxzbyBtYWtpbmcgYWRqdXN0bWVudHMgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIHRvIGhhbmRsZSBkeWluZyBjZ3JvdXBzIGFjcm9zcyBoaWVyYXJjaGllcy4gUGx1cywgaXQmIzM5O3MgdXBkYXRpbmcgc2hhZG93IG5vZGUgY291bnRpbmcgaW4gYHdvcmtpbmdzZXQuY2AgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgdGVhcmRvd24vcmVwYXJlbnRpbmcgY2hhbmdlcywgYW5kIGFsbCBvZiB0aGVzZSBhcmUgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIG9wZXJhdGlvbnM6IGNncm91cCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbWVtb3J5IGFsbG9jYXRpb24gcmVxdWVzdHMsIGFuZCB0aGUgbWVtb3J5IHJlY2xhaW0vc2hyaW5rZXIgbWVjaGFuaXNtcy4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjcnVjaWFsIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBicm9hZGx5IGFjY2Vzc2libGUuIEkgYW0gcmVhc29uYWJseSBjZXJ0YWluIHRoYXQgdGhpcyBpcyBhbiBhcmVhIHRoYXQgd2FycmFudHMgZnV6emluZy4gQWxsIGNoZWNrcyBvdXQsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbCYjMzQ7LAogICAgJiMzNDttZW1jZ19yZXBhcmVudF9vYmpjZ3MmIzM0OywKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtbS93b3JraW5nc2V0LmMgdG8gcmVwYXJlbnQgbm9uLWhpZXJhcmNoaWNhbCBscnV2ZWMgc3RhdGlzdGljcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIGNncm91cCBvZmZsaW5pbmcsIGFkanVzdHMgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCBhY3Jvc3MgaGllcmFyY2hpZXMsIGFuZCBhbHRlcnMgaG93IGNvdW50X3NoYWRvd19ub2RlcyBjb21wdXRlcyBsb2NhbCBwYWdlIHN0YXRlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGxpZmVjeWNsZSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwmIzM0OywKICAgICYjMzQ7cmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O21lbWNnX3JlcGFyZW50X29iamNncyYjMzQ7LAogICAgJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL3dvcmtpbmdzZXQuYyBhbmQgbW0vbWVtY29udHJvbC5jLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgbm9uLWhpZXJhcmNoaWNhbCBMUlUgYW5kIHNsYWIgc3RhdGlzdGljcyBhcmUgcHJvcGVybHkgcmVwYXJlbnRlZCB0byBwYXJlbnQgY2dyb3VwcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIG1lbWNnIG9mZmxpbmluZyB0byBhdm9pZCB1bmRlcmZsb3dzIGluIHNoYWRvdyBub2RlIGFjY291bnRpbmcuXG5cbi0gTm8gbWVtb3J5IGFsbG9jYXRpb25zIChzdGFjayBvciBoZWFwIGJ1ZmZlcnMpIGFyZSBpbnRyb2R1Y2VkIG9yIGxlZnQgdW5pbml0aWFsaXplZC5cbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIGNvdWxkIGxlYWsuXG4tIFRoZSBwYXRjaCBvcGVyYXRlcyBzb2xlbHkgb24gZXhpc3Rpbmcga2VybmVsIGNvdW50ZXJzIGFuZCBkYXRhIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGBzdHJ1Y3QgbHJ1dmVjYCwgbm9kZSBzdGF0cykuXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyByZWZjb3VudGluZywgbG9ja2luZy9yYWNlcywgb3IgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyB3b3VsZCBiZSBhZGRyZXNzZWQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIGdlbmVyYWwga2VybmVsIHRlc3RpbmcsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyBkb2VzIG5vdCBwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJlNjEyMGVhN2Y1OTE5MDYzNzVhNWExY2IyNzY2OGQwNWUzYTFkNDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA0OjQ4OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oCmluZGV4IDFlMzk0MjY5YzYxM2QuLjA1NzhiNzA3Njc2NGQgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmgKQEAgLTI1LDYgJiM0MzsyNSw5IEBAIGludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7CiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQkJICAgIHVuc2lnbmVkIGludCBuKTsKIAomIzQzO3ZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpOwomIzQzOwogLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqLwogI2lmZGVmIENPTkZJR19NRU1DR19WMQogCkBAIC03Myw4ICYjNDM7NzYsNiBAQCB2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2NncgogCiB2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTsKLXZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7CiAKIHZvaWQgbWVtY2cxX2FjY291bnRfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcyk7CiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX3RjcG1lbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDEyNzFkMzkwYjYxN2UuLmYxMzAzMGY3NWZhNTQgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTIzMiwxNCAmIzQzOzIzMiwyOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtYwogCXJldHVybiBvYmpjZzsKIH0KIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQogc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiYjNDM7LyoKJiM0MzsgKiBSZXBhcmVudCB0aGUgbm9uLWhpZXJhcmNoaWNhbCBscnV2ZWMgc3RhdHMgdGhhdCBjb3VudF9zaGFkb3dfbm9kZXMoKSByZWFkcwomIzQzOyAqIHRvIGFwcHJveGltYXRlIHRoZSBzaGFkb3cgbm9kZSBidWRnZXQuICBUaGV5IGFyZSBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UKJiM0MzsgKiBvbiBjZ3JvdXAgdjIsIGJ1dCB0aGV5IG11c3QgZm9sbG93IHRoZSByZXBhcmVudGVkIGZvbGlvczsgb3RoZXJ3aXNlIHRoZQomIzQzOyAqIGFuY2VzdG9yIHdvdWxkIG9ubHkgcmVjZWl2ZSB0aGUgbmVnYXRpdmUgZGVsdGFzIHdoZW4gdGhlIGZvbGlvcyBhcmUgZnJlZWQKJiM0MzsgKiB3aXRob3V0IGV2ZXIgaGF2aW5nIHJlY2VpdmVkIHRoZSBwb3NpdGl2ZSBiYXNlLCBhbmQgaXRzIGxvY2FsIHN0YXRzIHdvdWxkCiYjNDM7ICogcGVybWFuZW50bHkgdW5kZXJmbG93LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiB7Ci0JaWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpCi0JCXJldHVybjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KQomIzQzOwkJcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIE5SX0xSVV9CQVNFICYjNDM7IGkpOwomIzQzOwomIzQzOwlyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKTsKJiM0MzsJcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CKTsKJiM0Mzt9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQomIzQzO3sKIAkvKgogCSAqIFJlcGFyZW50IHN0YXRzIGV4cG9zZWQgbm9uLWhpZXJhcmNoaWNhbGx5LiBGbHVzaCBAbWVtY2cmIzM5O3Mgc3RhdHMgZmlyc3QKIAkgKiB0byByZWFkIGl0cyBzdGF0cyBhY2N1cmF0ZWx5ICwgYW5kIGNvbnNlcnZhdGl2ZWx5IGZsdXNoIEBwYXJlbnQmIzM5O3MKQEAgLTI0OCwxNyAmIzQzOzI2MywxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2NncgogCSAqLwogCV9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZywgdHJ1ZSk7CiAKLQkvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi8KLQlyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7Ci0JcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTsKJiM0MzsJaWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHsKJiM0MzsJCXJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHX1YxCiYjNDM7CQkvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi8KJiM0MzsJCXJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTsKJiM0MzsJCXJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7CiYjNDM7I2VuZGlmCiYjNDM7CX0KIAogCV9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhwYXJlbnQsIHRydWUpOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCi17Ci19Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X2xvY2tzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCkKIHsKQEAgLTU3MCw3ICYjNDM7NTg2LDYgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJcmV0dXJuIHg7CiB9CiAKLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sCiAJCQkJICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpOwogCkBAIC01OTIsNyAmIzQzOzYwNyw2IEBAIHZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHBhcmVudF9wbiwgaWR4LCB2YWx1ZSk7CiAJfQogfQotI2VuZGlmCiAKIC8qIFN1YnNldCBvZiB2bV9ldmVudF9pdGVtIHRvIHJlcG9ydCBmb3IgbWVtY2cgZXZlbnQgc3RhdHMgKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0gewpAQCAtODQ1LDE2ICYjNDM7ODU5LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbCkKIAlyZXR1cm4gdmFsICZsdDsgMCA/IC1yZXMgOiByZXM7CiB9CiAKLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKIC8qCi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoCi0gKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4KJiM0MzsgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZQomIzQzOyAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYQomIzQzOyAqIG1lbWNnIGlzIHJhcmUsIHNvIGRvIHRoZSByZWRpcmVjdGlvbiBmb3IgYWxsIGNncm91cCBoaWVyYXJjaGllcy4KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCQkJICAgYm9vbCAqcmN1X2xvY2tlZCkKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICoKJiM0MztnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZCkKIHsKLQkvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovCi0JaWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHsKJiM0MzsJLyoKJiM0MzsJICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZwomIzQzOwkgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9jawomIzQzOwkgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaAomIzQzOwkgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC4KJiM0MzsJICovCiYjNDM7CWlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7CiAJCSpyY3VfbG9ja2VkID0gZmFsc2U7CiAJCXJldHVybiBtZW1jZzsKIAl9CkBAIC04NzUsMTcgJiM0Mzs4OTQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCQkJICAgYm9vbCAqcmN1X2xvY2tlZCkKLXsKLQlyZXR1cm4gbWVtY2c7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpCi17Ci19Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCkKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCA3YWMyYjg4YzgwYWU1Li44NDEyZjQ4NDBhZTM1IDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC02ODgsMTAgJiM0Mzs2ODgsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwKIAogCQltZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLSZndDttZW1jZyk7CiAJCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLSZndDttZW1jZywgTk9ERV9EQVRBKHNjLSZndDtuaWQpKTsKLQogCQlmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgJmx0OyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KQotCQkJcGFnZXMgJiM0Mzs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpOwotCiYjNDM7CQkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywKJiM0MzsJCQkJCQkJIE5SX0xSVV9CQVNFICYjNDM7IGkpOwogCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoCiAJCQlscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgJmd0OyZndDsgUEFHRV9TSElGVDsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxOAoJCQkJCQkJb3V0cHV0OiAyMjYKCQkJCQkJCXRob3VnaHRzOiA4NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50OiBNZW1vcnkgQ2dyb3VwIFN0YXRpc3RpY3MgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBLTVNBTiBmdXp6aW5nLiBJJiMzOTt2ZSBnb3QgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGNoYW5nZWQgYmVmb3JlIEkgY2FuIG1ha2UgdGhhdCBjYWxsLgoKU28sIGhlcmUmIzM5O3Mgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmc6IGl0JiMzOTtzIHNodWZmbGluZyBkZWNsYXJhdGlvbnMgYXJvdW5kLCBtYWtpbmcgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgYXZhaWxhYmxlIHVuY29uZGl0aW9uYWxseS4gSXQgdGhlbiBpbnRyb2R1Y2VzIGByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxgLCB3aGljaCBoYW5kbGVzIHJlcGFyZW50aW5nIG5vbi1oaWVyYXJjaGljYWwgbHJ1dmVjIHN0YXRzIGZvciBjZ3JvdXAgdjIuIGByZXBhcmVudF9zdGF0ZV9sb2NhbGAgbm93IGNhbGxzIHRoaXMgbmV3IGZ1bmN0aW9uIG9uIGNncm91cCB2Miwgb3IsIHRoZSBleGlzdGluZyB2MSBlcXVpdmFsZW50LiBBbHNvLCBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAgbm93IHN1cHBvcnRzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuIEZpbmFsbHksIHRoZXJlJiMzOTtzIGEgY2hhbmdlIGluIGBjb3VudF9zaGFkb3dfbm9kZXNgIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgLgoKVGhlIGNvcmUgb2YgdGhpcyBpcyBhYm91dCBtZW1vcnkgY2dyb3VwIHN0YXRpc3RpY3MgYW5kIHRoZSB3b3JraW5nc2V0IHNoYWRvdyBub2RlIHNocmlua2VyLiBXaGF0JiMzOTtzIHRoZSBjb25jZXJuPyBVbmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcG90ZW50aWFsIGxlYWtzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBldmVuIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcy4gTGV0JiMzOTtzIHNlZS4uLgoKSSBzZWUgdGhhdCBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCBpcyB0cmFuc2ZlcnJpbmcgcGVyLW5vZGUgY291bnRlcnMgYmV0d2VlbiBtZW1jZ3MuIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAgaXMgcmVhZGluZyBwZXItY3B1L3Blci1ub2RlIGNvdW50ZXJzIGZyb20gbHJ1dmVjLiBgY291bnRfc2hhZG93X25vZGVzYCBpcyBwYXJ0IG9mIGEgc2hyaW5rZXIgY2FsbGJhY2sgd2hpY2ggZGVhbHMgd2l0aCB3b3JraW5nc2V0IHNocmlua2luZywgc28gaXQgcmV0dXJucyB0aGUgYHVuc2lnbmVkIGxvbmdgIGNvdW50IG9mIHNoYWRvdyBub2Rlcy4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBjcmVhdGluZyBuZXcgYnVmZmVycyB3aXRob3V0IGluaXRpYWxpemF0aW9uOyBpdCYjMzk7cyBqdXN0IGRlYWxpbmcgd2l0aCBpbnRlZ2VyIGNvdW50ZXJzIG1haW50YWluZWQgYnkgdGhlIG1lbWNnIHN0YXRpc3RpY3MgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBzb3J0cyBvZiBidWdzIEkgd291bGQgZXhwZWN0IGhlcmUgYXJlIGFjY291bnRpbmcgZXJyb3JzLCBwb3RlbnRpYWwgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIFVBRi9yZWZjb3VudGluZyBpc3N1ZXMgKGlmIG1lbWNnIGxpZmVjeWNsZSB3YXMgc29tZWhvdyBicm9rZW4pLCBidXQgdGhlc2Ugc2hvdWxkIGJlIHBpY2tlZCB1cCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGV4aXN0aW5nIG1lY2hhbmlzbXMuIEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IHBhZGRpbmcgYXJlIGV4cG9zZWQuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgbXkgS01TQU4gY2hlY2tsaXN0OgoKMS4gIEtlcm5lbCBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2U/IE5vcGUuIFRoZSBkYXRhIGlzIGZvcm1hdHRlZCBhcyBudW1iZXJzIGluIGNncm91cCB2MiAvIHYxIHNlcVxfZmlsZXMgZm9ybWF0cyB1c2luZyBgc25wcmludGYvc2VxX3ByaW50ZmAsIG5vdCByYXcgbWVtb3J5LgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vdCBoZXJlLgozLiAgQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBObyBhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkLgo0LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcz8gTm8gYnVmZmVyIGFjY2VzcyBvciBsZW5ndGggY2hhbmdlcyBpbiB0aGUgcGF0Y2guCgpBbHJpZ2h0LCB3aXRoIGFsbCB0aGF0IGNvbnNpZGVyZWQsIEkgY2FuIHNheSB3aXRoIGNlcnRhaW50eSB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBuZWVkIEtNU0FOIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgZGVhbGluZyB3aXRoIGludGVnZXIgc3RhdGlzdGljcyBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSBteSByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdGlzdGljcyBhY2NvdW50aW5nIGFuZCBzaGFkb3cgbm9kZSBjYWxjdWxhdGlvbiBpbiBtbS93b3JraW5nc2V0LmMgYW5kIG1tL21lbWNvbnRyb2wuYy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIG5vbi1oaWVyYXJjaGljYWwgTFJVIGFuZCBzbGFiIHN0YXRpc3RpY3MgYXJlIHByb3Blcmx5IHJlcGFyZW50ZWQgdG8gcGFyZW50IGNncm91cHMgb24gY2dyb3VwIHYyIGR1cmluZyBtZW1jZyBvZmZsaW5pbmcgdG8gYXZvaWQgdW5kZXJmbG93cyBpbiBzaGFkb3cgbm9kZSBhY2NvdW50aW5nLlxuXG4tIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyAoc3RhY2sgb3IgaGVhcCBidWZmZXJzKSBhcmUgaW50cm9kdWNlZCBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuXG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIGJvdW5kYXJpZXMgd2hlcmUgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcyBjb3VsZCBsZWFrLlxuLSBUaGUgcGF0Y2ggb3BlcmF0ZXMgc29sZWx5IG9uIGV4aXN0aW5nIGtlcm5lbCBjb3VudGVycyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IG1lbV9jZ3JvdXBgLCBgc3RydWN0IGxydXZlY2AsIG5vZGUgc3RhdHMpLlxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgcmVmY291bnRpbmcsIGxvY2tpbmcvcmFjZXMsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3Mgd291bGQgYmUgYWRkcmVzc2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBnZW5lcmFsIGtlcm5lbCB0ZXN0aW5nLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgcG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY2dyb3VwIHN0YXRpc3RpY3MgYWNjb3VudGluZyBhbmQgc2hhZG93IG5vZGUgY2FsY3VsYXRpb24gaW4gbW0vd29ya2luZ3NldC5jIGFuZCBtbS9tZW1jb250cm9sLmMuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBub24taGllcmFyY2hpY2FsIExSVSBhbmQgc2xhYiBzdGF0aXN0aWNzIGFyZSBwcm9wZXJseSByZXBhcmVudGVkIHRvIHBhcmVudCBjZ3JvdXBzIG9uIGNncm91cCB2MiBkdXJpbmcgbWVtY2cgb2ZmbGluaW5nIHRvIGF2b2lkIHVuZGVyZmxvd3MgaW4gc2hhZG93IG5vZGUgYWNjb3VudGluZy5cblxuLSBObyBtZW1vcnkgYWxsb2NhdGlvbnMgKHN0YWNrIG9yIGhlYXAgYnVmZmVycykgYXJlIGludHJvZHVjZWQgb3IgbGVmdCB1bmluaXRpYWxpemVkLlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMgY291bGQgbGVhay5cbi0gVGhlIHBhdGNoIG9wZXJhdGVzIHNvbGVseSBvbiBleGlzdGluZyBrZXJuZWwgY291bnRlcnMgYW5kIGRhdGEgc3RydWN0dXJlcyAoYHN0cnVjdCBtZW1fY2dyb3VwYCwgYHN0cnVjdCBscnV2ZWNgLCBub2RlIHN0YXRzKS5cbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nL3JhY2VzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBidWdzIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZywgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXMgbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0ODo1My45NzkwODIyMjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkzMDA3MDExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbFwiLFxuICAgIFwicmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsXCIsXG4gICAgXCJtZW1jZ19yZXBhcmVudF9vYmpjZ3NcIixcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL3dvcmtpbmdzZXQuYyBhbmQgbW0vbWVtY29udHJvbC5jLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgbm9uLWhpZXJhcmNoaWNhbCBMUlUgYW5kIHNsYWIgc3RhdGlzdGljcyBhcmUgcHJvcGVybHkgcmVwYXJlbnRlZCB0byBwYXJlbnQgY2dyb3VwcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIG1lbWNnIG9mZmxpbmluZyB0byBhdm9pZCB1bmRlcmZsb3dzIGluIHNoYWRvdyBub2RlIGFjY291bnRpbmcuXFxuXFxuLSBObyBtZW1vcnkgYWxsb2NhdGlvbnMgKHN0YWNrIG9yIGhlYXAgYnVmZmVycykgYXJlIGludHJvZHVjZWQgb3IgbGVmdCB1bmluaXRpYWxpemVkLlxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIGNvdWxkIGxlYWsuXFxuLSBUaGUgcGF0Y2ggb3BlcmF0ZXMgc29sZWx5IG9uIGV4aXN0aW5nIGtlcm5lbCBjb3VudGVycyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IG1lbV9jZ3JvdXBgLCBgc3RydWN0IGxydXZlY2AsIG5vZGUgc3RhdHMpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nL3JhY2VzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBidWdzIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZywgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgcG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0ODo1My45NzkwODY3NDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODQzOTc5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZTYxMjBlYTdmNTkxOTA2Mzc1YTVhMWNiMjc2NjhkMDVlM2ExZDQ1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDQ6NDg6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXFxuaW5kZXggMWUzOTQyNjljNjEzZC4uMDU3OGI3MDc2NzY0ZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmhcXG5AQCAtMjUsNiArMjUsOSBAQCBpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG4pO1xcbiBcXG4rdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XFxuK1xcbiAvKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gXFxuQEAgLTczLDggKzc2LDYgQEAgdm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JcXG4gXFxuIHZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcXG4tdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XFxuIFxcbiB2b2lkIG1lbWNnMV9hY2NvdW50X2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpO1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX3RjcG1lbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAxMjcxZDM5MGI2MTdlLi5mMTMwMzBmNzVmYTU0IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0yMzIsMTQgKzIzMiwyOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY1xcbiBcXHRyZXR1cm4gb2JqY2c7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbisvKlxcbisgKiBSZXBhcmVudCB0aGUgbm9uLWhpZXJhcmNoaWNhbCBscnV2ZWMgc3RhdHMgdGhhdCBjb3VudF9zaGFkb3dfbm9kZXMoKSByZWFkc1xcbisgKiB0byBhcHByb3hpbWF0ZSB0aGUgc2hhZG93IG5vZGUgYnVkZ2V0LiAgVGhleSBhcmUgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlXFxuKyAqIG9uIGNncm91cCB2MiwgYnV0IHRoZXkgbXVzdCBmb2xsb3cgdGhlIHJlcGFyZW50ZWQgZm9saW9zOyBvdGhlcndpc2UgdGhlXFxuKyAqIGFuY2VzdG9yIHdvdWxkIG9ubHkgcmVjZWl2ZSB0aGUgbmVnYXRpdmUgZGVsdGFzIHdoZW4gdGhlIGZvbGlvcyBhcmUgZnJlZWRcXG4rICogd2l0aG91dCBldmVyIGhhdmluZyByZWNlaXZlZCB0aGUgcG9zaXRpdmUgYmFzZSwgYW5kIGl0cyBsb2NhbCBzdGF0cyB3b3VsZFxcbisgKiBwZXJtYW5lbnRseSB1bmRlcmZsb3cuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbiB7XFxuLVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbitcXHRcXHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfTFJVX0JBU0UgKyBpKTtcXG4rXFxuK1xcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpO1xcbitcXHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IpO1xcbit9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbit7XFxuIFxcdC8qXFxuIFxcdCAqIFJlcGFyZW50IHN0YXRzIGV4cG9zZWQgbm9uLWhpZXJhcmNoaWNhbGx5LiBGbHVzaCBAbWVtY2cncyBzdGF0cyBmaXJzdFxcbiBcXHQgKiB0byByZWFkIGl0cyBzdGF0cyBhY2N1cmF0ZWx5ICwgYW5kIGNvbnNlcnZhdGl2ZWx5IGZsdXNoIEBwYXJlbnQnc1xcbkBAIC0yNDgsMTcgKzI2MywxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2NnclxcbiBcXHQgKi9cXG4gXFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTtcXG4gXFxuLVxcdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xcbi1cXHRyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxuLVxcdHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxuK1xcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XFxuK1xcdFxcdHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcXG4rXFx0fSBlbHNlIHtcXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbitcXHRcXHQvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi9cXG4rXFx0XFx0cmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbitcXHRcXHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbisjZW5kaWZcXG4rXFx0fVxcbiBcXG4gXFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHBhcmVudCwgdHJ1ZSk7XFxuIH1cXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4te1xcbi19XFxuLSNlbmRpZlxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X2xvY2tzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG4ge1xcbkBAIC01NzAsNyArNTg2LDYgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHJldHVybiB4O1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuIFxcdFxcdFxcdFxcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKTtcXG4gXFxuQEAgLTU5Miw3ICs2MDcsNiBAQCB2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShwYXJlbnRfcG4sIGlkeCwgdmFsdWUpO1xcbiBcXHR9XFxuIH1cXG4tI2VuZGlmXFxuIFxcbiAvKiBTdWJzZXQgb2Ygdm1fZXZlbnRfaXRlbSB0byByZXBvcnQgZm9yIG1lbWNnIGV2ZW50IHN0YXRzICovXFxuIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbkBAIC04NDUsMTYgKzg1OSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXFxuIFxcdHJldHVybiB2YWwgXFx1MDAzYyAwID8gLXJlcyA6IHJlcztcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbiAvKlxcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxcbisgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcXG4rICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbitnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcXG4ge1xcbi1cXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXFxuLVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XFxuK1xcdC8qXFxuK1xcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4rXFx0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcXG4rXFx0ICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2hcXG4rXFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkge1xcbiBcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiBcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIFxcdH1cXG5AQCAtODc1LDE3ICs4OTQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiBcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuLXtcXG4tXFx0cmV0dXJuIG1lbWNnO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbi17XFxuLX1cXG4tI2VuZGlmXFxuIFxcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xcbmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0XFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXFxuKysrIGIvbW0vd29ya2luZ3NldC5jXFxuQEAgLTY4OCwxMCArNjg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuIFxcbiBcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIFxcdFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVxcdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVxcdTAwM2VuaWQpKTtcXG4tXFxuIFxcdFxcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbi1cXHRcXHRcXHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcXG4tXFxuK1xcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5SX0xSVV9CQVNFICsgaSk7XFxuIFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiBcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ4OjU1LjQ2NDI1NzY1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQzNDk2MDgxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWxcIixcbiAgICBcInJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbFwiLFxuICAgIFwibWVtY2dfcmVwYXJlbnRfb2JqY2dzXCIsXG4gICAgXCJjb3VudF9zaGFkb3dfbm9kZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbWNvbnRyb2wuYyBhbmQgbW0vd29ya2luZ3NldC5jIHRvIHJlcGFyZW50IG5vbi1oaWVyYXJjaGljYWwgbHJ1dmVjIHN0YXRpc3RpY3Mgb24gY2dyb3VwIHYyIGR1cmluZyBjZ3JvdXAgb2ZmbGluaW5nLCBhZGp1c3RzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQgYWNyb3NzIGhpZXJhcmNoaWVzLCBhbmQgYWx0ZXJzIGhvdyBjb3VudF9zaGFkb3dfbm9kZXMgY29tcHV0ZXMgbG9jYWwgcGFnZSBzdGF0ZXMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbW0gYW5kIGNncm91cCBsaWZlY3ljbGUgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmU2MTIwZWE3ZjU5MTkwNjM3NWE1YTFjYjI3NjY4ZDA1ZTNhMWQ0NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDQ6NDg6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmhcbmluZGV4IDFlMzk0MjY5YzYxM2QuLjA1NzhiNzA3Njc2NGQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuaFxuQEAgLTI1LDYgKzI1LDkgQEAgaW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbik7XG4gXG4rdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuK1xuIC8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gXG5AQCAtNzMsOCArNzYsNiBAQCB2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2NnclxuIFxuIHZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XG4tdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuIFxuIHZvaWQgbWVtY2cxX2FjY291bnRfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcyk7XG4gc3RhdGljIGlubGluZSBib29sIG1lbWNnMV90Y3BtZW1fYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLmYxMzAzMGY3NWZhNTQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTIzMiwxNCArMjMyLDI5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jXG4gXHRyZXR1cm4gb2JqY2c7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuKy8qXG4rICogUmVwYXJlbnQgdGhlIG5vbi1oaWVyYXJjaGljYWwgbHJ1dmVjIHN0YXRzIHRoYXQgY291bnRfc2hhZG93X25vZGVzKCkgcmVhZHNcbisgKiB0byBhcHByb3hpbWF0ZSB0aGUgc2hhZG93IG5vZGUgYnVkZ2V0LiAgVGhleSBhcmUgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlXG4rICogb24gY2dyb3VwIHYyLCBidXQgdGhleSBtdXN0IGZvbGxvdyB0aGUgcmVwYXJlbnRlZCBmb2xpb3M7IG90aGVyd2lzZSB0aGVcbisgKiBhbmNlc3RvciB3b3VsZCBvbmx5IHJlY2VpdmUgdGhlIG5lZ2F0aXZlIGRlbHRhcyB3aGVuIHRoZSBmb2xpb3MgYXJlIGZyZWVkXG4rICogd2l0aG91dCBldmVyIGhhdmluZyByZWNlaXZlZCB0aGUgcG9zaXRpdmUgYmFzZSwgYW5kIGl0cyBsb2NhbCBzdGF0cyB3b3VsZFxuKyAqIHBlcm1hbmVudGx5IHVuZGVyZmxvdy5cbisgKi9cbitzdGF0aWMgdm9pZCByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIHtcbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLVx0XHRyZXR1cm47XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxuK1x0XHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfTFJVX0JBU0UgKyBpKTtcbitcbitcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpO1xuK1x0cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CKTtcbit9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbit7XG4gXHQvKlxuIFx0ICogUmVwYXJlbnQgc3RhdHMgZXhwb3NlZCBub24taGllcmFyY2hpY2FsbHkuIEZsdXNoIEBtZW1jZydzIHN0YXRzIGZpcnN0XG4gXHQgKiB0byByZWFkIGl0cyBzdGF0cyBhY2N1cmF0ZWx5ICwgYW5kIGNvbnNlcnZhdGl2ZWx5IGZsdXNoIEBwYXJlbnQnc1xuQEAgLTI0OCwxNyArMjYzLDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyXG4gXHQgKi9cbiBcdF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZywgdHJ1ZSk7XG4gXG4tXHQvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi9cbi1cdHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbi1cdHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XG4rXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xuK1x0XHRyZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XG4rXHR9IGVsc2Uge1xuKyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbitcdFx0LyogVGhlIGZvbGxvd2luZyBjb3VudHMgYXJlIGFsbCBub24taGllcmFyY2hpY2FsIGFuZCBuZWVkIHRvIGJlIHJlcGFyZW50ZWQuICovXG4rXHRcdHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbitcdFx0cmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbisjZW5kaWZcbitcdH1cbiBcbiBcdF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhwYXJlbnQsIHRydWUpO1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4te1xuLX1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfbG9ja3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuIHtcbkBAIC01NzAsNyArNTg2LDYgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4gXHRcdFx0XHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCk7XG4gXG5AQCAtNTkyLDcgKzYwNyw2IEBAIHZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0X19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHBhcmVudF9wbiwgaWR4LCB2YWx1ZSk7XG4gXHR9XG4gfVxuLSNlbmRpZlxuIFxuIC8qIFN1YnNldCBvZiB2bV9ldmVudF9pdGVtIHRvIHJlcG9ydCBmb3IgbWVtY2cgZXZlbnQgc3RhdHMgKi9cbiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbkBAIC04NDUsMTYgKzg1OSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4gXHRyZXR1cm4gdmFsIFx1MDAzYyAwID8gLXJlcyA6IHJlcztcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIC8qXG4tICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxuKyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4rICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXG4rICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbitnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcbiB7XG4tXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXG4tXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xuK1x0LypcbitcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcbitcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXG4rXHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxuK1x0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXG4rXHQgKi9cbitcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XG4gXHRcdCpyY3VfbG9ja2VkID0gZmFsc2U7XG4gXHRcdHJldHVybiBtZW1jZztcbiBcdH1cbkBAIC04NzUsMTcgKzg5NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHRcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXG4te1xuLVx0cmV0dXJuIG1lbWNnO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuLXtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCA3YWMyYjg4YzgwYWU1Li44NDEyZjQ4NDBhZTM1IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC02ODgsMTAgKzY4OCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuIFxuIFx0XHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVx1MDAzZW1lbWNnKTtcbiBcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cdTAwM2VuaWQpKTtcbi1cbiBcdFx0Zm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcbi1cdFx0XHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcbi1cbitcdFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsXG4rXHRcdFx0XHRcdFx0XHQgTlJfTFJVX0JBU0UgKyBpKTtcbiBcdFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gXHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ4OjU1LjQ2NDI1OTA2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MTE4MDk0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcy4gTG9va2luZyBhdCB0aGUgcGF0Y2ggZGV0YWlscywgaXQncyBmb2N1c2VkIG9uIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgc3RhdHMgcmVwYXJlbnRpbmcgYW5kIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmcsIHByaW1hcmlseSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL2ApLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGluIGBtbS9tZW1jb250cm9sLmNgIGxvb2sgaW50ZXJlc3RpbmcuXG5cblRoZXkndmUgYWRkZWQgYHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbGAgdG8gaGFuZGxlIG5vbi1oaWVyYXJjaGljYWwgTFJVdmVjIHN0YXRzIGZvciBjZ3JvdXAgdjIuIFRoZXkncmUgYWxzbyB1cGRhdGluZyBgcmVwYXJlbnRfc3RhdGVfbG9jYWxgIHRvIGNhbGwgdGhpcyBuZXcgZnVuY3Rpb24gb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5LCB3aGljaCBpcyBjZ3JvdXAgdjIuIEl0IHNlZW1zIGxpa2UgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgdW5jb25kaXRpb25hbGx5IG5vdywgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLiBBbHNvLCBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAgYW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZGAgYXJlIGFsc28gbm93IHVuY29uZGl0aW9uYWxseSBlbmFibGVkIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuXG5JbiBgbW0vd29ya2luZ3NldC5jYCwgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAgaW5zdGVhZCBvZiBgbHJ1dmVjX2xydV9zaXplYC4gVGhhdCdzIGEgc2hpZnQgaW4gaG93IHRoZXkncmUgY2FsY3VsYXRpbmcgc29tZXRoaW5nLCB3aGljaCBpcyBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by5cblxuQWxyaWdodCwgaXMgdGhpcyBldmVuIHdvcnRoIHRoZSBlZmZvcnQgdG8gY29uc2lkZXIgaXQgZm9yIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL2ApLCBtZW1jZywgYW5kIHdvcmtpbmdzZXQg4oCTIGFsbCBhcmVhcyB0aGF0IGFyZSBmdWxseSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzY2FsbHMsIGNncm91cGZzLCBmaWxlIEkvTywgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRS4gQ29yZSBzdWJzeXN0ZW0gbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbHdheXMgZ2V0IG15IGF0dGVudGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgc3luY2hyb25pemF0aW9uL2xvY2tpbmcsIGFuZCBzeXNjYWxsIGhhbmRsaW5nIGFzcGVjdHMuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyB0aGUgcGF0Y2ggZml0cyBvdXIgZXN0YWJsaXNoZWQgZnV6emluZyBydWxlcy4gXCJXb3J0aEZ1enppbmdcIiBpcyBkZWZpbml0ZWx5IHRydWUuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIFwiRm9jdXNTeW1ib2xzXCIuIEkgbmVlZCB0byBwcmlvcml0aXplIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBmZWF0dXJlLXNwZWNpZmljIGVudHJ5cG9pbnRzLCBhbmQgYXZvaWQgZnVuY3Rpb25zIHRoYXQgYXJlIHViaXF1aXRvdXMuIFNvLCBsZXQgbWUgbWFrZSBhIGxpc3Qgb2YgY2FuZGlkYXRlIGZ1bmN0aW9uczpcblxuKiAgIGByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxgIChUaGlzIG9uZSBzZWVtcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcpXG4qICAgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoVGhpcyBpcyBpbmxpbmUvYSBjYWxsZXIsIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQncyBjYWxsZWQpXG4qICAgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgKE1hZGUgdW5jb25kaXRpb25hbCBub3cpXG4qICAgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgXG4qICAgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kYFxuKiAgIGBjb3VudF9zaGFkb3dfbm9kZXNgXG5cbkknbGwgdXNlIGBnaXQgZ3JlcGAgdG8gZmluZCBjYWxsZXJzIG9mIGByZXBhcmVudF9zdGF0ZV9sb2NhbGAgYW5kIHdoZXJlIGByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWxgIGlzIHVzZWQgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OTowMS44NzYwNzE0ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMDk2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVwYXJlbnRfc3RhdGVfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yNDU9c3RhdGljIHZvaWQgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTUtXFxubW0vbWVtY29udHJvbC5jOjI1NjpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYy0yNTcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI5Mz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMyMy1cXG5tbS9tZW1jb250cm9sLmM6MzI0OlxcdHJlcGFyZW50X3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0zMjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OTowMS45NTAwOTAxMzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTEzNjE0ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDb250cm9sIERldGFpbHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgYnVzaW5lc3MsIGFuZCB0aGUgcmVsYXRlZCBgY291bnRfc2hhZG93X25vZGVzYCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhleSBhcmUgY2xvc2VseSBsaW5rZWQgYW5kIEkgbmVlZCB0byBjaGVjayB0aGUgY29udGV4dCBvZiB0aGVpciByZWxhdGlvbnNoaXAuIEknbGwgb3BlbiB1cCBgbW0vbWVtY29udHJvbC5jYCBhbmQgemVybyBpbiBhcm91bmQgbGluZSAzMjQuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcuIExldCdzIHNlZSB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIGxvZ2ljIGFuZCBwdXJwb3NlIG9mIHRoZXNlIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgc3Vic3lzdGVtLiBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBvYmplY3QgZ3JvdXAgcmVwYXJlbnRpbmcsIG1heWJlIHNvbWUga2luZCBvZiBjb3VudGVyIG1hbmFnZW1lbnQsIG9yIHNoYWRvdyBub2RlIG1hbmlwdWxhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGFjdHVhbCBjb2RlIHNheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OTowNC44NjM3MDc5MTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNm9iamNnX2xvY2spO1xcbiAyOTE6XFx0fVxcbiAyOTI6XFx0XFxuIDI5MzpcXHRzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAyOTQ6XFx0e1xcbiAyOTU6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiAyOTY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gMjk3OlxcdFxcdGludCBuaWQ7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGZvcl9lYWNoX25vZGUobmlkKSB7XFxuIDMwMDpcXHRyZXRyeTpcXG4gMzAxOlxcdFxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcXG4gMzAyOlxcdFxcdFxcdFxcdG1heF9scnVfZ2VuX21lbWNnKHBhcmVudCwgbmlkKTtcXG4gMzAzOlxcdFxcbiAzMDQ6XFx0XFx0XFx0cmVwYXJlbnRfbG9ja3MobWVtY2csIHBhcmVudCwgbmlkKTtcXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxuIDMwNzpcXHRcXHRcXHRcXHRpZiAoIXJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2cocGFyZW50LCBuaWQpKSB7XFxuIDMwODpcXHRcXHRcXHRcXHRcXHRyZXBhcmVudF91bmxvY2tzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDMwOTpcXHRcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMzEwOlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDMxMTpcXHRcXHRcXHRcXHR9XFxuIDMxMjpcXHRcXHRcXHRcXHRscnVfZ2VuX3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDMxMzpcXHRcXHRcXHR9IGVsc2Uge1xcbiAzMTQ6XFx0XFx0XFx0XFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDMxNTpcXHRcXHRcXHR9XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdFxcdG9iamNnID0gX19tZW1jZ19yZXBhcmVudF9vYmpjZ3MobWVtY2csIHBhcmVudCwgbmlkKTtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0XFx0cmVwYXJlbnRfdW5sb2NrcyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRcXHRwZXJjcHVfcmVmX2tpbGwoXFx1MDAyNm9iamNnLVxcdTAwM2VyZWZjbnQpO1xcbiAzMjI6XFx0XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRyZXBhcmVudF9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcXG4gMzI1OlxcdH1cXG4gMzI2OlxcdFxcbiAzMjc6XFx0LypcXG4gMzI4OlxcdCAqIEEgbG90IG9mIHRoZSBjYWxscyB0byB0aGUgY2FjaGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlXFxuIDMyOTpcXHQgKiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgdGhlIGNhbGxzIHRvIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKCkgYXJlXFxuIDMzMDpcXHQgKiBjb25kaXRpb25hbCB0byB0aGlzIHN0YXRpYyBicmFuY2gsIHdlJ2xsIGhhdmUgdG8gYWxsb3cgbW9kdWxlcyB0aGF0IGRvZXNcXG4gMzMxOlxcdCAqIGttZW1fY2FjaGVfYWxsb2MgYW5kIHRoZSBzdWNoIHRvIHNlZSB0aGlzIHN5bWJvbCBhcyB3ZWxsXFxuIDMzMjpcXHQgKi9cXG4gMzMzOlxcdERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG1lbWNnX2ttZW1fb25saW5lX2tleSk7XFxuIDMzNDpcXHRFWFBPUlRfU1lNQk9MKG1lbWNnX2ttZW1fb25saW5lX2tleSk7XFxuIDMzNTpcXHRcXG4gMzM2OlxcdERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XFxuIDMzNzpcXHRFWFBPUlRfU1lNQk9MKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XFxuIDMzODpcXHRcXG4gMzM5OlxcdC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OTowNC44NjM5Njg1NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzUwMDcxMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgQ2FsbGVycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2hlcmUgZXhhY3RseSBpcyBgbWVtY2dfcmVwYXJlbnRfb2JqY2dzYCBiZWluZyBpbnZva2VkP1wiIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyBpdHMgcHVycG9zZSwgcG90ZW50aWFsIGltcGFjdCwgb3IgYW55IHJlbGF0ZWQgaXNzdWVzLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIGl0cyBleGVjdXRpb24gaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiB3aGVuIGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgdHJpZ2dlcmluZyBldmVudHMgYW5kIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyBpdCdzIGRlc2lnbmVkIHRvIGhhbmRsZS4gQSBxdWljayBncmVwIG1pZ2h0IGdpdmUgbWUgYSBsaXN0LCBidXQgSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGRvbmUgaW4gdGhlIGNvZGUsIGFuZCBob3cgdGhhdCByZWxhdGVzIHRvIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjA4LjYxNDA0Mzc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzA1MDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnX3JlcGFyZW50X29iamNnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTE5Nj1zdGF0aWMgc3RydWN0IG9ial9jZ3JvdXAgKm9ial9jZ3JvdXBfYWxsb2Modm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMTQtXFxubW0vbWVtY29udHJvbC5jOjIxNTpzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC5jLTIxNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODY9c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3VubG9ja3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5Mi1cXG5tbS9tZW1jb250cm9sLmM6MjkzOnN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTI5NC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE2LVxcbm1tL21lbWNvbnRyb2wuYzozMTc6XFx0XFx0b2JqY2cgPSBfX21lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbm1tL21lbWNvbnRyb2wuYy0zMTgtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM1Nj1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM3Mi1cXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6NDM3MzpcXHRtZW1jZ19yZXBhcmVudF9vYmpjZ3MobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYy00Mzc0LVxcdHJlcGFyZW50X3Nocmlua2VyX2RlZmVycmVkKG1lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NDAyPXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDE2LSAqXFxubW0vbWVtY29udHJvbC5jOjU0MTc6ICogbWVtY2dfcmVwYXJlbnRfb2JqY2dzKCkgcmVwYXJlbnRzIGEgZHlpbmcgY2dyb3VwIG9uZSBub2RlIGF0IGEgdGltZTogdGhlXFxubW0vbWVtY29udHJvbC5jLTU0MTgtICogZm9saW9zIG9uIHRoYXQgbm9kZSdzIExSVSBsaXN0cyBtb3ZlIHRvIHRoZSBwYXJlbnQgYW5kIHRoYXQgbm9kZSdzIG9iamNnIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjA4LjY3MjM1MzY5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDMzNjY0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzcGVjaWZpY2FsbHkgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhbmQgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kYCBhcmUgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIHRyYWNrIHRob3NlIGNhbGxzIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlLCBhbmQgd2hhdCBzdGF0ZSB0aGV5IGRlcGVuZCBvbi4gVGhpcyBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgY2dyb3VwIGxpZmVjeWNsZXMgYW5kIHRyYW5zaXRpb25zLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGluc3RydW1lbnRhbCBmb3IgdW5kZXJzdGFuZGluZyBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGRlYXRoIGhhbmRsaW5nLCByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGV2ZW4gYWNjb3VudGluZyBkdXJpbmcgdmFyaW91cyBzdGF0ZXMgb2YgdGhlIGNncm91cCBoaWVyYXJjaHkuIEtub3dpbmcgdGhlaXIgY2FsbGVycyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNhbGxzIGluIHJlbGF0aW9uIHRvIHJlc291cmNlIGxpbWl0YXRpb25zIGFuZCB0aGUgZGVhdGggc3RhdGUgb2YgbWVtb3J5IGNncm91cHMsIHdoaWNoIGNvdWxkIGV4cG9zZSByYWNlIGNvbmRpdGlvbnMgb3IgcG90ZW50aWFsIGRlYWRsb2Nrcy4gVWx0aW1hdGVseSwgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgcG9pbnRzIHdpbGwgY2xhcmlmeSBob3cgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIGFuZCBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmRgIGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OToxMC44NzU3MjQyNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzU3NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9ub25fZHlpbmdfbWVtY2dfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9ODY3PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbm1tL21lbWNvbnRyb2wuYzo4Njg6Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXFxubW0vbWVtY29udHJvbC5jLTg2OS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODg5LVxcbm1tL21lbWNvbnRyb2wuYzo4OTA6c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcXG5tbS9tZW1jb250cm9sLmMtODkxLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05MjQ9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTMxLVxcbm1tL21lbWNvbnRyb2wuYzo5MzI6XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTkzMy1cXHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbm1tL21lbWNvbnRyb2wuYzo5MzQ6XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTkzNS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTkwPXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk5OS1cXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbm1tL21lbWNvbnRyb2wuYzoxMDAwOlxcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChwbi1cXHUwMDNlbWVtY2csIFxcdTAwMjZyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtMTAwMS1cXHRwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1twZ2RhdC1cXHUwMDNlbm9kZV9pZF07XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTAwNC1cXG5tbS9tZW1jb250cm9sLmM6MTAwNTpcXHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtMTAwNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjEwLjkyOTUxMzYwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTkyNzYzMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1FTUNHIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlICphYnNvbHV0ZWx5KiBlc3NlbnRpYWwgZm9yIE1FTUNHIHRvIGZ1bmN0aW9uLiBObyBzaG9ydGN1dHMgaGVyZTsgYSBwcm9wZXIgZGVwZW5kZW5jeSBhbmFseXNpcyBpcyBjcml0aWNhbC4gVGhlIGZpcnN0IHRoaW5nIEknbGwgZG8gaXMgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGUgcHJpbWFyeSBkZWZpbml0aW9ucyB3aWxsIHJlc2lkZSBpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Ag4oCTIGdpdmVuIGl0cyByb2xlIGluIHN5c3RlbSBpbml0aWFsaXphdGlvbiBhbmQgbW9kdWxlIGxvYWRpbmcg4oCTIG9yLCBtb3JlIGxpa2VseSwgYG1tL0tjb25maWdgLCBhcyBNRU1DRyBpcyBmdW5kYW1lbnRhbGx5IG1lbW9yeSBtYW5hZ2VtZW50LWNlbnRyaWMuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSByaWdodCBmaWxlcy4gVGhhdCdsbCBiZSB0aGUgZmFzdGVzdCBwYXRoIHRvIHVuY292ZXIgYW55IGltcGxpY2l0IG9yIGV4cGxpY2l0IGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjEzLjUyMjI4MDM0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTE5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjEzLjU2ODE5NzE2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTM5ODA0NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRXhhbWluaW5nIE1FTUNHIERlcGVuZGVuY2llcyBpbiBgaW5pdC9LY29uZmlnYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBpbml0L0tjb25maWdgLiBMaW5lIDEwODUgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gYmVnaW4gdGhlIGludmVzdGlnYXRpb24uIEhvcGVmdWxseSwgdGhlIHJlbGV2YW50IHJlbGF0aW9uc2hpcHMgYXJlIGNsZWFybHkgZGVmaW5lZCBhcm91bmQgdGhhdCBzcG90LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBwb3NzaWJseSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBpZGVhbGx5LCBzb21lIGNvbmNpc2UgY29tbWVudHMgdGhhdCBvdXRsaW5lIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYE1FTUNHYCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0gYnVpbGQgYXMgYSB3aG9sZS4gSSBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgcHJlcmVxdWlzaXRlcywgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCBhbnkgaW1wbGllZCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OToxNi4xMDgwMTI4NDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDkwOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwOTE6XFx0XFx0aGVscFxcbjEwOTI6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG4xMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTEwNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMTA2OlxcdFxcdGRlZmF1bHQgeVxcbjExMDc6XFx0XFxuMTEwODpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTA5OlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTExMDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTExMTpcXHRcXHRkZWZhdWx0IG5cXG4xMTEyOlxcdFxcdGhlbHBcXG4xMTEzOlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTExNDpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjE2LjEwODY2MjI1NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjg2Mjg4MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IENvbXBvbmVudHMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG1lbWNvbnRyb2wuY2AgYW5kIGB3b3JraW5nc2V0LmNgIGFyZSBiZWluZyBjb21waWxlZCBhbmQgbGlua2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgYG1tL2AgZGlyZWN0b3J5IGlzIHRoZSBsaWtlbHkgcGxhY2UgZm9yIHRoZSByZWxldmFudCBNYWtlZmlsZXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCBkaXJlY3RseS4gVGhhdCdzIHdoZXJlIHRoZSBydWxlcyBmb3IgdGhvc2Ugc3BlY2lmaWMgc291cmNlIGZpbGVzIGFuZCB0aGVpciB0YXJnZXRzIHdpbGwgYmUgZGVmaW5lZCwgYW5kIEknbGwgYmUgYWJsZSB0byB0cmFjZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgYW55IGN1c3RvbSBidWlsZCBmbGFncyBiZWluZyB1c2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaG93IHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhbmQsIHVsdGltYXRlbHksIHdoYXQgdGhlIGNvbXBpbGVkIG91dHB1dHMgbG9vayBsaWtlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQxMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6NDk6MTguMzk0OTU0Njg3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYxNDIyNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY29udHJvbHx3b3JraW5nc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTU2LVxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NzpcXHRcXHRcXHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcXFxcbm1tL01ha2VmaWxlLTU4LVxcdFxcdFxcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxcbi0tXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OToxOC45NDExMDIzOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzg1MjMxNDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1jZyBDb2RlIGZvciBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGVuYWJsaW5nIGBDT05GSUdfTUVNQ0dgIGNvbXBpbGVzIGBtZW1jb250cm9sLm9gLCBhbmQgYHdvcmtpbmdzZXQub2AgaXMgYWx3YXlzIGJ1aWx0LiBTaW5jZSB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCBib3RoIHYxIGFuZCB2MiBtZW1jZ3MsIGBDT05GSUdfTUVNQ0dfVjFgIG1pZ2h0IGJlIHJlbGV2YW50LCBidXQgYE1FTUNHYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uLiBJJ2xsIGluY2x1ZGUgYE1FTUNHYCBhcyB0aGUgY29yZSBjb25jZXJuLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBIZXJlJ3Mgd2hhdCBJJ3ZlIG5vdGVkOlxuXG4qICAgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgKGluIGBtZW1jb250cm9sLmNgLCBub24tc3RhdGljKSAtIHRoaXMgaXMgdGhlIG5ld2x5IHVuLWlmZGVmJ2QgZnVuY3Rpb24gYW5kIG1pZ2h0IGJlIHNpZ25pZmljYW50LlxuKiAgIGByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxgIChzdGF0aWMgaW4gYG1lbWNvbnRyb2wuY2ApXG4qICAgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoc3RhdGljIGluIGBtZW1jb250cm9sLmNgKVxuKiAgIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgIChjYWxscyBgcmVwYXJlbnRfc3RhdGVfbG9jYWxgIGR1cmluZyBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWApIC0gdGhpcyBzb3VuZHMgbGlrZSBpdCdzIGhhbmRsaW5nIHRoZSByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uLCB3aGljaCBjb3VsZCBiZSBhbiBpbXBvcnRhbnQgb3BlcmF0aW9uIHRvIG9wdGltaXplLlxuKiAgIGBjb3VudF9zaGFkb3dfbm9kZXNgIChpbiBgd29ya2luZ3NldC5jYCkgLSB0aGlzIGlzIHRoZSBzaHJpbmtlciBjb3VudCBjYWxsYmFjayBmb3Igd29ya2luZ3NldCBzaGFkb3cgbm9kZXMuXG4qICAgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIChzdGF0aWMgaW5saW5lIGluIGBtZW1jb250cm9sLmNgKSAtIHdoaWNoIGlzIGNhbGxlZCBieSBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgLlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgIGFyZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBvciBzcGVjaWZpYyB0byBjZXJ0YWluIGZlYXR1cmVzLiBJdCBsb29rcyBsaWtlIHRoZXkgYXJlIG1lbWNnIHN0YXQgbW9kaWZpZXJzLiBBbmQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgdGhlIHNocmlua2VyIGNvdW50IGNhbGxiYWNrIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2Rlcy4gYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgaXMgdGhlIG5ldyBmdW5jdGlvbi4gRmluYWxseSwgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgaXMgd2hhdCBhY3R1YWxseSBkb2VzIHRoZSByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uLlxuXG5OZXh0IHN0ZXA6IGxldCdzIGRpdmUgaW50byB0aGUgY2FsbGVycyBhbmQgZGVmaW5pdGlvbiBvZiBgY291bnRfc2hhZG93X25vZGVzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6NDk6MjUuMzI2MzM2MTY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg3MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vd29ya2luZ3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3dvcmtpbmdzZXQuYz02MjQ9dm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTY1MC1cXG5tbS93b3JraW5nc2V0LmM6NjUxOnN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbm1tL3dvcmtpbmdzZXQuYy02NTItXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz03OTI9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtODI4LVxcbm1tL3dvcmtpbmdzZXQuYzo4Mjk6XFx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXFx1MDAzZWNvdW50X29iamVjdHMgPSBjb3VudF9zaGFkb3dfbm9kZXM7XFxubW0vd29ya2luZ3NldC5jLTgzMC1cXHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gc2Nhbl9zaGFkb3dfbm9kZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjI1LjM5MDIxNTM0M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzMyOTg4Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVmVyZGljdDogQ29uZmlybWVkKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIG15IGFuYWx5c2lzLCBpdCBsb29rcyBsaWtlIGEgZ28gZm9yIGZ1enppbmcuIEhlcmUncyB0aGUgYnJlYWtkb3duOiBJIHNlZSB0aGF0IGBjb3VudF9zaGFkb3dfbm9kZXNgIGlzIGJlaW5nIGRpcmVjdGx5IHR3ZWFrZWQgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIGFuZCBJJ3ZlIGFsc28gaWRlbnRpZmllZCBzZXZlcmFsIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS9tZW1jb250cm9sLmNgOiBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbGAgKHdoaWNoLCBieSB0aGUgd2F5LCBpcyBtYXJrZWQgc3RhdGljKSwgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoYWxzbyBzdGF0aWMgaW5saW5lKSwgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgKGFub3RoZXIgc3RhdGljIG9uZSEpLCBhbmQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCB3aGljaCBpcyB0aGUgQ1NTIGNhbGxiYWNrIGZvciBjZ3JvdXAgZGVzdHJ1Y3Rpb24uIFBsdXMsIHRoZSBjcml0aWNhbCBzeW1ib2wsIGBjb3VudF9zaGFkb3dfbm9kZXNgLCBpcyBsaXN0ZWQgYXMgYmVpbmcgZGlyZWN0bHkgcmVsZXZhbnQuXG5cbkkndmUgYWxyZWFkeSBjb25maXJtZWQgdGhlIHByZS1yZXF1aXNpdGVzOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgYW5kIGBFbmFibGVDb25maWdzYCBpbmNsdWRlcyBgTUVNQ0dgLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBzcG90IG9uOiBgY291bnRfc2hhZG93X25vZGVzYCwgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAsIGByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxgLCBhbmQgYG1lbWNnX3JlcGFyZW50X29iamNnc2Agd2hpY2ggYWxpZ25zIHdpdGggdGhlIG9ic2VydmVkIG1vZGlmaWNhdGlvbnMuXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBtZW1vcnkgY2dyb3VwIHJlcGFyZW50aW5nLCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCB2MidzIG5vbi1oaWVyYXJjaGljYWwgTFJVIHZlY3RvciBzdGF0aXN0aWNzLiBJdCdzIGFsc28gbWFraW5nIGFkanVzdG1lbnRzIHRvIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCB0byBoYW5kbGUgZHlpbmcgY2dyb3VwcyBhY3Jvc3MgaGllcmFyY2hpZXMuIFBsdXMsIGl0J3MgdXBkYXRpbmcgc2hhZG93IG5vZGUgY291bnRpbmcgaW4gYHdvcmtpbmdzZXQuY2AgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgdGVhcmRvd24vcmVwYXJlbnRpbmcgY2hhbmdlcywgYW5kIGFsbCBvZiB0aGVzZSBhcmUgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIG9wZXJhdGlvbnM6IGNncm91cCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbWVtb3J5IGFsbG9jYXRpb24gcmVxdWVzdHMsIGFuZCB0aGUgbWVtb3J5IHJlY2xhaW0vc2hyaW5rZXIgbWVjaGFuaXNtcy4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjcnVjaWFsIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBicm9hZGx5IGFjY2Vzc2libGUuIEkgYW0gcmVhc29uYWJseSBjZXJ0YWluIHRoYXQgdGhpcyBpcyBhbiBhcmVhIHRoYXQgd2FycmFudHMgZnV6emluZy4gQWxsIGNoZWNrcyBvdXQsIGFuZCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE1OSwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6NDk6MjkuNzIzMjA2MDg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA2NTU5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxcIixcbiAgICBcIm1lbWNnX3JlcGFyZW50X29iamNnc1wiLFxuICAgIFwiY291bnRfc2hhZG93X25vZGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxcIixcbiAgICBcIm1lbWNnX3JlcGFyZW50X29iamNnc1wiLFxuICAgIFwiY291bnRfc2hhZG93X25vZGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OToyOS44MTM4ODI3NjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTUyNTkwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OToyOS44MTQ0NzgxMjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MDk0NjU5NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY2dyb3VwIHN0YXRpc3RpY3MgYWNjb3VudGluZyBhbmQgc2hhZG93IG5vZGUgY2FsY3VsYXRpb24gaW4gbW0vd29ya2luZ3NldC5jIGFuZCBtbS9tZW1jb250cm9sLmMuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBub24taGllcmFyY2hpY2FsIExSVSBhbmQgc2xhYiBzdGF0aXN0aWNzIGFyZSBwcm9wZXJseSByZXBhcmVudGVkIHRvIHBhcmVudCBjZ3JvdXBzIG9uIGNncm91cCB2MiBkdXJpbmcgbWVtY2cgb2ZmbGluaW5nIHRvIGF2b2lkIHVuZGVyZmxvd3MgaW4gc2hhZG93IG5vZGUgYWNjb3VudGluZy5cXG5cXG4tIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyAoc3RhY2sgb3IgaGVhcCBidWZmZXJzKSBhcmUgaW50cm9kdWNlZCBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuXFxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMgY291bGQgbGVhay5cXG4tIFRoZSBwYXRjaCBvcGVyYXRlcyBzb2xlbHkgb24gZXhpc3Rpbmcga2VybmVsIGNvdW50ZXJzIGFuZCBkYXRhIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGBzdHJ1Y3QgbHJ1dmVjYCwgbm9kZSBzdGF0cykuXFxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgcmVmY291bnRpbmcsIGxvY2tpbmcvcmFjZXMsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3Mgd291bGQgYmUgYWRkcmVzc2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBnZW5lcmFsIGtlcm5lbCB0ZXN0aW5nLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyBkb2VzIG5vdCBwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTYxMjBlYTdmNTkxOTA2Mzc1YTVhMWNiMjc2NjhkMDVlM2ExZDQ1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNDo0ODo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuaCBiL21tL21lbWNvbnRyb2wtdjEuaFxuaW5kZXggMWUzOTQyNjljNjEzZC4uMDU3OGI3MDc2NzY0ZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuaFxuKysrIGIvbW0vbWVtY29udHJvbC12MS5oXG5AQCAtMjUsNiArMjUsOSBAQCBpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBuKTtcbiBcbit2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XG4rXG4gLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBcbkBAIC03Myw4ICs3Niw2IEBAIHZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyXG4gXG4gdm9pZCByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcbi12b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XG4gXG4gdm9pZCBtZW1jZzFfYWNjb3VudF9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKTtcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX3RjcG1lbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uZjEzMDMwZjc1ZmE1NCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjMyLDE0ICsyMzIsMjkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNcbiBcdHJldHVybiBvYmpjZztcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4rLypcbisgKiBSZXBhcmVudCB0aGUgbm9uLWhpZXJhcmNoaWNhbCBscnV2ZWMgc3RhdHMgdGhhdCBjb3VudF9zaGFkb3dfbm9kZXMoKSByZWFkc1xuKyAqIHRvIGFwcHJveGltYXRlIHRoZSBzaGFkb3cgbm9kZSBidWRnZXQuICBUaGV5IGFyZSBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2VcbisgKiBvbiBjZ3JvdXAgdjIsIGJ1dCB0aGV5IG11c3QgZm9sbG93IHRoZSByZXBhcmVudGVkIGZvbGlvczsgb3RoZXJ3aXNlIHRoZVxuKyAqIGFuY2VzdG9yIHdvdWxkIG9ubHkgcmVjZWl2ZSB0aGUgbmVnYXRpdmUgZGVsdGFzIHdoZW4gdGhlIGZvbGlvcyBhcmUgZnJlZWRcbisgKiB3aXRob3V0IGV2ZXIgaGF2aW5nIHJlY2VpdmVkIHRoZSBwb3NpdGl2ZSBiYXNlLCBhbmQgaXRzIGxvY2FsIHN0YXRzIHdvdWxkXG4rICogcGVybWFuZW50bHkgdW5kZXJmbG93LlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4ge1xuLVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4tXHRcdHJldHVybjtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpKyspXG4rXHRcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBOUl9MUlVfQkFTRSArIGkpO1xuK1xuK1x0cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQik7XG4rXHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IpO1xuK31cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuK3tcbiBcdC8qXG4gXHQgKiBSZXBhcmVudCBzdGF0cyBleHBvc2VkIG5vbi1oaWVyYXJjaGljYWxseS4gRmx1c2ggQG1lbWNnJ3Mgc3RhdHMgZmlyc3RcbiBcdCAqIHRvIHJlYWQgaXRzIHN0YXRzIGFjY3VyYXRlbHkgLCBhbmQgY29uc2VydmF0aXZlbHkgZmx1c2ggQHBhcmVudCdzXG5AQCAtMjQ4LDE3ICsyNjMsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JcbiBcdCAqL1xuIFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTtcbiBcbi1cdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xuLVx0cmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuLVx0cmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbitcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4rXHRcdHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbitcdH0gZWxzZSB7XG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuK1x0XHQvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi9cbitcdFx0cmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuK1x0XHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuKyNlbmRpZlxuK1x0fVxuIFxuIFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHBhcmVudCwgdHJ1ZSk7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi17XG4tfVxuLSNlbmRpZlxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9sb2NrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4ge1xuQEAgLTU3MCw3ICs1ODYsNiBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHJldHVybiB4O1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbiBcdFx0XHRcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKTtcbiBcbkBAIC01OTIsNyArNjA3LDYgQEAgdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocGFyZW50X3BuLCBpZHgsIHZhbHVlKTtcbiBcdH1cbiB9XG4tI2VuZGlmXG4gXG4gLyogU3Vic2V0IG9mIHZtX2V2ZW50X2l0ZW0gdG8gcmVwb3J0IGZvciBtZW1jZyBldmVudCBzdGF0cyAqL1xuIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xuQEAgLTg0NSwxNiArODU5LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4rICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbisgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIHtcbi1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4rXHQvKlxuK1x0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xuK1x0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbitcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4rXHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cbitcdCAqL1xuK1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTg3NSwxNyArODk0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbi17XG4tXHRyZXR1cm4gbWVtY2c7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4te1xuLX1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTY4OCwxMCArNjg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXG4gXHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuLVxuIFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxuLVx0XHRcdHBhZ2VzICs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpO1xuLVxuK1x0XHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcbitcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSArIGkpO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiBcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6NDk6MjkuODE0NDc5NzgzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwOTQ2MjMyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50OiBNZW1vcnkgQ2dyb3VwIFN0YXRpc3RpY3MgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgS01TQU4gZnV6emluZy4gSSd2ZSBnb3QgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZCBiZWZvcmUgSSBjYW4gbWFrZSB0aGF0IGNhbGwuXG5cblNvLCBoZXJlJ3Mgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmc6IGl0J3Mgc2h1ZmZsaW5nIGRlY2xhcmF0aW9ucyBhcm91bmQsIG1ha2luZyBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCBhdmFpbGFibGUgdW5jb25kaXRpb25hbGx5LiBJdCB0aGVuIGludHJvZHVjZXMgYHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbGAsIHdoaWNoIGhhbmRsZXMgcmVwYXJlbnRpbmcgbm9uLWhpZXJhcmNoaWNhbCBscnV2ZWMgc3RhdHMgZm9yIGNncm91cCB2Mi4gYHJlcGFyZW50X3N0YXRlX2xvY2FsYCBub3cgY2FsbHMgdGhpcyBuZXcgZnVuY3Rpb24gb24gY2dyb3VwIHYyLCBvciwgdGhlIGV4aXN0aW5nIHYxIGVxdWl2YWxlbnQuIEFsc28sIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBub3cgc3VwcG9ydHMgYWxsIGNncm91cCBoaWVyYXJjaGllcy4gRmluYWxseSwgdGhlcmUncyBhIGNoYW5nZSBpbiBgY291bnRfc2hhZG93X25vZGVzYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsYC5cblxuVGhlIGNvcmUgb2YgdGhpcyBpcyBhYm91dCBtZW1vcnkgY2dyb3VwIHN0YXRpc3RpY3MgYW5kIHRoZSB3b3JraW5nc2V0IHNoYWRvdyBub2RlIHNocmlua2VyLiBXaGF0J3MgdGhlIGNvbmNlcm4/IFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwb3RlbnRpYWwgbGVha3MgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGV2ZW4gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzLiBMZXQncyBzZWUuLi5cblxuSSBzZWUgdGhhdCBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCBpcyB0cmFuc2ZlcnJpbmcgcGVyLW5vZGUgY291bnRlcnMgYmV0d2VlbiBtZW1jZ3MuIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAgaXMgcmVhZGluZyBwZXItY3B1L3Blci1ub2RlIGNvdW50ZXJzIGZyb20gbHJ1dmVjLiBgY291bnRfc2hhZG93X25vZGVzYCBpcyBwYXJ0IG9mIGEgc2hyaW5rZXIgY2FsbGJhY2sgd2hpY2ggZGVhbHMgd2l0aCB3b3JraW5nc2V0IHNocmlua2luZywgc28gaXQgcmV0dXJucyB0aGUgYHVuc2lnbmVkIGxvbmdgIGNvdW50IG9mIHNoYWRvdyBub2Rlcy5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgcGF0Y2ggaXNuJ3QgY3JlYXRpbmcgbmV3IGJ1ZmZlcnMgd2l0aG91dCBpbml0aWFsaXphdGlvbjsgaXQncyBqdXN0IGRlYWxpbmcgd2l0aCBpbnRlZ2VyIGNvdW50ZXJzIG1haW50YWluZWQgYnkgdGhlIG1lbWNnIHN0YXRpc3RpY3MgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBzb3J0cyBvZiBidWdzIEkgd291bGQgZXhwZWN0IGhlcmUgYXJlIGFjY291bnRpbmcgZXJyb3JzLCBwb3RlbnRpYWwgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIFVBRi9yZWZjb3VudGluZyBpc3N1ZXMgKGlmIG1lbWNnIGxpZmVjeWNsZSB3YXMgc29tZWhvdyBicm9rZW4pLCBidXQgdGhlc2Ugc2hvdWxkIGJlIHBpY2tlZCB1cCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGV4aXN0aW5nIG1lY2hhbmlzbXMuIEl0IGRvZXNuJ3QgbG9vayBsaWtlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgcGFkZGluZyBhcmUgZXhwb3NlZC5cblxuTm93LCBsZXQncyBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgbXkgS01TQU4gY2hlY2tsaXN0OlxuXG4xLiAgS2VybmVsIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZT8gTm9wZS4gVGhlIGRhdGEgaXMgZm9ybWF0dGVkIGFzIG51bWJlcnMgaW4gY2dyb3VwIHYyIC8gdjEgc2VxXFxfZmlsZXMgZm9ybWF0cyB1c2luZyBgc25wcmludGYvc2VxX3ByaW50ZmAsIG5vdCByYXcgbWVtb3J5LlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3QgaGVyZS5cbjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vIGFsbG9jYXRpb25zIGludHJvZHVjZWQuXG40LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcz8gTm8gYnVmZmVyIGFjY2VzcyBvciBsZW5ndGggY2hhbmdlcyBpbiB0aGUgcGF0Y2guXG5cbkFscmlnaHQsIHdpdGggYWxsIHRoYXQgY29uc2lkZXJlZCwgSSBjYW4gc2F5IHdpdGggY2VydGFpbnR5IHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIG5lZWQgS01TQU4gZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGFsbCBkZWFsaW5nIHdpdGggaW50ZWdlciBzdGF0aXN0aWNzIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgbXkgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE4LCJPdXRwdXRUb2tlbnMiOjIyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjM2LjkwOTEyMjgxNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL3dvcmtpbmdzZXQuYyBhbmQgbW0vbWVtY29udHJvbC5jLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgbm9uLWhpZXJhcmNoaWNhbCBMUlUgYW5kIHNsYWIgc3RhdGlzdGljcyBhcmUgcHJvcGVybHkgcmVwYXJlbnRlZCB0byBwYXJlbnQgY2dyb3VwcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIG1lbWNnIG9mZmxpbmluZyB0byBhdm9pZCB1bmRlcmZsb3dzIGluIHNoYWRvdyBub2RlIGFjY291bnRpbmcuXFxuXFxuLSBObyBtZW1vcnkgYWxsb2NhdGlvbnMgKHN0YWNrIG9yIGhlYXAgYnVmZmVycykgYXJlIGludHJvZHVjZWQgb3IgbGVmdCB1bmluaXRpYWxpemVkLlxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIGNvdWxkIGxlYWsuXFxuLSBUaGUgcGF0Y2ggb3BlcmF0ZXMgc29sZWx5IG9uIGV4aXN0aW5nIGtlcm5lbCBjb3VudGVycyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IG1lbV9jZ3JvdXBgLCBgc3RydWN0IGxydXZlY2AsIG5vZGUgc3RhdHMpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nL3JhY2VzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBidWdzIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZywgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgcG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL3dvcmtpbmdzZXQuYyBhbmQgbW0vbWVtY29udHJvbC5jLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgbm9uLWhpZXJhcmNoaWNhbCBMUlUgYW5kIHNsYWIgc3RhdGlzdGljcyBhcmUgcHJvcGVybHkgcmVwYXJlbnRlZCB0byBwYXJlbnQgY2dyb3VwcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIG1lbWNnIG9mZmxpbmluZyB0byBhdm9pZCB1bmRlcmZsb3dzIGluIHNoYWRvdyBub2RlIGFjY291bnRpbmcuXFxuXFxuLSBObyBtZW1vcnkgYWxsb2NhdGlvbnMgKHN0YWNrIG9yIGhlYXAgYnVmZmVycykgYXJlIGludHJvZHVjZWQgb3IgbGVmdCB1bmluaXRpYWxpemVkLlxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIGNvdWxkIGxlYWsuXFxuLSBUaGUgcGF0Y2ggb3BlcmF0ZXMgc29sZWx5IG9uIGV4aXN0aW5nIGtlcm5lbCBjb3VudGVycyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IG1lbV9jZ3JvdXBgLCBgc3RydWN0IGxydXZlY2AsIG5vZGUgc3RhdHMpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nL3JhY2VzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBidWdzIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZywgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgcG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrs878[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-08 04:00:27 +0000 UTC FinishedAt: 2026-09-08 04:49:38 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "12e9ac7bc5b254048f886bf421e3a15491106c1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "12e9ac7bc5b254048f886bf421e3a15491106c1f", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG" ], "series_id": "18fe9e2e-c9c3-488e-939f-e8fda10262a7" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "reparent_memcg_lruvec_state_local", "reparent_v2_lruvec_state_local", "memcg_reparent_objcgs", "count_shadow_nodes" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbCYjMzQ7LAogICAgJiMzNDttZW1jZ19yZXBhcmVudF9vYmpjZ3MmIzM0OywKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL3dvcmtpbmdzZXQuYyBhbmQgbW0vbWVtY29udHJvbC5jLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgbm9uLWhpZXJhcmNoaWNhbCBMUlUgYW5kIHNsYWIgc3RhdGlzdGljcyBhcmUgcHJvcGVybHkgcmVwYXJlbnRlZCB0byBwYXJlbnQgY2dyb3VwcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIG1lbWNnIG9mZmxpbmluZyB0byBhdm9pZCB1bmRlcmZsb3dzIGluIHNoYWRvdyBub2RlIGFjY291bnRpbmcuXG5cbi0gTm8gbWVtb3J5IGFsbG9jYXRpb25zIChzdGFjayBvciBoZWFwIGJ1ZmZlcnMpIGFyZSBpbnRyb2R1Y2VkIG9yIGxlZnQgdW5pbml0aWFsaXplZC5cbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIGNvdWxkIGxlYWsuXG4tIFRoZSBwYXRjaCBvcGVyYXRlcyBzb2xlbHkgb24gZXhpc3Rpbmcga2VybmVsIGNvdW50ZXJzIGFuZCBkYXRhIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGBzdHJ1Y3QgbHJ1dmVjYCwgbm9kZSBzdGF0cykuXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyByZWZjb3VudGluZywgbG9ja2luZy9yYWNlcywgb3IgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyB3b3VsZCBiZSBhZGRyZXNzZWQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIGdlbmVyYWwga2VybmVsIHRlc3RpbmcsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyBkb2VzIG5vdCBwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgYmU2MTIwZWE3ZjU5MTkwNjM3NWE1YTFjYjI3NjY4ZDA1ZTNhMWQ0NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDQ6NDg6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXG5pbmRleCAxZTM5NDI2OWM2MTNkLi4wNTc4YjcwNzY3NjRkIDEwMDY0NFxuLS0tIGEvbW0vbWVtY29udHJvbC12MS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmhcbkBAIC0yNSw2ICYjNDM7MjUsOSBAQCBpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBuKTtcbiBcbiYjNDM7dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuJiM0MztcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcbiYjNDM7XG4gLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBcbkBAIC03Myw4ICYjNDM7NzYsNiBAQCB2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2NnclxuIFxuIHZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XG4tdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuIFxuIHZvaWQgbWVtY2cxX2FjY291bnRfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcyk7XG4gc3RhdGljIGlubGluZSBib29sIG1lbWNnMV90Y3BtZW1fYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLmYxMzAzMGY3NWZhNTQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTIzMiwxNCAmIzQzOzIzMiwyOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY1xuIFx0cmV0dXJuIG9iamNnO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG4gXG4tc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiYjNDM7LypcbiYjNDM7ICogUmVwYXJlbnQgdGhlIG5vbi1oaWVyYXJjaGljYWwgbHJ1dmVjIHN0YXRzIHRoYXQgY291bnRfc2hhZG93X25vZGVzKCkgcmVhZHNcbiYjNDM7ICogdG8gYXBwcm94aW1hdGUgdGhlIHNoYWRvdyBub2RlIGJ1ZGdldC4gIFRoZXkgYXJlIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZVxuJiM0MzsgKiBvbiBjZ3JvdXAgdjIsIGJ1dCB0aGV5IG11c3QgZm9sbG93IHRoZSByZXBhcmVudGVkIGZvbGlvczsgb3RoZXJ3aXNlIHRoZVxuJiM0MzsgKiBhbmNlc3RvciB3b3VsZCBvbmx5IHJlY2VpdmUgdGhlIG5lZ2F0aXZlIGRlbHRhcyB3aGVuIHRoZSBmb2xpb3MgYXJlIGZyZWVkXG4mIzQzOyAqIHdpdGhvdXQgZXZlciBoYXZpbmcgcmVjZWl2ZWQgdGhlIHBvc2l0aXZlIGJhc2UsIGFuZCBpdHMgbG9jYWwgc3RhdHMgd291bGRcbiYjNDM7ICogcGVybWFuZW50bHkgdW5kZXJmbG93LlxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIHZvaWQgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4tXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSlcbi1cdFx0cmV0dXJuO1xuJiM0MztcdGludCBpO1xuJiM0MztcbiYjNDM7XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KVxuJiM0MztcdFx0cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIE5SX0xSVV9CQVNFICYjNDM7IGkpO1xuJiM0MztcbiYjNDM7XHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKTtcbiYjNDM7XHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IpO1xuJiM0Mzt9XG4gXG4mIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4mIzQzO3tcbiBcdC8qXG4gXHQgKiBSZXBhcmVudCBzdGF0cyBleHBvc2VkIG5vbi1oaWVyYXJjaGljYWxseS4gRmx1c2ggQG1lbWNnJiMzOTtzIHN0YXRzIGZpcnN0XG4gXHQgKiB0byByZWFkIGl0cyBzdGF0cyBhY2N1cmF0ZWx5ICwgYW5kIGNvbnNlcnZhdGl2ZWx5IGZsdXNoIEBwYXJlbnQmIzM5O3NcbkBAIC0yNDgsMTcgJiM0MzsyNjMsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JcbiBcdCAqL1xuIFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTtcbiBcbi1cdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xuLVx0cmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuLVx0cmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbiYjNDM7XHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xuJiM0MztcdFx0cmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiYjNDM7XHRcdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xuJiM0MztcdFx0cmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuJiM0MztcdFx0cmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbiYjNDM7I2VuZGlmXG4mIzQzO1x0fVxuIFxuIFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHBhcmVudCwgdHJ1ZSk7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi17XG4tfVxuLSNlbmRpZlxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9sb2NrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4ge1xuQEAgLTU3MCw3ICYjNDM7NTg2LDYgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4gXHRcdFx0XHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCk7XG4gXG5AQCAtNTkyLDcgJiM0Mzs2MDcsNiBAQCB2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShwYXJlbnRfcG4sIGlkeCwgdmFsdWUpO1xuIFx0fVxuIH1cbi0jZW5kaWZcbiBcbiAvKiBTdWJzZXQgb2Ygdm1fZXZlbnRfaXRlbSB0byByZXBvcnQgZm9yIG1lbWNnIGV2ZW50IHN0YXRzICovXG4gc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7XG5AQCAtODQ1LDE2ICYjNDM7ODU5LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4mIzQzOyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4mIzQzOyAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYVxuJiM0MzsgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbiYjNDM7Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXG4ge1xuLVx0LyogUmViaW5kaW5nIGNhbiBjYXVzZSB0aGlzIHZhbHVlIHRvIGJlIGNoYW5nZWQgYXQgcnVudGltZSAqL1xuLVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHtcbiYjNDM7XHQvKlxuJiM0MztcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcbiYjNDM7XHQgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9ja1xuJiM0MztcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4mIzQzO1x0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTg3NSwxNyAmIzQzOzg5NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHRcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXG4te1xuLVx0cmV0dXJuIG1lbWNnO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuLXtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCA3YWMyYjg4YzgwYWU1Li44NDEyZjQ4NDBhZTM1IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmNcbkBAIC02ODgsMTAgJiM0Mzs2ODgsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcbiBcbiBcdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0c19yYXRlbGltaXRlZChzYy1cdTAwM2VtZW1jZyk7XG4gXHRcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVx1MDAzZW1lbWNnLCBOT0RFX0RBVEEoc2MtXHUwMDNlbmlkKSk7XG4tXG4gXHRcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpJiM0MzsmIzQzOylcbi1cdFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7XG4tXG4mIzQzO1x0XHRcdHBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsXG4mIzQzO1x0XHRcdFx0XHRcdFx0IE5SX0xSVV9CQVNFICYjNDM7IGkpO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gXHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwmIzM0OywKICAgICYjMzQ7cmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O21lbWNnX3JlcGFyZW50X29iamNncyYjMzQ7LAogICAgJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgYmU2MTIwZWE3ZjU5MTkwNjM3NWE1YTFjYjI3NjY4ZDA1ZTNhMWQ0NQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUdWUgU2VwIDggMDQ6NDg6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmgKaW5kZXggMWUzOTQyNjljNjEzZC4uMDU3OGI3MDc2NzY0ZCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC12MS5oCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wtdjEuaApAQCAtMjUsNiAmIzQzOzI1LDkgQEAgaW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTsKIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkJCQkgICAgdW5zaWduZWQgaW50IG4pOwogCiYjNDM7dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAomIzQzOwkJCQkgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7CiYjNDM7CiAvKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovCiAjaWZkZWYgQ09ORklHX01FTUNHX1YxCiAKQEAgLTczLDggJiM0Mzs3Niw2IEBAIHZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyCiAKIHZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCXN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpOwotdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAotCQkJCSAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTsKIAogdm9pZCBtZW1jZzFfYWNjb3VudF9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKTsKIHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfdGNwbWVtX2FjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggMTI3MWQzOTBiNjE3ZS4uZjEzMDMwZjc1ZmE1NCAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtMjMyLDE0ICYjNDM7MjMyLDI5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jCiAJcmV0dXJuIG9iamNnOwogfQogCi0jaWZkZWYgQ09ORklHX01FTUNHX1YxCiBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTsKIAotc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKJiM0MzsvKgomIzQzOyAqIFJlcGFyZW50IHRoZSBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0cyB0aGF0IGNvdW50X3NoYWRvd19ub2RlcygpIHJlYWRzCiYjNDM7ICogdG8gYXBwcm94aW1hdGUgdGhlIHNoYWRvdyBub2RlIGJ1ZGdldC4gIFRoZXkgYXJlIG5vdCBleHBvc2VkIHRvIHVzZXJzcGFjZQomIzQzOyAqIG9uIGNncm91cCB2MiwgYnV0IHRoZXkgbXVzdCBmb2xsb3cgdGhlIHJlcGFyZW50ZWQgZm9saW9zOyBvdGhlcndpc2UgdGhlCiYjNDM7ICogYW5jZXN0b3Igd291bGQgb25seSByZWNlaXZlIHRoZSBuZWdhdGl2ZSBkZWx0YXMgd2hlbiB0aGUgZm9saW9zIGFyZSBmcmVlZAomIzQzOyAqIHdpdGhvdXQgZXZlciBoYXZpbmcgcmVjZWl2ZWQgdGhlIHBvc2l0aXZlIGJhc2UsIGFuZCBpdHMgbG9jYWwgc3RhdHMgd291bGQKJiM0MzsgKiBwZXJtYW5lbnRseSB1bmRlcmZsb3cuCiYjNDM7ICovCiYjNDM7c3RhdGljIHZvaWQgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIHsKLQlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkKLQkJcmV0dXJuOwomIzQzOwlpbnQgaTsKJiM0MzsKJiM0MzsJZm9yIChpID0gMDsgaSAmbHQ7IE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspCiYjNDM7CQlyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfTFJVX0JBU0UgJiM0MzsgaSk7CiYjNDM7CiYjNDM7CXJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpOwomIzQzOwlyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IpOwomIzQzO30KIAomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiYjNDM7ewogCS8qCiAJICogUmVwYXJlbnQgc3RhdHMgZXhwb3NlZCBub24taGllcmFyY2hpY2FsbHkuIEZsdXNoIEBtZW1jZyYjMzk7cyBzdGF0cyBmaXJzdAogCSAqIHRvIHJlYWQgaXRzIHN0YXRzIGFjY3VyYXRlbHkgLCBhbmQgY29uc2VydmF0aXZlbHkgZmx1c2ggQHBhcmVudCYjMzk7cwpAQCAtMjQ4LDE3ICYjNDM7MjYzLDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyCiAJICovCiAJX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTsKIAotCS8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqLwotCXJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTsKLQlyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpOwomIzQzOwlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkgewomIzQzOwkJcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpOwomIzQzOwl9IGVsc2UgewomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKJiM0MzsJCS8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqLwomIzQzOwkJcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpOwomIzQzOwkJcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTsKJiM0MzsjZW5kaWYKJiM0MzsJfQogCiAJX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHBhcmVudCwgdHJ1ZSk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKLXsKLX0KLSNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfbG9ja3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKQogewpAQCAtNTcwLDcgJiM0Mzs1ODYsNiBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYywKIAlyZXR1cm4geDsKIH0KIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQogc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbiwKIAkJCQkgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCk7CiAKQEAgLTU5Miw3ICYjNDM7NjA3LDYgQEAgdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQlfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocGFyZW50X3BuLCBpZHgsIHZhbHVlKTsKIAl9CiB9Ci0jZW5kaWYKIAogLyogU3Vic2V0IG9mIHZtX2V2ZW50X2l0ZW0gdG8gcmVwb3J0IGZvciBtZW1jZyBldmVudCBzdGF0cyAqLwogc3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZ192bV9ldmVudF9zdGF0W10gPSB7CkBAIC04NDUsMTYgJiM0Mzs4NTksMjEgQEAgc3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKQogCXJldHVybiB2YWwgJmx0OyAwID8gLXJlcyA6IHJlczsKIH0KIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQogLyoKLSAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlIHdpdGgKLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLgomIzQzOyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlCiYjNDM7ICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhCiYjNDM7ICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLgogICovCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJCQkgICBib29sICpyY3VfbG9ja2VkKQomIzQzO3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKgomIzQzO2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKQogewotCS8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi8KLQlpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkgewomIzQzOwkvKgomIzQzOwkgKiBGYXN0IHBhdGg6IHRoZSBjYWxsZXIgaG9sZHMgYSByZWZlcmVuY2UgdG8gQG1lbWNnLCBzbyByZWFkaW5nCiYjNDM7CSAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrCiYjNDM7CSAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoCiYjNDM7CSAqIGhhcHBlbnMgb25seSB3aGlsZSBhIG1lbWNnIGlzIGFjdHVhbGx5IGJlaW5nIG9mZmxpbmVkLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHsKIAkJKnJjdV9sb2NrZWQgPSBmYWxzZTsKIAkJcmV0dXJuIG1lbWNnOwogCX0KQEAgLTg3NSwxNyAmIzQzOzg5NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpCiAKIAlyY3VfcmVhZF91bmxvY2soKTsKIH0KLSNlbHNlCi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkJCQkgICBib29sICpyY3VfbG9ja2VkKQotewotCXJldHVybiBtZW1jZzsKLX0KLQotc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZCkKLXsKLX0KLSNlbmRpZgogCiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCiAJCQkgICAgICBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKQpkaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jCmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0Ci0tLSBhL21tL3dvcmtpbmdzZXQuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS93b3JraW5nc2V0LmMKQEAgLTY4OCwxMCAmIzQzOzY4OCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLAogCiAJCW1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtJmd0O21lbWNnKTsKIAkJbHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtJmd0O21lbWNnLCBOT0RFX0RBVEEoc2MtJmd0O25pZCkpOwotCiAJCWZvciAocGFnZXMgPSAwLCBpID0gMDsgaSAmbHQ7IE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspCi0JCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX2xydV9zaXplKGxydXZlYywgaSwgTUFYX05SX1pPTkVTIC0gMSk7Ci0KJiM0MzsJCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwobHJ1dmVjLAomIzQzOwkJCQkJCQkgTlJfTFJVX0JBU0UgJiM0MzsgaSk7CiAJCXBhZ2VzICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbCgKIAkJCWxydXZlYywgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUOwogCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUxMDYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiA2OTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBTZXJpZXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBvZiB0aGVzZSBjaGFuZ2VzLiBMb29raW5nIGF0IHRoZSBwYXRjaCBkZXRhaWxzLCBpdCYjMzk7cyBmb2N1c2VkIG9uIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgc3RhdHMgcmVwYXJlbnRpbmcgYW5kIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmcsIHByaW1hcmlseSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL2ApLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGluIGBtbS9tZW1jb250cm9sLmNgIGxvb2sgaW50ZXJlc3RpbmcuCgpUaGV5JiMzOTt2ZSBhZGRlZCBgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsYCB0byBoYW5kbGUgbm9uLWhpZXJhcmNoaWNhbCBMUlV2ZWMgc3RhdHMgZm9yIGNncm91cCB2Mi4gVGhleSYjMzk7cmUgYWxzbyB1cGRhdGluZyBgcmVwYXJlbnRfc3RhdGVfbG9jYWxgIHRvIGNhbGwgdGhpcyBuZXcgZnVuY3Rpb24gb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5LCB3aGljaCBpcyBjZ3JvdXAgdjIuIEl0IHNlZW1zIGxpa2UgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgdW5jb25kaXRpb25hbGx5IG5vdywgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLiBBbHNvLCBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAgYW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZGAgYXJlIGFsc28gbm93IHVuY29uZGl0aW9uYWxseSBlbmFibGVkIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLgoKSW4gYG1tL3dvcmtpbmdzZXQuY2AsIGBjb3VudF9zaGFkb3dfbm9kZXNgIGlzIGJlaW5nIG1vZGlmaWVkIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgIGluc3RlYWQgb2YgYGxydXZlY19scnVfc2l6ZWAuIFRoYXQmIzM5O3MgYSBzaGlmdCBpbiBob3cgdGhleSYjMzk7cmUgY2FsY3VsYXRpbmcgc29tZXRoaW5nLCB3aGljaCBpcyBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by4KCkFscmlnaHQsIGlzIHRoaXMgZXZlbiB3b3J0aCB0aGUgZWZmb3J0IHRvIGNvbnNpZGVyIGl0IGZvciBmdXp6aW5nPyBBYnNvbHV0ZWx5LiBUaGlzIHRvdWNoZXMgbWVtb3J5IG1hbmFnZW1lbnQgKGBtbS9gKSwgbWVtY2csIGFuZCB3b3JraW5nc2V0IOKAkyBhbGwgYXJlYXMgdGhhdCBhcmUgZnVsbHkgYWNjZXNzaWJsZSB0aHJvdWdoIHN5c2NhbGxzLCBjZ3JvdXBmcywgZmlsZSBJL08sIGFuZCBtZW1vcnkgYWxsb2NhdGlvbiBpbiBzdGFuZGFyZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIGFuZCBHQ0UuIENvcmUgc3Vic3lzdGVtIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgYWx3YXlzIGdldCBteSBhdHRlbnRpb24sIGVzcGVjaWFsbHkgY29uc2lkZXJpbmcgdGhlIHN5bmNocm9uaXphdGlvbi9sb2NraW5nLCBhbmQgc3lzY2FsbCBoYW5kbGluZyBhc3BlY3RzLgoKTm93LCBsZXQmIzM5O3Mgc2VlIGhvdyB0aGUgcGF0Y2ggZml0cyBvdXIgZXN0YWJsaXNoZWQgZnV6emluZyBydWxlcy4gJiMzNDtXb3J0aEZ1enppbmcmIzM0OyBpcyBkZWZpbml0ZWx5IHRydWUuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDsuIEkgbmVlZCB0byBwcmlvcml0aXplIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBmZWF0dXJlLXNwZWNpZmljIGVudHJ5cG9pbnRzLCBhbmQgYXZvaWQgZnVuY3Rpb25zIHRoYXQgYXJlIHViaXF1aXRvdXMuIFNvLCBsZXQgbWUgbWFrZSBhIGxpc3Qgb2YgY2FuZGlkYXRlIGZ1bmN0aW9uczoKCiogICBgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsYCAoVGhpcyBvbmUgc2VlbXMgcGFydGljdWxhcmx5IGludGVyZXN0aW5nKQoqICAgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoVGhpcyBpcyBpbmxpbmUvYSBjYWxsZXIsIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQmIzM5O3MgY2FsbGVkKQoqICAgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgKE1hZGUgdW5jb25kaXRpb25hbCBub3cpCiogICBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAKKiAgIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZGAKKiAgIGBjb3VudF9zaGFkb3dfbm9kZXNgCgpJJiMzOTtsbCB1c2UgYGdpdCBncmVwYCB0byBmaW5kIGNhbGxlcnMgb2YgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCBhbmQgd2hlcmUgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgaXMgdXNlZCBmb3IgZnVydGhlciBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtyZXBhcmVudF9zdGF0ZV9sb2NhbCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmM9MjQ1PXN0YXRpYyB2b2lkIHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTI1NS1cbm1tL21lbWNvbnRyb2wuYzoyNTY6c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wuYy0yNTcte1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yOTM9c3RhdGljIHZvaWQgbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbi0tXG5tbS9tZW1jb250cm9sLmMtMzIzLVxubW0vbWVtY29udHJvbC5jOjMyNDpcdHJlcGFyZW50X3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xubW0vbWVtY29udHJvbC5jLTMyNS19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjY1OAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDQ3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBwcm92aWRlZCBzbmlwcGV0LCBmcmFtZWQgYXMgbXkgb3duIHRob3VnaHQgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IENvbnRyb2wgRGV0YWlscyoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgYnVzaW5lc3MsIGFuZCB0aGUgcmVsYXRlZCBgY291bnRfc2hhZG93X25vZGVzYCBmdW5jdGlvbi4gSSYjMzk7bGwgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBwaWVjZXMgZml0IHRvZ2V0aGVyLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZXkgYXJlIGNsb3NlbHkgbGlua2VkIGFuZCBJIG5lZWQgdG8gY2hlY2sgdGhlIGNvbnRleHQgb2YgdGhlaXIgcmVsYXRpb25zaGlwLiBJJiMzOTtsbCBvcGVuIHVwIGBtbS9tZW1jb250cm9sLmNgIGFuZCB6ZXJvIGluIGFyb3VuZCBsaW5lIDMyNC4gVGhhdCYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcuIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgc3Vycm91bmRpbmcgY29kZSByZXZlYWxzIGFib3V0IHRoZSBsb2dpYyBhbmQgcHVycG9zZSBvZiB0aGVzZSBmdW5jdGlvbiBjYWxscyB3aXRoaW4gdGhlIG1lbW9yeSBjb250cm9sIHN1YnN5c3RlbS4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIG9iamVjdCBncm91cCByZXBhcmVudGluZywgbWF5YmUgc29tZSBraW5kIG9mIGNvdW50ZXIgbWFuYWdlbWVudCwgb3Igc2hhZG93IG5vZGUgbWFuaXB1bGF0aW9uLiBMZXQmIzM5O3Mgc2VlIHdoYXQgdGhlIGFjdHVhbCBjb2RlIHNheXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDI5MDpcdFx0c3Bpbl91bmxvY2tfaXJxKFx1MDAyNm9iamNnX2xvY2spO1xuIDI5MTpcdH1cbiAyOTI6XHRcbiAyOTM6XHRzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuIDI5NDpcdHtcbiAyOTU6XHRcdHN0cnVjdCBvYmpfY2dyb3VwICpvYmpjZztcbiAyOTY6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQgPSBwYXJlbnRfbWVtX2Nncm91cChtZW1jZyk7XG4gMjk3Olx0XHRpbnQgbmlkO1xuIDI5ODpcdFxuIDI5OTpcdFx0Zm9yX2VhY2hfbm9kZShuaWQpIHtcbiAzMDA6XHRyZXRyeTpcbiAzMDE6XHRcdFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKVxuIDMwMjpcdFx0XHRcdG1heF9scnVfZ2VuX21lbWNnKHBhcmVudCwgbmlkKTtcbiAzMDM6XHRcbiAzMDQ6XHRcdFx0cmVwYXJlbnRfbG9ja3MobWVtY2csIHBhcmVudCwgbmlkKTtcbiAzMDU6XHRcbiAzMDY6XHRcdFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XG4gMzA3Olx0XHRcdFx0aWYgKCFyZWNoZWNrX2xydV9nZW5fbWF4X21lbWNnKHBhcmVudCwgbmlkKSkge1xuIDMwODpcdFx0XHRcdFx0cmVwYXJlbnRfdW5sb2NrcyhtZW1jZywgcGFyZW50LCBuaWQpO1xuIDMwOTpcdFx0XHRcdFx0Y29uZF9yZXNjaGVkKCk7XG4gMzEwOlx0XHRcdFx0XHRnb3RvIHJldHJ5O1xuIDMxMTpcdFx0XHRcdH1cbiAzMTI6XHRcdFx0XHRscnVfZ2VuX3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG4gMzEzOlx0XHRcdH0gZWxzZSB7XG4gMzE0Olx0XHRcdFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG4gMzE1Olx0XHRcdH1cbiAzMTY6XHRcbiAzMTc6XHRcdFx0b2JqY2cgPSBfX21lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZywgcGFyZW50LCBuaWQpO1xuIDMxODpcdFxuIDMxOTpcdFx0XHRyZXBhcmVudF91bmxvY2tzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XG4gMzIwOlx0XG4gMzIxOlx0XHRcdHBlcmNwdV9yZWZfa2lsbChcdTAwMjZvYmpjZy1cdTAwM2VyZWZjbnQpO1xuIDMyMjpcdFx0fVxuIDMyMzpcdFxuIDMyNDpcdFx0cmVwYXJlbnRfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XG4gMzI1Olx0fVxuIDMyNjpcdFxuIDMyNzpcdC8qXG4gMzI4Olx0ICogQSBsb3Qgb2YgdGhlIGNhbGxzIHRvIHRoZSBjYWNoZSBhbGxvY2F0aW9uIGZ1bmN0aW9ucyBhcmUgZXhwZWN0ZWQgdG8gYmVcbiAzMjk6XHQgKiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgdGhlIGNhbGxzIHRvIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKCkgYXJlXG4gMzMwOlx0ICogY29uZGl0aW9uYWwgdG8gdGhpcyBzdGF0aWMgYnJhbmNoLCB3ZSYjMzk7bGwgaGF2ZSB0byBhbGxvdyBtb2R1bGVzIHRoYXQgZG9lc1xuIDMzMTpcdCAqIGttZW1fY2FjaGVfYWxsb2MgYW5kIHRoZSBzdWNoIHRvIHNlZSB0aGlzIHN5bWJvbCBhcyB3ZWxsXG4gMzMyOlx0ICovXG4gMzMzOlx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobWVtY2dfa21lbV9vbmxpbmVfa2V5KTtcbiAzMzQ6XHRFWFBPUlRfU1lNQk9MKG1lbWNnX2ttZW1fb25saW5lX2tleSk7XG4gMzM1Olx0XG4gMzM2Olx0REVGSU5FX1NUQVRJQ19LRVlfRkFMU0UobWVtY2dfYnBmX2VuYWJsZWRfa2V5KTtcbiAzMzc6XHRFWFBPUlRfU1lNQk9MKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XG4gMzM4Olx0XG4gMzM5Olx0LyoqXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzY4MQoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgbWVtY2dfcmVwYXJlbnRfb2JqY2dzYCBDYWxsZXJzKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1doZXJlIGV4YWN0bHkgaXMgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgYmVpbmcgaW52b2tlZD8mIzM0OyBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIHNpdGVzIGlzIGFic29sdXRlbHkgY3J1Y2lhbCBiZWZvcmUgSSBjYW4gZXZlbiBiZWdpbiB0byBhc3Nlc3MgaXRzIHB1cnBvc2UsIHBvdGVudGlhbCBpbXBhY3QsIG9yIGFueSByZWxhdGVkIGlzc3Vlcy4gS25vd2luZyB0aGUgY29udGV4dCBvZiBpdHMgZXhlY3V0aW9uIGlzIHBhcmFtb3VudC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gYnVpbGQgYSBtZW50YWwgbW9kZWwgb2Ygd2hlbiBhbmQgd2h5IHRoaXMgZnVuY3Rpb24gaXMgYmVpbmcgY2FsbGVkLiBJJiMzOTtsbCBuZWVkIHRvIGlkZW50aWZ5IHRoZSB0cmlnZ2VyaW5nIGV2ZW50cyBhbmQgdW5kZXJzdGFuZCB0aGUgc3BlY2lmaWMgc2NlbmFyaW9zIGl0JiMzOTtzIGRlc2lnbmVkIHRvIGhhbmRsZS4gQSBxdWljayBncmVwIG1pZ2h0IGdpdmUgbWUgYSBsaXN0LCBidXQgSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGRvbmUgaW4gdGhlIGNvZGUsIGFuZCBob3cgdGhhdCByZWxhdGVzIHRvIHRoaXMgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtY2dfcmVwYXJlbnRfb2JqY2dzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz0xOTY9c3RhdGljIHN0cnVjdCBvYmpfY2dyb3VwICpvYmpfY2dyb3VwX2FsbG9jKHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC5jLTIxNC1cbm1tL21lbWNvbnRyb2wuYzoyMTU6c3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTIxNi1cdFx0XHRcdFx0XHRcdCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LFxuLS1cbm1tL21lbWNvbnRyb2wuYz0yODY9c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3VubG9ja3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0yOTItXG5tbS9tZW1jb250cm9sLmM6MjkzOnN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtMjk0LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtMzE2LVxubW0vbWVtY29udHJvbC5jOjMxNzpcdFx0b2JqY2cgPSBfX21lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZywgcGFyZW50LCBuaWQpO1xubW0vbWVtY29udHJvbC5jLTMxOC1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDM1Nj1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4tLVxubW0vbWVtY29udHJvbC5jLTQzNzItXHQgKi9cbm1tL21lbWNvbnRyb2wuYzo0MzczOlx0bWVtY2dfcmVwYXJlbnRfb2JqY2dzKG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00Mzc0LVx0cmVwYXJlbnRfc2hyaW5rZXJfZGVmZXJyZWQobWVtY2cpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01NDAyPXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcbi0tXG5tbS9tZW1jb250cm9sLmMtNTQxNi0gKlxubW0vbWVtY29udHJvbC5jOjU0MTc6ICogbWVtY2dfcmVwYXJlbnRfb2JqY2dzKCkgcmVwYXJlbnRzIGEgZHlpbmcgY2dyb3VwIG9uZSBub2RlIGF0IGEgdGltZTogdGhlXG5tbS9tZW1jb250cm9sLmMtNTQxOC0gKiBmb2xpb3Mgb24gdGhhdCBub2RlJiMzOTtzIExSVSBsaXN0cyBtb3ZlIHRvIHRoZSBwYXJlbnQgYW5kIHRoYXQgbm9kZSYjMzk7cyBvYmpjZyBpc1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg0MDcKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzcGVjaWZpY2FsbHkgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhbmQgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kYCBhcmUgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIHRyYWNrIHRob3NlIGNhbGxzIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlLCBhbmQgd2hhdCBzdGF0ZSB0aGV5IGRlcGVuZCBvbi4gVGhpcyBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgY2dyb3VwIGxpZmVjeWNsZXMgYW5kIHRyYW5zaXRpb25zLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGluc3RydW1lbnRhbCBmb3IgdW5kZXJzdGFuZGluZyBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGRlYXRoIGhhbmRsaW5nLCByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGV2ZW4gYWNjb3VudGluZyBkdXJpbmcgdmFyaW91cyBzdGF0ZXMgb2YgdGhlIGNncm91cCBoaWVyYXJjaHkuIEtub3dpbmcgdGhlaXIgY2FsbGVycyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNhbGxzIGluIHJlbGF0aW9uIHRvIHJlc291cmNlIGxpbWl0YXRpb25zIGFuZCB0aGUgZGVhdGggc3RhdGUgb2YgbWVtb3J5IGNncm91cHMsIHdoaWNoIGNvdWxkIGV4cG9zZSByYWNlIGNvbmRpdGlvbnMgb3IgcG90ZW50aWFsIGRlYWRsb2Nrcy4gVWx0aW1hdGVseSwgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgcG9pbnRzIHdpbGwgY2xhcmlmeSBob3cgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIGFuZCBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmRgIGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgd2l0aGluIHRoZSBrZXJuZWwuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2dldF9ub25fZHlpbmdfbWVtY2dfJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz04Njc9c3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqXG5tbS9tZW1jb250cm9sLmM6ODY4OmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxubW0vbWVtY29udHJvbC5jLTg2OS17XG4tLVxubW0vbWVtY29udHJvbC5jLTg4OS1cbm1tL21lbWNvbnRyb2wuYzo4OTA6c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbm1tL21lbWNvbnRyb2wuYy04OTEte1xuLS1cbm1tL21lbWNvbnRyb2wuYz05MjQ9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXG4tLVxubW0vbWVtY29udHJvbC5jLTkzMS1cbm1tL21lbWNvbnRyb2wuYzo5MzI6XHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQobWVtY2csIFx1MDAyNnJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTkzMy1cdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG5tbS9tZW1jb250cm9sLmM6OTM0Olx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XG5tbS9tZW1jb250cm9sLmMtOTM1LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9OTkwPXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy05OTktXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xubW0vbWVtY29udHJvbC5jOjEwMDA6XHRtZW1jZyA9IGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQocG4tXHUwMDNlbWVtY2csIFx1MDAyNnJjdV9sb2NrZWQpO1xubW0vbWVtY29udHJvbC5jLTEwMDEtXHRwbiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW3BnZGF0LVx1MDAzZW5vZGVfaWRdO1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xMDA0LVxubW0vbWVtY29udHJvbC5jOjEwMDU6XHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcbm1tL21lbWNvbnRyb2wuYy0xMDA2LX1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTIxMAoJCQkJCQkJb3V0cHV0OiAyNQoJCQkJCQkJdGhvdWdodHM6IDM0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBhcyBhbiBleHBlcnQmIzM5O3MgaW50ZXJuYWwgbW9ub2xvZ3VlOgoKKipJbnZlc3RpZ2F0aW5nIE1FTUNHIEtjb25maWcgRGVwZW5kZW5jaWVzKioKCkFscmlnaHQsIHRpbWUgdG8gZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byBuYWlsIGRvd24gdGhlIEtjb25maWcgb3B0aW9ucyB0aGF0IGFyZSAqYWJzb2x1dGVseSogZXNzZW50aWFsIGZvciBNRU1DRyB0byBmdW5jdGlvbi4gTm8gc2hvcnRjdXRzIGhlcmU7IGEgcHJvcGVyIGRlcGVuZGVuY3kgYW5hbHlzaXMgaXMgY3JpdGljYWwuIFRoZSBmaXJzdCB0aGluZyBJJiMzOTtsbCBkbyBpcyB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGVzLiBNeSBpbnN0aW5jdCBpcyB0aGF0IHRoZSBwcmltYXJ5IGRlZmluaXRpb25zIHdpbGwgcmVzaWRlIGluIGVpdGhlciBgaW5pdC9LY29uZmlnYCDigJMgZ2l2ZW4gaXRzIHJvbGUgaW4gc3lzdGVtIGluaXRpYWxpemF0aW9uIGFuZCBtb2R1bGUgbG9hZGluZyDigJMgb3IsIG1vcmUgbGlrZWx5LCBgbW0vS2NvbmZpZ2AsIGFzIE1FTUNHIGlzIGZ1bmRhbWVudGFsbHkgbWVtb3J5IG1hbmFnZW1lbnQtY2VudHJpYy4gSSYjMzk7bGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSByaWdodCBmaWxlcy4gVGhhdCYjMzk7bGwgYmUgdGhlIGZhc3Rlc3QgcGF0aCB0byB1bmNvdmVyIGFueSBpbXBsaWNpdCBvciBleHBsaWNpdCBkZXBlbmRlbmNpZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luaXQvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDg0LVxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA4Ni1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTEwMC1cbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTExMDItXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDctXG5pbml0L0tjb25maWc6MTEwODpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTA5LVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk2NjkKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIHJlcXVlc3RlZDoKCioqRXhhbWluaW5nIE1FTUNHIERlcGVuZGVuY2llcyBpbiBgaW5pdC9LY29uZmlnYCoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gcXVpY2tseSByZWZyZXNoIG15IG1lbW9yeSBvbiB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGUgYE1FTUNHYCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTGV0JiMzOTtzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gYGluaXQvS2NvbmZpZ2AuIExpbmUgMTA4NSBzZWVtcyBsaWtlIGEgcmVhc29uYWJsZSBwbGFjZSB0byBiZWdpbiB0aGUgaW52ZXN0aWdhdGlvbi4gSG9wZWZ1bGx5LCB0aGUgcmVsZXZhbnQgcmVsYXRpb25zaGlwcyBhcmUgY2xlYXJseSBkZWZpbmVkIGFyb3VuZCB0aGF0IHNwb3QuIEkmIzM5O20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBwb3NzaWJseSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBpZGVhbGx5LCBzb21lIGNvbmNpc2UgY29tbWVudHMgdGhhdCBvdXRsaW5lIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYE1FTUNHYCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0gYnVpbGQgYXMgYSB3aG9sZS4gSSBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgcHJlcmVxdWlzaXRlcywgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCBhbnkgaW1wbGllZCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4hCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTA4MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAzNQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsxMDgwOlx0XHQgIGFzIHRhc2sgbWlncmF0aW9ucyBhbmQgY29udHJvbGxlciBvbi9vZmZzIGF0IHRoZSBjb3N0IG9mIG1ha2luZ1xuMTA4MTpcdFx0ICBob3QgcGF0aCBvcGVyYXRpb25zIHN1Y2ggYXMgZm9ya3MgYW5kIGV4aXRzIG1vcmUgZXhwZW5zaXZlLlxuMTA4MjpcdFxuMTA4MzpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDg0Olx0XG4xMDg1Olx0Y29uZmlnIE1FTUNHXG4xMDg2Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDg3Olx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDg4Olx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4OTpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA5MDpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDkxOlx0XHRoZWxwXG4xMDkyOlx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwOTM6XHRcbjEwOTQ6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTk6XHRcdGRlZmF1bHQgeVxuMTEwMDpcdFxuMTEwMTpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTEwMjpcdFx0Ym9vbFxuMTEwMzpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTEwNDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTEwNTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTEwNjpcdFx0ZGVmYXVsdCB5XG4xMTA3Olx0XG4xMTA4Olx0Y29uZmlnIE1FTUNHX1YxXG4xMTA5Olx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMTA6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMTE6XHRcdGRlZmF1bHQgblxuMTExMjpcdFx0aGVscFxuMTExMzpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjExMTQ6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTA0MTEKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IENvbXBvbmVudHMqKgoKQWxyaWdodCwgYmVmb3JlIEkgZGl2ZSBpbnRvIHRoZSBjb2RlIGl0c2VsZiwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IGBtZW1jb250cm9sLmNgIGFuZCBgd29ya2luZ3NldC5jYCBhcmUgYmVpbmcgY29tcGlsZWQgYW5kIGxpbmtlZC4gR2l2ZW4gbXkgZXhwZXJpZW5jZSwgdGhlIGBtbS9gIGRpcmVjdG9yeSBpcyB0aGUgbGlrZWx5IHBsYWNlIGZvciB0aGUgcmVsZXZhbnQgTWFrZWZpbGVzLiBJJiMzOTtsbCBuZWVkIHRvIGNoZWNrIHRoZSBgbW0vTWFrZWZpbGVgIGRpcmVjdGx5LiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBydWxlcyBmb3IgdGhvc2Ugc3BlY2lmaWMgc291cmNlIGZpbGVzIGFuZCB0aGVpciB0YXJnZXRzIHdpbGwgYmUgZGVmaW5lZCwgYW5kIEkmIzM5O2xsIGJlIGFibGUgdG8gdHJhY2UgZGVwZW5kZW5jaWVzIGFuZCB1bmRlcnN0YW5kIGFueSBjdXN0b20gYnVpbGQgZmxhZ3MgYmVpbmcgdXNlZC4gVGhpcyB3aWxsIGdpdmUgbWUgYSBzb2xpZCBmb3VuZGF0aW9uIGZvciBldmFsdWF0aW5nIGhvdyB0aGVzZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzIGludGVyYWN0IHdpdGggdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0gYW5kLCB1bHRpbWF0ZWx5LCB3aGF0IHRoZSBjb21waWxlZCBvdXRwdXRzIGxvb2sgbGlrZS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGluIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttZW1jb250cm9sfHdvcmtpbmdzZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT0yNz1LQ09WX0lOU1RSVU1FTlRfa21lbWxlYWsubyA6PSBuXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cbm1tL01ha2VmaWxlOjI5OktDT1ZfSU5TVFJVTUVOVF9tZW1jb250cm9sLXYxLm8gOj0gblxubW0vTWFrZWZpbGUtMzAtS0NPVl9JTlNUUlVNRU5UX21tem9uZS5vIDo9IG5cbi0tXG5tbS9NYWtlZmlsZT01MT1vYmoteVx0XHRcdDo9IGZpbGVtYXAubyBtZW1wb29sLm8gb29tX2tpbGwubyBmYWR2aXNlLm8gXFxcbi0tXG5tbS9NYWtlZmlsZS01Ni1cdFx0XHQgICBjb21wYWN0aW9uLm8gc2hvd19tZW0ubyBcXFxubW0vTWFrZWZpbGU6NTc6XHRcdFx0ICAgaW50ZXJ2YWxfdHJlZS5vIGxpc3RfbHJ1Lm8gd29ya2luZ3NldC5vIFxcXG5tbS9NYWtlZmlsZS01OC1cdFx0XHQgICBkZWJ1Zy5vIGd1cC5vIG1tYXBfbG9jay5vIHZtYV9pbml0Lm8gJChtbXUteSlcbi0tXG5tbS9NYWtlZmlsZT0xMDM9b2JqLSQoQ09ORklHX0xJVkVVUERBVEVfTUVNRkQpICYjNDM7PSBtZW1mZF9sdW8ub1xubW0vTWFrZWZpbGU6MTA0Om9iai0kKENPTkZJR19NRU1DR19WMSkgJiM0Mzs9IG1lbWNvbnRyb2wtdjEub1xubW0vTWFrZWZpbGU6MTA1Om9iai0kKENPTkZJR19NRU1DRykgJiM0Mzs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cbm1tL01ha2VmaWxlLTEwNi1pZmRlZiBDT05GSUdfQlBGX1NZU0NBTExcbm1tL01ha2VmaWxlOjEwNzpvYmotJChDT05GSUdfTUVNQ0cpICYjNDM7PSBicGZfbWVtY29udHJvbC5vXG5tbS9NYWtlZmlsZS0xMDgtZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTEwMDkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIE1lbWNnIENvZGUgZm9yIE9wdGltaXphdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBGaXJzdCwgSSBzZWUgdGhhdCBlbmFibGluZyBgQ09ORklHX01FTUNHYCBjb21waWxlcyBgbWVtY29udHJvbC5vYCwgYW5kIGB3b3JraW5nc2V0Lm9gIGlzIGFsd2F5cyBidWlsdC4gU2luY2UgdGhlIGNvZGUgaW50ZXJhY3RzIHdpdGggYm90aCB2MSBhbmQgdjIgbWVtY2dzLCBgQ09ORklHX01FTUNHX1YxYCBtaWdodCBiZSByZWxldmFudCwgYnV0IGBNRU1DR2AgaXMgdGhlIHByaW1hcnkgY29uZmlndXJhdGlvbi4gSSYjMzk7bGwgaW5jbHVkZSBgTUVNQ0dgIGFzIHRoZSBjb3JlIGNvbmNlcm4uCgpOb3csIGxldCYjMzk7cyBpZGVudGlmeSB0aGUga2V5IGZ1bmN0aW9ucyB0byBmb2N1cyBvbi4gSGVyZSYjMzk7cyB3aGF0IEkmIzM5O3ZlIG5vdGVkOgoKKiAgIGByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWxgIChpbiBgbWVtY29udHJvbC5jYCwgbm9uLXN0YXRpYykgLSB0aGlzIGlzIHRoZSBuZXdseSB1bi1pZmRlZiYjMzk7ZCBmdW5jdGlvbiBhbmQgbWlnaHQgYmUgc2lnbmlmaWNhbnQuCiogICBgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsYCAoc3RhdGljIGluIGBtZW1jb250cm9sLmNgKQoqICAgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoc3RhdGljIGluIGBtZW1jb250cm9sLmNgKQoqICAgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgKGNhbGxzIGByZXBhcmVudF9zdGF0ZV9sb2NhbGAgZHVyaW5nIGBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lYCkgLSB0aGlzIHNvdW5kcyBsaWtlIGl0JiMzOTtzIGhhbmRsaW5nIHRoZSByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uLCB3aGljaCBjb3VsZCBiZSBhbiBpbXBvcnRhbnQgb3BlcmF0aW9uIHRvIG9wdGltaXplLgoqICAgYGNvdW50X3NoYWRvd19ub2Rlc2AgKGluIGB3b3JraW5nc2V0LmNgKSAtIHRoaXMgaXMgdGhlIHNocmlua2VyIGNvdW50IGNhbGxiYWNrIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2Rlcy4KKiAgIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCAoc3RhdGljIGlubGluZSBpbiBgbWVtY29udHJvbC5jYCkgLSB3aGljaCBpcyBjYWxsZWQgYnkgYG1vZF9tZW1jZ19zdGF0ZWAgYW5kIGBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlYC4KCkkmIzM5O20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgIGFyZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBvciBzcGVjaWZpYyB0byBjZXJ0YWluIGZlYXR1cmVzLiBJdCBsb29rcyBsaWtlIHRoZXkgYXJlIG1lbWNnIHN0YXQgbW9kaWZpZXJzLiBBbmQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgdGhlIHNocmlua2VyIGNvdW50IGNhbGxiYWNrIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2Rlcy4gYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgaXMgdGhlIG5ldyBmdW5jdGlvbi4gRmluYWxseSwgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgaXMgd2hhdCBhY3R1YWxseSBkb2VzIHRoZSByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uLgoKTmV4dCBzdGVwOiBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBjYWxsZXJzIGFuZCBkZWZpbml0aW9uIG9mIGBjb3VudF9zaGFkb3dfbm9kZXNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDo0OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS93b3JraW5nc2V0LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vd29ya2luZ3NldC5jPTYyND12b2lkIHdvcmtpbmdzZXRfdXBkYXRlX25vZGUoc3RydWN0IHhhX25vZGUgKm5vZGUpXG4tLVxubW0vd29ya2luZ3NldC5jLTY1MC1cbm1tL3dvcmtpbmdzZXQuYzo2NTE6c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG5tbS93b3JraW5nc2V0LmMtNjUyLVx0XHRcdFx0XHRzdHJ1Y3Qgc2hyaW5rX2NvbnRyb2wgKnNjKVxuLS1cbm1tL3dvcmtpbmdzZXQuYz03OTI9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXG4tLVxubW0vd29ya2luZ3NldC5jLTgyOC1cbm1tL3dvcmtpbmdzZXQuYzo4Mjk6XHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cdTAwM2Vjb3VudF9vYmplY3RzID0gY291bnRfc2hhZG93X25vZGVzO1xubW0vd29ya2luZ3NldC5jLTgzMC1cdHdvcmtpbmdzZXRfc2hhZG93X3Nocmlua2VyLVx1MDAzZXNjYW5fb2JqZWN0cyA9IHNjYW5fc2hhZG93X25vZGVzO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMjE1OQoJCQkJCQkJb3V0cHV0OiAxNjcKCQkJCQkJCXRob3VnaHRzOiAzNTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBWZXJkaWN0OiBDb25maXJtZWQqKgoKT2theSwgc28gSSYjMzk7dmUgYmVlbiBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kLCBiYXNlZCBvbiBteSBhbmFseXNpcywgaXQgbG9va3MgbGlrZSBhIGdvIGZvciBmdXp6aW5nLiBIZXJlJiMzOTtzIHRoZSBicmVha2Rvd246IEkgc2VlIHRoYXQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgYmVpbmcgZGlyZWN0bHkgdHdlYWtlZCBpbiBgbW0vd29ya2luZ3NldC5jYCwgYW5kIEkmIzM5O3ZlIGFsc28gaWRlbnRpZmllZCBzZXZlcmFsIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS9tZW1jb250cm9sLmNgOiBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbGAgKHdoaWNoLCBieSB0aGUgd2F5LCBpcyBtYXJrZWQgc3RhdGljKSwgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoYWxzbyBzdGF0aWMgaW5saW5lKSwgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgKGFub3RoZXIgc3RhdGljIG9uZSEpLCBhbmQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCB3aGljaCBpcyB0aGUgQ1NTIGNhbGxiYWNrIGZvciBjZ3JvdXAgZGVzdHJ1Y3Rpb24uIFBsdXMsIHRoZSBjcml0aWNhbCBzeW1ib2wsIGBjb3VudF9zaGFkb3dfbm9kZXNgLCBpcyBsaXN0ZWQgYXMgYmVpbmcgZGlyZWN0bHkgcmVsZXZhbnQuCgpJJiMzOTt2ZSBhbHJlYWR5IGNvbmZpcm1lZCB0aGUgcHJlLXJlcXVpc2l0ZXM6IGBXb3J0aEZ1enppbmdgIGlzIHNldCB0byB0cnVlLCBhbmQgYEVuYWJsZUNvbmZpZ3NgIGluY2x1ZGVzIGBNRU1DR2AuIE15IGZvY3VzIHN5bWJvbHMgYXJlIHNwb3Qgb246IGBjb3VudF9zaGFkb3dfbm9kZXNgLCBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbGAsIGFuZCBgbWVtY2dfcmVwYXJlbnRfb2JqY2dzYCB3aGljaCBhbGlnbnMgd2l0aCB0aGUgb2JzZXJ2ZWQgbW9kaWZpY2F0aW9ucy4KClRoZSByZWFzb25pbmcgaGVyZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBtZW1vcnkgY2dyb3VwIHJlcGFyZW50aW5nLCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCB2MiYjMzk7cyBub24taGllcmFyY2hpY2FsIExSVSB2ZWN0b3Igc3RhdGlzdGljcy4gSXQmIzM5O3MgYWxzbyBtYWtpbmcgYWRqdXN0bWVudHMgdG8gYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIHRvIGhhbmRsZSBkeWluZyBjZ3JvdXBzIGFjcm9zcyBoaWVyYXJjaGllcy4gUGx1cywgaXQmIzM5O3MgdXBkYXRpbmcgc2hhZG93IG5vZGUgY291bnRpbmcgaW4gYHdvcmtpbmdzZXQuY2AgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgdGVhcmRvd24vcmVwYXJlbnRpbmcgY2hhbmdlcywgYW5kIGFsbCBvZiB0aGVzZSBhcmUgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIG9wZXJhdGlvbnM6IGNncm91cCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbWVtb3J5IGFsbG9jYXRpb24gcmVxdWVzdHMsIGFuZCB0aGUgbWVtb3J5IHJlY2xhaW0vc2hyaW5rZXIgbWVjaGFuaXNtcy4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjcnVjaWFsIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBicm9hZGx5IGFjY2Vzc2libGUuIEkgYW0gcmVhc29uYWJseSBjZXJ0YWluIHRoYXQgdGhpcyBpcyBhbiBhcmVhIHRoYXQgd2FycmFudHMgZnV6emluZy4gQWxsIGNoZWNrcyBvdXQsIGFuZCBJJiMzOTttIHJlYWR5IHRvIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbCYjMzQ7LAogICAgJiMzNDttZW1jZ19yZXBhcmVudF9vYmpjZ3MmIzM0OywKICAgICYjMzQ7Y291bnRfc2hhZG93X25vZGVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgaW4gbW0vbWVtY29udHJvbC5jIGFuZCBtbS93b3JraW5nc2V0LmMgdG8gcmVwYXJlbnQgbm9uLWhpZXJhcmNoaWNhbCBscnV2ZWMgc3RhdGlzdGljcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIGNncm91cCBvZmZsaW5pbmcsIGFkanVzdHMgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydCBhY3Jvc3MgaGllcmFyY2hpZXMsIGFuZCBhbHRlcnMgaG93IGNvdW50X3NoYWRvd19ub2RlcyBjb21wdXRlcyBsb2NhbCBwYWdlIHN0YXRlcy4gVGhpcyBtb2RpZmllcyByZWFjaGFibGUgY29yZSBtbSBhbmQgY2dyb3VwIGxpZmVjeWNsZSBsb2dpYy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwmIzM0OywKICAgICYjMzQ7cmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O21lbWNnX3JlcGFyZW50X29iamNncyYjMzQ7LAogICAgJiMzNDtjb3VudF9zaGFkb3dfbm9kZXMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wOCAwNDo0OTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL3dvcmtpbmdzZXQuYyBhbmQgbW0vbWVtY29udHJvbC5jLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgbm9uLWhpZXJhcmNoaWNhbCBMUlUgYW5kIHNsYWIgc3RhdGlzdGljcyBhcmUgcHJvcGVybHkgcmVwYXJlbnRlZCB0byBwYXJlbnQgY2dyb3VwcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIG1lbWNnIG9mZmxpbmluZyB0byBhdm9pZCB1bmRlcmZsb3dzIGluIHNoYWRvdyBub2RlIGFjY291bnRpbmcuXG5cbi0gTm8gbWVtb3J5IGFsbG9jYXRpb25zIChzdGFjayBvciBoZWFwIGJ1ZmZlcnMpIGFyZSBpbnRyb2R1Y2VkIG9yIGxlZnQgdW5pbml0aWFsaXplZC5cbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIGNvdWxkIGxlYWsuXG4tIFRoZSBwYXRjaCBvcGVyYXRlcyBzb2xlbHkgb24gZXhpc3Rpbmcga2VybmVsIGNvdW50ZXJzIGFuZCBkYXRhIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGBzdHJ1Y3QgbHJ1dmVjYCwgbm9kZSBzdGF0cykuXG4tIFBvdGVudGlhbCBpc3N1ZXMgc3VjaCBhcyByZWZjb3VudGluZywgbG9ja2luZy9yYWNlcywgb3IgbWVtb3J5IG1hbmFnZW1lbnQgYnVncyB3b3VsZCBiZSBhZGRyZXNzZWQgYnkgS0FTQU4sIExPQ0tERVAsIG9yIGdlbmVyYWwga2VybmVsIHRlc3RpbmcsIG5vdCBLTVNBTi5cblxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyBkb2VzIG5vdCBwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJlNjEyMGVhN2Y1OTE5MDYzNzVhNWExY2IyNzY2OGQwNWUzYTFkNDUKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCA4IDA0OjQ4OjUyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oCmluZGV4IDFlMzk0MjY5YzYxM2QuLjA1NzhiNzA3Njc2NGQgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wtdjEuaAomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLXYxLmgKQEAgLTI1LDYgJiM0MzsyNSw5IEBAIGludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7CiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJCQkJICAgIHVuc2lnbmVkIGludCBuKTsKIAomIzQzO3ZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKJiM0MzsJCQkJICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpOwomIzQzOwogLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqLwogI2lmZGVmIENPTkZJR19NRU1DR19WMQogCkBAIC03Myw4ICYjNDM7NzYsNiBAQCB2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2NncgogCiB2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJCQlzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTsKLXZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKLQkJCQkgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7CiAKIHZvaWQgbWVtY2cxX2FjY291bnRfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcyk7CiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX3RjcG1lbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDEyNzFkMzkwYjYxN2UuLmYxMzAzMGY3NWZhNTQgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTIzMiwxNCAmIzQzOzIzMiwyOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtYwogCXJldHVybiBvYmpjZzsKIH0KIAotI2lmZGVmIENPTkZJR19NRU1DR19WMQogc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiYjNDM7LyoKJiM0MzsgKiBSZXBhcmVudCB0aGUgbm9uLWhpZXJhcmNoaWNhbCBscnV2ZWMgc3RhdHMgdGhhdCBjb3VudF9zaGFkb3dfbm9kZXMoKSByZWFkcwomIzQzOyAqIHRvIGFwcHJveGltYXRlIHRoZSBzaGFkb3cgbm9kZSBidWRnZXQuICBUaGV5IGFyZSBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2UKJiM0MzsgKiBvbiBjZ3JvdXAgdjIsIGJ1dCB0aGV5IG11c3QgZm9sbG93IHRoZSByZXBhcmVudGVkIGZvbGlvczsgb3RoZXJ3aXNlIHRoZQomIzQzOyAqIGFuY2VzdG9yIHdvdWxkIG9ubHkgcmVjZWl2ZSB0aGUgbmVnYXRpdmUgZGVsdGFzIHdoZW4gdGhlIGZvbGlvcyBhcmUgZnJlZWQKJiM0MzsgKiB3aXRob3V0IGV2ZXIgaGF2aW5nIHJlY2VpdmVkIHRoZSBwb3NpdGl2ZSBiYXNlLCBhbmQgaXRzIGxvY2FsIHN0YXRzIHdvdWxkCiYjNDM7ICogcGVybWFuZW50bHkgdW5kZXJmbG93LgomIzQzOyAqLwomIzQzO3N0YXRpYyB2b2lkIHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiB7Ci0JaWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpCi0JCXJldHVybjsKJiM0MzsJaW50IGk7CiYjNDM7CiYjNDM7CWZvciAoaSA9IDA7IGkgJmx0OyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KQomIzQzOwkJcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIE5SX0xSVV9CQVNFICYjNDM7IGkpOwomIzQzOwomIzQzOwlyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9SRUNMQUlNQUJMRV9CKTsKJiM0MzsJcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CKTsKJiM0Mzt9CiAKJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQomIzQzO3sKIAkvKgogCSAqIFJlcGFyZW50IHN0YXRzIGV4cG9zZWQgbm9uLWhpZXJhcmNoaWNhbGx5LiBGbHVzaCBAbWVtY2cmIzM5O3Mgc3RhdHMgZmlyc3QKIAkgKiB0byByZWFkIGl0cyBzdGF0cyBhY2N1cmF0ZWx5ICwgYW5kIGNvbnNlcnZhdGl2ZWx5IGZsdXNoIEBwYXJlbnQmIzM5O3MKQEAgLTI0OCwxNyAmIzQzOzI2MywxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2NncgogCSAqLwogCV9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZywgdHJ1ZSk7CiAKLQkvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi8KLQlyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7Ci0JcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTsKJiM0MzsJaWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHsKJiM0MzsJCXJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTsKJiM0MzsJfSBlbHNlIHsKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHX1YxCiYjNDM7CQkvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi8KJiM0MzsJCXJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTsKJiM0MzsJCXJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7CiYjNDM7I2VuZGlmCiYjNDM7CX0KIAogCV9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhwYXJlbnQsIHRydWUpOwogfQotI2Vsc2UKLXN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCi17Ci19Ci0jZW5kaWYKIAogc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X2xvY2tzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZCkKIHsKQEAgLTU3MCw3ICYjNDM7NTg2LDYgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsCiAJcmV0dXJuIHg7CiB9CiAKLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sCiAJCQkJICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpOwogCkBAIC01OTIsNyAmIzQzOzYwNyw2IEBAIHZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywKIAkJX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHBhcmVudF9wbiwgaWR4LCB2YWx1ZSk7CiAJfQogfQotI2VuZGlmCiAKIC8qIFN1YnNldCBvZiB2bV9ldmVudF9pdGVtIHRvIHJlcG9ydCBmb3IgbWVtY2cgZXZlbnQgc3RhdHMgKi8KIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0gewpAQCAtODQ1LDE2ICYjNDM7ODU5LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbCkKIAlyZXR1cm4gdmFsICZsdDsgMCA/IC1yZXMgOiByZXM7CiB9CiAKLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKIC8qCi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoCi0gKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4KJiM0MzsgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZQomIzQzOyAqIHdpdGggcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuICBPZmZsaW5pbmcgYQomIzQzOyAqIG1lbWNnIGlzIHJhcmUsIHNvIGRvIHRoZSByZWRpcmVjdGlvbiBmb3IgYWxsIGNncm91cCBoaWVyYXJjaGllcy4KICAqLwotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCQkJICAgYm9vbCAqcmN1X2xvY2tlZCkKJiM0MztzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICoKJiM0MztnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZCkKIHsKLQkvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovCi0JaWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpIHsKJiM0MzsJLyoKJiM0MzsJICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZwomIzQzOwkgKiBpdHMgQ1NTX0RZSU5HIGZsYWcgd2l0aG91dCB0aGUgUkNVIGxvY2sgaXMgc2FmZS4gIFRoZSBSQ1UgbG9jawomIzQzOwkgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaAomIzQzOwkgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC4KJiM0MzsJICovCiYjNDM7CWlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7CiAJCSpyY3VfbG9ja2VkID0gZmFsc2U7CiAJCXJldHVybiBtZW1jZzsKIAl9CkBAIC04NzUsMTcgJiM0Mzs4OTQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKQogCiAJcmN1X3JlYWRfdW5sb2NrKCk7CiB9Ci0jZWxzZQotc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csCi0JCQkJCQkJICAgYm9vbCAqcmN1X2xvY2tlZCkKLXsKLQlyZXR1cm4gbWVtY2c7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpCi17Ci19Ci0jZW5kaWYKIAogc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLAogCQkJICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCkKZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuYwppbmRleCA3YWMyYjg4YzgwYWU1Li44NDEyZjQ4NDBhZTM1IDEwMDY0NAotLS0gYS9tbS93b3JraW5nc2V0LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vd29ya2luZ3NldC5jCkBAIC02ODgsMTAgJiM0Mzs2ODgsOSBAQCBzdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlciwKIAogCQltZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLSZndDttZW1jZyk7CiAJCWxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLSZndDttZW1jZywgTk9ERV9EQVRBKHNjLSZndDtuaWQpKTsKLQogCQlmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgJmx0OyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KQotCQkJcGFnZXMgJiM0Mzs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpOwotCiYjNDM7CQkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywKJiM0MzsJCQkJCQkJIE5SX0xSVV9CQVNFICYjNDM7IGkpOwogCQlwYWdlcyAmIzQzOz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoCiAJCQlscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgJmd0OyZndDsgUEFHRV9TSElGVDsKIAkJcGFnZXMgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKAo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDggMDQ6NDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDMxOAoJCQkJCQkJb3V0cHV0OiAyMjYKCQkJCQkJCXRob3VnaHRzOiA4NjgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50OiBNZW1vcnkgQ2dyb3VwIFN0YXRpc3RpY3MgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRldGVybWluZSBpZiB0aGlzIHBhdGNoIG5lY2Vzc2l0YXRlcyBLTVNBTiBmdXp6aW5nLiBJJiMzOTt2ZSBnb3QgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGFjdHVhbGx5IGNoYW5nZWQgYmVmb3JlIEkgY2FuIG1ha2UgdGhhdCBjYWxsLgoKU28sIGhlcmUmIzM5O3Mgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmc6IGl0JiMzOTtzIHNodWZmbGluZyBkZWNsYXJhdGlvbnMgYXJvdW5kLCBtYWtpbmcgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgYXZhaWxhYmxlIHVuY29uZGl0aW9uYWxseS4gSXQgdGhlbiBpbnRyb2R1Y2VzIGByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxgLCB3aGljaCBoYW5kbGVzIHJlcGFyZW50aW5nIG5vbi1oaWVyYXJjaGljYWwgbHJ1dmVjIHN0YXRzIGZvciBjZ3JvdXAgdjIuIGByZXBhcmVudF9zdGF0ZV9sb2NhbGAgbm93IGNhbGxzIHRoaXMgbmV3IGZ1bmN0aW9uIG9uIGNncm91cCB2Miwgb3IsIHRoZSBleGlzdGluZyB2MSBlcXVpdmFsZW50LiBBbHNvLCBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAgbm93IHN1cHBvcnRzIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuIEZpbmFsbHksIHRoZXJlJiMzOTtzIGEgY2hhbmdlIGluIGBjb3VudF9zaGFkb3dfbm9kZXNgIHRvIHVzZSBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgLgoKVGhlIGNvcmUgb2YgdGhpcyBpcyBhYm91dCBtZW1vcnkgY2dyb3VwIHN0YXRpc3RpY3MgYW5kIHRoZSB3b3JraW5nc2V0IHNoYWRvdyBub2RlIHNocmlua2VyLiBXaGF0JiMzOTtzIHRoZSBjb25jZXJuPyBVbmluaXRpYWxpemVkIG1lbW9yeSByZWFkcywgcG90ZW50aWFsIGxlYWtzIHRvIHVzZXJzcGFjZSwgdW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzLCBvciBldmVuIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCByZWFkcy4gTGV0JiMzOTtzIHNlZS4uLgoKSSBzZWUgdGhhdCBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCBpcyB0cmFuc2ZlcnJpbmcgcGVyLW5vZGUgY291bnRlcnMgYmV0d2VlbiBtZW1jZ3MuIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAgaXMgcmVhZGluZyBwZXItY3B1L3Blci1ub2RlIGNvdW50ZXJzIGZyb20gbHJ1dmVjLiBgY291bnRfc2hhZG93X25vZGVzYCBpcyBwYXJ0IG9mIGEgc2hyaW5rZXIgY2FsbGJhY2sgd2hpY2ggZGVhbHMgd2l0aCB3b3JraW5nc2V0IHNocmlua2luZywgc28gaXQgcmV0dXJucyB0aGUgYHVuc2lnbmVkIGxvbmdgIGNvdW50IG9mIHNoYWRvdyBub2Rlcy4KCkZyb20gd2hhdCBJIGNhbiB0ZWxsLCB0aGlzIHBhdGNoIGlzbiYjMzk7dCBjcmVhdGluZyBuZXcgYnVmZmVycyB3aXRob3V0IGluaXRpYWxpemF0aW9uOyBpdCYjMzk7cyBqdXN0IGRlYWxpbmcgd2l0aCBpbnRlZ2VyIGNvdW50ZXJzIG1haW50YWluZWQgYnkgdGhlIG1lbWNnIHN0YXRpc3RpY3MgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBzb3J0cyBvZiBidWdzIEkgd291bGQgZXhwZWN0IGhlcmUgYXJlIGFjY291bnRpbmcgZXJyb3JzLCBwb3RlbnRpYWwgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIFVBRi9yZWZjb3VudGluZyBpc3N1ZXMgKGlmIG1lbWNnIGxpZmVjeWNsZSB3YXMgc29tZWhvdyBicm9rZW4pLCBidXQgdGhlc2Ugc2hvdWxkIGJlIHBpY2tlZCB1cCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGV4aXN0aW5nIG1lY2hhbmlzbXMuIEl0IGRvZXNuJiMzOTt0IGxvb2sgbGlrZSBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMgb3Igc3RydWN0IHBhZGRpbmcgYXJlIGV4cG9zZWQuCgpOb3csIGxldCYjMzk7cyBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgbXkgS01TQU4gY2hlY2tsaXN0OgoKMS4gIEtlcm5lbCBkYXRhIGNvcGllZCB0byB1c2Vyc3BhY2U/IE5vcGUuIFRoZSBkYXRhIGlzIGZvcm1hdHRlZCBhcyBudW1iZXJzIGluIGNncm91cCB2MiAvIHYxIHNlcVxfZmlsZXMgZm9ybWF0cyB1c2luZyBgc25wcmludGYvc2VxX3ByaW50ZmAsIG5vdCByYXcgbWVtb3J5LgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gdW5pbml0aWFsaXplZCB2YXJpYWJsZXM/IE5vdCBoZXJlLgozLiAgQWxsb2NhdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aXRoIHVuaW5pdGlhbGl6ZWQgZmllbGRzPyBObyBhbGxvY2F0aW9ucyBpbnRyb2R1Y2VkLgo0LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcz8gTm8gYnVmZmVyIGFjY2VzcyBvciBsZW5ndGggY2hhbmdlcyBpbiB0aGUgcGF0Y2guCgpBbHJpZ2h0LCB3aXRoIGFsbCB0aGF0IGNvbnNpZGVyZWQsIEkgY2FuIHNheSB3aXRoIGNlcnRhaW50eSB0aGF0IHRoaXMgcGF0Y2ggZG9lcyAqbm90KiBuZWVkIEtNU0FOIGZ1enppbmcuIFRoZSBjaGFuZ2VzIGFyZSBhbGwgZGVhbGluZyB3aXRoIGludGVnZXIgc3RhdGlzdGljcyBhbmQgdGhlcmUgYXJlIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLiBJJiMzOTtsbCBtYWtlIHN1cmUgdG8gbm90ZSBteSByZWFzb25pbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzA4IDA0OjQ5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIG1lbW9yeSBjZ3JvdXAgc3RhdGlzdGljcyBhY2NvdW50aW5nIGFuZCBzaGFkb3cgbm9kZSBjYWxjdWxhdGlvbiBpbiBtbS93b3JraW5nc2V0LmMgYW5kIG1tL21lbWNvbnRyb2wuYy4gU3BlY2lmaWNhbGx5LCBpdCBlbnN1cmVzIG5vbi1oaWVyYXJjaGljYWwgTFJVIGFuZCBzbGFiIHN0YXRpc3RpY3MgYXJlIHByb3Blcmx5IHJlcGFyZW50ZWQgdG8gcGFyZW50IGNncm91cHMgb24gY2dyb3VwIHYyIGR1cmluZyBtZW1jZyBvZmZsaW5pbmcgdG8gYXZvaWQgdW5kZXJmbG93cyBpbiBzaGFkb3cgbm9kZSBhY2NvdW50aW5nLlxuXG4tIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyAoc3RhY2sgb3IgaGVhcCBidWZmZXJzKSBhcmUgaW50cm9kdWNlZCBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuXG4tIE5vIGRhdGEgaXMgY29waWVkIHRvIHVzZXIgc3BhY2Ugb3IgYWNyb3NzIGJvdW5kYXJpZXMgd2hlcmUgdW5pbml0aWFsaXplZCBwYWRkaW5nIG9yIGZpZWxkcyBjb3VsZCBsZWFrLlxuLSBUaGUgcGF0Y2ggb3BlcmF0ZXMgc29sZWx5IG9uIGV4aXN0aW5nIGtlcm5lbCBjb3VudGVycyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IG1lbV9jZ3JvdXBgLCBgc3RydWN0IGxydXZlY2AsIG5vZGUgc3RhdHMpLlxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgcmVmY291bnRpbmcsIGxvY2tpbmcvcmFjZXMsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3Mgd291bGQgYmUgYWRkcmVzc2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBnZW5lcmFsIGtlcm5lbCB0ZXN0aW5nLCBub3QgS01TQU4uXG5cblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgcG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY2dyb3VwIHN0YXRpc3RpY3MgYWNjb3VudGluZyBhbmQgc2hhZG93IG5vZGUgY2FsY3VsYXRpb24gaW4gbW0vd29ya2luZ3NldC5jIGFuZCBtbS9tZW1jb250cm9sLmMuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBub24taGllcmFyY2hpY2FsIExSVSBhbmQgc2xhYiBzdGF0aXN0aWNzIGFyZSBwcm9wZXJseSByZXBhcmVudGVkIHRvIHBhcmVudCBjZ3JvdXBzIG9uIGNncm91cCB2MiBkdXJpbmcgbWVtY2cgb2ZmbGluaW5nIHRvIGF2b2lkIHVuZGVyZmxvd3MgaW4gc2hhZG93IG5vZGUgYWNjb3VudGluZy5cblxuLSBObyBtZW1vcnkgYWxsb2NhdGlvbnMgKHN0YWNrIG9yIGhlYXAgYnVmZmVycykgYXJlIGludHJvZHVjZWQgb3IgbGVmdCB1bmluaXRpYWxpemVkLlxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMgY291bGQgbGVhay5cbi0gVGhlIHBhdGNoIG9wZXJhdGVzIHNvbGVseSBvbiBleGlzdGluZyBrZXJuZWwgY291bnRlcnMgYW5kIGRhdGEgc3RydWN0dXJlcyAoYHN0cnVjdCBtZW1fY2dyb3VwYCwgYHN0cnVjdCBscnV2ZWNgLCBub2RlIHN0YXRzKS5cbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nL3JhY2VzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBidWdzIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZywgbm90IEtNU0FOLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGF0Y2ggc2VyaWVzIGRvZXMgbm90IHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkgcmlza3MgYW5kIGRvZXMgbm90IHdhcnJhbnQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0ODo1My45NzkwODIyMjRaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0MjkzMDA3MDExMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcInJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbFwiLFxuICAgIFwicmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsXCIsXG4gICAgXCJtZW1jZ19yZXBhcmVudF9vYmpjZ3NcIixcbiAgICBcImNvdW50X3NoYWRvd19ub2Rlc1wiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL3dvcmtpbmdzZXQuYyBhbmQgbW0vbWVtY29udHJvbC5jLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgbm9uLWhpZXJhcmNoaWNhbCBMUlUgYW5kIHNsYWIgc3RhdGlzdGljcyBhcmUgcHJvcGVybHkgcmVwYXJlbnRlZCB0byBwYXJlbnQgY2dyb3VwcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIG1lbWNnIG9mZmxpbmluZyB0byBhdm9pZCB1bmRlcmZsb3dzIGluIHNoYWRvdyBub2RlIGFjY291bnRpbmcuXFxuXFxuLSBObyBtZW1vcnkgYWxsb2NhdGlvbnMgKHN0YWNrIG9yIGhlYXAgYnVmZmVycykgYXJlIGludHJvZHVjZWQgb3IgbGVmdCB1bmluaXRpYWxpemVkLlxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIGNvdWxkIGxlYWsuXFxuLSBUaGUgcGF0Y2ggb3BlcmF0ZXMgc29sZWx5IG9uIGV4aXN0aW5nIGtlcm5lbCBjb3VudGVycyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IG1lbV9jZ3JvdXBgLCBgc3RydWN0IGxydXZlY2AsIG5vZGUgc3RhdHMpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nL3JhY2VzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBidWdzIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZywgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgcG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0ODo1My45NzkwODY3NDRaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0ODQzOTc5NDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCBiZTYxMjBlYTdmNTkxOTA2Mzc1YTVhMWNiMjc2NjhkMDVlM2ExZDQ1XFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUdWUgU2VwIDggMDQ6NDg6NTIgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC12MS5oIGIvbW0vbWVtY29udHJvbC12MS5oXFxuaW5kZXggMWUzOTQyNjljNjEzZC4uMDU3OGI3MDc2NzY0ZCAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcXG4rKysgYi9tbS9tZW1jb250cm9sLXYxLmhcXG5AQCAtMjUsNiArMjUsOSBAQCBpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHRcXHRcXHRcXHRcXHQgICAgdW5zaWduZWQgaW50IG4pO1xcbiBcXG4rdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbitcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XFxuK1xcbiAvKiBDZ3JvdXAgdjEtc3BlY2lmaWMgZGVjbGFyYXRpb25zICovXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gXFxuQEAgLTczLDggKzc2LDYgQEAgdm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JcXG4gXFxuIHZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbiBcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcXG4tdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi1cXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XFxuIFxcbiB2b2lkIG1lbWNnMV9hY2NvdW50X2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpO1xcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX3RjcG1lbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcXG5pbmRleCAxMjcxZDM5MGI2MTdlLi5mMTMwMzBmNzVmYTU0IDEwMDY0NFxcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xcbisrKyBiL21tL21lbWNvbnRyb2wuY1xcbkBAIC0yMzIsMTQgKzIzMiwyOSBAQCBzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY1xcbiBcXHRyZXR1cm4gb2JqY2c7XFxuIH1cXG4gXFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gc3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XFxuIFxcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbisvKlxcbisgKiBSZXBhcmVudCB0aGUgbm9uLWhpZXJhcmNoaWNhbCBscnV2ZWMgc3RhdHMgdGhhdCBjb3VudF9zaGFkb3dfbm9kZXMoKSByZWFkc1xcbisgKiB0byBhcHByb3hpbWF0ZSB0aGUgc2hhZG93IG5vZGUgYnVkZ2V0LiAgVGhleSBhcmUgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlXFxuKyAqIG9uIGNncm91cCB2MiwgYnV0IHRoZXkgbXVzdCBmb2xsb3cgdGhlIHJlcGFyZW50ZWQgZm9saW9zOyBvdGhlcndpc2UgdGhlXFxuKyAqIGFuY2VzdG9yIHdvdWxkIG9ubHkgcmVjZWl2ZSB0aGUgbmVnYXRpdmUgZGVsdGFzIHdoZW4gdGhlIGZvbGlvcyBhcmUgZnJlZWRcXG4rICogd2l0aG91dCBldmVyIGhhdmluZyByZWNlaXZlZCB0aGUgcG9zaXRpdmUgYmFzZSwgYW5kIGl0cyBsb2NhbCBzdGF0cyB3b3VsZFxcbisgKiBwZXJtYW5lbnRseSB1bmRlcmZsb3cuXFxuKyAqL1xcbitzdGF0aWMgdm9pZCByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbiB7XFxuLVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxcbi1cXHRcXHRyZXR1cm47XFxuK1xcdGludCBpO1xcbitcXG4rXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbitcXHRcXHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfTFJVX0JBU0UgKyBpKTtcXG4rXFxuK1xcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpO1xcbitcXHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IpO1xcbit9XFxuIFxcbitzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbit7XFxuIFxcdC8qXFxuIFxcdCAqIFJlcGFyZW50IHN0YXRzIGV4cG9zZWQgbm9uLWhpZXJhcmNoaWNhbGx5LiBGbHVzaCBAbWVtY2cncyBzdGF0cyBmaXJzdFxcbiBcXHQgKiB0byByZWFkIGl0cyBzdGF0cyBhY2N1cmF0ZWx5ICwgYW5kIGNvbnNlcnZhdGl2ZWx5IGZsdXNoIEBwYXJlbnQnc1xcbkBAIC0yNDgsMTcgKzI2MywxOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2NnclxcbiBcXHQgKi9cXG4gXFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTtcXG4gXFxuLVxcdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xcbi1cXHRyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxuLVxcdHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxuK1xcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XFxuK1xcdFxcdHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcXG4rXFx0fSBlbHNlIHtcXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbitcXHRcXHQvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi9cXG4rXFx0XFx0cmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbitcXHRcXHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbisjZW5kaWZcXG4rXFx0fVxcbiBcXG4gXFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHBhcmVudCwgdHJ1ZSk7XFxuIH1cXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4te1xcbi19XFxuLSNlbmRpZlxcbiBcXG4gc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X2xvY2tzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IG5pZClcXG4ge1xcbkBAIC01NzAsNyArNTg2LDYgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuIFxcdHJldHVybiB4O1xcbiB9XFxuIFxcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXFxuIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuIFxcdFxcdFxcdFxcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKTtcXG4gXFxuQEAgLTU5Miw3ICs2MDcsNiBAQCB2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShwYXJlbnRfcG4sIGlkeCwgdmFsdWUpO1xcbiBcXHR9XFxuIH1cXG4tI2VuZGlmXFxuIFxcbiAvKiBTdWJzZXQgb2Ygdm1fZXZlbnRfaXRlbSB0byByZXBvcnQgZm9yIG1lbWNnIGV2ZW50IHN0YXRzICovXFxuIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xcbkBAIC04NDUsMTYgKzg1OSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXFxuIFxcdHJldHVybiB2YWwgXFx1MDAzYyAwID8gLXJlcyA6IHJlcztcXG4gfVxcbiBcXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbiAvKlxcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxcbisgKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZVxcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcXG4rICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxcbiAgKi9cXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbitnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcXG4ge1xcbi1cXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXFxuLVxcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XFxuK1xcdC8qXFxuK1xcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcXG4rXFx0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcXG4rXFx0ICogaXMgb25seSBuZWVkZWQgdG8gd2FsayB1cCB0byBhIG5vbi1keWluZyBhbmNlc3Rvciwgd2hpY2hcXG4rXFx0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXFxuK1xcdCAqL1xcbitcXHRpZiAoIW1lbWNnX2lzX2R5aW5nKG1lbWNnKSkge1xcbiBcXHRcXHQqcmN1X2xvY2tlZCA9IGZhbHNlO1xcbiBcXHRcXHRyZXR1cm4gbWVtY2c7XFxuIFxcdH1cXG5AQCAtODc1LDE3ICs4OTQsNiBAQCBzdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbiBcXG4gXFx0cmN1X3JlYWRfdW5sb2NrKCk7XFxuIH1cXG4tI2Vsc2VcXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuLVxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXFxuLXtcXG4tXFx0cmV0dXJuIG1lbWNnO1xcbi19XFxuLVxcbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxcbi17XFxuLX1cXG4tI2VuZGlmXFxuIFxcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuIFxcdFxcdFxcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXFxuZGlmZiAtLWdpdCBhL21tL3dvcmtpbmdzZXQuYyBiL21tL3dvcmtpbmdzZXQuY1xcbmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0XFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXFxuKysrIGIvbW0vd29ya2luZ3NldC5jXFxuQEAgLTY4OCwxMCArNjg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuIFxcbiBcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVxcdTAwM2VtZW1jZyk7XFxuIFxcdFxcdGxydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHNjLVxcdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVxcdTAwM2VuaWQpKTtcXG4tXFxuIFxcdFxcdGZvciAocGFnZXMgPSAwLCBpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbi1cXHRcXHRcXHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcXG4tXFxuK1xcdFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcXG4rXFx0XFx0XFx0XFx0XFx0XFx0XFx0IE5SX0xSVV9CQVNFICsgaSk7XFxuIFxcdFxcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxcbiBcXHRcXHRcXHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gXFx0XFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ4OjU1LjQ2NDI1NzY1NFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6MzQzNDk2MDgxODksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWxcIixcbiAgICBcInJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbFwiLFxuICAgIFwibWVtY2dfcmVwYXJlbnRfb2JqY2dzXCIsXG4gICAgXCJjb3VudF9zaGFkb3dfbm9kZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGluIG1tL21lbWNvbnRyb2wuYyBhbmQgbW0vd29ya2luZ3NldC5jIHRvIHJlcGFyZW50IG5vbi1oaWVyYXJjaGljYWwgbHJ1dmVjIHN0YXRpc3RpY3Mgb24gY2dyb3VwIHYyIGR1cmluZyBjZ3JvdXAgb2ZmbGluaW5nLCBhZGp1c3RzIGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQgYWNyb3NzIGhpZXJhcmNoaWVzLCBhbmQgYWx0ZXJzIGhvdyBjb3VudF9zaGFkb3dfbm9kZXMgY29tcHV0ZXMgbG9jYWwgcGFnZSBzdGF0ZXMuIFRoaXMgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUgbW0gYW5kIGNncm91cCBsaWZlY3ljbGUgbG9naWMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyIGFuZCBzZWN1cml0eSBlbmdpbmVlci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3NcbnRvb2xzIHRvIGluc3BlY3QgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSwgY2FsbGVycywgYW5kIHN1cnJvdW5kaW5nIGNvbnRleHQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4xLiBDT1JFIFRSSUFHRSBQSElMT1NPUEhZXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncyxcbmFuZCBuZXdseSB0cmlnZ2VyZWQgYXNzZXJ0aW9ucyBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBzZXJpZXMuXG5cbi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6XG4gIEZ1enppbmcgY2FuIG9ubHkgZGlzY292ZXIgYnVncyBpbiBjb2RlIHRoYXQgY2FuIGFjdHVhbGx5IGV4ZWN1dGUgaW4gc3RhbmRhcmQgdmlydHVhbGl6ZWRcbiAgZW52aXJvbm1lbnRzIChHQ0Ugb3IgUUVNVSwgdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGRldmljZXMgbGlrZSBVU0IgZ2FkZ2V0cywgbmV0ZGV2LCB0dW4vdGFwKS5cbiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLFxuICByZWdhcmRsZXNzIG9mIHdoZXRoZXIgaXQgYWRkcyBhc3NlcnRpb25zIG9yIGNvbXBsZXggbG9naWMuXG5cbi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgXCJOTyBGVU5DVElPTkFMIENIQU5HRVwiIChORkNJKSBPUiBcIlJFRkFDVE9SSU5HXCIgQ0xBSU1TOlxuICBQYXRjaCBhdXRob3JzIHJvdXRpbmVseSBsYWJlbCBjaGFuZ2VzIGFzIFwiY2xlYW51cHNcIiwgXCJyZWZhY3RvcmluZ3NcIiwgb3Igc3RhdGVcbiAgXCJObyBmdW5jdGlvbmFsIGNoYW5nZSBpbnRlbmRlZFwiLiBEbyBOT1QgdGFrZSB0aGVzZSBjbGFpbXMgYXQgZmFjZSB2YWx1ZS5cbiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50XG4gIGluIGNvcmUgc3Vic3lzdGVtcyBmcmVxdWVudGx5IGludHJvZHVjZSBzdWJ0bGUgc2VtYW50aWMgc2hpZnRzIG9yIHVuY292ZXIgbGF0ZW50IGtlcm5lbCBidWdzLlxuICBJZiByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlIGlzIG1vZGlmaWVkIG9yIHJlZmFjdG9yZWQsIGl0IE1VU1QgYmUgZnV6emVkLlxuXG4tIE5FVyBPUiBNT0RJRklFRCBBU1NFUlRJT05TIElOIFJFQUNIQUJMRSBDT0RFIE1VU1QgQkUgRlVaWkVEOlxuICBXaGVuIGEgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllcyBydW50aW1lIGNoZWNrcyBvciBhc3NlcnRpb25zIChlLmcuLCBXQVJOX09OKiwgVk1fV0FSTl9PTiosXG4gIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLlxuICBFdmVuIGlmIHRoZSBhdXRob3IgYmVsaWV2ZXMgdGhlIGludmFyaWFudCBhbHdheXMgaG9sZHMsIGZ1enppbmcgaXMgZXNzZW50aWFsIHRvIHZlcmlmeSB3aGV0aGVyXG4gIGFuIHVudXN1YWwgc2VxdWVuY2Ugb2Ygb3BlcmF0aW9ucyBjYW4gdmlvbGF0ZSBpdC5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjIuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz1mYWxzZSAoTkVHQVRJVkUgQ1JJVEVSSUEpXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBPTkxZIElGIGFsbCBtb2RpZmllZCBjb2RlIGZhbGxzIHN0cmljdGx5IGludG8gb25lIG9yIG1vcmUgb2YgdGhlc2UgY2F0ZWdvcmllczpcblxuLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOlxuICAqIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIGNvbW1lbnRzLCBvciBzcGVsbGluZyBmaXhlcy5cbiAgKiBVc2VyLXNwYWNlIGRpcmVjdG9yaWVzLCBzZWxmLXRlc3RzLCBzYW1wbGVzLCBvciBzY3JpcHRzIChlLmcuLCB0b29scy8sIHNhbXBsZXMvLCBzY3JpcHRzLywgdXNyLylcbiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuXG4gICogUHVyZWx5IGRlY29yYXRpdmUgbG9nZ2luZyAoZS5nLiwgbWVzc2FnZSBzdHJpbmdzIGluIHByX2VyciwgcHJpbnRrLCBkZXZfaW5mbykgb3IgdHJhY2Vwb2ludHNcbiAgICB0aGF0IGRvIG5vdCBhbHRlciBjb250cm9sIGZsb3cgb3IgZGF0YSBzdHJ1Y3R1cmVzLlxuICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy5cbi0gU3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIGhhcmR3YXJlOlxuICAqIFZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaGVzLCBTbWFydE5JQ3MsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBVbnJlYWNoYWJsZSBleGVjdXRpb24gcGF0aHM6XG4gICogRHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoLnJlbW92ZSwgLnNodXRkb3duLCBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIpIGV4ZWN1dGVkIG9ubHkgZHVyaW5nXG4gICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuXG4gICogQ29kZSBwYXRocyBleGNsdXNpdmUgdG8gYXJjaGl0ZWN0dXJlcyBvdGhlciB0aGFuIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlLlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMy4gV0hFTiBUTyBSRVRVUk4gV29ydGhGdXp6aW5nPXRydWUgKFBPU0lUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6XG4tIENvcmUgU3Vic3lzdGVtczpcbiAgKiBBbnkgbG9naWMgbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCAobW0vKSwgc3luY2hyb25pemF0aW9uL2xvY2tpbmcgKGtlcm5lbC9sb2NraW5nLyksXG4gICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLlxuLSBSZWZhY3RvcmluZ3MgYW5kIENvZGUgQ2xlYW51cHM6XG4gICogQW55IHJlc3RydWN0dXJpbmcgb2YgcmVhY2hhYmxlIGRhdGEgc3RydWN0dXJlcywgaGVscGVyIGFic3RyYWN0aW9ucywgb3IgYWxnb3JpdGhtIGZsb3dzLlxuLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6XG4gICogQW55IGludHJvZHVjdGlvbiBvciBhbHRlcmF0aW9uIG9mIGFzc2VydGlvbnMgKFdBUk5fT04qLCBWTV9XQVJOX09OKiwgQlVHX09OKiwgZXRjLikgaW4gcmVhY2hhYmxlIHBhdGhzLlxuLSBSZWFjaGFibGUgRHJpdmVycyBhbmQgUHJvdG9jb2xzOlxuICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbldoZW4gV29ydGhGdXp6aW5nPXRydWUsIHlvdSBtdXN0IGV4dHJhY3Qgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyBpbnRvIEZvY3VzU3ltYm9scyB0byBndWlkZSB0aGUgZnV6emVyOlxuXG4tIEFWT0lEIFVCSVFVSVRPVVMgTElGRUNZQ0xFIEhPVC1QQVRIUzpcbiAgRG8gTk9UIGxpc3QgZ2VuZXJpYywgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2FsbGVkIGJ5IGFsbW9zdCBldmVyeSBwcm9ncmFtIGluIHRoZSBjb3JwdXNcbiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHRcbiAgYW5kIHRyYXAgaGFuZGxlcnMsIG9yIGNvcmUgc3luY2hyb25pemF0aW9uIHByaW1pdGl2ZXM7IHRoaXMgaXMgbm90IGFuIGV4aGF1c3RpdmUgbGlzdCkuXG4gIExpc3RpbmcgdWJpcXVpdG91cyBmdW5jdGlvbnMgY2F1c2VzIHRoZSBmdXp6ZXIgdG8gY2xhc3NpZnkgdGhvdXNhbmRzIG9mIHVucmVsYXRlZCB0ZXN0cyBhcyBcImZvY3VzZWRcIixcbiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLlxuXG4tIFRBUkdFVCBTUEVDSUZJQyBGRUFUVVJFIExPR0lDIEFORCBFTlRSWVBPSU5UUzpcbiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzXG4gIGZvciB0aGUgc3Vic3lzdGVtIGZlYXR1cmUgdW5kZXIgcmV2aWV3LlxuXG4tIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKTpcbiAgQ29tcGlsZXItaW5saW5lZCBzdGF0aWMgZnVuY3Rpb25zIChzdWNoIGFzIHN0YXRpYyBpbmxpbmVzIGluIG1tLyouaCBvciBpbmNsdWRlL2xpbnV4LyouaCkgbGFja1xuICBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzIGluIHZtbGludXggYW5kIGNhbm5vdCBiZSB0YXJnZXRlZCBkaXJlY3RseSBieSBzeW1ib2wgY292ZXJhZ2UgZmlsdGVycy5cbiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyXG4gIGZ1bmN0aW9ucyBpbiAuYyBmaWxlcyB0aGF0IGV4ZXJjaXNlIHRoZW0gKGF2b2lkaW5nIHViaXF1aXRvdXMgbGlmZWN5Y2xlIHdyYXBwZXJzKS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjUuIElERU5USUZZSU5HIEVuYWJsZUNvbmZpZ3Ncbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5JZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOlxuLSBJbnNwZWN0IEtjb25maWcgZmlsZXMgYW5kICNpZmRlZiBndWFyZHM7IGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuLSBDaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MgbmVlZGVkLlxuLSBTdHJpcCBhbnkgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiVGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjRcblxuRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmU2MTIwZWE3ZjU5MTkwNjM3NWE1YTFjYjI3NjY4ZDA1ZTNhMWQ0NVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDggMDQ6NDg6NTIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLXYxLmggYi9tbS9tZW1jb250cm9sLXYxLmhcbmluZGV4IDFlMzk0MjY5YzYxM2QuLjA1NzhiNzA3Njc2NGQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLXYxLmhcbisrKyBiL21tL21lbWNvbnRyb2wtdjEuaFxuQEAgLTI1LDYgKzI1LDkgQEAgaW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcbiBzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtX2Nncm91cF9wcml2YXRlX2lkX2dldF9vbmxpbmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0XHRcdCAgICB1bnNpZ25lZCBpbnQgbik7XG4gXG4rdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuK1x0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuK1xuIC8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cbiAjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gXG5AQCAtNzMsOCArNzYsNiBAQCB2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2NnclxuIFxuIHZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XG4tdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuIFxuIHZvaWQgbWVtY2cxX2FjY291bnRfa21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBucl9wYWdlcyk7XG4gc3RhdGljIGlubGluZSBib29sIG1lbWNnMV90Y3BtZW1fYWN0aXZlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDEyNzFkMzkwYjYxN2UuLmYxMzAzMGY3NWZhNTQgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTIzMiwxNCArMjMyLDI5IEBAIHN0YXRpYyBpbmxpbmUgc3RydWN0IG9ial9jZ3JvdXAgKl9fbWVtY2dfcmVwYXJlbnRfb2JqY2dzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jXG4gXHRyZXR1cm4gb2JqY2c7XG4gfVxuIFxuLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBzdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcbiBcbi1zdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuKy8qXG4rICogUmVwYXJlbnQgdGhlIG5vbi1oaWVyYXJjaGljYWwgbHJ1dmVjIHN0YXRzIHRoYXQgY291bnRfc2hhZG93X25vZGVzKCkgcmVhZHNcbisgKiB0byBhcHByb3hpbWF0ZSB0aGUgc2hhZG93IG5vZGUgYnVkZ2V0LiAgVGhleSBhcmUgbm90IGV4cG9zZWQgdG8gdXNlcnNwYWNlXG4rICogb24gY2dyb3VwIHYyLCBidXQgdGhleSBtdXN0IGZvbGxvdyB0aGUgcmVwYXJlbnRlZCBmb2xpb3M7IG90aGVyd2lzZSB0aGVcbisgKiBhbmNlc3RvciB3b3VsZCBvbmx5IHJlY2VpdmUgdGhlIG5lZ2F0aXZlIGRlbHRhcyB3aGVuIHRoZSBmb2xpb3MgYXJlIGZyZWVkXG4rICogd2l0aG91dCBldmVyIGhhdmluZyByZWNlaXZlZCB0aGUgcG9zaXRpdmUgYmFzZSwgYW5kIGl0cyBsb2NhbCBzdGF0cyB3b3VsZFxuKyAqIHBlcm1hbmVudGx5IHVuZGVyZmxvdy5cbisgKi9cbitzdGF0aWMgdm9pZCByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIHtcbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKVxuLVx0XHRyZXR1cm47XG4rXHRpbnQgaTtcbitcbitcdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxuK1x0XHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfTFJVX0JBU0UgKyBpKTtcbitcbitcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpO1xuK1x0cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIE5SX1NMQUJfVU5SRUNMQUlNQUJMRV9CKTtcbit9XG4gXG4rc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbit7XG4gXHQvKlxuIFx0ICogUmVwYXJlbnQgc3RhdHMgZXhwb3NlZCBub24taGllcmFyY2hpY2FsbHkuIEZsdXNoIEBtZW1jZydzIHN0YXRzIGZpcnN0XG4gXHQgKiB0byByZWFkIGl0cyBzdGF0cyBhY2N1cmF0ZWx5ICwgYW5kIGNvbnNlcnZhdGl2ZWx5IGZsdXNoIEBwYXJlbnQnc1xuQEAgLTI0OCwxNyArMjYzLDE4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyXG4gXHQgKi9cbiBcdF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZywgdHJ1ZSk7XG4gXG4tXHQvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi9cbi1cdHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbi1cdHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XG4rXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xuK1x0XHRyZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XG4rXHR9IGVsc2Uge1xuKyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbitcdFx0LyogVGhlIGZvbGxvd2luZyBjb3VudHMgYXJlIGFsbCBub24taGllcmFyY2hpY2FsIGFuZCBuZWVkIHRvIGJlIHJlcGFyZW50ZWQuICovXG4rXHRcdHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbitcdFx0cmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbisjZW5kaWZcbitcdH1cbiBcbiBcdF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhwYXJlbnQsIHRydWUpO1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4te1xuLX1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfbG9ja3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxuIHtcbkBAIC01NzAsNyArNTg2LDYgQEAgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4gXHRyZXR1cm4geDtcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIHN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4gXHRcdFx0XHQgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbCk7XG4gXG5AQCAtNTkyLDcgKzYwNyw2IEBAIHZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiBcdFx0X19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHBhcmVudF9wbiwgaWR4LCB2YWx1ZSk7XG4gXHR9XG4gfVxuLSNlbmRpZlxuIFxuIC8qIFN1YnNldCBvZiB2bV9ldmVudF9pdGVtIHRvIHJlcG9ydCBmb3IgbWVtY2cgZXZlbnQgc3RhdHMgKi9cbiBzdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnX3ZtX2V2ZW50X3N0YXRbXSA9IHtcbkBAIC04NDUsMTYgKzg1OSwyMSBAQCBzdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4gXHRyZXR1cm4gdmFsIFx1MDAzYyAwID8gLXJlcyA6IHJlcztcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIC8qXG4tICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxuLSAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxuKyAqIFVzZWQgaW4gbW9kX21lbWNnX3N0YXRlKCkgYW5kIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoKSB0byBhdm9pZCByYWNlXG4rICogd2l0aCByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy4gIE9mZmxpbmluZyBhXG4rICogbWVtY2cgaXMgcmFyZSwgc28gZG8gdGhlIHJlZGlyZWN0aW9uIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuICAqL1xuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbitzdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpcbitnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCAqcmN1X2xvY2tlZClcbiB7XG4tXHQvKiBSZWJpbmRpbmcgY2FuIGNhdXNlIHRoaXMgdmFsdWUgdG8gYmUgY2hhbmdlZCBhdCBydW50aW1lICovXG4tXHRpZiAoY2dyb3VwX3N1YnN5c19vbl9kZmwobWVtb3J5X2NncnBfc3Vic3lzKSkge1xuK1x0LypcbitcdCAqIEZhc3QgcGF0aDogdGhlIGNhbGxlciBob2xkcyBhIHJlZmVyZW5jZSB0byBAbWVtY2csIHNvIHJlYWRpbmdcbitcdCAqIGl0cyBDU1NfRFlJTkcgZmxhZyB3aXRob3V0IHRoZSBSQ1UgbG9jayBpcyBzYWZlLiAgVGhlIFJDVSBsb2NrXG4rXHQgKiBpcyBvbmx5IG5lZWRlZCB0byB3YWxrIHVwIHRvIGEgbm9uLWR5aW5nIGFuY2VzdG9yLCB3aGljaFxuK1x0ICogaGFwcGVucyBvbmx5IHdoaWxlIGEgbWVtY2cgaXMgYWN0dWFsbHkgYmVpbmcgb2ZmbGluZWQuXG4rXHQgKi9cbitcdGlmICghbWVtY2dfaXNfZHlpbmcobWVtY2cpKSB7XG4gXHRcdCpyY3VfbG9ja2VkID0gZmFsc2U7XG4gXHRcdHJldHVybiBtZW1jZztcbiBcdH1cbkBAIC04NzUsMTcgKzg5NCw2IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4gXG4gXHRyY3VfcmVhZF91bmxvY2soKTtcbiB9XG4tI2Vsc2Vcbi1zdGF0aWMgaW5saW5lIHN0cnVjdCBtZW1fY2dyb3VwICpnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi1cdFx0XHRcdFx0XHRcdCAgIGJvb2wgKnJjdV9sb2NrZWQpXG4te1xuLVx0cmV0dXJuIG1lbWNnO1xuLX1cbi1cbi1zdGF0aWMgaW5saW5lIHZvaWQgZ2V0X25vbl9keWluZ19tZW1jZ19lbmQoYm9vbCByY3VfbG9ja2VkKVxuLXtcbi19XG4tI2VuZGlmXG4gXG4gc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRcdCAgICAgIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCwgbG9uZyB2YWwpXG5kaWZmIC0tZ2l0IGEvbW0vd29ya2luZ3NldC5jIGIvbW0vd29ya2luZ3NldC5jXG5pbmRleCA3YWMyYjg4YzgwYWU1Li44NDEyZjQ4NDBhZTM1IDEwMDY0NFxuLS0tIGEvbW0vd29ya2luZ3NldC5jXG4rKysgYi9tbS93b3JraW5nc2V0LmNcbkBAIC02ODgsMTAgKzY4OCw5IEBAIHN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuIFxuIFx0XHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzX3JhdGVsaW1pdGVkKHNjLVx1MDAzZW1lbWNnKTtcbiBcdFx0bHJ1dmVjID0gbWVtX2Nncm91cF9scnV2ZWMoc2MtXHUwMDNlbWVtY2csIE5PREVfREFUQShzYy1cdTAwM2VuaWQpKTtcbi1cbiBcdFx0Zm9yIChwYWdlcyA9IDAsIGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkrKylcbi1cdFx0XHRwYWdlcyArPSBscnV2ZWNfbHJ1X3NpemUobHJ1dmVjLCBpLCBNQVhfTlJfWk9ORVMgLSAxKTtcbi1cbitcdFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsXG4rXHRcdFx0XHRcdFx0XHQgTlJfTFJVX0JBU0UgKyBpKTtcbiBcdFx0cGFnZXMgKz0gbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoXG4gXHRcdFx0bHJ1dmVjLCBOUl9TTEFCX1JFQ0xBSU1BQkxFX0IpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ4OjU1LjQ2NDI1OTA2NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjY0MTE4MDk0MTksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBQYXRjaCBTZXJpZXMqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgb2YgdGhlc2UgY2hhbmdlcy4gTG9va2luZyBhdCB0aGUgcGF0Y2ggZGV0YWlscywgaXQncyBmb2N1c2VkIG9uIHRoZSBtZW1vcnkgY2dyb3VwIChtZW1jZykgc3RhdHMgcmVwYXJlbnRpbmcgYW5kIHdvcmtpbmdzZXQgc2hhZG93IG5vZGUgY291bnRpbmcsIHByaW1hcmlseSB3aXRoaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSAoYG1tL2ApLiBTcGVjaWZpY2FsbHksIHRoZSBjaGFuZ2VzIGluIGBtbS9tZW1jb250cm9sLmNgIGxvb2sgaW50ZXJlc3RpbmcuXG5cblRoZXkndmUgYWRkZWQgYHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbGAgdG8gaGFuZGxlIG5vbi1oaWVyYXJjaGljYWwgTFJVdmVjIHN0YXRzIGZvciBjZ3JvdXAgdjIuIFRoZXkncmUgYWxzbyB1cGRhdGluZyBgcmVwYXJlbnRfc3RhdGVfbG9jYWxgIHRvIGNhbGwgdGhpcyBuZXcgZnVuY3Rpb24gb24gdGhlIGRlZmF1bHQgaGllcmFyY2h5LCB3aGljaCBpcyBjZ3JvdXAgdjIuIEl0IHNlZW1zIGxpa2UgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgaXMgYmVpbmcgbWFkZSBhdmFpbGFibGUgdW5jb25kaXRpb25hbGx5IG5vdywgbm8gbG9uZ2VyIHJlc3RyaWN0ZWQgdG8gYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLiBBbHNvLCBgZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydGAgYW5kIGBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZGAgYXJlIGFsc28gbm93IHVuY29uZGl0aW9uYWxseSBlbmFibGVkIGZvciBhbGwgY2dyb3VwIGhpZXJhcmNoaWVzLlxuXG5JbiBgbW0vd29ya2luZ3NldC5jYCwgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgYmVpbmcgbW9kaWZpZWQgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAgaW5zdGVhZCBvZiBgbHJ1dmVjX2xydV9zaXplYC4gVGhhdCdzIGEgc2hpZnQgaW4gaG93IHRoZXkncmUgY2FsY3VsYXRpbmcgc29tZXRoaW5nLCB3aGljaCBpcyBzb21ldGhpbmcgdG8gcGF5IGF0dGVudGlvbiB0by5cblxuQWxyaWdodCwgaXMgdGhpcyBldmVuIHdvcnRoIHRoZSBlZmZvcnQgdG8gY29uc2lkZXIgaXQgZm9yIGZ1enppbmc/IEFic29sdXRlbHkuIFRoaXMgdG91Y2hlcyBtZW1vcnkgbWFuYWdlbWVudCAoYG1tL2ApLCBtZW1jZywgYW5kIHdvcmtpbmdzZXQg4oCTIGFsbCBhcmVhcyB0aGF0IGFyZSBmdWxseSBhY2Nlc3NpYmxlIHRocm91Z2ggc3lzY2FsbHMsIGNncm91cGZzLCBmaWxlIEkvTywgYW5kIG1lbW9yeSBhbGxvY2F0aW9uIGluIHN0YW5kYXJkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgYW5kIEdDRS4gQ29yZSBzdWJzeXN0ZW0gbW9kaWZpY2F0aW9ucyBpbiBtZW1vcnkgbWFuYWdlbWVudCBhbHdheXMgZ2V0IG15IGF0dGVudGlvbiwgZXNwZWNpYWxseSBjb25zaWRlcmluZyB0aGUgc3luY2hyb25pemF0aW9uL2xvY2tpbmcsIGFuZCBzeXNjYWxsIGhhbmRsaW5nIGFzcGVjdHMuXG5cbk5vdywgbGV0J3Mgc2VlIGhvdyB0aGUgcGF0Y2ggZml0cyBvdXIgZXN0YWJsaXNoZWQgZnV6emluZyBydWxlcy4gXCJXb3J0aEZ1enppbmdcIiBpcyBkZWZpbml0ZWx5IHRydWUuIFRoZSBuZXh0IHN0ZXAgaXMgdG8gaWRlbnRpZnkgdGhlIGNyaXRpY2FsIFwiRm9jdXNTeW1ib2xzXCIuIEkgbmVlZCB0byBwcmlvcml0aXplIGZ1bmN0aW9ucyB0aGF0IGFyZSBtb2RpZmllZCBvciBmZWF0dXJlLXNwZWNpZmljIGVudHJ5cG9pbnRzLCBhbmQgYXZvaWQgZnVuY3Rpb25zIHRoYXQgYXJlIHViaXF1aXRvdXMuIFNvLCBsZXQgbWUgbWFrZSBhIGxpc3Qgb2YgY2FuZGlkYXRlIGZ1bmN0aW9uczpcblxuKiAgIGByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxgIChUaGlzIG9uZSBzZWVtcyBwYXJ0aWN1bGFybHkgaW50ZXJlc3RpbmcpXG4qICAgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoVGhpcyBpcyBpbmxpbmUvYSBjYWxsZXIsIEkgbmVlZCB0byBzZWUgd2hlcmUgaXQncyBjYWxsZWQpXG4qICAgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgKE1hZGUgdW5jb25kaXRpb25hbCBub3cpXG4qICAgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgXG4qICAgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kYFxuKiAgIGBjb3VudF9zaGFkb3dfbm9kZXNgXG5cbkknbGwgdXNlIGBnaXQgZ3JlcGAgdG8gZmluZCBjYWxsZXJzIG9mIGByZXBhcmVudF9zdGF0ZV9sb2NhbGAgYW5kIHdoZXJlIGByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWxgIGlzIHVzZWQgZm9yIGZ1cnRoZXIgYW5hbHlzaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUxMDYsIk91dHB1dFRva2VucyI6MjgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2OTQsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OTowMS44NzYwNzE0ODNaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQwMDk2MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicmVwYXJlbnRfc3RhdGVfbG9jYWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wuYz0yNDU9c3RhdGljIHZvaWQgcmVwYXJlbnRfdjJfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTUtXFxubW0vbWVtY29udHJvbC5jOjI1NjpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYy0yNTcte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI5Mz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMyMy1cXG5tbS9tZW1jb250cm9sLmM6MzI0OlxcdHJlcGFyZW50X3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0zMjUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OTowMS45NTAwOTAxMzFaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyOTEzNjE0ODkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIHNuaXBwZXQsIGZyYW1lZCBhcyBteSBvd24gdGhvdWdodCBwcm9jZXNzOlxuXG4qKkRpdmluZyBpbnRvIE1lbW9yeSBDb250cm9sIERldGFpbHMqKlxuXG5BbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgYnVzaW5lc3MsIGFuZCB0aGUgcmVsYXRlZCBgY291bnRfc2hhZG93X25vZGVzYCBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIHBpZWNlcyBmaXQgdG9nZXRoZXIuIE15IGluc3RpbmN0IGlzIHRoYXQgdGhleSBhcmUgY2xvc2VseSBsaW5rZWQgYW5kIEkgbmVlZCB0byBjaGVjayB0aGUgY29udGV4dCBvZiB0aGVpciByZWxhdGlvbnNoaXAuIEknbGwgb3BlbiB1cCBgbW0vbWVtY29udHJvbC5jYCBhbmQgemVybyBpbiBhcm91bmQgbGluZSAzMjQuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGFjdGlvbiBpcyBoYXBwZW5pbmcuIExldCdzIHNlZSB3aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIHJldmVhbHMgYWJvdXQgdGhlIGxvZ2ljIGFuZCBwdXJwb3NlIG9mIHRoZXNlIGZ1bmN0aW9uIGNhbGxzIHdpdGhpbiB0aGUgbWVtb3J5IGNvbnRyb2wgc3Vic3lzdGVtLiBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBvYmplY3QgZ3JvdXAgcmVwYXJlbnRpbmcsIG1heWJlIHNvbWUga2luZCBvZiBjb3VudGVyIG1hbmFnZW1lbnQsIG9yIHNoYWRvdyBub2RlIG1hbmlwdWxhdGlvbi4gTGV0J3Mgc2VlIHdoYXQgdGhlIGFjdHVhbCBjb2RlIHNheXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjY2NTgsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OTowNC44NjM3MDc5MTNaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyNTgyODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI5MCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDI5MDpcXHRcXHRzcGluX3VubG9ja19pcnEoXFx1MDAyNm9iamNnX2xvY2spO1xcbiAyOTE6XFx0fVxcbiAyOTI6XFx0XFxuIDI5MzpcXHRzdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbiAyOTQ6XFx0e1xcbiAyOTU6XFx0XFx0c3RydWN0IG9ial9jZ3JvdXAgKm9iamNnO1xcbiAyOTY6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCA9IHBhcmVudF9tZW1fY2dyb3VwKG1lbWNnKTtcXG4gMjk3OlxcdFxcdGludCBuaWQ7XFxuIDI5ODpcXHRcXG4gMjk5OlxcdFxcdGZvcl9lYWNoX25vZGUobmlkKSB7XFxuIDMwMDpcXHRyZXRyeTpcXG4gMzAxOlxcdFxcdFxcdGlmIChscnVfZ2VuX2VuYWJsZWQoKSlcXG4gMzAyOlxcdFxcdFxcdFxcdG1heF9scnVfZ2VuX21lbWNnKHBhcmVudCwgbmlkKTtcXG4gMzAzOlxcdFxcbiAzMDQ6XFx0XFx0XFx0cmVwYXJlbnRfbG9ja3MobWVtY2csIHBhcmVudCwgbmlkKTtcXG4gMzA1OlxcdFxcbiAzMDY6XFx0XFx0XFx0aWYgKGxydV9nZW5fZW5hYmxlZCgpKSB7XFxuIDMwNzpcXHRcXHRcXHRcXHRpZiAoIXJlY2hlY2tfbHJ1X2dlbl9tYXhfbWVtY2cocGFyZW50LCBuaWQpKSB7XFxuIDMwODpcXHRcXHRcXHRcXHRcXHRyZXBhcmVudF91bmxvY2tzKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDMwOTpcXHRcXHRcXHRcXHRcXHRjb25kX3Jlc2NoZWQoKTtcXG4gMzEwOlxcdFxcdFxcdFxcdFxcdGdvdG8gcmV0cnk7XFxuIDMxMTpcXHRcXHRcXHRcXHR9XFxuIDMxMjpcXHRcXHRcXHRcXHRscnVfZ2VuX3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDMxMzpcXHRcXHRcXHR9IGVsc2Uge1xcbiAzMTQ6XFx0XFx0XFx0XFx0bHJ1X3JlcGFyZW50X21lbWNnKG1lbWNnLCBwYXJlbnQsIG5pZCk7XFxuIDMxNTpcXHRcXHRcXHR9XFxuIDMxNjpcXHRcXG4gMzE3OlxcdFxcdFxcdG9iamNnID0gX19tZW1jZ19yZXBhcmVudF9vYmpjZ3MobWVtY2csIHBhcmVudCwgbmlkKTtcXG4gMzE4OlxcdFxcbiAzMTk6XFx0XFx0XFx0cmVwYXJlbnRfdW5sb2NrcyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbiAzMjA6XFx0XFxuIDMyMTpcXHRcXHRcXHRwZXJjcHVfcmVmX2tpbGwoXFx1MDAyNm9iamNnLVxcdTAwM2VyZWZjbnQpO1xcbiAzMjI6XFx0XFx0fVxcbiAzMjM6XFx0XFxuIDMyNDpcXHRcXHRyZXBhcmVudF9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcXG4gMzI1OlxcdH1cXG4gMzI2OlxcdFxcbiAzMjc6XFx0LypcXG4gMzI4OlxcdCAqIEEgbG90IG9mIHRoZSBjYWxscyB0byB0aGUgY2FjaGUgYWxsb2NhdGlvbiBmdW5jdGlvbnMgYXJlIGV4cGVjdGVkIHRvIGJlXFxuIDMyOTpcXHQgKiBpbmxpbmVkIGJ5IHRoZSBjb21waWxlci4gU2luY2UgdGhlIGNhbGxzIHRvIG1lbWNnX3NsYWJfcG9zdF9hbGxvY19ob29rKCkgYXJlXFxuIDMzMDpcXHQgKiBjb25kaXRpb25hbCB0byB0aGlzIHN0YXRpYyBicmFuY2gsIHdlJ2xsIGhhdmUgdG8gYWxsb3cgbW9kdWxlcyB0aGF0IGRvZXNcXG4gMzMxOlxcdCAqIGttZW1fY2FjaGVfYWxsb2MgYW5kIHRoZSBzdWNoIHRvIHNlZSB0aGlzIHN5bWJvbCBhcyB3ZWxsXFxuIDMzMjpcXHQgKi9cXG4gMzMzOlxcdERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG1lbWNnX2ttZW1fb25saW5lX2tleSk7XFxuIDMzNDpcXHRFWFBPUlRfU1lNQk9MKG1lbWNnX2ttZW1fb25saW5lX2tleSk7XFxuIDMzNTpcXHRcXG4gMzM2OlxcdERFRklORV9TVEFUSUNfS0VZX0ZBTFNFKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XFxuIDMzNzpcXHRFWFBPUlRfU1lNQk9MKG1lbWNnX2JwZl9lbmFibGVkX2tleSk7XFxuIDMzODpcXHRcXG4gMzM5OlxcdC8qKlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OTowNC44NjM5Njg1NzNaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozNzUwMDcxMjU3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkludmVzdGlnYXRpbmcgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgQ2FsbGVycyoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW50byB0aGlzLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiV2hlcmUgZXhhY3RseSBpcyBgbWVtY2dfcmVwYXJlbnRfb2JqY2dzYCBiZWluZyBpbnZva2VkP1wiIFVuZGVyc3RhbmRpbmcgdGhlIGNhbGwgc2l0ZXMgaXMgYWJzb2x1dGVseSBjcnVjaWFsIGJlZm9yZSBJIGNhbiBldmVuIGJlZ2luIHRvIGFzc2VzcyBpdHMgcHVycG9zZSwgcG90ZW50aWFsIGltcGFjdCwgb3IgYW55IHJlbGF0ZWQgaXNzdWVzLiBLbm93aW5nIHRoZSBjb250ZXh0IG9mIGl0cyBleGVjdXRpb24gaXMgcGFyYW1vdW50LiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byBidWlsZCBhIG1lbnRhbCBtb2RlbCBvZiB3aGVuIGFuZCB3aHkgdGhpcyBmdW5jdGlvbiBpcyBiZWluZyBjYWxsZWQuIEknbGwgbmVlZCB0byBpZGVudGlmeSB0aGUgdHJpZ2dlcmluZyBldmVudHMgYW5kIHVuZGVyc3RhbmQgdGhlIHNwZWNpZmljIHNjZW5hcmlvcyBpdCdzIGRlc2lnbmVkIHRvIGhhbmRsZS4gQSBxdWljayBncmVwIG1pZ2h0IGdpdmUgbWUgYSBsaXN0LCBidXQgSSB3aWxsIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGlzIGJlaW5nIGRvbmUgaW4gdGhlIGNvZGUsIGFuZCBob3cgdGhhdCByZWxhdGVzIHRvIHRoaXMgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc2ODEsIk91dHB1dFRva2VucyI6MzAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjA4LjYxNDA0Mzc0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU4MzA1MDExLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbWNnX3JlcGFyZW50X29iamNnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTE5Nj1zdGF0aWMgc3RydWN0IG9ial9jZ3JvdXAgKm9ial9jZ3JvdXBfYWxsb2Modm9pZClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yMTQtXFxubW0vbWVtY29udHJvbC5jOjIxNTpzdGF0aWMgaW5saW5lIHN0cnVjdCBvYmpfY2dyb3VwICpfX21lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxubW0vbWVtY29udHJvbC5jLTIxNi1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0yODY9c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3VubG9ja3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgbmlkKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTI5Mi1cXG5tbS9tZW1jb250cm9sLmM6MjkzOnN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxubW0vbWVtY29udHJvbC5jLTI5NC17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMzE2LVxcbm1tL21lbWNvbnRyb2wuYzozMTc6XFx0XFx0b2JqY2cgPSBfX21lbWNnX3JlcGFyZW50X29iamNncyhtZW1jZywgcGFyZW50LCBuaWQpO1xcbm1tL21lbWNvbnRyb2wuYy0zMTgtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDM1Nj1zdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19vZmZsaW5lKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDM3Mi1cXHQgKi9cXG5tbS9tZW1jb250cm9sLmM6NDM3MzpcXHRtZW1jZ19yZXBhcmVudF9vYmpjZ3MobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYy00Mzc0LVxcdHJlcGFyZW50X3Nocmlua2VyX2RlZmVycmVkKG1lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01NDAyPXZvaWQgX19tZW1fY2dyb3VwX3VuY2hhcmdlX2ZvbGlvcyhzdHJ1Y3QgZm9saW9fYmF0Y2ggKmZvbGlvcylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01NDE2LSAqXFxubW0vbWVtY29udHJvbC5jOjU0MTc6ICogbWVtY2dfcmVwYXJlbnRfb2JqY2dzKCkgcmVwYXJlbnRzIGEgZHlpbmcgY2dyb3VwIG9uZSBub2RlIGF0IGEgdGltZTogdGhlXFxubW0vbWVtY29udHJvbC5jLTU0MTgtICogZm9saW9zIG9uIHRoYXQgbm9kZSdzIExSVSBsaXN0cyBtb3ZlIHRvIHRoZSBwYXJlbnQgYW5kIHRoYXQgbm9kZSdzIG9iamNnIGlzXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjA4LjY3MjM1MzY5MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjIyMDMzNjY0NzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29udHJvbCBmbG93LCBzcGVjaWZpY2FsbHkgdGhlIGNvbnRleHRzIGluIHdoaWNoIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBhbmQgYGdldF9ub25fZHlpbmdfbWVtY2dfZW5kYCBhcmUgYmVpbmcgY2FsbGVkIHdpdGhpbiBgbW0vbWVtY29udHJvbC5jYC4gSSBuZWVkIHRvIHRyYWNrIHRob3NlIGNhbGxzIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBiZWluZyB1c2VkLCB3aGF0IGFzc3VtcHRpb25zIGFyZSBiZWluZyBtYWRlLCBhbmQgd2hhdCBzdGF0ZSB0aGV5IGRlcGVuZCBvbi4gVGhpcyBpcyBsaWtlbHkgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgY2dyb3VwIGxpZmVjeWNsZXMgYW5kIHRyYW5zaXRpb25zLiBJIHN1c3BlY3QgdGhpcyB3aWxsIGJlIGluc3RydW1lbnRhbCBmb3IgdW5kZXJzdGFuZGluZyBpc3N1ZXMgcmVsYXRlZCB0byBtZW1vcnkgY2dyb3VwIGRlYXRoIGhhbmRsaW5nLCByZXNvdXJjZSBtYW5hZ2VtZW50IG9yIGV2ZW4gYWNjb3VudGluZyBkdXJpbmcgdmFyaW91cyBzdGF0ZXMgb2YgdGhlIGNncm91cCBoaWVyYXJjaHkuIEtub3dpbmcgdGhlaXIgY2FsbGVycyB3aWxsIGFsbG93IG1lIHRvIGFzc2VzcyB0aGUgaW1wYWN0IG9mIHRoZXNlIGNhbGxzIGluIHJlbGF0aW9uIHRvIHJlc291cmNlIGxpbWl0YXRpb25zIGFuZCB0aGUgZGVhdGggc3RhdGUgb2YgbWVtb3J5IGNncm91cHMsIHdoaWNoIGNvdWxkIGV4cG9zZSByYWNlIGNvbmRpdGlvbnMgb3IgcG90ZW50aWFsIGRlYWRsb2Nrcy4gVWx0aW1hdGVseSwgaWRlbnRpZnlpbmcgdGhlIGNhbGxpbmcgcG9pbnRzIHdpbGwgY2xhcmlmeSBob3cgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIGFuZCBgZ2V0X25vbl9keWluZ19tZW1jZ19lbmRgIGNvbnRyaWJ1dGUgdG8gdGhlIG92ZXJhbGwgbWVtb3J5IG1hbmFnZW1lbnQgc3RyYXRlZ3kgd2l0aGluIHRoZSBrZXJuZWwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0MDcsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OToxMC44NzU3MjQyNjZaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUzNzU3NTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImdldF9ub25fZHlpbmdfbWVtY2dfXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tZW1jb250cm9sLmM9ODY3PXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxcbm1tL21lbWNvbnRyb2wuYzo4Njg6Z2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKnJjdV9sb2NrZWQpXFxubW0vbWVtY29udHJvbC5jLTg2OS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtODg5LVxcbm1tL21lbWNvbnRyb2wuYzo4OTA6c3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcXG5tbS9tZW1jb250cm9sLmMtODkxLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz05MjQ9dm9pZCBtb2RfbWVtY2dfc3RhdGUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBlbnVtIG1lbWNnX3N0YXRfaXRlbSBpZHgsXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtOTMxLVxcbm1tL21lbWNvbnRyb2wuYzo5MzI6XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTkzMy1cXHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbm1tL21lbWNvbnRyb2wuYzo5MzQ6XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxubW0vbWVtY29udHJvbC5jLTkzNS19XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9OTkwPXN0YXRpYyB2b2lkIG1vZF9tZW1jZ19scnV2ZWNfc3RhdGUoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk5OS1cXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xcbm1tL21lbWNvbnRyb2wuYzoxMDAwOlxcdG1lbWNnID0gZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChwbi1cXHUwMDNlbWVtY2csIFxcdTAwMjZyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtMTAwMS1cXHRwbiA9IG1lbWNnLVxcdTAwM2Vub2RlaW5mb1twZ2RhdC1cXHUwMDNlbm9kZV9pZF07XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTAwNC1cXG5tbS9tZW1jb250cm9sLmM6MTAwNTpcXHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcXG5tbS9tZW1jb250cm9sLmMtMTAwNi19XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjEwLjkyOTUxMzYwN1oiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTkyNzYzMzk1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIE1FTUNHIEtjb25maWcgRGVwZW5kZW5jaWVzKipcblxuQWxyaWdodCwgdGltZSB0byBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIG5haWwgZG93biB0aGUgS2NvbmZpZyBvcHRpb25zIHRoYXQgYXJlICphYnNvbHV0ZWx5KiBlc3NlbnRpYWwgZm9yIE1FTUNHIHRvIGZ1bmN0aW9uLiBObyBzaG9ydGN1dHMgaGVyZTsgYSBwcm9wZXIgZGVwZW5kZW5jeSBhbmFseXNpcyBpcyBjcml0aWNhbC4gVGhlIGZpcnN0IHRoaW5nIEknbGwgZG8gaXMgemVybyBpbiBvbiB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlcy4gTXkgaW5zdGluY3QgaXMgdGhhdCB0aGUgcHJpbWFyeSBkZWZpbml0aW9ucyB3aWxsIHJlc2lkZSBpbiBlaXRoZXIgYGluaXQvS2NvbmZpZ2Ag4oCTIGdpdmVuIGl0cyByb2xlIGluIHN5c3RlbSBpbml0aWFsaXphdGlvbiBhbmQgbW9kdWxlIGxvYWRpbmcg4oCTIG9yLCBtb3JlIGxpa2VseSwgYG1tL0tjb25maWdgLCBhcyBNRU1DRyBpcyBmdW5kYW1lbnRhbGx5IG1lbW9yeSBtYW5hZ2VtZW50LWNlbnRyaWMuIEknbGwgbmVlZCB0byB1c2UgYGdyZXBgIHRvIHF1aWNrbHkgc2VhcmNoIHRoZSByaWdodCBmaWxlcy4gVGhhdCdsbCBiZSB0aGUgZmFzdGVzdCBwYXRoIHRvIHVuY292ZXIgYW55IGltcGxpY2l0IG9yIGV4cGxpY2l0IGRlcGVuZGVuY2llcy5cblxuXG4iLCJJbnB1dFRva2VucyI6OTIxMCwiT3V0cHV0VG9rZW5zIjoyNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjEzLjUyMjI4MDM0MloiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU5MTE5ODMsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDc1PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwODQtXFxuaW5pdC9LY29uZmlnOjEwODU6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwODYtXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTA3LVxcbmluaXQvS2NvbmZpZzoxMTA4OmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTA5LVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjEzLjU2ODE5NzE2NFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTM5ODA0NDUxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRXhhbWluaW5nIE1FTUNHIERlcGVuZGVuY2llcyBpbiBgaW5pdC9LY29uZmlnYCoqXG5cbk9rYXksIHNvIEkgbmVlZCB0byBxdWlja2x5IHJlZnJlc2ggbXkgbWVtb3J5IG9uIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoZSBgTUVNQ0dgIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBMZXQncyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGBpbml0L0tjb25maWdgLiBMaW5lIDEwODUgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgcGxhY2UgdG8gYmVnaW4gdGhlIGludmVzdGlnYXRpb24uIEhvcGVmdWxseSwgdGhlIHJlbGV2YW50IHJlbGF0aW9uc2hpcHMgYXJlIGNsZWFybHkgZGVmaW5lZCBhcm91bmQgdGhhdCBzcG90LiBJJ20gZXhwZWN0aW5nIHRvIGZpbmQgdGhlIHN0YW5kYXJkIGBkZXBlbmRzIG9uYCBjbGF1c2VzLCBwb3NzaWJseSBzb21lIGBzZWxlY3RgIHN0YXRlbWVudHMsIGFuZCBpZGVhbGx5LCBzb21lIGNvbmNpc2UgY29tbWVudHMgdGhhdCBvdXRsaW5lIHRoZSB1bmRlcmx5aW5nIGxvZ2ljLiBLbm93aW5nIHRoZSBkZXBlbmRlbmNpZXMgaXMgY3J1Y2lhbCBmb3IgdW5kZXJzdGFuZGluZyBob3cgYE1FTUNHYCBpbnRlcmFjdHMgd2l0aCB0aGUgcmVzdCBvZiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBob3cgaXQgbWlnaHQgaW1wYWN0IHRoZSBzeXN0ZW0gYnVpbGQgYXMgYSB3aG9sZS4gSSBuZWVkIHRvIHF1aWNrbHkgZ2V0IGEgZ29vZCBvdmVydmlldyBvZiB0aGUgcmVsZXZhbnQgcHJlcmVxdWlzaXRlcywgYW55IHBvdGVudGlhbCBjb25mbGljdHMsIGFuZCBhbnkgaW1wbGllZCBjb25maWd1cmF0aW9ucy4gVGltZSB0byBkaWcgaW4hXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk2NjksIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OToxNi4xMDgwMTI4NDVaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQzOTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImluaXQvS2NvbmZpZ1wiLFxuICBcIkZpcnN0TGluZVwiOiAxMDgwLFxuICBcIkxpbmVDb3VudFwiOiAzNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIxMDgwOlxcdFxcdCAgYXMgdGFzayBtaWdyYXRpb25zIGFuZCBjb250cm9sbGVyIG9uL29mZnMgYXQgdGhlIGNvc3Qgb2YgbWFraW5nXFxuMTA4MTpcXHRcXHQgIGhvdCBwYXRoIG9wZXJhdGlvbnMgc3VjaCBhcyBmb3JrcyBhbmQgZXhpdHMgbW9yZSBleHBlbnNpdmUuXFxuMTA4MjpcXHRcXG4xMDgzOlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwODQ6XFx0XFxuMTA4NTpcXHRjb25maWcgTUVNQ0dcXG4xMDg2OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODc6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODg6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDg5OlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDkwOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwOTE6XFx0XFx0aGVscFxcbjEwOTI6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA5MzpcXHRcXG4xMDk0OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5OTpcXHRcXHRkZWZhdWx0IHlcXG4xMTAwOlxcdFxcbjExMDE6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTEwMjpcXHRcXHRib29sXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTEwNTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMTA2OlxcdFxcdGRlZmF1bHQgeVxcbjExMDc6XFx0XFxuMTEwODpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTA5OlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTExMDpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTExMTpcXHRcXHRkZWZhdWx0IG5cXG4xMTEyOlxcdFxcdGhlbHBcXG4xMTEzOlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTExNDpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjE2LjEwODY2MjI1NVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjg2Mjg4MjMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKkludmVzdGlnYXRpbmcgdGhlIEJ1aWxkIFByb2Nlc3MgZm9yIE1lbW9yeSBNYW5hZ2VtZW50IENvbXBvbmVudHMqKlxuXG5BbHJpZ2h0LCBiZWZvcmUgSSBkaXZlIGludG8gdGhlIGNvZGUgaXRzZWxmLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgYG1lbWNvbnRyb2wuY2AgYW5kIGB3b3JraW5nc2V0LmNgIGFyZSBiZWluZyBjb21waWxlZCBhbmQgbGlua2VkLiBHaXZlbiBteSBleHBlcmllbmNlLCB0aGUgYG1tL2AgZGlyZWN0b3J5IGlzIHRoZSBsaWtlbHkgcGxhY2UgZm9yIHRoZSByZWxldmFudCBNYWtlZmlsZXMuIEknbGwgbmVlZCB0byBjaGVjayB0aGUgYG1tL01ha2VmaWxlYCBkaXJlY3RseS4gVGhhdCdzIHdoZXJlIHRoZSBydWxlcyBmb3IgdGhvc2Ugc3BlY2lmaWMgc291cmNlIGZpbGVzIGFuZCB0aGVpciB0YXJnZXRzIHdpbGwgYmUgZGVmaW5lZCwgYW5kIEknbGwgYmUgYWJsZSB0byB0cmFjZSBkZXBlbmRlbmNpZXMgYW5kIHVuZGVyc3RhbmQgYW55IGN1c3RvbSBidWlsZCBmbGFncyBiZWluZyB1c2VkLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHNvbGlkIGZvdW5kYXRpb24gZm9yIGV2YWx1YXRpbmcgaG93IHRoZXNlIG1lbW9yeSBtYW5hZ2VtZW50IGNvbXBvbmVudHMgaW50ZXJhY3Qgd2l0aCB0aGUga2VybmVsIGJ1aWxkIHN5c3RlbSBhbmQsIHVsdGltYXRlbHksIHdoYXQgdGhlIGNvbXBpbGVkIG91dHB1dHMgbG9vayBsaWtlLiBMZXQncyBzZWUgd2hhdCdzIGluIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMDQxMSwiT3V0cHV0VG9rZW5zIjoyOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6NDk6MTguMzk0OTU0Njg3WiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDYxNDIyNzIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVtY29udHJvbHx3b3JraW5nc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL01ha2VmaWxlXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL01ha2VmaWxlPTI3PUtDT1ZfSU5TVFJVTUVOVF9rbWVtbGVhay5vIDo9IG5cXG5tbS9NYWtlZmlsZToyODpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC5vIDo9IG5cXG5tbS9NYWtlZmlsZToyOTpLQ09WX0lOU1RSVU1FTlRfbWVtY29udHJvbC12MS5vIDo9IG5cXG5tbS9NYWtlZmlsZS0zMC1LQ09WX0lOU1RSVU1FTlRfbW16b25lLm8gOj0gblxcbi0tXFxubW0vTWFrZWZpbGU9NTE9b2JqLXlcXHRcXHRcXHQ6PSBmaWxlbWFwLm8gbWVtcG9vbC5vIG9vbV9raWxsLm8gZmFkdmlzZS5vIFxcXFxcXG4tLVxcbm1tL01ha2VmaWxlLTU2LVxcdFxcdFxcdCAgIGNvbXBhY3Rpb24ubyBzaG93X21lbS5vIFxcXFxcXG5tbS9NYWtlZmlsZTo1NzpcXHRcXHRcXHQgICBpbnRlcnZhbF90cmVlLm8gbGlzdF9scnUubyB3b3JraW5nc2V0Lm8gXFxcXFxcbm1tL01ha2VmaWxlLTU4LVxcdFxcdFxcdCAgIGRlYnVnLm8gZ3VwLm8gbW1hcF9sb2NrLm8gdm1hX2luaXQubyAkKG1tdS15KVxcbi0tXFxubW0vTWFrZWZpbGU9MTAzPW9iai0kKENPTkZJR19MSVZFVVBEQVRFX01FTUZEKSArPSBtZW1mZF9sdW8ub1xcbm1tL01ha2VmaWxlOjEwNDpvYmotJChDT05GSUdfTUVNQ0dfVjEpICs9IG1lbWNvbnRyb2wtdjEub1xcbm1tL01ha2VmaWxlOjEwNTpvYmotJChDT05GSUdfTUVNQ0cpICs9IG1lbWNvbnRyb2wubyB2bXByZXNzdXJlLm9cXG5tbS9NYWtlZmlsZS0xMDYtaWZkZWYgQ09ORklHX0JQRl9TWVNDQUxMXFxubW0vTWFrZWZpbGU6MTA3Om9iai0kKENPTkZJR19NRU1DRykgKz0gYnBmX21lbWNvbnRyb2wub1xcbm1tL01ha2VmaWxlLTEwOC1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OToxOC45NDExMDIzOFoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo2Mzg1MjMxNDY0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBNZW1jZyBDb2RlIGZvciBPcHRpbWl6YXRpb24qKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIEZpcnN0LCBJIHNlZSB0aGF0IGVuYWJsaW5nIGBDT05GSUdfTUVNQ0dgIGNvbXBpbGVzIGBtZW1jb250cm9sLm9gLCBhbmQgYHdvcmtpbmdzZXQub2AgaXMgYWx3YXlzIGJ1aWx0LiBTaW5jZSB0aGUgY29kZSBpbnRlcmFjdHMgd2l0aCBib3RoIHYxIGFuZCB2MiBtZW1jZ3MsIGBDT05GSUdfTUVNQ0dfVjFgIG1pZ2h0IGJlIHJlbGV2YW50LCBidXQgYE1FTUNHYCBpcyB0aGUgcHJpbWFyeSBjb25maWd1cmF0aW9uLiBJJ2xsIGluY2x1ZGUgYE1FTUNHYCBhcyB0aGUgY29yZSBjb25jZXJuLlxuXG5Ob3csIGxldCdzIGlkZW50aWZ5IHRoZSBrZXkgZnVuY3Rpb25zIHRvIGZvY3VzIG9uLiBIZXJlJ3Mgd2hhdCBJJ3ZlIG5vdGVkOlxuXG4qICAgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgKGluIGBtZW1jb250cm9sLmNgLCBub24tc3RhdGljKSAtIHRoaXMgaXMgdGhlIG5ld2x5IHVuLWlmZGVmJ2QgZnVuY3Rpb24gYW5kIG1pZ2h0IGJlIHNpZ25pZmljYW50LlxuKiAgIGByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxgIChzdGF0aWMgaW4gYG1lbWNvbnRyb2wuY2ApXG4qICAgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoc3RhdGljIGluIGBtZW1jb250cm9sLmNgKVxuKiAgIGBtZW1jZ19yZXBhcmVudF9vYmpjZ3NgIChjYWxscyBgcmVwYXJlbnRfc3RhdGVfbG9jYWxgIGR1cmluZyBgbWVtX2Nncm91cF9jc3Nfb2ZmbGluZWApIC0gdGhpcyBzb3VuZHMgbGlrZSBpdCdzIGhhbmRsaW5nIHRoZSByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uLCB3aGljaCBjb3VsZCBiZSBhbiBpbXBvcnRhbnQgb3BlcmF0aW9uIHRvIG9wdGltaXplLlxuKiAgIGBjb3VudF9zaGFkb3dfbm9kZXNgIChpbiBgd29ya2luZ3NldC5jYCkgLSB0aGlzIGlzIHRoZSBzaHJpbmtlciBjb3VudCBjYWxsYmFjayBmb3Igd29ya2luZ3NldCBzaGFkb3cgbm9kZXMuXG4qICAgYGdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnRgIChzdGF0aWMgaW5saW5lIGluIGBtZW1jb250cm9sLmNgKSAtIHdoaWNoIGlzIGNhbGxlZCBieSBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgLlxuXG5JJ20gcGFydGljdWxhcmx5IGludGVyZXN0ZWQgaW4gd2hldGhlciBgbW9kX21lbWNnX3N0YXRlYCBhbmQgYG1vZF9tZW1jZ19scnV2ZWNfc3RhdGVgIGFyZSBpbiB0aGUgY3JpdGljYWwgcGF0aCBvciBzcGVjaWZpYyB0byBjZXJ0YWluIGZlYXR1cmVzLiBJdCBsb29rcyBsaWtlIHRoZXkgYXJlIG1lbWNnIHN0YXQgbW9kaWZpZXJzLiBBbmQgYGNvdW50X3NoYWRvd19ub2Rlc2AgaXMgdGhlIHNocmlua2VyIGNvdW50IGNhbGxiYWNrIGZvciB3b3JraW5nc2V0IHNoYWRvdyBub2Rlcy4gYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAgaXMgdGhlIG5ldyBmdW5jdGlvbi4gRmluYWxseSwgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgaXMgd2hhdCBhY3R1YWxseSBkb2VzIHRoZSByZXBhcmVudGluZyBkdXJpbmcgY2dyb3VwIGRlc3RydWN0aW9uLlxuXG5OZXh0IHN0ZXA6IGxldCdzIGRpdmUgaW50byB0aGUgY2FsbGVycyBhbmQgZGVmaW5pdGlvbiBvZiBgY291bnRfc2hhZG93X25vZGVzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTEwMDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6NDk6MjUuMzI2MzM2MTY0WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2Mzg3MjI0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb3VudF9zaGFkb3dfbm9kZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vd29ya2luZ3NldC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3dvcmtpbmdzZXQuYz02MjQ9dm9pZCB3b3JraW5nc2V0X3VwZGF0ZV9ub2RlKHN0cnVjdCB4YV9ub2RlICpub2RlKVxcbi0tXFxubW0vd29ya2luZ3NldC5jLTY1MC1cXG5tbS93b3JraW5nc2V0LmM6NjUxOnN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxcbm1tL3dvcmtpbmdzZXQuYy02NTItXFx0XFx0XFx0XFx0XFx0c3RydWN0IHNocmlua19jb250cm9sICpzYylcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz03OTI9c3RhdGljIGludCBfX2luaXQgd29ya2luZ3NldF9pbml0KHZvaWQpXFxuLS1cXG5tbS93b3JraW5nc2V0LmMtODI4LVxcbm1tL3dvcmtpbmdzZXQuYzo4Mjk6XFx0d29ya2luZ3NldF9zaGFkb3dfc2hyaW5rZXItXFx1MDAzZWNvdW50X29iamVjdHMgPSBjb3VudF9zaGFkb3dfbm9kZXM7XFxubW0vd29ya2luZ3NldC5jLTgzMC1cXHR3b3JraW5nc2V0X3NoYWRvd19zaHJpbmtlci1cXHUwMDNlc2Nhbl9vYmplY3RzID0gc2Nhbl9zaGFkb3dfbm9kZXM7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjI1LjM5MDIxNTM0M1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzMyOTg4Mjg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVmVyZGljdDogQ29uZmlybWVkKipcblxuT2theSwgc28gSSd2ZSBiZWVuIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQsIGJhc2VkIG9uIG15IGFuYWx5c2lzLCBpdCBsb29rcyBsaWtlIGEgZ28gZm9yIGZ1enppbmcuIEhlcmUncyB0aGUgYnJlYWtkb3duOiBJIHNlZSB0aGF0IGBjb3VudF9zaGFkb3dfbm9kZXNgIGlzIGJlaW5nIGRpcmVjdGx5IHR3ZWFrZWQgaW4gYG1tL3dvcmtpbmdzZXQuY2AsIGFuZCBJJ3ZlIGFsc28gaWRlbnRpZmllZCBzZXZlcmFsIHJlbGF0ZWQgZnVuY3Rpb25zIGluIGBtbS9tZW1jb250cm9sLmNgOiBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCwgYHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbGAgKHdoaWNoLCBieSB0aGUgd2F5LCBpcyBtYXJrZWQgc3RhdGljKSwgYHJlcGFyZW50X3N0YXRlX2xvY2FsYCAoYWxzbyBzdGF0aWMgaW5saW5lKSwgYG1lbWNnX3JlcGFyZW50X29iamNnc2AgKGFub3RoZXIgc3RhdGljIG9uZSEpLCBhbmQgYG1lbV9jZ3JvdXBfY3NzX29mZmxpbmVgLCB3aGljaCBpcyB0aGUgQ1NTIGNhbGxiYWNrIGZvciBjZ3JvdXAgZGVzdHJ1Y3Rpb24uIFBsdXMsIHRoZSBjcml0aWNhbCBzeW1ib2wsIGBjb3VudF9zaGFkb3dfbm9kZXNgLCBpcyBsaXN0ZWQgYXMgYmVpbmcgZGlyZWN0bHkgcmVsZXZhbnQuXG5cbkkndmUgYWxyZWFkeSBjb25maXJtZWQgdGhlIHByZS1yZXF1aXNpdGVzOiBgV29ydGhGdXp6aW5nYCBpcyBzZXQgdG8gdHJ1ZSwgYW5kIGBFbmFibGVDb25maWdzYCBpbmNsdWRlcyBgTUVNQ0dgLiBNeSBmb2N1cyBzeW1ib2xzIGFyZSBzcG90IG9uOiBgY291bnRfc2hhZG93X25vZGVzYCwgYHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbGAsIGByZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxgLCBhbmQgYG1lbWNnX3JlcGFyZW50X29iamNnc2Agd2hpY2ggYWxpZ25zIHdpdGggdGhlIG9ic2VydmVkIG1vZGlmaWNhdGlvbnMuXG5cblRoZSByZWFzb25pbmcgaGVyZSBpcyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLiBUaGlzIHBhdGNoIGlzIG1vZGlmeWluZyBtZW1vcnkgY2dyb3VwIHJlcGFyZW50aW5nLCBzcGVjaWZpY2FsbHkgZm9yIGNncm91cCB2MidzIG5vbi1oaWVyYXJjaGljYWwgTFJVIHZlY3RvciBzdGF0aXN0aWNzLiBJdCdzIGFsc28gbWFraW5nIGFkanVzdG1lbnRzIHRvIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCB0byBoYW5kbGUgZHlpbmcgY2dyb3VwcyBhY3Jvc3MgaGllcmFyY2hpZXMuIFBsdXMsIGl0J3MgdXBkYXRpbmcgc2hhZG93IG5vZGUgY291bnRpbmcgaW4gYHdvcmtpbmdzZXQuY2AgdG8gdXNlIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAuIFRoZXNlIGFyZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBjZ3JvdXAgdGVhcmRvd24vcmVwYXJlbnRpbmcgY2hhbmdlcywgYW5kIGFsbCBvZiB0aGVzZSBhcmUgcmVhY2hhYmxlIHRocm91Z2ggc3RhbmRhcmQgdXNlcnNwYWNlIG9wZXJhdGlvbnM6IGNncm91cCBsaWZlY3ljbGUgbWFuYWdlbWVudCwgbWVtb3J5IGFsbG9jYXRpb24gcmVxdWVzdHMsIGFuZCB0aGUgbWVtb3J5IHJlY2xhaW0vc2hyaW5rZXIgbWVjaGFuaXNtcy4gVGhlc2UgbW9kaWZpY2F0aW9ucyB0b3VjaCBjcnVjaWFsIHBhcnRzIG9mIHRoZSBrZXJuZWwsIGFuZCB0aGUgZnVuY3Rpb25hbGl0eSBpcyBicm9hZGx5IGFjY2Vzc2libGUuIEkgYW0gcmVhc29uYWJseSBjZXJ0YWluIHRoYXQgdGhpcyBpcyBhbiBhcmVhIHRoYXQgd2FycmFudHMgZnV6emluZy4gQWxsIGNoZWNrcyBvdXQsIGFuZCBJJ20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMjE1OSwiT3V0cHV0VG9rZW5zIjoxNjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNTAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6NDk6MjkuNzIzMjA2MDg4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTA2NTU5MzUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxcIixcbiAgICBcIm1lbWNnX3JlcGFyZW50X29iamNnc1wiLFxuICAgIFwiY291bnRfc2hhZG93X25vZGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwicmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF92Ml9scnV2ZWNfc3RhdGVfbG9jYWxcIixcbiAgICBcIm1lbWNnX3JlcGFyZW50X29iamNnc1wiLFxuICAgIFwiY291bnRfc2hhZG93X25vZGVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSBpbiBtbS9tZW1jb250cm9sLmMgYW5kIG1tL3dvcmtpbmdzZXQuYyB0byByZXBhcmVudCBub24taGllcmFyY2hpY2FsIGxydXZlYyBzdGF0aXN0aWNzIG9uIGNncm91cCB2MiBkdXJpbmcgY2dyb3VwIG9mZmxpbmluZywgYWRqdXN0cyBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0IGFjcm9zcyBoaWVyYXJjaGllcywgYW5kIGFsdGVycyBob3cgY291bnRfc2hhZG93X25vZGVzIGNvbXB1dGVzIGxvY2FsIHBhZ2Ugc3RhdGVzLiBUaGlzIG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIG1tIGFuZCBjZ3JvdXAgbGlmZWN5Y2xlIGxvZ2ljLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OToyOS44MTM4ODI3NjNaIiwiU2VxIjoyMSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjcwOTUyNTkwNTEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wOFQwNDo0OToyOS44MTQ0NzgxMjNaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo3MDk0NjU5NjAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBtZW1vcnkgY2dyb3VwIHN0YXRpc3RpY3MgYWNjb3VudGluZyBhbmQgc2hhZG93IG5vZGUgY2FsY3VsYXRpb24gaW4gbW0vd29ya2luZ3NldC5jIGFuZCBtbS9tZW1jb250cm9sLmMuIFNwZWNpZmljYWxseSwgaXQgZW5zdXJlcyBub24taGllcmFyY2hpY2FsIExSVSBhbmQgc2xhYiBzdGF0aXN0aWNzIGFyZSBwcm9wZXJseSByZXBhcmVudGVkIHRvIHBhcmVudCBjZ3JvdXBzIG9uIGNncm91cCB2MiBkdXJpbmcgbWVtY2cgb2ZmbGluaW5nIHRvIGF2b2lkIHVuZGVyZmxvd3MgaW4gc2hhZG93IG5vZGUgYWNjb3VudGluZy5cXG5cXG4tIE5vIG1lbW9yeSBhbGxvY2F0aW9ucyAoc3RhY2sgb3IgaGVhcCBidWZmZXJzKSBhcmUgaW50cm9kdWNlZCBvciBsZWZ0IHVuaW5pdGlhbGl6ZWQuXFxuLSBObyBkYXRhIGlzIGNvcGllZCB0byB1c2VyIHNwYWNlIG9yIGFjcm9zcyBib3VuZGFyaWVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgcGFkZGluZyBvciBmaWVsZHMgY291bGQgbGVhay5cXG4tIFRoZSBwYXRjaCBvcGVyYXRlcyBzb2xlbHkgb24gZXhpc3Rpbmcga2VybmVsIGNvdW50ZXJzIGFuZCBkYXRhIHN0cnVjdHVyZXMgKGBzdHJ1Y3QgbWVtX2Nncm91cGAsIGBzdHJ1Y3QgbHJ1dmVjYCwgbm9kZSBzdGF0cykuXFxuLSBQb3RlbnRpYWwgaXNzdWVzIHN1Y2ggYXMgcmVmY291bnRpbmcsIGxvY2tpbmcvcmFjZXMsIG9yIG1lbW9yeSBtYW5hZ2VtZW50IGJ1Z3Mgd291bGQgYmUgYWRkcmVzc2VkIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBnZW5lcmFsIGtlcm5lbCB0ZXN0aW5nLCBub3QgS01TQU4uXFxuXFxuVGhlcmVmb3JlLCB0aGlzIHBhdGNoIHNlcmllcyBkb2VzIG5vdCBwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzIGFuZCBkb2VzIG5vdCB3YXJyYW50IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJUYXJnZXQgYXJjaGl0ZWN0dXJlOiBhbWQ2NFxuXG5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBiZTYxMjBlYTdmNTkxOTA2Mzc1YTVhMWNiMjc2NjhkMDVlM2ExZDQ1XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgOCAwNDo0ODo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wtdjEuaCBiL21tL21lbWNvbnRyb2wtdjEuaFxuaW5kZXggMWUzOTQyNjljNjEzZC4uMDU3OGI3MDc2NzY0ZCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wtdjEuaFxuKysrIGIvbW0vbWVtY29udHJvbC12MS5oXG5AQCAtMjUsNiArMjUsOSBAQCBpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xuIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX3ByaXZhdGVfaWRfZ2V0X29ubGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRcdFx0ICAgIHVuc2lnbmVkIGludCBuKTtcbiBcbit2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4rXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XG4rXG4gLyogQ2dyb3VwIHYxLXNwZWNpZmljIGRlY2xhcmF0aW9ucyAqL1xuICNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbiBcbkBAIC03Myw4ICs3Niw2IEBAIHZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyXG4gXG4gdm9pZCByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcbi12b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHQgICAgICAgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XG4gXG4gdm9pZCBtZW1jZzFfYWNjb3VudF9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKTtcbiBzdGF0aWMgaW5saW5lIGJvb2wgbWVtY2cxX3RjcG1lbV9hY3RpdmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuZGlmZiAtLWdpdCBhL21tL21lbWNvbnRyb2wuYyBiL21tL21lbWNvbnRyb2wuY1xuaW5kZXggMTI3MWQzOTBiNjE3ZS4uZjEzMDMwZjc1ZmE1NCAxMDA2NDRcbi0tLSBhL21tL21lbWNvbnRyb2wuY1xuKysrIGIvbW0vbWVtY29udHJvbC5jXG5AQCAtMjMyLDE0ICsyMzIsMjkgQEAgc3RhdGljIGlubGluZSBzdHJ1Y3Qgb2JqX2Nncm91cCAqX19tZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNcbiBcdHJldHVybiBvYmpjZztcbiB9XG4gXG4tI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIHN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xuIFxuLXN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4rLypcbisgKiBSZXBhcmVudCB0aGUgbm9uLWhpZXJhcmNoaWNhbCBscnV2ZWMgc3RhdHMgdGhhdCBjb3VudF9zaGFkb3dfbm9kZXMoKSByZWFkc1xuKyAqIHRvIGFwcHJveGltYXRlIHRoZSBzaGFkb3cgbm9kZSBidWRnZXQuICBUaGV5IGFyZSBub3QgZXhwb3NlZCB0byB1c2Vyc3BhY2VcbisgKiBvbiBjZ3JvdXAgdjIsIGJ1dCB0aGV5IG11c3QgZm9sbG93IHRoZSByZXBhcmVudGVkIGZvbGlvczsgb3RoZXJ3aXNlIHRoZVxuKyAqIGFuY2VzdG9yIHdvdWxkIG9ubHkgcmVjZWl2ZSB0aGUgbmVnYXRpdmUgZGVsdGFzIHdoZW4gdGhlIGZvbGlvcyBhcmUgZnJlZWRcbisgKiB3aXRob3V0IGV2ZXIgaGF2aW5nIHJlY2VpdmVkIHRoZSBwb3NpdGl2ZSBiYXNlLCBhbmQgaXRzIGxvY2FsIHN0YXRzIHdvdWxkXG4rICogcGVybWFuZW50bHkgdW5kZXJmbG93LlxuKyAqL1xuK3N0YXRpYyB2b2lkIHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4ge1xuLVx0aWYgKGNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cykpXG4tXHRcdHJldHVybjtcbitcdGludCBpO1xuK1xuK1x0Zm9yIChpID0gMDsgaSBcdTAwM2MgTlJfTFJVX0xJU1RTOyBpKyspXG4rXHRcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBOUl9MUlVfQkFTRSArIGkpO1xuK1xuK1x0cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQik7XG4rXHRyZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgTlJfU0xBQl9VTlJFQ0xBSU1BQkxFX0IpO1xuK31cbiBcbitzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuK3tcbiBcdC8qXG4gXHQgKiBSZXBhcmVudCBzdGF0cyBleHBvc2VkIG5vbi1oaWVyYXJjaGljYWxseS4gRmx1c2ggQG1lbWNnJ3Mgc3RhdHMgZmlyc3RcbiBcdCAqIHRvIHJlYWQgaXRzIHN0YXRzIGFjY3VyYXRlbHkgLCBhbmQgY29uc2VydmF0aXZlbHkgZmx1c2ggQHBhcmVudCdzXG5AQCAtMjQ4LDE3ICsyNjMsMTggQEAgc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JcbiBcdCAqL1xuIFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnLCB0cnVlKTtcbiBcbi1cdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xuLVx0cmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuLVx0cmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbitcdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4rXHRcdHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbitcdH0gZWxzZSB7XG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuK1x0XHQvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi9cbitcdFx0cmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuK1x0XHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xuKyNlbmRpZlxuK1x0fVxuIFxuIFx0X19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHBhcmVudCwgdHJ1ZSk7XG4gfVxuLSNlbHNlXG4tc3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi17XG4tfVxuLSNlbmRpZlxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9sb2NrcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBuaWQpXG4ge1xuQEAgLTU3MCw3ICs1ODYsNiBAQCB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbiBcdHJldHVybiB4O1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gc3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbiBcdFx0XHRcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKTtcbiBcbkBAIC01OTIsNyArNjA3LDYgQEAgdm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuIFx0XHRfX21vZF9tZW1jZ19scnV2ZWNfc3RhdGUocGFyZW50X3BuLCBpZHgsIHZhbHVlKTtcbiBcdH1cbiB9XG4tI2VuZGlmXG4gXG4gLyogU3Vic2V0IG9mIHZtX2V2ZW50X2l0ZW0gdG8gcmVwb3J0IGZvciBtZW1jZyBldmVudCBzdGF0cyAqL1xuIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBpbnQgbWVtY2dfdm1fZXZlbnRfc3RhdFtdID0ge1xuQEAgLTg0NSwxNiArODU5LDIxIEBAIHN0YXRpYyBsb25nIG1lbWNnX3N0YXRlX3ZhbF9pbl9wYWdlcyhpbnQgaWR4LCBsb25nIHZhbClcbiBcdHJldHVybiB2YWwgXHUwMDNjIDAgPyAtcmVzIDogcmVzO1xuIH1cbiBcbi0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gLypcbi0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG4tICogcmVwYXJlbnRpbmcgb2Ygbm9uLWhpZXJhcmNoaWNhbCBzdGF0ZV9sb2NhbHMuXG4rICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2VcbisgKiB3aXRoIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLiAgT2ZmbGluaW5nIGFcbisgKiBtZW1jZyBpcyByYXJlLCBzbyBkbyB0aGUgcmVkaXJlY3Rpb24gZm9yIGFsbCBjZ3JvdXAgaGllcmFyY2hpZXMuXG4gICovXG4tc3RhdGljIGlubGluZSBzdHJ1Y3QgbWVtX2Nncm91cCAqZ2V0X25vbl9keWluZ19tZW1jZ19zdGFydChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tXHRcdFx0XHRcdFx0XHQgICBib29sICpyY3VfbG9ja2VkKVxuK3N0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKlxuK2dldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpyY3VfbG9ja2VkKVxuIHtcbi1cdC8qIFJlYmluZGluZyBjYW4gY2F1c2UgdGhpcyB2YWx1ZSB0byBiZSBjaGFuZ2VkIGF0IHJ1bnRpbWUgKi9cbi1cdGlmIChjZ3JvdXBfc3Vic3lzX29uX2RmbChtZW1vcnlfY2dycF9zdWJzeXMpKSB7XG4rXHQvKlxuK1x0ICogRmFzdCBwYXRoOiB0aGUgY2FsbGVyIGhvbGRzIGEgcmVmZXJlbmNlIHRvIEBtZW1jZywgc28gcmVhZGluZ1xuK1x0ICogaXRzIENTU19EWUlORyBmbGFnIHdpdGhvdXQgdGhlIFJDVSBsb2NrIGlzIHNhZmUuICBUaGUgUkNVIGxvY2tcbitcdCAqIGlzIG9ubHkgbmVlZGVkIHRvIHdhbGsgdXAgdG8gYSBub24tZHlpbmcgYW5jZXN0b3IsIHdoaWNoXG4rXHQgKiBoYXBwZW5zIG9ubHkgd2hpbGUgYSBtZW1jZyBpcyBhY3R1YWxseSBiZWluZyBvZmZsaW5lZC5cbitcdCAqL1xuK1x0aWYgKCFtZW1jZ19pc19keWluZyhtZW1jZykpIHtcbiBcdFx0KnJjdV9sb2NrZWQgPSBmYWxzZTtcbiBcdFx0cmV0dXJuIG1lbWNnO1xuIFx0fVxuQEAgLTg3NSwxNyArODk0LDYgQEAgc3RhdGljIGlubGluZSB2b2lkIGdldF9ub25fZHlpbmdfbWVtY2dfZW5kKGJvb2wgcmN1X2xvY2tlZClcbiBcbiBcdHJjdV9yZWFkX3VubG9jaygpO1xuIH1cbi0jZWxzZVxuLXN0YXRpYyBpbmxpbmUgc3RydWN0IG1lbV9jZ3JvdXAgKmdldF9ub25fZHlpbmdfbWVtY2dfc3RhcnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxuLVx0XHRcdFx0XHRcdFx0ICAgYm9vbCAqcmN1X2xvY2tlZClcbi17XG4tXHRyZXR1cm4gbWVtY2c7XG4tfVxuLVxuLXN0YXRpYyBpbmxpbmUgdm9pZCBnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChib29sIHJjdV9sb2NrZWQpXG4te1xuLX1cbi0jZW5kaWZcbiBcbiBzdGF0aWMgdm9pZCBfX21vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4gXHRcdFx0ICAgICAgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LCBsb25nIHZhbClcbmRpZmYgLS1naXQgYS9tbS93b3JraW5nc2V0LmMgYi9tbS93b3JraW5nc2V0LmNcbmluZGV4IDdhYzJiODhjODBhZTUuLjg0MTJmNDg0MGFlMzUgMTAwNjQ0XG4tLS0gYS9tbS93b3JraW5nc2V0LmNcbisrKyBiL21tL3dvcmtpbmdzZXQuY1xuQEAgLTY4OCwxMCArNjg4LDkgQEAgc3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXG4gXG4gXHRcdG1lbV9jZ3JvdXBfZmx1c2hfc3RhdHNfcmF0ZWxpbWl0ZWQoc2MtXHUwMDNlbWVtY2cpO1xuIFx0XHRscnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhzYy1cdTAwM2VtZW1jZywgTk9ERV9EQVRBKHNjLVx1MDAzZW5pZCkpO1xuLVxuIFx0XHRmb3IgKHBhZ2VzID0gMCwgaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxuLVx0XHRcdHBhZ2VzICs9IGxydXZlY19scnVfc2l6ZShscnV2ZWMsIGksIE1BWF9OUl9aT05FUyAtIDEpO1xuLVxuK1x0XHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYyxcbitcdFx0XHRcdFx0XHRcdCBOUl9MUlVfQkFTRSArIGkpO1xuIFx0XHRwYWdlcyArPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChcbiBcdFx0XHRscnV2ZWMsIE5SX1NMQUJfUkVDTEFJTUFCTEVfQikgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQ7XG4gXHRcdHBhZ2VzICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKFxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDhUMDQ6NDk6MjkuODE0NDc5NzgzWiIsIlNlcSI6MjMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjcwOTQ2MjMyNjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqS01TQU4gRnV6emluZyBBc3Nlc3NtZW50OiBNZW1vcnkgQ2dyb3VwIFN0YXRpc3RpY3MgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkZXRlcm1pbmUgaWYgdGhpcyBwYXRjaCBuZWNlc3NpdGF0ZXMgS01TQU4gZnV6emluZy4gSSd2ZSBnb3QgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYWN0dWFsbHkgY2hhbmdlZCBiZWZvcmUgSSBjYW4gbWFrZSB0aGF0IGNhbGwuXG5cblNvLCBoZXJlJ3Mgd2hhdCB0aGUgcGF0Y2ggaXMgZG9pbmc6IGl0J3Mgc2h1ZmZsaW5nIGRlY2xhcmF0aW9ucyBhcm91bmQsIG1ha2luZyBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCBhdmFpbGFibGUgdW5jb25kaXRpb25hbGx5LiBJdCB0aGVuIGludHJvZHVjZXMgYHJlcGFyZW50X3YyX2xydXZlY19zdGF0ZV9sb2NhbGAsIHdoaWNoIGhhbmRsZXMgcmVwYXJlbnRpbmcgbm9uLWhpZXJhcmNoaWNhbCBscnV2ZWMgc3RhdHMgZm9yIGNncm91cCB2Mi4gYHJlcGFyZW50X3N0YXRlX2xvY2FsYCBub3cgY2FsbHMgdGhpcyBuZXcgZnVuY3Rpb24gb24gY2dyb3VwIHYyLCBvciwgdGhlIGV4aXN0aW5nIHYxIGVxdWl2YWxlbnQuIEFsc28sIGBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0YCBub3cgc3VwcG9ydHMgYWxsIGNncm91cCBoaWVyYXJjaGllcy4gRmluYWxseSwgdGhlcmUncyBhIGNoYW5nZSBpbiBgY291bnRfc2hhZG93X25vZGVzYCB0byB1c2UgYGxydXZlY19wYWdlX3N0YXRlX2xvY2FsYC5cblxuVGhlIGNvcmUgb2YgdGhpcyBpcyBhYm91dCBtZW1vcnkgY2dyb3VwIHN0YXRpc3RpY3MgYW5kIHRoZSB3b3JraW5nc2V0IHNoYWRvdyBub2RlIHNocmlua2VyLiBXaGF0J3MgdGhlIGNvbmNlcm4/IFVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzLCBwb3RlbnRpYWwgbGVha3MgdG8gdXNlcnNwYWNlLCB1bmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMsIG9yIGV2ZW4gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIHJlYWRzLiBMZXQncyBzZWUuLi5cblxuSSBzZWUgdGhhdCBgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsYCBpcyB0cmFuc2ZlcnJpbmcgcGVyLW5vZGUgY291bnRlcnMgYmV0d2VlbiBtZW1jZ3MuIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAgaXMgcmVhZGluZyBwZXItY3B1L3Blci1ub2RlIGNvdW50ZXJzIGZyb20gbHJ1dmVjLiBgY291bnRfc2hhZG93X25vZGVzYCBpcyBwYXJ0IG9mIGEgc2hyaW5rZXIgY2FsbGJhY2sgd2hpY2ggZGVhbHMgd2l0aCB3b3JraW5nc2V0IHNocmlua2luZywgc28gaXQgcmV0dXJucyB0aGUgYHVuc2lnbmVkIGxvbmdgIGNvdW50IG9mIHNoYWRvdyBub2Rlcy5cblxuRnJvbSB3aGF0IEkgY2FuIHRlbGwsIHRoaXMgcGF0Y2ggaXNuJ3QgY3JlYXRpbmcgbmV3IGJ1ZmZlcnMgd2l0aG91dCBpbml0aWFsaXphdGlvbjsgaXQncyBqdXN0IGRlYWxpbmcgd2l0aCBpbnRlZ2VyIGNvdW50ZXJzIG1haW50YWluZWQgYnkgdGhlIG1lbWNnIHN0YXRpc3RpY3MgaW5mcmFzdHJ1Y3R1cmUuIFRoZSBzb3J0cyBvZiBidWdzIEkgd291bGQgZXhwZWN0IGhlcmUgYXJlIGFjY291bnRpbmcgZXJyb3JzLCBwb3RlbnRpYWwgZGVhZGxvY2tzLCByYWNlIGNvbmRpdGlvbnMsIG9yIFVBRi9yZWZjb3VudGluZyBpc3N1ZXMgKGlmIG1lbWNnIGxpZmVjeWNsZSB3YXMgc29tZWhvdyBicm9rZW4pLCBidXQgdGhlc2Ugc2hvdWxkIGJlIHBpY2tlZCB1cCBieSBLQVNBTiwgTE9DS0RFUCwgYW5kIG90aGVyIGV4aXN0aW5nIG1lY2hhbmlzbXMuIEl0IGRvZXNuJ3QgbG9vayBsaWtlIGFueSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcyBvciBzdHJ1Y3QgcGFkZGluZyBhcmUgZXhwb3NlZC5cblxuTm93LCBsZXQncyBnbyBiYWNrIGFuZCBkb3VibGUgY2hlY2sgbXkgS01TQU4gY2hlY2tsaXN0OlxuXG4xLiAgS2VybmVsIGRhdGEgY29waWVkIHRvIHVzZXJzcGFjZT8gTm9wZS4gVGhlIGRhdGEgaXMgZm9ybWF0dGVkIGFzIG51bWJlcnMgaW4gY2dyb3VwIHYyIC8gdjEgc2VxXFxfZmlsZXMgZm9ybWF0cyB1c2luZyBgc25wcmludGYvc2VxX3ByaW50ZmAsIG5vdCByYXcgbWVtb3J5LlxuMi4gIENvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzPyBOb3QgaGVyZS5cbjMuICBBbGxvY2F0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdpdGggdW5pbml0aWFsaXplZCBmaWVsZHM/IE5vIGFsbG9jYXRpb25zIGludHJvZHVjZWQuXG40LiAgQm91bmRzIGNoZWNrcyB0aGF0IGNvdWxkIGxlYWQgdG8gdW5pbml0aWFsaXplZCBieXRlIGFjY2Vzcz8gTm8gYnVmZmVyIGFjY2VzcyBvciBsZW5ndGggY2hhbmdlcyBpbiB0aGUgcGF0Y2guXG5cbkFscmlnaHQsIHdpdGggYWxsIHRoYXQgY29uc2lkZXJlZCwgSSBjYW4gc2F5IHdpdGggY2VydGFpbnR5IHRoYXQgdGhpcyBwYXRjaCBkb2VzICpub3QqIG5lZWQgS01TQU4gZnV6emluZy4gVGhlIGNoYW5nZXMgYXJlIGFsbCBkZWFsaW5nIHdpdGggaW50ZWdlciBzdGF0aXN0aWNzIGFuZCB0aGVyZSBhcmUgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMuIEknbGwgbWFrZSBzdXJlIHRvIG5vdGUgbXkgcmVhc29uaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MzE4LCJPdXRwdXRUb2tlbnMiOjIyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg2OCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTA4VDA0OjQ5OjM2LjkwOTEyMjgxNFoiLCJTZXEiOjI0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEyOTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL3dvcmtpbmdzZXQuYyBhbmQgbW0vbWVtY29udHJvbC5jLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgbm9uLWhpZXJhcmNoaWNhbCBMUlUgYW5kIHNsYWIgc3RhdGlzdGljcyBhcmUgcHJvcGVybHkgcmVwYXJlbnRlZCB0byBwYXJlbnQgY2dyb3VwcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIG1lbWNnIG9mZmxpbmluZyB0byBhdm9pZCB1bmRlcmZsb3dzIGluIHNoYWRvdyBub2RlIGFjY291bnRpbmcuXFxuXFxuLSBObyBtZW1vcnkgYWxsb2NhdGlvbnMgKHN0YWNrIG9yIGhlYXAgYnVmZmVycykgYXJlIGludHJvZHVjZWQgb3IgbGVmdCB1bmluaXRpYWxpemVkLlxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIGNvdWxkIGxlYWsuXFxuLSBUaGUgcGF0Y2ggb3BlcmF0ZXMgc29sZWx5IG9uIGV4aXN0aW5nIGtlcm5lbCBjb3VudGVycyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IG1lbV9jZ3JvdXBgLCBgc3RydWN0IGxydXZlY2AsIG5vZGUgc3RhdHMpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nL3JhY2VzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBidWdzIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZywgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgcG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHNoYWRvdyBub2RlIGNhbGN1bGF0aW9uIGluIG1tL3dvcmtpbmdzZXQuYyBhbmQgbW0vbWVtY29udHJvbC5jLiBTcGVjaWZpY2FsbHksIGl0IGVuc3VyZXMgbm9uLWhpZXJhcmNoaWNhbCBMUlUgYW5kIHNsYWIgc3RhdGlzdGljcyBhcmUgcHJvcGVybHkgcmVwYXJlbnRlZCB0byBwYXJlbnQgY2dyb3VwcyBvbiBjZ3JvdXAgdjIgZHVyaW5nIG1lbWNnIG9mZmxpbmluZyB0byBhdm9pZCB1bmRlcmZsb3dzIGluIHNoYWRvdyBub2RlIGFjY291bnRpbmcuXFxuXFxuLSBObyBtZW1vcnkgYWxsb2NhdGlvbnMgKHN0YWNrIG9yIGhlYXAgYnVmZmVycykgYXJlIGludHJvZHVjZWQgb3IgbGVmdCB1bmluaXRpYWxpemVkLlxcbi0gTm8gZGF0YSBpcyBjb3BpZWQgdG8gdXNlciBzcGFjZSBvciBhY3Jvc3MgYm91bmRhcmllcyB3aGVyZSB1bmluaXRpYWxpemVkIHBhZGRpbmcgb3IgZmllbGRzIGNvdWxkIGxlYWsuXFxuLSBUaGUgcGF0Y2ggb3BlcmF0ZXMgc29sZWx5IG9uIGV4aXN0aW5nIGtlcm5lbCBjb3VudGVycyBhbmQgZGF0YSBzdHJ1Y3R1cmVzIChgc3RydWN0IG1lbV9jZ3JvdXBgLCBgc3RydWN0IGxydXZlY2AsIG5vZGUgc3RhdHMpLlxcbi0gUG90ZW50aWFsIGlzc3VlcyBzdWNoIGFzIHJlZmNvdW50aW5nLCBsb2NraW5nL3JhY2VzLCBvciBtZW1vcnkgbWFuYWdlbWVudCBidWdzIHdvdWxkIGJlIGFkZHJlc3NlZCBieSBLQVNBTiwgTE9DS0RFUCwgb3IgZ2VuZXJhbCBrZXJuZWwgdGVzdGluZywgbm90IEtNU0FOLlxcblxcblRoZXJlZm9yZSwgdGhpcyBwYXRjaCBzZXJpZXMgZG9lcyBub3QgcG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyBhbmQgZG9lcyBub3Qgd2FycmFudCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowrs878[1] Phase: Succeeded StartedAt: 2026-09-08 04:49:48 +0000 UTC FinishedAt: 2026-09-08 04:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-08 04:49:48 +0000 UTC FinishedAt: 2026-09-08 04:49:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2] Phase: Succeeded StartedAt: 2026-09-08 04:49:48 +0000 UTC FinishedAt: 2026-09-08 08:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-08 04:49:48 +0000 UTC FinishedAt: 2026-09-08 08:30:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-08 04:49:48 +0000 UTC FinishedAt: 2026-09-08 04:49:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-08 04:49:48 +0000 UTC FinishedAt: 2026-09-08 04:49:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrs878/series-workflowrs878-convert-artifact-4012971780/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-08 04:49:58 +0000 UTC FinishedAt: 2026-09-08 05:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-08 04:49:58 +0000 UTC FinishedAt: 2026-09-08 05:06:51 +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:*6962f58f-bbfc-4e52-b551-828948ffa57a,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-workflowrs878/series-workflowrs878-convert-artifact-4012971780/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": "3790142c-a8f3-47e8-8272-1783ae8520ae", "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-workflowrs878/series-workflowrs878-build-action-4197768258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-08 04:49:58 +0000 UTC FinishedAt: 2026-09-08 05:06:41 +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:*6962f58f-bbfc-4e52-b551-828948ffa57a,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-workflowrs878/series-workflowrs878-convert-artifact-4012971780/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": "3790142c-a8f3-47e8-8272-1783ae8520ae", "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-workflowrs878/series-workflowrs878-build-action-4197768258/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-08 05:06:51 +0000 UTC FinishedAt: 2026-09-08 05:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-08 05:06:51 +0000 UTC FinishedAt: 2026-09-08 05:06:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-08 05:06:51 +0000 UTC FinishedAt: 2026-09-08 05:07:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-08 05:06:51 +0000 UTC FinishedAt: 2026-09-08 05:06:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowrs878/series-workflowrs878-convert-artifact-3046749827/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-08 05:07:01 +0000 UTC FinishedAt: 2026-09-08 05:09:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-08 05:07:01 +0000 UTC FinishedAt: 2026-09-08 05:08:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3790142c-a8f3-47e8-8272-1783ae8520ae,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-workflowrs878/series-workflowrs878-build-action-4197768258/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-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-08 05:09:00 +0000 UTC FinishedAt: 2026-09-08 05:09:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-08 05:09:00 +0000 UTC FinishedAt: 2026-09-08 05:09:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-08 05:09:00 +0000 UTC FinishedAt: 2026-09-08 05:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-08 05:09:00 +0000 UTC FinishedAt: 2026-09-08 05:25:43 +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:*6962f58f-bbfc-4e52-b551-828948ffa57a,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-workflowrs878/series-workflowrs878-convert-artifact-3046749827/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": "639a82ff-6703-440e-86d5-785ee32db24d", "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-workflowrs878/series-workflowrs878-build-action-3247072567/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-08 05:09:00 +0000 UTC FinishedAt: 2026-09-08 05:25:33 +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:*6962f58f-bbfc-4e52-b551-828948ffa57a,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-workflowrs878/series-workflowrs878-convert-artifact-3046749827/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": "639a82ff-6703-440e-86d5-785ee32db24d", "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-workflowrs878/series-workflowrs878-build-action-3247072567/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-08 05:25:43 +0000 UTC FinishedAt: 2026-09-08 05:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-08 05:25:43 +0000 UTC FinishedAt: 2026-09-08 05:25:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-08 05:25:43 +0000 UTC FinishedAt: 2026-09-08 05:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-08 05:25:43 +0000 UTC FinishedAt: 2026-09-08 05:27:30 +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:*639a82ff-6703-440e-86d5-785ee32db24d,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-workflowrs878/series-workflowrs878-build-action-3247072567/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-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-08 05:27:40 +0000 UTC FinishedAt: 2026-09-08 08:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-08 05:27:40 +0000 UTC FinishedAt: 2026-09-08 08:30:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"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:*3790142c-a8f3-47e8-8272-1783ae8520ae,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*639a82ff-6703-440e-86d5-785ee32db24d,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-workflowrs878/series-workflowrs878-build-action-4197768258/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-workflowrs878/series-workflowrs878-build-action-3247072567/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-08 05:27:40 +0000 UTC FinishedAt: 2026-09-08 05:27:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-08 05:27:40 +0000 UTC FinishedAt: 2026-09-08 05:27:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"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-workflowrs878/series-workflowrs878-convert-artifact-421773468/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-08 05:27:40 +0000 UTC FinishedAt: 2026-09-08 05:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-08 05:27:40 +0000 UTC FinishedAt: 2026-09-08 05:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-08 05:27:40 +0000 UTC FinishedAt: 2026-09-08 05:27:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-08 05:27:51 +0000 UTC FinishedAt: 2026-09-08 08:30:40 +0000 UTC Input: nil Output: nil --------- Name: series-workflowrs878[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["reparent_memcg_lruvec_state_local","reparent_v2_lruvec_state_local","memcg_reparent_objcgs","count_shadow_nodes"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"12e9ac7bc5b254048f886bf421e3a15491106c1f","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG"],"series_id":"18fe9e2e-c9c3-488e-939f-e8fda10262a7","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-08 05:27:51 +0000 UTC FinishedAt: 2026-09-08 08:30:31 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*3790142c-a8f3-47e8-8272-1783ae8520ae,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*639a82ff-6703-440e-86d5-785ee32db24d,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-workflowrs878/series-workflowrs878-build-action-4197768258/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-workflowrs878/series-workflowrs878-build-action-3247072567/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-workflowrs878/series-workflowrs878-convert-artifact-421773468/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,}