Name: series-workflowxrkln Phase: Succeeded StartedAt: 2026-09-02 10:07:41 +0000 UTC FinishedAt: 2026-09-02 14:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[0] Phase: Succeeded StartedAt: 2026-09-02 10:07:41 +0000 UTC FinishedAt: 2026-09-02 10:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[0].run-triage Phase: Succeeded StartedAt: 2026-09-02 10:07:41 +0000 UTC FinishedAt: 2026-09-02 10:39:56 +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": "ead700ca770c82167af32622cf8b68c9f87c3c7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "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": "ead700ca770c82167af32622cf8b68c9f87c3c7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "39d00352-e7ca-4d13-8422-ca4a369e202a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_stat_show", "memcg_page_state_local", "memcg_events_local", "reparent_memcg_state_local", "reparent_memcg1_state_local" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X3N0YXRfc2hvdyYjMzQ7LAogICAgJiMzNDttZW1jZ19wYWdlX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O21lbWNnX2V2ZW50c19sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxuXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzLlxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxuMy4gS0FTQU4gdnMgS01TQU46IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYGxvY2FsYCBpZiBhIGNoZWNrIHdhcyBtaXNzaW5nLCBvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBLTVNBTiBzcGVjaWZpY2FsbHkgZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIG5laXRoZXIgb2Ygd2hpY2ggYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaGVyZS5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSByZW1vdmVzIGxlZ2FjeSB2MS1vbmx5IGxvY2FsIHN0YXRpc3RpY3MgKHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwpIGZyb20gc3RydWN0IG1lbWNnX3Ztc3RhdHMgd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQsIGFuZCBhZGRzIE5VTEwgY2hlY2tzIGR1cmluZyBzdGF0cyBmbHVzaGluZyBhbmQgYWdncmVnYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1jZyBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB3aXRoIGJvdGggY2dyb3VwIHYxIGFuZCB2MiB3b3JrbG9hZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MjliYjNiNWVkNDk4YzIxZGJkZjE1YTViYjRmZjA1NWFjMmZhMjFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMDozMzo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDdjZTUwYmNjZjEyNjQuLmI5OGIyZDY4YzYyYmUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTY3NSw5ICYjNDM7Njc1LDExIEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbiBcdGxvbmdcdFx0XHRzdGF0ZVtNRU1DR19WTVNUQVRfU0laRV07XG4gXHR1bnNpZ25lZCBsb25nXHRcdGV2ZW50c1tOUl9NRU1DR19FVkVOVFNdO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gXHQvKiBOb24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgcGFnZSBzdGF0ZSBcdTAwMjYgZXZlbnRzICovXG4gXHRsb25nXHRcdFx0c3RhdGVfbG9jYWxbTUVNQ0dfVk1TVEFUX1NJWkVdO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRldmVudHNfbG9jYWxbTlJfTUVNQ0dfRVZFTlRTXTtcbiYjNDM7I2VuZGlmXG4gXG4gXHQvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZ1x0XHRcdHN0YXRlX3BlbmRpbmdbTUVNQ0dfVk1TVEFUX1NJWkVdO1xuQEAgLTY4Nyw2ICYjNDM7Njg5LDMyIEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbiBcdGF0b21pY19sb25nX3RcdFx0c3RhdHNfdXBkYXRlcztcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5XG4mIzQzOyAqIG1lbW9yeS5zdGF0IGFuZCBieSByZXBhcmVudGluZyBvbiBvZmZsaW5lLCBib3RoIG9mIHdoaWNoIGFyZSB2MS1vbmx5LlxuJiM0MzsgKi9cbiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMVxuJiM0MztzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX2xvY2FsO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLypcbiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nXG4gICpcbkBAIC00NDY4LDcgJiM0Mzs0NDk2LDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcbiBcdC8qIHBvaW50ZXIgdG8gdGhlIGFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuIFx0bG9uZyAqYWdncmVnYXRlO1xuLVx0LyogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNoYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbiYjNDM7XHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxuJiM0MztcdCAqL1xuIFx0bG9uZyAqbG9jYWw7XG4gXHQvKiBwb2ludGVyIHRvIHRoZSBwZW5kaW5nIGNoaWxkIGNvdW50ZXJzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXG4gXHRsb25nICpwZW5kaW5nO1xuQEAgLTQ1MDcsNyAmIzQzOzQ1MzgsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gXHRcdH1cbiBcbiBcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuLVx0XHRpZiAoZGVsdGFfY3B1KVxuJiM0MztcdFx0aWYgKGRlbHRhX2NwdSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbG9jYWwpXG4gXHRcdFx0YWMtXHUwMDNlbG9jYWxbaV0gJiM0Mzs9IGRlbHRhX2NwdTtcbiBcbiBcdFx0aWYgKGRlbHRhKSB7XG5AQCAtNDUyMSw2ICYjNDM7NDU1Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcbiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4mIzQzO1x0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XG4gXHRpbnQgbmlkO1xuIFxuIFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZWttZW1fc3RhdCkpIHtcbkBAIC00NTI4LDcgJiM0Mzs0NTYwLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdFx0aW50IGluZGV4ID0gbWVtY2dfc3RhdHNfaW5kZXgoTUVNQ0dfS01FTSk7XG4gXG4gXHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBrbWVtO1xuLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTtcbiYjNDM7XHRcdGlmIChzdGF0ZV9sb2NhbClcbiYjNDM7XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtO1xuIFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBrbWVtO1xuIFx0fVxuQEAgLTQ1NTAsNyAmIzQzOzQ1ODMsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjtcbiBcdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbi1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbiYjNDM7XHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxuJiM0MztcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdH1cbkBAIC00NTYzLDcgJiM0Mzs0NTk3LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdFx0XHRpZiAocGxzdGF0cylcbiBcdFx0XHRcdHBsc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG4mIzQzO1x0XHRcdGlmIChzdGF0ZV9sb2NhbClcbiYjNDM7XHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdFx0aWYgKHBhcmVudClcbiBcdFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiO1xuIFx0XHR9XG5AQCAtNDU4OCw3ICYjNDM7NDYyMyw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGUsXG4tXHRcdC5sb2NhbCA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWwsXG4mIzQzO1x0XHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXG4gXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxuIFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcbiBcdFx0LmNzdGF0ID0gc3RhdGMtXHUwMDNlc3RhdGUsXG5AQCAtNDU5OSw3ICYjNDM7NDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuLVx0XHQubG9jYWwgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbCxcbiYjNDM7XHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG4gXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxuIFx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VldmVudHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfc3RhdF9zaG93JiMzNDssCiAgICAmIzM0O21lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwmIzM0OywKICAgICYjMzQ7bWVtY2dfZXZlbnRzX2xvY2FsJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25kaXRpb25hbGx5IHJlbW92ZXMgbGVnYWN5IHYxLW9ubHkgbG9jYWwgc3RhdGlzdGljcyAoc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCkgZnJvbSBzdHJ1Y3QgbWVtY2dfdm1zdGF0cyB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZCwgYW5kIGFkZHMgTlVMTCBjaGVja3MgZHVyaW5nIHN0YXRzIGZsdXNoaW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbWNnIHN0YXRpc3RpY3MgYWNjb3VudGluZyBhbmQgcmVwYXJlbnRpbmcgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHdpdGggYm90aCBjZ3JvdXAgdjEgYW5kIHYyIHdvcmtsb2Fkcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYyOWJiM2I1ZWQ0OThjMjFkYmRmMTVhNWJiNGZmMDU1YWMyZmEyMWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDEwOjMzOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDdjZTUwYmNjZjEyNjQuLmI5OGIyZDY4YzYyYmUgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTY3NSw5ICYjNDM7Njc1LDExIEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHsKIAlsb25nCQkJc3RhdGVbTUVNQ0dfVk1TVEFUX1NJWkVdOwogCXVuc2lnbmVkIGxvbmcJCWV2ZW50c1tOUl9NRU1DR19FVkVOVFNdOwogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMQogCS8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBwYWdlIHN0YXRlICZhbXA7IGV2ZW50cyAqLwogCWxvbmcJCQlzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07CiAJdW5zaWduZWQgbG9uZwkJZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107CiYjNDM7I2VuZGlmCiAKIAkvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqLwogCWxvbmcJCQlzdGF0ZV9wZW5kaW5nW01FTUNHX1ZNU1RBVF9TSVpFXTsKQEAgLTY4Nyw2ICYjNDM7Njg5LDMyIEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHsKIAlhdG9taWNfbG9uZ190CQlzdGF0c191cGRhdGVzOwogfTsKIAomIzQzOy8qCiYjNDM7ICogVGhlIG5vbi1oaWVyYXJjaGljYWwgbWVtY2ctd2lkZSBjb3VudGVycyBhcmUgcmVhZCBiYWNrIG9ubHkgYnkgdGhlIGxlZ2FjeQomIzQzOyAqIG1lbW9yeS5zdGF0IGFuZCBieSByZXBhcmVudGluZyBvbiBvZmZsaW5lLCBib3RoIG9mIHdoaWNoIGFyZSB2MS1vbmx5LgomIzQzOyAqLwomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKJiM0MztzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19sb2NhbDsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqIG1lbWNnIGFuZCBscnV2ZWMgc3RhdHMgZmx1c2hpbmcKICAqCkBAIC00NDY4LDcgJiM0Mzs0NDk2LDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiBzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgewogCS8qIHBvaW50ZXIgdG8gdGhlIGFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqLwogCWxvbmcgKmFnZ3JlZ2F0ZTsKLQkvKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2hhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovCiYjNDM7CS8qCiYjNDM7CSAqIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyBvciBOVUxMIHRvCiYjNDM7CSAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpCiYjNDM7CSAqLwogCWxvbmcgKmxvY2FsOwogCS8qIHBvaW50ZXIgdG8gdGhlIHBlbmRpbmcgY2hpbGQgY291bnRlcnMgZHVyaW5nIHRyZWUgcHJvcGFnYXRpb24gKi8KIAlsb25nICpwZW5kaW5nOwpAQCAtNDUwNyw3ICYjNDM7NDUzOCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYykKIAkJfQogCiAJCS8qIEFnZ3JlZ2F0ZSBjb3VudHMgb24gdGhpcyBsZXZlbCBhbmQgcHJvcGFnYXRlIHVwd2FyZHMgKi8KLQkJaWYgKGRlbHRhX2NwdSkKJiM0MzsJCWlmIChkZWx0YV9jcHUgJmFtcDsmYW1wOyBhYy0mZ3Q7bG9jYWwpCiAJCQlhYy0mZ3Q7bG9jYWxbaV0gJiM0Mzs9IGRlbHRhX2NwdTsKIAogCQlpZiAoZGVsdGEpIHsKQEAgLTQ1MjEsNiAmIzQzOzQ1NTIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpCiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDCiBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogewomIzQzOwlsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTsKIAlpbnQgbmlkOwogCiAJaWYgKGF0b21pY19yZWFkKCZhbXA7bWVtY2ctJmd0O2ttZW1fc3RhdCkpIHsKQEAgLTQ1MjgsNyAmIzQzOzQ1NjAsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCQlpbnQgaW5kZXggPSBtZW1jZ19zdGF0c19pbmRleChNRU1DR19LTUVNKTsKIAogCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVbaW5kZXhdICYjNDM7PSBrbWVtOwotCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtOwomIzQzOwkJaWYgKHN0YXRlX2xvY2FsKQomIzQzOwkJCXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTsKIAkJaWYgKHBhcmVudCkKIAkJCXBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IGttZW07CiAJfQpAQCAtNDU1MCw3ICYjNDM7NDU4Myw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJCQlpZiAocGxzdGF0cykKIAkJCQlwbHN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7Ci0JCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiOwomIzQzOwkJCWlmIChzdGF0ZV9sb2NhbCkKJiM0MzsJCQkJc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiOwogCQkJaWYgKHBhcmVudCkKIAkJCQlwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiOwogCQl9CkBAIC00NTYzLDcgJiM0Mzs0NTk3LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAkJCWlmIChwbHN0YXRzKQogCQkJCXBsc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiOwogCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjsKLQkJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiYjNDM7CQkJaWYgKHN0YXRlX2xvY2FsKQomIzQzOwkJCQlzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQlpZiAocGFyZW50KQogCQkJCXBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCX0KQEAgLTQ1ODgsNyAmIzQzOzQ2MjMsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KQogCiAJYWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7CiAJCS5hZ2dyZWdhdGUgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGUsCi0JCS5sb2NhbCA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbCwKJiM0MzsJCS5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSwKIAkJLnBlbmRpbmcgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZywKIAkJLnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nIDogTlVMTCwKIAkJLmNzdGF0ID0gc3RhdGMtJmd0O3N0YXRlLApAQCAtNDU5OSw3ICYjNDM7NDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpCiAKIAlhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHsKIAkJLmFnZ3JlZ2F0ZSA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtldmVudHMsCi0JCS5sb2NhbCA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtldmVudHNfbG9jYWwsCiYjNDM7CQkubG9jYWwgPSBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkobWVtY2cpLAogCQkucGVuZGluZyA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtldmVudHNfcGVuZGluZywKIAkJLnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LSZndDt2bXN0YXRzLSZndDtldmVudHNfcGVuZGluZyA6IE5VTEwsCiAJCS5jc3RhdCA9IHN0YXRjLSZndDtldmVudHMsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaDogYG1tL21lbWNvbnRyb2wuY2AgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHR3ZWFrZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHRhcmdldCBpcyBgbW0vbWVtY29udHJvbC5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIHRoZSBgc3RydWN0IG1lbWNnX3Ztc3RhdHNgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBhcmUgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAuIEludGVyZXN0aW5nLiBMb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdmVyc2lvbmVkIG1lbWNnIHN0YXRzLgoKVGhlIGludHJvZHVjdGlvbiBvZiBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCBzdWdnZXN0cyB3ZSBoYXZlIHV0aWxpdHkgZnVuY3Rpb25zIHRoYXQgY29uZGl0aW9uYWxseSByZXR1cm4gTlVMTCBpZiBgQ09ORklHX01FTUNHX1YxYCBpc24mIzM5O3QgZW5hYmxlZC4gR29vZCBwcmFjdGljZSwga2VlcHMgdGhpbmdzIGNsZWFuZXIgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBidWlsZCBpc3N1ZXMuIEkmIzM5O20gYXNzdW1pbmcgdGhlc2UgYXJlIG1lYW50IHRvIGJlIHVzZWQgd2hlbiB2ZXJzaW9uIDEgb2YgbWVtY2cgaXMgKm5vdCogZW5hYmxlZC4KCkxvb2tpbmcgYXQgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGBpZiAoZGVsdGFfY3B1ICZhbXA7JmFtcDsgYWMtJmd0O2xvY2FsKWAuIFRoZSBwcmVzZW5jZSBvZiBgYWMtJmd0O2xvY2FsYCBpcyB0ZWxsaW5nLCBhbmQgaXQgd2lsbCBiZSBkZXBlbmRlbnQgb24gdGhlIGFycmF5IHJldHVybnMuIGBmbHVzaF9ubWlfc3RhdHNgIGFsc28gY2hlY2tzIGBpZiAoc3RhdGVfbG9jYWwpIC4uLmAuIEFuZCBpbiBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCB3ZSBzZWUgYC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKWAsIGV0Yy4gU28sIHRoaXMgbG9va3MgbGlrZSB0aGUgbG9jYWwgYXJyYXlzIGFyZSBiZWluZyBhc3NpZ25lZCB0byB0aGUgYC5sb2NhbGAgZWxlbWVudCBvZiBhIHN0cnVjdHVyZS4KClRvIGdldCBhIGJldHRlciBwaWN0dXJlLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgYW5kIHBvdGVudGlhbGx5IGBtbS9tZW1jb250cm9sLXYxLmNgIG9yIHRoZSBLY29uZmlnIGZpbGVzLiBBIHF1aWNrIGBncmVwcGVyYCBydW4gb3IgZXZlbiBhIHJlYWQtZmlsZSBvcGVyYXRpb24gYXJvdW5kIHRoZXNlIGxpbmVzIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBzaG91bGQgcXVpY2tseSBpbGx1bWluYXRlIHRoZSBpbnRlbnQgYW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBtZW1jZyBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBNRU1DRyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBNRU1DRyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGFyaXR5IGFuZCB0aGUgdHlwaWNhbCBkaXJlY3Rvcnkgc3RydWN0dXJlLCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGFyZSBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLiBgaW5pdC9LY29uZmlnYCBpcyBvZnRlbiB0aGUgcGxhY2UgZm9yIGdsb2JhbCBvciBmb3VuZGF0aW9uYWwgc2V0dGluZ3MsIHdoaWxlIGBtbS9LY29uZmlnYCB3b3VsZCBzZWVtIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBsb2NhdGlvbiBmb3IgbWVtb3J5LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIGxpa2VseSBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgTUVNQ0dgIHN5bWJvbCBvciBhIGNsb3NlbHkgcmVsYXRlZCBvcHRpb24gd2l0aGluIG9uZSBvZiB0aG9zZSBmaWxlcy4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UgYW5kIGdldCBzZWFyY2hpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYzMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipDb2RlIEFyY2hhZW9sb2d5IFRpbWUhKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiBgZXZlbnRzX2xvY2FsYCBhbmQgYHN0YXRlX2xvY2FsYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGVzZSB2YXJpYWJsZXMgYXJlIGJlaW5nIHV0aWxpemVkLiBBcmUgdGhleSBpc29sYXRlZCB0byBhIHNpbmdsZSBmdW5jdGlvbiwgbW9kdWxlLCBvciBzY2F0dGVyZWQgdGhyb3VnaG91dCB0aGUgc3lzdGVtPyBBcmUgdGhleSBjZW50cmFsIHRvIGEgY29yZSBmdW5jdGlvbmFsaXR5LCBvciBtb3JlIG9mIGEgc2lkZSBjb25jZXJuPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpdmUgaW1wb3J0YW5jZSwgdGhlaXIgcG90ZW50aWFsIGltcGFjdCBvbiBvdGhlciBhcmVhcywgYW5kIGhvdyBlYXNpbHkgdGhleSBjYW4gYmUgbWFuaXB1bGF0ZWQuIExldCYjMzk7cyBzdGFydCBieSBkb2luZyBhIGJhc2ljIHNlYXJjaCBmb3IgdGhlaXIgdXNhZ2VzLiBUaW1lIHRvIGdldCBteSBncmVwIG9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhzdGF0ZV9sb2NhbHxldmVudHNfbG9jYWwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MDYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM9MTI5Mz1zdGF0aWMgdm9pZCBfX2d1Y19jYXB0dXJlX3Byb2Nlc3Nfb3V0cHV0KHN0cnVjdCBpbnRlbF9ndWMgKmd1Yylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTYtXHRzdHJ1Y3QgaW50ZWxfdWMgKnVjID0gY29udGFpbmVyX29mKGd1YywgdHlwZW9mKCp1YyksIGd1Yyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jOjEyOTc6XHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgbG9nX2J1Zl9zdGF0ZV9sb2NhbDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmMtMTI5OC1cdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSAqbG9nX2J1Zl9zdGF0ZTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTMtXHQgKi9cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNDpcdG1lbWNweShcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLCBsb2dfYnVmX3N0YXRlLCBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTUtXHRidWZmZXJfc2l6ZSA9IGludGVsX2d1Y19nZXRfbG9nX2J1ZmZlcl9zaXplKFx1MDAyNmd1Yy1cdTAwM2Vsb2csIEdVQ19DQVBUVVJFX0xPR19CVUZGRVIpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE2Olx0cmVhZF9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnJlYWRfcHRyO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE3Olx0d3JpdGVfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5zYW1wbGVkX3dyaXRlX3B0cjtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxODpcdGZ1bGxfY291bnQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmJ1ZmZlcl9mdWxsX2NudDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmMtMTMxOS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmMtMTMyMC1cdC8qIEJvb2trZWVwaW5nIHN0dWZmICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jOjEzMjE6XHRndWMtXHUwMDNlbG9nLnN0YXRzW0dVQ19DQVBUVVJFX0xPR19CVUZGRVJdLmZsdXNoICYjNDM7PSBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsdXNoX3RvX2ZpbGU7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMjItXHRuZXdfb3ZlcmZsb3cgPSBpbnRlbF9ndWNfY2hlY2tfbG9nX2J1Zl9vdmVyZmxvdyhcdTAwMjZndWMtXHUwMDNlbG9nLCBHVUNfQ0FQVFVSRV9MT0dfQlVGRkVSLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYz0zNzU9c3RhdGljIHZvaWQgX2d1Y19sb2dfY29weV9kZWJ1Z2xvZ3NfZm9yX3JlbGF5KHN0cnVjdCBpbnRlbF9ndWNfbG9nICpsb2cpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTM3OS1cdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSAqbG9nX2J1Zl9zdGF0ZSwgKmxvZ19idWZfc25hcHNob3Rfc3RhdGU7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6MzgwOlx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlIGxvZ19idWZfc3RhdGVfbG9jYWw7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtMzgxLVx0ZW51bSBndWNfbG9nX2J1ZmZlcl90eXBlIHR5cGU7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQxOC1cdFx0ICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDE5Olx0XHRtZW1jcHkoXHUwMDI2bG9nX2J1Zl9zdGF0ZV9sb2NhbCwgbG9nX2J1Zl9zdGF0ZSxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjAtXHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDIxLVx0XHRidWZmZXJfc2l6ZSA9IGludGVsX2d1Y19nZXRfbG9nX2J1ZmZlcl9zaXplKGxvZywgdHlwZSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIyOlx0XHRyZWFkX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwucmVhZF9wdHI7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIzOlx0XHR3cml0ZV9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnNhbXBsZWRfd3JpdGVfcHRyO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyNDpcdFx0ZnVsbF9jbnQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmJ1ZmZlcl9mdWxsX2NudDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjUtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDI2LVx0XHQvKiBCb29ra2VlcGluZyBzdHVmZiAqL1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyNzpcdFx0bG9nLVx1MDAzZXN0YXRzW3R5cGVdLmZsdXNoICYjNDM7PSBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsdXNoX3RvX2ZpbGU7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDI4LVx0XHRuZXdfb3ZlcmZsb3cgPSBpbnRlbF9ndWNfY2hlY2tfbG9nX2J1Zl9vdmVyZmxvdyhsb2csIHR5cGUsIGZ1bGxfY250KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDM1LVx0XHQvKiBGaXJzdCBjb3B5IHRoZSBzdGF0ZSBzdHJ1Y3R1cmUgaW4gc25hcHNob3QgYnVmZmVyICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDM2Olx0XHRtZW1jcHkobG9nX2J1Zl9zbmFwc2hvdF9zdGF0ZSwgXHUwMDI2bG9nX2J1Zl9zdGF0ZV9sb2NhbCxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MzctXHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM9MTM4OD1zdGF0aWMgdm9pZCBfX2d1Y19jYXB0dXJlX3Byb2Nlc3Nfb3V0cHV0KHN0cnVjdCB4ZV9ndWMgKmd1Yylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xMzkxLVx0c3RydWN0IHhlX3VjICp1YyA9IGNvbnRhaW5lcl9vZihndWMsIHR5cGVvZigqdWMpLCBndWMpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTM5MjpcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTM5My1cdHN0cnVjdCBfX2d1Y19jYXB0dXJlX2J1ZnN0YXRlIGJ1Zjtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDA2LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDA3Olx0eGVfbWFwX21lbWNweV9mcm9tKGd1Y190b194ZShndWMpLCBcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLCBcdTAwMjZndWMtXHUwMDNlbG9nLmJvLVx1MDAzZXZtYXAsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDA4LVx0XHRcdCAgIGxvZ19idWZfc3RhdGVfb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQxMC1cdGJ1ZmZlcl9zaXplID0gWEVfR1VDX0xPR19TVEFURV9DQVBUVVJFX0JVRkZFUl9TSVpFO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQxMTpcdHJlYWRfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5yZWFkX3B0cjtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTI6XHR3cml0ZV9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnNhbXBsZWRfd3JpdGVfcHRyO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQxMzpcdGZ1bGxfY291bnQgPSBGSUVMRF9HRVQoR1VDX0xPR19CVUZGRVJfU1RBVEVfQlVGRkVSX0ZVTExfQ05ULCBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0MTQtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE1LVx0LyogQm9va2tlZXBpbmcgc3R1ZmYgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTY6XHR0bXAgPSBGSUVMRF9HRVQoR1VDX0xPR19CVUZGRVJfU1RBVEVfRkxVU0hfVE9fRklMRSwgbG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE3LVx0Z3VjLVx1MDAzZWxvZy5zdGF0c1tHVUNfTE9HX1RZUEVfU1RBVEVfQ0FQVFVSRV0uZmx1c2ggJiM0Mzs9IHRtcDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDU4LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDU5Olx0bG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyBcdTAwMjY9IH5HVUNfTE9HX0JVRkZFUl9TVEFURV9GTFVTSF9UT19GSUxFO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQ2MC1cdHhlX21hcF93cihndWNfdG9feGUoZ3VjKSwgXHUwMDI2Z3VjLVx1MDAzZWxvZy5iby1cdTAwM2V2bWFwLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQ2MS1cdFx0ICBsb2dfYnVmX3N0YXRlX29mZnNldCAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUsIGZsYWdzKSwgdTMyLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQ2MjpcdFx0ICBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjMtXHRfX2d1Y19jYXB0dXJlX2ZsdXNobG9nX2NvbXBsZXRlKGd1Yyk7XG4tLVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oPTE5PXN0cnVjdCByZG1hX2Nncm91cCB7XG4tLVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oLTI5LVx0c3RydWN0IGNncm91cF9maWxlXHRcdGV2ZW50c19maWxlO1xuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oOjMwOlx0c3RydWN0IGNncm91cF9maWxlXHRcdGV2ZW50c19sb2NhbF9maWxlO1xuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oLTMxLX07XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oPTM1PXN0cnVjdCBodWdldGxiX2Nncm91cCB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTQ4LVx0YXRvbWljX2xvbmdfdCBldmVudHNbSFVHRV9NQVhfSFNUQVRFXVtIVUdFVExCX05SX01FTU9SWV9FVkVOVFNdO1xuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oOjQ5Olx0YXRvbWljX2xvbmdfdCBldmVudHNfbG9jYWxbSFVHRV9NQVhfSFNUQVRFXVtIVUdFVExCX05SX01FTU9SWV9FVkVOVFNdO1xuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTUwLVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC01NC1cdC8qIEhhbmRsZSBmb3IgXCYjMzQ7aHVnZXRsYi5ldmVudHMubG9jYWxcJiMzNDsgKi9cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo1NTpcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZVtIVUdFX01BWF9IU1RBVEVdO1xuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTU2LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4OT1zdHJ1Y3QgbWVtX2Nncm91cCB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjMxLVx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19maWxlO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MjMyOlx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19sb2NhbF9maWxlO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjMzLVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI0MS1cdGF0b21pY19sb25nX3RcdFx0bWVtb3J5X2V2ZW50c1tNRU1DR19OUl9NRU1PUllfRVZFTlRTXTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI0MjpcdGF0b21pY19sb25nX3RcdFx0bWVtb3J5X2V2ZW50c19sb2NhbFtNRU1DR19OUl9NRU1PUllfRVZFTlRTXTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI0My1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05NDY9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTQ3LVx0XHRcdFx0XHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjk0ODp1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk0OS1cdFx0XHRcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDA1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0MTAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDExOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNDEyLVx0XHRcdFx0XHRcdCAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbi0tXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9NDI9c3RydWN0IG1pc2NfcmVzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtNDYtXHRhdG9taWM2NF90IGV2ZW50cztcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDo0NzpcdGF0b21pYzY0X3QgZXZlbnRzX2xvY2FsO1xuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTQ4LX07XG4tLVxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oPTU2PXN0cnVjdCBtaXNjX2NnIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtNjEtXHQvKiBtaXNjLmV2ZW50cy5sb2NhbCAqL1xuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oOjYyOlx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19sb2NhbF9maWxlO1xuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTYzLVxuLS1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTEyNT1zdGF0aWMgdm9pZCBtaXNjX2NnX2V2ZW50KGVudW0gbWlzY19yZXNfdHlwZSB0eXBlLCBzdHJ1Y3QgbWlzY19jZyAqY2cpXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0xMjYte1xua2VybmVsL2Nncm91cC9taXNjLmM6MTI3Olx0YXRvbWljNjRfaW5jKFx1MDAyNmNnLVx1MDAzZXJlc1t0eXBlXS5ldmVudHNfbG9jYWwpO1xua2VybmVsL2Nncm91cC9taXNjLmM6MTI4Olx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNmNnLVx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTEyOS1cbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0zNjc9c3RhdGljIGludCBfX21pc2NfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgYm9vbCBsb2NhbClcbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0zNzQtXHRcdGlmIChsb2NhbClcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjM3NTpcdFx0XHRldmVudHMgPSBhdG9taWM2NF9yZWFkKFx1MDAyNmNnLVx1MDAzZXJlc1tpXS5ldmVudHNfbG9jYWwpO1xua2VybmVsL2Nncm91cC9taXNjLmMtMzc2LVx0XHRlbHNlXG4tLVxua2VybmVsL2Nncm91cC9taXNjLmM9Mzg0PXN0YXRpYyBpbnQgbWlzY19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTM4OC1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjM4OTpzdGF0aWMgaW50IG1pc2NfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTM5MC17XG4tLVxua2VybmVsL2Nncm91cC9taXNjLmM9Mzk1PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1pc2NfY2dfZmlsZXNbXSA9IHtcbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYy00MjMtXHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNDpcdFx0LmZpbGVfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1pc2NfY2csIGV2ZW50c19sb2NhbF9maWxlKSxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNTpcdFx0LnNlcV9zaG93ID0gbWlzY19ldmVudHNfbG9jYWxfc2hvdyxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTQyNi1cdH0sXG4tLVxua2VybmVsL2Nncm91cC9waWRzLmM9NDk9c3RydWN0IHBpZHNfY2dyb3VwIHtcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy02MS1cdHN0cnVjdCBjZ3JvdXBfZmlsZVx0XHRldmVudHNfZmlsZTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjYyOlx0c3RydWN0IGNncm91cF9maWxlXHRcdGV2ZW50c19sb2NhbF9maWxlO1xua2VybmVsL2Nncm91cC9waWRzLmMtNjMtXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy02NC1cdGF0b21pYzY0X3RcdFx0XHRldmVudHNbTlJfUElEQ0dfRVZFTlRTXTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjY1Olx0YXRvbWljNjRfdFx0XHRcdGV2ZW50c19sb2NhbFtOUl9QSURDR19FVkVOVFNdO1xua2VybmVsL2Nncm91cC9waWRzLmMtNjYtfTtcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0yNDM9c3RhdGljIHZvaWQgcGlkc19ldmVudChzdHJ1Y3QgcGlkc19jZ3JvdXAgKnBpZHNfZm9ya2luZyxcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNDgtXHQvKiBPbmx5IGxvZyB0aGUgZmlyc3QgdGltZSBsaW1pdCBpcyBoaXQuICovXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNDk6XHRpZiAoYXRvbWljNjRfaW5jX3JldHVybihcdTAwMjZwLVx1MDAzZWV2ZW50c19sb2NhbFtQSURDR19GT1JLRkFJTF0pID09IDEpIHtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI1MC1cdFx0cHJfaW5mbyhcJiMzNDtjZ3JvdXA6IGZvcmsgcmVqZWN0ZWQgYnkgcGlkcyBjb250cm9sbGVyIGluIFwmIzM0Oyk7XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtMjU1LVx0ICAgIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUykge1xua2VybmVsL2Nncm91cC9waWRzLmM6MjU2Olx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2cC1cdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTctXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTktXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNjA6XHRhdG9taWM2NF9pbmMoXHUwMDI2cGlkc19vdmVyX2xpbWl0LVx1MDAzZWV2ZW50c19sb2NhbFtQSURDR19NQVhdKTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI2MTpcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZwaWRzX292ZXJfbGltaXQtXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xua2VybmVsL2Nncm91cC9waWRzLmMtMjYyLVxuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTM2MT1zdGF0aWMgaW50IF9fcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBib29sIGxvY2FsKVxuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTM3MS1cdH1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjM3MjpcdGV2ZW50cyA9IGxvY2FsID8gcGlkcy1cdTAwM2VldmVudHNfbG9jYWwgOiBwaWRzLVx1MDAzZWV2ZW50cztcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTM3My1cbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0zNzg9c3RhdGljIGludCBwaWRzX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtMzgzLVxua2VybmVsL2Nncm91cC9waWRzLmM6Mzg0OnN0YXRpYyBpbnQgcGlkc19ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxua2VybmVsL2Nncm91cC9waWRzLmMtMzg1LXtcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0zOTA9c3RhdGljIHN0cnVjdCBjZnR5cGUgcGlkc19maWxlc1tdID0ge1xuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTQxNC1cdFx0Lm5hbWUgPSBcJiMzNDtldmVudHMubG9jYWxcJiMzNDssXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo0MTU6XHRcdC5zZXFfc2hvdyA9IHBpZHNfZXZlbnRzX2xvY2FsX3Nob3csXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo0MTY6XHRcdC5maWxlX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwaWRzX2Nncm91cCwgZXZlbnRzX2xvY2FsX2ZpbGUpLFxua2VybmVsL2Nncm91cC9waWRzLmMtNDE3LVx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmM9NzU9c3RydWN0IHJkbWFjZ19yZXNvdXJjZV9wb29sIHtcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy04OS1cdHU2NFx0XHRcdGV2ZW50c19hbGxvY19mYWlsW1JETUFDR19SRVNPVVJDRV9NQVhdO1xua2VybmVsL2Nncm91cC9yZG1hLmM6OTA6XHR1NjRcdFx0XHRldmVudHNfbG9jYWxfbWF4W1JETUFDR19SRVNPVVJDRV9NQVhdO1xua2VybmVsL2Nncm91cC9yZG1hLmM6OTE6XHR1NjRcdFx0XHRldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtSRE1BQ0dfUkVTT1VSQ0VfTUFYXTtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTkyLX07XG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmM9MTM5PXN0YXRpYyBib29sIHJwb29sX2hhc19wZXJzaXN0ZW50X3N0YXRlKHN0cnVjdCByZG1hY2dfcmVzb3VyY2VfcG9vbCAqcnBvb2wpXG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtMTUwLVx0XHQgICAgcnBvb2wtXHUwMDNlZXZlbnRzX21heFtpXSB8fFxua2VybmVsL2Nncm91cC9yZG1hLmM6MTUxOlx0XHQgICAgcnBvb2wtXHUwMDNlZXZlbnRzX2xvY2FsX21heFtpXSB8fFxua2VybmVsL2Nncm91cC9yZG1hLmMtMTUyLVx0XHQgICAgcnBvb2wtXHUwMDNlZXZlbnRzX2FsbG9jX2ZhaWxbaV0gfHxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MzpcdFx0ICAgIHJwb29sLVx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2ldKVxua2VybmVsL2Nncm91cC9yZG1hLmMtMTU0LVx0XHRcdHJldHVybiB0cnVlO1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTI1OT1zdGF0aWMgdm9pZCByZG1hY2dfZXZlbnRfbG9ja2VkKHN0cnVjdCByZG1hX2Nncm91cCAqY2csXG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtMjcxLVx0aWYgKHJwb29sKSB7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyNzI6XHRcdHJwb29sLVx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2luZGV4XSYjNDM7JiM0Mzs7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyNzM6XHRcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZjZy1cdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yNzQtXHR9XG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtMjc4LVx0aWYgKHJwb29sKSB7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyNzk6XHRcdHJwb29sLVx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaW5kZXhdJiM0MzsmIzQzOztcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjI4MDpcdFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNm92ZXJfY2ctXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xua2VybmVsL2Nncm91cC9yZG1hLmMtMjgxLVx0fVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTY4OD1zdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTcxNi1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjcxNzpzdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxua2VybmVsL2Nncm91cC9yZG1hLmMtNzE4LXtcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03MzItXHRcdFx0XHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo3MzM6XHRcdFx0XHQgICBycG9vbCA/IHJwb29sLVx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gOiAwVUxMLFxua2VybmVsL2Nncm91cC9yZG1hLmMtNzM0LVx0XHRcdFx0ICAgcmRtYWNnX3Jlc291cmNlX25hbWVzW2ldLFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzM1Olx0XHRcdFx0ICAgcnBvb2wgPyBycG9vbC1cdTAwM2VldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtpXSA6IDBVTEwpO1xua2VybmVsL2Nncm91cC9yZG1hLmMtNzM2LVx0XHRcdGlmIChpIFx1MDAzYyBSRE1BQ0dfUkVTT1VSQ0VfTUFYIC0gMSlcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz03NDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgcmRtYWNnX2ZpbGVzW10gPSB7XG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtNzczLVx0XHQubmFtZSA9IFwmIzM0O2V2ZW50cy5sb2NhbFwmIzM0Oyxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjc3NDpcdFx0LnNlcV9zaG93ID0gcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93LFxua2VybmVsL2Nncm91cC9yZG1hLmM6Nzc1Olx0XHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcmRtYV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTc3Ni1cdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmM9MjQzPXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2V2ZW50KHN0cnVjdCBodWdldGxiX2Nncm91cCAqaHVnZXRsYiwgaW50IGlkeCxcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jLTI0NS17XG5tbS9odWdldGxiX2Nncm91cC5jOjI0NjpcdGF0b21pY19sb25nX2luYyhcdTAwMjZodWdldGxiLVx1MDAzZWV2ZW50c19sb2NhbFtpZHhdW2V2ZW50XSk7XG5tbS9odWdldGxiX2Nncm91cC5jOjI0NzpcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZodWdldGxiLVx1MDAzZWV2ZW50c19sb2NhbF9maWxlW2lkeF0pO1xubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNDgtXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYz02Nzc9c3RhdGljIGludCBfX2h1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIGJvb2wgbG9jYWwpXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYy02ODYtXHRpZiAobG9jYWwpXG5tbS9odWdldGxiX2Nncm91cC5jOjY4NzpcdFx0bWF4ID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZoX2NnLVx1MDAzZWV2ZW50c19sb2NhbFtpZHhdW0hVR0VUTEJfTUFYXSk7XG5tbS9odWdldGxiX2Nncm91cC5jLTY4OC1cdGVsc2Vcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jPTY5Nj1zdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYy03MDAtXG5tbS9odWdldGxiX2Nncm91cC5jOjcwMTpzdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5tbS9odWdldGxiX2Nncm91cC5jLTcwMi17XG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYz03MDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgaHVnZXRsYl9kZmxfdG1wbFtdID0ge1xuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNzQwLVx0XHQubmFtZSA9IFwmIzM0O2V2ZW50cy5sb2NhbFwmIzM0Oyxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6NzQxOlx0XHQuc2VxX3Nob3cgPSBodWdldGxiX2V2ZW50c19sb2NhbF9zaG93LFxubW0vaHVnZXRsYl9jZ3JvdXAuYzo3NDI6XHRcdC5maWxlX29mZnNldCA9IE1FTUZJTEVfT0ZGU0VUKHN0cnVjdCBodWdldGxiX2Nncm91cCwgZXZlbnRzX2xvY2FsX2ZpbGVbMF0pLFxubW0vaHVnZXRsYl9jZ3JvdXAuYy03NDMtXHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTc0Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX25vZGVfbnJfbHJ1X3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTc1Ni1cdFx0ZWxzZVxubW0vbWVtY29udHJvbC12MS5jOjE3NTc6XHRcdFx0bnIgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywgTlJfTFJVX0JBU0UgJiM0MzsgbHJ1KTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzU4LVx0fVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNzYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbnJfbHJ1X3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTc3NC1cdFx0ZWxzZVxubW0vbWVtY29udHJvbC12MS5jOjE3NzU6XHRcdFx0bnIgJiM0Mzs9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIE5SX0xSVV9CQVNFICYjNDM7IGxydSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTc3Ni1cdH1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTg2Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnMV9ldmVudHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg2OS1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODcwOnZvaWQgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wtdjEuYy0xODcxLXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3NC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWVtY2cxX3N0YXRzKTsgaSYjNDM7JiM0MzspXG5tbS9tZW1jb250cm9sLXYxLmM6MTg3NTpcdFx0cmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgbWVtY2cxX3N0YXRzW2ldKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xODc2LX1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODc3LVxubW0vbWVtY29udHJvbC12MS5jOjE4Nzg6dm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wtdjEuYy0xODc5LXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg4Mi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspXG5tbS9tZW1jb250cm9sLXYxLmM6MTg4MzpcdFx0cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIGkpO1xubW0vbWVtY29udHJvbC12MS5jLTE4ODQtfVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xODg2PXZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4OTgtXG5tbS9tZW1jb250cm9sLXYxLmM6MTg5OTpcdFx0bnIgPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChtZW1jZywgbWVtY2cxX3N0YXRzW2ldKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xOTAwLVx0XHRzZXFfYnVmX3ByaW50ZihzLCBcJiMzNDslcyAlbHVcXG5cJiMzNDssIG1lbWNnMV9zdGF0X25hbWVzW2ldLCBucik7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE5MDQtXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwmIzM0OyVzICVsdVxcblwmIzM0Oywgdm1fZXZlbnRfbmFtZShtZW1jZzFfZXZlbnRzW2ldKSxcbm1tL21lbWNvbnRyb2wtdjEuYzoxOTA1Olx0XHRcdCAgICAgICBtZW1jZ19ldmVudHNfbG9jYWwobWVtY2csIG1lbWNnMV9ldmVudHNbaV0pKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xOTA2LVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xOTA4LVx0XHRzZXFfYnVmX3ByaW50ZihzLCBcJiMzNDslcyAlbHVcXG5cJiMzNDssIGxydV9saXN0X25hbWUoaSksXG5tbS9tZW1jb250cm9sLXYxLmM6MTkwOTpcdFx0XHQgICAgICAgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgTlJfTFJVX0JBU0UgJiM0MzsgaSkgKlxubW0vbWVtY29udHJvbC12MS5jLTE5MTAtXHRcdFx0ICAgICAgIFBBR0VfU0laRSk7XG4tLVxubW0vbWVtY29udHJvbC12MS5oPTMyPXN0YXRpYyBpbmxpbmUgYm9vbCBkb19tZW1zd19hY2NvdW50KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5oLTM2LVxubW0vbWVtY29udHJvbC12MS5oOjM3OnVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcbm1tL21lbWNvbnRyb2wtdjEuaDozODp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcbm1tL21lbWNvbnRyb2wtdjEuaDozOTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xubW0vbWVtY29udHJvbC12MS5oLTQwLWJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD02ND12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKTtcbm1tL21lbWNvbnRyb2wtdjEuaDo2NTp2b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpO1xubW0vbWVtY29udHJvbC12MS5oOjY2OnZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpO1xubW0vbWVtY29udHJvbC12MS5oLTY3LVxubW0vbWVtY29udHJvbC12MS5oOjY4OnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC12MS5oLTY5LVx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XG5tbS9tZW1jb250cm9sLXYxLmg6NzA6dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC12MS5oLTcxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzY9c3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG5tbS9tZW1jb250cm9sLmMtMjM3LVxubW0vbWVtY29udHJvbC5jOjIzODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbWVtY29udHJvbC5jLTIzOS17XG4tLVxubW0vbWVtY29udHJvbC5jLTI1MS1cdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xubW0vbWVtY29udHJvbC5jOjI1MjpcdHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYzoyNTM6XHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xubW0vbWVtY29udHJvbC5jLTI1NC1cbi0tXG5tbS9tZW1jb250cm9sLmMtMjU3LSNlbHNlXG5tbS9tZW1jb250cm9sLmM6MjU4OnN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLmMtMjU5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc3PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTMwNy1cbm1tL21lbWNvbnRyb2wuYzozMDg6XHRyZXBhcmVudF9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYy0zMDktfVxuLS1cbm1tL21lbWNvbnRyb2wuYz00ODE9c3RydWN0IGxydXZlY19zdGF0cyB7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ4NS1cdC8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBzdGF0ZSAqL1xubW0vbWVtY29udHJvbC5jOjQ4NjpcdGxvbmcgc3RhdGVfbG9jYWxbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcbm1tL21lbWNvbnRyb2wuYy00ODctXG4tLVxubW0vbWVtY29udHJvbC5jPTUzMz11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU0OS1cbm1tL21lbWNvbnRyb2wuYzo1NTA6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS9tZW1jb250cm9sLmMtNTUxLVx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NC1cdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG5tbS9tZW1jb250cm9sLmM6NTY1Olx0eCA9IFJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jLTU2Ni0jaWZkZWYgQ09ORklHX1NNUFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NzQ9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc2LVxubW0vbWVtY29udHJvbC5jOjU3Nzp2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtNTc4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTU4NC1cdFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vbWVtY29udHJvbC5jOjU4NTpcdFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNoaWxkX2xydXZlYywgaWR4KTtcbm1tL21lbWNvbnRyb2wuYy01ODYtXHRcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpjaGlsZF9wbiwgKnBhcmVudF9wbjtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjczPXN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjc5LVx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXHUwMDI2IGV2ZW50cyAqL1xubW0vbWVtY29udHJvbC5jOjY4MDpcdGxvbmdcdFx0XHRzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07XG5tbS9tZW1jb250cm9sLmM6NjgxOlx0dW5zaWduZWQgbG9uZ1x0XHRldmVudHNfbG9jYWxbTlJfTUVNQ0dfRVZFTlRTXTtcbm1tL21lbWNvbnRyb2wuYy02ODItI2VuZGlmXG4tLVxubW0vbWVtY29udHJvbC5jLTY5Ni0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmM6Njk3OnN0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNjk4LXtcbm1tL21lbWNvbnRyb2wuYzo2OTk6XHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbDtcbm1tL21lbWNvbnRyb2wuYy03MDAtfVxubW0vbWVtY29udHJvbC5jLTcwMS1cbm1tL21lbWNvbnRyb2wuYzo3MDI6c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNzAzLXtcbm1tL21lbWNvbnRyb2wuYzo3MDQ6XHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWw7XG5tbS9tZW1jb250cm9sLmMtNzA1LX1cbm1tL21lbWNvbnRyb2wuYy03MDYtI2Vsc2Vcbm1tL21lbWNvbnRyb2wuYzo3MDc6c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wuYy03MDgte1xuLS1cbm1tL21lbWNvbnRyb2wuYy03MTEtXG5tbS9tZW1jb250cm9sLmM6NzEyOnN0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTcxMy17XG4tLVxubW0vbWVtY29udHJvbC5jPTg2MD1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jLTg3OC0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG5tbS9tZW1jb250cm9sLmM6ODc5OiAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxubW0vbWVtY29udHJvbC5jLTg4MC0gKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9OTQ0PXZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy05NTgtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xubW0vbWVtY29udHJvbC5jOjk1OTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxubW0vbWVtY29udHJvbC5jLTk2MC17XG4tLVxubW0vbWVtY29udHJvbC5jLTk2Ni1cbm1tL21lbWNvbnRyb2wuYzo5Njc6XHR4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jLTk2OC0jaWZkZWYgQ09ORklHX1NNUFxuLS1cbm1tL21lbWNvbnRyb2wuYy05NzQtXG5tbS9tZW1jb250cm9sLmM6OTc1OnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTk3Ni1cdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG5tbS9tZW1jb250cm9sLmMtOTc3LXtcbm1tL21lbWNvbnRyb2wuYzo5Nzg6XHR1bnNpZ25lZCBsb25nIHZhbHVlID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaWR4KTtcbm1tL21lbWNvbnRyb2wuYy05NzktXG4tLVxubW0vbWVtY29udHJvbC5jPTExMzI9Ym9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTExNDAtI2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jOjExNDE6dW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHNfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG5tbS9tZW1jb250cm9sLmMtMTE0Mi17XG4tLVxubW0vbWVtY29udHJvbC5jLTExNDctXG5tbS9tZW1jb250cm9sLmM6MTE0ODpcdHJldHVybiBSRUFEX09OQ0UobWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jLTExNDktfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzI0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTczMC0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmM6MTczMTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG5tbS9tZW1jb250cm9sLmMtMTczMi17XG5tbS9tZW1jb250cm9sLmM6MTczMzpcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpdGVtKSAqXG5tbS9tZW1jb250cm9sLmMtMTczNC1cdFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTkxMT12b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMTkxOS1cbm1tL21lbWNvbnRyb2wuYzoxOTIwOlx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNfbG9jYWxbZXZlbnRdKTtcbm1tL21lbWNvbnRyb2wuYy0xOTIxLVx0aWYgKCFzd2FwX2V2ZW50IFx1MDAyNlx1MDAyNiBhbGxvd19zcGlubmluZylcbm1tL21lbWNvbnRyb2wuYzoxOTIyOlx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xubW0vbWVtY29udHJvbC5jLTE5MjMtXG4tLVxubW0vbWVtY29udHJvbC5jPTQ0OTY9c3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDUwMC1cdCAqIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyBvciBOVUxMIHRvXG5tbS9tZW1jb250cm9sLmM6NDUwMTpcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXG5tbS9tZW1jb250cm9sLmMtNDUwMi1cdCAqL1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NTUzPXN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLmMtNDU1NC17XG5tbS9tZW1jb250cm9sLmM6NDU1NTpcdGxvbmcgKnN0YXRlX2xvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpO1xubW0vbWVtY29udHJvbC5jLTQ1NTYtXHRpbnQgbmlkO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00NTYyLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0ga21lbTtcbm1tL21lbWNvbnRyb2wuYzo0NTYzOlx0XHRpZiAoc3RhdGVfbG9jYWwpXG5tbS9tZW1jb250cm9sLmM6NDU2NDpcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IGttZW07XG5tbS9tZW1jb250cm9sLmMtNDU2NS1cdFx0aWYgKHBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU4MS1cdFx0XHRsc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jOjQ1ODI6XHRcdFx0bHN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NTgzLVx0XHRcdGlmIChwbHN0YXRzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTg1LVx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jOjQ1ODY6XHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxubW0vbWVtY29udHJvbC5jOjQ1ODc6XHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDU4OC1cdFx0XHRpZiAocGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTk1LVx0XHRcdGxzdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmM6NDU5NjpcdFx0XHRsc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jLTQ1OTctXHRcdFx0aWYgKHBsc3RhdHMpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ1OTktXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmM6NDYwMDpcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG5tbS9tZW1jb250cm9sLmM6NDYwMTpcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NjAyLVx0XHRcdGlmIChwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jPTQ2MTI9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcbi0tXG5tbS9tZW1jb250cm9sLmMtNDYyNS1cdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGUsXG5tbS9tZW1jb250cm9sLmM6NDYyNjpcdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxubW0vbWVtY29udHJvbC5jLTQ2MjctXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjM2LVx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHMsXG5tbS9tZW1jb250cm9sLmM6NDYzNzpcdFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcbm1tL21lbWNvbnRyb2wuYy00NjM4LVx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2NTgtXHRcdFx0LmFnZ3JlZ2F0ZSA9IGxzdGF0cy1cdTAwM2VzdGF0ZSxcbm1tL21lbWNvbnRyb2wuYzo0NjU5Olx0XHRcdC5sb2NhbCA9IGxzdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbCxcbm1tL21lbWNvbnRyb2wuYy00NjYwLVx0XHRcdC5wZW5kaW5nID0gbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcsXG4tLVxubW0vbWVtY29udHJvbC5jPTUwMzQ9c3RhdGljIGludCBtZW1vcnlfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDQxLVxubW0vbWVtY29udHJvbC5jOjUwNDI6c3RhdGljIGludCBtZW1vcnlfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxubW0vbWVtY29udHJvbC5jLTUwNDMte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MDQ1LVxubW0vbWVtY29udHJvbC5jOjUwNDY6XHRfX21lbW9yeV9ldmVudHNfc2hvdyhtLCBtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsKTtcbm1tL21lbWNvbnRyb2wuYy01MDQ3LVx0cmV0dXJuIDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTUxNDc9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxOTMtXHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbm1tL21lbWNvbnRyb2wuYzo1MTk0Olx0XHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbWVtX2Nncm91cCwgZXZlbnRzX2xvY2FsX2ZpbGUpLFxubW0vbWVtY29udHJvbC5jOjUxOTU6XHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9ldmVudHNfbG9jYWxfc2hvdyxcbm1tL21lbWNvbnRyb2wuYy01MTk2LVx0fSxcbi0tXG5tbS93b3JraW5nc2V0LmM9NjUxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgbWVtb3J5IGNvbnRyb2wgY29kZSBhZ2Fpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWVtb3J5IGFjY291bnRpbmcgd29ya3Mgd2l0aGluIGEgY2dyb3VwLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxgIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGxpbmUgOTU5IGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IGZ1bmN0aW9uIGNhbGwgaXMgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkgd2FudCB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSB3aGVyZSB0aGUgbG9jYWwgcGVyLUNQVSBwYWdlIHN0YXRlIGlzIHVwZGF0ZWQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb25jdXJyZW5jeSBtZWNoYW5pc21zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIHBlci1ub2RlIGluZm9ybWF0aW9uLiBJIHRoaW5rIGJ5IHRyYWNpbmcgaG93IHRoaXMgaXMgdXNlZCwgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBnbG9iYWwgY291bnRlcnMgd2lsbCBiZWNvbWUgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTA6XHRcdFx0cmV0dXJuO1xuIDk1MTpcdFxuIDk1MjpcdFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcdTAwMjZyY3VfbG9ja2VkKTtcbiA5NTM6XHRcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG4gOTU0Olx0XHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcbiA5NTU6XHR9XG4gOTU2Olx0XG4gOTU3Olx0I2lmZGVmIENPTkZJR19NRU1DR19WMVxuIDk1ODpcdC8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbiA5NTk6XHR1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuIDk2MDpcdHtcbiA5NjE6XHRcdGxvbmcgeDtcbiA5NjI6XHRcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbiA5NjM6XHRcbiA5NjQ6XHRcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpKVxuIDk2NTpcdFx0XHRyZXR1cm4gMDtcbiA5NjY6XHRcbiA5Njc6XHRcdHggPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XG4gOTY4Olx0I2lmZGVmIENPTkZJR19TTVBcbiA5Njk6XHRcdGlmICh4IFx1MDAzYyAwKVxuIDk3MDpcdFx0XHR4ID0gMDtcbiA5NzE6XHQjZW5kaWZcbiA5NzI6XHRcdHJldHVybiB4O1xuIDk3MzpcdH1cbiA5NzQ6XHRcbiA5NzU6XHR2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiA5NzY6XHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG4gOTc3Olx0e1xuIDk3ODpcdFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGlkeCk7XG4gOTc5Olx0XG4gOTgwOlx0XHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCAtdmFsdWUpO1xuIDk4MTpcdFx0X19tb2RfbWVtY2dfc3RhdGUocGFyZW50LCBpZHgsIHZhbHVlKTtcbiA5ODI6XHR9XG4gOTgzOlx0I2VuZGlmXG4gOTg0Olx0XG4gOTg1Olx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbiA5ODY6XHRcdFx0XHRcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxuIDk4NzpcdHtcbiA5ODg6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IHBuLVx1MDAzZW1lbWNnO1xuIDk4OTpcdFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc5NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbWVtb3J5IGNncm91cCBjb2RlIGFnYWluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBzdGF0cyBhcmUgYmVpbmcgZmx1c2hlZCBhbmQgYWdncmVnYXRlZC4gTGV0JiMzOTtzIHplcm8gaW4gb24gYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYCBhbmQgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gdGhhdCBzZWN0aW9uIGFyb3VuZCBsaW5lcyA0NTAwIHRvIDQ2NTAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEhvcGVmdWxseSwgdGhlIHN0cnVjdHVyZSBhbmQgbG9naWMgYXJlIHN0aWxsIGZyZXNoIGluIG15IG1pbmQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gcHJvdmlkaW5nIGFjY3VyYXRlIG1lbW9yeSB1c2FnZSByZXBvcnRzLiBUaGlzIG1pZ2h0IGhhdmUgYSBzcGVjaWZpYyB1c2UgY2FzZSBJIGhhdmUgaW4gbWluZCB3aGVyZSB1bmRlcnN0YW5kaW5nIHRoZSB0aW1pbmcgYW5kIGltcGFjdCBvZiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDUwMDpcdFx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbjQ1MDE6XHRcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXG40NTAyOlx0XHQgKi9cbjQ1MDM6XHRcdGxvbmcgKmxvY2FsO1xuNDUwNDpcdFx0LyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuNDUwNTpcdFx0bG9uZyAqcGVuZGluZztcbjQ1MDY6XHRcdC8qIHBvaW50ZXIgdG8gdGhlIHBhcmVudCYjMzk7cyBwZW5kaW5nIGNvdW50ZXJzLCBjb3VsZCBiZSBOVUxMICovXG40NTA3Olx0XHRsb25nICpwcGVuZGluZztcbjQ1MDg6XHRcdC8qIHBvaW50ZXIgdG8gdGhlIHBlcmNwdSBjb3VudGVycyB0byBiZSBhZ2dyZWdhdGVkICovXG40NTA5Olx0XHRsb25nICpjc3RhdDtcbjQ1MTA6XHRcdC8qIHBvaW50ZXIgdG8gdGhlIHBlcmNwdSBjb3VudGVycyBvZiB0aGUgbGFzdCBhZ2dyZWdhdGlvbiovXG40NTExOlx0XHRsb25nICpjc3RhdF9wcmV2O1xuNDUxMjpcdFx0Lyogc2l6ZSBvZiB0aGUgYWJvdmUgY291bnRlcnMgKi9cbjQ1MTM6XHRcdGludCBzaXplO1xuNDUxNDpcdH07XG40NTE1Olx0XG40NTE2Olx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxuNDUxNzpcdHtcbjQ1MTg6XHRcdGludCBpO1xuNDUxOTpcdFx0bG9uZyBkZWx0YSwgZGVsdGFfY3B1LCB2O1xuNDUyMDpcdFxuNDUyMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWMtXHUwMDNlc2l6ZTsgaSYjNDM7JiM0MzspIHtcbjQ1MjI6XHRcdFx0LypcbjQ1MjM6XHRcdFx0ICogQ29sbGVjdCB0aGUgYWdncmVnYXRlZCBwcm9wYWdhdGlvbiBjb3VudHMgb2YgZ3JvdXBzXG40NTI0Olx0XHRcdCAqIGJlbG93IHVzLiBXZSYjMzk7cmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSBhbmQgdGhpcyBpc1xuNDUyNTpcdFx0XHQgKiBhIGdsb2JhbCBjb3VudGVyLCBzbyB0aGUgZmlyc3QgY3ljbGUgd2lsbCBnZXQgdGhlbS5cbjQ1MjY6XHRcdFx0ICovXG40NTI3Olx0XHRcdGRlbHRhID0gYWMtXHUwMDNlcGVuZGluZ1tpXTtcbjQ1Mjg6XHRcdFx0aWYgKGRlbHRhKVxuNDUyOTpcdFx0XHRcdGFjLVx1MDAzZXBlbmRpbmdbaV0gPSAwO1xuNDUzMDpcdFxuNDUzMTpcdFx0XHQvKiBBZGQgQ1BVIGNoYW5nZXMgb24gdGhpcyBsZXZlbCBzaW5jZSB0aGUgbGFzdCBmbHVzaCAqL1xuNDUzMjpcdFx0XHRkZWx0YV9jcHUgPSAwO1xuNDUzMzpcdFx0XHR2ID0gUkVBRF9PTkNFKGFjLVx1MDAzZWNzdGF0W2ldKTtcbjQ1MzQ6XHRcdFx0aWYgKHYgIT0gYWMtXHUwMDNlY3N0YXRfcHJldltpXSkge1xuNDUzNTpcdFx0XHRcdGRlbHRhX2NwdSA9IHYgLSBhYy1cdTAwM2Vjc3RhdF9wcmV2W2ldO1xuNDUzNjpcdFx0XHRcdGRlbHRhICYjNDM7PSBkZWx0YV9jcHU7XG40NTM3Olx0XHRcdFx0YWMtXHUwMDNlY3N0YXRfcHJldltpXSA9IHY7XG40NTM4Olx0XHRcdH1cbjQ1Mzk6XHRcbjQ1NDA6XHRcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuNDU0MTpcdFx0XHRpZiAoZGVsdGFfY3B1IFx1MDAyNlx1MDAyNiBhYy1cdTAwM2Vsb2NhbClcbjQ1NDI6XHRcdFx0XHRhYy1cdTAwM2Vsb2NhbFtpXSAmIzQzOz0gZGVsdGFfY3B1O1xuNDU0MzpcdFxuNDU0NDpcdFx0XHRpZiAoZGVsdGEpIHtcbjQ1NDU6XHRcdFx0XHRhYy1cdTAwM2VhZ2dyZWdhdGVbaV0gJiM0Mzs9IGRlbHRhO1xuNDU0NjpcdFx0XHRcdGlmIChhYy1cdTAwM2VwcGVuZGluZylcbjQ1NDc6XHRcdFx0XHRcdGFjLVx1MDAzZXBwZW5kaW5nW2ldICYjNDM7PSBkZWx0YTtcbjQ1NDg6XHRcdFx0fVxuNDU0OTpcdFx0fVxuNDU1MDpcdH1cbjQ1NTE6XHRcbjQ1NTI6XHQjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG40NTUzOlx0c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbjQ1NTQ6XHR7XG40NTU1Olx0XHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbjQ1NTY6XHRcdGludCBuaWQ7XG40NTU3Olx0XG40NTU4Olx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNla21lbV9zdGF0KSkge1xuNDU1OTpcdFx0XHRpbnQga21lbSA9IGF0b21pY194Y2hnKFx1MDAyNm1lbWNnLVx1MDAzZWttZW1fc3RhdCwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbWNnIE9wdGltaXphdGlvbiBDb21taXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvbW1pdCYjMzk7cyBhYm91dCBvcHRpbWl6aW5nIGBtZW1jZ192bXN0YXRzYCB3aGVuIHdlICpkb24mIzM5O3QqIGhhdmUgYENPTkZJR19NRU1DR19WMWAgZW5hYmxlZC4gU28sIHRoZSBrZXkgaXMgdGhlIHYxIGNncm91cCBsZWdhY3kgc3R1ZmYuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdGFraW5nIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIG91dCBvZiB0aGUgYG1lbWNnX3Ztc3RhdHNgIHN0cnVjdCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aG9zZSBmaWVsZHMgYXJlIG9ubHkgdXNlZCBpbiB2MSBmb3IgYG1lbW9yeS5zdGF0YCBhbmQgd2hlbiByZXBhcmVudGluZyBvbiBvZmZsaW5lLiBUaGlzIGlzIGNvbmRpdGlvbmFsIHZpYSBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAuIEluIGVzc2VuY2UsIGlmIGl0IGlzIHYyIG9ubHksIHdlIHNhdmUgc29tZSBtZW1vcnkuCgpFc3NlbnRpYWxseSwgd2hlbiB0aGUgbGVnYWN5IHN1cHBvcnQgaXNuJiMzOTt0IHByZXNlbnQsIHRoZSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIGFuZCBgZmx1c2hfbm1pX3N0YXRzYCBmdW5jdGlvbnMgd2lsbCBub3cgcmV0dXJuIGBOVUxMYCBmb3IgYG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5YCBhbmQgYG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheWAuIFRoYXQmIzM5O3MgY3JpdGljYWwgYmVjYXVzZSB0aGVzZSBhcnJheXMgYXJlIG5vIGxvbmdlciBwcmVzZW50LCBzbyB0aGlzIHByZXZlbnRzIGFueSBhY2Nlc3MgdG8gdGhlIG9sZCwgbm93IG5vbi1leGlzdGVudCwgbG9jYWwgYXJyYXlzLiBUaGlzIGF2b2lkcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZnV6emFibGU/IEl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbWNnIGxvZ2ljLiBJdCYjMzk7cyBub3QgKmp1c3QqIGEgY29zbWV0aWMgY2hhbmdlOyBpdCYjMzk7cyBjaGFuZ2luZyBjb25kaXRpb25hbCBsb2dpYy4gSWYgdjEgaXMgb24sIGBzdGF0ZV9sb2NhbGAgaXMgdXNlZC4gSWYgaXQmIzM5O3Mgb2ZmLCBpdCBpcyBza2lwcGVkLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSEgSXQmIzM5O3MgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHNpbmNlIG1lbW9yeSBjZ3JvdXBzIGFyZSBmdW5kYW1lbnRhbCBhbmQgdXNlZCBldmVyeXdoZXJlIGFuZCBhcmUgZGVmaW5pdGVseSBmdXp6ZWQuCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX01FTUNHYCBpcyB0aGUgYmFzZSwgb2YgY291cnNlLCBhbmQgYENPTkZJR19NRU1DR19WMWAgaXMgdGhlIHN3aXRjaC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZWxldmFudCBjb25maWcgb3B0aW9ucywgbGlrZSBgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBpbml0L0tjb25maWdgIGZvciB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA4Nz1jb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5OTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBteSBndXQgdGVsbHMgbWUgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lcyAxMDcwIHRocm91Z2ggMTExMC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgc2VjdGlvbiBsaWtlbHkgaG91c2VzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgcmVsYXRlZCBkZXBlbmRlbmNpZXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBwYXJzZSB0aG9zZSBsaW5lcyBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2xzIGFuZCB0aGVpciBwcm9wZXJ0aWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhpcyBhcmVhIGJlaGF2ZXMgdW5kZXIgZGlmZmVyZW50IGNvbXBpbGF0aW9uIHNjZW5hcmlvcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgdGhpcyBzZWN0aW9uIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3NTpcdFxuMTA3NjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDc3Olx0XG4xMDc4Olx0Y29uZmlnIE1FTUNHXG4xMDc5Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDgwOlx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDgxOlx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4MjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4MzpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDg0Olx0XHRoZWxwXG4xMDg1Olx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwODY6XHRcbjEwODc6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA4ODpcdFx0Ym9vbFxuMTA4OTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5MDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5MTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTI6XHRcdGRlZmF1bHQgeVxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX1YxXG4xMTAyOlx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMDM6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMDQ6XHRcdGRlZmF1bHQgblxuMTEwNTpcdFx0aGVscFxuMTEwNjpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjExMDc6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbjExMDg6XHRcdCAgd2hpY2ggaGF2ZW4mIzM5O3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XG4xMTA5Olx0XHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xuMTExMDpcdFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbjExMTE6XHRcbjExMTI6XHRcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxuMTExMzpcdFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXG4xMTE0Olx0XHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cbjExMTU6XHRcbjExMTY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTExNzpcdFxuMTExODpcdGNvbmZpZyBCTEtfQ0dST1VQXG4xMTE5Olx0XHRib29sIFwmIzM0O0lPIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCBhbmQgRmx1c2hlcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBtZW1vcnkgY2dyb3VwJiMzOTtzIGNvcmUgYWNjb3VudGluZywgc3BlY2lmaWNhbGx5IHRoZSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgIGZ1bmN0aW9uIGluIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHJvdXRpbmUgd29ya3MsIGFuZCB3aGF0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgcmVmYWN0b3Jpbmcgb2YgYWNjb3VudGluZyBjb2RlIGFuZCB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRoYXQgY29kZS4gSSBrbm93IHRoZXJlIGhhdmUgYmVlbiBjaGFuZ2VzIHRoZXJlLCBzbyBsZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGdldHMgKmNhbGxlZCogZnJvbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hlbiB0aGUgZmx1c2ggb2NjdXJzLCB3aGF0IHRyaWdnZXJzIGl0LCBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIGFjdHVhbGx5IG1vdmluZy4gVGhhdCBzaG91bGQgZXhwb3NlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgZnVydGhlciBvcHRpbWl6YXRpb24gb3IgdW5kZXJzdGFuZGluZyBtaWdodCBiZSBuZWVkZWQuIEkgd2FudCB0byBidWlsZCBhIGJldHRlciBtb2RlbCBmb3IgdGhlIHRyYWRlIG9mZnMgaW52b2x2ZWQgaW4gdXBkYXRpbmcgdGhlIHN0YXRzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNvbnRleHQgd2lsbCByZWFsbHkgaGVscCBtZSBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYWNjb3VudGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTQ2MDg9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDYxMS1cbm1tL21lbWNvbnRyb2wuYzo0NjEyOnN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG5tbS9tZW1jb250cm9sLmMtNDYxMy17XG4tLVxubW0vbWVtY29udHJvbC5jPTUyMjE9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MjI3LVx0LmNzc19yZXNldCA9IG1lbV9jZ3JvdXBfY3NzX3Jlc2V0LFxubW0vbWVtY29udHJvbC5jOjUyMjg6XHQuY3NzX3JzdGF0X2ZsdXNoID0gbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2gsXG5tbS9tZW1jb250cm9sLmMtNTIyOS1cdC5hdHRhY2ggPSBtZW1fY2dyb3VwX2F0dGFjaCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IENvbnRyb2wgKG1lbWNvbnRyb2wuYykqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL21lbWNvbnRyb2wuY2AgZmlsZSBhZ2Fpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbWVtb3J5IGFjY291bnRpbmcgaXMgd29ya2luZywgYW5kIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBhbHdheXMgdG8gZXhhbWluZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7dmUgZ290IHF1ZXN0aW9ucyBhYm91dC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnksIG9yIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZywgb2YgdGhlIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgZnVuY3Rpb24uIEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIGhvdyBtZW1vcnkgc3RhdGlzdGljcyBhcmUgYWdncmVnYXRlZCBhbmQgd3JpdHRlbiB0byB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBhcmVhIG9mIHRoZSBjb2RlLi4uIEkmIzM5O2xsIGxvb2sgYXQgaXRzIHJvbGUgaW4gY29sbGVjdGluZyBhbmQgdXBkYXRpbmcgbWVtb3J5IHVzYWdlIHN0YXRzLCBhcyB3ZWxsIGFzIHdoZW4gaXQgaXMgY2FsbGVkIGFuZCB3aHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYxMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NjEyOlx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcbjQ2MTM6XHR7XG40NjE0Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XG40NjE1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuNDYxNjpcdFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0YztcbjQ2MTc6XHRcdHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCBhYztcbjQ2MTg6XHRcdGludCBuaWQ7XG40NjE5Olx0XG40NjIwOlx0XHRmbHVzaF9ubWlfc3RhdHMobWVtY2csIHBhcmVudCk7XG40NjIxOlx0XG40NjIyOlx0XHRzdGF0YyA9IHBlcl9jcHVfcHRyKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xuNDYyMzpcdFxuNDYyNDpcdFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XG40NjI1Olx0XHRcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlLFxuNDYyNjpcdFx0XHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXG40NjI3Olx0XHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxuNDYyODpcdFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcbjQ2Mjk6XHRcdFx0LmNzdGF0ID0gc3RhdGMtXHUwMDNlc3RhdGUsXG40NjMwOlx0XHRcdC5jc3RhdF9wcmV2ID0gc3RhdGMtXHUwMDNlc3RhdGVfcHJldixcbjQ2MzE6XHRcdFx0LnNpemUgPSBNRU1DR19WTVNUQVRfU0laRSxcbjQ2MzI6XHRcdH07XG40NjMzOlx0XHRtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKFx1MDAyNmFjKTtcbjQ2MzQ6XHRcbjQ2MzU6XHRcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuNDYzNjpcdFx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHMsXG40NjM3Olx0XHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG40NjM4Olx0XHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyxcbjQ2Mzk6XHRcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxuNDY0MDpcdFx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VldmVudHMsXG40NjQxOlx0XHRcdC5jc3RhdF9wcmV2ID0gc3RhdGMtXHUwMDNlZXZlbnRzX3ByZXYsXG40NjQyOlx0XHRcdC5zaXplID0gTlJfTUVNQ0dfRVZFTlRTLFxuNDY0MzpcdFx0fTtcbjQ2NDQ6XHRcdG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoXHUwMDI2YWMpO1xuNDY0NTpcdFxuNDY0NjpcdFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG40NjQ3Olx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF07XG40NjQ4Olx0XHRcdHN0cnVjdCBscnV2ZWNfc3RhdHMgKmxzdGF0cyA9IHBuLVx1MDAzZWxydXZlY19zdGF0cztcbjQ2NDk6XHRcdFx0c3RydWN0IGxydXZlY19zdGF0cyAqcGxzdGF0cyA9IE5VTEw7XG40NjUwOlx0XHRcdHN0cnVjdCBscnV2ZWNfc3RhdHNfcGVyY3B1ICpsc3RhdGM7XG40NjUxOlx0XG40NjUyOlx0XHRcdGlmIChwYXJlbnQpXG40NjUzOlx0XHRcdFx0cGxzdGF0cyA9IHBhcmVudC1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZWxydXZlY19zdGF0cztcbjQ2NTQ6XHRcbjQ2NTU6XHRcdFx0bHN0YXRjID0gcGVyX2NwdV9wdHIocG4tXHUwMDNlbHJ1dmVjX3N0YXRzX3BlcmNwdSwgY3B1KTtcbjQ2NTY6XHRcbjQ2NTc6XHRcdFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XG40NjU4Olx0XHRcdFx0LmFnZ3JlZ2F0ZSA9IGxzdGF0cy1cdTAwM2VzdGF0ZSxcbjQ2NTk6XHRcdFx0XHQubG9jYWwgPSBsc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWwsXG40NjYwOlx0XHRcdFx0LnBlbmRpbmcgPSBsc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbjQ2NjE6XHRcdFx0XHQucHBlbmRpbmcgPSBwbHN0YXRzID8gcGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcbjQ2NjI6XHRcdFx0XHQuY3N0YXQgPSBsc3RhdGMtXHUwMDNlc3RhdGUsXG40NjYzOlx0XHRcdFx0LmNzdGF0X3ByZXYgPSBsc3RhdGMtXHUwMDNlc3RhdGVfcHJldixcbjQ2NjQ6XHRcdFx0XHQuc2l6ZSA9IE5SX01FTUNHX05PREVfU1RBVF9JVEVNUyxcbjQ2NjU6XHRcdFx0fTtcbjQ2NjY6XHRcdFx0bWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShcdTAwMjZhYyk7XG40NjY3Olx0XG40NjY4Olx0XHR9XG40NjY5Olx0XHRXUklURV9PTkNFKHN0YXRjLVx1MDAzZXN0YXRzX3VwZGF0ZXMsIDApO1xuNDY3MDpcdFx0LyogV2UgYXJlIGluIGEgcGVyLWNwdSBsb29wIGhlcmUsIG9ubHkgZG8gdGhlIGF0b21pYyB3cml0ZSBvbmNlICovXG40NjcxOlx0XHRpZiAoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRzX3VwZGF0ZXMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYzNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgTWVtY2cgdjEgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBtZW1vcnkgY29udHJvbCBzdHVmZiwgc3BlY2lmaWNhbGx5IHRoZSB2MSBpbXBsZW1lbnRhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBzdGF0cyBhcmUgYWdncmVnYXRlZCBhbmQgbWFuYWdlZCwgc28gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBtZW1jZ19zdGF0X2FnZ3JlZ2F0ZWAsIGBtZW1jZ19ldmVudHNfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBhbmQgYHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbGAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZpdCB0b2dldGhlci4KClRoZW4sIHNpbmNlIEkmIzM5O20gYWxyZWFkeSBsb29raW5nIGF0IHRoYXQgYXJlYSBvZiBjb2RlLCBJJiMzOTtsbCBnbyBkZWVwZXIgYW5kIHNjcnV0aW5pemUgdGhlIGxvY2FsIGFzcGVjdHMsIHNwZWNpZmljYWxseSBgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbGAsIGBtZW1jZ19ldmVudHNfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBhbmQgYHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbGAuIFRoZXNlIGFyZSBmb3VuZCBpbiBib3RoIGBtbS9tZW1jb250cm9sLXYxLmNgIGFuZCBgbW0vbWVtY29udHJvbC5jYCwgc28gSSYjMzk7bGwgYmUgc3VyZSB0byBjaGVjayBib3RoLgoKTm93LCBhIGNydWNpYWwgYXNwZWN0IG9mIHVuZGVyc3RhbmRpbmcgdGhpcyBzeXN0ZW0gaXMgaWRlbnRpZnlpbmcgdGhlIHB1YmxpYyBpbnRlcmZhY2VzLCBzbyBsZXQmIzM5O3Mgem9vbSBvdXQgYSBiaXQuIEl0IGlzIHZpdGFsIHRvIHNlcGFyYXRlIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBmcm9tIGV4dGVybmFsIEFQSXMsIHNvIGxldCYjMzk7cyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBlbnRyeXBvaW50cyBvciBBUEkgZnVuY3Rpb25zLgoKVG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIEkmIzM5O2xsIHJldmlzaXQgYG1tL21lbWNvbnRyb2wtdjEuY2AgYW5kIGBtbS9tZW1jb250cm9sLmNgLgoKRmluYWxseSwgZm9yIGdvb2QgbWVhc3VyZSwgSSYjMzk7bGwgY2hlY2sgYG1tL21lbWNvbnRyb2wtdjEuaGAgdG8gc2VlIHdoYXQgSSBjYW4gZmluZCBhYm91dCB0aGUgZnVuY3Rpb24gaGVhZGVycywgc2luY2UgaGVhZGVyIGZpbGVzIGRlZmluZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBhcmUgdXNlZnVsIHRvIHF1aWNrbHkgZ3Jhc3Agd2hpY2ggZnVuY3Rpb25zIG1heSBiZSBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuICAgMjpcdFxuICAgMzpcdCNpZm5kZWYgX19NTV9NRU1DT05UUk9MX1YxX0hcbiAgIDQ6XHQjZGVmaW5lIF9fTU1fTUVNQ09OVFJPTF9WMV9IXG4gICA1Olx0XG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLWRlZnMuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdC8qIENncm91cCB2MSBhbmQgdjIgY29tbW9uIGRlY2xhcmF0aW9ucyAqL1xuICAxMDpcdFxuICAxMTpcdC8qXG4gIDEyOlx0ICogSXRlcmF0aW9uIGNvbnN0cnVjdHMgZm9yIHZpc2l0aW5nIGFsbCBjZ3JvdXBzICh1bmRlciBhIHRyZWUpLiAgSWZcbiAgMTM6XHQgKiBsb29wcyBhcmUgZXhpdGVkIHByZW1hdHVyZWx5IChicmVhayksIG1lbV9jZ3JvdXBfaXRlcl9icmVhaygpIG11c3RcbiAgMTQ6XHQgKiBiZSB1c2VkIGZvciByZWZlcmVuY2UgY291bnRpbmcuXG4gIDE1Olx0ICovXG4gIDE2Olx0I2RlZmluZSBmb3JfZWFjaF9tZW1fY2dyb3VwX3RyZWUoaXRlciwgcm9vdClcdFx0XFxcbiAgMTc6XHRcdGZvciAoaXRlciA9IG1lbV9jZ3JvdXBfaXRlcihyb290LCBOVUxMLCBOVUxMKTtcdFxcXG4gIDE4Olx0XHQgICAgIGl0ZXIgIT0gTlVMTDtcdFx0XHRcdFxcXG4gIDE5Olx0XHQgICAgIGl0ZXIgPSBtZW1fY2dyb3VwX2l0ZXIocm9vdCwgaXRlciwgTlVMTCkpXG4gIDIwOlx0XG4gIDIxOlx0dm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpO1xuICAyMjpcdFxuICAyMzpcdGludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7XG4gIDI0Olx0XG4gIDI1Olx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiAgMjY6XHRcdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG4pO1xuICAyNzpcdFxuICAyODpcdC8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cbiAgMjk6XHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gIDMwOlx0XG4gIDMxOlx0LyogV2hldGhlciBsZWdhY3kgbWVtb3J5JiM0Mztzd2FwIGFjY291bnRpbmcgaXMgYWN0aXZlICovXG4gIDMyOlx0c3RhdGljIGlubGluZSBib29sIGRvX21lbXN3X2FjY291bnQodm9pZClcbiAgMzM6XHR7XG4gIDM0Olx0XHRyZXR1cm4gIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XG4gIDM1Olx0fVxuICAzNjpcdFxuICAzNzpcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcbiAgMzg6XHR1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcbiAgMzk6XHR1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuICA0MDpcdGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuICA0MTpcdHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gIDQyOlx0XG4gIDQzOlx0dm9pZCBtZW1jZzFfbWVtY2dfaW5pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuICA0NDpcdFxuICA0NTpcdHN0cnVjdCBjZ3JvdXBfdGFza3NldDtcbiAgNDY6XHR2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuICA0NzpcdFxuICA0ODpcdC8qIGZvciBlbmNvZGluZyBjZnQtXHUwMDNlcHJpdmF0ZSB2YWx1ZSBvbiBmaWxlICovXG4gIDQ5Olx0ZW51bSByZXNfdHlwZSB7XG4gIDUwOlx0XHRfTUVNLFxuICA1MTpcdFx0X01FTVNXQVAsXG4gIDUyOlx0XHRfS01FTSxcbiAgNTM6XHRcdF9UQ1AsXG4gIDU0Olx0fTtcbiAgNTU6XHRcbiAgNTY6XHRib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCk7XG4gIDU3Olx0dm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcbiAgNTg6XHR2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuICA1OTpcdFxuICA2MDpcdHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiAgNjE6XHR2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcbiAgNjI6XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7XG4gIDYzOlx0XG4gIDY0Olx0dm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcyk7XG4gIDY1Olx0dm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbiAgNjY6XHR2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbiAgNjc6XHRcbiAgNjg6XHR2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiAgNjk6XHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuICA3MDpcdHZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiAgNzE6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcbiAgNzI6XHRcbiAgNzM6XHR2b2lkIG1lbWNnMV9hY2NvdW50X2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpO1xuICA3NDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfdGNwbWVtX2FjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gIDc1Olx0e1xuICA3NjpcdFx0cmV0dXJuIG1lbWNnLVx1MDAzZXRjcG1lbV9hY3RpdmU7XG4gIDc3Olx0fVxuICA3ODpcdGJvb2wgbWVtY2cxX2NoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbiAgNzk6XHRcdFx0XHQgZ2ZwX3QgZ2ZwX21hc2spO1xuICA4MDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTcxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBjZ3JvdXAgdjEgTWVtb3J5IFN0YXRpc3RpY3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgbWVtb3J5LnN0YXRgIHdvcmtzIHdpdGhpbiBjZ3JvdXAgdjEgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgbG9jYWwgdmFsdWVzIGFyZSBhY3R1YWxseSBiZWluZyByZWFkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBkaXNwbGF5aW5nIHRoZSBtZW1vcnkgc3RhdGlzdGljcyDigJMgdGhhdCBzaG91bGQgYmUgYG1lbW9yeV9zdGF0X3Nob3dgIOKAkyBvciBwZXJoYXBzIGEgZnVuY3Rpb24gbmFtZWQgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgbWVtY2cxX3N0YXRfZm9ybWF0YCwgaWYgdGhlcmUmIzM5O3MgYSBjZ3JvdXAgdjEgc3BlY2lmaWMgZm9ybWF0dGluZyBmdW5jdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9zdGF0X3Nob3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTIwMjg9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMDU4LVx0XHQubmFtZSA9IFwmIzM0O3N0YXRcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MjA1OTpcdFx0LnNlcV9zaG93ID0gbWVtb3J5X3N0YXRfc2hvdyxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDYwLVx0fSxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MjE9dm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpO1xubW0vbWVtY29udHJvbC12MS5oLTIyLVxubW0vbWVtY29udHJvbC12MS5oOjIzOmludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7XG5tbS9tZW1jb250cm9sLXYxLmgtMjQtXG4tLVxubW0vbWVtY29udHJvbC5jPTUwNDI9c3RhdGljIGludCBtZW1vcnlfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDQ5LVxubW0vbWVtY29udHJvbC5jOjUwNTA6aW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxubW0vbWVtY29udHJvbC5jLTUwNTEte1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTQ3PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTk4LVx0XHQubmFtZSA9IFwmIzM0O3N0YXRcJiMzNDssXG5tbS9tZW1jb250cm9sLmM6NTE5OTpcdFx0LnNlcV9zaG93ID0gbWVtb3J5X3N0YXRfc2hvdyxcbm1tL21lbWNvbnRyb2wuYy01MjAwLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxNjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipEZWx2aW5nIGludG8gTWVtb3J5IFN0YXRpc3RpY3MgaW4gbW0vbWVtY29udHJvbC5jKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBtZW1vcnlfc3RhdF9zaG93YCBmdW5jdGlvbiwgd2hpY2ggaXMsIGFzIHRoZSBuYW1lIGltcGxpZXMsIHNpdHVhdGVkIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgaG93IHRoZSBtZW1vcnkgY29udHJvbCBzdWJzeXN0ZW0gZXhwb3NlcyBpdHMgc3RhdGlzdGljcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1lbW9yeSB1c2FnZSBmaWd1cmVzIGFyZSBjYWxjdWxhdGVkIGFuZCBwcmVzZW50ZWQsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgY2dyb3Vwcy4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgZGF0YSBpcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXIsIHdoZXJlIGluIG1lbW9yeSBpdCBpcyBjYWxjdWxhdGVkIGFuZCBzdG9yZWQsIGFuZCBhbnkgaW1wbGljYXRpb25zIHRoaXMgaGFzIGZvciBwZXJmb3JtYW5jZSBvciBhY2N1cmFjeS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcm5hbHMgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwNTA6XHRpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG41MDUxOlx0e1xuNTA1MjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTtcbjUwNTM6XHRcdGNoYXIgKmJ1ZiA9IGttYWxsb2MoU0VRX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTtcbjUwNTQ6XHRcdHN0cnVjdCBzZXFfYnVmIHM7XG41MDU1Olx0XG41MDU2Olx0XHRpZiAoIWJ1ZilcbjUwNTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG41MDU4Olx0XHRzZXFfYnVmX2luaXQoXHUwMDI2cywgYnVmLCBTRVFfQlVGX1NJWkUpO1xuNTA1OTpcdFx0bWVtb3J5X3N0YXRfZm9ybWF0KG1lbWNnLCBcdTAwMjZzKTtcbjUwNjA6XHRcdHNlcV9wdXRzKG0sIGJ1Zik7XG41MDYxOlx0XHRrZnJlZShidWYpO1xuNTA2MjpcdFx0cmV0dXJuIDA7XG41MDYzOlx0fVxuNTA2NDpcdFxuNTA2NTpcdCNpZmRlZiBDT05GSUdfTlVNQVxuNTA2NjpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuNTA2NzpcdFx0XHRcdFx0XHRcdCAgICAgaW50IGl0ZW0pXG41MDY4Olx0e1xuNTA2OTpcdFx0cmV0dXJuIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgaXRlbSkgKlxuNTA3MDpcdFx0XHRtZW1jZ19wYWdlX3N0YXRlX291dHB1dF91bml0KGl0ZW0pO1xuNTA3MTpcdH1cbjUwNzI6XHRcbjUwNzM6XHRzdGF0aWMgaW50IG1lbW9yeV9udW1hX3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG41MDc0Olx0e1xuNTA3NTpcdFx0aW50IGk7XG41MDc2Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pO1xuNTA3NzpcdFxuNTA3ODpcdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XG41MDc5Olx0XG41MDgwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1lbW9yeV9zdGF0cyk7IGkmIzQzOyYjNDM7KSB7XG41MDgxOlx0XHRcdGludCBuaWQ7XG41MDgyOlx0XG41MDgzOlx0XHRcdGlmIChtZW1vcnlfc3RhdHNbaV0uaWR4IFx1MDAzZT0gTlJfVk1fTk9ERV9TVEFUX0lURU1TKVxuNTA4NDpcdFx0XHRcdGNvbnRpbnVlO1xuNTA4NTpcdFxuNTA4NjpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVzXCYjMzQ7LCBtZW1vcnlfc3RhdHNbaV0ubmFtZSk7XG41MDg3Olx0XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuNTA4ODpcdFx0XHRcdHU2NCBzaXplO1xuNTA4OTpcdFx0XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwMDgKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogODgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIE1lbW9yeSBDZ3JvdXAgU3RhdCBBZ2dyZWdhdGlvbioqCgpPa2F5LCBzbyBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IGB0cnVlYCBoZXJlLiBUaGlzIGNvbW1pdCB0b3VjaGVzIGNvcmUgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFnZ3JlZ2F0aW9uIGxvZ2ljLCBhbmQgdGhhdCYjMzk7cyBhbHdheXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGltcGFjdGluZyBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIGBmbHVzaF9ubWlfc3RhdHNgLCBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCBhbmQgdGhlIGhhbmRsaW5nIG9mIGBtZW1jZ192bXN0YXRzYCBmaWVsZHMgKGBzdGF0ZV9sb2NhbGAsIGBldmVudHNfbG9jYWxgKS4gVGhlc2UgZmllbGRzIGFyZSBjb25kaXRpb25hbGx5IGFsbG9jYXRlZCBhbmQgYWdncmVnYXRlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19NRU1DR19WMWAgc2V0dGluZywgbWVhbmluZyB2MSBtZW1vcnkgY29udHJvbGxlci4gU3RhdCBmbHVzaGVzLCB0cmlnZ2VyZWQgYnkgcmVhZGluZyBgbWVtb3J5LnN0YXRgIG9yIGR1cmluZyByZWNsYW1hdGlvbi9hY2NvdW50aW5nIG9wZXJhdGlvbnMsIGFyZSBhbGwgYWZmZWN0ZWQsIG1ha2luZyB0aGlzIGFyZWEgYSBiaXQgb2YgYSBtaW5lZmllbGQuCgpJJiMzOTt2ZSB0YWtlbiBhIHF1aWNrIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIGBNRU1DR2AgaXMgdGhlIGJhc2UgY29udHJvbGxlciwgYE1FTUNHX1YxYCBlbmFibGVzIHRoZSBsZWdhY3kgdjEgZnVuY3Rpb25hbGl0eS4gSSBhbHNvIG5vdGljZWQgYENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ2AgaXMgaW52b2x2ZWQgd2l0aCBgZmx1c2hfbm1pX3N0YXRzYCwgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gYSBmZXcgbW9yZSBmbGFncywgbGlrZSBgSEFWRV9OTUlgLCBgQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTYCwgYW5kIGBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR2AuCgpOb3csIGZvciBmb2N1cyBzeW1ib2xzOiBJJiMzOTt2ZSBpZGVudGlmaWVkIHNvbWUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cy9BUEkgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIHN1YnN5c3RlbSB0aGF0IGFyZSByZWxhdGVkIHRvIHN0YXQgdXBkYXRlcywgZmx1c2hpbmcsIG9yIGNncm91cCBvcGVyYXRpb25zLiBUaG9zZSBmdW5jdGlvbnMgYXJlIHRoZSBtYWluIHRhcmdldC4gU3BlY2lmaWNhbGx5OiBgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbGAsIGBtZW1jZ19ldmVudHNfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsYCwgYW5kIGBtZW1vcnlfc3RhdF9zaG93YC4gSSYjMzk7dmUgdmVyaWZpZWQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgLCBlbnN1cmluZyB0aGV5IGFyZSBub24tc3RhdGljIGFuZCByZWxldmFudCB0byBtZW1vcnkgY2dyb3VwIG1hbmFnZW1lbnQuIEkgYWxzbyBnbGFuY2VkIG92ZXIgYG1lbWNnMV9zdGF0X2Zvcm1hdGAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaW1wb3J0YW50IHdhcyBtaXNzZWQuCgpJJiMzOTt2ZSBnb25lIHRocm91Z2ggdGhlIHByb21wdCByZXF1aXJlbWVudHMuIEJhc2VkIG9uIHRoZSBhbmFseXNpcywgSSBjYW4gY29uZmlkZW50bHkgY29uc3RydWN0IHRoZSByZXF1aXJlZCBvdXRwdXQgZm9yIGBzZXQtcmVzdWx0c2AuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dCwgYW5kIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X3N0YXRfc2hvdyYjMzQ7LAogICAgJiMzNDttZW1jZ19wYWdlX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O21lbWNnX2V2ZW50c19sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSByZW1vdmVzIGxlZ2FjeSB2MS1vbmx5IGxvY2FsIHN0YXRpc3RpY3MgKHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwpIGZyb20gc3RydWN0IG1lbWNnX3Ztc3RhdHMgd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQsIGFuZCBhZGRzIE5VTEwgY2hlY2tzIGR1cmluZyBzdGF0cyBmbHVzaGluZyBhbmQgYWdncmVnYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1jZyBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB3aXRoIGJvdGggY2dyb3VwIHYxIGFuZCB2MiB3b3JrbG9hZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X3N0YXRfc2hvdyYjMzQ7LAogICAgJiMzNDttZW1jZ19wYWdlX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O21lbWNnX2V2ZW50c19sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSByZW1vdmVzIGxlZ2FjeSB2MS1vbmx5IGxvY2FsIHN0YXRpc3RpY3MgKHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwpIGZyb20gc3RydWN0IG1lbWNnX3Ztc3RhdHMgd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQsIGFuZCBhZGRzIE5VTEwgY2hlY2tzIGR1cmluZyBzdGF0cyBmbHVzaGluZyBhbmQgYWdncmVnYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1jZyBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB3aXRoIGJvdGggY2dyb3VwIHYxIGFuZCB2MiB3b3JrbG9hZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxuXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzLlxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxuMy4gS0FTQU4gdnMgS01TQU46IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYGxvY2FsYCBpZiBhIGNoZWNrIHdhcyBtaXNzaW5nLCBvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBLTVNBTiBzcGVjaWZpY2FsbHkgZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIG5laXRoZXIgb2Ygd2hpY2ggYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaGVyZS5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjI5YmIzYjVlZDQ5OGMyMWRiZGYxNWE1YmI0ZmYwNTVhYzJmYTIxYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTA6MzM6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggN2NlNTBiY2NmMTI2NC4uYjk4YjJkNjhjNjJiZSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNjc1LDkgJiM0Mzs2NzUsMTEgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMgewogCWxvbmcJCQlzdGF0ZVtNRU1DR19WTVNUQVRfU0laRV07CiAJdW5zaWduZWQgbG9uZwkJZXZlbnRzW05SX01FTUNHX0VWRU5UU107CiAKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHX1YxCiAJLyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgJmFtcDsgZXZlbnRzICovCiAJbG9uZwkJCXN0YXRlX2xvY2FsW01FTUNHX1ZNU1RBVF9TSVpFXTsKIAl1bnNpZ25lZCBsb25nCQlldmVudHNfbG9jYWxbTlJfTUVNQ0dfRVZFTlRTXTsKJiM0MzsjZW5kaWYKIAogCS8qIFBlbmRpbmcgY2hpbGQgY291bnRzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovCiAJbG9uZwkJCXN0YXRlX3BlbmRpbmdbTUVNQ0dfVk1TVEFUX1NJWkVdOwpAQCAtNjg3LDYgJiM0Mzs2ODksMzIgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMgewogCWF0b21pY19sb25nX3QJCXN0YXRzX3VwZGF0ZXM7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5CiYjNDM7ICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuCiYjNDM7ICovCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMQomIzQzO3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7CXJldHVybiBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX2xvY2FsOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKgogICogbWVtY2cgYW5kIGxydXZlYyBzdGF0cyBmbHVzaGluZwogICoKQEAgLTQ0NjgsNyAmIzQzOzQ0OTYsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCB7CiAJLyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovCiAJbG9uZyAqYWdncmVnYXRlOwotCS8qIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljaGFsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgKi8KJiM0MzsJLyoKJiM0MzsJICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG8KJiM0MzsJICogc2tpcCB1cGRhdGluZyB0aGVtIChzZWUgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSkKJiM0MzsJICovCiAJbG9uZyAqbG9jYWw7CiAJLyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqLwogCWxvbmcgKnBlbmRpbmc7CkBAIC00NTA3LDcgJiM0Mzs0NTM4LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKQogCQl9CiAKIAkJLyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqLwotCQlpZiAoZGVsdGFfY3B1KQomIzQzOwkJaWYgKGRlbHRhX2NwdSAmYW1wOyZhbXA7IGFjLSZndDtsb2NhbCkKIAkJCWFjLSZndDtsb2NhbFtpXSAmIzQzOz0gZGVsdGFfY3B1OwogCiAJCWlmIChkZWx0YSkgewpAQCAtNDUyMSw2ICYjNDM7NDU1Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYykKICNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUMKIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiB7CiYjNDM7CWxvbmcgKnN0YXRlX2xvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpOwogCWludCBuaWQ7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmFtcDttZW1jZy0mZ3Q7a21lbV9zdGF0KSkgewpAQCAtNDUyOCw3ICYjNDM7NDU2MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJCWludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pOwogCiAJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZVtpbmRleF0gJiM0Mzs9IGttZW07Ci0JCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IGttZW07CiYjNDM7CQlpZiAoc3RhdGVfbG9jYWwpCiYjNDM7CQkJc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtOwogCQlpZiAocGFyZW50KQogCQkJcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0ga21lbTsKIAl9CkBAIC00NTUwLDcgJiM0Mzs0NTgzLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAkJCWlmIChwbHN0YXRzKQogCQkJCXBsc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiOwogCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjsKLQkJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiYjNDM7CQkJaWYgKHN0YXRlX2xvY2FsKQomIzQzOwkJCQlzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQlpZiAocGFyZW50KQogCQkJCXBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCX0KQEAgLTQ1NjMsNyAmIzQzOzQ1OTcsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCQkJaWYgKHBsc3RhdHMpCiAJCQkJcGxzdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiOwotCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKJiM0MzsJCQlpZiAoc3RhdGVfbG9jYWwpCiYjNDM7CQkJCXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJCWlmIChwYXJlbnQpCiAJCQkJcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJfQpAQCAtNDU4OCw3ICYjNDM7NDYyMyw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpCiAKIAlhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHsKIAkJLmFnZ3JlZ2F0ZSA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZSwKLQkJLmxvY2FsID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsLAomIzQzOwkJLmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLAogCQkucGVuZGluZyA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nLAogCQkucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmcgOiBOVUxMLAogCQkuY3N0YXQgPSBzdGF0Yy0mZ3Q7c3RhdGUsCkBAIC00NTk5LDcgJiM0Mzs0NjM0LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSkKIAogCWFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkgewogCQkuYWdncmVnYXRlID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50cywKLQkJLmxvY2FsID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19sb2NhbCwKJiM0MzsJCS5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksCiAJCS5wZW5kaW5nID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19wZW5kaW5nLAogCQkucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19wZW5kaW5nIDogTlVMTCwKIAkJLmNzdGF0ID0gc3RhdGMtJmd0O2V2ZW50cywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYW55IGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgY29uZGl0aW9uYWwgbG9naWMsIGFyZSB3b3J0aCBhIGNsb3NlciBsb29rLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gT2theSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AuIFRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvZiBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBiYXNlZCBvbiBgQ09ORklHX01FTUNHX1YxYC4gSW50ZXJlc3RpbmcuIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgaGVscGVyIGZ1bmN0aW9ucywgYG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5YCBhbmQgYG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheWAsIHRvIGFic3RyYWN0IGFjY2VzcyB0byB0aGVzZSBmaWVsZHMuIFRoYXQmIzM5O3MgZ29vZCBwcmFjdGljZSwgbWFrZXMgdGhlIGNvZGUgY2xlYW5lci4gVGhlIHVzZSBvZiB0aGVzZSBhY2Nlc3NvcnMgc2VlbXMgd2VsbCB0aG91Z2h0IG91dCB0byBrZWVwIHRoZSBhYnN0cmFjdGlvbiBjbGVhbi4KCkl0IGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgbW9kaWZpY2F0aW9ucyBhcmUgaW4gYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoKWAsIGBmbHVzaF9ubWlfc3RhdHMoKWAsIGFuZCBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goKWAuIFdlJiMzOTtyZSBzZWVpbmcgY2hlY2tzIGZvciBgYWMtJmd0O2xvY2FsYCBiZWZvcmUgd3JpdGluZywgY2hlY2tzIGluIGBmbHVzaF9ubWlfc3RhdHNgIGJlZm9yZSB3cml0aW5nIHRvIGBzdGF0ZV9sb2NhbGAsIGFuZCBhIGdlbmVyYWwgcG9wdWxhdGlvbiBvZiBgLmxvY2FsYCBpbiB0aGUgYGZsdXNoYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkgYnkgdGhlc2UgZnVuY3Rpb25zLiBUaGUgY29kZSBwYXRocyBhbGwgc2VlbSBhcHByb3ByaWF0ZSBhdCBhIGZpcnN0IGdsYW5jZS4KCk5vdywgbGV0JiMzOTtzIGdldCBhIGJpZ2dlciBwaWN0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIHF1aWNrIGBncmVwYCBmb3IgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgYWNyb3NzIHRoZSByZWxldmFudCBjb2RlYmFzZSwgc3BlY2lmaWNhbGx5IGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBlbHNld2hlcmUsIHRvIGVuc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHVuZXhwZWN0ZWQgdXNlcy4gVGhpcyB3aWxsIHRlbGwgbWUgKmV4YWN0bHkqIHdoZXJlIHRoZXNlIGZpZWxkcyBhcmUgYWNjZXNzZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgYSBjbGVhciB2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoc3RhdGVfbG9jYWx8ZXZlbnRzX2xvY2FsKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTA2IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jPTEyOTM9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMjk2LVx0c3RydWN0IGludGVsX3VjICp1YyA9IGNvbnRhaW5lcl9vZihndWMsIHR5cGVvZigqdWMpLCBndWMpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMjk3Olx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlIGxvZ19idWZfc3RhdGVfbG9jYWw7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTgtXHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgKmxvZ19idWZfc3RhdGU7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzEzLVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jOjEzMTQ6XHRtZW1jcHkoXHUwMDI2bG9nX2J1Zl9zdGF0ZV9sb2NhbCwgbG9nX2J1Zl9zdGF0ZSwgc2l6ZW9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSkpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzE1LVx0YnVmZmVyX3NpemUgPSBpbnRlbF9ndWNfZ2V0X2xvZ19idWZmZXJfc2l6ZShcdTAwMjZndWMtXHUwMDNlbG9nLCBHVUNfQ0FQVFVSRV9MT0dfQlVGRkVSKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNjpcdHJlYWRfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5yZWFkX3B0cjtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNzpcdHdyaXRlX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuc2FtcGxlZF93cml0ZV9wdHI7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jOjEzMTg6XHRmdWxsX2NvdW50ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5idWZmZXJfZnVsbF9jbnQ7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTktXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMjAtXHQvKiBCb29ra2VlcGluZyBzdHVmZiAqL1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzIxOlx0Z3VjLVx1MDAzZWxvZy5zdGF0c1tHVUNfQ0FQVFVSRV9MT0dfQlVGRkVSXS5mbHVzaCAmIzQzOz0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbHVzaF90b19maWxlO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzIyLVx0bmV3X292ZXJmbG93ID0gaW50ZWxfZ3VjX2NoZWNrX2xvZ19idWZfb3ZlcmZsb3coXHUwMDI2Z3VjLVx1MDAzZWxvZywgR1VDX0NBUFRVUkVfTE9HX0JVRkZFUixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM9Mzc1PXN0YXRpYyB2b2lkIF9ndWNfbG9nX2NvcHlfZGVidWdsb2dzX2Zvcl9yZWxheShzdHJ1Y3QgaW50ZWxfZ3VjX2xvZyAqbG9nKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy0zNzktXHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgKmxvZ19idWZfc3RhdGUsICpsb2dfYnVmX3NuYXBzaG90X3N0YXRlO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjM4MDpcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTM4MS1cdGVudW0gZ3VjX2xvZ19idWZmZXJfdHlwZSB0eXBlO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MTgtXHRcdCAqL1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQxOTpcdFx0bWVtY3B5KFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsIGxvZ19idWZfc3RhdGUsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDIwLVx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSkpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyMS1cdFx0YnVmZmVyX3NpemUgPSBpbnRlbF9ndWNfZ2V0X2xvZ19idWZmZXJfc2l6ZShsb2csIHR5cGUpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyMjpcdFx0cmVhZF9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnJlYWRfcHRyO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyMzpcdFx0d3JpdGVfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5zYW1wbGVkX3dyaXRlX3B0cjtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0MjQ6XHRcdGZ1bGxfY250ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5idWZmZXJfZnVsbF9jbnQ7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDI1LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyNi1cdFx0LyogQm9va2tlZXBpbmcgc3R1ZmYgKi9cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0Mjc6XHRcdGxvZy1cdTAwM2VzdGF0c1t0eXBlXS5mbHVzaCAmIzQzOz0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbHVzaF90b19maWxlO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyOC1cdFx0bmV3X292ZXJmbG93ID0gaW50ZWxfZ3VjX2NoZWNrX2xvZ19idWZfb3ZlcmZsb3cobG9nLCB0eXBlLCBmdWxsX2NudCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQzNS1cdFx0LyogRmlyc3QgY29weSB0aGUgc3RhdGUgc3RydWN0dXJlIGluIHNuYXBzaG90IGJ1ZmZlciAqL1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQzNjpcdFx0bWVtY3B5KGxvZ19idWZfc25hcHNob3Rfc3RhdGUsIFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDM3LVx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSkpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jPTEzODg9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgeGVfZ3VjICpndWMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTM5MS1cdHN0cnVjdCB4ZV91YyAqdWMgPSBjb250YWluZXJfb2YoZ3VjLCB0eXBlb2YoKnVjKSwgZ3VjKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjEzOTI6XHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgbG9nX2J1Zl9zdGF0ZV9sb2NhbDtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTEzOTMtXHRzdHJ1Y3QgX19ndWNfY2FwdHVyZV9idWZzdGF0ZSBidWY7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQwNi1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQwNzpcdHhlX21hcF9tZW1jcHlfZnJvbShndWNfdG9feGUoZ3VjKSwgXHUwMDI2bG9nX2J1Zl9zdGF0ZV9sb2NhbCwgXHUwMDI2Z3VjLVx1MDAzZWxvZy5iby1cdTAwM2V2bWFwLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQwOC1cdFx0XHQgICBsb2dfYnVmX3N0YXRlX29mZnNldCwgc2l6ZW9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSkpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0MTAtXHRidWZmZXJfc2l6ZSA9IFhFX0dVQ19MT0dfU1RBVEVfQ0FQVFVSRV9CVUZGRVJfU0laRTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTE6XHRyZWFkX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwucmVhZF9wdHI7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDEyOlx0d3JpdGVfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5zYW1wbGVkX3dyaXRlX3B0cjtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTM6XHRmdWxsX2NvdW50ID0gRklFTERfR0VUKEdVQ19MT0dfQlVGRkVSX1NUQVRFX0JVRkZFUl9GVUxMX0NOVCwgbG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE0LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQxNS1cdC8qIEJvb2trZWVwaW5nIHN0dWZmICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDE2Olx0dG1wID0gRklFTERfR0VUKEdVQ19MT0dfQlVGRkVSX1NUQVRFX0ZMVVNIX1RPX0ZJTEUsIGxvZ19idWZfc3RhdGVfbG9jYWwuZmxhZ3MpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQxNy1cdGd1Yy1cdTAwM2Vsb2cuc3RhdHNbR1VDX0xPR19UWVBFX1NUQVRFX0NBUFRVUkVdLmZsdXNoICYjNDM7PSB0bXA7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQ1OC1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQ1OTpcdGxvZ19idWZfc3RhdGVfbG9jYWwuZmxhZ3MgXHUwMDI2PSB+R1VDX0xPR19CVUZGRVJfU1RBVEVfRkxVU0hfVE9fRklMRTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjAtXHR4ZV9tYXBfd3IoZ3VjX3RvX3hlKGd1YyksIFx1MDAyNmd1Yy1cdTAwM2Vsb2cuYm8tXHUwMDNldm1hcCxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjEtXHRcdCAgbG9nX2J1Zl9zdGF0ZV9vZmZzZXQgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlLCBmbGFncyksIHUzMixcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0NjI6XHRcdCAgbG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDYzLVx0X19ndWNfY2FwdHVyZV9mbHVzaGxvZ19jb21wbGV0ZShndWMpO1xuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaD0xOT1zdHJ1Y3QgcmRtYV9jZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaC0yOS1cdHN0cnVjdCBjZ3JvdXBfZmlsZVx0XHRldmVudHNfZmlsZTtcbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaDozMDpcdHN0cnVjdCBjZ3JvdXBfZmlsZVx0XHRldmVudHNfbG9jYWxfZmlsZTtcbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaC0zMS19O1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaD0zNT1zdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC00OC1cdGF0b21pY19sb25nX3QgZXZlbnRzW0hVR0VfTUFYX0hTVEFURV1bSFVHRVRMQl9OUl9NRU1PUllfRVZFTlRTXTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo0OTpcdGF0b21pY19sb25nX3QgZXZlbnRzX2xvY2FsW0hVR0VfTUFYX0hTVEFURV1bSFVHRVRMQl9OUl9NRU1PUllfRVZFTlRTXTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC01MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNTQtXHQvKiBIYW5kbGUgZm9yIFwmIzM0O2h1Z2V0bGIuZXZlbnRzLmxvY2FsXCYjMzQ7ICovXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg6NTU6XHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2xvY2FsX2ZpbGVbSFVHRV9NQVhfSFNUQVRFXTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC01Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTIzMS1cdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfZmlsZTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjIzMjpcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTIzMy1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNDEtXHRhdG9taWNfbG9uZ190XHRcdG1lbW9yeV9ldmVudHNbTUVNQ0dfTlJfTUVNT1JZX0VWRU5UU107XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNDI6XHRhdG9taWNfbG9uZ190XHRcdG1lbW9yeV9ldmVudHNfbG9jYWxbTUVNQ0dfTlJfTUVNT1JZX0VWRU5UU107XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNDMtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTQ2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk0Ny1cdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5NDg6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05NDktXHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQwNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNDEwLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTQxMTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQxMi1cdFx0XHRcdFx0XHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4tLVxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oPTQyPXN0cnVjdCBtaXNjX3JlcyB7XG4tLVxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTQ2LVx0YXRvbWljNjRfdCBldmVudHM7XG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg6NDc6XHRhdG9taWM2NF90IGV2ZW50c19sb2NhbDtcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC00OC19O1xuLS1cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaD01Nj1zdHJ1Y3QgbWlzY19jZyB7XG4tLVxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTYxLVx0LyogbWlzYy5ldmVudHMubG9jYWwgKi9cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDo2MjpcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZTtcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC02My1cbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0xMjU9c3RhdGljIHZvaWQgbWlzY19jZ19ldmVudChlbnVtIG1pc2NfcmVzX3R5cGUgdHlwZSwgc3RydWN0IG1pc2NfY2cgKmNnKVxua2VybmVsL2Nncm91cC9taXNjLmMtMTI2LXtcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjEyNzpcdGF0b21pYzY0X2luYyhcdTAwMjZjZy1cdTAwM2VyZXNbdHlwZV0uZXZlbnRzX2xvY2FsKTtcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjEyODpcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZjZy1cdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XG5rZXJuZWwvY2dyb3VwL21pc2MuYy0xMjktXG4tLVxua2VybmVsL2Nncm91cC9taXNjLmM9MzY3PXN0YXRpYyBpbnQgX19taXNjX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIGJvb2wgbG9jYWwpXG4tLVxua2VybmVsL2Nncm91cC9taXNjLmMtMzc0LVx0XHRpZiAobG9jYWwpXG5rZXJuZWwvY2dyb3VwL21pc2MuYzozNzU6XHRcdFx0ZXZlbnRzID0gYXRvbWljNjRfcmVhZChcdTAwMjZjZy1cdTAwM2VyZXNbaV0uZXZlbnRzX2xvY2FsKTtcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTM3Ni1cdFx0ZWxzZVxuLS1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM4ND1zdGF0aWMgaW50IG1pc2NfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0zODgtXG5rZXJuZWwvY2dyb3VwL21pc2MuYzozODk6c3RhdGljIGludCBtaXNjX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0zOTAte1xuLS1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM5NT1zdGF0aWMgc3RydWN0IGNmdHlwZSBtaXNjX2NnX2ZpbGVzW10gPSB7XG4tLVxua2VybmVsL2Nncm91cC9taXNjLmMtNDIzLVx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG5rZXJuZWwvY2dyb3VwL21pc2MuYzo0MjQ6XHRcdC5maWxlX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBtaXNjX2NnLCBldmVudHNfbG9jYWxfZmlsZSksXG5rZXJuZWwvY2dyb3VwL21pc2MuYzo0MjU6XHRcdC5zZXFfc2hvdyA9IG1pc2NfZXZlbnRzX2xvY2FsX3Nob3csXG5rZXJuZWwvY2dyb3VwL21pc2MuYy00MjYtXHR9LFxuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTQ5PXN0cnVjdCBwaWRzX2Nncm91cCB7XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtNjEtXHRzdHJ1Y3QgY2dyb3VwX2ZpbGVcdFx0ZXZlbnRzX2ZpbGU7XG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo2MjpcdHN0cnVjdCBjZ3JvdXBfZmlsZVx0XHRldmVudHNfbG9jYWxfZmlsZTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTYzLVxua2VybmVsL2Nncm91cC9waWRzLmMtNjQtXHRhdG9taWM2NF90XHRcdFx0ZXZlbnRzW05SX1BJRENHX0VWRU5UU107XG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo2NTpcdGF0b21pYzY0X3RcdFx0XHRldmVudHNfbG9jYWxbTlJfUElEQ0dfRVZFTlRTXTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTY2LX07XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmM9MjQzPXN0YXRpYyB2b2lkIHBpZHNfZXZlbnQoc3RydWN0IHBpZHNfY2dyb3VwICpwaWRzX2ZvcmtpbmcsXG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtMjQ4LVx0LyogT25seSBsb2cgdGhlIGZpcnN0IHRpbWUgbGltaXQgaXMgaGl0LiAqL1xua2VybmVsL2Nncm91cC9waWRzLmM6MjQ5Olx0aWYgKGF0b21pYzY0X2luY19yZXR1cm4oXHUwMDI2cC1cdTAwM2VldmVudHNfbG9jYWxbUElEQ0dfRk9SS0ZBSUxdKSA9PSAxKSB7XG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTAtXHRcdHByX2luZm8oXCYjMzQ7Y2dyb3VwOiBmb3JrIHJlamVjdGVkIGJ5IHBpZHMgY29udHJvbGxlciBpbiBcJiMzNDspO1xuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI1NS1cdCAgICBjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMpIHtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI1NjpcdFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNnAtXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xua2VybmVsL2Nncm91cC9waWRzLmMtMjU3LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtMjU5LVxua2VybmVsL2Nncm91cC9waWRzLmM6MjYwOlx0YXRvbWljNjRfaW5jKFx1MDAyNnBpZHNfb3Zlcl9saW1pdC1cdTAwM2VldmVudHNfbG9jYWxbUElEQ0dfTUFYXSk7XG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNjE6XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2cGlkc19vdmVyX2xpbWl0LVx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI2Mi1cbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0zNjE9c3RhdGljIGludCBfX3BpZHNfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgYm9vbCBsb2NhbClcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0zNzEtXHR9XG5rZXJuZWwvY2dyb3VwL3BpZHMuYzozNzI6XHRldmVudHMgPSBsb2NhbCA/IHBpZHMtXHUwMDNlZXZlbnRzX2xvY2FsIDogcGlkcy1cdTAwM2VldmVudHM7XG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0zNzMtXG4tLVxua2VybmVsL2Nncm91cC9waWRzLmM9Mzc4PXN0YXRpYyBpbnQgcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTM4My1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjM4NDpzdGF0aWMgaW50IHBpZHNfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTM4NS17XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmM9MzkwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHBpZHNfZmlsZXNbXSA9IHtcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy00MTQtXHRcdC5uYW1lID0gXCYjMzQ7ZXZlbnRzLmxvY2FsXCYjMzQ7LFxua2VybmVsL2Nncm91cC9waWRzLmM6NDE1Olx0XHQuc2VxX3Nob3cgPSBwaWRzX2V2ZW50c19sb2NhbF9zaG93LFxua2VybmVsL2Nncm91cC9waWRzLmM6NDE2Olx0XHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGlkc19jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTQxNy1cdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTc1PXN0cnVjdCByZG1hY2dfcmVzb3VyY2VfcG9vbCB7XG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtODktXHR1NjRcdFx0XHRldmVudHNfYWxsb2NfZmFpbFtSRE1BQ0dfUkVTT1VSQ0VfTUFYXTtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjkwOlx0dTY0XHRcdFx0ZXZlbnRzX2xvY2FsX21heFtSRE1BQ0dfUkVTT1VSQ0VfTUFYXTtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjkxOlx0dTY0XHRcdFx0ZXZlbnRzX2xvY2FsX2FsbG9jX2ZhaWxbUkRNQUNHX1JFU09VUkNFX01BWF07XG5rZXJuZWwvY2dyb3VwL3JkbWEuYy05Mi19O1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTEzOT1zdGF0aWMgYm9vbCBycG9vbF9oYXNfcGVyc2lzdGVudF9zdGF0ZShzdHJ1Y3QgcmRtYWNnX3Jlc291cmNlX3Bvb2wgKnJwb29sKVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTE1MC1cdFx0ICAgIHJwb29sLVx1MDAzZWV2ZW50c19tYXhbaV0gfHxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MTpcdFx0ICAgIHJwb29sLVx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gfHxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTE1Mi1cdFx0ICAgIHJwb29sLVx1MDAzZWV2ZW50c19hbGxvY19mYWlsW2ldIHx8XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoxNTM6XHRcdCAgICBycG9vbC1cdTAwM2VldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtpXSlcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTE1NC1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz0yNTk9c3RhdGljIHZvaWQgcmRtYWNnX2V2ZW50X2xvY2tlZChzdHJ1Y3QgcmRtYV9jZ3JvdXAgKmNnLFxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTI3MS1cdGlmIChycG9vbCkge1xua2VybmVsL2Nncm91cC9yZG1hLmM6MjcyOlx0XHRycG9vbC1cdTAwM2VldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtpbmRleF0mIzQzOyYjNDM7O1xua2VybmVsL2Nncm91cC9yZG1hLmM6MjczOlx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2Y2ctXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xua2VybmVsL2Nncm91cC9yZG1hLmMtMjc0LVx0fVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTI3OC1cdGlmIChycG9vbCkge1xua2VybmVsL2Nncm91cC9yZG1hLmM6Mjc5Olx0XHRycG9vbC1cdTAwM2VldmVudHNfbG9jYWxfbWF4W2luZGV4XSYjNDM7JiM0Mzs7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyODA6XHRcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZvdmVyX2NnLVx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTI4MS1cdH1cbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz02ODg9c3RhdGljIGludCByZG1hY2dfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03MTYtXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo3MTc6c3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTcxOC17XG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtNzMyLVx0XHRcdFx0ICAgcmRtYWNnX3Jlc291cmNlX25hbWVzW2ldLFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzMzOlx0XHRcdFx0ICAgcnBvb2wgPyBycG9vbC1cdTAwM2VldmVudHNfbG9jYWxfbWF4W2ldIDogMFVMTCxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczNC1cdFx0XHRcdCAgIHJkbWFjZ19yZXNvdXJjZV9uYW1lc1tpXSxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjczNTpcdFx0XHRcdCAgIHJwb29sID8gcnBvb2wtXHUwMDNlZXZlbnRzX2xvY2FsX2FsbG9jX2ZhaWxbaV0gOiAwVUxMKTtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczNi1cdFx0XHRpZiAoaSBcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWCAtIDEpXG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmM9NzQ2PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHJkbWFjZ19maWxlc1tdID0ge1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTc3My1cdFx0Lm5hbWUgPSBcJiMzNDtldmVudHMubG9jYWxcJiMzNDssXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo3NzQ6XHRcdC5zZXFfc2hvdyA9IHJkbWFjZ19ldmVudHNfbG9jYWxfc2hvdyxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjc3NTpcdFx0LmZpbGVfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJkbWFfY2dyb3VwLCBldmVudHNfbG9jYWxfZmlsZSksXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03NzYtXHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jPTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9ldmVudChzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmh1Z2V0bGIsIGludCBpZHgsXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNDUte1xubW0vaHVnZXRsYl9jZ3JvdXAuYzoyNDY6XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2aHVnZXRsYi1cdTAwM2VldmVudHNfbG9jYWxbaWR4XVtldmVudF0pO1xubW0vaHVnZXRsYl9jZ3JvdXAuYzoyNDc6XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2aHVnZXRsYi1cdTAwM2VldmVudHNfbG9jYWxfZmlsZVtpZHhdKTtcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtMjQ4LVxuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmM9Njc3PXN0YXRpYyBpbnQgX19odWdldGxiX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBib29sIGxvY2FsKVxuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNjg2LVx0aWYgKGxvY2FsKVxubW0vaHVnZXRsYl9jZ3JvdXAuYzo2ODc6XHRcdG1heCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2aF9jZy1cdTAwM2VldmVudHNfbG9jYWxbaWR4XVtIVUdFVExCX01BWF0pO1xubW0vaHVnZXRsYl9jZ3JvdXAuYy02ODgtXHRlbHNlXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYz02OTY9c3RhdGljIGludCBodWdldGxiX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNzAwLVxubW0vaHVnZXRsYl9jZ3JvdXAuYzo3MDE6c3RhdGljIGludCBodWdldGxiX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubW0vaHVnZXRsYl9jZ3JvdXAuYy03MDIte1xuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmM9NzA2PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGh1Z2V0bGJfZGZsX3RtcGxbXSA9IHtcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jLTc0MC1cdFx0Lm5hbWUgPSBcJiMzNDtldmVudHMubG9jYWxcJiMzNDssXG5tbS9odWdldGxiX2Nncm91cC5jOjc0MTpcdFx0LnNlcV9zaG93ID0gaHVnZXRsYl9ldmVudHNfbG9jYWxfc2hvdyxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6NzQyOlx0XHQuZmlsZV9vZmZzZXQgPSBNRU1GSUxFX09GRlNFVChzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlWzBdKSxcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNzQzLVx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE3NDI9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9ub2RlX25yX2xydV9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE3NTYtXHRcdGVsc2Vcbm1tL21lbWNvbnRyb2wtdjEuYzoxNzU3Olx0XHRcdG5yICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsIE5SX0xSVV9CQVNFICYjNDM7IGxydSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTc1OC1cdH1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTc2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX25yX2xydV9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE3NzQtXHRcdGVsc2Vcbm1tL21lbWNvbnRyb2wtdjEuYzoxNzc1Olx0XHRcdG5yICYjNDM7PSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBOUl9MUlVfQkFTRSAmIzQzOyBscnUpO1xubW0vbWVtY29udHJvbC12MS5jLTE3NzYtXHR9XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4NjM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfZXZlbnRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NjktXG5tbS9tZW1jb250cm9sLXYxLmM6MTg3MDp2b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3MS17XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NzQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnMV9zdGF0cyk7IGkmIzQzOyYjNDM7KVxubW0vbWVtY29udHJvbC12MS5jOjE4NzU6XHRcdHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIG1lbWNnMV9zdGF0c1tpXSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ni19XG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ny1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODc4OnZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3OS17XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4ODItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KVxubW0vbWVtY29udHJvbC12MS5jOjE4ODM6XHRcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBpKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xODg0LX1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTg4Nj12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODk4LVxubW0vbWVtY29udHJvbC12MS5jOjE4OTk6XHRcdG5yID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQobWVtY2csIG1lbWNnMV9zdGF0c1tpXSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTkwMC1cdFx0c2VxX2J1Zl9wcmludGYocywgXCYjMzQ7JXMgJWx1XFxuXCYjMzQ7LCBtZW1jZzFfc3RhdF9uYW1lc1tpXSwgbnIpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xOTA0LVx0XHRzZXFfYnVmX3ByaW50ZihzLCBcJiMzNDslcyAlbHVcXG5cJiMzNDssIHZtX2V2ZW50X25hbWUobWVtY2cxX2V2ZW50c1tpXSksXG5tbS9tZW1jb250cm9sLXYxLmM6MTkwNTpcdFx0XHQgICAgICAgbWVtY2dfZXZlbnRzX2xvY2FsKG1lbWNnLCBtZW1jZzFfZXZlbnRzW2ldKSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTkwNi1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTkwOC1cdFx0c2VxX2J1Zl9wcmludGYocywgXCYjMzQ7JXMgJWx1XFxuXCYjMzQ7LCBscnVfbGlzdF9uYW1lKGkpLFxubW0vbWVtY29udHJvbC12MS5jOjE5MDk6XHRcdFx0ICAgICAgIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIE5SX0xSVV9CQVNFICYjNDM7IGkpICpcbm1tL21lbWNvbnRyb2wtdjEuYy0xOTEwLVx0XHRcdCAgICAgICBQQUdFX1NJWkUpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0zMj1zdGF0aWMgaW5saW5lIGJvb2wgZG9fbWVtc3dfYWNjb3VudCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaC0zNi1cbm1tL21lbWNvbnRyb2wtdjEuaDozNzp1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudCk7XG5tbS9tZW1jb250cm9sLXYxLmg6Mzg6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeCk7XG5tbS9tZW1jb250cm9sLXYxLmg6Mzk6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcbm1tL21lbWNvbnRyb2wtdjEuaC00MC1ib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9NjQ9dm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcyk7XG5tbS9tZW1jb250cm9sLXYxLmg6NjU6dm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbm1tL21lbWNvbnRyb2wtdjEuaDo2Njp2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbm1tL21lbWNvbnRyb2wtdjEuaC02Ny1cbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuaC02OS1cdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xubW0vbWVtY29udHJvbC12MS5oOjcwOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuaC03MS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjM2PXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xubW0vbWVtY29udHJvbC5jLTIzNy1cbm1tL21lbWNvbnRyb2wuYzoyMzg6c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wuYy0yMzkte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTEtXHQvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi9cbm1tL21lbWNvbnRyb2wuYzoyNTI6XHRyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XG5tbS9tZW1jb250cm9sLmM6MjUzOlx0cmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYy0yNTQtXG4tLVxubW0vbWVtY29udHJvbC5jLTI1Ny0jZWxzZVxubW0vbWVtY29udHJvbC5jOjI1ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbWVtY29udHJvbC5jLTI1OS17XG4tLVxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMDctXG5tbS9tZW1jb250cm9sLmM6MzA4Olx0cmVwYXJlbnRfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XG5tbS9tZW1jb250cm9sLmMtMzA5LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDgxPXN0cnVjdCBscnV2ZWNfc3RhdHMge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00ODUtXHQvKiBOb24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgc3RhdGUgKi9cbm1tL21lbWNvbnRyb2wuYzo0ODY6XHRsb25nIHN0YXRlX2xvY2FsW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XG5tbS9tZW1jb250cm9sLmMtNDg3LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NDktXG5tbS9tZW1jb250cm9sLmM6NTUwOnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vbWVtY29udHJvbC5jLTU1MS1cdFx0XHRcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjQtXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xubW0vbWVtY29udHJvbC5jOjU2NTpcdHggPSBSRUFEX09OQ0UocG4tXHUwMDNlbHJ1dmVjX3N0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYy01NjYtI2lmZGVmIENPTkZJR19TTVBcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0PXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4tLVxubW0vbWVtY29udHJvbC5jLTU3Ni1cbm1tL21lbWNvbnRyb2wuYzo1Nzc6dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTU3OC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODQtXHRcdHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhwYXJlbnQsIE5PREVfREFUQShuaWQpKTtcbm1tL21lbWNvbnRyb2wuYzo1ODU6XHRcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjaGlsZF9scnV2ZWMsIGlkeCk7XG5tbS9tZW1jb250cm9sLmMtNTg2LVx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqY2hpbGRfcG4sICpwYXJlbnRfcG47XG4tLVxubW0vbWVtY29udHJvbC5jPTY3Mz1zdHJ1Y3QgbWVtY2dfdm1zdGF0cyB7XG4tLVxubW0vbWVtY29udHJvbC5jLTY3OS1cdC8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBwYWdlIHN0YXRlIFx1MDAyNiBldmVudHMgKi9cbm1tL21lbWNvbnRyb2wuYzo2ODA6XHRsb25nXHRcdFx0c3RhdGVfbG9jYWxbTUVNQ0dfVk1TVEFUX1NJWkVdO1xubW0vbWVtY29udHJvbC5jOjY4MTpcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XG5tbS9tZW1jb250cm9sLmMtNjgyLSNlbmRpZlxuLS1cbm1tL21lbWNvbnRyb2wuYy02OTYtI2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jOjY5NzpzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTY5OC17XG5tbS9tZW1jb250cm9sLmM6Njk5Olx0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWw7XG5tbS9tZW1jb250cm9sLmMtNzAwLX1cbm1tL21lbWNvbnRyb2wuYy03MDEtXG5tbS9tZW1jb250cm9sLmM6NzAyOnN0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTcwMy17XG5tbS9tZW1jb250cm9sLmM6NzA0Olx0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX2xvY2FsO1xubW0vbWVtY29udHJvbC5jLTcwNS19XG5tbS9tZW1jb250cm9sLmMtNzA2LSNlbHNlXG5tbS9tZW1jb250cm9sLmM6NzA3OnN0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNzA4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNzExLVxubW0vbWVtY29udHJvbC5jOjcxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wuYy03MTMte1xuLS1cbm1tL21lbWNvbnRyb2wuYz04NjA9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy04NzgtICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxubW0vbWVtY29udHJvbC5jOjg3OTogKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy5cbm1tL21lbWNvbnRyb2wuYy04ODAtICovXG4tLVxubW0vbWVtY29udHJvbC5jPTk0ND12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTU4LS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbm1tL21lbWNvbnRyb2wuYzo5NTk6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbm1tL21lbWNvbnRyb2wuYy05NjAte1xuLS1cbm1tL21lbWNvbnRyb2wuYy05NjYtXG5tbS9tZW1jb250cm9sLmM6OTY3Olx0eCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYy05NjgtI2lmZGVmIENPTkZJR19TTVBcbi0tXG5tbS9tZW1jb250cm9sLmMtOTc0LVxubW0vbWVtY29udHJvbC5jOjk3NTp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy05NzYtXHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxubW0vbWVtY29udHJvbC5jLTk3Ny17XG5tbS9tZW1jb250cm9sLmM6OTc4Olx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGlkeCk7XG5tbS9tZW1jb250cm9sLmMtOTc5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTMyPWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTQwLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYzoxMTQxOnVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxubW0vbWVtY29udHJvbC5jLTExNDIte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTQ3LVxubW0vbWVtY29udHJvbC5jOjExNDg6XHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYy0xMTQ5LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTcyND11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MzAtI2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jOjE3MzE6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxubW0vbWVtY29udHJvbC5jLTE3MzIte1xubW0vbWVtY29udHJvbC5jOjE3MzM6XHRyZXR1cm4gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaXRlbSkgKlxubW0vbWVtY29udHJvbC5jLTE3MzQtXHRcdG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0X3VuaXQoaXRlbSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTE5MTE9dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTE5MTktXG5tbS9tZW1jb250cm9sLmM6MTkyMDpcdGF0b21pY19sb25nX2luYyhcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsW2V2ZW50XSk7XG5tbS9tZW1jb250cm9sLmMtMTkyMS1cdGlmICghc3dhcF9ldmVudCBcdTAwMjZcdTAwMjYgYWxsb3dfc3Bpbm5pbmcpXG5tbS9tZW1jb250cm9sLmM6MTkyMjpcdFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNm1lbWNnLVx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcbm1tL21lbWNvbnRyb2wuYy0xOTIzLVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NDk2PXN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCB7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ1MDAtXHQgKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgb3IgTlVMTCB0b1xubW0vbWVtY29udHJvbC5jOjQ1MDE6XHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxubW0vbWVtY29udHJvbC5jLTQ1MDItXHQgKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9NDU1Mz1zdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbWVtY29udHJvbC5jLTQ1NTQte1xubW0vbWVtY29udHJvbC5jOjQ1NTU6XHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00NTU2LVx0aW50IG5pZDtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU2Mi1cdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IGttZW07XG5tbS9tZW1jb250cm9sLmM6NDU2MzpcdFx0aWYgKHN0YXRlX2xvY2FsKVxubW0vbWVtY29udHJvbC5jOjQ1NjQ6XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtO1xubW0vbWVtY29udHJvbC5jLTQ1NjUtXHRcdGlmIChwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ1ODEtXHRcdFx0bHN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYzo0NTgyOlx0XHRcdGxzdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDU4My1cdFx0XHRpZiAocGxzdGF0cylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU4NS1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYzo0NTg2Olx0XHRcdGlmIChzdGF0ZV9sb2NhbClcbm1tL21lbWNvbnRyb2wuYzo0NTg3Olx0XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jLTQ1ODgtXHRcdFx0aWYgKHBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU5NS1cdFx0XHRsc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jOjQ1OTY6XHRcdFx0bHN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NTk3LVx0XHRcdGlmIChwbHN0YXRzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTk5LVx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jOjQ2MDA6XHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxubW0vbWVtY29udHJvbC5jOjQ2MDE6XHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDYwMi1cdFx0XHRpZiAocGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjEyPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MjUtXHRcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlLFxubW0vbWVtY29udHJvbC5jOjQ2MjY6XHRcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcbm1tL21lbWNvbnRyb2wuYy00NjI3LVx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNDYzNi1cdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxubW0vbWVtY29udHJvbC5jOjQ2Mzc6XHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG5tbS9tZW1jb250cm9sLmMtNDYzOC1cdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjU4LVx0XHRcdC5hZ2dyZWdhdGUgPSBsc3RhdHMtXHUwMDNlc3RhdGUsXG5tbS9tZW1jb250cm9sLmM6NDY1OTpcdFx0XHQubG9jYWwgPSBsc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWwsXG5tbS9tZW1jb250cm9sLmMtNDY2MC1cdFx0XHQucGVuZGluZyA9IGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01MDM0PXN0YXRpYyBpbnQgbWVtb3J5X2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA0MS1cbm1tL21lbWNvbnRyb2wuYzo1MDQyOnN0YXRpYyBpbnQgbWVtb3J5X2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbm1tL21lbWNvbnRyb2wuYy01MDQzLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA0NS1cbm1tL21lbWNvbnRyb2wuYzo1MDQ2Olx0X19tZW1vcnlfZXZlbnRzX3Nob3cobSwgbWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c19sb2NhbCk7XG5tbS9tZW1jb250cm9sLmMtNTA0Ny1cdHJldHVybiAwO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTQ3PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTkzLVx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG5tbS9tZW1jb250cm9sLmM6NTE5NDpcdFx0LmZpbGVfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1lbV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcbm1tL21lbWNvbnRyb2wuYzo1MTk1Olx0XHQuc2VxX3Nob3cgPSBtZW1vcnlfZXZlbnRzX2xvY2FsX3Nob3csXG5tbS9tZW1jb250cm9sLmMtNTE5Ni1cdH0sXG4tLVxubW0vd29ya2luZ3NldC5jPTY1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMxMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbWNnIFZNc3RhdHMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIHdpdGggYSBjcml0aWNhbCBleWUuIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG1lbWNnX3Ztc3RhdHNgIHN0cnVjdHVyZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbm90aWNlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbjsgdGhlIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGZpZWxkcyBhcmUgb25seSBwcmVzZW50IGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQuIEEgY2xhc3NpYyBtZW1vcnkgb3B0aW1pemF0aW9uIHN0cmF0ZWd5IOKAkyBvbWl0IHRoZSBmaWVsZHMgd2hlbiB0aGV5IGFyZW4mIzM5O3QgdXNlZC4gQ2xldmVyLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHN1YnRsZSBpc3N1ZXMuIENvdWxkIHRoZXJlIGJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGx1cmtpbmcgaGVyZT8gQSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlPyBVbmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYmVpbmcgYWNjZXNzZWQ/IFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluZmx1ZW5jaW5nIGJyYW5jaGluZz8gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0byB0aG9yb3VnaGx5IGludmVzdGlnYXRlIHRoZXNlIHBvc3NpYmlsaXRpZXMuCgpBbHJpZ2h0LCB0aGUgaGVscGVyIGZ1bmN0aW9ucyBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKWAgYW5kIGBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoKWAgc2VlbSB0byBiZSB0aGUga2V5LiBUaGV5IGVpdGhlciByZXR1cm4gdGhlIGBzdGF0ZV9sb2NhbGAgb3IgYGV2ZW50c19sb2NhbGAgYXJyYXlzIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGFjdGl2ZSwgb3IgTlVMTCBvdGhlcndpc2UuIFRoYXQmIzM5O3MgZ29vZCwgcHJvdmlkaW5nIGEgc2FmZSB3YXkgdG8gaGFuZGxlIHRoZSBjb25kaXRpb25hbCBwcmVzZW5jZSBvZiB0aGVzZSBmaWVsZHMuIFRoZSBjYWxsZXJzLCBzcGVjaWZpY2FsbHkgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoKWAsIGBmbHVzaF9ubWlfc3RhdHMoKWAsIGFuZCBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goKWAsIHNlZW0gdG8gYmUgdXNpbmcgdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyBvciBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBOVUxMLCB3aGljaCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaC4gU28sIGF0IGZpcnN0IGdsYW5jZSwgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBvYnZpb3VzIHJlZCBmbGFncy4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeS4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoaXMgYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCB0aGUgZmllbGRzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgZXNwZWNpYWxseSB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCBvdXQgdGhlIHJlYWwgdHJ1dGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBtZW1jZ192bXN0YXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz02NDk9c3RhdGljIGlubGluZSBpbnQgbWVtY2dfZXZlbnRzX2luZGV4KGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTY1My1cbm1tL21lbWNvbnRyb2wuYzo2NTQ6c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IHtcbm1tL21lbWNvbnRyb2wuYy02NTUtXHQvKiBTdGF0cyB1cGRhdGVzIHNpbmNlIHRoZSBsYXN0IGZsdXNoICovXG4tLVxubW0vbWVtY29udHJvbC5jLTY1OC1cdC8qIENhY2hlZCBwb2ludGVycyBmb3IgZmFzdCBpdGVyYXRpb24gaW4gbWVtY2dfcnN0YXRfdXBkYXRlZCgpICovXG5tbS9tZW1jb250cm9sLmM6NjU5Olx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1XHQqcGFyZW50X3BjcHU7XG5tbS9tZW1jb250cm9sLmM6NjYwOlx0c3RydWN0IG1lbWNnX3Ztc3RhdHNcdFx0XHQqdm1zdGF0cztcbm1tL21lbWNvbnRyb2wuYy02NjEtXG4tLVxubW0vbWVtY29udHJvbC5jLTY3Mi1cbm1tL21lbWNvbnRyb2wuYzo2NzM6c3RydWN0IG1lbWNnX3Ztc3RhdHMge1xubW0vbWVtY29udHJvbC5jLTY3NC1cdC8qIEFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSkgcGFnZSBzdGF0ZSBcdTAwMjYgZXZlbnRzICovXG4tLVxubW0vbWVtY29udHJvbC5jPTczNT1zdGF0aWMgdTY0IGZsdXNoX2xhc3RfdGltZTtcbi0tXG5tbS9tZW1jb250cm9sLmMtNzM4LVxubW0vbWVtY29udHJvbC5jOjczOTpzdGF0aWMgYm9vbCBtZW1jZ192bXN0YXRzX25lZWRzX2ZsdXNoKHN0cnVjdCBtZW1jZ192bXN0YXRzICp2bXN0YXRzKVxubW0vbWVtY29udHJvbC5jLTc0MC17XG4tLVxubW0vbWVtY29udHJvbC5jPTc0NT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfcnN0YXRfdXBkYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGxvbmcgdmFsLFxuLS1cbm1tL21lbWNvbnRyb2wuYy03NDcte1xubW0vbWVtY29udHJvbC5jOjc0ODpcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqc3RhdGNfcGNwdTtcbm1tL21lbWNvbnRyb2wuYzo3NDk6XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xubW0vbWVtY29udHJvbC5jLTc1MC1cdHVuc2lnbmVkIGxvbmcgc3RhdHNfdXBkYXRlcztcbi0tXG5tbS9tZW1jb250cm9sLmM9NDIwMD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wuYy00MjAxLXtcbm1tL21lbWNvbnRyb2wuYzo0MjAyOlx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0Yztcbm1tL21lbWNvbnRyb2wuYzo0MjAzOlx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcbm1tL21lbWNvbnRyb2wuYy00MjA0LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MjE4LVxubW0vbWVtY29udHJvbC5jOjQyMTk6XHRtZW1jZy1cdTAwM2V2bXN0YXRzID0ga3phbGxvY19vYmooc3RydWN0IG1lbWNnX3Ztc3RhdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5tbS9tZW1jb250cm9sLmMtNDIyMC1cdGlmICghbWVtY2ctXHUwMDNldm1zdGF0cylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIyMi1cbm1tL21lbWNvbnRyb2wuYzo0MjIzOlx0bWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSxcbm1tL21lbWNvbnRyb2wuYy00MjI0LVx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NjEyPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MTUtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQ2MTY6XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xubW0vbWVtY29udHJvbC5jLTQ2MTctXHRzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgYWM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODkyCgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDQ5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHdoZXRoZXIgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvZiBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBpbiBgbWVtY2ctJmd0O3Ztc3RhdHNgIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dfVjFgIGNvdWxkIGludHJvZHVjZSBhbnkgc3VidGxlIGlzc3VlcywgZXNwZWNpYWxseSBhcm91bmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0LCBhZnRlciBhIGNsb3NlciBsb29rLCBpdCBzZWVtcyBwcmV0dHkgY2xlYW4uCgpga3phbGxvY19vYmpgIGVuc3VyZXMgdGhlIGVudGlyZSBgbWVtY2ctJmd0O3Ztc3RhdHNgIGlzIHplcm9lZCBvdXQgYXQgYWxsb2NhdGlvbi4gIElmIGBDT05GSUdfTUVNQ0dfVjFgIGlzICpub3QqIHNldCwgdGhlIG9taXR0ZWQgZmllbGRzIGRlZmF1bHQgdG8gTlVMTCwgYW5kIHRoZSByZWxldmFudCBmdW5jdGlvbnMgaW5jbHVkZSBleHBsaWNpdCBOVUxMIGNoZWNrcyBiZWZvcmUgYWNjZXNzaW5nIHRoZXNlIHZhcmlhYmxlcyBkdXJpbmcgYWdncmVnYXRpb24gYW5kIE5NSSBmbHVzaGVzLiAgSWYgYENPTkZJR19NRU1DR19WMWAgKmlzKiBzZXQsIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgdG8gemVyby4gU28sIHRoYXQgaW5pdGlhbCBjb25jZXJuIGlzIGFkZHJlc3NlZC4KCkkgdGhlbiByYW4gdGhyb3VnaCB0aGUgS01TQU4gJiMzNDtOZWVkc0tNU0FOPXRydWUmIzM0OyBjcml0ZXJpYSwgYW5kIG5vbmUgb2YgdGhlbSBhcHBseSBoZXJlOiBubyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkLCB0aGVyZSYjMzk7cyBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgd2UgYXJlbiYjMzk7dCBkZWFsaW5nIHdpdGggY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciwgYW5kIHRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpFdmVuIGlmIHRoZXJlICp3ZXJlKiBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgS0FTQU4gd291bGQgcGljayBpdCB1cC4gQW55IG90aGVyIHBvdGVudGlhbCBpc3N1ZXMsIGxpa2UgaW52YWxpZCBpbmRleGluZyBkdWUgdG8gYSBsb2dpYyBlcnJvciwgd291bGQgYmUgZmxhZ2dlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIG9yIEtBU0FOLCB0b28uIFdlIGFyZW4mIzM5O3QgY3JlYXRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCYjMzk7cyBleHBvc2VkIHRvIHVzZXJzcGFjZS4KClRoZXJlZm9yZSwgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBXZSYjMzk7cmUgc2FmZSB0byBwcm9jZWVkIHdpdGhvdXQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3MgZmlyZSB1cCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxuXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzLlxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxuMy4gS0FTQU4gdnMgS01TQU46IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYGxvY2FsYCBpZiBhIGNoZWNrIHdhcyBtaXNzaW5nLCBvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBLTVNBTiBzcGVjaWZpY2FsbHkgZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIG5laXRoZXIgb2Ygd2hpY2ggYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaGVyZS5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbmRpdGlvbmFsbHkgY29tcGlsZXMgb3V0IHRoZSBsZWdhY3kgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgc3RhdCBhcnJheXMgZnJvbSBgc3RydWN0IG1lbWNnX3Ztc3RhdHNgIHdoZW4gYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQsIGFkZGluZyBoZWxwZXIgYWNjZXNzb3JzIGFuZCBOVUxMIGNoZWNrcyBpbiB0aGUgYWdncmVnYXRpb24gYW5kIHN0YXQgZmx1c2hpbmcgcGF0aHMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGFsbCBmaWVsZHMuXG4yLiBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tbGVhayBSaXNrOiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uXG4zLiBLQVNBTiB2cyBLTVNBTjogQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgbG9jYWxgIGlmIGEgY2hlY2sgd2FzIG1pc3NpbmcsIG9yIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIHNwZWNpZmljYWxseSBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcywgbmVpdGhlciBvZiB3aGljaCBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCBoZXJlLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozMzo0Ny4zODE0Mzg1ODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDYyNzI1OTgyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X3N0YXRfc2hvd1wiLFxuICAgIFwibWVtY2dfcGFnZV9zdGF0ZV9sb2NhbFwiLFxuICAgIFwibWVtY2dfZXZlbnRzX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiLFxuICAgIFwicmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxcblxcbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGFsbCBmaWVsZHMuXFxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcbjMuIEtBU0FOIHZzIEtNU0FOOiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBsb2NhbGAgaWYgYSBjaGVjayB3YXMgbWlzc2luZywgb3Igb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gc3BlY2lmaWNhbGx5IGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzLCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGhlcmUuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25kaXRpb25hbGx5IHJlbW92ZXMgbGVnYWN5IHYxLW9ubHkgbG9jYWwgc3RhdGlzdGljcyAoc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCkgZnJvbSBzdHJ1Y3QgbWVtY2dfdm1zdGF0cyB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZCwgYW5kIGFkZHMgTlVMTCBjaGVja3MgZHVyaW5nIHN0YXRzIGZsdXNoaW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbWNnIHN0YXRpc3RpY3MgYWNjb3VudGluZyBhbmQgcmVwYXJlbnRpbmcgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHdpdGggYm90aCBjZ3JvdXAgdjEgYW5kIHYyIHdvcmtsb2Fkcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6MzM6NDcuMzgxNDQzMDc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQzODI0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2MjliYjNiNWVkNDk4YzIxZGJkZjE1YTViYjRmZjA1NWFjMmZhMjFjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMTA6MzM6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggN2NlNTBiY2NmMTI2NC4uYjk4YjJkNjhjNjJiZSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNjc1LDkgKzY3NSwxMSBAQCBzdHJ1Y3QgbWVtY2dfdm1zdGF0cyB7XFxuIFxcdGxvbmdcXHRcXHRcXHRzdGF0ZVtNRU1DR19WTVNUQVRfU0laRV07XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRldmVudHNbTlJfTUVNQ0dfRVZFTlRTXTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXFx1MDAyNiBldmVudHMgKi9cXG4gXFx0bG9uZ1xcdFxcdFxcdHN0YXRlX2xvY2FsW01FTUNHX1ZNU1RBVF9TSVpFXTtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGV2ZW50c19sb2NhbFtOUl9NRU1DR19FVkVOVFNdO1xcbisjZW5kaWZcXG4gXFxuIFxcdC8qIFBlbmRpbmcgY2hpbGQgY291bnRzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXFxuIFxcdGxvbmdcXHRcXHRcXHRzdGF0ZV9wZW5kaW5nW01FTUNHX1ZNU1RBVF9TSVpFXTtcXG5AQCAtNjg3LDYgKzY4OSwzMiBAQCBzdHJ1Y3QgbWVtY2dfdm1zdGF0cyB7XFxuIFxcdGF0b21pY19sb25nX3RcXHRcXHRzdGF0c191cGRhdGVzO1xcbiB9O1xcbiBcXG4rLypcXG4rICogVGhlIG5vbi1oaWVyYXJjaGljYWwgbWVtY2ctd2lkZSBjb3VudGVycyBhcmUgcmVhZCBiYWNrIG9ubHkgYnkgdGhlIGxlZ2FjeVxcbisgKiBtZW1vcnkuc3RhdCBhbmQgYnkgcmVwYXJlbnRpbmcgb24gb2ZmbGluZSwgYm90aCBvZiB3aGljaCBhcmUgdjEtb25seS5cXG4rICovXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4rc3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRyZXR1cm4gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRyZXR1cm4gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c19sb2NhbDtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIC8qXFxuICAqIG1lbWNnIGFuZCBscnV2ZWMgc3RhdHMgZmx1c2hpbmdcXG4gICpcXG5AQCAtNDQ2OCw3ICs0NDk2LDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuIHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCB7XFxuIFxcdC8qIHBvaW50ZXIgdG8gdGhlIGFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xcbiBcXHRsb25nICphZ2dyZWdhdGU7XFxuLVxcdC8qIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljaGFsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgKi9cXG4rXFx0LypcXG4rXFx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cXG4rXFx0ICogc2tpcCB1cGRhdGluZyB0aGVtIChzZWUgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSlcXG4rXFx0ICovXFxuIFxcdGxvbmcgKmxvY2FsO1xcbiBcXHQvKiBwb2ludGVyIHRvIHRoZSBwZW5kaW5nIGNoaWxkIGNvdW50ZXJzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXFxuIFxcdGxvbmcgKnBlbmRpbmc7XFxuQEAgLTQ1MDcsNyArNDUzOCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xcbi1cXHRcXHRpZiAoZGVsdGFfY3B1KVxcbitcXHRcXHRpZiAoZGVsdGFfY3B1IFxcdTAwMjZcXHUwMDI2IGFjLVxcdTAwM2Vsb2NhbClcXG4gXFx0XFx0XFx0YWMtXFx1MDAzZWxvY2FsW2ldICs9IGRlbHRhX2NwdTtcXG4gXFxuIFxcdFxcdGlmIChkZWx0YSkge1xcbkBAIC00NTIxLDYgKzQ1NTIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4ge1xcbitcXHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcXG4gXFx0aW50IG5pZDtcXG4gXFxuIFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW1fc3RhdCkpIHtcXG5AQCAtNDUyOCw3ICs0NTYwLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0XFx0aW50IGluZGV4ID0gbWVtY2dfc3RhdHNfaW5kZXgoTUVNQ0dfS01FTSk7XFxuIFxcbiBcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IGttZW07XFxuLVxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0ga21lbTtcXG4rXFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbitcXHRcXHRcXHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0ga21lbTtcXG4gXFx0XFx0aWYgKHBhcmVudClcXG4gXFx0XFx0XFx0cGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBrbWVtO1xcbiBcXHR9XFxuQEAgLTQ1NTAsNyArNDU4Myw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuIFxcdFxcdFxcdGlmIChwbHN0YXRzKVxcbiBcXHRcXHRcXHRcXHRwbHN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxuLVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG4rXFx0XFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbitcXHRcXHRcXHRcXHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG4gXFx0XFx0XFx0aWYgKHBhcmVudClcXG4gXFx0XFx0XFx0XFx0cGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHR9XFxuQEAgLTQ1NjMsNyArNDU5Nyw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuIFxcdFxcdFxcdGlmIChwbHN0YXRzKVxcbiBcXHRcXHRcXHRcXHRwbHN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxuLVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG4rXFx0XFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbitcXHRcXHRcXHRcXHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG4gXFx0XFx0XFx0aWYgKHBhcmVudClcXG4gXFx0XFx0XFx0XFx0cGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHR9XFxuQEAgLTQ1ODgsNyArNDYyMyw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuIFxcbiBcXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcXG4gXFx0XFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZSxcXG4tXFx0XFx0LmxvY2FsID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsLFxcbitcXHRcXHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXFxuIFxcdFxcdC5wZW5kaW5nID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxuIFxcdFxcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZyA6IE5VTEwsXFxuIFxcdFxcdC5jc3RhdCA9IHN0YXRjLVxcdTAwM2VzdGF0ZSxcXG5AQCAtNDU5OSw3ICs0NjM0LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcXG4gXFxuIFxcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xcbiBcXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50cyxcXG4tXFx0XFx0LmxvY2FsID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c19sb2NhbCxcXG4rXFx0XFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcXG4gXFx0XFx0LnBlbmRpbmcgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX3BlbmRpbmcsXFxuIFxcdFxcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxcbiBcXHRcXHQuY3N0YXQgPSBzdGF0Yy1cXHUwMDNlZXZlbnRzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozMzo0Ny44OTg5NDE1ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI3OTM1MjI2OTY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfc3RhdF9zaG93XCIsXG4gICAgXCJtZW1jZ19wYWdlX3N0YXRlX2xvY2FsXCIsXG4gICAgXCJtZW1jZ19ldmVudHNfbG9jYWxcIixcbiAgICBcInJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25kaXRpb25hbGx5IHJlbW92ZXMgbGVnYWN5IHYxLW9ubHkgbG9jYWwgc3RhdGlzdGljcyAoc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCkgZnJvbSBzdHJ1Y3QgbWVtY2dfdm1zdGF0cyB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZCwgYW5kIGFkZHMgTlVMTCBjaGVja3MgZHVyaW5nIHN0YXRzIGZsdXNoaW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbWNnIHN0YXRpc3RpY3MgYWNjb3VudGluZyBhbmQgcmVwYXJlbnRpbmcgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHdpdGggYm90aCBjZ3JvdXAgdjEgYW5kIHYyIHdvcmtsb2Fkcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI5YmIzYjVlZDQ5OGMyMWRiZGYxNWE1YmI0ZmYwNTVhYzJmYTIxY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTA6MzM6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDdjZTUwYmNjZjEyNjQuLmI5OGIyZDY4YzYyYmUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTY3NSw5ICs2NzUsMTEgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xuIFx0bG9uZ1x0XHRcdHN0YXRlW01FTUNHX1ZNU1RBVF9TSVpFXTtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzW05SX01FTUNHX0VWRU5UU107XG4gXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXHUwMDI2IGV2ZW50cyAqL1xuIFx0bG9uZ1x0XHRcdHN0YXRlX2xvY2FsW01FTUNHX1ZNU1RBVF9TSVpFXTtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XG4rI2VuZGlmXG4gXG4gXHQvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZ1x0XHRcdHN0YXRlX3BlbmRpbmdbTUVNQ0dfVk1TVEFUX1NJWkVdO1xuQEAgLTY4Nyw2ICs2ODksMzIgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRzdGF0c191cGRhdGVzO1xuIH07XG4gXG4rLypcbisgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5XG4rICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuXG4rICovXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuK3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK1x0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWw7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbDtcbit9XG4rI2Vsc2VcbitzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nXG4gICpcbkBAIC00NDY4LDcgKzQ0OTYsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xuIFx0LyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4gXHRsb25nICphZ2dyZWdhdGU7XG4tXHQvKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2hhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4rXHQvKlxuK1x0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbitcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXG4rXHQgKi9cbiBcdGxvbmcgKmxvY2FsO1xuIFx0LyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZyAqcGVuZGluZztcbkBAIC00NTA3LDcgKzQ1MzgsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gXHRcdH1cbiBcbiBcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuLVx0XHRpZiAoZGVsdGFfY3B1KVxuK1x0XHRpZiAoZGVsdGFfY3B1IFx1MDAyNlx1MDAyNiBhYy1cdTAwM2Vsb2NhbClcbiBcdFx0XHRhYy1cdTAwM2Vsb2NhbFtpXSArPSBkZWx0YV9jcHU7XG4gXG4gXHRcdGlmIChkZWx0YSkge1xuQEAgLTQ1MjEsNiArNDU1Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcbiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4rXHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbiBcdGludCBuaWQ7XG4gXG4gXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNla21lbV9zdGF0KSkge1xuQEAgLTQ1MjgsNyArNDU2MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdGludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pO1xuIFxuIFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSArPSBrbWVtO1xuLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xuK1x0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IGttZW07XG4gXHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0ga21lbTtcbiBcdH1cbkBAIC00NTUwLDcgKzQ1ODMsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbitcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcbiBcdFx0fVxuQEAgLTQ1NjMsNyArNDU5Nyw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdFx0aWYgKHBsc3RhdHMpXG4gXHRcdFx0XHRwbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XG4gXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcbi1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuK1x0XHRcdGlmIChzdGF0ZV9sb2NhbClcbitcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0XHRwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHR9XG5AQCAtNDU4OCw3ICs0NjIzLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcbiBcbiBcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuIFx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZSxcbi1cdFx0LmxvY2FsID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxuIFx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZXN0YXRlLFxuQEAgLTQ1OTksNyArNDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuLVx0XHQubG9jYWwgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcbiBcdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nLFxuIFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZWV2ZW50cyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjMzOjQ3Ljg5ODk0NDA4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzYyMjU5NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2g6IGBtbS9tZW1jb250cm9sLmNgIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIHdoYXQncyBiZWluZyB0d2Vha2VkLiBJdCBsb29rcyBsaWtlIHRoZSB0YXJnZXQgaXMgYG1tL21lbWNvbnRyb2wuY2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFyb3VuZCB0aGUgYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgYXJlIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLiBJbnRlcmVzdGluZy4gTG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdmVyc2lvbmVkIG1lbWNnIHN0YXRzLlxuXG5UaGUgaW50cm9kdWN0aW9uIG9mIGBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheWAgYW5kIGBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXlgIHN1Z2dlc3RzIHdlIGhhdmUgdXRpbGl0eSBmdW5jdGlvbnMgdGhhdCBjb25kaXRpb25hbGx5IHJldHVybiBOVUxMIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzbid0IGVuYWJsZWQuIEdvb2QgcHJhY3RpY2UsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgYnVpbGQgaXNzdWVzLiBJJ20gYXNzdW1pbmcgdGhlc2UgYXJlIG1lYW50IHRvIGJlIHVzZWQgd2hlbiB2ZXJzaW9uIDEgb2YgbWVtY2cgaXMgKm5vdCogZW5hYmxlZC5cblxuTG9va2luZyBhdCBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIHRoZXJlJ3MgYSBjb25kaXRpb25hbCBgaWYgKGRlbHRhX2NwdSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbG9jYWwpYC4gVGhlIHByZXNlbmNlIG9mIGBhYy1cdTAwM2Vsb2NhbGAgaXMgdGVsbGluZywgYW5kIGl0IHdpbGwgYmUgZGVwZW5kZW50IG9uIHRoZSBhcnJheSByZXR1cm5zLiBgZmx1c2hfbm1pX3N0YXRzYCBhbHNvIGNoZWNrcyBgaWYgKHN0YXRlX2xvY2FsKSAuLi5gLiBBbmQgaW4gYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYCwgd2Ugc2VlIGAubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZylgLCBldGMuIFNvLCB0aGlzIGxvb2tzIGxpa2UgdGhlIGxvY2FsIGFycmF5cyBhcmUgYmVpbmcgYXNzaWduZWQgdG8gdGhlIGAubG9jYWxgIGVsZW1lbnQgb2YgYSBzdHJ1Y3R1cmUuXG5cblRvIGdldCBhIGJldHRlciBwaWN0dXJlLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGNoZWNrIGBtbS9tZW1jb250cm9sLmNgIGFuZCBwb3RlbnRpYWxseSBgbW0vbWVtY29udHJvbC12MS5jYCBvciB0aGUgS2NvbmZpZyBmaWxlcy4gQSBxdWljayBgZ3JlcHBlcmAgcnVuIG9yIGV2ZW4gYSByZWFkLWZpbGUgb3BlcmF0aW9uIGFyb3VuZCB0aGVzZSBsaW5lcyBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYSBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgc2hvdWxkIHF1aWNrbHkgaWxsdW1pbmF0ZSB0aGUgaW50ZW50IGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgbWVtY2cgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTEzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6MzQ6MDAuNjYxMjA1OTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMzk2OTA2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozNDowMC43ODE2MTMxMzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTAwMzg5ODY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gTUVNQ0cgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBNRU1DRyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCdzIG1vZHVsYXJpdHkgYW5kIHRoZSB0eXBpY2FsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AuIGBpbml0L0tjb25maWdgIGlzIG9mdGVuIHRoZSBwbGFjZSBmb3IgZ2xvYmFsIG9yIGZvdW5kYXRpb25hbCBzZXR0aW5ncywgd2hpbGUgYG1tL0tjb25maWdgIHdvdWxkIHNlZW0gbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGxvY2F0aW9uIGZvciBtZW1vcnktcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSdsbCBsaWtlbHkgZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYE1FTUNHYCBzeW1ib2wgb3IgYSBjbG9zZWx5IHJlbGF0ZWQgb3B0aW9uIHdpdGhpbiBvbmUgb2YgdGhvc2UgZmlsZXMuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgc291cmNlIGFuZCBnZXQgc2VhcmNoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjEwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6MzQ6MjUuNzg1NTEzNTc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzUzMTU4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzctXFxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzktXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4Ni1cXG5pbml0L0tjb25maWc6MTA4Nzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg4LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM0OjI3Ljk2MDgzNTQ5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzA2OTQwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipDb2RlIEFyY2hhZW9sb2d5IFRpbWUhKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGBldmVudHNfbG9jYWxgIGFuZCBgc3RhdGVfbG9jYWxgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoZXNlIHZhcmlhYmxlcyBhcmUgYmVpbmcgdXRpbGl6ZWQuIEFyZSB0aGV5IGlzb2xhdGVkIHRvIGEgc2luZ2xlIGZ1bmN0aW9uLCBtb2R1bGUsIG9yIHNjYXR0ZXJlZCB0aHJvdWdob3V0IHRoZSBzeXN0ZW0/IEFyZSB0aGV5IGNlbnRyYWwgdG8gYSBjb3JlIGZ1bmN0aW9uYWxpdHksIG9yIG1vcmUgb2YgYSBzaWRlIGNvbmNlcm4/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGVpciByZWxhdGl2ZSBpbXBvcnRhbmNlLCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IG9uIG90aGVyIGFyZWFzLCBhbmQgaG93IGVhc2lseSB0aGV5IGNhbiBiZSBtYW5pcHVsYXRlZC4gTGV0J3Mgc3RhcnQgYnkgZG9pbmcgYSBiYXNpYyBzZWFyY2ggZm9yIHRoZWlyIHVzYWdlcy4gVGltZSB0byBnZXQgbXkgZ3JlcCBvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NDYzMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM0OjMyLjc5MTUzMTI3M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTkzMzk3MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihzdGF0ZV9sb2NhbHxldmVudHNfbG9jYWwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTA2IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jPTEyOTM9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTYtXFx0c3RydWN0IGludGVsX3VjICp1YyA9IGNvbnRhaW5lcl9vZihndWMsIHR5cGVvZigqdWMpLCBndWMpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTI5NzpcXHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgbG9nX2J1Zl9zdGF0ZV9sb2NhbDtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTgtXFx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlICpsb2dfYnVmX3N0YXRlO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzEzLVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNDpcXHRtZW1jcHkoXFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsIGxvZ19idWZfc3RhdGUsIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTUtXFx0YnVmZmVyX3NpemUgPSBpbnRlbF9ndWNfZ2V0X2xvZ19idWZmZXJfc2l6ZShcXHUwMDI2Z3VjLVxcdTAwM2Vsb2csIEdVQ19DQVBUVVJFX0xPR19CVUZGRVIpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNjpcXHRyZWFkX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwucmVhZF9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE3OlxcdHdyaXRlX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuc2FtcGxlZF93cml0ZV9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE4OlxcdGZ1bGxfY291bnQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmJ1ZmZlcl9mdWxsX2NudDtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTktXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzIwLVxcdC8qIEJvb2trZWVwaW5nIHN0dWZmICovXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzIxOlxcdGd1Yy1cXHUwMDNlbG9nLnN0YXRzW0dVQ19DQVBUVVJFX0xPR19CVUZGRVJdLmZsdXNoICs9IGxvZ19idWZfc3RhdGVfbG9jYWwuZmx1c2hfdG9fZmlsZTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMjItXFx0bmV3X292ZXJmbG93ID0gaW50ZWxfZ3VjX2NoZWNrX2xvZ19idWZfb3ZlcmZsb3coXFx1MDAyNmd1Yy1cXHUwMDNlbG9nLCBHVUNfQ0FQVFVSRV9MT0dfQlVGRkVSLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jPTM3NT1zdGF0aWMgdm9pZCBfZ3VjX2xvZ19jb3B5X2RlYnVnbG9nc19mb3JfcmVsYXkoc3RydWN0IGludGVsX2d1Y19sb2cgKmxvZylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy0zNzktXFx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlICpsb2dfYnVmX3N0YXRlLCAqbG9nX2J1Zl9zbmFwc2hvdF9zdGF0ZTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6MzgwOlxcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy0zODEtXFx0ZW51bSBndWNfbG9nX2J1ZmZlcl90eXBlIHR5cGU7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDE4LVxcdFxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0MTk6XFx0XFx0bWVtY3B5KFxcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLCBsb2dfYnVmX3N0YXRlLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjAtXFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDIxLVxcdFxcdGJ1ZmZlcl9zaXplID0gaW50ZWxfZ3VjX2dldF9sb2dfYnVmZmVyX3NpemUobG9nLCB0eXBlKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIyOlxcdFxcdHJlYWRfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5yZWFkX3B0cjtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIzOlxcdFxcdHdyaXRlX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuc2FtcGxlZF93cml0ZV9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyNDpcXHRcXHRmdWxsX2NudCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuYnVmZmVyX2Z1bGxfY250O1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjUtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyNi1cXHRcXHQvKiBCb29ra2VlcGluZyBzdHVmZiAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0Mjc6XFx0XFx0bG9nLVxcdTAwM2VzdGF0c1t0eXBlXS5mbHVzaCArPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsdXNoX3RvX2ZpbGU7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyOC1cXHRcXHRuZXdfb3ZlcmZsb3cgPSBpbnRlbF9ndWNfY2hlY2tfbG9nX2J1Zl9vdmVyZmxvdyhsb2csIHR5cGUsIGZ1bGxfY250KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MzUtXFx0XFx0LyogRmlyc3QgY29weSB0aGUgc3RhdGUgc3RydWN0dXJlIGluIHNuYXBzaG90IGJ1ZmZlciAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0MzY6XFx0XFx0bWVtY3B5KGxvZ19idWZfc25hcHNob3Rfc3RhdGUsIFxcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MzctXFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jPTEzODg9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgeGVfZ3VjICpndWMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xMzkxLVxcdHN0cnVjdCB4ZV91YyAqdWMgPSBjb250YWluZXJfb2YoZ3VjLCB0eXBlb2YoKnVjKSwgZ3VjKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxMzkyOlxcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTEzOTMtXFx0c3RydWN0IF9fZ3VjX2NhcHR1cmVfYnVmc3RhdGUgYnVmO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQwNi1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDA3OlxcdHhlX21hcF9tZW1jcHlfZnJvbShndWNfdG9feGUoZ3VjKSwgXFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsIFxcdTAwMjZndWMtXFx1MDAzZWxvZy5iby1cXHUwMDNldm1hcCxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDA4LVxcdFxcdFxcdCAgIGxvZ19idWZfc3RhdGVfb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDEwLVxcdGJ1ZmZlcl9zaXplID0gWEVfR1VDX0xPR19TVEFURV9DQVBUVVJFX0JVRkZFUl9TSVpFO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTE6XFx0cmVhZF9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnJlYWRfcHRyO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTI6XFx0d3JpdGVfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5zYW1wbGVkX3dyaXRlX3B0cjtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDEzOlxcdGZ1bGxfY291bnQgPSBGSUVMRF9HRVQoR1VDX0xPR19CVUZGRVJfU1RBVEVfQlVGRkVSX0ZVTExfQ05ULCBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE0LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0MTUtXFx0LyogQm9va2tlZXBpbmcgc3R1ZmYgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDE2OlxcdHRtcCA9IEZJRUxEX0dFVChHVUNfTE9HX0JVRkZFUl9TVEFURV9GTFVTSF9UT19GSUxFLCBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE3LVxcdGd1Yy1cXHUwMDNlbG9nLnN0YXRzW0dVQ19MT0dfVFlQRV9TVEFURV9DQVBUVVJFXS5mbHVzaCArPSB0bXA7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDU4LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0NTk6XFx0bG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyBcXHUwMDI2PSB+R1VDX0xPR19CVUZGRVJfU1RBVEVfRkxVU0hfVE9fRklMRTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDYwLVxcdHhlX21hcF93cihndWNfdG9feGUoZ3VjKSwgXFx1MDAyNmd1Yy1cXHUwMDNlbG9nLmJvLVxcdTAwM2V2bWFwLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjEtXFx0XFx0ICBsb2dfYnVmX3N0YXRlX29mZnNldCArIG9mZnNldG9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSwgZmxhZ3MpLCB1MzIsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQ2MjpcXHRcXHQgIGxvZ19idWZfc3RhdGVfbG9jYWwuZmxhZ3MpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjMtXFx0X19ndWNfY2FwdHVyZV9mbHVzaGxvZ19jb21wbGV0ZShndWMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oPTE5PXN0cnVjdCByZG1hX2Nncm91cCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgtMjktXFx0c3RydWN0IGNncm91cF9maWxlXFx0XFx0ZXZlbnRzX2ZpbGU7XFxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oOjMwOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19sb2NhbF9maWxlO1xcbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaC0zMS19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oPTM1PXN0cnVjdCBodWdldGxiX2Nncm91cCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNDgtXFx0YXRvbWljX2xvbmdfdCBldmVudHNbSFVHRV9NQVhfSFNUQVRFXVtIVUdFVExCX05SX01FTU9SWV9FVkVOVFNdO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo0OTpcXHRhdG9taWNfbG9uZ190IGV2ZW50c19sb2NhbFtIVUdFX01BWF9IU1RBVEVdW0hVR0VUTEJfTlJfTUVNT1JZX0VWRU5UU107XFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTUwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTU0LVxcdC8qIEhhbmRsZSBmb3IgXFxcImh1Z2V0bGIuZXZlbnRzLmxvY2FsXFxcIiAqL1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo1NTpcXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2xvY2FsX2ZpbGVbSFVHRV9NQVhfSFNUQVRFXTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNTYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjMxLVxcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfZmlsZTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyMzI6XFx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19sb2NhbF9maWxlO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTIzMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI0MS1cXHRhdG9taWNfbG9uZ190XFx0XFx0bWVtb3J5X2V2ZW50c1tNRU1DR19OUl9NRU1PUllfRVZFTlRTXTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNDI6XFx0YXRvbWljX2xvbmdfdFxcdFxcdG1lbW9yeV9ldmVudHNfbG9jYWxbTUVNQ0dfTlJfTUVNT1JZX0VWRU5UU107XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjQzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTQ2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05NDctXFx0XFx0XFx0XFx0XFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTQ4OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk0OS1cXHRcXHRcXHRcXHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDA1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQxMC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDExOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQxMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9NDI9c3RydWN0IG1pc2NfcmVzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC00Ni1cXHRhdG9taWM2NF90IGV2ZW50cztcXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg6NDc6XFx0YXRvbWljNjRfdCBldmVudHNfbG9jYWw7XFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTQ4LX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9NTY9c3RydWN0IG1pc2NfY2cge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTYxLVxcdC8qIG1pc2MuZXZlbnRzLmxvY2FsICovXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oOjYyOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZTtcXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtNjMtXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0xMjU9c3RhdGljIHZvaWQgbWlzY19jZ19ldmVudChlbnVtIG1pc2NfcmVzX3R5cGUgdHlwZSwgc3RydWN0IG1pc2NfY2cgKmNnKVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTEyNi17XFxua2VybmVsL2Nncm91cC9taXNjLmM6MTI3OlxcdGF0b21pYzY0X2luYyhcXHUwMDI2Y2ctXFx1MDAzZXJlc1t0eXBlXS5ldmVudHNfbG9jYWwpO1xcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjEyODpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNmNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxua2VybmVsL2Nncm91cC9taXNjLmMtMTI5LVxcbi0tXFxua2VybmVsL2Nncm91cC9taXNjLmM9MzY3PXN0YXRpYyBpbnQgX19taXNjX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIGJvb2wgbG9jYWwpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0zNzQtXFx0XFx0aWYgKGxvY2FsKVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjM3NTpcXHRcXHRcXHRldmVudHMgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZjZy1cXHUwMDNlcmVzW2ldLmV2ZW50c19sb2NhbCk7XFxua2VybmVsL2Nncm91cC9taXNjLmMtMzc2LVxcdFxcdGVsc2VcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM4ND1zdGF0aWMgaW50IG1pc2NfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTM4OC1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYzozODk6c3RhdGljIGludCBtaXNjX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxua2VybmVsL2Nncm91cC9taXNjLmMtMzkwLXtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM5NT1zdGF0aWMgc3RydWN0IGNmdHlwZSBtaXNjX2NnX2ZpbGVzW10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYy00MjMtXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNDpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbWlzY19jZywgZXZlbnRzX2xvY2FsX2ZpbGUpLFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNTpcXHRcXHQuc2VxX3Nob3cgPSBtaXNjX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTQyNi1cXHR9LFxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9NDk9c3RydWN0IHBpZHNfY2dyb3VwIHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTYxLVxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19maWxlO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjYyOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19sb2NhbF9maWxlO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTYzLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTY0LVxcdGF0b21pYzY0X3RcXHRcXHRcXHRldmVudHNbTlJfUElEQ0dfRVZFTlRTXTtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo2NTpcXHRhdG9taWM2NF90XFx0XFx0XFx0ZXZlbnRzX2xvY2FsW05SX1BJRENHX0VWRU5UU107XFxua2VybmVsL2Nncm91cC9waWRzLmMtNjYtfTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTI0Mz1zdGF0aWMgdm9pZCBwaWRzX2V2ZW50KHN0cnVjdCBwaWRzX2Nncm91cCAqcGlkc19mb3JraW5nLFxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMjQ4LVxcdC8qIE9ubHkgbG9nIHRoZSBmaXJzdCB0aW1lIGxpbWl0IGlzIGhpdC4gKi9cXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNDk6XFx0aWYgKGF0b21pYzY0X2luY19yZXR1cm4oXFx1MDAyNnAtXFx1MDAzZWV2ZW50c19sb2NhbFtQSURDR19GT1JLRkFJTF0pID09IDEpIHtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTAtXFx0XFx0cHJfaW5mbyhcXFwiY2dyb3VwOiBmb3JrIHJlamVjdGVkIGJ5IHBpZHMgY29udHJvbGxlciBpbiBcXFwiKTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI1NS1cXHQgICAgY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUykge1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI1NjpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNnAtXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTctXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMjU5LVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI2MDpcXHRhdG9taWM2NF9pbmMoXFx1MDAyNnBpZHNfb3Zlcl9saW1pdC1cXHUwMDNlZXZlbnRzX2xvY2FsW1BJRENHX01BWF0pO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI2MTpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNnBpZHNfb3Zlcl9saW1pdC1cXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI2Mi1cXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTM2MT1zdGF0aWMgaW50IF9fcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBib29sIGxvY2FsKVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMzcxLVxcdH1cXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzozNzI6XFx0ZXZlbnRzID0gbG9jYWwgPyBwaWRzLVxcdTAwM2VldmVudHNfbG9jYWwgOiBwaWRzLVxcdTAwM2VldmVudHM7XFxua2VybmVsL2Nncm91cC9waWRzLmMtMzczLVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9Mzc4PXN0YXRpYyBpbnQgcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMzgzLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjM4NDpzdGF0aWMgaW50IHBpZHNfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0zODUte1xcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9MzkwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHBpZHNfZmlsZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTQxNC1cXHRcXHQubmFtZSA9IFxcXCJldmVudHMubG9jYWxcXFwiLFxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjQxNTpcXHRcXHQuc2VxX3Nob3cgPSBwaWRzX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjQxNjpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGlkc19jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy00MTctXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9NzU9c3RydWN0IHJkbWFjZ19yZXNvdXJjZV9wb29sIHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTg5LVxcdHU2NFxcdFxcdFxcdGV2ZW50c19hbGxvY19mYWlsW1JETUFDR19SRVNPVVJDRV9NQVhdO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjkwOlxcdHU2NFxcdFxcdFxcdGV2ZW50c19sb2NhbF9tYXhbUkRNQUNHX1JFU09VUkNFX01BWF07XFxua2VybmVsL2Nncm91cC9yZG1hLmM6OTE6XFx0dTY0XFx0XFx0XFx0ZXZlbnRzX2xvY2FsX2FsbG9jX2ZhaWxbUkRNQUNHX1JFU09VUkNFX01BWF07XFxua2VybmVsL2Nncm91cC9yZG1hLmMtOTItfTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTEzOT1zdGF0aWMgYm9vbCBycG9vbF9oYXNfcGVyc2lzdGVudF9zdGF0ZShzdHJ1Y3QgcmRtYWNnX3Jlc291cmNlX3Bvb2wgKnJwb29sKVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmMtMTUwLVxcdFxcdCAgICBycG9vbC1cXHUwMDNlZXZlbnRzX21heFtpXSB8fFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MTpcXHRcXHQgICAgcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gfHxcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0xNTItXFx0XFx0ICAgIHJwb29sLVxcdTAwM2VldmVudHNfYWxsb2NfZmFpbFtpXSB8fFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MzpcXHRcXHQgICAgcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2ldKVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTE1NC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTI1OT1zdGF0aWMgdm9pZCByZG1hY2dfZXZlbnRfbG9ja2VkKHN0cnVjdCByZG1hX2Nncm91cCAqY2csXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yNzEtXFx0aWYgKHJwb29sKSB7XFxua2VybmVsL2Nncm91cC9yZG1hLmM6MjcyOlxcdFxcdHJwb29sLVxcdTAwM2VldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtpbmRleF0rKztcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyNzM6XFx0XFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFxcdTAwMjZjZy1cXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTI3NC1cXHR9XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yNzgtXFx0aWYgKHJwb29sKSB7XFxua2VybmVsL2Nncm91cC9yZG1hLmM6Mjc5OlxcdFxcdHJwb29sLVxcdTAwM2VldmVudHNfbG9jYWxfbWF4W2luZGV4XSsrO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjI4MDpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm92ZXJfY2ctXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yODEtXFx0fVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9Njg4PXN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03MTYtXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzE3OnN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxua2VybmVsL2Nncm91cC9yZG1hLmMtNzE4LXtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczMi1cXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzMzOlxcdFxcdFxcdFxcdCAgIHJwb29sID8gcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gOiAwVUxMLFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczNC1cXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzM1OlxcdFxcdFxcdFxcdCAgIHJwb29sID8gcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2ldIDogMFVMTCk7XFxua2VybmVsL2Nncm91cC9yZG1hLmMtNzM2LVxcdFxcdFxcdGlmIChpIFxcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWCAtIDEpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz03NDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgcmRtYWNnX2ZpbGVzW10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03NzMtXFx0XFx0Lm5hbWUgPSBcXFwiZXZlbnRzLmxvY2FsXFxcIixcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo3NzQ6XFx0XFx0LnNlcV9zaG93ID0gcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjc3NTpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcmRtYV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03NzYtXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz0yNDM9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfZXZlbnQoc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpodWdldGxiLCBpbnQgaWR4LFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNDUte1xcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6MjQ2OlxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2aHVnZXRsYi1cXHUwMDNlZXZlbnRzX2xvY2FsW2lkeF1bZXZlbnRdKTtcXG5tbS9odWdldGxiX2Nncm91cC5jOjI0NzpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNmh1Z2V0bGItXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlW2lkeF0pO1xcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtMjQ4LVxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz02Nzc9c3RhdGljIGludCBfX2h1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIGJvb2wgbG9jYWwpXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jLTY4Ni1cXHRpZiAobG9jYWwpXFxubW0vaHVnZXRsYl9jZ3JvdXAuYzo2ODc6XFx0XFx0bWF4ID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2aF9jZy1cXHUwMDNlZXZlbnRzX2xvY2FsW2lkeF1bSFVHRVRMQl9NQVhdKTtcXG5tbS9odWdldGxiX2Nncm91cC5jLTY4OC1cXHRlbHNlXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jPTY5Nj1zdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jLTcwMC1cXG5tbS9odWdldGxiX2Nncm91cC5jOjcwMTpzdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy03MDIte1xcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz03MDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgaHVnZXRsYl9kZmxfdG1wbFtdID0ge1xcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy03NDAtXFx0XFx0Lm5hbWUgPSBcXFwiZXZlbnRzLmxvY2FsXFxcIixcXG5tbS9odWdldGxiX2Nncm91cC5jOjc0MTpcXHRcXHQuc2VxX3Nob3cgPSBodWdldGxiX2V2ZW50c19sb2NhbF9zaG93LFxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6NzQyOlxcdFxcdC5maWxlX29mZnNldCA9IE1FTUZJTEVfT0ZGU0VUKHN0cnVjdCBodWdldGxiX2Nncm91cCwgZXZlbnRzX2xvY2FsX2ZpbGVbMF0pLFxcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNzQzLVxcdFxcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNzQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbm9kZV9ucl9scnVfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE3NTYtXFx0XFx0ZWxzZVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNzU3OlxcdFxcdFxcdG5yICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywgTlJfTFJVX0JBU0UgKyBscnUpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzU4LVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNzYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbnJfbHJ1X3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzc0LVxcdFxcdGVsc2VcXG5tbS9tZW1jb250cm9sLXYxLmM6MTc3NTpcXHRcXHRcXHRuciArPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBOUl9MUlVfQkFTRSArIGxydSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE3NzYtXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE4NjM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfZXZlbnRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTg2OS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTg3MDp2b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzEte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtY2cxX3N0YXRzKTsgaSsrKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc1OlxcdFxcdHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIG1lbWNnMV9zdGF0c1tpXSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE4NzYtfVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODc3LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc4OnZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC12MS5jLTE4Nzkte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4ODItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODgzOlxcdFxcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBpKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg4NC19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg4Nj12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4OTgtXFxubW0vbWVtY29udHJvbC12MS5jOjE4OTk6XFx0XFx0bnIgPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChtZW1jZywgbWVtY2cxX3N0YXRzW2ldKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTkwMC1cXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiJXMgJWx1XFxcXG5cXFwiLCBtZW1jZzFfc3RhdF9uYW1lc1tpXSwgbnIpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE5MDQtXFx0XFx0c2VxX2J1Zl9wcmludGYocywgXFxcIiVzICVsdVxcXFxuXFxcIiwgdm1fZXZlbnRfbmFtZShtZW1jZzFfZXZlbnRzW2ldKSxcXG5tbS9tZW1jb250cm9sLXYxLmM6MTkwNTpcXHRcXHRcXHQgICAgICAgbWVtY2dfZXZlbnRzX2xvY2FsKG1lbWNnLCBtZW1jZzFfZXZlbnRzW2ldKSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE5MDYtXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTkwOC1cXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiJXMgJWx1XFxcXG5cXFwiLCBscnVfbGlzdF9uYW1lKGkpLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoxOTA5OlxcdFxcdFxcdCAgICAgICBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBOUl9MUlVfQkFTRSArIGkpICpcXG5tbS9tZW1jb250cm9sLXYxLmMtMTkxMC1cXHRcXHRcXHQgICAgICAgUEFHRV9TSVpFKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0zMj1zdGF0aWMgaW5saW5lIGJvb2wgZG9fbWVtc3dfYWNjb3VudCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTM2LVxcbm1tL21lbWNvbnRyb2wtdjEuaDozNzp1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudCk7XFxubW0vbWVtY29udHJvbC12MS5oOjM4OnVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpO1xcbm1tL21lbWNvbnRyb2wtdjEuaDozOTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xcbm1tL21lbWNvbnRyb2wtdjEuaC00MC1ib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD02ND12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKTtcXG5tbS9tZW1jb250cm9sLXYxLmg6NjU6dm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcXG5tbS9tZW1jb250cm9sLXYxLmg6NjY6dm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCk7XFxubW0vbWVtY29udHJvbC12MS5oLTY3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNjktXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XFxubW0vbWVtY29udHJvbC12MS5oOjcwOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNzEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTIzNj1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcXG5tbS9tZW1jb250cm9sLmMtMjM3LVxcbm1tL21lbWNvbnRyb2wuYzoyMzg6c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG5tbS9tZW1jb250cm9sLmMtMjM5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTEtXFx0LyogVGhlIGZvbGxvd2luZyBjb3VudHMgYXJlIGFsbCBub24taGllcmFyY2hpY2FsIGFuZCBuZWVkIHRvIGJlIHJlcGFyZW50ZWQuICovXFxubW0vbWVtY29udHJvbC5jOjI1MjpcXHRyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jOjI1MzpcXHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0yNTQtXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU3LSNlbHNlXFxubW0vbWVtY29udHJvbC5jOjI1ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYy0yNTkte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwNy1cXG5tbS9tZW1jb250cm9sLmM6MzA4OlxcdHJlcGFyZW50X3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0zMDktfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4MT1zdHJ1Y3QgbHJ1dmVjX3N0YXRzIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00ODUtXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHN0YXRlICovXFxubW0vbWVtY29udHJvbC5jOjQ4NjpcXHRsb25nIHN0YXRlX2xvY2FsW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XFxubW0vbWVtY29udHJvbC5jLTQ4Ny1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0OS1cXG5tbS9tZW1jb250cm9sLmM6NTUwOnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL21lbWNvbnRyb2wuYy01NTEtXFx0XFx0XFx0XFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0LVxcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxubW0vbWVtY29udHJvbC5jOjU2NTpcXHR4ID0gUkVBRF9PTkNFKHBuLVxcdTAwM2VscnV2ZWNfc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcXG5tbS9tZW1jb250cm9sLmMtNTY2LSNpZmRlZiBDT05GSUdfU01QXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc0PXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc2LVxcbm1tL21lbWNvbnRyb2wuYzo1Nzc6dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy01NzgtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTg0LVxcdFxcdHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhwYXJlbnQsIE5PREVfREFUQShuaWQpKTtcXG5tbS9tZW1jb250cm9sLmM6NTg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjaGlsZF9scnV2ZWMsIGlkeCk7XFxubW0vbWVtY29udHJvbC5jLTU4Ni1cXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqY2hpbGRfcG4sICpwYXJlbnRfcG47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjczPXN0cnVjdCBtZW1jZ192bXN0YXRzIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02NzktXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXFx1MDAyNiBldmVudHMgKi9cXG5tbS9tZW1jb250cm9sLmM6NjgwOlxcdGxvbmdcXHRcXHRcXHRzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07XFxubW0vbWVtY29udHJvbC5jOjY4MTpcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XFxubW0vbWVtY29udHJvbC5jLTY4Mi0jZW5kaWZcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02OTYtI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYzo2OTc6c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNjk4LXtcXG5tbS9tZW1jb250cm9sLmM6Njk5OlxcdHJldHVybiBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwMC19XFxubW0vbWVtY29udHJvbC5jLTcwMS1cXG5tbS9tZW1jb250cm9sLmM6NzAyOnN0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy03MDMte1xcbm1tL21lbWNvbnRyb2wuYzo3MDQ6XFx0cmV0dXJuIG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwNS19XFxubW0vbWVtY29udHJvbC5jLTcwNi0jZWxzZVxcbm1tL21lbWNvbnRyb2wuYzo3MDc6c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNzA4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03MTEtXFxubW0vbWVtY29udHJvbC5jOjcxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNzEzLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04NjA9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTg3OC0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXFxubW0vbWVtY29udHJvbC5jOjg3OTogKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy5cXG5tbS9tZW1jb250cm9sLmMtODgwLSAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTk0ND12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NTgtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xcbm1tL21lbWNvbnRyb2wuYzo5NTk6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG5tbS9tZW1jb250cm9sLmMtOTYwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NjYtXFxubW0vbWVtY29udHJvbC5jOjk2NzpcXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxubW0vbWVtY29udHJvbC5jLTk2OC0jaWZkZWYgQ09ORklHX1NNUFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk3NC1cXG5tbS9tZW1jb250cm9sLmM6OTc1OnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy05NzYtXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcXG5tbS9tZW1jb250cm9sLmMtOTc3LXtcXG5tbS9tZW1jb250cm9sLmM6OTc4OlxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpZHgpO1xcbm1tL21lbWNvbnRyb2wuYy05NzktXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEzMj1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTQwLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmM6MTE0MTp1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG5tbS9tZW1jb250cm9sLmMtMTE0Mi17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE0Ny1cXG5tbS9tZW1jb250cm9sLmM6MTE0ODpcXHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy0xMTQ5LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzI0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzMwLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmM6MTczMTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxubW0vbWVtY29udHJvbC5jLTE3MzIte1xcbm1tL21lbWNvbnRyb2wuYzoxNzMzOlxcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpdGVtKSAqXFxubW0vbWVtY29udHJvbC5jLTE3MzQtXFx0XFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTExPXZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5MTktXFxubW0vbWVtY29udHJvbC5jOjE5MjA6XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c19sb2NhbFtldmVudF0pO1xcbm1tL21lbWNvbnRyb2wuYy0xOTIxLVxcdGlmICghc3dhcF9ldmVudCBcXHUwMDI2XFx1MDAyNiBhbGxvd19zcGlubmluZylcXG5tbS9tZW1jb250cm9sLmM6MTkyMjpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxubW0vbWVtY29udHJvbC5jLTE5MjMtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQ5Nj1zdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ1MDAtXFx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cXG5tbS9tZW1jb250cm9sLmM6NDUwMTpcXHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxcbm1tL21lbWNvbnRyb2wuYy00NTAyLVxcdCAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ1NTM9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG5tbS9tZW1jb250cm9sLmMtNDU1NC17XFxubW0vbWVtY29udHJvbC5jOjQ1NTU6XFx0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jLTQ1NTYtXFx0aW50IG5pZDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTYyLVxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0ga21lbTtcXG5tbS9tZW1jb250cm9sLmM6NDU2MzpcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ1NjQ6XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IGttZW07XFxubW0vbWVtY29udHJvbC5jLTQ1NjUtXFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTgxLVxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ1ODI6XFx0XFx0XFx0bHN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDU4My1cXHRcXHRcXHRpZiAocGxzdGF0cylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTg1LVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmM6NDU4NjpcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ1ODc6XFx0XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ1ODgtXFx0XFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTk1LVxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ1OTY6XFx0XFx0XFx0bHN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDU5Ny1cXHRcXHRcXHRpZiAocGxzdGF0cylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTk5LVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmM6NDYwMDpcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ2MDE6XFx0XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ2MDItXFx0XFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NjEyPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYyNS1cXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlLFxcbm1tL21lbWNvbnRyb2wuYzo0NjI2OlxcdFxcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcXG5tbS9tZW1jb250cm9sLmMtNDYyNy1cXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2MzYtXFx0XFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHMsXFxubW0vbWVtY29udHJvbC5jOjQ2Mzc6XFx0XFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcXG5tbS9tZW1jb250cm9sLmMtNDYzOC1cXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjU4LVxcdFxcdFxcdC5hZ2dyZWdhdGUgPSBsc3RhdHMtXFx1MDAzZXN0YXRlLFxcbm1tL21lbWNvbnRyb2wuYzo0NjU5OlxcdFxcdFxcdC5sb2NhbCA9IGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWwsXFxubW0vbWVtY29udHJvbC5jLTQ2NjAtXFx0XFx0XFx0LnBlbmRpbmcgPSBsc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTAzND1zdGF0aWMgaW50IG1lbW9yeV9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA0MS1cXG5tbS9tZW1jb250cm9sLmM6NTA0MjpzdGF0aWMgaW50IG1lbW9yeV9ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxubW0vbWVtY29udHJvbC5jLTUwNDMte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwNDUtXFxubW0vbWVtY29udHJvbC5jOjUwNDY6XFx0X19tZW1vcnlfZXZlbnRzX3Nob3cobSwgbWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNfbG9jYWwpO1xcbm1tL21lbWNvbnRyb2wuYy01MDQ3LVxcdHJldHVybiAwO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxNDc9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE5My1cXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxubW0vbWVtY29udHJvbC5jOjUxOTQ6XFx0XFx0LmZpbGVfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1lbV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5tbS9tZW1jb250cm9sLmM6NTE5NTpcXHRcXHQuc2VxX3Nob3cgPSBtZW1vcnlfZXZlbnRzX2xvY2FsX3Nob3csXFxubW0vbWVtY29udHJvbC5jLTUxOTYtXFx0fSxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz02NTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM0OjM1Ljk4NDkzMjIxOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0Nzk4MDcyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBjb250cm9sIGNvZGUgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IG1lbW9yeSBhY2NvdW50aW5nIHdvcmtzIHdpdGhpbiBhIGNncm91cC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxgIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gbGluZSA5NTkgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgZnVuY3Rpb24gY2FsbCBpcyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSB3YW50IHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgd2hlcmUgdGhlIGxvY2FsIHBlci1DUFUgcGFnZSBzdGF0ZSBpcyB1cGRhdGVkLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGRhdGEgc3RydWN0dXJlcyBhbmQgY29uY3VycmVuY3kgbWVjaGFuaXNtcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIHBlci1ub2RlIGluZm9ybWF0aW9uLiBJIHRoaW5rIGJ5IHRyYWNpbmcgaG93IHRoaXMgaXMgdXNlZCwgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBnbG9iYWwgY291bnRlcnMgd2lsbCBiZWNvbWUgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6MzQ6NDMuNDY0NzQxMTc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdFxcdFxcdHJldHVybjtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxuIDk1MzpcXHRcXHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbiA5NTQ6XFx0XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxuIDk1NTpcXHR9XFxuIDk1NjpcXHRcXG4gOTU3OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gOTU4OlxcdC8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cXG4gOTU5OlxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXFxuIDk2MDpcXHR7XFxuIDk2MTpcXHRcXHRsb25nIHg7XFxuIDk2MjpcXHRcXHRpbnQgaSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XFxuIDk2MzpcXHRcXG4gOTY0OlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gOTY1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5NjY6XFx0XFxuIDk2NzpcXHRcXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxuIDk2ODpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbiA5Njk6XFx0XFx0aWYgKHggXFx1MDAzYyAwKVxcbiA5NzA6XFx0XFx0XFx0eCA9IDA7XFxuIDk3MTpcXHQjZW5kaWZcXG4gOTcyOlxcdFxcdHJldHVybiB4O1xcbiA5NzM6XFx0fVxcbiA5NzQ6XFx0XFxuIDk3NTpcXHR2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gOTc2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuIDk3NzpcXHR7XFxuIDk3ODpcXHRcXHR1bnNpZ25lZCBsb25nIHZhbHVlID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaWR4KTtcXG4gOTc5OlxcdFxcbiA5ODA6XFx0XFx0X19tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgLXZhbHVlKTtcXG4gOTgxOlxcdFxcdF9fbW9kX21lbWNnX3N0YXRlKHBhcmVudCwgaWR4LCB2YWx1ZSk7XFxuIDk4MjpcXHR9XFxuIDk4MzpcXHQjZW5kaWZcXG4gOTg0OlxcdFxcbiA5ODU6XFx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4gOTg2OlxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxcbiA5ODc6XFx0e1xcbiA5ODg6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gcG4tXFx1MDAzZW1lbWNnO1xcbiA5ODk6XFx0XFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozNDo0My40NjUwNTgyMTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MzgyNjkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBDb2RlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG1lbW9yeSBjZ3JvdXAgY29kZSBhZ2Fpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2Ugc3RhdHMgYXJlIGJlaW5nIGZsdXNoZWQgYW5kIGFnZ3JlZ2F0ZWQuIExldCdzIHplcm8gaW4gb24gYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYCBhbmQgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLiBJJ20gZ29pbmcgdG8ganVtcCB0byB0aGF0IHNlY3Rpb24gYXJvdW5kIGxpbmVzIDQ1MDAgdG8gNDY1MCBpbiBgbW0vbWVtY29udHJvbC5jYC4gSG9wZWZ1bGx5LCB0aGUgc3RydWN0dXJlIGFuZCBsb2dpYyBhcmUgc3RpbGwgZnJlc2ggaW4gbXkgbWluZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvIHByb3ZpZGluZyBhY2N1cmF0ZSBtZW1vcnkgdXNhZ2UgcmVwb3J0cy4gVGhpcyBtaWdodCBoYXZlIGEgc3BlY2lmaWMgdXNlIGNhc2UgSSBoYXZlIGluIG1pbmQgd2hlcmUgdW5kZXJzdGFuZGluZyB0aGUgdGltaW5nIGFuZCBpbXBhY3Qgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3OTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM0OjQ1LjgzODg4Nzc0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDM1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1MDA6XFx0XFx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cXG40NTAxOlxcdFxcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXFxuNDUwMjpcXHRcXHQgKi9cXG40NTAzOlxcdFxcdGxvbmcgKmxvY2FsO1xcbjQ1MDQ6XFx0XFx0LyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xcbjQ1MDU6XFx0XFx0bG9uZyAqcGVuZGluZztcXG40NTA2OlxcdFxcdC8qIHBvaW50ZXIgdG8gdGhlIHBhcmVudCdzIHBlbmRpbmcgY291bnRlcnMsIGNvdWxkIGJlIE5VTEwgKi9cXG40NTA3OlxcdFxcdGxvbmcgKnBwZW5kaW5nO1xcbjQ1MDg6XFx0XFx0LyogcG9pbnRlciB0byB0aGUgcGVyY3B1IGNvdW50ZXJzIHRvIGJlIGFnZ3JlZ2F0ZWQgKi9cXG40NTA5OlxcdFxcdGxvbmcgKmNzdGF0O1xcbjQ1MTA6XFx0XFx0LyogcG9pbnRlciB0byB0aGUgcGVyY3B1IGNvdW50ZXJzIG9mIHRoZSBsYXN0IGFnZ3JlZ2F0aW9uKi9cXG40NTExOlxcdFxcdGxvbmcgKmNzdGF0X3ByZXY7XFxuNDUxMjpcXHRcXHQvKiBzaXplIG9mIHRoZSBhYm92ZSBjb3VudGVycyAqL1xcbjQ1MTM6XFx0XFx0aW50IHNpemU7XFxuNDUxNDpcXHR9O1xcbjQ1MTU6XFx0XFxuNDUxNjpcXHRzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXFxuNDUxNzpcXHR7XFxuNDUxODpcXHRcXHRpbnQgaTtcXG40NTE5OlxcdFxcdGxvbmcgZGVsdGEsIGRlbHRhX2NwdSwgdjtcXG40NTIwOlxcdFxcbjQ1MjE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFjLVxcdTAwM2VzaXplOyBpKyspIHtcXG40NTIyOlxcdFxcdFxcdC8qXFxuNDUyMzpcXHRcXHRcXHQgKiBDb2xsZWN0IHRoZSBhZ2dyZWdhdGVkIHByb3BhZ2F0aW9uIGNvdW50cyBvZiBncm91cHNcXG40NTI0OlxcdFxcdFxcdCAqIGJlbG93IHVzLiBXZSdyZSBpbiBhIHBlci1jcHUgbG9vcCBoZXJlIGFuZCB0aGlzIGlzXFxuNDUyNTpcXHRcXHRcXHQgKiBhIGdsb2JhbCBjb3VudGVyLCBzbyB0aGUgZmlyc3QgY3ljbGUgd2lsbCBnZXQgdGhlbS5cXG40NTI2OlxcdFxcdFxcdCAqL1xcbjQ1Mjc6XFx0XFx0XFx0ZGVsdGEgPSBhYy1cXHUwMDNlcGVuZGluZ1tpXTtcXG40NTI4OlxcdFxcdFxcdGlmIChkZWx0YSlcXG40NTI5OlxcdFxcdFxcdFxcdGFjLVxcdTAwM2VwZW5kaW5nW2ldID0gMDtcXG40NTMwOlxcdFxcbjQ1MzE6XFx0XFx0XFx0LyogQWRkIENQVSBjaGFuZ2VzIG9uIHRoaXMgbGV2ZWwgc2luY2UgdGhlIGxhc3QgZmx1c2ggKi9cXG40NTMyOlxcdFxcdFxcdGRlbHRhX2NwdSA9IDA7XFxuNDUzMzpcXHRcXHRcXHR2ID0gUkVBRF9PTkNFKGFjLVxcdTAwM2Vjc3RhdFtpXSk7XFxuNDUzNDpcXHRcXHRcXHRpZiAodiAhPSBhYy1cXHUwMDNlY3N0YXRfcHJldltpXSkge1xcbjQ1MzU6XFx0XFx0XFx0XFx0ZGVsdGFfY3B1ID0gdiAtIGFjLVxcdTAwM2Vjc3RhdF9wcmV2W2ldO1xcbjQ1MzY6XFx0XFx0XFx0XFx0ZGVsdGEgKz0gZGVsdGFfY3B1O1xcbjQ1Mzc6XFx0XFx0XFx0XFx0YWMtXFx1MDAzZWNzdGF0X3ByZXZbaV0gPSB2O1xcbjQ1Mzg6XFx0XFx0XFx0fVxcbjQ1Mzk6XFx0XFxuNDU0MDpcXHRcXHRcXHQvKiBBZ2dyZWdhdGUgY291bnRzIG9uIHRoaXMgbGV2ZWwgYW5kIHByb3BhZ2F0ZSB1cHdhcmRzICovXFxuNDU0MTpcXHRcXHRcXHRpZiAoZGVsdGFfY3B1IFxcdTAwMjZcXHUwMDI2IGFjLVxcdTAwM2Vsb2NhbClcXG40NTQyOlxcdFxcdFxcdFxcdGFjLVxcdTAwM2Vsb2NhbFtpXSArPSBkZWx0YV9jcHU7XFxuNDU0MzpcXHRcXG40NTQ0OlxcdFxcdFxcdGlmIChkZWx0YSkge1xcbjQ1NDU6XFx0XFx0XFx0XFx0YWMtXFx1MDAzZWFnZ3JlZ2F0ZVtpXSArPSBkZWx0YTtcXG40NTQ2OlxcdFxcdFxcdFxcdGlmIChhYy1cXHUwMDNlcHBlbmRpbmcpXFxuNDU0NzpcXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlcHBlbmRpbmdbaV0gKz0gZGVsdGE7XFxuNDU0ODpcXHRcXHRcXHR9XFxuNDU0OTpcXHRcXHR9XFxuNDU1MDpcXHR9XFxuNDU1MTpcXHRcXG40NTUyOlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG40NTUzOlxcdHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuNDU1NDpcXHR7XFxuNDU1NTpcXHRcXHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcXG40NTU2OlxcdFxcdGludCBuaWQ7XFxuNDU1NzpcXHRcXG40NTU4OlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW1fc3RhdCkpIHtcXG40NTU5OlxcdFxcdFxcdGludCBrbWVtID0gYXRvbWljX3hjaGcoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtX3N0YXQsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozNDo0NS44MzkzOTQyMTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUyMzA0MzExMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbWNnIE9wdGltaXphdGlvbiBDb21taXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb21taXQncyBhYm91dCBvcHRpbWl6aW5nIGBtZW1jZ192bXN0YXRzYCB3aGVuIHdlICpkb24ndCogaGF2ZSBgQ09ORklHX01FTUNHX1YxYCBlbmFibGVkLiBTbywgdGhlIGtleSBpcyB0aGUgdjEgY2dyb3VwIGxlZ2FjeSBzdHVmZi4gSXQgbG9va3MgbGlrZSBpdCdzIHRha2luZyBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBvdXQgb2YgdGhlIGBtZW1jZ192bXN0YXRzYCBzdHJ1Y3QsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgdGhvc2UgZmllbGRzIGFyZSBvbmx5IHVzZWQgaW4gdjEgZm9yIGBtZW1vcnkuc3RhdGAgYW5kIHdoZW4gcmVwYXJlbnRpbmcgb24gb2ZmbGluZS4gVGhpcyBpcyBjb25kaXRpb25hbCB2aWEgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLiBJbiBlc3NlbmNlLCBpZiBpdCBpcyB2MiBvbmx5LCB3ZSBzYXZlIHNvbWUgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgd2hlbiB0aGUgbGVnYWN5IHN1cHBvcnQgaXNuJ3QgcHJlc2VudCwgdGhlIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAsIGBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlYCwgYW5kIGBmbHVzaF9ubWlfc3RhdHNgIGZ1bmN0aW9ucyB3aWxsIG5vdyByZXR1cm4gYE5VTExgIGZvciBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YC4gVGhhdCdzIGNyaXRpY2FsIGJlY2F1c2UgdGhlc2UgYXJyYXlzIGFyZSBubyBsb25nZXIgcHJlc2VudCwgc28gdGhpcyBwcmV2ZW50cyBhbnkgYWNjZXNzIHRvIHRoZSBvbGQsIG5vdyBub24tZXhpc3RlbnQsIGxvY2FsIGFycmF5cy4gVGhpcyBhdm9pZHMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZnV6emFibGU/IEl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbWNnIGxvZ2ljLiBJdCdzIG5vdCAqanVzdCogYSBjb3NtZXRpYyBjaGFuZ2U7IGl0J3MgY2hhbmdpbmcgY29uZGl0aW9uYWwgbG9naWMuIElmIHYxIGlzIG9uLCBgc3RhdGVfbG9jYWxgIGlzIHVzZWQuIElmIGl0J3Mgb2ZmLCBpdCBpcyBza2lwcGVkLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSEgSXQncyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc2luY2UgbWVtb3J5IGNncm91cHMgYXJlIGZ1bmRhbWVudGFsIGFuZCB1c2VkIGV2ZXJ5d2hlcmUgYW5kIGFyZSBkZWZpbml0ZWx5IGZ1enplZC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19NRU1DR2AgaXMgdGhlIGJhc2UsIG9mIGNvdXJzZSwgYW5kIGBDT05GSUdfTUVNQ0dfVjFgIGlzIHRoZSBzd2l0Y2guIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLCBsaWtlIGBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNgLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYGluaXQvS2NvbmZpZ2AgZm9yIHRoYXQgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk1NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjE4LjE0MzcwOTg5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjQ3MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDg3PWNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjE4LjU4NzM2MzI3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDA5NTU5MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIG15IGd1dCB0ZWxscyBtZSB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gbGluZXMgMTA3MCB0aHJvdWdoIDExMTAuIEknbSBhc3N1bWluZyB0aGF0IHRoaXMgc2VjdGlvbiBsaWtlbHkgaG91c2VzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgcmVsYXRlZCBkZXBlbmRlbmNpZXMgSSdtIGludGVyZXN0ZWQgaW4uIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgcGFyc2UgdGhvc2UgbGluZXMgZm9yIHRoZSByZWxldmFudCBjb25maWcgc3ltYm9scyBhbmQgdGhlaXIgcHJvcGVydGllcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhpcyBhcmVhIGJlaGF2ZXMgdW5kZXIgZGlmZmVyZW50IGNvbXBpbGF0aW9uIHNjZW5hcmlvcy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB0aGlzIHNlY3Rpb24gaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTkxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6Mzc6MjUuNTk2OTI0NzUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3NTpcXHRcXG4xMDc2OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNzc6XFx0XFxuMTA3ODpcXHRjb25maWcgTUVNQ0dcXG4xMDc5OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODA6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODE6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDgyOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDgzOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwODQ6XFx0XFx0aGVscFxcbjEwODU6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA4NjpcXHRcXG4xMDg3OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA4ODpcXHRcXHRib29sXFxuMTA4OTpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5MDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5MTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5MjpcXHRcXHRkZWZhdWx0IHlcXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTAyOlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZWZhdWx0IG5cXG4xMTA1OlxcdFxcdGhlbHBcXG4xMTA2OlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTEwNzpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTEwODpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTEwOTpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMTA6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTExOlxcdFxcbjExMTI6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuMTExMzpcXHRcXHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcXG4xMTE0OlxcdFxcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxcbjExMTU6XFx0XFxuMTExNjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMTE3OlxcdFxcbjExMTg6XFx0Y29uZmlnIEJMS19DR1JPVVBcXG4xMTE5OlxcdFxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjI1LjU5NzE5OTgxM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTk5Nzk0MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCBhbmQgRmx1c2hlcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgdGltZSB0byBkaWcgaW50byB0aGUgbWVtb3J5IGNncm91cCdzIGNvcmUgYWNjb3VudGluZywgc3BlY2lmaWNhbGx5IHRoZSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgIGZ1bmN0aW9uIGluIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHJvdXRpbmUgd29ya3MsIGFuZCB3aGF0IGl0J3MgcmVzcG9uc2libGUgZm9yLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSByZWZhY3RvcmluZyBvZiBhY2NvdW50aW5nIGNvZGUgYW5kIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhhdCBjb2RlLiBJIGtub3cgdGhlcmUgaGF2ZSBiZWVuIGNoYW5nZXMgdGhlcmUsIHNvIGxldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRzICpjYWxsZWQqIGZyb20uIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoZW4gdGhlIGZsdXNoIG9jY3Vycywgd2hhdCB0cmlnZ2VycyBpdCwgYW5kIHdoYXQgZGF0YSBpdCdzIGFjdHVhbGx5IG1vdmluZy4gVGhhdCBzaG91bGQgZXhwb3NlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgZnVydGhlciBvcHRpbWl6YXRpb24gb3IgdW5kZXJzdGFuZGluZyBtaWdodCBiZSBuZWVkZWQuIEkgd2FudCB0byBidWlsZCBhIGJldHRlciBtb2RlbCBmb3IgdGhlIHRyYWRlIG9mZnMgaW52b2x2ZWQgaW4gdXBkYXRpbmcgdGhlIHN0YXRzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNvbnRleHQgd2lsbCByZWFsbHkgaGVscCBtZSBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYWNjb3VudGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjMwLjE5Njk5NjgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjQwMDYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQ2MDg9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjExLVxcbm1tL21lbWNvbnRyb2wuYzo0NjEyOnN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxubW0vbWVtY29udHJvbC5jLTQ2MTMte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjE9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMjctXFx0LmNzc19yZXNldCA9IG1lbV9jZ3JvdXBfY3NzX3Jlc2V0LFxcbm1tL21lbWNvbnRyb2wuYzo1MjI4OlxcdC5jc3NfcnN0YXRfZmx1c2ggPSBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaCxcXG5tbS9tZW1jb250cm9sLmMtNTIyOS1cXHQuYXR0YWNoID0gbWVtX2Nncm91cF9hdHRhY2gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjMwLjI4MzQwMjMyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDY4OTM0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCAobWVtY29udHJvbC5jKSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUgYWdhaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IG1lbW9yeSBhY2NvdW50aW5nIGlzIHdvcmtpbmcsIGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgYWx3YXlzIHRvIGV4YW1pbmUgc3BlY2lmaWMgZnVuY3Rpb25zIEkndmUgZ290IHF1ZXN0aW9ucyBhYm91dC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnksIG9yIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZywgb2YgdGhlIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgZnVuY3Rpb24uIEl0J3MgYSBrZXkgcGllY2UgaW4gaG93IG1lbW9yeSBzdGF0aXN0aWNzIGFyZSBhZ2dyZWdhdGVkIGFuZCB3cml0dGVuIHRvIHRoZSBjZ3JvdXAgaGllcmFyY2h5LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBhcmVhIG9mIHRoZSBjb2RlLi4uIEknbGwgbG9vayBhdCBpdHMgcm9sZSBpbiBjb2xsZWN0aW5nIGFuZCB1cGRhdGluZyBtZW1vcnkgdXNhZ2Ugc3RhdHMsIGFzIHdlbGwgYXMgd2hlbiBpdCBpcyBjYWxsZWQgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozNzozNS43NTIzMzk1MzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjEyLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NjEyOlxcdHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuNDYxMzpcXHR7XFxuNDYxNDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XFxuNDYxNTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xcbjQ2MTY6XFx0XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0YztcXG40NjE3OlxcdFxcdHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCBhYztcXG40NjE4OlxcdFxcdGludCBuaWQ7XFxuNDYxOTpcXHRcXG40NjIwOlxcdFxcdGZsdXNoX25taV9zdGF0cyhtZW1jZywgcGFyZW50KTtcXG40NjIxOlxcdFxcbjQ2MjI6XFx0XFx0c3RhdGMgPSBwZXJfY3B1X3B0cihtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUsIGNwdSk7XFxuNDYyMzpcXHRcXG40NjI0OlxcdFxcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xcbjQ2MjU6XFx0XFx0XFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZSxcXG40NjI2OlxcdFxcdFxcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcXG40NjI3OlxcdFxcdFxcdC5wZW5kaW5nID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxuNDYyODpcXHRcXHRcXHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcgOiBOVUxMLFxcbjQ2Mjk6XFx0XFx0XFx0LmNzdGF0ID0gc3RhdGMtXFx1MDAzZXN0YXRlLFxcbjQ2MzA6XFx0XFx0XFx0LmNzdGF0X3ByZXYgPSBzdGF0Yy1cXHUwMDNlc3RhdGVfcHJldixcXG40NjMxOlxcdFxcdFxcdC5zaXplID0gTUVNQ0dfVk1TVEFUX1NJWkUsXFxuNDYzMjpcXHRcXHR9O1xcbjQ2MzM6XFx0XFx0bWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShcXHUwMDI2YWMpO1xcbjQ2MzQ6XFx0XFxuNDYzNTpcXHRcXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcXG40NjM2OlxcdFxcdFxcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzLFxcbjQ2Mzc6XFx0XFx0XFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcXG40NjM4OlxcdFxcdFxcdC5wZW5kaW5nID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c19wZW5kaW5nLFxcbjQ2Mzk6XFx0XFx0XFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyA6IE5VTEwsXFxuNDY0MDpcXHRcXHRcXHQuY3N0YXQgPSBzdGF0Yy1cXHUwMDNlZXZlbnRzLFxcbjQ2NDE6XFx0XFx0XFx0LmNzdGF0X3ByZXYgPSBzdGF0Yy1cXHUwMDNlZXZlbnRzX3ByZXYsXFxuNDY0MjpcXHRcXHRcXHQuc2l6ZSA9IE5SX01FTUNHX0VWRU5UUyxcXG40NjQzOlxcdFxcdH07XFxuNDY0NDpcXHRcXHRtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKFxcdTAwMjZhYyk7XFxuNDY0NTpcXHRcXG40NjQ2OlxcdFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xcbjQ2NDc6XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuID0gbWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF07XFxuNDY0ODpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzICpsc3RhdHMgPSBwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzO1xcbjQ2NDk6XFx0XFx0XFx0c3RydWN0IGxydXZlY19zdGF0cyAqcGxzdGF0cyA9IE5VTEw7XFxuNDY1MDpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzX3BlcmNwdSAqbHN0YXRjO1xcbjQ2NTE6XFx0XFxuNDY1MjpcXHRcXHRcXHRpZiAocGFyZW50KVxcbjQ2NTM6XFx0XFx0XFx0XFx0cGxzdGF0cyA9IHBhcmVudC1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlbHJ1dmVjX3N0YXRzO1xcbjQ2NTQ6XFx0XFxuNDY1NTpcXHRcXHRcXHRsc3RhdGMgPSBwZXJfY3B1X3B0cihwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzX3BlcmNwdSwgY3B1KTtcXG40NjU2OlxcdFxcbjQ2NTc6XFx0XFx0XFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XFxuNDY1ODpcXHRcXHRcXHRcXHQuYWdncmVnYXRlID0gbHN0YXRzLVxcdTAwM2VzdGF0ZSxcXG40NjU5OlxcdFxcdFxcdFxcdC5sb2NhbCA9IGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWwsXFxuNDY2MDpcXHRcXHRcXHRcXHQucGVuZGluZyA9IGxzdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZyxcXG40NjYxOlxcdFxcdFxcdFxcdC5wcGVuZGluZyA9IHBsc3RhdHMgPyBwbHN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcXG40NjYyOlxcdFxcdFxcdFxcdC5jc3RhdCA9IGxzdGF0Yy1cXHUwMDNlc3RhdGUsXFxuNDY2MzpcXHRcXHRcXHRcXHQuY3N0YXRfcHJldiA9IGxzdGF0Yy1cXHUwMDNlc3RhdGVfcHJldixcXG40NjY0OlxcdFxcdFxcdFxcdC5zaXplID0gTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TLFxcbjQ2NjU6XFx0XFx0XFx0fTtcXG40NjY2OlxcdFxcdFxcdG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoXFx1MDAyNmFjKTtcXG40NjY3OlxcdFxcbjQ2Njg6XFx0XFx0fVxcbjQ2Njk6XFx0XFx0V1JJVEVfT05DRShzdGF0Yy1cXHUwMDNlc3RhdHNfdXBkYXRlcywgMCk7XFxuNDY3MDpcXHRcXHQvKiBXZSBhcmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSwgb25seSBkbyB0aGUgYXRvbWljIHdyaXRlIG9uY2UgKi9cXG40NjcxOlxcdFxcdGlmIChhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdHNfdXBkYXRlcykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjM1Ljc1Mjc2ODAzOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzMzNTcxMjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTWVtY2cgdjEgQ29kZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgbWVtb3J5IGNvbnRyb2wgc3R1ZmYsIHNwZWNpZmljYWxseSB0aGUgdjEgaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlc2Ugc3RhdHMgYXJlIGFnZ3JlZ2F0ZWQgYW5kIG1hbmFnZWQsIHNvIEknbSBnb2luZyB0byBsb29rIGF0IGBtZW1jZ19zdGF0X2FnZ3JlZ2F0ZWAsIGBtZW1jZ19ldmVudHNfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBhbmQgYHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbGAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZpdCB0b2dldGhlci5cblxuVGhlbiwgc2luY2UgSSdtIGFscmVhZHkgbG9va2luZyBhdCB0aGF0IGFyZWEgb2YgY29kZSwgSSdsbCBnbyBkZWVwZXIgYW5kIHNjcnV0aW5pemUgdGhlIGxvY2FsIGFzcGVjdHMsIHNwZWNpZmljYWxseSBgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbGAsIGBtZW1jZ19ldmVudHNfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBhbmQgYHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbGAuIFRoZXNlIGFyZSBmb3VuZCBpbiBib3RoIGBtbS9tZW1jb250cm9sLXYxLmNgIGFuZCBgbW0vbWVtY29udHJvbC5jYCwgc28gSSdsbCBiZSBzdXJlIHRvIGNoZWNrIGJvdGguXG5cbk5vdywgYSBjcnVjaWFsIGFzcGVjdCBvZiB1bmRlcnN0YW5kaW5nIHRoaXMgc3lzdGVtIGlzIGlkZW50aWZ5aW5nIHRoZSBwdWJsaWMgaW50ZXJmYWNlcywgc28gbGV0J3Mgem9vbSBvdXQgYSBiaXQuIEl0IGlzIHZpdGFsIHRvIHNlcGFyYXRlIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBmcm9tIGV4dGVybmFsIEFQSXMsIHNvIGxldCdzIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzIG9yIEFQSSBmdW5jdGlvbnMuXG5cblRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcsIEknbGwgcmV2aXNpdCBgbW0vbWVtY29udHJvbC12MS5jYCBhbmQgYG1tL21lbWNvbnRyb2wuY2AuXG5cbkZpbmFsbHksIGZvciBnb29kIG1lYXN1cmUsIEknbGwgY2hlY2sgYG1tL21lbWNvbnRyb2wtdjEuaGAgdG8gc2VlIHdoYXQgSSBjYW4gZmluZCBhYm91dCB0aGUgZnVuY3Rpb24gaGVhZGVycywgc2luY2UgaGVhZGVyIGZpbGVzIGRlZmluZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBhcmUgdXNlZnVsIHRvIHF1aWNrbHkgZ3Jhc3Agd2hpY2ggZnVuY3Rpb25zIG1heSBiZSBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozNzo0OS4wODg0ODMzMThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC12MS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4gICAyOlxcdFxcbiAgIDM6XFx0I2lmbmRlZiBfX01NX01FTUNPTlRST0xfVjFfSFxcbiAgIDQ6XFx0I2RlZmluZSBfX01NX01FTUNPTlRST0xfVjFfSFxcbiAgIDU6XFx0XFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwLWRlZnMuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxuICAgODpcXHRcXG4gICA5OlxcdC8qIENncm91cCB2MSBhbmQgdjIgY29tbW9uIGRlY2xhcmF0aW9ucyAqL1xcbiAgMTA6XFx0XFxuICAxMTpcXHQvKlxcbiAgMTI6XFx0ICogSXRlcmF0aW9uIGNvbnN0cnVjdHMgZm9yIHZpc2l0aW5nIGFsbCBjZ3JvdXBzICh1bmRlciBhIHRyZWUpLiAgSWZcXG4gIDEzOlxcdCAqIGxvb3BzIGFyZSBleGl0ZWQgcHJlbWF0dXJlbHkgKGJyZWFrKSwgbWVtX2Nncm91cF9pdGVyX2JyZWFrKCkgbXVzdFxcbiAgMTQ6XFx0ICogYmUgdXNlZCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nLlxcbiAgMTU6XFx0ICovXFxuICAxNjpcXHQjZGVmaW5lIGZvcl9lYWNoX21lbV9jZ3JvdXBfdHJlZShpdGVyLCByb290KVxcdFxcdFxcXFxcXG4gIDE3OlxcdFxcdGZvciAoaXRlciA9IG1lbV9jZ3JvdXBfaXRlcihyb290LCBOVUxMLCBOVUxMKTtcXHRcXFxcXFxuICAxODpcXHRcXHQgICAgIGl0ZXIgIT0gTlVMTDtcXHRcXHRcXHRcXHRcXFxcXFxuICAxOTpcXHRcXHQgICAgIGl0ZXIgPSBtZW1fY2dyb3VwX2l0ZXIocm9vdCwgaXRlciwgTlVMTCkpXFxuICAyMDpcXHRcXG4gIDIxOlxcdHZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKTtcXG4gIDIyOlxcdFxcbiAgMjM6XFx0aW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcXG4gIDI0OlxcdFxcbiAgMjU6XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gIDI2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbik7XFxuICAyNzpcXHRcXG4gIDI4OlxcdC8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cXG4gIDI5OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gIDMwOlxcdFxcbiAgMzE6XFx0LyogV2hldGhlciBsZWdhY3kgbWVtb3J5K3N3YXAgYWNjb3VudGluZyBpcyBhY3RpdmUgKi9cXG4gIDMyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBkb19tZW1zd19hY2NvdW50KHZvaWQpXFxuICAzMzpcXHR7XFxuICAzNDpcXHRcXHRyZXR1cm4gIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XFxuICAzNTpcXHR9XFxuICAzNjpcXHRcXG4gIDM3OlxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcXG4gIDM4OlxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpO1xcbiAgMzk6XFx0dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcXG4gIDQwOlxcdGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiAgNDE6XFx0dm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0dm9pZCBtZW1jZzFfbWVtY2dfaW5pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQ7XFxuICA0NjpcXHR2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiAgNDc6XFx0XFxuICA0ODpcXHQvKiBmb3IgZW5jb2RpbmcgY2Z0LVxcdTAwM2Vwcml2YXRlIHZhbHVlIG9uIGZpbGUgKi9cXG4gIDQ5OlxcdGVudW0gcmVzX3R5cGUge1xcbiAgNTA6XFx0XFx0X01FTSxcXG4gIDUxOlxcdFxcdF9NRU1TV0FQLFxcbiAgNTI6XFx0XFx0X0tNRU0sXFxuICA1MzpcXHRcXHRfVENQLFxcbiAgNTQ6XFx0fTtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0Ym9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpO1xcbiAgNTc6XFx0dm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcXG4gIDU4OlxcdHZvaWQgbWVtY2cxX29vbV9yZWNvdmVyKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuICA1OTpcXHRcXG4gIDYwOlxcdHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gIDYxOlxcdHZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBwZ3Bnb3V0LFxcbiAgNjI6XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnkpO1xcbiAgNjM6XFx0XFxuICA2NDpcXHR2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKTtcXG4gIDY1OlxcdHZvaWQgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCk7XFxuICA2NjpcXHR2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcXG4gIDY3OlxcdFxcbiAgNjg6XFx0dm9pZCByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuICA2OTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcXG4gIDcwOlxcdHZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gIDcxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcXG4gIDcyOlxcdFxcbiAgNzM6XFx0dm9pZCBtZW1jZzFfYWNjb3VudF9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKTtcXG4gIDc0OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfdGNwbWVtX2FjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuICA3NTpcXHR7XFxuICA3NjpcXHRcXHRyZXR1cm4gbWVtY2ctXFx1MDAzZXRjcG1lbV9hY3RpdmU7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRib29sIG1lbWNnMV9jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuICA3OTpcXHRcXHRcXHRcXHQgZ2ZwX3QgZ2ZwX21hc2spO1xcbiAgODA6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6Mzc6NDkuMDg4NTc0MzY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMDQzOTU5MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgY2dyb3VwIHYxIE1lbW9yeSBTdGF0aXN0aWNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgbWVtb3J5LnN0YXRgIHdvcmtzIHdpdGhpbiBjZ3JvdXAgdjEgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgbG9jYWwgdmFsdWVzIGFyZSBhY3R1YWxseSBiZWluZyByZWFkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBMZXQncyBzZWUuLi4gSSdsbCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZGlzcGxheWluZyB0aGUgbWVtb3J5IHN0YXRpc3RpY3Mg4oCTIHRoYXQgc2hvdWxkIGJlIGBtZW1vcnlfc3RhdF9zaG93YCDigJMgb3IgcGVyaGFwcyBhIGZ1bmN0aW9uIG5hbWVkIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYG1lbWNnMV9zdGF0X2Zvcm1hdGAsIGlmIHRoZXJlJ3MgYSBjZ3JvdXAgdjEgc3BlY2lmaWMgZm9ybWF0dGluZyBmdW5jdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NzEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjU5LjEzMjUzODUxN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMjg4ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeV9zdGF0X3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0yMDI4PXN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9sZWdhY3lfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDU4LVxcdFxcdC5uYW1lID0gXFxcInN0YXRcXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMDU5OlxcdFxcdC5zZXFfc2hvdyA9IG1lbW9yeV9zdGF0X3Nob3csXFxubW0vbWVtY29udHJvbC12MS5jLTIwNjAtXFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0yMT12b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyk7XFxubW0vbWVtY29udHJvbC12MS5oLTIyLVxcbm1tL21lbWNvbnRyb2wtdjEuaDoyMzppbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xcbm1tL21lbWNvbnRyb2wtdjEuaC0yNC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDQyPXN0YXRpYyBpbnQgbWVtb3J5X2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDQ5LVxcbm1tL21lbWNvbnRyb2wuYzo1MDUwOmludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5tbS9tZW1jb250cm9sLmMtNTA1MS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE0Nz1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTk4LVxcdFxcdC5uYW1lID0gXFxcInN0YXRcXFwiLFxcbm1tL21lbWNvbnRyb2wuYzo1MTk5OlxcdFxcdC5zZXFfc2hvdyA9IG1lbW9yeV9zdGF0X3Nob3csXFxubW0vbWVtY29udHJvbC5jLTUyMDAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6Mzc6NTkuMjMyODUwMzUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDk2NjU3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqRGVsdmluZyBpbnRvIE1lbW9yeSBTdGF0aXN0aWNzIGluIG1tL21lbWNvbnRyb2wuYyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvZGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYG1lbW9yeV9zdGF0X3Nob3dgIGZ1bmN0aW9uLCB3aGljaCBpcywgYXMgdGhlIG5hbWUgaW1wbGllcywgc2l0dWF0ZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2wgc3Vic3lzdGVtIGV4cG9zZXMgaXRzIHN0YXRpc3RpY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtZW1vcnkgdXNhZ2UgZmlndXJlcyBhcmUgY2FsY3VsYXRlZCBhbmQgcHJlc2VudGVkLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGNncm91cHMuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXMgcHJlc2VudGVkIHRvIHRoZSB1c2VyLCB3aGVyZSBpbiBtZW1vcnkgaXQgaXMgY2FsY3VsYXRlZCBhbmQgc3RvcmVkLCBhbmQgYW55IGltcGxpY2F0aW9ucyB0aGlzIGhhcyBmb3IgcGVyZm9ybWFuY2Ugb3IgYWNjdXJhY3kuIEkgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJuYWxzIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozODowMi41NDI1MTg2NTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDUwOlxcdGludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG41MDUxOlxcdHtcXG41MDUyOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9zZXEobSk7XFxuNTA1MzpcXHRcXHRjaGFyICpidWYgPSBrbWFsbG9jKFNFUV9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7XFxuNTA1NDpcXHRcXHRzdHJ1Y3Qgc2VxX2J1ZiBzO1xcbjUwNTU6XFx0XFxuNTA1NjpcXHRcXHRpZiAoIWJ1ZilcXG41MDU3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjUwNTg6XFx0XFx0c2VxX2J1Zl9pbml0KFxcdTAwMjZzLCBidWYsIFNFUV9CVUZfU0laRSk7XFxuNTA1OTpcXHRcXHRtZW1vcnlfc3RhdF9mb3JtYXQobWVtY2csIFxcdTAwMjZzKTtcXG41MDYwOlxcdFxcdHNlcV9wdXRzKG0sIGJ1Zik7XFxuNTA2MTpcXHRcXHRrZnJlZShidWYpO1xcbjUwNjI6XFx0XFx0cmV0dXJuIDA7XFxuNTA2MzpcXHR9XFxuNTA2NDpcXHRcXG41MDY1OlxcdCNpZmRlZiBDT05GSUdfTlVNQVxcbjUwNjY6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuNTA2NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGludCBpdGVtKVxcbjUwNjg6XFx0e1xcbjUwNjk6XFx0XFx0cmV0dXJuIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgaXRlbSkgKlxcbjUwNzA6XFx0XFx0XFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcXG41MDcxOlxcdH1cXG41MDcyOlxcdFxcbjUwNzM6XFx0c3RhdGljIGludCBtZW1vcnlfbnVtYV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbjUwNzQ6XFx0e1xcbjUwNzU6XFx0XFx0aW50IGk7XFxuNTA3NjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pO1xcbjUwNzc6XFx0XFxuNTA3ODpcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcXG41MDc5OlxcdFxcbjUwODA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtb3J5X3N0YXRzKTsgaSsrKSB7XFxuNTA4MTpcXHRcXHRcXHRpbnQgbmlkO1xcbjUwODI6XFx0XFxuNTA4MzpcXHRcXHRcXHRpZiAobWVtb3J5X3N0YXRzW2ldLmlkeCBcXHUwMDNlPSBOUl9WTV9OT0RFX1NUQVRfSVRFTVMpXFxuNTA4NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MDg1OlxcdFxcbjUwODY6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJXNcXFwiLCBtZW1vcnlfc3RhdHNbaV0ubmFtZSk7XFxuNTA4NzpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcXG41MDg4OlxcdFxcdFxcdFxcdHU2NCBzaXplO1xcbjUwODk6XFx0XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozODowMi41NDI5MTkxMzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1Njc0NTYxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgTWVtb3J5IENncm91cCBTdGF0IEFnZ3JlZ2F0aW9uKipcblxuT2theSwgc28gYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSBgdHJ1ZWAgaGVyZS4gVGhpcyBjb21taXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBjZ3JvdXAgc3RhdGlzdGljcyBhZ2dyZWdhdGlvbiBsb2dpYywgYW5kIHRoYXQncyBhbHdheXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGltcGFjdGluZyBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIGBmbHVzaF9ubWlfc3RhdHNgLCBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCBhbmQgdGhlIGhhbmRsaW5nIG9mIGBtZW1jZ192bXN0YXRzYCBmaWVsZHMgKGBzdGF0ZV9sb2NhbGAsIGBldmVudHNfbG9jYWxgKS4gVGhlc2UgZmllbGRzIGFyZSBjb25kaXRpb25hbGx5IGFsbG9jYXRlZCBhbmQgYWdncmVnYXRlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19NRU1DR19WMWAgc2V0dGluZywgbWVhbmluZyB2MSBtZW1vcnkgY29udHJvbGxlci4gU3RhdCBmbHVzaGVzLCB0cmlnZ2VyZWQgYnkgcmVhZGluZyBgbWVtb3J5LnN0YXRgIG9yIGR1cmluZyByZWNsYW1hdGlvbi9hY2NvdW50aW5nIG9wZXJhdGlvbnMsIGFyZSBhbGwgYWZmZWN0ZWQsIG1ha2luZyB0aGlzIGFyZWEgYSBiaXQgb2YgYSBtaW5lZmllbGQuXG5cbkkndmUgdGFrZW4gYSBxdWljayBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWdzLiBgTUVNQ0dgIGlzIHRoZSBiYXNlIGNvbnRyb2xsZXIsIGBNRU1DR19WMWAgZW5hYmxlcyB0aGUgbGVnYWN5IHYxIGZ1bmN0aW9uYWxpdHkuIEkgYWxzbyBub3RpY2VkIGBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNgIGlzIGludm9sdmVkIHdpdGggYGZsdXNoX25taV9zdGF0c2AsIHdoaWNoIGl0c2VsZiBkZXBlbmRzIG9uIGEgZmV3IG1vcmUgZmxhZ3MsIGxpa2UgYEhBVkVfTk1JYCwgYEFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QU2AsIGFuZCBgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdgLlxuXG5Ob3csIGZvciBmb2N1cyBzeW1ib2xzOiBJJ3ZlIGlkZW50aWZpZWQgc29tZSBub24tc3RhdGljIGVudHJ5cG9pbnRzL0FQSSBmdW5jdGlvbnMgd2l0aGluIHRoaXMgc3Vic3lzdGVtIHRoYXQgYXJlIHJlbGF0ZWQgdG8gc3RhdCB1cGRhdGVzLCBmbHVzaGluZywgb3IgY2dyb3VwIG9wZXJhdGlvbnMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG1haW4gdGFyZ2V0LiBTcGVjaWZpY2FsbHk6IGBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsYCwgYG1lbWNnX2V2ZW50c19sb2NhbGAsIGByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbGAsIGByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWxgLCBhbmQgYG1lbW9yeV9zdGF0X3Nob3dgLiBJJ3ZlIHZlcmlmaWVkIHRoZWlyIGRlZmluaXRpb25zIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vbWVtY29udHJvbC12MS5jYCwgZW5zdXJpbmcgdGhleSBhcmUgbm9uLXN0YXRpYyBhbmQgcmVsZXZhbnQgdG8gbWVtb3J5IGNncm91cCBtYW5hZ2VtZW50LiBJIGFsc28gZ2xhbmNlZCBvdmVyIGBtZW1jZzFfc3RhdF9mb3JtYXRgIGFuZCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGltcG9ydGFudCB3YXMgbWlzc2VkLlxuXG5JJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgcHJvbXB0IHJlcXVpcmVtZW50cy4gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBJIGNhbiBjb25maWRlbnRseSBjb25zdHJ1Y3QgdGhlIHJlcXVpcmVkIG91dHB1dCBmb3IgYHNldC1yZXN1bHRzYC4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LCBhbmQgSSdtIHJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDA4LCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM4OjI3LjExMDM3ODA4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDgyODExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X3N0YXRfc2hvd1wiLFxuICAgIFwibWVtY2dfcGFnZV9zdGF0ZV9sb2NhbFwiLFxuICAgIFwibWVtY2dfZXZlbnRzX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiLFxuICAgIFwicmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSByZW1vdmVzIGxlZ2FjeSB2MS1vbmx5IGxvY2FsIHN0YXRpc3RpY3MgKHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwpIGZyb20gc3RydWN0IG1lbWNnX3Ztc3RhdHMgd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQsIGFuZCBhZGRzIE5VTEwgY2hlY2tzIGR1cmluZyBzdGF0cyBmbHVzaGluZyBhbmQgYWdncmVnYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1jZyBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB3aXRoIGJvdGggY2dyb3VwIHYxIGFuZCB2MiB3b3JrbG9hZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X3N0YXRfc2hvd1wiLFxuICAgIFwibWVtY2dfcGFnZV9zdGF0ZV9sb2NhbFwiLFxuICAgIFwibWVtY2dfZXZlbnRzX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiLFxuICAgIFwicmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSByZW1vdmVzIGxlZ2FjeSB2MS1vbmx5IGxvY2FsIHN0YXRpc3RpY3MgKHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwpIGZyb20gc3RydWN0IG1lbWNnX3Ztc3RhdHMgd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQsIGFuZCBhZGRzIE5VTEwgY2hlY2tzIGR1cmluZyBzdGF0cyBmbHVzaGluZyBhbmQgYWdncmVnYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1jZyBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB3aXRoIGJvdGggY2dyb3VwIHYxIGFuZCB2MiB3b3JrbG9hZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM4OjI3LjI1MTIxNjM5OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY0MDI4MTE2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozODoyNy4yNTIwNjY5MzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NjQwMTk1NzIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSBjb21waWxlcyBvdXQgdGhlIGxlZ2FjeSBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBzdGF0IGFycmF5cyBmcm9tIGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2Agd2hlbiBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZCwgYWRkaW5nIGhlbHBlciBhY2Nlc3NvcnMgYW5kIE5VTEwgY2hlY2tzIGluIHRoZSBhZ2dyZWdhdGlvbiBhbmQgc3RhdCBmbHVzaGluZyBwYXRocy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzLlxcbjIuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIFJpc2s6IE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi5cXG4zLiBLQVNBTiB2cyBLTVNBTjogQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgbG9jYWxgIGlmIGEgY2hlY2sgd2FzIG1pc3NpbmcsIG9yIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIHNwZWNpZmljYWxseSBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcywgbmVpdGhlciBvZiB3aGljaCBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCBoZXJlLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI5YmIzYjVlZDQ5OGMyMWRiZGYxNWE1YmI0ZmYwNTVhYzJmYTIxY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTA6MzM6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDdjZTUwYmNjZjEyNjQuLmI5OGIyZDY4YzYyYmUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTY3NSw5ICs2NzUsMTEgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xuIFx0bG9uZ1x0XHRcdHN0YXRlW01FTUNHX1ZNU1RBVF9TSVpFXTtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzW05SX01FTUNHX0VWRU5UU107XG4gXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXHUwMDI2IGV2ZW50cyAqL1xuIFx0bG9uZ1x0XHRcdHN0YXRlX2xvY2FsW01FTUNHX1ZNU1RBVF9TSVpFXTtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XG4rI2VuZGlmXG4gXG4gXHQvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZ1x0XHRcdHN0YXRlX3BlbmRpbmdbTUVNQ0dfVk1TVEFUX1NJWkVdO1xuQEAgLTY4Nyw2ICs2ODksMzIgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRzdGF0c191cGRhdGVzO1xuIH07XG4gXG4rLypcbisgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5XG4rICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuXG4rICovXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuK3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK1x0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWw7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbDtcbit9XG4rI2Vsc2VcbitzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nXG4gICpcbkBAIC00NDY4LDcgKzQ0OTYsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xuIFx0LyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4gXHRsb25nICphZ2dyZWdhdGU7XG4tXHQvKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2hhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4rXHQvKlxuK1x0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbitcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXG4rXHQgKi9cbiBcdGxvbmcgKmxvY2FsO1xuIFx0LyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZyAqcGVuZGluZztcbkBAIC00NTA3LDcgKzQ1MzgsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gXHRcdH1cbiBcbiBcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuLVx0XHRpZiAoZGVsdGFfY3B1KVxuK1x0XHRpZiAoZGVsdGFfY3B1IFx1MDAyNlx1MDAyNiBhYy1cdTAwM2Vsb2NhbClcbiBcdFx0XHRhYy1cdTAwM2Vsb2NhbFtpXSArPSBkZWx0YV9jcHU7XG4gXG4gXHRcdGlmIChkZWx0YSkge1xuQEAgLTQ1MjEsNiArNDU1Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcbiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4rXHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbiBcdGludCBuaWQ7XG4gXG4gXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNla21lbV9zdGF0KSkge1xuQEAgLTQ1MjgsNyArNDU2MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdGludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pO1xuIFxuIFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSArPSBrbWVtO1xuLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xuK1x0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IGttZW07XG4gXHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0ga21lbTtcbiBcdH1cbkBAIC00NTUwLDcgKzQ1ODMsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbitcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcbiBcdFx0fVxuQEAgLTQ1NjMsNyArNDU5Nyw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdFx0aWYgKHBsc3RhdHMpXG4gXHRcdFx0XHRwbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XG4gXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcbi1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuK1x0XHRcdGlmIChzdGF0ZV9sb2NhbClcbitcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0XHRwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHR9XG5AQCAtNDU4OCw3ICs0NjIzLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcbiBcbiBcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuIFx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZSxcbi1cdFx0LmxvY2FsID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxuIFx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZXN0YXRlLFxuQEAgLTQ1OTksNyArNDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuLVx0XHQubG9jYWwgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcbiBcdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nLFxuIFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZWV2ZW50cyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM4OjI3LjI1MjA2OTI3OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDg5MzMxMTc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYW55IGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgY29uZGl0aW9uYWwgbG9naWMsIGFyZSB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBPa2F5LCBpdCdzIG1vZGlmeWluZyBgc3RydWN0IG1lbWNnX3Ztc3RhdHNgLiBUaGUga2V5IHNlZW1zIHRvIGJlIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gb2YgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgYmFzZWQgb24gYENPTkZJR19NRU1DR19WMWAuIEludGVyZXN0aW5nLiBUaGV5J3ZlIGludHJvZHVjZWQgaGVscGVyIGZ1bmN0aW9ucywgYG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5YCBhbmQgYG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheWAsIHRvIGFic3RyYWN0IGFjY2VzcyB0byB0aGVzZSBmaWVsZHMuIFRoYXQncyBnb29kIHByYWN0aWNlLCBtYWtlcyB0aGUgY29kZSBjbGVhbmVyLiBUaGUgdXNlIG9mIHRoZXNlIGFjY2Vzc29ycyBzZWVtcyB3ZWxsIHRob3VnaHQgb3V0IHRvIGtlZXAgdGhlIGFic3RyYWN0aW9uIGNsZWFuLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbnMgYXJlIGluIGBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKClgLCBgZmx1c2hfbm1pX3N0YXRzKClgLCBhbmQgYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKClgLiBXZSdyZSBzZWVpbmcgY2hlY2tzIGZvciBgYWMtXHUwMDNlbG9jYWxgIGJlZm9yZSB3cml0aW5nLCBjaGVja3MgaW4gYGZsdXNoX25taV9zdGF0c2AgYmVmb3JlIHdyaXRpbmcgdG8gYHN0YXRlX2xvY2FsYCwgYW5kIGEgZ2VuZXJhbCBwb3B1bGF0aW9uIG9mIGAubG9jYWxgIGluIHRoZSBgZmx1c2hgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBpcyBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGVzZSBmdW5jdGlvbnMuIFRoZSBjb2RlIHBhdGhzIGFsbCBzZWVtIGFwcHJvcHJpYXRlIGF0IGEgZmlyc3QgZ2xhbmNlLlxuXG5Ob3csIGxldCdzIGdldCBhIGJpZ2dlciBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gcnVuIGEgcXVpY2sgYGdyZXBgIGZvciBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBhY3Jvc3MgdGhlIHJlbGV2YW50IGNvZGViYXNlLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGVsc2V3aGVyZSwgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciB1bmV4cGVjdGVkIHVzZXMuIFRoaXMgd2lsbCB0ZWxsIG1lICpleGFjdGx5KiB3aGVyZSB0aGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgYSBjbGVhciB2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTEwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6Mzg6NTIuMTQ1Mzg1NDY1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI5Njc3MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihzdGF0ZV9sb2NhbHxldmVudHNfbG9jYWwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTA2IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jPTEyOTM9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTYtXFx0c3RydWN0IGludGVsX3VjICp1YyA9IGNvbnRhaW5lcl9vZihndWMsIHR5cGVvZigqdWMpLCBndWMpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTI5NzpcXHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgbG9nX2J1Zl9zdGF0ZV9sb2NhbDtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTgtXFx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlICpsb2dfYnVmX3N0YXRlO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzEzLVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNDpcXHRtZW1jcHkoXFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsIGxvZ19idWZfc3RhdGUsIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTUtXFx0YnVmZmVyX3NpemUgPSBpbnRlbF9ndWNfZ2V0X2xvZ19idWZmZXJfc2l6ZShcXHUwMDI2Z3VjLVxcdTAwM2Vsb2csIEdVQ19DQVBUVVJFX0xPR19CVUZGRVIpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNjpcXHRyZWFkX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwucmVhZF9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE3OlxcdHdyaXRlX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuc2FtcGxlZF93cml0ZV9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE4OlxcdGZ1bGxfY291bnQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmJ1ZmZlcl9mdWxsX2NudDtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTktXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzIwLVxcdC8qIEJvb2trZWVwaW5nIHN0dWZmICovXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzIxOlxcdGd1Yy1cXHUwMDNlbG9nLnN0YXRzW0dVQ19DQVBUVVJFX0xPR19CVUZGRVJdLmZsdXNoICs9IGxvZ19idWZfc3RhdGVfbG9jYWwuZmx1c2hfdG9fZmlsZTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMjItXFx0bmV3X292ZXJmbG93ID0gaW50ZWxfZ3VjX2NoZWNrX2xvZ19idWZfb3ZlcmZsb3coXFx1MDAyNmd1Yy1cXHUwMDNlbG9nLCBHVUNfQ0FQVFVSRV9MT0dfQlVGRkVSLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jPTM3NT1zdGF0aWMgdm9pZCBfZ3VjX2xvZ19jb3B5X2RlYnVnbG9nc19mb3JfcmVsYXkoc3RydWN0IGludGVsX2d1Y19sb2cgKmxvZylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy0zNzktXFx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlICpsb2dfYnVmX3N0YXRlLCAqbG9nX2J1Zl9zbmFwc2hvdF9zdGF0ZTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6MzgwOlxcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy0zODEtXFx0ZW51bSBndWNfbG9nX2J1ZmZlcl90eXBlIHR5cGU7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDE4LVxcdFxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0MTk6XFx0XFx0bWVtY3B5KFxcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLCBsb2dfYnVmX3N0YXRlLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjAtXFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDIxLVxcdFxcdGJ1ZmZlcl9zaXplID0gaW50ZWxfZ3VjX2dldF9sb2dfYnVmZmVyX3NpemUobG9nLCB0eXBlKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIyOlxcdFxcdHJlYWRfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5yZWFkX3B0cjtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIzOlxcdFxcdHdyaXRlX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuc2FtcGxlZF93cml0ZV9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyNDpcXHRcXHRmdWxsX2NudCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuYnVmZmVyX2Z1bGxfY250O1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjUtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyNi1cXHRcXHQvKiBCb29ra2VlcGluZyBzdHVmZiAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0Mjc6XFx0XFx0bG9nLVxcdTAwM2VzdGF0c1t0eXBlXS5mbHVzaCArPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsdXNoX3RvX2ZpbGU7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyOC1cXHRcXHRuZXdfb3ZlcmZsb3cgPSBpbnRlbF9ndWNfY2hlY2tfbG9nX2J1Zl9vdmVyZmxvdyhsb2csIHR5cGUsIGZ1bGxfY250KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MzUtXFx0XFx0LyogRmlyc3QgY29weSB0aGUgc3RhdGUgc3RydWN0dXJlIGluIHNuYXBzaG90IGJ1ZmZlciAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0MzY6XFx0XFx0bWVtY3B5KGxvZ19idWZfc25hcHNob3Rfc3RhdGUsIFxcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MzctXFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jPTEzODg9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgeGVfZ3VjICpndWMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xMzkxLVxcdHN0cnVjdCB4ZV91YyAqdWMgPSBjb250YWluZXJfb2YoZ3VjLCB0eXBlb2YoKnVjKSwgZ3VjKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxMzkyOlxcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTEzOTMtXFx0c3RydWN0IF9fZ3VjX2NhcHR1cmVfYnVmc3RhdGUgYnVmO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQwNi1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDA3OlxcdHhlX21hcF9tZW1jcHlfZnJvbShndWNfdG9feGUoZ3VjKSwgXFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsIFxcdTAwMjZndWMtXFx1MDAzZWxvZy5iby1cXHUwMDNldm1hcCxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDA4LVxcdFxcdFxcdCAgIGxvZ19idWZfc3RhdGVfb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDEwLVxcdGJ1ZmZlcl9zaXplID0gWEVfR1VDX0xPR19TVEFURV9DQVBUVVJFX0JVRkZFUl9TSVpFO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTE6XFx0cmVhZF9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnJlYWRfcHRyO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTI6XFx0d3JpdGVfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5zYW1wbGVkX3dyaXRlX3B0cjtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDEzOlxcdGZ1bGxfY291bnQgPSBGSUVMRF9HRVQoR1VDX0xPR19CVUZGRVJfU1RBVEVfQlVGRkVSX0ZVTExfQ05ULCBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE0LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0MTUtXFx0LyogQm9va2tlZXBpbmcgc3R1ZmYgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDE2OlxcdHRtcCA9IEZJRUxEX0dFVChHVUNfTE9HX0JVRkZFUl9TVEFURV9GTFVTSF9UT19GSUxFLCBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE3LVxcdGd1Yy1cXHUwMDNlbG9nLnN0YXRzW0dVQ19MT0dfVFlQRV9TVEFURV9DQVBUVVJFXS5mbHVzaCArPSB0bXA7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDU4LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0NTk6XFx0bG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyBcXHUwMDI2PSB+R1VDX0xPR19CVUZGRVJfU1RBVEVfRkxVU0hfVE9fRklMRTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDYwLVxcdHhlX21hcF93cihndWNfdG9feGUoZ3VjKSwgXFx1MDAyNmd1Yy1cXHUwMDNlbG9nLmJvLVxcdTAwM2V2bWFwLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjEtXFx0XFx0ICBsb2dfYnVmX3N0YXRlX29mZnNldCArIG9mZnNldG9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSwgZmxhZ3MpLCB1MzIsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQ2MjpcXHRcXHQgIGxvZ19idWZfc3RhdGVfbG9jYWwuZmxhZ3MpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjMtXFx0X19ndWNfY2FwdHVyZV9mbHVzaGxvZ19jb21wbGV0ZShndWMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oPTE5PXN0cnVjdCByZG1hX2Nncm91cCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgtMjktXFx0c3RydWN0IGNncm91cF9maWxlXFx0XFx0ZXZlbnRzX2ZpbGU7XFxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oOjMwOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19sb2NhbF9maWxlO1xcbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaC0zMS19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oPTM1PXN0cnVjdCBodWdldGxiX2Nncm91cCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNDgtXFx0YXRvbWljX2xvbmdfdCBldmVudHNbSFVHRV9NQVhfSFNUQVRFXVtIVUdFVExCX05SX01FTU9SWV9FVkVOVFNdO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo0OTpcXHRhdG9taWNfbG9uZ190IGV2ZW50c19sb2NhbFtIVUdFX01BWF9IU1RBVEVdW0hVR0VUTEJfTlJfTUVNT1JZX0VWRU5UU107XFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTUwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTU0LVxcdC8qIEhhbmRsZSBmb3IgXFxcImh1Z2V0bGIuZXZlbnRzLmxvY2FsXFxcIiAqL1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo1NTpcXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2xvY2FsX2ZpbGVbSFVHRV9NQVhfSFNUQVRFXTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNTYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjMxLVxcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfZmlsZTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyMzI6XFx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19sb2NhbF9maWxlO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTIzMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI0MS1cXHRhdG9taWNfbG9uZ190XFx0XFx0bWVtb3J5X2V2ZW50c1tNRU1DR19OUl9NRU1PUllfRVZFTlRTXTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNDI6XFx0YXRvbWljX2xvbmdfdFxcdFxcdG1lbW9yeV9ldmVudHNfbG9jYWxbTUVNQ0dfTlJfTUVNT1JZX0VWRU5UU107XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjQzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTQ2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05NDctXFx0XFx0XFx0XFx0XFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTQ4OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk0OS1cXHRcXHRcXHRcXHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDA1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQxMC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDExOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQxMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9NDI9c3RydWN0IG1pc2NfcmVzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC00Ni1cXHRhdG9taWM2NF90IGV2ZW50cztcXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg6NDc6XFx0YXRvbWljNjRfdCBldmVudHNfbG9jYWw7XFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTQ4LX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9NTY9c3RydWN0IG1pc2NfY2cge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTYxLVxcdC8qIG1pc2MuZXZlbnRzLmxvY2FsICovXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oOjYyOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZTtcXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtNjMtXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0xMjU9c3RhdGljIHZvaWQgbWlzY19jZ19ldmVudChlbnVtIG1pc2NfcmVzX3R5cGUgdHlwZSwgc3RydWN0IG1pc2NfY2cgKmNnKVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTEyNi17XFxua2VybmVsL2Nncm91cC9taXNjLmM6MTI3OlxcdGF0b21pYzY0X2luYyhcXHUwMDI2Y2ctXFx1MDAzZXJlc1t0eXBlXS5ldmVudHNfbG9jYWwpO1xcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjEyODpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNmNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxua2VybmVsL2Nncm91cC9taXNjLmMtMTI5LVxcbi0tXFxua2VybmVsL2Nncm91cC9taXNjLmM9MzY3PXN0YXRpYyBpbnQgX19taXNjX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIGJvb2wgbG9jYWwpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0zNzQtXFx0XFx0aWYgKGxvY2FsKVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjM3NTpcXHRcXHRcXHRldmVudHMgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZjZy1cXHUwMDNlcmVzW2ldLmV2ZW50c19sb2NhbCk7XFxua2VybmVsL2Nncm91cC9taXNjLmMtMzc2LVxcdFxcdGVsc2VcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM4ND1zdGF0aWMgaW50IG1pc2NfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTM4OC1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYzozODk6c3RhdGljIGludCBtaXNjX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxua2VybmVsL2Nncm91cC9taXNjLmMtMzkwLXtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM5NT1zdGF0aWMgc3RydWN0IGNmdHlwZSBtaXNjX2NnX2ZpbGVzW10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYy00MjMtXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNDpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbWlzY19jZywgZXZlbnRzX2xvY2FsX2ZpbGUpLFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNTpcXHRcXHQuc2VxX3Nob3cgPSBtaXNjX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTQyNi1cXHR9LFxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9NDk9c3RydWN0IHBpZHNfY2dyb3VwIHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTYxLVxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19maWxlO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjYyOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19sb2NhbF9maWxlO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTYzLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTY0LVxcdGF0b21pYzY0X3RcXHRcXHRcXHRldmVudHNbTlJfUElEQ0dfRVZFTlRTXTtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo2NTpcXHRhdG9taWM2NF90XFx0XFx0XFx0ZXZlbnRzX2xvY2FsW05SX1BJRENHX0VWRU5UU107XFxua2VybmVsL2Nncm91cC9waWRzLmMtNjYtfTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTI0Mz1zdGF0aWMgdm9pZCBwaWRzX2V2ZW50KHN0cnVjdCBwaWRzX2Nncm91cCAqcGlkc19mb3JraW5nLFxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMjQ4LVxcdC8qIE9ubHkgbG9nIHRoZSBmaXJzdCB0aW1lIGxpbWl0IGlzIGhpdC4gKi9cXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNDk6XFx0aWYgKGF0b21pYzY0X2luY19yZXR1cm4oXFx1MDAyNnAtXFx1MDAzZWV2ZW50c19sb2NhbFtQSURDR19GT1JLRkFJTF0pID09IDEpIHtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTAtXFx0XFx0cHJfaW5mbyhcXFwiY2dyb3VwOiBmb3JrIHJlamVjdGVkIGJ5IHBpZHMgY29udHJvbGxlciBpbiBcXFwiKTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI1NS1cXHQgICAgY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUykge1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI1NjpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNnAtXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTctXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMjU5LVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI2MDpcXHRhdG9taWM2NF9pbmMoXFx1MDAyNnBpZHNfb3Zlcl9saW1pdC1cXHUwMDNlZXZlbnRzX2xvY2FsW1BJRENHX01BWF0pO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI2MTpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNnBpZHNfb3Zlcl9saW1pdC1cXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI2Mi1cXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTM2MT1zdGF0aWMgaW50IF9fcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBib29sIGxvY2FsKVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMzcxLVxcdH1cXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzozNzI6XFx0ZXZlbnRzID0gbG9jYWwgPyBwaWRzLVxcdTAwM2VldmVudHNfbG9jYWwgOiBwaWRzLVxcdTAwM2VldmVudHM7XFxua2VybmVsL2Nncm91cC9waWRzLmMtMzczLVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9Mzc4PXN0YXRpYyBpbnQgcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMzgzLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjM4NDpzdGF0aWMgaW50IHBpZHNfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0zODUte1xcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9MzkwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHBpZHNfZmlsZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTQxNC1cXHRcXHQubmFtZSA9IFxcXCJldmVudHMubG9jYWxcXFwiLFxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjQxNTpcXHRcXHQuc2VxX3Nob3cgPSBwaWRzX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjQxNjpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGlkc19jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy00MTctXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9NzU9c3RydWN0IHJkbWFjZ19yZXNvdXJjZV9wb29sIHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTg5LVxcdHU2NFxcdFxcdFxcdGV2ZW50c19hbGxvY19mYWlsW1JETUFDR19SRVNPVVJDRV9NQVhdO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjkwOlxcdHU2NFxcdFxcdFxcdGV2ZW50c19sb2NhbF9tYXhbUkRNQUNHX1JFU09VUkNFX01BWF07XFxua2VybmVsL2Nncm91cC9yZG1hLmM6OTE6XFx0dTY0XFx0XFx0XFx0ZXZlbnRzX2xvY2FsX2FsbG9jX2ZhaWxbUkRNQUNHX1JFU09VUkNFX01BWF07XFxua2VybmVsL2Nncm91cC9yZG1hLmMtOTItfTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTEzOT1zdGF0aWMgYm9vbCBycG9vbF9oYXNfcGVyc2lzdGVudF9zdGF0ZShzdHJ1Y3QgcmRtYWNnX3Jlc291cmNlX3Bvb2wgKnJwb29sKVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmMtMTUwLVxcdFxcdCAgICBycG9vbC1cXHUwMDNlZXZlbnRzX21heFtpXSB8fFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MTpcXHRcXHQgICAgcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gfHxcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0xNTItXFx0XFx0ICAgIHJwb29sLVxcdTAwM2VldmVudHNfYWxsb2NfZmFpbFtpXSB8fFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MzpcXHRcXHQgICAgcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2ldKVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTE1NC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTI1OT1zdGF0aWMgdm9pZCByZG1hY2dfZXZlbnRfbG9ja2VkKHN0cnVjdCByZG1hX2Nncm91cCAqY2csXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yNzEtXFx0aWYgKHJwb29sKSB7XFxua2VybmVsL2Nncm91cC9yZG1hLmM6MjcyOlxcdFxcdHJwb29sLVxcdTAwM2VldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtpbmRleF0rKztcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyNzM6XFx0XFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFxcdTAwMjZjZy1cXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTI3NC1cXHR9XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yNzgtXFx0aWYgKHJwb29sKSB7XFxua2VybmVsL2Nncm91cC9yZG1hLmM6Mjc5OlxcdFxcdHJwb29sLVxcdTAwM2VldmVudHNfbG9jYWxfbWF4W2luZGV4XSsrO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjI4MDpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm92ZXJfY2ctXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yODEtXFx0fVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9Njg4PXN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03MTYtXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzE3OnN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxua2VybmVsL2Nncm91cC9yZG1hLmMtNzE4LXtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczMi1cXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzMzOlxcdFxcdFxcdFxcdCAgIHJwb29sID8gcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gOiAwVUxMLFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczNC1cXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzM1OlxcdFxcdFxcdFxcdCAgIHJwb29sID8gcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2ldIDogMFVMTCk7XFxua2VybmVsL2Nncm91cC9yZG1hLmMtNzM2LVxcdFxcdFxcdGlmIChpIFxcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWCAtIDEpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz03NDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgcmRtYWNnX2ZpbGVzW10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03NzMtXFx0XFx0Lm5hbWUgPSBcXFwiZXZlbnRzLmxvY2FsXFxcIixcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo3NzQ6XFx0XFx0LnNlcV9zaG93ID0gcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjc3NTpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcmRtYV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03NzYtXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz0yNDM9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfZXZlbnQoc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpodWdldGxiLCBpbnQgaWR4LFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNDUte1xcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6MjQ2OlxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2aHVnZXRsYi1cXHUwMDNlZXZlbnRzX2xvY2FsW2lkeF1bZXZlbnRdKTtcXG5tbS9odWdldGxiX2Nncm91cC5jOjI0NzpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNmh1Z2V0bGItXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlW2lkeF0pO1xcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtMjQ4LVxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz02Nzc9c3RhdGljIGludCBfX2h1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIGJvb2wgbG9jYWwpXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jLTY4Ni1cXHRpZiAobG9jYWwpXFxubW0vaHVnZXRsYl9jZ3JvdXAuYzo2ODc6XFx0XFx0bWF4ID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2aF9jZy1cXHUwMDNlZXZlbnRzX2xvY2FsW2lkeF1bSFVHRVRMQl9NQVhdKTtcXG5tbS9odWdldGxiX2Nncm91cC5jLTY4OC1cXHRlbHNlXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jPTY5Nj1zdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jLTcwMC1cXG5tbS9odWdldGxiX2Nncm91cC5jOjcwMTpzdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy03MDIte1xcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz03MDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgaHVnZXRsYl9kZmxfdG1wbFtdID0ge1xcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy03NDAtXFx0XFx0Lm5hbWUgPSBcXFwiZXZlbnRzLmxvY2FsXFxcIixcXG5tbS9odWdldGxiX2Nncm91cC5jOjc0MTpcXHRcXHQuc2VxX3Nob3cgPSBodWdldGxiX2V2ZW50c19sb2NhbF9zaG93LFxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6NzQyOlxcdFxcdC5maWxlX29mZnNldCA9IE1FTUZJTEVfT0ZGU0VUKHN0cnVjdCBodWdldGxiX2Nncm91cCwgZXZlbnRzX2xvY2FsX2ZpbGVbMF0pLFxcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNzQzLVxcdFxcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNzQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbm9kZV9ucl9scnVfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE3NTYtXFx0XFx0ZWxzZVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNzU3OlxcdFxcdFxcdG5yICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywgTlJfTFJVX0JBU0UgKyBscnUpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzU4LVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNzYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbnJfbHJ1X3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzc0LVxcdFxcdGVsc2VcXG5tbS9tZW1jb250cm9sLXYxLmM6MTc3NTpcXHRcXHRcXHRuciArPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBOUl9MUlVfQkFTRSArIGxydSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE3NzYtXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE4NjM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfZXZlbnRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTg2OS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTg3MDp2b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzEte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtY2cxX3N0YXRzKTsgaSsrKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc1OlxcdFxcdHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIG1lbWNnMV9zdGF0c1tpXSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE4NzYtfVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODc3LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc4OnZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC12MS5jLTE4Nzkte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4ODItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODgzOlxcdFxcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBpKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg4NC19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg4Nj12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4OTgtXFxubW0vbWVtY29udHJvbC12MS5jOjE4OTk6XFx0XFx0bnIgPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChtZW1jZywgbWVtY2cxX3N0YXRzW2ldKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTkwMC1cXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiJXMgJWx1XFxcXG5cXFwiLCBtZW1jZzFfc3RhdF9uYW1lc1tpXSwgbnIpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE5MDQtXFx0XFx0c2VxX2J1Zl9wcmludGYocywgXFxcIiVzICVsdVxcXFxuXFxcIiwgdm1fZXZlbnRfbmFtZShtZW1jZzFfZXZlbnRzW2ldKSxcXG5tbS9tZW1jb250cm9sLXYxLmM6MTkwNTpcXHRcXHRcXHQgICAgICAgbWVtY2dfZXZlbnRzX2xvY2FsKG1lbWNnLCBtZW1jZzFfZXZlbnRzW2ldKSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE5MDYtXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTkwOC1cXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiJXMgJWx1XFxcXG5cXFwiLCBscnVfbGlzdF9uYW1lKGkpLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoxOTA5OlxcdFxcdFxcdCAgICAgICBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBOUl9MUlVfQkFTRSArIGkpICpcXG5tbS9tZW1jb250cm9sLXYxLmMtMTkxMC1cXHRcXHRcXHQgICAgICAgUEFHRV9TSVpFKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0zMj1zdGF0aWMgaW5saW5lIGJvb2wgZG9fbWVtc3dfYWNjb3VudCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTM2LVxcbm1tL21lbWNvbnRyb2wtdjEuaDozNzp1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudCk7XFxubW0vbWVtY29udHJvbC12MS5oOjM4OnVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpO1xcbm1tL21lbWNvbnRyb2wtdjEuaDozOTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xcbm1tL21lbWNvbnRyb2wtdjEuaC00MC1ib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD02ND12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKTtcXG5tbS9tZW1jb250cm9sLXYxLmg6NjU6dm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcXG5tbS9tZW1jb250cm9sLXYxLmg6NjY6dm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCk7XFxubW0vbWVtY29udHJvbC12MS5oLTY3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNjktXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XFxubW0vbWVtY29udHJvbC12MS5oOjcwOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNzEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTIzNj1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcXG5tbS9tZW1jb250cm9sLmMtMjM3LVxcbm1tL21lbWNvbnRyb2wuYzoyMzg6c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG5tbS9tZW1jb250cm9sLmMtMjM5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTEtXFx0LyogVGhlIGZvbGxvd2luZyBjb3VudHMgYXJlIGFsbCBub24taGllcmFyY2hpY2FsIGFuZCBuZWVkIHRvIGJlIHJlcGFyZW50ZWQuICovXFxubW0vbWVtY29udHJvbC5jOjI1MjpcXHRyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jOjI1MzpcXHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0yNTQtXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU3LSNlbHNlXFxubW0vbWVtY29udHJvbC5jOjI1ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYy0yNTkte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwNy1cXG5tbS9tZW1jb250cm9sLmM6MzA4OlxcdHJlcGFyZW50X3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0zMDktfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4MT1zdHJ1Y3QgbHJ1dmVjX3N0YXRzIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00ODUtXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHN0YXRlICovXFxubW0vbWVtY29udHJvbC5jOjQ4NjpcXHRsb25nIHN0YXRlX2xvY2FsW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XFxubW0vbWVtY29udHJvbC5jLTQ4Ny1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0OS1cXG5tbS9tZW1jb250cm9sLmM6NTUwOnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL21lbWNvbnRyb2wuYy01NTEtXFx0XFx0XFx0XFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0LVxcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxubW0vbWVtY29udHJvbC5jOjU2NTpcXHR4ID0gUkVBRF9PTkNFKHBuLVxcdTAwM2VscnV2ZWNfc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcXG5tbS9tZW1jb250cm9sLmMtNTY2LSNpZmRlZiBDT05GSUdfU01QXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc0PXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc2LVxcbm1tL21lbWNvbnRyb2wuYzo1Nzc6dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy01NzgtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTg0LVxcdFxcdHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhwYXJlbnQsIE5PREVfREFUQShuaWQpKTtcXG5tbS9tZW1jb250cm9sLmM6NTg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjaGlsZF9scnV2ZWMsIGlkeCk7XFxubW0vbWVtY29udHJvbC5jLTU4Ni1cXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqY2hpbGRfcG4sICpwYXJlbnRfcG47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjczPXN0cnVjdCBtZW1jZ192bXN0YXRzIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02NzktXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXFx1MDAyNiBldmVudHMgKi9cXG5tbS9tZW1jb250cm9sLmM6NjgwOlxcdGxvbmdcXHRcXHRcXHRzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07XFxubW0vbWVtY29udHJvbC5jOjY4MTpcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XFxubW0vbWVtY29udHJvbC5jLTY4Mi0jZW5kaWZcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02OTYtI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYzo2OTc6c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNjk4LXtcXG5tbS9tZW1jb250cm9sLmM6Njk5OlxcdHJldHVybiBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwMC19XFxubW0vbWVtY29udHJvbC5jLTcwMS1cXG5tbS9tZW1jb250cm9sLmM6NzAyOnN0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy03MDMte1xcbm1tL21lbWNvbnRyb2wuYzo3MDQ6XFx0cmV0dXJuIG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwNS19XFxubW0vbWVtY29udHJvbC5jLTcwNi0jZWxzZVxcbm1tL21lbWNvbnRyb2wuYzo3MDc6c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNzA4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03MTEtXFxubW0vbWVtY29udHJvbC5jOjcxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNzEzLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04NjA9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTg3OC0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXFxubW0vbWVtY29udHJvbC5jOjg3OTogKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy5cXG5tbS9tZW1jb250cm9sLmMtODgwLSAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTk0ND12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NTgtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xcbm1tL21lbWNvbnRyb2wuYzo5NTk6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG5tbS9tZW1jb250cm9sLmMtOTYwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NjYtXFxubW0vbWVtY29udHJvbC5jOjk2NzpcXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxubW0vbWVtY29udHJvbC5jLTk2OC0jaWZkZWYgQ09ORklHX1NNUFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk3NC1cXG5tbS9tZW1jb250cm9sLmM6OTc1OnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy05NzYtXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcXG5tbS9tZW1jb250cm9sLmMtOTc3LXtcXG5tbS9tZW1jb250cm9sLmM6OTc4OlxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpZHgpO1xcbm1tL21lbWNvbnRyb2wuYy05NzktXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEzMj1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTQwLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmM6MTE0MTp1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG5tbS9tZW1jb250cm9sLmMtMTE0Mi17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE0Ny1cXG5tbS9tZW1jb250cm9sLmM6MTE0ODpcXHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy0xMTQ5LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzI0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzMwLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmM6MTczMTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxubW0vbWVtY29udHJvbC5jLTE3MzIte1xcbm1tL21lbWNvbnRyb2wuYzoxNzMzOlxcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpdGVtKSAqXFxubW0vbWVtY29udHJvbC5jLTE3MzQtXFx0XFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTExPXZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5MTktXFxubW0vbWVtY29udHJvbC5jOjE5MjA6XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c19sb2NhbFtldmVudF0pO1xcbm1tL21lbWNvbnRyb2wuYy0xOTIxLVxcdGlmICghc3dhcF9ldmVudCBcXHUwMDI2XFx1MDAyNiBhbGxvd19zcGlubmluZylcXG5tbS9tZW1jb250cm9sLmM6MTkyMjpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxubW0vbWVtY29udHJvbC5jLTE5MjMtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQ5Nj1zdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ1MDAtXFx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cXG5tbS9tZW1jb250cm9sLmM6NDUwMTpcXHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxcbm1tL21lbWNvbnRyb2wuYy00NTAyLVxcdCAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ1NTM9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG5tbS9tZW1jb250cm9sLmMtNDU1NC17XFxubW0vbWVtY29udHJvbC5jOjQ1NTU6XFx0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jLTQ1NTYtXFx0aW50IG5pZDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTYyLVxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0ga21lbTtcXG5tbS9tZW1jb250cm9sLmM6NDU2MzpcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ1NjQ6XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IGttZW07XFxubW0vbWVtY29udHJvbC5jLTQ1NjUtXFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTgxLVxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ1ODI6XFx0XFx0XFx0bHN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDU4My1cXHRcXHRcXHRpZiAocGxzdGF0cylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTg1LVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmM6NDU4NjpcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ1ODc6XFx0XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ1ODgtXFx0XFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTk1LVxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ1OTY6XFx0XFx0XFx0bHN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDU5Ny1cXHRcXHRcXHRpZiAocGxzdGF0cylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTk5LVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmM6NDYwMDpcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ2MDE6XFx0XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ2MDItXFx0XFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NjEyPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYyNS1cXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlLFxcbm1tL21lbWNvbnRyb2wuYzo0NjI2OlxcdFxcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcXG5tbS9tZW1jb250cm9sLmMtNDYyNy1cXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2MzYtXFx0XFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHMsXFxubW0vbWVtY29udHJvbC5jOjQ2Mzc6XFx0XFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcXG5tbS9tZW1jb250cm9sLmMtNDYzOC1cXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjU4LVxcdFxcdFxcdC5hZ2dyZWdhdGUgPSBsc3RhdHMtXFx1MDAzZXN0YXRlLFxcbm1tL21lbWNvbnRyb2wuYzo0NjU5OlxcdFxcdFxcdC5sb2NhbCA9IGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWwsXFxubW0vbWVtY29udHJvbC5jLTQ2NjAtXFx0XFx0XFx0LnBlbmRpbmcgPSBsc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTAzND1zdGF0aWMgaW50IG1lbW9yeV9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA0MS1cXG5tbS9tZW1jb250cm9sLmM6NTA0MjpzdGF0aWMgaW50IG1lbW9yeV9ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxubW0vbWVtY29udHJvbC5jLTUwNDMte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwNDUtXFxubW0vbWVtY29udHJvbC5jOjUwNDY6XFx0X19tZW1vcnlfZXZlbnRzX3Nob3cobSwgbWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNfbG9jYWwpO1xcbm1tL21lbWNvbnRyb2wuYy01MDQ3LVxcdHJldHVybiAwO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxNDc9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE5My1cXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxubW0vbWVtY29udHJvbC5jOjUxOTQ6XFx0XFx0LmZpbGVfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1lbV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5tbS9tZW1jb250cm9sLmM6NTE5NTpcXHRcXHQuc2VxX3Nob3cgPSBtZW1vcnlfZXZlbnRzX2xvY2FsX3Nob3csXFxubW0vbWVtY29udHJvbC5jLTUxOTYtXFx0fSxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz02NTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM4OjU1Ljc3NTA2Nzc1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDY4NzAxOTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIFZNc3RhdHMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCB3aXRoIGEgY3JpdGljYWwgZXllLiBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG1lbWNnX3Ztc3RhdHNgIHN0cnVjdHVyZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbm90aWNlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbjsgdGhlIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGZpZWxkcyBhcmUgb25seSBwcmVzZW50IGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQuIEEgY2xhc3NpYyBtZW1vcnkgb3B0aW1pemF0aW9uIHN0cmF0ZWd5IOKAkyBvbWl0IHRoZSBmaWVsZHMgd2hlbiB0aGV5IGFyZW4ndCB1c2VkLiBDbGV2ZXIuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgaXNzdWVzLiBDb3VsZCB0aGVyZSBiZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBsdXJraW5nIGhlcmU/IEEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZT8gVW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGJlaW5nIGFjY2Vzc2VkPyBVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbmZsdWVuY2luZyBicmFuY2hpbmc/IE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdG8gdGhvcm91Z2hseSBpbnZlc3RpZ2F0ZSB0aGVzZSBwb3NzaWJpbGl0aWVzLlxuXG5BbHJpZ2h0LCB0aGUgaGVscGVyIGZ1bmN0aW9ucyBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKWAgYW5kIGBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoKWAgc2VlbSB0byBiZSB0aGUga2V5LiBUaGV5IGVpdGhlciByZXR1cm4gdGhlIGBzdGF0ZV9sb2NhbGAgb3IgYGV2ZW50c19sb2NhbGAgYXJyYXlzIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGFjdGl2ZSwgb3IgTlVMTCBvdGhlcndpc2UuIFRoYXQncyBnb29kLCBwcm92aWRpbmcgYSBzYWZlIHdheSB0byBoYW5kbGUgdGhlIGNvbmRpdGlvbmFsIHByZXNlbmNlIG9mIHRoZXNlIGZpZWxkcy4gVGhlIGNhbGxlcnMsIHNwZWNpZmljYWxseSBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZSgpYCwgYGZsdXNoX25taV9zdGF0cygpYCwgYW5kIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaCgpYCwgc2VlbSB0byBiZSB1c2luZyB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIG9yIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIE5VTEwsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoLiBTbywgYXQgZmlyc3QgZ2xhbmNlLCBJJ20gbm90IHNlZWluZyBhbnkgb2J2aW91cyByZWQgZmxhZ3MuXG5cbk5vdywgbGV0J3MgdmVyaWZ5LiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhpcyBgc3RydWN0IG1lbWNnX3Ztc3RhdHNgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3RydWN0dXJlIGl0c2VsZiBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBmaWVsZHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBlc3BlY2lhbGx5IHdoZW4gYENPTkZJR19NRU1DR19WMWAgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgb3V0IHRoZSByZWFsIHRydXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozOTowNi40NjIwODkzNjVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjIzNjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbWVtY2dfdm1zdGF0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTY0OT1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19ldmVudHNfaW5kZXgoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02NTMtXFxubW0vbWVtY29udHJvbC5jOjY1NDpzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUge1xcbm1tL21lbWNvbnRyb2wuYy02NTUtXFx0LyogU3RhdHMgdXBkYXRlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTY1OC1cXHQvKiBDYWNoZWQgcG9pbnRlcnMgZm9yIGZhc3QgaXRlcmF0aW9uIGluIG1lbWNnX3JzdGF0X3VwZGF0ZWQoKSAqL1xcbm1tL21lbWNvbnRyb2wuYzo2NTk6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1XFx0KnBhcmVudF9wY3B1O1xcbm1tL21lbWNvbnRyb2wuYzo2NjA6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNcXHRcXHRcXHQqdm1zdGF0cztcXG5tbS9tZW1jb250cm9sLmMtNjYxLVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTY3Mi1cXG5tbS9tZW1jb250cm9sLmM6NjczOnN0cnVjdCBtZW1jZ192bXN0YXRzIHtcXG5tbS9tZW1jb250cm9sLmMtNjc0LVxcdC8qIEFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSkgcGFnZSBzdGF0ZSBcXHUwMDI2IGV2ZW50cyAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTczNT1zdGF0aWMgdTY0IGZsdXNoX2xhc3RfdGltZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03MzgtXFxubW0vbWVtY29udHJvbC5jOjczOTpzdGF0aWMgYm9vbCBtZW1jZ192bXN0YXRzX25lZWRzX2ZsdXNoKHN0cnVjdCBtZW1jZ192bXN0YXRzICp2bXN0YXRzKVxcbm1tL21lbWNvbnRyb2wuYy03NDAte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTc0NT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfcnN0YXRfdXBkYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGxvbmcgdmFsLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTc0Ny17XFxubW0vbWVtY29udHJvbC5jOjc0ODpcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnN0YXRjX3BjcHU7XFxubW0vbWVtY29udHJvbC5jOjc0OTpcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xcbm1tL21lbWNvbnRyb2wuYy03NTAtXFx0dW5zaWduZWQgbG9uZyBzdGF0c191cGRhdGVzO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMDA9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTQyMDEte1xcbm1tL21lbWNvbnRyb2wuYzo0MjAyOlxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XFxubW0vbWVtY29udHJvbC5jOjQyMDM6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcXG5tbS9tZW1jb250cm9sLmMtNDIwNC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIxOC1cXG5tbS9tZW1jb250cm9sLmM6NDIxOTpcXHRtZW1jZy1cXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbm1tL21lbWNvbnRyb2wuYy00MjIwLVxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIyMi1cXG5tbS9tZW1jb250cm9sLmM6NDIyMzpcXHRtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSxcXG5tbS9tZW1jb250cm9sLmMtNDIyNC1cXHRcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NjEyPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYxNS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYzo0NjE2OlxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XFxubW0vbWVtY29udHJvbC5jLTQ2MTctXFx0c3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIGFjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozOTowNi41NzgzMzEwMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzA3NTY3NDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyB3aGV0aGVyIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gb2YgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgaW4gYG1lbWNnLVx1MDAzZXZtc3RhdHNgIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dfVjFgIGNvdWxkIGludHJvZHVjZSBhbnkgc3VidGxlIGlzc3VlcywgZXNwZWNpYWxseSBhcm91bmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0LCBhZnRlciBhIGNsb3NlciBsb29rLCBpdCBzZWVtcyBwcmV0dHkgY2xlYW4uXG5cbmBremFsbG9jX29iamAgZW5zdXJlcyB0aGUgZW50aXJlIGBtZW1jZy1cdTAwM2V2bXN0YXRzYCBpcyB6ZXJvZWQgb3V0IGF0IGFsbG9jYXRpb24uICBJZiBgQ09ORklHX01FTUNHX1YxYCBpcyAqbm90KiBzZXQsIHRoZSBvbWl0dGVkIGZpZWxkcyBkZWZhdWx0IHRvIE5VTEwsIGFuZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGluY2x1ZGUgZXhwbGljaXQgTlVMTCBjaGVja3MgYmVmb3JlIGFjY2Vzc2luZyB0aGVzZSB2YXJpYWJsZXMgZHVyaW5nIGFnZ3JlZ2F0aW9uIGFuZCBOTUkgZmx1c2hlcy4gIElmIGBDT05GSUdfTUVNQ0dfVjFgICppcyogc2V0LCBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIFNvLCB0aGF0IGluaXRpYWwgY29uY2VybiBpcyBhZGRyZXNzZWQuXG5cbkkgdGhlbiByYW4gdGhyb3VnaCB0aGUgS01TQU4gXCJOZWVkc0tNU0FOPXRydWVcIiBjcml0ZXJpYSwgYW5kIG5vbmUgb2YgdGhlbSBhcHBseSBoZXJlOiBubyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkLCB0aGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCB3ZSBhcmVuJ3QgZGVhbGluZyB3aXRoIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIsIGFuZCB0aGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5FdmVuIGlmIHRoZXJlICp3ZXJlKiBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgS0FTQU4gd291bGQgcGljayBpdCB1cC4gQW55IG90aGVyIHBvdGVudGlhbCBpc3N1ZXMsIGxpa2UgaW52YWxpZCBpbmRleGluZyBkdWUgdG8gYSBsb2dpYyBlcnJvciwgd291bGQgYmUgZmxhZ2dlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIG9yIEtBU0FOLCB0b28uIFdlIGFyZW4ndCBjcmVhdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGF0J3MgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXG5cblRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIFdlJ3JlIHNhZmUgdG8gcHJvY2VlZCB3aXRob3V0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgZmlyZSB1cCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg5MiwiT3V0cHV0VG9rZW5zIjoyNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6Mzk6MzMuNjU0MDA3ODM1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxcblxcbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGFsbCBmaWVsZHMuXFxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcbjMuIEtBU0FOIHZzIEtNU0FOOiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBsb2NhbGAgaWYgYSBjaGVjayB3YXMgbWlzc2luZywgb3Igb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gc3BlY2lmaWNhbGx5IGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzLCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGhlcmUuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxcblxcbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGFsbCBmaWVsZHMuXFxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcbjMuIEtBU0FOIHZzIEtNU0FOOiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBsb2NhbGAgaWYgYSBjaGVjayB3YXMgbWlzc2luZywgb3Igb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gc3BlY2lmaWNhbGx5IGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzLCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGhlcmUuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrkln[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-02 10:07:41 +0000 UTC FinishedAt: 2026-09-02 10:39:34 +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": "ead700ca770c82167af32622cf8b68c9f87c3c7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "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": "ead700ca770c82167af32622cf8b68c9f87c3c7c", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEMCG", "MEMCG_V1" ], "series_id": "39d00352-e7ca-4d13-8422-ca4a369e202a" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "memory_stat_show", "memcg_page_state_local", "memcg_events_local", "reparent_memcg_state_local", "reparent_memcg1_state_local" ], "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+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjMzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X3N0YXRfc2hvdyYjMzQ7LAogICAgJiMzNDttZW1jZ19wYWdlX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O21lbWNnX2V2ZW50c19sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxuXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzLlxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxuMy4gS0FTQU4gdnMgS01TQU46IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYGxvY2FsYCBpZiBhIGNoZWNrIHdhcyBtaXNzaW5nLCBvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBLTVNBTiBzcGVjaWZpY2FsbHkgZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIG5laXRoZXIgb2Ygd2hpY2ggYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaGVyZS5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSByZW1vdmVzIGxlZ2FjeSB2MS1vbmx5IGxvY2FsIHN0YXRpc3RpY3MgKHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwpIGZyb20gc3RydWN0IG1lbWNnX3Ztc3RhdHMgd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQsIGFuZCBhZGRzIE5VTEwgY2hlY2tzIGR1cmluZyBzdGF0cyBmbHVzaGluZyBhbmQgYWdncmVnYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1jZyBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB3aXRoIGJvdGggY2dyb3VwIHYxIGFuZCB2MiB3b3JrbG9hZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzM8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA2MjliYjNiNWVkNDk4YzIxZGJkZjE1YTViYjRmZjA1NWFjMmZhMjFjXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBTZXAgMiAxMDozMzo0NiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDdjZTUwYmNjZjEyNjQuLmI5OGIyZDY4YzYyYmUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTY3NSw5ICYjNDM7Njc1LDExIEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbiBcdGxvbmdcdFx0XHRzdGF0ZVtNRU1DR19WTVNUQVRfU0laRV07XG4gXHR1bnNpZ25lZCBsb25nXHRcdGV2ZW50c1tOUl9NRU1DR19FVkVOVFNdO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gXHQvKiBOb24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgcGFnZSBzdGF0ZSBcdTAwMjYgZXZlbnRzICovXG4gXHRsb25nXHRcdFx0c3RhdGVfbG9jYWxbTUVNQ0dfVk1TVEFUX1NJWkVdO1xuIFx0dW5zaWduZWQgbG9uZ1x0XHRldmVudHNfbG9jYWxbTlJfTUVNQ0dfRVZFTlRTXTtcbiYjNDM7I2VuZGlmXG4gXG4gXHQvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZ1x0XHRcdHN0YXRlX3BlbmRpbmdbTUVNQ0dfVk1TVEFUX1NJWkVdO1xuQEAgLTY4Nyw2ICYjNDM7Njg5LDMyIEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbiBcdGF0b21pY19sb25nX3RcdFx0c3RhdHNfdXBkYXRlcztcbiB9O1xuIFxuJiM0MzsvKlxuJiM0MzsgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5XG4mIzQzOyAqIG1lbW9yeS5zdGF0IGFuZCBieSByZXBhcmVudGluZyBvbiBvZmZsaW5lLCBib3RoIG9mIHdoaWNoIGFyZSB2MS1vbmx5LlxuJiM0MzsgKi9cbiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMVxuJiM0MztzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWw7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX2xvY2FsO1xuJiM0Mzt9XG4mIzQzOyNlbHNlXG4mIzQzO3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gTlVMTDtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4gLypcbiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nXG4gICpcbkBAIC00NDY4LDcgJiM0Mzs0NDk2LDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXG4gc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcbiBcdC8qIHBvaW50ZXIgdG8gdGhlIGFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuIFx0bG9uZyAqYWdncmVnYXRlO1xuLVx0LyogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNoYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xuJiM0MztcdC8qXG4mIzQzO1x0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbiYjNDM7XHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxuJiM0MztcdCAqL1xuIFx0bG9uZyAqbG9jYWw7XG4gXHQvKiBwb2ludGVyIHRvIHRoZSBwZW5kaW5nIGNoaWxkIGNvdW50ZXJzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXG4gXHRsb25nICpwZW5kaW5nO1xuQEAgLTQ1MDcsNyAmIzQzOzQ1MzgsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gXHRcdH1cbiBcbiBcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuLVx0XHRpZiAoZGVsdGFfY3B1KVxuJiM0MztcdFx0aWYgKGRlbHRhX2NwdSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbG9jYWwpXG4gXHRcdFx0YWMtXHUwMDNlbG9jYWxbaV0gJiM0Mzs9IGRlbHRhX2NwdTtcbiBcbiBcdFx0aWYgKGRlbHRhKSB7XG5AQCAtNDUyMSw2ICYjNDM7NDU1Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcbiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4mIzQzO1x0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XG4gXHRpbnQgbmlkO1xuIFxuIFx0aWYgKGF0b21pY19yZWFkKFx1MDAyNm1lbWNnLVx1MDAzZWttZW1fc3RhdCkpIHtcbkBAIC00NTI4LDcgJiM0Mzs0NTYwLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdFx0aW50IGluZGV4ID0gbWVtY2dfc3RhdHNfaW5kZXgoTUVNQ0dfS01FTSk7XG4gXG4gXHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBrbWVtO1xuLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTtcbiYjNDM7XHRcdGlmIChzdGF0ZV9sb2NhbClcbiYjNDM7XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtO1xuIFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBrbWVtO1xuIFx0fVxuQEAgLTQ1NTAsNyAmIzQzOzQ1ODMsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjtcbiBcdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbi1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbiYjNDM7XHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxuJiM0MztcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdH1cbkBAIC00NTYzLDcgJiM0Mzs0NTk3LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiBcdFx0XHRpZiAocGxzdGF0cylcbiBcdFx0XHRcdHBsc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG4mIzQzO1x0XHRcdGlmIChzdGF0ZV9sb2NhbClcbiYjNDM7XHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG4gXHRcdFx0aWYgKHBhcmVudClcbiBcdFx0XHRcdHBhcmVudC1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiO1xuIFx0XHR9XG5AQCAtNDU4OCw3ICYjNDM7NDYyMyw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGUsXG4tXHRcdC5sb2NhbCA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWwsXG4mIzQzO1x0XHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXG4gXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxuIFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcbiBcdFx0LmNzdGF0ID0gc3RhdGMtXHUwMDNlc3RhdGUsXG5AQCAtNDU5OSw3ICYjNDM7NDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuLVx0XHQubG9jYWwgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbCxcbiYjNDM7XHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG4gXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxuIFx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VldmVudHMsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzM8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+NG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TUVNQ0cmIzM0OywKICAgICYjMzQ7TUVNQ0dfVjEmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttZW1vcnlfc3RhdF9zaG93JiMzNDssCiAgICAmIzM0O21lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwmIzM0OywKICAgICYjMzQ7bWVtY2dfZXZlbnRzX2xvY2FsJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O3JlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25kaXRpb25hbGx5IHJlbW92ZXMgbGVnYWN5IHYxLW9ubHkgbG9jYWwgc3RhdGlzdGljcyAoc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCkgZnJvbSBzdHJ1Y3QgbWVtY2dfdm1zdGF0cyB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZCwgYW5kIGFkZHMgTlVMTCBjaGVja3MgZHVyaW5nIHN0YXRzIGZsdXNoaW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbWNnIHN0YXRpc3RpY3MgYWNjb3VudGluZyBhbmQgcmVwYXJlbnRpbmcgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHdpdGggYm90aCBjZ3JvdXAgdjEgYW5kIHYyIHdvcmtsb2Fkcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDYyOWJiM2I1ZWQ0OThjMjFkYmRmMTVhNWJiNGZmMDU1YWMyZmEyMWMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIFNlcCAyIDEwOjMzOjQ2IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jCmluZGV4IDdjZTUwYmNjZjEyNjQuLmI5OGIyZDY4YzYyYmUgMTAwNjQ0Ci0tLSBhL21tL21lbWNvbnRyb2wuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tZW1jb250cm9sLmMKQEAgLTY3NSw5ICYjNDM7Njc1LDExIEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHsKIAlsb25nCQkJc3RhdGVbTUVNQ0dfVk1TVEFUX1NJWkVdOwogCXVuc2lnbmVkIGxvbmcJCWV2ZW50c1tOUl9NRU1DR19FVkVOVFNdOwogCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMQogCS8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBwYWdlIHN0YXRlICZhbXA7IGV2ZW50cyAqLwogCWxvbmcJCQlzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07CiAJdW5zaWduZWQgbG9uZwkJZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107CiYjNDM7I2VuZGlmCiAKIAkvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqLwogCWxvbmcJCQlzdGF0ZV9wZW5kaW5nW01FTUNHX1ZNU1RBVF9TSVpFXTsKQEAgLTY4Nyw2ICYjNDM7Njg5LDMyIEBAIHN0cnVjdCBtZW1jZ192bXN0YXRzIHsKIAlhdG9taWNfbG9uZ190CQlzdGF0c191cGRhdGVzOwogfTsKIAomIzQzOy8qCiYjNDM7ICogVGhlIG5vbi1oaWVyYXJjaGljYWwgbWVtY2ctd2lkZSBjb3VudGVycyBhcmUgcmVhZCBiYWNrIG9ubHkgYnkgdGhlIGxlZ2FjeQomIzQzOyAqIG1lbW9yeS5zdGF0IGFuZCBieSByZXBhcmVudGluZyBvbiBvZmZsaW5lLCBib3RoIG9mIHdoaWNoIGFyZSB2MS1vbmx5LgomIzQzOyAqLwomIzQzOyNpZmRlZiBDT05GSUdfTUVNQ0dfVjEKJiM0MztzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJcmV0dXJuIG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19sb2NhbDsKJiM0Mzt9CiYjNDM7I2Vsc2UKJiM0MztzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKQomIzQzO3sKJiM0MzsJcmV0dXJuIE5VTEw7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwogLyoKICAqIG1lbWNnIGFuZCBscnV2ZWMgc3RhdHMgZmx1c2hpbmcKICAqCkBAIC00NDY4LDcgJiM0Mzs0NDk2LDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpCiBzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgewogCS8qIHBvaW50ZXIgdG8gdGhlIGFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqLwogCWxvbmcgKmFnZ3JlZ2F0ZTsKLQkvKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2hhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovCiYjNDM7CS8qCiYjNDM7CSAqIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyBvciBOVUxMIHRvCiYjNDM7CSAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpCiYjNDM7CSAqLwogCWxvbmcgKmxvY2FsOwogCS8qIHBvaW50ZXIgdG8gdGhlIHBlbmRpbmcgY2hpbGQgY291bnRlcnMgZHVyaW5nIHRyZWUgcHJvcGFnYXRpb24gKi8KIAlsb25nICpwZW5kaW5nOwpAQCAtNDUwNyw3ICYjNDM7NDUzOCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYykKIAkJfQogCiAJCS8qIEFnZ3JlZ2F0ZSBjb3VudHMgb24gdGhpcyBsZXZlbCBhbmQgcHJvcGFnYXRlIHVwd2FyZHMgKi8KLQkJaWYgKGRlbHRhX2NwdSkKJiM0MzsJCWlmIChkZWx0YV9jcHUgJmFtcDsmYW1wOyBhYy0mZ3Q7bG9jYWwpCiAJCQlhYy0mZ3Q7bG9jYWxbaV0gJiM0Mzs9IGRlbHRhX2NwdTsKIAogCQlpZiAoZGVsdGEpIHsKQEAgLTQ1MjEsNiAmIzQzOzQ1NTIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpCiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDCiBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogewomIzQzOwlsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTsKIAlpbnQgbmlkOwogCiAJaWYgKGF0b21pY19yZWFkKCZhbXA7bWVtY2ctJmd0O2ttZW1fc3RhdCkpIHsKQEAgLTQ1MjgsNyAmIzQzOzQ1NjAsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCQlpbnQgaW5kZXggPSBtZW1jZ19zdGF0c19pbmRleChNRU1DR19LTUVNKTsKIAogCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVbaW5kZXhdICYjNDM7PSBrbWVtOwotCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtOwomIzQzOwkJaWYgKHN0YXRlX2xvY2FsKQomIzQzOwkJCXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0ga21lbTsKIAkJaWYgKHBhcmVudCkKIAkJCXBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IGttZW07CiAJfQpAQCAtNDU1MCw3ICYjNDM7NDU4Myw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJCQlpZiAocGxzdGF0cykKIAkJCQlwbHN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7Ci0JCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiOwomIzQzOwkJCWlmIChzdGF0ZV9sb2NhbCkKJiM0MzsJCQkJc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiOwogCQkJaWYgKHBhcmVudCkKIAkJCQlwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiOwogCQl9CkBAIC00NTYzLDcgJiM0Mzs0NTk3LDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAkJCWlmIChwbHN0YXRzKQogCQkJCXBsc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiOwogCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjsKLQkJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiYjNDM7CQkJaWYgKHN0YXRlX2xvY2FsKQomIzQzOwkJCQlzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQlpZiAocGFyZW50KQogCQkJCXBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCX0KQEAgLTQ1ODgsNyAmIzQzOzQ2MjMsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaChzdHJ1Y3QgY2dyb3VwX3N1YnN5c19zdGF0ZSAqY3NzLCBpbnQgY3B1KQogCiAJYWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7CiAJCS5hZ2dyZWdhdGUgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGUsCi0JCS5sb2NhbCA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbCwKJiM0MzsJCS5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSwKIAkJLnBlbmRpbmcgPSBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZywKIAkJLnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nIDogTlVMTCwKIAkJLmNzdGF0ID0gc3RhdGMtJmd0O3N0YXRlLApAQCAtNDU5OSw3ICYjNDM7NDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpCiAKIAlhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHsKIAkJLmFnZ3JlZ2F0ZSA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtldmVudHMsCi0JCS5sb2NhbCA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtldmVudHNfbG9jYWwsCiYjNDM7CQkubG9jYWwgPSBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkobWVtY2cpLAogCQkucGVuZGluZyA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtldmVudHNfcGVuZGluZywKIAkJLnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LSZndDt2bXN0YXRzLSZndDtldmVudHNfcGVuZGluZyA6IE5VTEwsCiAJCS5jc3RhdCA9IHN0YXRjLSZndDtldmVudHMsCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjMzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTMKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAyMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBQcm9wb3NlZCBQYXRjaDogYG1tL21lbWNvbnRyb2wuY2AgTW9kaWZpY2F0aW9ucyoqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgcGF0Y2ggYW5kIHNlZSB3aGF0JiMzOTtzIGJlaW5nIHR3ZWFrZWQuIEl0IGxvb2tzIGxpa2UgdGhlIHRhcmdldCBpcyBgbW0vbWVtY29udHJvbC5jYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgc2VlIHNvbWUgY29uZGl0aW9uYWwgY29tcGlsYXRpb24gYXJvdW5kIHRoZSBgc3RydWN0IG1lbWNnX3Ztc3RhdHNgIHN0cnVjdHVyZS4gU3BlY2lmaWNhbGx5LCBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBhcmUgZ3VhcmRlZCBieSBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAuIEludGVyZXN0aW5nLiBMb29rcyBsaWtlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggdmVyc2lvbmVkIG1lbWNnIHN0YXRzLgoKVGhlIGludHJvZHVjdGlvbiBvZiBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YCBzdWdnZXN0cyB3ZSBoYXZlIHV0aWxpdHkgZnVuY3Rpb25zIHRoYXQgY29uZGl0aW9uYWxseSByZXR1cm4gTlVMTCBpZiBgQ09ORklHX01FTUNHX1YxYCBpc24mIzM5O3QgZW5hYmxlZC4gR29vZCBwcmFjdGljZSwga2VlcHMgdGhpbmdzIGNsZWFuZXIgYW5kIHByZXZlbnRzIHBvdGVudGlhbCBidWlsZCBpc3N1ZXMuIEkmIzM5O20gYXNzdW1pbmcgdGhlc2UgYXJlIG1lYW50IHRvIGJlIHVzZWQgd2hlbiB2ZXJzaW9uIDEgb2YgbWVtY2cgaXMgKm5vdCogZW5hYmxlZC4KCkxvb2tpbmcgYXQgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLCB0aGVyZSYjMzk7cyBhIGNvbmRpdGlvbmFsIGBpZiAoZGVsdGFfY3B1ICZhbXA7JmFtcDsgYWMtJmd0O2xvY2FsKWAuIFRoZSBwcmVzZW5jZSBvZiBgYWMtJmd0O2xvY2FsYCBpcyB0ZWxsaW5nLCBhbmQgaXQgd2lsbCBiZSBkZXBlbmRlbnQgb24gdGhlIGFycmF5IHJldHVybnMuIGBmbHVzaF9ubWlfc3RhdHNgIGFsc28gY2hlY2tzIGBpZiAoc3RhdGVfbG9jYWwpIC4uLmAuIEFuZCBpbiBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCB3ZSBzZWUgYC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKWAsIGV0Yy4gU28sIHRoaXMgbG9va3MgbGlrZSB0aGUgbG9jYWwgYXJyYXlzIGFyZSBiZWluZyBhc3NpZ25lZCB0byB0aGUgYC5sb2NhbGAgZWxlbWVudCBvZiBhIHN0cnVjdHVyZS4KClRvIGdldCBhIGJldHRlciBwaWN0dXJlLCBJJiMzOTttIGdvaW5nIHRvIGp1bXAgaW50byB0aGUgY29kZSBpdHNlbGYuIEkmIzM5O2xsIG5lZWQgdG8gY2hlY2sgYG1tL21lbWNvbnRyb2wuY2AgYW5kIHBvdGVudGlhbGx5IGBtbS9tZW1jb250cm9sLXYxLmNgIG9yIHRoZSBLY29uZmlnIGZpbGVzLiBBIHF1aWNrIGBncmVwcGVyYCBydW4gb3IgZXZlbiBhIHJlYWQtZmlsZSBvcGVyYXRpb24gYXJvdW5kIHRoZXNlIGxpbmVzIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBhIGxvb2sgYXQgdGhlIHJlbGV2YW50IEtjb25maWcgb3B0aW9ucyBzaG91bGQgcXVpY2tseSBpbGx1bWluYXRlIHRoZSBpbnRlbnQgYW5kIGFueSBwb3RlbnRpYWwgaW1wbGljYXRpb25zIG9mIHRoZXNlIGNoYW5nZXMgaW4gdGhlIGNvbnRleHQgb2YgdGhlIGxhcmdlciBtZW1jZyBlY29zeXN0ZW0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTUVNQ0cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQyMTAKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkh1bnRpbmcgRG93biBNRU1DRyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBNRU1DRyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCYjMzk7cyBtb2R1bGFyaXR5IGFuZCB0aGUgdHlwaWNhbCBkaXJlY3Rvcnkgc3RydWN0dXJlLCB0aGUgbW9zdCBsb2dpY2FsIHBsYWNlcyB0byBzdGFydCBsb29raW5nIGFyZSBlaXRoZXIgYGluaXQvS2NvbmZpZ2Agb3IgYG1tL0tjb25maWdgLiBgaW5pdC9LY29uZmlnYCBpcyBvZnRlbiB0aGUgcGxhY2UgZm9yIGdsb2JhbCBvciBmb3VuZGF0aW9uYWwgc2V0dGluZ3MsIHdoaWxlIGBtbS9LY29uZmlnYCB3b3VsZCBzZWVtIGxpa2UgdGhlIG1vc3QgbG9naWNhbCBsb2NhdGlvbiBmb3IgbWVtb3J5LXJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEkmIzM5O2xsIGxpa2VseSBmaW5kIHRoZSBkZWZpbml0aW9uIG9mIHRoZSBgTUVNQ0dgIHN5bWJvbCBvciBhIGNsb3NlbHkgcmVsYXRlZCBvcHRpb24gd2l0aGluIG9uZSBvZiB0aG9zZSBmaWxlcy4gVGltZSB0byBjcmFjayBvcGVuIHRoZSBzb3VyY2UgYW5kIGdldCBzZWFyY2hpbmcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIE1FTUNHJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xuLS1cbmluaXQvS2NvbmZpZy0xMDc3LVxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXG5pbml0L0tjb25maWctMTA3OS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbi0tXG5pbml0L0tjb25maWctMTA4Ni1cbmluaXQvS2NvbmZpZzoxMDg3OmNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXG5pbml0L0tjb25maWctMTA4OC1cdGJvb2xcbi0tXG5pbml0L0tjb25maWctMTA5My1cbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuaW5pdC9LY29uZmlnLTEwOTUtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTExMDAtXG5pbml0L0tjb25maWc6MTEwMTpjb25maWcgTUVNQ0dfVjFcbmluaXQvS2NvbmZpZy0xMTAyLVx0Ym9vbCBcJiMzNDtMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDYzMAoJCQkJCQkJb3V0cHV0OiAyMwoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaXQgc3RhbmRzOgoKKipDb2RlIEFyY2hhZW9sb2d5IFRpbWUhKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGNvZGViYXNlLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgc2NvcGUgYW5kIGltcGFjdCBvZiBgZXZlbnRzX2xvY2FsYCBhbmQgYHN0YXRlX2xvY2FsYC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgKndoZXJlKiB0aGVzZSB2YXJpYWJsZXMgYXJlIGJlaW5nIHV0aWxpemVkLiBBcmUgdGhleSBpc29sYXRlZCB0byBhIHNpbmdsZSBmdW5jdGlvbiwgbW9kdWxlLCBvciBzY2F0dGVyZWQgdGhyb3VnaG91dCB0aGUgc3lzdGVtPyBBcmUgdGhleSBjZW50cmFsIHRvIGEgY29yZSBmdW5jdGlvbmFsaXR5LCBvciBtb3JlIG9mIGEgc2lkZSBjb25jZXJuPyBLbm93aW5nIHRoaXMgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgdGhlaXIgcmVsYXRpdmUgaW1wb3J0YW5jZSwgdGhlaXIgcG90ZW50aWFsIGltcGFjdCBvbiBvdGhlciBhcmVhcywgYW5kIGhvdyBlYXNpbHkgdGhleSBjYW4gYmUgbWFuaXB1bGF0ZWQuIExldCYjMzk7cyBzdGFydCBieSBkb2luZyBhIGJhc2ljIHNlYXJjaCBmb3IgdGhlaXIgdXNhZ2VzLiBUaW1lIHRvIGdldCBteSBncmVwIG9uIQoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyhzdGF0ZV9sb2NhbHxldmVudHNfbG9jYWwpJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O1xuRnVsbCBvdXRwdXQgaXMgdG9vIGxvbmcsIHNob3dpbmcgNTAwIG91dCBvZiA1MDYgbGluZXMuXG5Vc2UgbW9yZSBwcmVjaXNlIGV4cHJlc3Npb24gaWYgcG9zc2libGUuXG5cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM9MTI5Mz1zdGF0aWMgdm9pZCBfX2d1Y19jYXB0dXJlX3Byb2Nlc3Nfb3V0cHV0KHN0cnVjdCBpbnRlbF9ndWMgKmd1Yylcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTYtXHRzdHJ1Y3QgaW50ZWxfdWMgKnVjID0gY29udGFpbmVyX29mKGd1YywgdHlwZW9mKCp1YyksIGd1Yyk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jOjEyOTc6XHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgbG9nX2J1Zl9zdGF0ZV9sb2NhbDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmMtMTI5OC1cdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSAqbG9nX2J1Zl9zdGF0ZTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTMtXHQgKi9cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNDpcdG1lbWNweShcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLCBsb2dfYnVmX3N0YXRlLCBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTUtXHRidWZmZXJfc2l6ZSA9IGludGVsX2d1Y19nZXRfbG9nX2J1ZmZlcl9zaXplKFx1MDAyNmd1Yy1cdTAwM2Vsb2csIEdVQ19DQVBUVVJFX0xPR19CVUZGRVIpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE2Olx0cmVhZF9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnJlYWRfcHRyO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE3Olx0d3JpdGVfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5zYW1wbGVkX3dyaXRlX3B0cjtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxODpcdGZ1bGxfY291bnQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmJ1ZmZlcl9mdWxsX2NudDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmMtMTMxOS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmMtMTMyMC1cdC8qIEJvb2trZWVwaW5nIHN0dWZmICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jOjEzMjE6XHRndWMtXHUwMDNlbG9nLnN0YXRzW0dVQ19DQVBUVVJFX0xPR19CVUZGRVJdLmZsdXNoICYjNDM7PSBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsdXNoX3RvX2ZpbGU7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMjItXHRuZXdfb3ZlcmZsb3cgPSBpbnRlbF9ndWNfY2hlY2tfbG9nX2J1Zl9vdmVyZmxvdyhcdTAwMjZndWMtXHUwMDNlbG9nLCBHVUNfQ0FQVFVSRV9MT0dfQlVGRkVSLFxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYz0zNzU9c3RhdGljIHZvaWQgX2d1Y19sb2dfY29weV9kZWJ1Z2xvZ3NfZm9yX3JlbGF5KHN0cnVjdCBpbnRlbF9ndWNfbG9nICpsb2cpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTM3OS1cdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSAqbG9nX2J1Zl9zdGF0ZSwgKmxvZ19idWZfc25hcHNob3Rfc3RhdGU7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6MzgwOlx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlIGxvZ19idWZfc3RhdGVfbG9jYWw7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtMzgxLVx0ZW51bSBndWNfbG9nX2J1ZmZlcl90eXBlIHR5cGU7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQxOC1cdFx0ICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDE5Olx0XHRtZW1jcHkoXHUwMDI2bG9nX2J1Zl9zdGF0ZV9sb2NhbCwgbG9nX2J1Zl9zdGF0ZSxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjAtXHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDIxLVx0XHRidWZmZXJfc2l6ZSA9IGludGVsX2d1Y19nZXRfbG9nX2J1ZmZlcl9zaXplKGxvZywgdHlwZSk7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIyOlx0XHRyZWFkX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwucmVhZF9wdHI7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIzOlx0XHR3cml0ZV9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnNhbXBsZWRfd3JpdGVfcHRyO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyNDpcdFx0ZnVsbF9jbnQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmJ1ZmZlcl9mdWxsX2NudDtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjUtXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDI2LVx0XHQvKiBCb29ra2VlcGluZyBzdHVmZiAqL1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyNzpcdFx0bG9nLVx1MDAzZXN0YXRzW3R5cGVdLmZsdXNoICYjNDM7PSBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsdXNoX3RvX2ZpbGU7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDI4LVx0XHRuZXdfb3ZlcmZsb3cgPSBpbnRlbF9ndWNfY2hlY2tfbG9nX2J1Zl9vdmVyZmxvdyhsb2csIHR5cGUsIGZ1bGxfY250KTtcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDM1LVx0XHQvKiBGaXJzdCBjb3B5IHRoZSBzdGF0ZSBzdHJ1Y3R1cmUgaW4gc25hcHNob3QgYnVmZmVyICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDM2Olx0XHRtZW1jcHkobG9nX2J1Zl9zbmFwc2hvdF9zdGF0ZSwgXHUwMDI2bG9nX2J1Zl9zdGF0ZV9sb2NhbCxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MzctXHRcdCAgICAgICBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM9MTM4OD1zdGF0aWMgdm9pZCBfX2d1Y19jYXB0dXJlX3Byb2Nlc3Nfb3V0cHV0KHN0cnVjdCB4ZV9ndWMgKmd1Yylcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xMzkxLVx0c3RydWN0IHhlX3VjICp1YyA9IGNvbnRhaW5lcl9vZihndWMsIHR5cGVvZigqdWMpLCBndWMpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTM5MjpcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTM5My1cdHN0cnVjdCBfX2d1Y19jYXB0dXJlX2J1ZnN0YXRlIGJ1Zjtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDA2LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDA3Olx0eGVfbWFwX21lbWNweV9mcm9tKGd1Y190b194ZShndWMpLCBcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLCBcdTAwMjZndWMtXHUwMDNlbG9nLmJvLVx1MDAzZXZtYXAsXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDA4LVx0XHRcdCAgIGxvZ19idWZfc3RhdGVfb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQxMC1cdGJ1ZmZlcl9zaXplID0gWEVfR1VDX0xPR19TVEFURV9DQVBUVVJFX0JVRkZFUl9TSVpFO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQxMTpcdHJlYWRfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5yZWFkX3B0cjtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTI6XHR3cml0ZV9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnNhbXBsZWRfd3JpdGVfcHRyO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQxMzpcdGZ1bGxfY291bnQgPSBGSUVMRF9HRVQoR1VDX0xPR19CVUZGRVJfU1RBVEVfQlVGRkVSX0ZVTExfQ05ULCBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0MTQtXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE1LVx0LyogQm9va2tlZXBpbmcgc3R1ZmYgKi9cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTY6XHR0bXAgPSBGSUVMRF9HRVQoR1VDX0xPR19CVUZGRVJfU1RBVEVfRkxVU0hfVE9fRklMRSwgbG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE3LVx0Z3VjLVx1MDAzZWxvZy5zdGF0c1tHVUNfTE9HX1RZUEVfU1RBVEVfQ0FQVFVSRV0uZmx1c2ggJiM0Mzs9IHRtcDtcbi0tXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDU4LVx0ICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDU5Olx0bG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyBcdTAwMjY9IH5HVUNfTE9HX0JVRkZFUl9TVEFURV9GTFVTSF9UT19GSUxFO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQ2MC1cdHhlX21hcF93cihndWNfdG9feGUoZ3VjKSwgXHUwMDI2Z3VjLVx1MDAzZWxvZy5iby1cdTAwM2V2bWFwLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQ2MS1cdFx0ICBsb2dfYnVmX3N0YXRlX29mZnNldCAmIzQzOyBvZmZzZXRvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUsIGZsYWdzKSwgdTMyLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQ2MjpcdFx0ICBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjMtXHRfX2d1Y19jYXB0dXJlX2ZsdXNobG9nX2NvbXBsZXRlKGd1Yyk7XG4tLVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oPTE5PXN0cnVjdCByZG1hX2Nncm91cCB7XG4tLVxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oLTI5LVx0c3RydWN0IGNncm91cF9maWxlXHRcdGV2ZW50c19maWxlO1xuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oOjMwOlx0c3RydWN0IGNncm91cF9maWxlXHRcdGV2ZW50c19sb2NhbF9maWxlO1xuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oLTMxLX07XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oPTM1PXN0cnVjdCBodWdldGxiX2Nncm91cCB7XG4tLVxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTQ4LVx0YXRvbWljX2xvbmdfdCBldmVudHNbSFVHRV9NQVhfSFNUQVRFXVtIVUdFVExCX05SX01FTU9SWV9FVkVOVFNdO1xuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oOjQ5Olx0YXRvbWljX2xvbmdfdCBldmVudHNfbG9jYWxbSFVHRV9NQVhfSFNUQVRFXVtIVUdFVExCX05SX01FTU9SWV9FVkVOVFNdO1xuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTUwLVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC01NC1cdC8qIEhhbmRsZSBmb3IgXCYjMzQ7aHVnZXRsYi5ldmVudHMubG9jYWxcJiMzNDsgKi9cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo1NTpcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZVtIVUdFX01BWF9IU1RBVEVdO1xuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTU2LVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oPTE4OT1zdHJ1Y3QgbWVtX2Nncm91cCB7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjMxLVx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19maWxlO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MjMyOlx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19sb2NhbF9maWxlO1xuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjMzLVxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI0MS1cdGF0b21pY19sb25nX3RcdFx0bWVtb3J5X2V2ZW50c1tNRU1DR19OUl9NRU1PUllfRVZFTlRTXTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjI0MjpcdGF0b21pY19sb25nX3RcdFx0bWVtb3J5X2V2ZW50c19sb2NhbFtNRU1DR19OUl9NRU1PUllfRVZFTlRTXTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI0My1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD05NDY9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtOTQ3LVx0XHRcdFx0XHQgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjk0ODp1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk0OS1cdFx0XHRcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KTtcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDA1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTE0MTAtXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDExOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNDEyLVx0XHRcdFx0XHRcdCAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeClcbi0tXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9NDI9c3RydWN0IG1pc2NfcmVzIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtNDYtXHRhdG9taWM2NF90IGV2ZW50cztcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDo0NzpcdGF0b21pYzY0X3QgZXZlbnRzX2xvY2FsO1xuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTQ4LX07XG4tLVxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oPTU2PXN0cnVjdCBtaXNjX2NnIHtcbi0tXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtNjEtXHQvKiBtaXNjLmV2ZW50cy5sb2NhbCAqL1xuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oOjYyOlx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19sb2NhbF9maWxlO1xuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTYzLVxuLS1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTEyNT1zdGF0aWMgdm9pZCBtaXNjX2NnX2V2ZW50KGVudW0gbWlzY19yZXNfdHlwZSB0eXBlLCBzdHJ1Y3QgbWlzY19jZyAqY2cpXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0xMjYte1xua2VybmVsL2Nncm91cC9taXNjLmM6MTI3Olx0YXRvbWljNjRfaW5jKFx1MDAyNmNnLVx1MDAzZXJlc1t0eXBlXS5ldmVudHNfbG9jYWwpO1xua2VybmVsL2Nncm91cC9taXNjLmM6MTI4Olx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNmNnLVx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTEyOS1cbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0zNjc9c3RhdGljIGludCBfX21pc2NfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgYm9vbCBsb2NhbClcbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0zNzQtXHRcdGlmIChsb2NhbClcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjM3NTpcdFx0XHRldmVudHMgPSBhdG9taWM2NF9yZWFkKFx1MDAyNmNnLVx1MDAzZXJlc1tpXS5ldmVudHNfbG9jYWwpO1xua2VybmVsL2Nncm91cC9taXNjLmMtMzc2LVx0XHRlbHNlXG4tLVxua2VybmVsL2Nncm91cC9taXNjLmM9Mzg0PXN0YXRpYyBpbnQgbWlzY19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTM4OC1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjM4OTpzdGF0aWMgaW50IG1pc2NfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTM5MC17XG4tLVxua2VybmVsL2Nncm91cC9taXNjLmM9Mzk1PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1pc2NfY2dfZmlsZXNbXSA9IHtcbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYy00MjMtXHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNDpcdFx0LmZpbGVfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1pc2NfY2csIGV2ZW50c19sb2NhbF9maWxlKSxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNTpcdFx0LnNlcV9zaG93ID0gbWlzY19ldmVudHNfbG9jYWxfc2hvdyxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTQyNi1cdH0sXG4tLVxua2VybmVsL2Nncm91cC9waWRzLmM9NDk9c3RydWN0IHBpZHNfY2dyb3VwIHtcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy02MS1cdHN0cnVjdCBjZ3JvdXBfZmlsZVx0XHRldmVudHNfZmlsZTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjYyOlx0c3RydWN0IGNncm91cF9maWxlXHRcdGV2ZW50c19sb2NhbF9maWxlO1xua2VybmVsL2Nncm91cC9waWRzLmMtNjMtXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy02NC1cdGF0b21pYzY0X3RcdFx0XHRldmVudHNbTlJfUElEQ0dfRVZFTlRTXTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjY1Olx0YXRvbWljNjRfdFx0XHRcdGV2ZW50c19sb2NhbFtOUl9QSURDR19FVkVOVFNdO1xua2VybmVsL2Nncm91cC9waWRzLmMtNjYtfTtcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0yNDM9c3RhdGljIHZvaWQgcGlkc19ldmVudChzdHJ1Y3QgcGlkc19jZ3JvdXAgKnBpZHNfZm9ya2luZyxcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNDgtXHQvKiBPbmx5IGxvZyB0aGUgZmlyc3QgdGltZSBsaW1pdCBpcyBoaXQuICovXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNDk6XHRpZiAoYXRvbWljNjRfaW5jX3JldHVybihcdTAwMjZwLVx1MDAzZWV2ZW50c19sb2NhbFtQSURDR19GT1JLRkFJTF0pID09IDEpIHtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI1MC1cdFx0cHJfaW5mbyhcJiMzNDtjZ3JvdXA6IGZvcmsgcmVqZWN0ZWQgYnkgcGlkcyBjb250cm9sbGVyIGluIFwmIzM0Oyk7XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtMjU1LVx0ICAgIGNncnBfZGZsX3Jvb3QuZmxhZ3MgXHUwMDI2IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUykge1xua2VybmVsL2Nncm91cC9waWRzLmM6MjU2Olx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2cC1cdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTctXHRcdHJldHVybjtcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTktXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNjA6XHRhdG9taWM2NF9pbmMoXHUwMDI2cGlkc19vdmVyX2xpbWl0LVx1MDAzZWV2ZW50c19sb2NhbFtQSURDR19NQVhdKTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI2MTpcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZwaWRzX292ZXJfbGltaXQtXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xua2VybmVsL2Nncm91cC9waWRzLmMtMjYyLVxuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTM2MT1zdGF0aWMgaW50IF9fcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBib29sIGxvY2FsKVxuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTM3MS1cdH1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjM3MjpcdGV2ZW50cyA9IGxvY2FsID8gcGlkcy1cdTAwM2VldmVudHNfbG9jYWwgOiBwaWRzLVx1MDAzZWV2ZW50cztcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTM3My1cbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0zNzg9c3RhdGljIGludCBwaWRzX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtMzgzLVxua2VybmVsL2Nncm91cC9waWRzLmM6Mzg0OnN0YXRpYyBpbnQgcGlkc19ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxua2VybmVsL2Nncm91cC9waWRzLmMtMzg1LXtcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0zOTA9c3RhdGljIHN0cnVjdCBjZnR5cGUgcGlkc19maWxlc1tdID0ge1xuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTQxNC1cdFx0Lm5hbWUgPSBcJiMzNDtldmVudHMubG9jYWxcJiMzNDssXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo0MTU6XHRcdC5zZXFfc2hvdyA9IHBpZHNfZXZlbnRzX2xvY2FsX3Nob3csXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo0MTY6XHRcdC5maWxlX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBwaWRzX2Nncm91cCwgZXZlbnRzX2xvY2FsX2ZpbGUpLFxua2VybmVsL2Nncm91cC9waWRzLmMtNDE3LVx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmM9NzU9c3RydWN0IHJkbWFjZ19yZXNvdXJjZV9wb29sIHtcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy04OS1cdHU2NFx0XHRcdGV2ZW50c19hbGxvY19mYWlsW1JETUFDR19SRVNPVVJDRV9NQVhdO1xua2VybmVsL2Nncm91cC9yZG1hLmM6OTA6XHR1NjRcdFx0XHRldmVudHNfbG9jYWxfbWF4W1JETUFDR19SRVNPVVJDRV9NQVhdO1xua2VybmVsL2Nncm91cC9yZG1hLmM6OTE6XHR1NjRcdFx0XHRldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtSRE1BQ0dfUkVTT1VSQ0VfTUFYXTtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTkyLX07XG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmM9MTM5PXN0YXRpYyBib29sIHJwb29sX2hhc19wZXJzaXN0ZW50X3N0YXRlKHN0cnVjdCByZG1hY2dfcmVzb3VyY2VfcG9vbCAqcnBvb2wpXG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtMTUwLVx0XHQgICAgcnBvb2wtXHUwMDNlZXZlbnRzX21heFtpXSB8fFxua2VybmVsL2Nncm91cC9yZG1hLmM6MTUxOlx0XHQgICAgcnBvb2wtXHUwMDNlZXZlbnRzX2xvY2FsX21heFtpXSB8fFxua2VybmVsL2Nncm91cC9yZG1hLmMtMTUyLVx0XHQgICAgcnBvb2wtXHUwMDNlZXZlbnRzX2FsbG9jX2ZhaWxbaV0gfHxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MzpcdFx0ICAgIHJwb29sLVx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2ldKVxua2VybmVsL2Nncm91cC9yZG1hLmMtMTU0LVx0XHRcdHJldHVybiB0cnVlO1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTI1OT1zdGF0aWMgdm9pZCByZG1hY2dfZXZlbnRfbG9ja2VkKHN0cnVjdCByZG1hX2Nncm91cCAqY2csXG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtMjcxLVx0aWYgKHJwb29sKSB7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyNzI6XHRcdHJwb29sLVx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2luZGV4XSYjNDM7JiM0Mzs7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyNzM6XHRcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZjZy1cdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yNzQtXHR9XG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtMjc4LVx0aWYgKHJwb29sKSB7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyNzk6XHRcdHJwb29sLVx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaW5kZXhdJiM0MzsmIzQzOztcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjI4MDpcdFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNm92ZXJfY2ctXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xua2VybmVsL2Nncm91cC9yZG1hLmMtMjgxLVx0fVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTY4OD1zdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTcxNi1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjcxNzpzdGF0aWMgaW50IHJkbWFjZ19ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxua2VybmVsL2Nncm91cC9yZG1hLmMtNzE4LXtcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03MzItXHRcdFx0XHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo3MzM6XHRcdFx0XHQgICBycG9vbCA/IHJwb29sLVx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gOiAwVUxMLFxua2VybmVsL2Nncm91cC9yZG1hLmMtNzM0LVx0XHRcdFx0ICAgcmRtYWNnX3Jlc291cmNlX25hbWVzW2ldLFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzM1Olx0XHRcdFx0ICAgcnBvb2wgPyBycG9vbC1cdTAwM2VldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtpXSA6IDBVTEwpO1xua2VybmVsL2Nncm91cC9yZG1hLmMtNzM2LVx0XHRcdGlmIChpIFx1MDAzYyBSRE1BQ0dfUkVTT1VSQ0VfTUFYIC0gMSlcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz03NDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgcmRtYWNnX2ZpbGVzW10gPSB7XG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtNzczLVx0XHQubmFtZSA9IFwmIzM0O2V2ZW50cy5sb2NhbFwmIzM0Oyxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjc3NDpcdFx0LnNlcV9zaG93ID0gcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93LFxua2VybmVsL2Nncm91cC9yZG1hLmM6Nzc1Olx0XHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcmRtYV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTc3Ni1cdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmM9MjQzPXN0YXRpYyBpbmxpbmUgdm9pZCBodWdldGxiX2V2ZW50KHN0cnVjdCBodWdldGxiX2Nncm91cCAqaHVnZXRsYiwgaW50IGlkeCxcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jLTI0NS17XG5tbS9odWdldGxiX2Nncm91cC5jOjI0NjpcdGF0b21pY19sb25nX2luYyhcdTAwMjZodWdldGxiLVx1MDAzZWV2ZW50c19sb2NhbFtpZHhdW2V2ZW50XSk7XG5tbS9odWdldGxiX2Nncm91cC5jOjI0NzpcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZodWdldGxiLVx1MDAzZWV2ZW50c19sb2NhbF9maWxlW2lkeF0pO1xubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNDgtXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYz02Nzc9c3RhdGljIGludCBfX2h1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIGJvb2wgbG9jYWwpXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYy02ODYtXHRpZiAobG9jYWwpXG5tbS9odWdldGxiX2Nncm91cC5jOjY4NzpcdFx0bWF4ID0gYXRvbWljX2xvbmdfcmVhZChcdTAwMjZoX2NnLVx1MDAzZWV2ZW50c19sb2NhbFtpZHhdW0hVR0VUTEJfTUFYXSk7XG5tbS9odWdldGxiX2Nncm91cC5jLTY4OC1cdGVsc2Vcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jPTY5Nj1zdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYy03MDAtXG5tbS9odWdldGxiX2Nncm91cC5jOjcwMTpzdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG5tbS9odWdldGxiX2Nncm91cC5jLTcwMi17XG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYz03MDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgaHVnZXRsYl9kZmxfdG1wbFtdID0ge1xuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNzQwLVx0XHQubmFtZSA9IFwmIzM0O2V2ZW50cy5sb2NhbFwmIzM0Oyxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6NzQxOlx0XHQuc2VxX3Nob3cgPSBodWdldGxiX2V2ZW50c19sb2NhbF9zaG93LFxubW0vaHVnZXRsYl9jZ3JvdXAuYzo3NDI6XHRcdC5maWxlX29mZnNldCA9IE1FTUZJTEVfT0ZGU0VUKHN0cnVjdCBodWdldGxiX2Nncm91cCwgZXZlbnRzX2xvY2FsX2ZpbGVbMF0pLFxubW0vaHVnZXRsYl9jZ3JvdXAuYy03NDMtXHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTc0Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX25vZGVfbnJfbHJ1X3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTc1Ni1cdFx0ZWxzZVxubW0vbWVtY29udHJvbC12MS5jOjE3NTc6XHRcdFx0bnIgJiM0Mzs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywgTlJfTFJVX0JBU0UgJiM0MzsgbHJ1KTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzU4LVx0fVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xNzYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbnJfbHJ1X3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTc3NC1cdFx0ZWxzZVxubW0vbWVtY29udHJvbC12MS5jOjE3NzU6XHRcdFx0bnIgJiM0Mzs9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIE5SX0xSVV9CQVNFICYjNDM7IGxydSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTc3Ni1cdH1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTg2Mz1zdGF0aWMgY29uc3QgdW5zaWduZWQgaW50IG1lbWNnMV9ldmVudHNbXSA9IHtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg2OS1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODcwOnZvaWQgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wtdjEuYy0xODcxLXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3NC1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIEFSUkFZX1NJWkUobWVtY2cxX3N0YXRzKTsgaSYjNDM7JiM0MzspXG5tbS9tZW1jb250cm9sLXYxLmM6MTg3NTpcdFx0cmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCwgbWVtY2cxX3N0YXRzW2ldKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xODc2LX1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODc3LVxubW0vbWVtY29udHJvbC12MS5jOjE4Nzg6dm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wtdjEuYy0xODc5LXtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTg4Mi1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSYjNDM7JiM0MzspXG5tbS9tZW1jb250cm9sLXYxLmM6MTg4MzpcdFx0cmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIGkpO1xubW0vbWVtY29udHJvbC12MS5jLTE4ODQtfVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYz0xODg2PXZvaWQgbWVtY2cxX3N0YXRfZm9ybWF0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IHNlcV9idWYgKnMpXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4OTgtXG5tbS9tZW1jb250cm9sLXYxLmM6MTg5OTpcdFx0bnIgPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChtZW1jZywgbWVtY2cxX3N0YXRzW2ldKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xOTAwLVx0XHRzZXFfYnVmX3ByaW50ZihzLCBcJiMzNDslcyAlbHVcXG5cJiMzNDssIG1lbWNnMV9zdGF0X25hbWVzW2ldLCBucik7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE5MDQtXHRcdHNlcV9idWZfcHJpbnRmKHMsIFwmIzM0OyVzICVsdVxcblwmIzM0Oywgdm1fZXZlbnRfbmFtZShtZW1jZzFfZXZlbnRzW2ldKSxcbm1tL21lbWNvbnRyb2wtdjEuYzoxOTA1Olx0XHRcdCAgICAgICBtZW1jZ19ldmVudHNfbG9jYWwobWVtY2csIG1lbWNnMV9ldmVudHNbaV0pKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xOTA2LVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xOTA4LVx0XHRzZXFfYnVmX3ByaW50ZihzLCBcJiMzNDslcyAlbHVcXG5cJiMzNDssIGxydV9saXN0X25hbWUoaSksXG5tbS9tZW1jb250cm9sLXYxLmM6MTkwOTpcdFx0XHQgICAgICAgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgTlJfTFJVX0JBU0UgJiM0MzsgaSkgKlxubW0vbWVtY29udHJvbC12MS5jLTE5MTAtXHRcdFx0ICAgICAgIFBBR0VfU0laRSk7XG4tLVxubW0vbWVtY29udHJvbC12MS5oPTMyPXN0YXRpYyBpbmxpbmUgYm9vbCBkb19tZW1zd19hY2NvdW50KHZvaWQpXG4tLVxubW0vbWVtY29udHJvbC12MS5oLTM2LVxubW0vbWVtY29udHJvbC12MS5oOjM3OnVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcbm1tL21lbWNvbnRyb2wtdjEuaDozODp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcbm1tL21lbWNvbnRyb2wtdjEuaDozOTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xubW0vbWVtY29udHJvbC12MS5oLTQwLWJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD02ND12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKTtcbm1tL21lbWNvbnRyb2wtdjEuaDo2NTp2b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpO1xubW0vbWVtY29udHJvbC12MS5oOjY2OnZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpO1xubW0vbWVtY29udHJvbC12MS5oLTY3LVxubW0vbWVtY29udHJvbC12MS5oOjY4OnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC12MS5oLTY5LVx0XHRcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XG5tbS9tZW1jb250cm9sLXYxLmg6NzA6dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC12MS5oLTcxLVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz0yMzY9c3RhdGljIHZvaWQgX19tZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgYm9vbCBmb3JjZSk7XG5tbS9tZW1jb250cm9sLmMtMjM3LVxubW0vbWVtY29udHJvbC5jOjIzODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbWVtY29udHJvbC5jLTIzOS17XG4tLVxubW0vbWVtY29udHJvbC5jLTI1MS1cdC8qIFRoZSBmb2xsb3dpbmcgY291bnRzIGFyZSBhbGwgbm9uLWhpZXJhcmNoaWNhbCBhbmQgbmVlZCB0byBiZSByZXBhcmVudGVkLiAqL1xubW0vbWVtY29udHJvbC5jOjI1MjpcdHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYzoyNTM6XHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xubW0vbWVtY29udHJvbC5jLTI1NC1cbi0tXG5tbS9tZW1jb250cm9sLmMtMjU3LSNlbHNlXG5tbS9tZW1jb250cm9sLmM6MjU4OnN0YXRpYyBpbmxpbmUgdm9pZCByZXBhcmVudF9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLmMtMjU5LXtcbi0tXG5tbS9tZW1jb250cm9sLmM9Mjc3PXN0YXRpYyB2b2lkIG1lbWNnX3JlcGFyZW50X29iamNncyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4tLVxubW0vbWVtY29udHJvbC5jLTMwNy1cbm1tL21lbWNvbnRyb2wuYzozMDg6XHRyZXBhcmVudF9zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYy0zMDktfVxuLS1cbm1tL21lbWNvbnRyb2wuYz00ODE9c3RydWN0IGxydXZlY19zdGF0cyB7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ4NS1cdC8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBzdGF0ZSAqL1xubW0vbWVtY29udHJvbC5jOjQ4NjpcdGxvbmcgc3RhdGVfbG9jYWxbTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TXTtcbm1tL21lbWNvbnRyb2wuYy00ODctXG4tLVxubW0vbWVtY29udHJvbC5jPTUzMz11bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX21vbm90b25pYyhzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG4tLVxubW0vbWVtY29udHJvbC5jLTU0OS1cbm1tL21lbWNvbnRyb2wuYzo1NTA6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5tbS9tZW1jb250cm9sLmMtNTUxLVx0XHRcdFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTU2NC1cdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XG5tbS9tZW1jb250cm9sLmM6NTY1Olx0eCA9IFJFQURfT05DRShwbi1cdTAwM2VscnV2ZWNfc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jLTU2Ni0jaWZkZWYgQ09ORklHX1NNUFxuLS1cbm1tL21lbWNvbnRyb2wuYz01NzQ9c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbi0tXG5tbS9tZW1jb250cm9sLmMtNTc2LVxubW0vbWVtY29udHJvbC5jOjU3Nzp2b2lkIHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG5tbS9tZW1jb250cm9sLmMtNTc4LVx0XHRcdFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTU4NC1cdFx0c3RydWN0IGxydXZlYyAqcGFyZW50X2xydXZlYyA9IG1lbV9jZ3JvdXBfbHJ1dmVjKHBhcmVudCwgTk9ERV9EQVRBKG5pZCkpO1xubW0vbWVtY29udHJvbC5jOjU4NTpcdFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGNoaWxkX2xydXZlYywgaWR4KTtcbm1tL21lbWNvbnRyb2wuYy01ODYtXHRcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpjaGlsZF9wbiwgKnBhcmVudF9wbjtcbi0tXG5tbS9tZW1jb250cm9sLmM9NjczPXN0cnVjdCBtZW1jZ192bXN0YXRzIHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNjc5LVx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXHUwMDI2IGV2ZW50cyAqL1xubW0vbWVtY29udHJvbC5jOjY4MDpcdGxvbmdcdFx0XHRzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07XG5tbS9tZW1jb250cm9sLmM6NjgxOlx0dW5zaWduZWQgbG9uZ1x0XHRldmVudHNfbG9jYWxbTlJfTUVNQ0dfRVZFTlRTXTtcbm1tL21lbWNvbnRyb2wuYy02ODItI2VuZGlmXG4tLVxubW0vbWVtY29udHJvbC5jLTY5Ni0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmM6Njk3OnN0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNjk4LXtcbm1tL21lbWNvbnRyb2wuYzo2OTk6XHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbDtcbm1tL21lbWNvbnRyb2wuYy03MDAtfVxubW0vbWVtY29udHJvbC5jLTcwMS1cbm1tL21lbWNvbnRyb2wuYzo3MDI6c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNzAzLXtcbm1tL21lbWNvbnRyb2wuYzo3MDQ6XHRyZXR1cm4gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWw7XG5tbS9tZW1jb250cm9sLmMtNzA1LX1cbm1tL21lbWNvbnRyb2wuYy03MDYtI2Vsc2Vcbm1tL21lbWNvbnRyb2wuYzo3MDc6c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wuYy03MDgte1xuLS1cbm1tL21lbWNvbnRyb2wuYy03MTEtXG5tbS9tZW1jb250cm9sLmM6NzEyOnN0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTcxMy17XG4tLVxubW0vbWVtY29udHJvbC5jPTg2MD1zdGF0aWMgbG9uZyBtZW1jZ19zdGF0ZV92YWxfaW5fcGFnZXMoaW50IGlkeCwgbG9uZyB2YWwpXG4tLVxubW0vbWVtY29udHJvbC5jLTg3OC0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXG5tbS9tZW1jb250cm9sLmM6ODc5OiAqIHJlcGFyZW50aW5nIG9mIG5vbi1oaWVyYXJjaGljYWwgc3RhdGVfbG9jYWxzLlxubW0vbWVtY29udHJvbC5jLTg4MC0gKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9OTQ0PXZvaWQgbW9kX21lbWNnX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgZW51bSBtZW1jZ19zdGF0X2l0ZW0gaWR4LFxuLS1cbm1tL21lbWNvbnRyb2wuYy05NTgtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xubW0vbWVtY29udHJvbC5jOjk1OTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxubW0vbWVtY29udHJvbC5jLTk2MC17XG4tLVxubW0vbWVtY29udHJvbC5jLTk2Ni1cbm1tL21lbWNvbnRyb2wuYzo5Njc6XHR4ID0gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jLTk2OC0jaWZkZWYgQ09ORklHX1NNUFxuLS1cbm1tL21lbWNvbnRyb2wuYy05NzQtXG5tbS9tZW1jb250cm9sLmM6OTc1OnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTk3Ni1cdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG5tbS9tZW1jb250cm9sLmMtOTc3LXtcbm1tL21lbWNvbnRyb2wuYzo5Nzg6XHR1bnNpZ25lZCBsb25nIHZhbHVlID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaWR4KTtcbm1tL21lbWNvbnRyb2wuYy05NzktXG4tLVxubW0vbWVtY29udHJvbC5jPTExMzI9Ym9vbCBtZW1jZ192bV9ldmVudF9pdGVtX3ZhbGlkKGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTExNDAtI2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jOjExNDE6dW5zaWduZWQgbG9uZyBtZW1jZ19ldmVudHNfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgZXZlbnQpXG5tbS9tZW1jb250cm9sLmMtMTE0Mi17XG4tLVxubW0vbWVtY29udHJvbC5jLTExNDctXG5tbS9tZW1jb250cm9sLmM6MTE0ODpcdHJldHVybiBSRUFEX09OQ0UobWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfbG9jYWxbaV0pO1xubW0vbWVtY29udHJvbC5jLTExNDktfVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xNzI0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcbi0tXG5tbS9tZW1jb250cm9sLmMtMTczMC0jaWZkZWYgQ09ORklHX01FTUNHX1YxXG5tbS9tZW1jb250cm9sLmM6MTczMTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG5tbS9tZW1jb250cm9sLmMtMTczMi17XG5tbS9tZW1jb250cm9sLmM6MTczMzpcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpdGVtKSAqXG5tbS9tZW1jb250cm9sLmMtMTczNC1cdFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MTkxMT12b2lkIF9fbWVtY2dfbWVtb3J5X2V2ZW50KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtMTkxOS1cbm1tL21lbWNvbnRyb2wuYzoxOTIwOlx0YXRvbWljX2xvbmdfaW5jKFx1MDAyNm1lbWNnLVx1MDAzZW1lbW9yeV9ldmVudHNfbG9jYWxbZXZlbnRdKTtcbm1tL21lbWNvbnRyb2wuYy0xOTIxLVx0aWYgKCFzd2FwX2V2ZW50IFx1MDAyNlx1MDAyNiBhbGxvd19zcGlubmluZylcbm1tL21lbWNvbnRyb2wuYzoxOTIyOlx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2bWVtY2ctXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xubW0vbWVtY29udHJvbC5jLTE5MjMtXG4tLVxubW0vbWVtY29udHJvbC5jPTQ0OTY9c3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIHtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDUwMC1cdCAqIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBjb3VudGVycyBvciBOVUxMIHRvXG5tbS9tZW1jb250cm9sLmM6NDUwMTpcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXG5tbS9tZW1jb250cm9sLmMtNDUwMi1cdCAqL1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NTUzPXN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLmMtNDU1NC17XG5tbS9tZW1jb250cm9sLmM6NDU1NTpcdGxvbmcgKnN0YXRlX2xvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpO1xubW0vbWVtY29udHJvbC5jLTQ1NTYtXHRpbnQgbmlkO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00NTYyLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0ga21lbTtcbm1tL21lbWNvbnRyb2wuYzo0NTYzOlx0XHRpZiAoc3RhdGVfbG9jYWwpXG5tbS9tZW1jb250cm9sLmM6NDU2NDpcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IGttZW07XG5tbS9tZW1jb250cm9sLmMtNDU2NS1cdFx0aWYgKHBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU4MS1cdFx0XHRsc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jOjQ1ODI6XHRcdFx0bHN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NTgzLVx0XHRcdGlmIChwbHN0YXRzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTg1LVx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jOjQ1ODY6XHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxubW0vbWVtY29udHJvbC5jOjQ1ODc6XHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDU4OC1cdFx0XHRpZiAocGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTk1LVx0XHRcdGxzdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmM6NDU5NjpcdFx0XHRsc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jLTQ1OTctXHRcdFx0aWYgKHBsc3RhdHMpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ1OTktXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmM6NDYwMDpcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG5tbS9tZW1jb250cm9sLmM6NDYwMTpcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NjAyLVx0XHRcdGlmIChwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jPTQ2MTI9c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcbi0tXG5tbS9tZW1jb250cm9sLmMtNDYyNS1cdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGUsXG5tbS9tZW1jb250cm9sLmM6NDYyNjpcdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxubW0vbWVtY29udHJvbC5jLTQ2MjctXHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjM2LVx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHMsXG5tbS9tZW1jb250cm9sLmM6NDYzNzpcdFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcbm1tL21lbWNvbnRyb2wuYy00NjM4LVx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcsXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2NTgtXHRcdFx0LmFnZ3JlZ2F0ZSA9IGxzdGF0cy1cdTAwM2VzdGF0ZSxcbm1tL21lbWNvbnRyb2wuYzo0NjU5Olx0XHRcdC5sb2NhbCA9IGxzdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbCxcbm1tL21lbWNvbnRyb2wuYy00NjYwLVx0XHRcdC5wZW5kaW5nID0gbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmcsXG4tLVxubW0vbWVtY29udHJvbC5jPTUwMzQ9c3RhdGljIGludCBtZW1vcnlfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDQxLVxubW0vbWVtY29udHJvbC5jOjUwNDI6c3RhdGljIGludCBtZW1vcnlfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxubW0vbWVtY29udHJvbC5jLTUwNDMte1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MDQ1LVxubW0vbWVtY29udHJvbC5jOjUwNDY6XHRfX21lbW9yeV9ldmVudHNfc2hvdyhtLCBtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsKTtcbm1tL21lbWNvbnRyb2wuYy01MDQ3LVx0cmV0dXJuIDA7XG4tLVxubW0vbWVtY29udHJvbC5jPTUxNDc9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC5jLTUxOTMtXHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbm1tL21lbWNvbnRyb2wuYzo1MTk0Olx0XHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbWVtX2Nncm91cCwgZXZlbnRzX2xvY2FsX2ZpbGUpLFxubW0vbWVtY29udHJvbC5jOjUxOTU6XHRcdC5zZXFfc2hvdyA9IG1lbW9yeV9ldmVudHNfbG9jYWxfc2hvdyxcbm1tL21lbWNvbnRyb2wuYy01MTk2LVx0fSxcbi0tXG5tbS93b3JraW5nc2V0LmM9NjUxPXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3NoYWRvd19ub2RlcyhzdHJ1Y3Qgc2hyaW5rZXIgKnNocmlua2VyLFxuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6MzQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU4NzkKCQkJCQkJCW91dHB1dDogMzQKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkRpdmluZyBpbnRvIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgbWVtb3J5IGNvbnRyb2wgY29kZSBhZ2Fpbi4gSSBuZWVkIHRvIHJlZnJlc2ggbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgbWVtb3J5IGFjY291bnRpbmcgd29ya3Mgd2l0aGluIGEgY2dyb3VwLiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gZm9jdXMgb24gYG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxgIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIExldCYjMzk7cyBzdGFydCBieSB6ZXJvaW5nIGluIG9uIGxpbmUgOTU5IGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGF0IGZ1bmN0aW9uIGNhbGwgaXMgYSBrZXkgcGllY2Ugb2YgdGhlIHB1enpsZSwgYW5kIEkgd2FudCB0byByZS1mYW1pbGlhcml6ZSBteXNlbGYgd2l0aCBpdHMgcm9sZSBpbiB0aGUgbGFyZ2VyIGZyYW1ld29yay4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyB0byBiZSB3aGVyZSB0aGUgbG9jYWwgcGVyLUNQVSBwYWdlIHN0YXRlIGlzIHVwZGF0ZWQsIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGUgaW50ZXJhY3Rpb25zIHdpdGggb3RoZXIgZGF0YSBzdHJ1Y3R1cmVzIGFuZCBjb25jdXJyZW5jeSBtZWNoYW5pc21zLiBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIHBlci1ub2RlIGluZm9ybWF0aW9uLiBJIHRoaW5rIGJ5IHRyYWNpbmcgaG93IHRoaXMgaXMgdXNlZCwgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBnbG9iYWwgY291bnRlcnMgd2lsbCBiZWNvbWUgY2xlYXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogOTUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA5NTA6XHRcdFx0cmV0dXJuO1xuIDk1MTpcdFxuIDk1MjpcdFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcdTAwMjZyY3VfbG9ja2VkKTtcbiA5NTM6XHRcdF9fbW9kX21lbWNnX3N0YXRlKG1lbWNnLCBpZHgsIHZhbCk7XG4gOTU0Olx0XHRnZXRfbm9uX2R5aW5nX21lbWNnX2VuZChyY3VfbG9ja2VkKTtcbiA5NTU6XHR9XG4gOTU2Olx0XG4gOTU3Olx0I2lmZGVmIENPTkZJR19NRU1DR19WMVxuIDk1ODpcdC8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbiA5NTk6XHR1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KVxuIDk2MDpcdHtcbiA5NjE6XHRcdGxvbmcgeDtcbiA5NjI6XHRcdGludCBpID0gbWVtY2dfc3RhdHNfaW5kZXgoaWR4KTtcbiA5NjM6XHRcbiA5NjQ6XHRcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcJiMzNDslczogbWlzc2luZyBzdGF0IGl0ZW0gJWRcXG5cJiMzNDssIF9fZnVuY19fLCBpZHgpKVxuIDk2NTpcdFx0XHRyZXR1cm4gMDtcbiA5NjY6XHRcbiA5Njc6XHRcdHggPSBSRUFEX09OQ0UobWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XG4gOTY4Olx0I2lmZGVmIENPTkZJR19TTVBcbiA5Njk6XHRcdGlmICh4IFx1MDAzYyAwKVxuIDk3MDpcdFx0XHR4ID0gMDtcbiA5NzE6XHQjZW5kaWZcbiA5NzI6XHRcdHJldHVybiB4O1xuIDk3MzpcdH1cbiA5NzQ6XHRcbiA5NzU6XHR2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiA5NzY6XHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXG4gOTc3Olx0e1xuIDk3ODpcdFx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGlkeCk7XG4gOTc5Olx0XG4gOTgwOlx0XHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCAtdmFsdWUpO1xuIDk4MTpcdFx0X19tb2RfbWVtY2dfc3RhdGUocGFyZW50LCBpZHgsIHZhbHVlKTtcbiA5ODI6XHR9XG4gOTgzOlx0I2VuZGlmXG4gOTg0Olx0XG4gOTg1Olx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcbiA5ODY6XHRcdFx0XHRcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxuIDk4NzpcdHtcbiA5ODg6XHRcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IHBuLVx1MDAzZW1lbWNnO1xuIDk4OTpcdFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjExLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNjc5NAoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDQ5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOgoKKipBbmFseXppbmcgTWVtb3J5IENvbnRyb2wgQ29kZSoqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgbWVtb3J5IGNncm91cCBjb2RlIGFnYWluLiBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGhvdyB0aGVzZSBzdGF0cyBhcmUgYmVpbmcgZmx1c2hlZCBhbmQgYWdncmVnYXRlZC4gTGV0JiMzOTtzIHplcm8gaW4gb24gYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYCBhbmQgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLiBJJiMzOTttIGdvaW5nIHRvIGp1bXAgdG8gdGhhdCBzZWN0aW9uIGFyb3VuZCBsaW5lcyA0NTAwIHRvIDQ2NTAgaW4gYG1tL21lbWNvbnRyb2wuY2AuIEhvcGVmdWxseSwgdGhlIHN0cnVjdHVyZSBhbmQgbG9naWMgYXJlIHN0aWxsIGZyZXNoIGluIG15IG1pbmQuIEkmIzM5O20gZXNwZWNpYWxseSBpbnRlcmVzdGVkIGluIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZXNlIHR3byBmdW5jdGlvbnMgYW5kIGhvdyB0aGV5IGNvbnRyaWJ1dGUgdG8gcHJvdmlkaW5nIGFjY3VyYXRlIG1lbW9yeSB1c2FnZSByZXBvcnRzLiBUaGlzIG1pZ2h0IGhhdmUgYSBzcGVjaWZpYyB1c2UgY2FzZSBJIGhhdmUgaW4gbWluZCB3aGVyZSB1bmRlcnN0YW5kaW5nIHRoZSB0aW1pbmcgYW5kIGltcGFjdCBvZiB0aGVzZSBmdW5jdGlvbnMgaXMga2V5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDQ1MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7NDUwMDpcdFx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbjQ1MDE6XHRcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXG40NTAyOlx0XHQgKi9cbjQ1MDM6XHRcdGxvbmcgKmxvY2FsO1xuNDUwNDpcdFx0LyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuNDUwNTpcdFx0bG9uZyAqcGVuZGluZztcbjQ1MDY6XHRcdC8qIHBvaW50ZXIgdG8gdGhlIHBhcmVudCYjMzk7cyBwZW5kaW5nIGNvdW50ZXJzLCBjb3VsZCBiZSBOVUxMICovXG40NTA3Olx0XHRsb25nICpwcGVuZGluZztcbjQ1MDg6XHRcdC8qIHBvaW50ZXIgdG8gdGhlIHBlcmNwdSBjb3VudGVycyB0byBiZSBhZ2dyZWdhdGVkICovXG40NTA5Olx0XHRsb25nICpjc3RhdDtcbjQ1MTA6XHRcdC8qIHBvaW50ZXIgdG8gdGhlIHBlcmNwdSBjb3VudGVycyBvZiB0aGUgbGFzdCBhZ2dyZWdhdGlvbiovXG40NTExOlx0XHRsb25nICpjc3RhdF9wcmV2O1xuNDUxMjpcdFx0Lyogc2l6ZSBvZiB0aGUgYWJvdmUgY291bnRlcnMgKi9cbjQ1MTM6XHRcdGludCBzaXplO1xuNDUxNDpcdH07XG40NTE1Olx0XG40NTE2Olx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKVxuNDUxNzpcdHtcbjQ1MTg6XHRcdGludCBpO1xuNDUxOTpcdFx0bG9uZyBkZWx0YSwgZGVsdGFfY3B1LCB2O1xuNDUyMDpcdFxuNDUyMTpcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2MgYWMtXHUwMDNlc2l6ZTsgaSYjNDM7JiM0MzspIHtcbjQ1MjI6XHRcdFx0LypcbjQ1MjM6XHRcdFx0ICogQ29sbGVjdCB0aGUgYWdncmVnYXRlZCBwcm9wYWdhdGlvbiBjb3VudHMgb2YgZ3JvdXBzXG40NTI0Olx0XHRcdCAqIGJlbG93IHVzLiBXZSYjMzk7cmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSBhbmQgdGhpcyBpc1xuNDUyNTpcdFx0XHQgKiBhIGdsb2JhbCBjb3VudGVyLCBzbyB0aGUgZmlyc3QgY3ljbGUgd2lsbCBnZXQgdGhlbS5cbjQ1MjY6XHRcdFx0ICovXG40NTI3Olx0XHRcdGRlbHRhID0gYWMtXHUwMDNlcGVuZGluZ1tpXTtcbjQ1Mjg6XHRcdFx0aWYgKGRlbHRhKVxuNDUyOTpcdFx0XHRcdGFjLVx1MDAzZXBlbmRpbmdbaV0gPSAwO1xuNDUzMDpcdFxuNDUzMTpcdFx0XHQvKiBBZGQgQ1BVIGNoYW5nZXMgb24gdGhpcyBsZXZlbCBzaW5jZSB0aGUgbGFzdCBmbHVzaCAqL1xuNDUzMjpcdFx0XHRkZWx0YV9jcHUgPSAwO1xuNDUzMzpcdFx0XHR2ID0gUkVBRF9PTkNFKGFjLVx1MDAzZWNzdGF0W2ldKTtcbjQ1MzQ6XHRcdFx0aWYgKHYgIT0gYWMtXHUwMDNlY3N0YXRfcHJldltpXSkge1xuNDUzNTpcdFx0XHRcdGRlbHRhX2NwdSA9IHYgLSBhYy1cdTAwM2Vjc3RhdF9wcmV2W2ldO1xuNDUzNjpcdFx0XHRcdGRlbHRhICYjNDM7PSBkZWx0YV9jcHU7XG40NTM3Olx0XHRcdFx0YWMtXHUwMDNlY3N0YXRfcHJldltpXSA9IHY7XG40NTM4Olx0XHRcdH1cbjQ1Mzk6XHRcbjQ1NDA6XHRcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuNDU0MTpcdFx0XHRpZiAoZGVsdGFfY3B1IFx1MDAyNlx1MDAyNiBhYy1cdTAwM2Vsb2NhbClcbjQ1NDI6XHRcdFx0XHRhYy1cdTAwM2Vsb2NhbFtpXSAmIzQzOz0gZGVsdGFfY3B1O1xuNDU0MzpcdFxuNDU0NDpcdFx0XHRpZiAoZGVsdGEpIHtcbjQ1NDU6XHRcdFx0XHRhYy1cdTAwM2VhZ2dyZWdhdGVbaV0gJiM0Mzs9IGRlbHRhO1xuNDU0NjpcdFx0XHRcdGlmIChhYy1cdTAwM2VwcGVuZGluZylcbjQ1NDc6XHRcdFx0XHRcdGFjLVx1MDAzZXBwZW5kaW5nW2ldICYjNDM7PSBkZWx0YTtcbjQ1NDg6XHRcdFx0fVxuNDU0OTpcdFx0fVxuNDU1MDpcdH1cbjQ1NTE6XHRcbjQ1NTI6XHQjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG40NTUzOlx0c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbjQ1NTQ6XHR7XG40NTU1Olx0XHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbjQ1NTY6XHRcdGludCBuaWQ7XG40NTU3Olx0XG40NTU4Olx0XHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNla21lbV9zdGF0KSkge1xuNDU1OTpcdFx0XHRpbnQga21lbSA9IGF0b21pY194Y2hnKFx1MDAyNm1lbWNnLVx1MDAzZWttZW1fc3RhdCwgMCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3OTU3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDYxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBhIE1lbWNnIE9wdGltaXphdGlvbiBDb21taXQqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvbW1pdCYjMzk7cyBhYm91dCBvcHRpbWl6aW5nIGBtZW1jZ192bXN0YXRzYCB3aGVuIHdlICpkb24mIzM5O3QqIGhhdmUgYENPTkZJR19NRU1DR19WMWAgZW5hYmxlZC4gU28sIHRoZSBrZXkgaXMgdGhlIHYxIGNncm91cCBsZWdhY3kgc3R1ZmYuIEl0IGxvb2tzIGxpa2UgaXQmIzM5O3MgdGFraW5nIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIG91dCBvZiB0aGUgYG1lbWNnX3Ztc3RhdHNgIHN0cnVjdCwgd2hpY2ggbWFrZXMgc2Vuc2UgYmVjYXVzZSB0aG9zZSBmaWVsZHMgYXJlIG9ubHkgdXNlZCBpbiB2MSBmb3IgYG1lbW9yeS5zdGF0YCBhbmQgd2hlbiByZXBhcmVudGluZyBvbiBvZmZsaW5lLiBUaGlzIGlzIGNvbmRpdGlvbmFsIHZpYSBgI2lmZGVmIENPTkZJR19NRU1DR19WMWAuIEluIGVzc2VuY2UsIGlmIGl0IGlzIHYyIG9ubHksIHdlIHNhdmUgc29tZSBtZW1vcnkuCgpFc3NlbnRpYWxseSwgd2hlbiB0aGUgbGVnYWN5IHN1cHBvcnQgaXNuJiMzOTt0IHByZXNlbnQsIHRoZSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIGFuZCBgZmx1c2hfbm1pX3N0YXRzYCBmdW5jdGlvbnMgd2lsbCBub3cgcmV0dXJuIGBOVUxMYCBmb3IgYG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5YCBhbmQgYG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheWAuIFRoYXQmIzM5O3MgY3JpdGljYWwgYmVjYXVzZSB0aGVzZSBhcnJheXMgYXJlIG5vIGxvbmdlciBwcmVzZW50LCBzbyB0aGlzIHByZXZlbnRzIGFueSBhY2Nlc3MgdG8gdGhlIG9sZCwgbm93IG5vbi1leGlzdGVudCwgbG9jYWwgYXJyYXlzLiBUaGlzIGF2b2lkcyBwb3RlbnRpYWwgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciBvdGhlciBtZW1vcnkgY29ycnVwdGlvbiBpc3N1ZXMuCgpOb3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZnV6emFibGU/IEl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbWNnIGxvZ2ljLiBJdCYjMzk7cyBub3QgKmp1c3QqIGEgY29zbWV0aWMgY2hhbmdlOyBpdCYjMzk7cyBjaGFuZ2luZyBjb25kaXRpb25hbCBsb2dpYy4gSWYgdjEgaXMgb24sIGBzdGF0ZV9sb2NhbGAgaXMgdXNlZC4gSWYgaXQmIzM5O3Mgb2ZmLCBpdCBpcyBza2lwcGVkLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSEgSXQmIzM5O3MgKmRlZmluaXRlbHkqIHJlYWNoYWJsZSBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMsIHNpbmNlIG1lbW9yeSBjZ3JvdXBzIGFyZSBmdW5kYW1lbnRhbCBhbmQgdXNlZCBldmVyeXdoZXJlIGFuZCBhcmUgZGVmaW5pdGVseSBmdXp6ZWQuCgpJIG5lZWQgdG8gcXVpY2tseSBjaGVjayB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBgQ09ORklHX01FTUNHYCBpcyB0aGUgYmFzZSwgb2YgY291cnNlLCBhbmQgYENPTkZJR19NRU1DR19WMWAgaXMgdGhlIHN3aXRjaC4gTGV0JiMzOTtzIG1ha2Ugc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBvdGhlciByZWxldmFudCBjb25maWcgb3B0aW9ucywgbGlrZSBgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDYC4gSSBzaG91bGQgcHJvYmFibHkgZG91YmxlLWNoZWNrIGBpbml0L0tjb25maWdgIGZvciB0aGF0IG9uZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7TUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0LyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA4Nz1jb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuLS1cbmluaXQvS2NvbmZpZy0xMDkzLVxuaW5pdC9LY29uZmlnOjEwOTQ6Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG5pbml0L0tjb25maWctMTA5NS1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTg5OTEKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKioKCk9rYXksIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgc29tZXRoaW5nIHJlbGF0ZWQgdG8ga2VybmVsIGNvbmZpZ3VyYXRpb24sIGFuZCBteSBndXQgdGVsbHMgbWUgdGhlIGBpbml0L0tjb25maWdgIGZpbGUgaXMgdGhlIHBsYWNlIHRvIHN0YXJ0LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gemVyb2luZyBpbiBvbiBsaW5lcyAxMDcwIHRocm91Z2ggMTExMC4gSSYjMzk7bSBhc3N1bWluZyB0aGF0IHRoaXMgc2VjdGlvbiBsaWtlbHkgaG91c2VzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgcmVsYXRlZCBkZXBlbmRlbmNpZXMgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBJJiMzOTtsbCBuZWVkIHRvIGNhcmVmdWxseSBwYXJzZSB0aG9zZSBsaW5lcyBmb3IgdGhlIHJlbGV2YW50IGNvbmZpZyBzeW1ib2xzIGFuZCB0aGVpciBwcm9wZXJ0aWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhpcyBhcmVhIGJlaGF2ZXMgdW5kZXIgZGlmZmVyZW50IGNvbXBpbGF0aW9uIHNjZW5hcmlvcy4gTGV0JiMzOTtzIHNlZSB3aGF0IGdlbXMgdGhpcyBzZWN0aW9uIGhvbGRzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEwNzUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTA3NTpcdFxuMTA3NjpcdFx0ICBTYXkgTiBpZiB1bnN1cmUuXG4xMDc3Olx0XG4xMDc4Olx0Y29uZmlnIE1FTUNHXG4xMDc5Olx0XHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4xMDgwOlx0XHRzZWxlY3QgUEFHRV9DT1VOVEVSXG4xMDgxOlx0XHRzZWxlY3QgRVZFTlRGRFxuMTA4MjpcdFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxuMTA4MzpcdFx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4xMDg0Olx0XHRoZWxwXG4xMDg1Olx0XHQgIFByb3ZpZGVzIGNvbnRyb2wgb3ZlciB0aGUgbWVtb3J5IGZvb3RwcmludCBvZiB0YXNrcyBpbiBhIGNncm91cC5cbjEwODY6XHRcbjEwODc6XHRjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuMTA4ODpcdFx0Ym9vbFxuMTA4OTpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5MDpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5MTpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiAhQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcbjEwOTI6XHRcdGRlZmF1bHQgeVxuMTA5MzpcdFxuMTA5NDpcdGNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xuMTA5NTpcdFx0Ym9vbFxuMTA5NjpcdFx0ZGVwZW5kcyBvbiBNRU1DR1xuMTA5NzpcdFx0ZGVwZW5kcyBvbiBIQVZFX05NSVxuMTA5ODpcdFx0ZGVwZW5kcyBvbiAhQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTIFx1MDAyNlx1MDAyNiBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR1xuMTA5OTpcdFx0ZGVmYXVsdCB5XG4xMTAwOlx0XG4xMTAxOlx0Y29uZmlnIE1FTUNHX1YxXG4xMTAyOlx0XHRib29sIFwmIzM0O0xlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcJiMzNDtcbjExMDM6XHRcdGRlcGVuZHMgb24gTUVNQ0dcbjExMDQ6XHRcdGRlZmF1bHQgblxuMTEwNTpcdFx0aGVscFxuMTEwNjpcdFx0ICBMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyIHdoaWNoIGhhcyBiZWVuIGRlcHJlY2F0ZWQgYnlcbjExMDc6XHRcdCAgY2dyb3VwIHYyIGltcGxlbWVudGF0aW9uLiBUaGUgdjEgaXMgdGhlcmUgZm9yIGxlZ2FjeSBhcHBsaWNhdGlvbnNcbjExMDg6XHRcdCAgd2hpY2ggaGF2ZW4mIzM5O3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XG4xMTA5Olx0XHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xuMTExMDpcdFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cbjExMTE6XHRcbjExMTI6XHRcdCAgUGxlYXNlIG5vdGUgdGhhdCBmZWF0dXJlIHNldCBvZiB0aGUgbGVnYWN5IG1lbW9yeSBjb250cm9sbGVyIGlzIGxpa2VseVxuMTExMzpcdFx0ICBnb2luZyB0byBzaHJpbmsgZHVlIHRvIGRlcHJlY2F0aW9uIHByb2Nlc3MuIE5ldyBkZXBsb3ltZW50cyB3aXRoIHYxXG4xMTE0Olx0XHQgIGNvbnRyb2xsZXIgYXJlIGhpZ2hseSBkaXNjb3VyYWdlZC5cbjExMTU6XHRcbjExMTY6XHRcdCAgU2F5IE4gaWYgdW5zdXJlLlxuMTExNzpcdFxuMTExODpcdGNvbmZpZyBCTEtfQ0dST1VQXG4xMTE5Olx0XHRib29sIFwmIzM0O0lPIGNvbnRyb2xsZXJcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MjgKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCBhbmQgRmx1c2hlcyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nLCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBtZW1vcnkgY2dyb3VwJiMzOTtzIGNvcmUgYWNjb3VudGluZywgc3BlY2lmaWNhbGx5IHRoZSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgIGZ1bmN0aW9uIGluIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHJvdXRpbmUgd29ya3MsIGFuZCB3aGF0IGl0JiMzOTtzIHJlc3BvbnNpYmxlIGZvci4gTXkgaW1tZWRpYXRlIGZvY3VzIGlzIGdvaW5nIHRvIGJlIG9uIHRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiB0aGUgcmVmYWN0b3Jpbmcgb2YgYWNjb3VudGluZyBjb2RlIGFuZCB0aGUgcGVyZm9ybWFuY2UgY2hhcmFjdGVyaXN0aWNzIG9mIHRoYXQgY29kZS4gSSBrbm93IHRoZXJlIGhhdmUgYmVlbiBjaGFuZ2VzIHRoZXJlLCBzbyBsZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBhdCB3aGVyZSB0aGlzIGZ1bmN0aW9uIGdldHMgKmNhbGxlZCogZnJvbS4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzIHRvIGdldCBhIGNsZWFyIHBpY3R1cmUgb2Ygd2hlbiB0aGUgZmx1c2ggb2NjdXJzLCB3aGF0IHRyaWdnZXJzIGl0LCBhbmQgd2hhdCBkYXRhIGl0JiMzOTtzIGFjdHVhbGx5IG1vdmluZy4gVGhhdCBzaG91bGQgZXhwb3NlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgZnVydGhlciBvcHRpbWl6YXRpb24gb3IgdW5kZXJzdGFuZGluZyBtaWdodCBiZSBuZWVkZWQuIEkgd2FudCB0byBidWlsZCBhIGJldHRlciBtb2RlbCBmb3IgdGhlIHRyYWRlIG9mZnMgaW52b2x2ZWQgaW4gdXBkYXRpbmcgdGhlIHN0YXRzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNvbnRleHQgd2lsbCByZWFsbHkgaGVscCBtZSBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYWNjb3VudGluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7bWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2gmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jPTQ2MDg9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDYxMS1cbm1tL21lbWNvbnRyb2wuYzo0NjEyOnN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG5tbS9tZW1jb250cm9sLmMtNDYxMy17XG4tLVxubW0vbWVtY29udHJvbC5jPTUyMjE9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MjI3LVx0LmNzc19yZXNldCA9IG1lbV9jZ3JvdXBfY3NzX3Jlc2V0LFxubW0vbWVtY29udHJvbC5jOjUyMjg6XHQuY3NzX3JzdGF0X2ZsdXNoID0gbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2gsXG5tbS9tZW1jb250cm9sLmMtNTIyOS1cdC5hdHRhY2ggPSBtZW1fY2dyb3VwX2F0dGFjaCxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAzNTMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqRGl2aW5nIGludG8gTWVtb3J5IENvbnRyb2wgKG1lbWNvbnRyb2wuYykqKgoKT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgYG1tL21lbWNvbnRyb2wuY2AgZmlsZSBhZ2Fpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgbWVtb3J5IGFjY291bnRpbmcgaXMgd29ya2luZywgYW5kIGEgZ29vZCBzdGFydGluZyBwb2ludCBpcyBhbHdheXMgdG8gZXhhbWluZSBzcGVjaWZpYyBmdW5jdGlvbnMgSSYjMzk7dmUgZ290IHF1ZXN0aW9ucyBhYm91dC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnksIG9yIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZywgb2YgdGhlIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgZnVuY3Rpb24uIEl0JiMzOTtzIGEga2V5IHBpZWNlIGluIGhvdyBtZW1vcnkgc3RhdGlzdGljcyBhcmUgYWdncmVnYXRlZCBhbmQgd3JpdHRlbiB0byB0aGUgY2dyb3VwIGhpZXJhcmNoeS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBhcmVhIG9mIHRoZSBjb2RlLi4uIEkmIzM5O2xsIGxvb2sgYXQgaXRzIHJvbGUgaW4gY29sbGVjdGluZyBhbmQgdXBkYXRpbmcgbWVtb3J5IHVzYWdlIHN0YXRzLCBhcyB3ZWxsIGFzIHdoZW4gaXQgaXMgY2FsbGVkIGFuZCB3aHkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYxMiwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA2MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs0NjEyOlx0c3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcbjQ2MTM6XHR7XG40NjE0Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XG40NjE1Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xuNDYxNjpcdFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0YztcbjQ2MTc6XHRcdHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCBhYztcbjQ2MTg6XHRcdGludCBuaWQ7XG40NjE5Olx0XG40NjIwOlx0XHRmbHVzaF9ubWlfc3RhdHMobWVtY2csIHBhcmVudCk7XG40NjIxOlx0XG40NjIyOlx0XHRzdGF0YyA9IHBlcl9jcHVfcHRyKG1lbWNnLVx1MDAzZXZtc3RhdHNfcGVyY3B1LCBjcHUpO1xuNDYyMzpcdFxuNDYyNDpcdFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XG40NjI1Olx0XHRcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlLFxuNDYyNjpcdFx0XHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXG40NjI3Olx0XHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxuNDYyODpcdFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcbjQ2Mjk6XHRcdFx0LmNzdGF0ID0gc3RhdGMtXHUwMDNlc3RhdGUsXG40NjMwOlx0XHRcdC5jc3RhdF9wcmV2ID0gc3RhdGMtXHUwMDNlc3RhdGVfcHJldixcbjQ2MzE6XHRcdFx0LnNpemUgPSBNRU1DR19WTVNUQVRfU0laRSxcbjQ2MzI6XHRcdH07XG40NjMzOlx0XHRtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKFx1MDAyNmFjKTtcbjQ2MzQ6XHRcbjQ2MzU6XHRcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuNDYzNjpcdFx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHMsXG40NjM3Olx0XHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG40NjM4Olx0XHRcdC5wZW5kaW5nID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyxcbjQ2Mzk6XHRcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxuNDY0MDpcdFx0XHQuY3N0YXQgPSBzdGF0Yy1cdTAwM2VldmVudHMsXG40NjQxOlx0XHRcdC5jc3RhdF9wcmV2ID0gc3RhdGMtXHUwMDNlZXZlbnRzX3ByZXYsXG40NjQyOlx0XHRcdC5zaXplID0gTlJfTUVNQ0dfRVZFTlRTLFxuNDY0MzpcdFx0fTtcbjQ2NDQ6XHRcdG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoXHUwMDI2YWMpO1xuNDY0NTpcdFxuNDY0NjpcdFx0Zm9yX2VhY2hfbm9kZV9zdGF0ZShuaWQsIE5fTUVNT1JZKSB7XG40NjQ3Olx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbiA9IG1lbWNnLVx1MDAzZW5vZGVpbmZvW25pZF07XG40NjQ4Olx0XHRcdHN0cnVjdCBscnV2ZWNfc3RhdHMgKmxzdGF0cyA9IHBuLVx1MDAzZWxydXZlY19zdGF0cztcbjQ2NDk6XHRcdFx0c3RydWN0IGxydXZlY19zdGF0cyAqcGxzdGF0cyA9IE5VTEw7XG40NjUwOlx0XHRcdHN0cnVjdCBscnV2ZWNfc3RhdHNfcGVyY3B1ICpsc3RhdGM7XG40NjUxOlx0XG40NjUyOlx0XHRcdGlmIChwYXJlbnQpXG40NjUzOlx0XHRcdFx0cGxzdGF0cyA9IHBhcmVudC1cdTAwM2Vub2RlaW5mb1tuaWRdLVx1MDAzZWxydXZlY19zdGF0cztcbjQ2NTQ6XHRcbjQ2NTU6XHRcdFx0bHN0YXRjID0gcGVyX2NwdV9wdHIocG4tXHUwMDNlbHJ1dmVjX3N0YXRzX3BlcmNwdSwgY3B1KTtcbjQ2NTY6XHRcbjQ2NTc6XHRcdFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XG40NjU4Olx0XHRcdFx0LmFnZ3JlZ2F0ZSA9IGxzdGF0cy1cdTAwM2VzdGF0ZSxcbjQ2NTk6XHRcdFx0XHQubG9jYWwgPSBsc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWwsXG40NjYwOlx0XHRcdFx0LnBlbmRpbmcgPSBsc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbjQ2NjE6XHRcdFx0XHQucHBlbmRpbmcgPSBwbHN0YXRzID8gcGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcbjQ2NjI6XHRcdFx0XHQuY3N0YXQgPSBsc3RhdGMtXHUwMDNlc3RhdGUsXG40NjYzOlx0XHRcdFx0LmNzdGF0X3ByZXYgPSBsc3RhdGMtXHUwMDNlc3RhdGVfcHJldixcbjQ2NjQ6XHRcdFx0XHQuc2l6ZSA9IE5SX01FTUNHX05PREVfU1RBVF9JVEVNUyxcbjQ2NjU6XHRcdFx0fTtcbjQ2NjY6XHRcdFx0bWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShcdTAwMjZhYyk7XG40NjY3Olx0XG40NjY4Olx0XHR9XG40NjY5Olx0XHRXUklURV9PTkNFKHN0YXRjLVx1MDAzZXN0YXRzX3VwZGF0ZXMsIDApO1xuNDY3MDpcdFx0LyogV2UgYXJlIGluIGEgcGVyLWNwdSBsb29wIGhlcmUsIG9ubHkgZG8gdGhlIGF0b21pYyB3cml0ZSBvbmNlICovXG40NjcxOlx0XHRpZiAoYXRvbWljX2xvbmdfcmVhZChcdTAwMjZtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRzX3VwZGF0ZXMpKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTYzNgoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDE3NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipEaXZpbmcgaW50byB0aGUgTWVtY2cgdjEgQ29kZSoqCgpPa2F5LCBzbyBJJiMzOTttIHRyeWluZyB0byBnZXQgYSBoYW5kbGUgb24gdGhpcyBtZW1vcnkgY29udHJvbCBzdHVmZiwgc3BlY2lmaWNhbGx5IHRoZSB2MSBpbXBsZW1lbnRhdGlvbi4gRmlyc3QsIEkgbmVlZCB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIGhvdyB0aGVzZSBzdGF0cyBhcmUgYWdncmVnYXRlZCBhbmQgbWFuYWdlZCwgc28gSSYjMzk7bSBnb2luZyB0byBsb29rIGF0IGBtZW1jZ19zdGF0X2FnZ3JlZ2F0ZWAsIGBtZW1jZ19ldmVudHNfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBhbmQgYHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbGAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZpdCB0b2dldGhlci4KClRoZW4sIHNpbmNlIEkmIzM5O20gYWxyZWFkeSBsb29raW5nIGF0IHRoYXQgYXJlYSBvZiBjb2RlLCBJJiMzOTtsbCBnbyBkZWVwZXIgYW5kIHNjcnV0aW5pemUgdGhlIGxvY2FsIGFzcGVjdHMsIHNwZWNpZmljYWxseSBgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbGAsIGBtZW1jZ19ldmVudHNfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBhbmQgYHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbGAuIFRoZXNlIGFyZSBmb3VuZCBpbiBib3RoIGBtbS9tZW1jb250cm9sLXYxLmNgIGFuZCBgbW0vbWVtY29udHJvbC5jYCwgc28gSSYjMzk7bGwgYmUgc3VyZSB0byBjaGVjayBib3RoLgoKTm93LCBhIGNydWNpYWwgYXNwZWN0IG9mIHVuZGVyc3RhbmRpbmcgdGhpcyBzeXN0ZW0gaXMgaWRlbnRpZnlpbmcgdGhlIHB1YmxpYyBpbnRlcmZhY2VzLCBzbyBsZXQmIzM5O3Mgem9vbSBvdXQgYSBiaXQuIEl0IGlzIHZpdGFsIHRvIHNlcGFyYXRlIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBmcm9tIGV4dGVybmFsIEFQSXMsIHNvIGxldCYjMzk7cyBzZWUgd2hpY2ggZnVuY3Rpb25zIGFyZSBub24tc3RhdGljIGFuZCBub24taW5saW5lZCBlbnRyeXBvaW50cyBvciBBUEkgZnVuY3Rpb25zLgoKVG8gZW5zdXJlIEkmIzM5O20gbm90IG1pc3NpbmcgYW55dGhpbmcsIEkmIzM5O2xsIHJldmlzaXQgYG1tL21lbWNvbnRyb2wtdjEuY2AgYW5kIGBtbS9tZW1jb250cm9sLmNgLgoKRmluYWxseSwgZm9yIGdvb2QgbWVhc3VyZSwgSSYjMzk7bGwgY2hlY2sgYG1tL21lbWNvbnRyb2wtdjEuaGAgdG8gc2VlIHdoYXQgSSBjYW4gZmluZCBhYm91dCB0aGUgZnVuY3Rpb24gaGVhZGVycywgc2luY2UgaGVhZGVyIGZpbGVzIGRlZmluZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBhcmUgdXNlZnVsIHRvIHF1aWNrbHkgZ3Jhc3Agd2hpY2ggZnVuY3Rpb25zIG1heSBiZSBpbnZvbHZlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLXYxLmgmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQvKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMC1vci1sYXRlciAqL1xuICAgMjpcdFxuICAgMzpcdCNpZm5kZWYgX19NTV9NRU1DT05UUk9MX1YxX0hcbiAgIDQ6XHQjZGVmaW5lIF9fTU1fTUVNQ09OVFJPTF9WMV9IXG4gICA1Olx0XG4gICA2Olx0I2luY2x1ZGUgXHUwMDNjbGludXgvY2dyb3VwLWRlZnMuaFx1MDAzZVxuICAgNzpcdCNpbmNsdWRlIFx1MDAzY2xpbnV4L21lbWNvbnRyb2wuaFx1MDAzZVxuICAgODpcdFxuICAgOTpcdC8qIENncm91cCB2MSBhbmQgdjIgY29tbW9uIGRlY2xhcmF0aW9ucyAqL1xuICAxMDpcdFxuICAxMTpcdC8qXG4gIDEyOlx0ICogSXRlcmF0aW9uIGNvbnN0cnVjdHMgZm9yIHZpc2l0aW5nIGFsbCBjZ3JvdXBzICh1bmRlciBhIHRyZWUpLiAgSWZcbiAgMTM6XHQgKiBsb29wcyBhcmUgZXhpdGVkIHByZW1hdHVyZWx5IChicmVhayksIG1lbV9jZ3JvdXBfaXRlcl9icmVhaygpIG11c3RcbiAgMTQ6XHQgKiBiZSB1c2VkIGZvciByZWZlcmVuY2UgY291bnRpbmcuXG4gIDE1Olx0ICovXG4gIDE2Olx0I2RlZmluZSBmb3JfZWFjaF9tZW1fY2dyb3VwX3RyZWUoaXRlciwgcm9vdClcdFx0XFxcbiAgMTc6XHRcdGZvciAoaXRlciA9IG1lbV9jZ3JvdXBfaXRlcihyb290LCBOVUxMLCBOVUxMKTtcdFxcXG4gIDE4Olx0XHQgICAgIGl0ZXIgIT0gTlVMTDtcdFx0XHRcdFxcXG4gIDE5Olx0XHQgICAgIGl0ZXIgPSBtZW1fY2dyb3VwX2l0ZXIocm9vdCwgaXRlciwgTlVMTCkpXG4gIDIwOlx0XG4gIDIxOlx0dm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpO1xuICAyMjpcdFxuICAyMzpcdGludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7XG4gIDI0Olx0XG4gIDI1Olx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiAgMjY6XHRcdFx0XHRcdFx0XHQgICAgdW5zaWduZWQgaW50IG4pO1xuICAyNzpcdFxuICAyODpcdC8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cbiAgMjk6XHQjaWZkZWYgQ09ORklHX01FTUNHX1YxXG4gIDMwOlx0XG4gIDMxOlx0LyogV2hldGhlciBsZWdhY3kgbWVtb3J5JiM0Mztzd2FwIGFjY291bnRpbmcgaXMgYWN0aXZlICovXG4gIDMyOlx0c3RhdGljIGlubGluZSBib29sIGRvX21lbXN3X2FjY291bnQodm9pZClcbiAgMzM6XHR7XG4gIDM0Olx0XHRyZXR1cm4gIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XG4gIDM1Olx0fVxuICAzNjpcdFxuICAzNzpcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcbiAgMzg6XHR1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaWR4KTtcbiAgMzk6XHR1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xuICA0MDpcdGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuICA0MTpcdHZvaWQgbWVtY2cxX2ZyZWVfZXZlbnRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XG4gIDQyOlx0XG4gIDQzOlx0dm9pZCBtZW1jZzFfbWVtY2dfaW5pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuICA0NDpcdFxuICA0NTpcdHN0cnVjdCBjZ3JvdXBfdGFza3NldDtcbiAgNDY6XHR2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuICA0NzpcdFxuICA0ODpcdC8qIGZvciBlbmNvZGluZyBjZnQtXHUwMDNlcHJpdmF0ZSB2YWx1ZSBvbiBmaWxlICovXG4gIDQ5Olx0ZW51bSByZXNfdHlwZSB7XG4gIDUwOlx0XHRfTUVNLFxuICA1MTpcdFx0X01FTVNXQVAsXG4gIDUyOlx0XHRfS01FTSxcbiAgNTM6XHRcdF9UQ1AsXG4gIDU0Olx0fTtcbiAgNTU6XHRcbiAgNTY6XHRib29sIG1lbWNnMV9vb21fcHJlcGFyZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgKmxvY2tlZCk7XG4gIDU3Olx0dm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcbiAgNTg6XHR2b2lkIG1lbWNnMV9vb21fcmVjb3ZlcihzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xuICA1OTpcdFxuICA2MDpcdHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbiAgNjE6XHR2b2lkIG1lbWNnMV91bmNoYXJnZV9iYXRjaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGxvbmcgcGdwZ291dCxcbiAgNjI6XHRcdFx0XHQgICB1bnNpZ25lZCBsb25nIG5yX21lbW9yeSk7XG4gIDYzOlx0XG4gIDY0Olx0dm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcyk7XG4gIDY1Olx0dm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbiAgNjY6XHR2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbiAgNjc6XHRcbiAgNjg6XHR2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiAgNjk6XHRcdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xuICA3MDpcdHZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbiAgNzE6XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcbiAgNzI6XHRcbiAgNzM6XHR2b2lkIG1lbWNnMV9hY2NvdW50X2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgbnJfcGFnZXMpO1xuICA3NDpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfdGNwbWVtX2FjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4gIDc1Olx0e1xuICA3NjpcdFx0cmV0dXJuIG1lbWNnLVx1MDAzZXRjcG1lbV9hY3RpdmU7XG4gIDc3Olx0fVxuICA3ODpcdGJvb2wgbWVtY2cxX2NoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcyxcbiAgNzk6XHRcdFx0XHQgZ2ZwX3QgZ2ZwX21hc2spO1xuICA4MDpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtZW1jZzFfdW5jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzNTcxCgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogNDAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBjZ3JvdXAgdjEgTWVtb3J5IFN0YXRpc3RpY3MqKgoKT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgbWVtb3J5LnN0YXRgIHdvcmtzIHdpdGhpbiBjZ3JvdXAgdjEgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgbG9jYWwgdmFsdWVzIGFyZSBhY3R1YWxseSBiZWluZyByZWFkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O2xsIHN0YXJ0IGJ5IHNlYXJjaGluZyBmb3IgdGhlIGZ1bmN0aW9uIHJlc3BvbnNpYmxlIGZvciBkaXNwbGF5aW5nIHRoZSBtZW1vcnkgc3RhdGlzdGljcyDigJMgdGhhdCBzaG91bGQgYmUgYG1lbW9yeV9zdGF0X3Nob3dgIOKAkyBvciBwZXJoYXBzIGEgZnVuY3Rpb24gbmFtZWQgc29tZXRoaW5nIGFsb25nIHRoZSBsaW5lcyBvZiBgbWVtY2cxX3N0YXRfZm9ybWF0YCwgaWYgdGhlcmUmIzM5O3MgYSBjZ3JvdXAgdjEgc3BlY2lmaWMgZm9ybWF0dGluZyBmdW5jdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIGF0IHRoZSBzb3VyY2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lbW9yeV9zdGF0X3Nob3cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWVtY29udHJvbC12MS5jPTIwMjg9c3RydWN0IGNmdHlwZSBtZW1fY2dyb3VwX2xlZ2FjeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0yMDU4LVx0XHQubmFtZSA9IFwmIzM0O3N0YXRcJiMzNDssXG5tbS9tZW1jb250cm9sLXYxLmM6MjA1OTpcdFx0LnNlcV9zaG93ID0gbWVtb3J5X3N0YXRfc2hvdyxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDYwLVx0fSxcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9MjE9dm9pZCBkcmFpbl9hbGxfc3RvY2soc3RydWN0IG1lbV9jZ3JvdXAgKnJvb3RfbWVtY2cpO1xubW0vbWVtY29udHJvbC12MS5oLTIyLVxubW0vbWVtY29udHJvbC12MS5oOjIzOmludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdik7XG5tbS9tZW1jb250cm9sLXYxLmgtMjQtXG4tLVxubW0vbWVtY29udHJvbC5jPTUwNDI9c3RhdGljIGludCBtZW1vcnlfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01MDQ5LVxubW0vbWVtY29udHJvbC5jOjUwNTA6aW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxubW0vbWVtY29udHJvbC5jLTUwNTEte1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTQ3PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTk4LVx0XHQubmFtZSA9IFwmIzM0O3N0YXRcJiMzNDssXG5tbS9tZW1jb250cm9sLmM6NTE5OTpcdFx0LnNlcV9zaG93ID0gbWVtb3J5X3N0YXRfc2hvdyxcbm1tL21lbWNvbnRyb2wuYy01MjAwLVx0fSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjQxNjYKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyMQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgbXlzZWxmOgoKKipEZWx2aW5nIGludG8gTWVtb3J5IFN0YXRpc3RpY3MgaW4gbW0vbWVtY29udHJvbC5jKioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGtlcm5lbCBjb2RlLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgb24gdGhlIGBtZW1vcnlfc3RhdF9zaG93YCBmdW5jdGlvbiwgd2hpY2ggaXMsIGFzIHRoZSBuYW1lIGltcGxpZXMsIHNpdHVhdGVkIGluIGBtbS9tZW1jb250cm9sLmNgLiBUaGlzIGlzIHdoZXJlIEkmIzM5O2QgZXhwZWN0IHRvIGZpbmQgdGhlIG1lYXQgb2YgaG93IHRoZSBtZW1vcnkgY29udHJvbCBzdWJzeXN0ZW0gZXhwb3NlcyBpdHMgc3RhdGlzdGljcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1lbW9yeSB1c2FnZSBmaWd1cmVzIGFyZSBjYWxjdWxhdGVkIGFuZCBwcmVzZW50ZWQsIHBhcnRpY3VsYXJseSByZWdhcmRpbmcgY2dyb3Vwcy4gTXkgZ29hbCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgZGF0YSBpcyBwcmVzZW50ZWQgdG8gdGhlIHVzZXIsIHdoZXJlIGluIG1lbW9yeSBpdCBpcyBjYWxjdWxhdGVkIGFuZCBzdG9yZWQsIGFuZCBhbnkgaW1wbGljYXRpb25zIHRoaXMgaGFzIGZvciBwZXJmb3JtYW5jZSBvciBhY2N1cmFjeS4gSSBuZWVkIHRvIGNoZWNrIHRoZSBpbnRlcm5hbHMgYW5kIHNlZSB3aGF0JiMzOTtzIGhhcHBlbmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tZW1jb250cm9sLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA1MDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzUwNTA6XHRpbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG41MDUxOlx0e1xuNTA1MjpcdFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gbWVtX2Nncm91cF9mcm9tX3NlcShtKTtcbjUwNTM6XHRcdGNoYXIgKmJ1ZiA9IGttYWxsb2MoU0VRX0JVRl9TSVpFLCBHRlBfS0VSTkVMKTtcbjUwNTQ6XHRcdHN0cnVjdCBzZXFfYnVmIHM7XG41MDU1Olx0XG41MDU2Olx0XHRpZiAoIWJ1ZilcbjUwNTc6XHRcdFx0cmV0dXJuIC1FTk9NRU07XG41MDU4Olx0XHRzZXFfYnVmX2luaXQoXHUwMDI2cywgYnVmLCBTRVFfQlVGX1NJWkUpO1xuNTA1OTpcdFx0bWVtb3J5X3N0YXRfZm9ybWF0KG1lbWNnLCBcdTAwMjZzKTtcbjUwNjA6XHRcdHNlcV9wdXRzKG0sIGJ1Zik7XG41MDYxOlx0XHRrZnJlZShidWYpO1xuNTA2MjpcdFx0cmV0dXJuIDA7XG41MDYzOlx0fVxuNTA2NDpcdFxuNTA2NTpcdCNpZmRlZiBDT05GSUdfTlVNQVxuNTA2NjpcdHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuNTA2NzpcdFx0XHRcdFx0XHRcdCAgICAgaW50IGl0ZW0pXG41MDY4Olx0e1xuNTA2OTpcdFx0cmV0dXJuIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgaXRlbSkgKlxuNTA3MDpcdFx0XHRtZW1jZ19wYWdlX3N0YXRlX291dHB1dF91bml0KGl0ZW0pO1xuNTA3MTpcdH1cbjUwNzI6XHRcbjUwNzM6XHRzdGF0aWMgaW50IG1lbW9yeV9udW1hX3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXG41MDc0Olx0e1xuNTA3NTpcdFx0aW50IGk7XG41MDc2Olx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pO1xuNTA3NzpcdFxuNTA3ODpcdFx0bWVtX2Nncm91cF9mbHVzaF9zdGF0cyhtZW1jZyk7XG41MDc5Olx0XG41MDgwOlx0XHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1lbW9yeV9zdGF0cyk7IGkmIzQzOyYjNDM7KSB7XG41MDgxOlx0XHRcdGludCBuaWQ7XG41MDgyOlx0XG41MDgzOlx0XHRcdGlmIChtZW1vcnlfc3RhdHNbaV0uaWR4IFx1MDAzZT0gTlJfVk1fTk9ERV9TVEFUX0lURU1TKVxuNTA4NDpcdFx0XHRcdGNvbnRpbnVlO1xuNTA4NTpcdFxuNTA4NjpcdFx0XHRzZXFfcHJpbnRmKG0sIFwmIzM0OyVzXCYjMzQ7LCBtZW1vcnlfc3RhdHNbaV0ubmFtZSk7XG41MDg3Olx0XHRcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xuNTA4ODpcdFx0XHRcdHU2NCBzaXplO1xuNTA4OTpcdFx0XHRcdHN0cnVjdCBscnV2ZWMgKmxydXZlYztcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjUwMDgKCQkJCQkJCW91dHB1dDogMTcyCgkJCQkJCQl0aG91Z2h0czogODgxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgRGVjaXNpb24gZm9yIE1lbW9yeSBDZ3JvdXAgU3RhdCBBZ2dyZWdhdGlvbioqCgpPa2F5LCBzbyBgV29ydGhGdXp6aW5nYCBpcyBkZWZpbml0ZWx5IGB0cnVlYCBoZXJlLiBUaGlzIGNvbW1pdCB0b3VjaGVzIGNvcmUgbWVtb3J5IGNncm91cCBzdGF0aXN0aWNzIGFnZ3JlZ2F0aW9uIGxvZ2ljLCBhbmQgdGhhdCYjMzk7cyBhbHdheXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGltcGFjdGluZyBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIGBmbHVzaF9ubWlfc3RhdHNgLCBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCBhbmQgdGhlIGhhbmRsaW5nIG9mIGBtZW1jZ192bXN0YXRzYCBmaWVsZHMgKGBzdGF0ZV9sb2NhbGAsIGBldmVudHNfbG9jYWxgKS4gVGhlc2UgZmllbGRzIGFyZSBjb25kaXRpb25hbGx5IGFsbG9jYXRlZCBhbmQgYWdncmVnYXRlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19NRU1DR19WMWAgc2V0dGluZywgbWVhbmluZyB2MSBtZW1vcnkgY29udHJvbGxlci4gU3RhdCBmbHVzaGVzLCB0cmlnZ2VyZWQgYnkgcmVhZGluZyBgbWVtb3J5LnN0YXRgIG9yIGR1cmluZyByZWNsYW1hdGlvbi9hY2NvdW50aW5nIG9wZXJhdGlvbnMsIGFyZSBhbGwgYWZmZWN0ZWQsIG1ha2luZyB0aGlzIGFyZWEgYSBiaXQgb2YgYSBtaW5lZmllbGQuCgpJJiMzOTt2ZSB0YWtlbiBhIHF1aWNrIGxvb2sgYXQgdGhlIHJlbGV2YW50IGNvbmZpZ3MuIGBNRU1DR2AgaXMgdGhlIGJhc2UgY29udHJvbGxlciwgYE1FTUNHX1YxYCBlbmFibGVzIHRoZSBsZWdhY3kgdjEgZnVuY3Rpb25hbGl0eS4gSSBhbHNvIG5vdGljZWQgYENPTkZJR19NRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ2AgaXMgaW52b2x2ZWQgd2l0aCBgZmx1c2hfbm1pX3N0YXRzYCwgd2hpY2ggaXRzZWxmIGRlcGVuZHMgb24gYSBmZXcgbW9yZSBmbGFncywgbGlrZSBgSEFWRV9OTUlgLCBgQVJDSF9IQVNfTk1JX1NBRkVfVEhJU19DUFVfT1BTYCwgYW5kIGBBUkNIX0hBVkVfTk1JX1NBRkVfQ01QWENIR2AuCgpOb3csIGZvciBmb2N1cyBzeW1ib2xzOiBJJiMzOTt2ZSBpZGVudGlmaWVkIHNvbWUgbm9uLXN0YXRpYyBlbnRyeXBvaW50cy9BUEkgZnVuY3Rpb25zIHdpdGhpbiB0aGlzIHN1YnN5c3RlbSB0aGF0IGFyZSByZWxhdGVkIHRvIHN0YXQgdXBkYXRlcywgZmx1c2hpbmcsIG9yIGNncm91cCBvcGVyYXRpb25zLiBUaG9zZSBmdW5jdGlvbnMgYXJlIHRoZSBtYWluIHRhcmdldC4gU3BlY2lmaWNhbGx5OiBgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbGAsIGBtZW1jZ19ldmVudHNfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsYCwgYW5kIGBtZW1vcnlfc3RhdF9zaG93YC4gSSYjMzk7dmUgdmVyaWZpZWQgdGhlaXIgZGVmaW5pdGlvbnMgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGBtbS9tZW1jb250cm9sLXYxLmNgLCBlbnN1cmluZyB0aGV5IGFyZSBub24tc3RhdGljIGFuZCByZWxldmFudCB0byBtZW1vcnkgY2dyb3VwIG1hbmFnZW1lbnQuIEkgYWxzbyBnbGFuY2VkIG92ZXIgYG1lbWNnMV9zdGF0X2Zvcm1hdGAgYW5kIGBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbGAgdG8gbWFrZSBzdXJlIG5vdGhpbmcgaW1wb3J0YW50IHdhcyBtaXNzZWQuCgpJJiMzOTt2ZSBnb25lIHRocm91Z2ggdGhlIHByb21wdCByZXF1aXJlbWVudHMuIEJhc2VkIG9uIHRoZSBhbmFseXNpcywgSSBjYW4gY29uZmlkZW50bHkgY29uc3RydWN0IHRoZSByZXF1aXJlZCBvdXRwdXQgZm9yIGBzZXQtcmVzdWx0c2AuIEV2ZXJ5dGhpbmcgY2hlY2tzIG91dCwgYW5kIEkmIzM5O20gcmVhZHkgdG8gcHJvY2VlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X3N0YXRfc2hvdyYjMzQ7LAogICAgJiMzNDttZW1jZ19wYWdlX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O21lbWNnX2V2ZW50c19sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSByZW1vdmVzIGxlZ2FjeSB2MS1vbmx5IGxvY2FsIHN0YXRpc3RpY3MgKHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwpIGZyb20gc3RydWN0IG1lbWNnX3Ztc3RhdHMgd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQsIGFuZCBhZGRzIE5VTEwgY2hlY2tzIGR1cmluZyBzdGF0cyBmbHVzaGluZyBhbmQgYWdncmVnYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1jZyBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB3aXRoIGJvdGggY2dyb3VwIHYxIGFuZCB2MiB3b3JrbG9hZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTUNHJiMzNDssCiAgICAmIzM0O01FTUNHX1YxJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWVtb3J5X3N0YXRfc2hvdyYjMzQ7LAogICAgJiMzNDttZW1jZ19wYWdlX3N0YXRlX2xvY2FsJiMzNDssCiAgICAmIzM0O21lbWNnX2V2ZW50c19sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbCYjMzQ7LAogICAgJiMzNDtyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSByZW1vdmVzIGxlZ2FjeSB2MS1vbmx5IGxvY2FsIHN0YXRpc3RpY3MgKHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwpIGZyb20gc3RydWN0IG1lbWNnX3Ztc3RhdHMgd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQsIGFuZCBhZGRzIE5VTEwgY2hlY2tzIGR1cmluZyBzdGF0cyBmbHVzaGluZyBhbmQgYWdncmVnYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1jZyBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB3aXRoIGJvdGggY2dyb3VwIHYxIGFuZCB2MiB3b3JrbG9hZHMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDIgMTA6Mzg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxuXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzLlxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxuMy4gS0FTQU4gdnMgS01TQU46IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYGxvY2FsYCBpZiBhIGNoZWNrIHdhcyBtaXNzaW5nLCBvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBLTVNBTiBzcGVjaWZpY2FsbHkgZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIG5laXRoZXIgb2Ygd2hpY2ggYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaGVyZS5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjI5YmIzYjVlZDQ5OGMyMWRiZGYxNWE1YmI0ZmYwNTVhYzJmYTIxYwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgU2VwIDIgMTA6MzM6NDYgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmMKaW5kZXggN2NlNTBiY2NmMTI2NC4uYjk4YjJkNjhjNjJiZSAxMDA2NDQKLS0tIGEvbW0vbWVtY29udHJvbC5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL21lbWNvbnRyb2wuYwpAQCAtNjc1LDkgJiM0Mzs2NzUsMTEgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMgewogCWxvbmcJCQlzdGF0ZVtNRU1DR19WTVNUQVRfU0laRV07CiAJdW5zaWduZWQgbG9uZwkJZXZlbnRzW05SX01FTUNHX0VWRU5UU107CiAKJiM0MzsjaWZkZWYgQ09ORklHX01FTUNHX1YxCiAJLyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgJmFtcDsgZXZlbnRzICovCiAJbG9uZwkJCXN0YXRlX2xvY2FsW01FTUNHX1ZNU1RBVF9TSVpFXTsKIAl1bnNpZ25lZCBsb25nCQlldmVudHNfbG9jYWxbTlJfTUVNQ0dfRVZFTlRTXTsKJiM0MzsjZW5kaWYKIAogCS8qIFBlbmRpbmcgY2hpbGQgY291bnRzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovCiAJbG9uZwkJCXN0YXRlX3BlbmRpbmdbTUVNQ0dfVk1TVEFUX1NJWkVdOwpAQCAtNjg3LDYgJiM0Mzs2ODksMzIgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMgewogCWF0b21pY19sb25nX3QJCXN0YXRzX3VwZGF0ZXM7CiB9OwogCiYjNDM7LyoKJiM0MzsgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5CiYjNDM7ICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuCiYjNDM7ICovCiYjNDM7I2lmZGVmIENPTkZJR19NRU1DR19WMQomIzQzO3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZykKJiM0Mzt7CiYjNDM7CXJldHVybiBtZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7ZXZlbnRzX2xvY2FsOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIHVuc2lnbmVkIGxvbmcgKm1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpCiYjNDM7ewomIzQzOwlyZXR1cm4gTlVMTDsKJiM0Mzt9CiYjNDM7I2VuZGlmCiYjNDM7CiAvKgogICogbWVtY2cgYW5kIGxydXZlYyBzdGF0cyBmbHVzaGluZwogICoKQEAgLTQ0NjgsNyAmIzQzOzQ0OTYsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcykKIHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCB7CiAJLyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovCiAJbG9uZyAqYWdncmVnYXRlOwotCS8qIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljaGFsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgKi8KJiM0MzsJLyoKJiM0MzsJICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG8KJiM0MzsJICogc2tpcCB1cGRhdGluZyB0aGVtIChzZWUgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSkKJiM0MzsJICovCiAJbG9uZyAqbG9jYWw7CiAJLyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqLwogCWxvbmcgKnBlbmRpbmc7CkBAIC00NTA3LDcgJiM0Mzs0NTM4LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgKmFjKQogCQl9CiAKIAkJLyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqLwotCQlpZiAoZGVsdGFfY3B1KQomIzQzOwkJaWYgKGRlbHRhX2NwdSAmYW1wOyZhbXA7IGFjLSZndDtsb2NhbCkKIAkJCWFjLSZndDtsb2NhbFtpXSAmIzQzOz0gZGVsdGFfY3B1OwogCiAJCWlmIChkZWx0YSkgewpAQCAtNDUyMSw2ICYjNDM7NDU1Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYykKICNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUMKIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiB7CiYjNDM7CWxvbmcgKnN0YXRlX2xvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpOwogCWludCBuaWQ7CiAKIAlpZiAoYXRvbWljX3JlYWQoJmFtcDttZW1jZy0mZ3Q7a21lbV9zdGF0KSkgewpAQCAtNDUyOCw3ICYjNDM7NDU2MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpCiAJCWludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pOwogCiAJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZVtpbmRleF0gJiM0Mzs9IGttZW07Ci0JCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IGttZW07CiYjNDM7CQlpZiAoc3RhdGVfbG9jYWwpCiYjNDM7CQkJc3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtOwogCQlpZiAocGFyZW50KQogCQkJcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0ga21lbTsKIAl9CkBAIC00NTUwLDcgJiM0Mzs0NTgzLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCkKIAkJCWlmIChwbHN0YXRzKQogCQkJCXBsc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmdbaW5kZXhdICYjNDM7PSBzbGFiOwogCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjsKLQkJCW1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiYjNDM7CQkJaWYgKHN0YXRlX2xvY2FsKQomIzQzOwkJCQlzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQlpZiAocGFyZW50KQogCQkJCXBhcmVudC0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCX0KQEAgLTQ1NjMsNyAmIzQzOzQ1OTcsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KQogCQkJaWYgKHBsc3RhdHMpCiAJCQkJcGxzdGF0cy0mZ3Q7c3RhdGVfcGVuZGluZ1tpbmRleF0gJiM0Mzs9IHNsYWI7CiAJCQltZW1jZy0mZ3Q7dm1zdGF0cy0mZ3Q7c3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiOwotCQkJbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKJiM0MzsJCQlpZiAoc3RhdGVfbG9jYWwpCiYjNDM7CQkJCXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJCWlmIChwYXJlbnQpCiAJCQkJcGFyZW50LSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nW2luZGV4XSAmIzQzOz0gc2xhYjsKIAkJfQpAQCAtNDU4OCw3ICYjNDM7NDYyMyw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpCiAKIAlhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHsKIAkJLmFnZ3JlZ2F0ZSA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZSwKLQkJLmxvY2FsID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX2xvY2FsLAomIzQzOwkJLmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLAogCQkucGVuZGluZyA9IG1lbWNnLSZndDt2bXN0YXRzLSZndDtzdGF0ZV9wZW5kaW5nLAogCQkucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O3N0YXRlX3BlbmRpbmcgOiBOVUxMLAogCQkuY3N0YXQgPSBzdGF0Yy0mZ3Q7c3RhdGUsCkBAIC00NTk5LDcgJiM0Mzs0NjM0LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSkKIAogCWFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkgewogCQkuYWdncmVnYXRlID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50cywKLQkJLmxvY2FsID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19sb2NhbCwKJiM0MzsJCS5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksCiAJCS5wZW5kaW5nID0gbWVtY2ctJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19wZW5kaW5nLAogCQkucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtJmd0O3Ztc3RhdHMtJmd0O2V2ZW50c19wZW5kaW5nIDogTlVMTCwKIAkJLmNzdGF0ID0gc3RhdGMtJmd0O2V2ZW50cywKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM1MTAKCQkJCQkJCW91dHB1dDogMjMKCQkJCQkJCXRob3VnaHRzOiAzMTQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS01TQU4gRnV6emluZyBFdmFsdWF0aW9uKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYW55IGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgY29uZGl0aW9uYWwgbG9naWMsIGFyZSB3b3J0aCBhIGNsb3NlciBsb29rLgoKRmlyc3QsIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgdGhpcyBwYXRjaCBpcyBkb2luZy4gT2theSwgaXQmIzM5O3MgbW9kaWZ5aW5nIGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AuIFRoZSBrZXkgc2VlbXMgdG8gYmUgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvZiBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBiYXNlZCBvbiBgQ09ORklHX01FTUNHX1YxYC4gSW50ZXJlc3RpbmcuIFRoZXkmIzM5O3ZlIGludHJvZHVjZWQgaGVscGVyIGZ1bmN0aW9ucywgYG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5YCBhbmQgYG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheWAsIHRvIGFic3RyYWN0IGFjY2VzcyB0byB0aGVzZSBmaWVsZHMuIFRoYXQmIzM5O3MgZ29vZCBwcmFjdGljZSwgbWFrZXMgdGhlIGNvZGUgY2xlYW5lci4gVGhlIHVzZSBvZiB0aGVzZSBhY2Nlc3NvcnMgc2VlbXMgd2VsbCB0aG91Z2h0IG91dCB0byBrZWVwIHRoZSBhYnN0cmFjdGlvbiBjbGVhbi4KCkl0IGxvb2tzIGxpa2UgdGhlIHByaW1hcnkgbW9kaWZpY2F0aW9ucyBhcmUgaW4gYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoKWAsIGBmbHVzaF9ubWlfc3RhdHMoKWAsIGFuZCBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goKWAuIFdlJiMzOTtyZSBzZWVpbmcgY2hlY2tzIGZvciBgYWMtJmd0O2xvY2FsYCBiZWZvcmUgd3JpdGluZywgY2hlY2tzIGluIGBmbHVzaF9ubWlfc3RhdHNgIGJlZm9yZSB3cml0aW5nIHRvIGBzdGF0ZV9sb2NhbGAsIGFuZCBhIGdlbmVyYWwgcG9wdWxhdGlvbiBvZiBgLmxvY2FsYCBpbiB0aGUgYGZsdXNoYCBmdW5jdGlvbi4gVGhpcyBzdWdnZXN0cyB0aGF0IHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gaXMgaGFuZGxlZCBjb3JyZWN0bHkgYnkgdGhlc2UgZnVuY3Rpb25zLiBUaGUgY29kZSBwYXRocyBhbGwgc2VlbSBhcHByb3ByaWF0ZSBhdCBhIGZpcnN0IGdsYW5jZS4KCk5vdywgbGV0JiMzOTtzIGdldCBhIGJpZ2dlciBwaWN0dXJlLiBJJiMzOTttIGdvaW5nIHRvIHJ1biBhIHF1aWNrIGBncmVwYCBmb3IgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgYWNyb3NzIHRoZSByZWxldmFudCBjb2RlYmFzZSwgc3BlY2lmaWNhbGx5IGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBlbHNld2hlcmUsIHRvIGVuc3VyZSBJJiMzOTttIG5vdCBtaXNzaW5nIGFueSBzdWJ0bGUgaW50ZXJhY3Rpb25zIG9yIHVuZXhwZWN0ZWQgdXNlcy4gVGhpcyB3aWxsIHRlbGwgbWUgKmV4YWN0bHkqIHdoZXJlIHRoZXNlIGZpZWxkcyBhcmUgYWNjZXNzZWQgYW5kIGhvdyB0aGV5IGludGVyYWN0IHdpdGggb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbC4gVGhpcyBpcyB3aGVyZSBJJiMzOTtsbCBnZXQgYSBjbGVhciB2aWV3LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDsoc3RhdGVfbG9jYWx8ZXZlbnRzX2xvY2FsKSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTA2IGxpbmVzLlxuVXNlIG1vcmUgcHJlY2lzZSBleHByZXNzaW9uIGlmIHBvc3NpYmxlLlxuXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jPTEyOTM9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMjk2LVx0c3RydWN0IGludGVsX3VjICp1YyA9IGNvbnRhaW5lcl9vZihndWMsIHR5cGVvZigqdWMpLCBndWMpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMjk3Olx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlIGxvZ19idWZfc3RhdGVfbG9jYWw7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTgtXHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgKmxvZ19idWZfc3RhdGU7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzEzLVx0ICovXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jOjEzMTQ6XHRtZW1jcHkoXHUwMDI2bG9nX2J1Zl9zdGF0ZV9sb2NhbCwgbG9nX2J1Zl9zdGF0ZSwgc2l6ZW9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSkpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzE1LVx0YnVmZmVyX3NpemUgPSBpbnRlbF9ndWNfZ2V0X2xvZ19idWZmZXJfc2l6ZShcdTAwMjZndWMtXHUwMDNlbG9nLCBHVUNfQ0FQVFVSRV9MT0dfQlVGRkVSKTtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNjpcdHJlYWRfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5yZWFkX3B0cjtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNzpcdHdyaXRlX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuc2FtcGxlZF93cml0ZV9wdHI7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jOjEzMTg6XHRmdWxsX2NvdW50ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5idWZmZXJfZnVsbF9jbnQ7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTktXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMjAtXHQvKiBCb29ra2VlcGluZyBzdHVmZiAqL1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzIxOlx0Z3VjLVx1MDAzZWxvZy5zdGF0c1tHVUNfQ0FQVFVSRV9MT0dfQlVGRkVSXS5mbHVzaCAmIzQzOz0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbHVzaF90b19maWxlO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzIyLVx0bmV3X292ZXJmbG93ID0gaW50ZWxfZ3VjX2NoZWNrX2xvZ19idWZfb3ZlcmZsb3coXHUwMDI2Z3VjLVx1MDAzZWxvZywgR1VDX0NBUFRVUkVfTE9HX0JVRkZFUixcbi0tXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM9Mzc1PXN0YXRpYyB2b2lkIF9ndWNfbG9nX2NvcHlfZGVidWdsb2dzX2Zvcl9yZWxheShzdHJ1Y3QgaW50ZWxfZ3VjX2xvZyAqbG9nKVxuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy0zNzktXHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgKmxvZ19idWZfc3RhdGUsICpsb2dfYnVmX3NuYXBzaG90X3N0YXRlO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjM4MDpcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTM4MS1cdGVudW0gZ3VjX2xvZ19idWZmZXJfdHlwZSB0eXBlO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MTgtXHRcdCAqL1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQxOTpcdFx0bWVtY3B5KFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsIGxvZ19idWZfc3RhdGUsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDIwLVx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSkpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyMS1cdFx0YnVmZmVyX3NpemUgPSBpbnRlbF9ndWNfZ2V0X2xvZ19idWZmZXJfc2l6ZShsb2csIHR5cGUpO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyMjpcdFx0cmVhZF9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnJlYWRfcHRyO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyMzpcdFx0d3JpdGVfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5zYW1wbGVkX3dyaXRlX3B0cjtcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0MjQ6XHRcdGZ1bGxfY250ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5idWZmZXJfZnVsbF9jbnQ7XG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDI1LVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyNi1cdFx0LyogQm9va2tlZXBpbmcgc3R1ZmYgKi9cbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0Mjc6XHRcdGxvZy1cdTAwM2VzdGF0c1t0eXBlXS5mbHVzaCAmIzQzOz0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbHVzaF90b19maWxlO1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyOC1cdFx0bmV3X292ZXJmbG93ID0gaW50ZWxfZ3VjX2NoZWNrX2xvZ19idWZfb3ZlcmZsb3cobG9nLCB0eXBlLCBmdWxsX2NudCk7XG4tLVxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQzNS1cdFx0LyogRmlyc3QgY29weSB0aGUgc3RhdGUgc3RydWN0dXJlIGluIHNuYXBzaG90IGJ1ZmZlciAqL1xuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQzNjpcdFx0bWVtY3B5KGxvZ19idWZfc25hcHNob3Rfc3RhdGUsIFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDM3LVx0XHQgICAgICAgc2l6ZW9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSkpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jPTEzODg9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgeGVfZ3VjICpndWMpXG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTM5MS1cdHN0cnVjdCB4ZV91YyAqdWMgPSBjb250YWluZXJfb2YoZ3VjLCB0eXBlb2YoKnVjKSwgZ3VjKTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjEzOTI6XHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgbG9nX2J1Zl9zdGF0ZV9sb2NhbDtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTEzOTMtXHRzdHJ1Y3QgX19ndWNfY2FwdHVyZV9idWZzdGF0ZSBidWY7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQwNi1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQwNzpcdHhlX21hcF9tZW1jcHlfZnJvbShndWNfdG9feGUoZ3VjKSwgXHUwMDI2bG9nX2J1Zl9zdGF0ZV9sb2NhbCwgXHUwMDI2Z3VjLVx1MDAzZWxvZy5iby1cdTAwM2V2bWFwLFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQwOC1cdFx0XHQgICBsb2dfYnVmX3N0YXRlX29mZnNldCwgc2l6ZW9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSkpO1xuLS1cbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0MTAtXHRidWZmZXJfc2l6ZSA9IFhFX0dVQ19MT0dfU1RBVEVfQ0FQVFVSRV9CVUZGRVJfU0laRTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTE6XHRyZWFkX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwucmVhZF9wdHI7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDEyOlx0d3JpdGVfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5zYW1wbGVkX3dyaXRlX3B0cjtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTM6XHRmdWxsX2NvdW50ID0gRklFTERfR0VUKEdVQ19MT0dfQlVGRkVSX1NUQVRFX0JVRkZFUl9GVUxMX0NOVCwgbG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE0LVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQxNS1cdC8qIEJvb2trZWVwaW5nIHN0dWZmICovXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDE2Olx0dG1wID0gRklFTERfR0VUKEdVQ19MT0dfQlVGRkVSX1NUQVRFX0ZMVVNIX1RPX0ZJTEUsIGxvZ19idWZfc3RhdGVfbG9jYWwuZmxhZ3MpO1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQxNy1cdGd1Yy1cdTAwM2Vsb2cuc3RhdHNbR1VDX0xPR19UWVBFX1NUQVRFX0NBUFRVUkVdLmZsdXNoICYjNDM7PSB0bXA7XG4tLVxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQ1OC1cdCAqL1xuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQ1OTpcdGxvZ19idWZfc3RhdGVfbG9jYWwuZmxhZ3MgXHUwMDI2PSB+R1VDX0xPR19CVUZGRVJfU1RBVEVfRkxVU0hfVE9fRklMRTtcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjAtXHR4ZV9tYXBfd3IoZ3VjX3RvX3hlKGd1YyksIFx1MDAyNmd1Yy1cdTAwM2Vsb2cuYm8tXHUwMDNldm1hcCxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjEtXHRcdCAgbG9nX2J1Zl9zdGF0ZV9vZmZzZXQgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlLCBmbGFncyksIHUzMixcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0NjI6XHRcdCAgbG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyk7XG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDYzLVx0X19ndWNfY2FwdHVyZV9mbHVzaGxvZ19jb21wbGV0ZShndWMpO1xuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaD0xOT1zdHJ1Y3QgcmRtYV9jZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaC0yOS1cdHN0cnVjdCBjZ3JvdXBfZmlsZVx0XHRldmVudHNfZmlsZTtcbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaDozMDpcdHN0cnVjdCBjZ3JvdXBfZmlsZVx0XHRldmVudHNfbG9jYWxfZmlsZTtcbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaC0zMS19O1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaD0zNT1zdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC00OC1cdGF0b21pY19sb25nX3QgZXZlbnRzW0hVR0VfTUFYX0hTVEFURV1bSFVHRVRMQl9OUl9NRU1PUllfRVZFTlRTXTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo0OTpcdGF0b21pY19sb25nX3QgZXZlbnRzX2xvY2FsW0hVR0VfTUFYX0hTVEFURV1bSFVHRVRMQl9OUl9NRU1PUllfRVZFTlRTXTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC01MC1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNTQtXHQvKiBIYW5kbGUgZm9yIFwmIzM0O2h1Z2V0bGIuZXZlbnRzLmxvY2FsXCYjMzQ7ICovXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmg6NTU6XHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2xvY2FsX2ZpbGVbSFVHRV9NQVhfSFNUQVRFXTtcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaC01Ni1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xuLS1cbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTIzMS1cdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfZmlsZTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oOjIzMjpcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZTtcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTIzMy1cbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNDEtXHRhdG9taWNfbG9uZ190XHRcdG1lbW9yeV9ldmVudHNbTUVNQ0dfTlJfTUVNT1JZX0VWRU5UU107XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNDI6XHRhdG9taWNfbG9uZ190XHRcdG1lbW9yeV9ldmVudHNfbG9jYWxbTUVNQ0dfTlJfTUVNT1JZX0VWRU5UU107XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0yNDMtXG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTQ2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk0Ny1cdFx0XHRcdFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDo5NDg6dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05NDktXHRcdFx0XHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XG4tLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9MTQwNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcbi0tXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC0xNDEwLVxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6MTQxMTpzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQxMi1cdFx0XHRcdFx0XHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXG4tLVxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oPTQyPXN0cnVjdCBtaXNjX3JlcyB7XG4tLVxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTQ2LVx0YXRvbWljNjRfdCBldmVudHM7XG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg6NDc6XHRhdG9taWM2NF90IGV2ZW50c19sb2NhbDtcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC00OC19O1xuLS1cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaD01Nj1zdHJ1Y3QgbWlzY19jZyB7XG4tLVxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTYxLVx0LyogbWlzYy5ldmVudHMubG9jYWwgKi9cbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaDo2MjpcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZTtcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC02My1cbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0xMjU9c3RhdGljIHZvaWQgbWlzY19jZ19ldmVudChlbnVtIG1pc2NfcmVzX3R5cGUgdHlwZSwgc3RydWN0IG1pc2NfY2cgKmNnKVxua2VybmVsL2Nncm91cC9taXNjLmMtMTI2LXtcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjEyNzpcdGF0b21pYzY0X2luYyhcdTAwMjZjZy1cdTAwM2VyZXNbdHlwZV0uZXZlbnRzX2xvY2FsKTtcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjEyODpcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZjZy1cdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XG5rZXJuZWwvY2dyb3VwL21pc2MuYy0xMjktXG4tLVxua2VybmVsL2Nncm91cC9taXNjLmM9MzY3PXN0YXRpYyBpbnQgX19taXNjX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIGJvb2wgbG9jYWwpXG4tLVxua2VybmVsL2Nncm91cC9taXNjLmMtMzc0LVx0XHRpZiAobG9jYWwpXG5rZXJuZWwvY2dyb3VwL21pc2MuYzozNzU6XHRcdFx0ZXZlbnRzID0gYXRvbWljNjRfcmVhZChcdTAwMjZjZy1cdTAwM2VyZXNbaV0uZXZlbnRzX2xvY2FsKTtcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTM3Ni1cdFx0ZWxzZVxuLS1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM4ND1zdGF0aWMgaW50IG1pc2NfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0zODgtXG5rZXJuZWwvY2dyb3VwL21pc2MuYzozODk6c3RhdGljIGludCBtaXNjX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0zOTAte1xuLS1cbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM5NT1zdGF0aWMgc3RydWN0IGNmdHlwZSBtaXNjX2NnX2ZpbGVzW10gPSB7XG4tLVxua2VybmVsL2Nncm91cC9taXNjLmMtNDIzLVx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG5rZXJuZWwvY2dyb3VwL21pc2MuYzo0MjQ6XHRcdC5maWxlX29mZnNldCA9IG9mZnNldG9mKHN0cnVjdCBtaXNjX2NnLCBldmVudHNfbG9jYWxfZmlsZSksXG5rZXJuZWwvY2dyb3VwL21pc2MuYzo0MjU6XHRcdC5zZXFfc2hvdyA9IG1pc2NfZXZlbnRzX2xvY2FsX3Nob3csXG5rZXJuZWwvY2dyb3VwL21pc2MuYy00MjYtXHR9LFxuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTQ5PXN0cnVjdCBwaWRzX2Nncm91cCB7XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtNjEtXHRzdHJ1Y3QgY2dyb3VwX2ZpbGVcdFx0ZXZlbnRzX2ZpbGU7XG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo2MjpcdHN0cnVjdCBjZ3JvdXBfZmlsZVx0XHRldmVudHNfbG9jYWxfZmlsZTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTYzLVxua2VybmVsL2Nncm91cC9waWRzLmMtNjQtXHRhdG9taWM2NF90XHRcdFx0ZXZlbnRzW05SX1BJRENHX0VWRU5UU107XG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo2NTpcdGF0b21pYzY0X3RcdFx0XHRldmVudHNfbG9jYWxbTlJfUElEQ0dfRVZFTlRTXTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTY2LX07XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmM9MjQzPXN0YXRpYyB2b2lkIHBpZHNfZXZlbnQoc3RydWN0IHBpZHNfY2dyb3VwICpwaWRzX2ZvcmtpbmcsXG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtMjQ4LVx0LyogT25seSBsb2cgdGhlIGZpcnN0IHRpbWUgbGltaXQgaXMgaGl0LiAqL1xua2VybmVsL2Nncm91cC9waWRzLmM6MjQ5Olx0aWYgKGF0b21pYzY0X2luY19yZXR1cm4oXHUwMDI2cC1cdTAwM2VldmVudHNfbG9jYWxbUElEQ0dfRk9SS0ZBSUxdKSA9PSAxKSB7XG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTAtXHRcdHByX2luZm8oXCYjMzQ7Y2dyb3VwOiBmb3JrIHJlamVjdGVkIGJ5IHBpZHMgY29udHJvbGxlciBpbiBcJiMzNDspO1xuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI1NS1cdCAgICBjZ3JwX2RmbF9yb290LmZsYWdzIFx1MDAyNiBDR1JQX1JPT1RfUElEU19MT0NBTF9FVkVOVFMpIHtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI1NjpcdFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNnAtXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xua2VybmVsL2Nncm91cC9waWRzLmMtMjU3LVx0XHRyZXR1cm47XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmMtMjU5LVxua2VybmVsL2Nncm91cC9waWRzLmM6MjYwOlx0YXRvbWljNjRfaW5jKFx1MDAyNnBpZHNfb3Zlcl9saW1pdC1cdTAwM2VldmVudHNfbG9jYWxbUElEQ0dfTUFYXSk7XG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNjE6XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2cGlkc19vdmVyX2xpbWl0LVx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI2Mi1cbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYz0zNjE9c3RhdGljIGludCBfX3BpZHNfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgYm9vbCBsb2NhbClcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0zNzEtXHR9XG5rZXJuZWwvY2dyb3VwL3BpZHMuYzozNzI6XHRldmVudHMgPSBsb2NhbCA/IHBpZHMtXHUwMDNlZXZlbnRzX2xvY2FsIDogcGlkcy1cdTAwM2VldmVudHM7XG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0zNzMtXG4tLVxua2VybmVsL2Nncm91cC9waWRzLmM9Mzc4PXN0YXRpYyBpbnQgcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxuLS1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTM4My1cbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjM4NDpzdGF0aWMgaW50IHBpZHNfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTM4NS17XG4tLVxua2VybmVsL2Nncm91cC9waWRzLmM9MzkwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHBpZHNfZmlsZXNbXSA9IHtcbi0tXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy00MTQtXHRcdC5uYW1lID0gXCYjMzQ7ZXZlbnRzLmxvY2FsXCYjMzQ7LFxua2VybmVsL2Nncm91cC9waWRzLmM6NDE1Olx0XHQuc2VxX3Nob3cgPSBwaWRzX2V2ZW50c19sb2NhbF9zaG93LFxua2VybmVsL2Nncm91cC9waWRzLmM6NDE2Olx0XHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGlkc19jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTQxNy1cdFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTc1PXN0cnVjdCByZG1hY2dfcmVzb3VyY2VfcG9vbCB7XG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtODktXHR1NjRcdFx0XHRldmVudHNfYWxsb2NfZmFpbFtSRE1BQ0dfUkVTT1VSQ0VfTUFYXTtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjkwOlx0dTY0XHRcdFx0ZXZlbnRzX2xvY2FsX21heFtSRE1BQ0dfUkVTT1VSQ0VfTUFYXTtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjkxOlx0dTY0XHRcdFx0ZXZlbnRzX2xvY2FsX2FsbG9jX2ZhaWxbUkRNQUNHX1JFU09VUkNFX01BWF07XG5rZXJuZWwvY2dyb3VwL3JkbWEuYy05Mi19O1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTEzOT1zdGF0aWMgYm9vbCBycG9vbF9oYXNfcGVyc2lzdGVudF9zdGF0ZShzdHJ1Y3QgcmRtYWNnX3Jlc291cmNlX3Bvb2wgKnJwb29sKVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTE1MC1cdFx0ICAgIHJwb29sLVx1MDAzZWV2ZW50c19tYXhbaV0gfHxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MTpcdFx0ICAgIHJwb29sLVx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gfHxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTE1Mi1cdFx0ICAgIHJwb29sLVx1MDAzZWV2ZW50c19hbGxvY19mYWlsW2ldIHx8XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoxNTM6XHRcdCAgICBycG9vbC1cdTAwM2VldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtpXSlcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTE1NC1cdFx0XHRyZXR1cm4gdHJ1ZTtcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz0yNTk9c3RhdGljIHZvaWQgcmRtYWNnX2V2ZW50X2xvY2tlZChzdHJ1Y3QgcmRtYV9jZ3JvdXAgKmNnLFxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTI3MS1cdGlmIChycG9vbCkge1xua2VybmVsL2Nncm91cC9yZG1hLmM6MjcyOlx0XHRycG9vbC1cdTAwM2VldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtpbmRleF0mIzQzOyYjNDM7O1xua2VybmVsL2Nncm91cC9yZG1hLmM6MjczOlx0XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2Y2ctXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xua2VybmVsL2Nncm91cC9yZG1hLmMtMjc0LVx0fVxuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTI3OC1cdGlmIChycG9vbCkge1xua2VybmVsL2Nncm91cC9yZG1hLmM6Mjc5Olx0XHRycG9vbC1cdTAwM2VldmVudHNfbG9jYWxfbWF4W2luZGV4XSYjNDM7JiM0Mzs7XG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyODA6XHRcdGNncm91cF9maWxlX25vdGlmeShcdTAwMjZvdmVyX2NnLVx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTI4MS1cdH1cbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz02ODg9c3RhdGljIGludCByZG1hY2dfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbi0tXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03MTYtXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo3MTc6c3RhdGljIGludCByZG1hY2dfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTcxOC17XG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmMtNzMyLVx0XHRcdFx0ICAgcmRtYWNnX3Jlc291cmNlX25hbWVzW2ldLFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzMzOlx0XHRcdFx0ICAgcnBvb2wgPyBycG9vbC1cdTAwM2VldmVudHNfbG9jYWxfbWF4W2ldIDogMFVMTCxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczNC1cdFx0XHRcdCAgIHJkbWFjZ19yZXNvdXJjZV9uYW1lc1tpXSxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjczNTpcdFx0XHRcdCAgIHJwb29sID8gcnBvb2wtXHUwMDNlZXZlbnRzX2xvY2FsX2FsbG9jX2ZhaWxbaV0gOiAwVUxMKTtcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczNi1cdFx0XHRpZiAoaSBcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWCAtIDEpXG4tLVxua2VybmVsL2Nncm91cC9yZG1hLmM9NzQ2PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHJkbWFjZ19maWxlc1tdID0ge1xuLS1cbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTc3My1cdFx0Lm5hbWUgPSBcJiMzNDtldmVudHMubG9jYWxcJiMzNDssXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo3NzQ6XHRcdC5zZXFfc2hvdyA9IHJkbWFjZ19ldmVudHNfbG9jYWxfc2hvdyxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjc3NTpcdFx0LmZpbGVfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IHJkbWFfY2dyb3VwLCBldmVudHNfbG9jYWxfZmlsZSksXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03NzYtXHRcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jPTI0Mz1zdGF0aWMgaW5saW5lIHZvaWQgaHVnZXRsYl9ldmVudChzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAgKmh1Z2V0bGIsIGludCBpZHgsXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNDUte1xubW0vaHVnZXRsYl9jZ3JvdXAuYzoyNDY6XHRhdG9taWNfbG9uZ19pbmMoXHUwMDI2aHVnZXRsYi1cdTAwM2VldmVudHNfbG9jYWxbaWR4XVtldmVudF0pO1xubW0vaHVnZXRsYl9jZ3JvdXAuYzoyNDc6XHRjZ3JvdXBfZmlsZV9ub3RpZnkoXHUwMDI2aHVnZXRsYi1cdTAwM2VldmVudHNfbG9jYWxfZmlsZVtpZHhdKTtcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtMjQ4LVxuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmM9Njc3PXN0YXRpYyBpbnQgX19odWdldGxiX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCBib29sIGxvY2FsKVxuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNjg2LVx0aWYgKGxvY2FsKVxubW0vaHVnZXRsYl9jZ3JvdXAuYzo2ODc6XHRcdG1heCA9IGF0b21pY19sb25nX3JlYWQoXHUwMDI2aF9jZy1cdTAwM2VldmVudHNfbG9jYWxbaWR4XVtIVUdFVExCX01BWF0pO1xubW0vaHVnZXRsYl9jZ3JvdXAuYy02ODgtXHRlbHNlXG4tLVxubW0vaHVnZXRsYl9jZ3JvdXAuYz02OTY9c3RhdGljIGludCBodWdldGxiX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNzAwLVxubW0vaHVnZXRsYl9jZ3JvdXAuYzo3MDE6c3RhdGljIGludCBodWdldGxiX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2VxLCB2b2lkICp2KVxubW0vaHVnZXRsYl9jZ3JvdXAuYy03MDIte1xuLS1cbm1tL2h1Z2V0bGJfY2dyb3VwLmM9NzA2PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIGh1Z2V0bGJfZGZsX3RtcGxbXSA9IHtcbi0tXG5tbS9odWdldGxiX2Nncm91cC5jLTc0MC1cdFx0Lm5hbWUgPSBcJiMzNDtldmVudHMubG9jYWxcJiMzNDssXG5tbS9odWdldGxiX2Nncm91cC5jOjc0MTpcdFx0LnNlcV9zaG93ID0gaHVnZXRsYl9ldmVudHNfbG9jYWxfc2hvdyxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6NzQyOlx0XHQuZmlsZV9vZmZzZXQgPSBNRU1GSUxFX09GRlNFVChzdHJ1Y3QgaHVnZXRsYl9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlWzBdKSxcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNzQzLVx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE3NDI9c3RhdGljIHVuc2lnbmVkIGxvbmcgbWVtX2Nncm91cF9ub2RlX25yX2xydV9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE3NTYtXHRcdGVsc2Vcbm1tL21lbWNvbnRyb2wtdjEuYzoxNzU3Olx0XHRcdG5yICYjNDM7PSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChscnV2ZWMsIE5SX0xSVV9CQVNFICYjNDM7IGxydSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTc1OC1cdH1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTc2Mj1zdGF0aWMgdW5zaWduZWQgbG9uZyBtZW1fY2dyb3VwX25yX2xydV9wYWdlcyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE3NzQtXHRcdGVsc2Vcbm1tL21lbWNvbnRyb2wtdjEuYzoxNzc1Olx0XHRcdG5yICYjNDM7PSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBOUl9MUlVfQkFTRSAmIzQzOyBscnUpO1xubW0vbWVtY29udHJvbC12MS5jLTE3NzYtXHR9XG4tLVxubW0vbWVtY29udHJvbC12MS5jPTE4NjM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfZXZlbnRzW10gPSB7XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NjktXG5tbS9tZW1jb250cm9sLXYxLmM6MTg3MDp2b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3MS17XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4NzQtXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBBUlJBWV9TSVpFKG1lbWNnMV9zdGF0cyk7IGkmIzQzOyYjNDM7KVxubW0vbWVtY29udHJvbC12MS5jOjE4NzU6XHRcdHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIG1lbWNnMV9zdGF0c1tpXSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ni19XG5tbS9tZW1jb250cm9sLXYxLmMtMTg3Ny1cbm1tL21lbWNvbnRyb2wtdjEuYzoxODc4OnZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG5tbS9tZW1jb250cm9sLXYxLmMtMTg3OS17XG4tLVxubW0vbWVtY29udHJvbC12MS5jLTE4ODItXHRmb3IgKGkgPSAwOyBpIFx1MDAzYyBOUl9MUlVfTElTVFM7IGkmIzQzOyYjNDM7KVxubW0vbWVtY29udHJvbC12MS5jOjE4ODM6XHRcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBpKTtcbm1tL21lbWNvbnRyb2wtdjEuYy0xODg0LX1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmM9MTg4Nj12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xODk4LVxubW0vbWVtY29udHJvbC12MS5jOjE4OTk6XHRcdG5yID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbF9vdXRwdXQobWVtY2csIG1lbWNnMV9zdGF0c1tpXSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTkwMC1cdFx0c2VxX2J1Zl9wcmludGYocywgXCYjMzQ7JXMgJWx1XFxuXCYjMzQ7LCBtZW1jZzFfc3RhdF9uYW1lc1tpXSwgbnIpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuYy0xOTA0LVx0XHRzZXFfYnVmX3ByaW50ZihzLCBcJiMzNDslcyAlbHVcXG5cJiMzNDssIHZtX2V2ZW50X25hbWUobWVtY2cxX2V2ZW50c1tpXSksXG5tbS9tZW1jb250cm9sLXYxLmM6MTkwNTpcdFx0XHQgICAgICAgbWVtY2dfZXZlbnRzX2xvY2FsKG1lbWNnLCBtZW1jZzFfZXZlbnRzW2ldKSk7XG5tbS9tZW1jb250cm9sLXYxLmMtMTkwNi1cbi0tXG5tbS9tZW1jb250cm9sLXYxLmMtMTkwOC1cdFx0c2VxX2J1Zl9wcmludGYocywgXCYjMzQ7JXMgJWx1XFxuXCYjMzQ7LCBscnVfbGlzdF9uYW1lKGkpLFxubW0vbWVtY29udHJvbC12MS5jOjE5MDk6XHRcdFx0ICAgICAgIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIE5SX0xSVV9CQVNFICYjNDM7IGkpICpcbm1tL21lbWNvbnRyb2wtdjEuYy0xOTEwLVx0XHRcdCAgICAgICBQQUdFX1NJWkUpO1xuLS1cbm1tL21lbWNvbnRyb2wtdjEuaD0zMj1zdGF0aWMgaW5saW5lIGJvb2wgZG9fbWVtc3dfYWNjb3VudCh2b2lkKVxuLS1cbm1tL21lbWNvbnRyb2wtdjEuaC0zNi1cbm1tL21lbWNvbnRyb2wtdjEuaDozNzp1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudCk7XG5tbS9tZW1jb250cm9sLXYxLmg6Mzg6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeCk7XG5tbS9tZW1jb250cm9sLXYxLmg6Mzk6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcbm1tL21lbWNvbnRyb2wtdjEuaC00MC1ib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcbi0tXG5tbS9tZW1jb250cm9sLXYxLmg9NjQ9dm9pZCBtZW1jZzFfc3RhdF9mb3JtYXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3Qgc2VxX2J1ZiAqcyk7XG5tbS9tZW1jb250cm9sLXYxLmg6NjU6dm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbm1tL21lbWNvbnRyb2wtdjEuaDo2Njp2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcbm1tL21lbWNvbnRyb2wtdjEuaC02Ny1cbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuaC02OS1cdFx0XHRcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xubW0vbWVtY29udHJvbC12MS5oOjcwOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wtdjEuaC03MS1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcbi0tXG5tbS9tZW1jb250cm9sLmM9MjM2PXN0YXRpYyB2b2lkIF9fbWVtX2Nncm91cF9mbHVzaF9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgZm9yY2UpO1xubW0vbWVtY29udHJvbC5jLTIzNy1cbm1tL21lbWNvbnRyb2wuYzoyMzg6c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wuYy0yMzkte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0yNTEtXHQvKiBUaGUgZm9sbG93aW5nIGNvdW50cyBhcmUgYWxsIG5vbi1oaWVyYXJjaGljYWwgYW5kIG5lZWQgdG8gYmUgcmVwYXJlbnRlZC4gKi9cbm1tL21lbWNvbnRyb2wuYzoyNTI6XHRyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XG5tbS9tZW1jb250cm9sLmM6MjUzOlx0cmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50KTtcbm1tL21lbWNvbnRyb2wuYy0yNTQtXG4tLVxubW0vbWVtY29udHJvbC5jLTI1Ny0jZWxzZVxubW0vbWVtY29udHJvbC5jOjI1ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbWVtY29udHJvbC5jLTI1OS17XG4tLVxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuLS1cbm1tL21lbWNvbnRyb2wuYy0zMDctXG5tbS9tZW1jb250cm9sLmM6MzA4Olx0cmVwYXJlbnRfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XG5tbS9tZW1jb250cm9sLmMtMzA5LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9NDgxPXN0cnVjdCBscnV2ZWNfc3RhdHMge1xuLS1cbm1tL21lbWNvbnRyb2wuYy00ODUtXHQvKiBOb24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgc3RhdGUgKi9cbm1tL21lbWNvbnRyb2wuYzo0ODY6XHRsb25nIHN0YXRlX2xvY2FsW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XG5tbS9tZW1jb250cm9sLmMtNDg3LVxuLS1cbm1tL21lbWNvbnRyb2wuYz01MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxuLS1cbm1tL21lbWNvbnRyb2wuYy01NDktXG5tbS9tZW1jb250cm9sLmM6NTUwOnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxubW0vbWVtY29udHJvbC5jLTU1MS1cdFx0XHRcdCAgICAgIGVudW0gbm9kZV9zdGF0X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01NjQtXHRwbiA9IGNvbnRhaW5lcl9vZihscnV2ZWMsIHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlLCBscnV2ZWMpO1xubW0vbWVtY29udHJvbC5jOjU2NTpcdHggPSBSRUFEX09OQ0UocG4tXHUwMDNlbHJ1dmVjX3N0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYy01NjYtI2lmZGVmIENPTkZJR19TTVBcbi0tXG5tbS9tZW1jb250cm9sLmM9NTc0PXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXG4tLVxubW0vbWVtY29udHJvbC5jLTU3Ni1cbm1tL21lbWNvbnRyb2wuYzo1Nzc6dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxubW0vbWVtY29udHJvbC5jLTU3OC1cdFx0XHRcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy01ODQtXHRcdHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhwYXJlbnQsIE5PREVfREFUQShuaWQpKTtcbm1tL21lbWNvbnRyb2wuYzo1ODU6XHRcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjaGlsZF9scnV2ZWMsIGlkeCk7XG5tbS9tZW1jb250cm9sLmMtNTg2LVx0XHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqY2hpbGRfcG4sICpwYXJlbnRfcG47XG4tLVxubW0vbWVtY29udHJvbC5jPTY3Mz1zdHJ1Y3QgbWVtY2dfdm1zdGF0cyB7XG4tLVxubW0vbWVtY29udHJvbC5jLTY3OS1cdC8qIE5vbi1oaWVyYXJjaGljYWwgKENQVSBhZ2dyZWdhdGVkKSBwYWdlIHN0YXRlIFx1MDAyNiBldmVudHMgKi9cbm1tL21lbWNvbnRyb2wuYzo2ODA6XHRsb25nXHRcdFx0c3RhdGVfbG9jYWxbTUVNQ0dfVk1TVEFUX1NJWkVdO1xubW0vbWVtY29udHJvbC5jOjY4MTpcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XG5tbS9tZW1jb250cm9sLmMtNjgyLSNlbmRpZlxuLS1cbm1tL21lbWNvbnRyb2wuYy02OTYtI2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jOjY5NzpzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTY5OC17XG5tbS9tZW1jb250cm9sLmM6Njk5Olx0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWw7XG5tbS9tZW1jb250cm9sLmMtNzAwLX1cbm1tL21lbWNvbnRyb2wuYy03MDEtXG5tbS9tZW1jb250cm9sLmM6NzAyOnN0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxubW0vbWVtY29udHJvbC5jLTcwMy17XG5tbS9tZW1jb250cm9sLmM6NzA0Olx0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX2xvY2FsO1xubW0vbWVtY29udHJvbC5jLTcwNS19XG5tbS9tZW1jb250cm9sLmMtNzA2LSNlbHNlXG5tbS9tZW1jb250cm9sLmM6NzA3OnN0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG5tbS9tZW1jb250cm9sLmMtNzA4LXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNzExLVxubW0vbWVtY29udHJvbC5jOjcxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbm1tL21lbWNvbnRyb2wuYy03MTMte1xuLS1cbm1tL21lbWNvbnRyb2wuYz04NjA9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxuLS1cbm1tL21lbWNvbnRyb2wuYy04NzgtICogVXNlZCBpbiBtb2RfbWVtY2dfc3RhdGUoKSBhbmQgbW9kX21lbWNnX2xydXZlY19zdGF0ZSgpIHRvIGF2b2lkIHJhY2Ugd2l0aFxubW0vbWVtY29udHJvbC5jOjg3OTogKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy5cbm1tL21lbWNvbnRyb2wuYy04ODAtICovXG4tLVxubW0vbWVtY29udHJvbC5jPTk0ND12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcbi0tXG5tbS9tZW1jb250cm9sLmMtOTU4LS8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cbm1tL21lbWNvbnRyb2wuYzo5NTk6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcbm1tL21lbWNvbnRyb2wuYy05NjAte1xuLS1cbm1tL21lbWNvbnRyb2wuYy05NjYtXG5tbS9tZW1jb250cm9sLmM6OTY3Olx0eCA9IFJFQURfT05DRShtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYy05NjgtI2lmZGVmIENPTkZJR19TTVBcbi0tXG5tbS9tZW1jb250cm9sLmMtOTc0LVxubW0vbWVtY29udHJvbC5jOjk3NTp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcbm1tL21lbWNvbnRyb2wuYy05NzYtXHRcdFx0XHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KVxubW0vbWVtY29udHJvbC5jLTk3Ny17XG5tbS9tZW1jb250cm9sLmM6OTc4Olx0dW5zaWduZWQgbG9uZyB2YWx1ZSA9IG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWwobWVtY2csIGlkeCk7XG5tbS9tZW1jb250cm9sLmMtOTc5LVxuLS1cbm1tL21lbWNvbnRyb2wuYz0xMTMyPWJvb2wgbWVtY2dfdm1fZXZlbnRfaXRlbV92YWxpZChlbnVtIHZtX2V2ZW50X2l0ZW0gaWR4KVxuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTQwLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcbm1tL21lbWNvbnRyb2wuYzoxMTQxOnVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KVxubW0vbWVtY29udHJvbC5jLTExNDIte1xuLS1cbm1tL21lbWNvbnRyb2wuYy0xMTQ3LVxubW0vbWVtY29udHJvbC5jOjExNDg6XHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzX2xvY2FsW2ldKTtcbm1tL21lbWNvbnRyb2wuYy0xMTQ5LX1cbi0tXG5tbS9tZW1jb250cm9sLmM9MTcyND11bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXG4tLVxubW0vbWVtY29udHJvbC5jLTE3MzAtI2lmZGVmIENPTkZJR19NRU1DR19WMVxubW0vbWVtY29udHJvbC5jOjE3MzE6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKVxubW0vbWVtY29udHJvbC5jLTE3MzIte1xubW0vbWVtY29udHJvbC5jOjE3MzM6XHRyZXR1cm4gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaXRlbSkgKlxubW0vbWVtY29udHJvbC5jLTE3MzQtXHRcdG1lbWNnX3BhZ2Vfc3RhdGVfb3V0cHV0X3VuaXQoaXRlbSk7XG4tLVxubW0vbWVtY29udHJvbC5jPTE5MTE9dm9pZCBfX21lbWNnX21lbW9yeV9ldmVudChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXG4tLVxubW0vbWVtY29udHJvbC5jLTE5MTktXG5tbS9tZW1jb250cm9sLmM6MTkyMDpcdGF0b21pY19sb25nX2luYyhcdTAwMjZtZW1jZy1cdTAwM2VtZW1vcnlfZXZlbnRzX2xvY2FsW2V2ZW50XSk7XG5tbS9tZW1jb250cm9sLmMtMTkyMS1cdGlmICghc3dhcF9ldmVudCBcdTAwMjZcdTAwMjYgYWxsb3dfc3Bpbm5pbmcpXG5tbS9tZW1jb250cm9sLmM6MTkyMjpcdFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFx1MDAyNm1lbWNnLVx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcbm1tL21lbWNvbnRyb2wuYy0xOTIzLVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NDk2PXN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCB7XG4tLVxubW0vbWVtY29udHJvbC5jLTQ1MDAtXHQgKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2FsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgb3IgTlVMTCB0b1xubW0vbWVtY29udHJvbC5jOjQ1MDE6XHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxubW0vbWVtY29udHJvbC5jLTQ1MDItXHQgKi9cbi0tXG5tbS9tZW1jb250cm9sLmM9NDU1Mz1zdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxubW0vbWVtY29udHJvbC5jLTQ1NTQte1xubW0vbWVtY29udHJvbC5jOjQ1NTU6XHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbm1tL21lbWNvbnRyb2wuYy00NTU2LVx0aW50IG5pZDtcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU2Mi1cdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gJiM0Mzs9IGttZW07XG5tbS9tZW1jb250cm9sLmM6NDU2MzpcdFx0aWYgKHN0YXRlX2xvY2FsKVxubW0vbWVtY29udHJvbC5jOjQ1NjQ6XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBrbWVtO1xubW0vbWVtY29udHJvbC5jLTQ1NjUtXHRcdGlmIChwYXJlbnQpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ1ODEtXHRcdFx0bHN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYzo0NTgyOlx0XHRcdGxzdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDU4My1cdFx0XHRpZiAocGxzdGF0cylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU4NS1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYzo0NTg2Olx0XHRcdGlmIChzdGF0ZV9sb2NhbClcbm1tL21lbWNvbnRyb2wuYzo0NTg3Olx0XHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jLTQ1ODgtXHRcdFx0aWYgKHBhcmVudClcbi0tXG5tbS9tZW1jb250cm9sLmMtNDU5NS1cdFx0XHRsc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jOjQ1OTY6XHRcdFx0bHN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSAmIzQzOz0gc2xhYjtcbm1tL21lbWNvbnRyb2wuYy00NTk3LVx0XHRcdGlmIChwbHN0YXRzKVxuLS1cbm1tL21lbWNvbnRyb2wuYy00NTk5LVx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICYjNDM7PSBzbGFiO1xubW0vbWVtY29udHJvbC5jOjQ2MDA6XHRcdFx0aWYgKHN0YXRlX2xvY2FsKVxubW0vbWVtY29udHJvbC5jOjQ2MDE6XHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gJiM0Mzs9IHNsYWI7XG5tbS9tZW1jb250cm9sLmMtNDYwMi1cdFx0XHRpZiAocGFyZW50KVxuLS1cbm1tL21lbWNvbnRyb2wuYz00NjEyPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MjUtXHRcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlLFxubW0vbWVtY29udHJvbC5jOjQ2MjY6XHRcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcbm1tL21lbWNvbnRyb2wuYy00NjI3LVx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbi0tXG5tbS9tZW1jb250cm9sLmMtNDYzNi1cdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxubW0vbWVtY29udHJvbC5jOjQ2Mzc6XHRcdC5sb2NhbCA9IG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheShtZW1jZyksXG5tbS9tZW1jb250cm9sLmMtNDYzOC1cdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nLFxuLS1cbm1tL21lbWNvbnRyb2wuYy00NjU4LVx0XHRcdC5hZ2dyZWdhdGUgPSBsc3RhdHMtXHUwMDNlc3RhdGUsXG5tbS9tZW1jb250cm9sLmM6NDY1OTpcdFx0XHQubG9jYWwgPSBsc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWwsXG5tbS9tZW1jb250cm9sLmMtNDY2MC1cdFx0XHQucGVuZGluZyA9IGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nLFxuLS1cbm1tL21lbWNvbnRyb2wuYz01MDM0PXN0YXRpYyBpbnQgbWVtb3J5X2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA0MS1cbm1tL21lbWNvbnRyb2wuYzo1MDQyOnN0YXRpYyBpbnQgbWVtb3J5X2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbm1tL21lbWNvbnRyb2wuYy01MDQzLXtcbi0tXG5tbS9tZW1jb250cm9sLmMtNTA0NS1cbm1tL21lbWNvbnRyb2wuYzo1MDQ2Olx0X19tZW1vcnlfZXZlbnRzX3Nob3cobSwgbWVtY2ctXHUwMDNlbWVtb3J5X2V2ZW50c19sb2NhbCk7XG5tbS9tZW1jb250cm9sLmMtNTA0Ny1cdHJldHVybiAwO1xuLS1cbm1tL21lbWNvbnRyb2wuYz01MTQ3PXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIG1lbW9yeV9maWxlc1tdID0ge1xuLS1cbm1tL21lbWNvbnRyb2wuYy01MTkzLVx0XHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXG5tbS9tZW1jb250cm9sLmM6NTE5NDpcdFx0LmZpbGVfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1lbV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcbm1tL21lbWNvbnRyb2wuYzo1MTk1Olx0XHQuc2VxX3Nob3cgPSBtZW1vcnlfZXZlbnRzX2xvY2FsX3Nob3csXG5tbS9tZW1jb250cm9sLmMtNTE5Ni1cdH0sXG4tLVxubW0vd29ya2luZ3NldC5jPTY1MT1zdGF0aWMgdW5zaWduZWQgbG9uZyBjb3VudF9zaGFkb3dfbm9kZXMoc3RydWN0IHNocmlua2VyICpzaHJpbmtlcixcblxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNTMxMgoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDI3MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1lbWNnIFZNc3RhdHMgUGF0Y2gqKgoKT2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIHBhdGNoIHdpdGggYSBjcml0aWNhbCBleWUuIEkgc2VlIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG1lbWNnX3Ztc3RhdHNgIHN0cnVjdHVyZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbm90aWNlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbjsgdGhlIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGZpZWxkcyBhcmUgb25seSBwcmVzZW50IGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQuIEEgY2xhc3NpYyBtZW1vcnkgb3B0aW1pemF0aW9uIHN0cmF0ZWd5IOKAkyBvbWl0IHRoZSBmaWVsZHMgd2hlbiB0aGV5IGFyZW4mIzM5O3QgdXNlZC4gQ2xldmVyLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHN1YnRsZSBpc3N1ZXMuIENvdWxkIHRoZXJlIGJlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIGx1cmtpbmcgaGVyZT8gQSBwb3RlbnRpYWwgaW5mb3JtYXRpb24gbGVhayB0byB1c2VyIHNwYWNlPyBVbmluaXRpYWxpemVkIHN0cnVjdCBmaWVsZHMgYmVpbmcgYWNjZXNzZWQ/IFVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzIGluZmx1ZW5jaW5nIGJyYW5jaGluZz8gTXkgZXhwZXJ0IGludHVpdGlvbiB0ZWxscyBtZSB0byB0aG9yb3VnaGx5IGludmVzdGlnYXRlIHRoZXNlIHBvc3NpYmlsaXRpZXMuCgpBbHJpZ2h0LCB0aGUgaGVscGVyIGZ1bmN0aW9ucyBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKWAgYW5kIGBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoKWAgc2VlbSB0byBiZSB0aGUga2V5LiBUaGV5IGVpdGhlciByZXR1cm4gdGhlIGBzdGF0ZV9sb2NhbGAgb3IgYGV2ZW50c19sb2NhbGAgYXJyYXlzIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGFjdGl2ZSwgb3IgTlVMTCBvdGhlcndpc2UuIFRoYXQmIzM5O3MgZ29vZCwgcHJvdmlkaW5nIGEgc2FmZSB3YXkgdG8gaGFuZGxlIHRoZSBjb25kaXRpb25hbCBwcmVzZW5jZSBvZiB0aGVzZSBmaWVsZHMuIFRoZSBjYWxsZXJzLCBzcGVjaWZpY2FsbHkgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoKWAsIGBmbHVzaF9ubWlfc3RhdHMoKWAsIGFuZCBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goKWAsIHNlZW0gdG8gYmUgdXNpbmcgdGhlc2UgaGVscGVyIGZ1bmN0aW9ucyBvciBleHBsaWNpdGx5IGNoZWNraW5nIGZvciBOVUxMLCB3aGljaCBpcyB0aGUgY29ycmVjdCBhcHByb2FjaC4gU28sIGF0IGZpcnN0IGdsYW5jZSwgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSBvYnZpb3VzIHJlZCBmbGFncy4KCk5vdywgbGV0JiMzOTtzIHZlcmlmeS4gSSBuZWVkIHRvIHRyYWNlIHdoZXJlIHRoaXMgYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBpcyBhbGxvY2F0ZWQgYW5kIGluaXRpYWxpemVkLiBJIG5lZWQgdG8gbWFrZSBzdXJlIHRoYXQgdGhlIHN0cnVjdHVyZSBpdHNlbGYgaXMgYWxsb2NhdGVkIGFuZCB0aGUgZmllbGRzIGFyZSBwcm9wZXJseSBpbml0aWFsaXplZCwgZXNwZWNpYWxseSB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQgb3IgZGlzYWJsZWQuIFRoaXMgaXMgd2hlcmUgSSYjMzk7bGwgZmluZCBvdXQgdGhlIHJlYWwgdHJ1dGguCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBtZW1jZ192bXN0YXRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21lbWNvbnRyb2wuYz02NDk9c3RhdGljIGlubGluZSBpbnQgbWVtY2dfZXZlbnRzX2luZGV4KGVudW0gdm1fZXZlbnRfaXRlbSBpZHgpXG4tLVxubW0vbWVtY29udHJvbC5jLTY1My1cbm1tL21lbWNvbnRyb2wuYzo2NTQ6c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IHtcbm1tL21lbWNvbnRyb2wuYy02NTUtXHQvKiBTdGF0cyB1cGRhdGVzIHNpbmNlIHRoZSBsYXN0IGZsdXNoICovXG4tLVxubW0vbWVtY29udHJvbC5jLTY1OC1cdC8qIENhY2hlZCBwb2ludGVycyBmb3IgZmFzdCBpdGVyYXRpb24gaW4gbWVtY2dfcnN0YXRfdXBkYXRlZCgpICovXG5tbS9tZW1jb250cm9sLmM6NjU5Olx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1XHQqcGFyZW50X3BjcHU7XG5tbS9tZW1jb250cm9sLmM6NjYwOlx0c3RydWN0IG1lbWNnX3Ztc3RhdHNcdFx0XHQqdm1zdGF0cztcbm1tL21lbWNvbnRyb2wuYy02NjEtXG4tLVxubW0vbWVtY29udHJvbC5jLTY3Mi1cbm1tL21lbWNvbnRyb2wuYzo2NzM6c3RydWN0IG1lbWNnX3Ztc3RhdHMge1xubW0vbWVtY29udHJvbC5jLTY3NC1cdC8qIEFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSkgcGFnZSBzdGF0ZSBcdTAwMjYgZXZlbnRzICovXG4tLVxubW0vbWVtY29udHJvbC5jPTczNT1zdGF0aWMgdTY0IGZsdXNoX2xhc3RfdGltZTtcbi0tXG5tbS9tZW1jb250cm9sLmMtNzM4LVxubW0vbWVtY29udHJvbC5jOjczOTpzdGF0aWMgYm9vbCBtZW1jZ192bXN0YXRzX25lZWRzX2ZsdXNoKHN0cnVjdCBtZW1jZ192bXN0YXRzICp2bXN0YXRzKVxubW0vbWVtY29udHJvbC5jLTc0MC17XG4tLVxubW0vbWVtY29udHJvbC5jPTc0NT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfcnN0YXRfdXBkYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGxvbmcgdmFsLFxuLS1cbm1tL21lbWNvbnRyb2wuYy03NDcte1xubW0vbWVtY29udHJvbC5jOjc0ODpcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSBfX3BlcmNwdSAqc3RhdGNfcGNwdTtcbm1tL21lbWNvbnRyb2wuYzo3NDk6XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xubW0vbWVtY29udHJvbC5jLTc1MC1cdHVuc2lnbmVkIGxvbmcgc3RhdHNfdXBkYXRlcztcbi0tXG5tbS9tZW1jb250cm9sLmM9NDIwMD1zdGF0aWMgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfYWxsb2Moc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbm1tL21lbWNvbnRyb2wuYy00MjAxLXtcbm1tL21lbWNvbnRyb2wuYzo0MjAyOlx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0Yztcbm1tL21lbWNvbnRyb2wuYzo0MjAzOlx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcbm1tL21lbWNvbnRyb2wuYy00MjA0LVx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnO1xuLS1cbm1tL21lbWNvbnRyb2wuYy00MjE4LVxubW0vbWVtY29udHJvbC5jOjQyMTk6XHRtZW1jZy1cdTAwM2V2bXN0YXRzID0ga3phbGxvY19vYmooc3RydWN0IG1lbWNnX3Ztc3RhdHMsIEdGUF9LRVJORUxfQUNDT1VOVCk7XG5tbS9tZW1jb250cm9sLmMtNDIyMC1cdGlmICghbWVtY2ctXHUwMDNldm1zdGF0cylcbi0tXG5tbS9tZW1jb250cm9sLmMtNDIyMi1cbm1tL21lbWNvbnRyb2wuYzo0MjIzOlx0bWVtY2ctXHUwMDNldm1zdGF0c19wZXJjcHUgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSxcbm1tL21lbWNvbnRyb2wuYy00MjI0LVx0XHRcdFx0XHRcdCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xuLS1cbm1tL21lbWNvbnRyb2wuYz00NjEyPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4tLVxubW0vbWVtY29udHJvbC5jLTQ2MTUtXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xubW0vbWVtY29udHJvbC5jOjQ2MTY6XHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xubW0vbWVtY29udHJvbC5jLTQ2MTctXHRzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wgYWM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAyIDEwOjM5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2ODkyCgkJCQkJCQlvdXRwdXQ6IDI0MgoJCQkJCQkJdGhvdWdodHM6IDQ5MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgRnV6emluZyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gd2FzIHdoZXRoZXIgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvZiBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBpbiBgbWVtY2ctJmd0O3Ztc3RhdHNgIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dfVjFgIGNvdWxkIGludHJvZHVjZSBhbnkgc3VidGxlIGlzc3VlcywgZXNwZWNpYWxseSBhcm91bmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0LCBhZnRlciBhIGNsb3NlciBsb29rLCBpdCBzZWVtcyBwcmV0dHkgY2xlYW4uCgpga3phbGxvY19vYmpgIGVuc3VyZXMgdGhlIGVudGlyZSBgbWVtY2ctJmd0O3Ztc3RhdHNgIGlzIHplcm9lZCBvdXQgYXQgYWxsb2NhdGlvbi4gIElmIGBDT05GSUdfTUVNQ0dfVjFgIGlzICpub3QqIHNldCwgdGhlIG9taXR0ZWQgZmllbGRzIGRlZmF1bHQgdG8gTlVMTCwgYW5kIHRoZSByZWxldmFudCBmdW5jdGlvbnMgaW5jbHVkZSBleHBsaWNpdCBOVUxMIGNoZWNrcyBiZWZvcmUgYWNjZXNzaW5nIHRoZXNlIHZhcmlhYmxlcyBkdXJpbmcgYWdncmVnYXRpb24gYW5kIE5NSSBmbHVzaGVzLiAgSWYgYENPTkZJR19NRU1DR19WMWAgKmlzKiBzZXQsIGV2ZXJ5dGhpbmcgaXMgaW5pdGlhbGl6ZWQgdG8gemVyby4gU28sIHRoYXQgaW5pdGlhbCBjb25jZXJuIGlzIGFkZHJlc3NlZC4KCkkgdGhlbiByYW4gdGhyb3VnaCB0aGUgS01TQU4gJiMzNDtOZWVkc0tNU0FOPXRydWUmIzM0OyBjcml0ZXJpYSwgYW5kIG5vbmUgb2YgdGhlbSBhcHBseSBoZXJlOiBubyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkLCB0aGVyZSYjMzk7cyBubyBjb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiB1bmluaXRpYWxpemVkIHZhcmlhYmxlcywgd2UgYXJlbiYjMzk7dCBkZWFsaW5nIHdpdGggY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgYmUgcmVhZCBsYXRlciwgYW5kIHRoZXJlIGFyZSBubyBib3VuZHMgY2hlY2tzIG9yIGxvZ2ljIHRoYXQgY291bGQgYWxsb3cgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuCgpFdmVuIGlmIHRoZXJlICp3ZXJlKiBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgS0FTQU4gd291bGQgcGljayBpdCB1cC4gQW55IG90aGVyIHBvdGVudGlhbCBpc3N1ZXMsIGxpa2UgaW52YWxpZCBpbmRleGluZyBkdWUgdG8gYSBsb2dpYyBlcnJvciwgd291bGQgYmUgZmxhZ2dlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIG9yIEtBU0FOLCB0b28uIFdlIGFyZW4mIzM5O3QgY3JlYXRpbmcgdW5pbml0aWFsaXplZCBtZW1vcnkgdGhhdCYjMzk7cyBleHBvc2VkIHRvIHVzZXJzcGFjZS4KClRoZXJlZm9yZSwgS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLiBXZSYjMzk7cmUgc2FmZSB0byBwcm9jZWVkIHdpdGhvdXQgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uLiBMZXQmIzM5O3MgZmlyZSB1cCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMiAxMDozOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxuXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzLlxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxuMy4gS0FTQU4gdnMgS01TQU46IEFueSBwb3RlbnRpYWwgcmVncmVzc2lvbnMgZnJvbSB0aGlzIGNoYW5nZSAoZS5nLiBOVUxMIHBvaW50ZXIgZGVyZWZlcmVuY2Ugd2hlbiBhY2Nlc3NpbmcgYGxvY2FsYCBpZiBhIGNoZWNrIHdhcyBtaXNzaW5nLCBvciBvdXQtb2YtYm91bmRzIGFycmF5IGFjY2VzcykgYXJlIGNvdmVyZWQgYnkgc3RhbmRhcmQga2VybmVsIGJ1ZyBkZXRlY3RvcnMgYW5kIEtBU0FOLiBLTVNBTiBzcGVjaWZpY2FsbHkgZGV0ZWN0cyB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBhbmQgaW5mb3JtYXRpb24gbGVha3MsIG5laXRoZXIgb2Ygd2hpY2ggYXJlIGludHJvZHVjZWQgb3IgbW9kaWZpZWQgaGVyZS5cblxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGNvbmRpdGlvbmFsbHkgY29tcGlsZXMgb3V0IHRoZSBsZWdhY3kgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgc3RhdCBhcnJheXMgZnJvbSBgc3RydWN0IG1lbWNnX3Ztc3RhdHNgIHdoZW4gYENPTkZJR19NRU1DR19WMWAgaXMgZGlzYWJsZWQsIGFkZGluZyBoZWxwZXIgYWNjZXNzb3JzIGFuZCBOVUxMIGNoZWNrcyBpbiB0aGUgYWdncmVnYXRpb24gYW5kIHN0YXQgZmx1c2hpbmcgcGF0aHMuXG5cbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGFsbCBmaWVsZHMuXG4yLiBVbmluaXRpYWxpemVkIE1lbW9yeSAvIEluZm8tbGVhayBSaXNrOiBObyB1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IG9yIHN0cnVjdHVyZSBwYWRkaW5nIGlzIGV4cG9zZWQsIGNvcGllZCB0byB1c2Vyc3BhY2UsIG9yIGJyYW5jaGVkIHVwb24uXG4zLiBLQVNBTiB2cyBLTVNBTjogQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgbG9jYWxgIGlmIGEgY2hlY2sgd2FzIG1pc3NpbmcsIG9yIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIHNwZWNpZmljYWxseSBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcywgbmVpdGhlciBvZiB3aGljaCBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCBoZXJlLlxuXG5UaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozMzo0Ny4zODE0Mzg1ODZaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNDYyNzI1OTgyNDksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X3N0YXRfc2hvd1wiLFxuICAgIFwibWVtY2dfcGFnZV9zdGF0ZV9sb2NhbFwiLFxuICAgIFwibWVtY2dfZXZlbnRzX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiLFxuICAgIFwicmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxcblxcbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGFsbCBmaWVsZHMuXFxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcbjMuIEtBU0FOIHZzIEtNU0FOOiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBsb2NhbGAgaWYgYSBjaGVjayB3YXMgbWlzc2luZywgb3Igb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gc3BlY2lmaWNhbGx5IGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzLCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGhlcmUuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25kaXRpb25hbGx5IHJlbW92ZXMgbGVnYWN5IHYxLW9ubHkgbG9jYWwgc3RhdGlzdGljcyAoc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCkgZnJvbSBzdHJ1Y3QgbWVtY2dfdm1zdGF0cyB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZCwgYW5kIGFkZHMgTlVMTCBjaGVja3MgZHVyaW5nIHN0YXRzIGZsdXNoaW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbWNnIHN0YXRpc3RpY3MgYWNjb3VudGluZyBhbmQgcmVwYXJlbnRpbmcgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHdpdGggYm90aCBjZ3JvdXAgdjEgYW5kIHYyIHdvcmtsb2Fkcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6MzM6NDcuMzgxNDQzMDc1WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MTQzODI0MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA2MjliYjNiNWVkNDk4YzIxZGJkZjE1YTViYjRmZjA1NWFjMmZhMjFjXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBXZWQgU2VwIDIgMTA6MzM6NDYgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vbWVtY29udHJvbC5jIGIvbW0vbWVtY29udHJvbC5jXFxuaW5kZXggN2NlNTBiY2NmMTI2NC4uYjk4YjJkNjhjNjJiZSAxMDA2NDRcXG4tLS0gYS9tbS9tZW1jb250cm9sLmNcXG4rKysgYi9tbS9tZW1jb250cm9sLmNcXG5AQCAtNjc1LDkgKzY3NSwxMSBAQCBzdHJ1Y3QgbWVtY2dfdm1zdGF0cyB7XFxuIFxcdGxvbmdcXHRcXHRcXHRzdGF0ZVtNRU1DR19WTVNUQVRfU0laRV07XFxuIFxcdHVuc2lnbmVkIGxvbmdcXHRcXHRldmVudHNbTlJfTUVNQ0dfRVZFTlRTXTtcXG4gXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXFx1MDAyNiBldmVudHMgKi9cXG4gXFx0bG9uZ1xcdFxcdFxcdHN0YXRlX2xvY2FsW01FTUNHX1ZNU1RBVF9TSVpFXTtcXG4gXFx0dW5zaWduZWQgbG9uZ1xcdFxcdGV2ZW50c19sb2NhbFtOUl9NRU1DR19FVkVOVFNdO1xcbisjZW5kaWZcXG4gXFxuIFxcdC8qIFBlbmRpbmcgY2hpbGQgY291bnRzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXFxuIFxcdGxvbmdcXHRcXHRcXHRzdGF0ZV9wZW5kaW5nW01FTUNHX1ZNU1RBVF9TSVpFXTtcXG5AQCAtNjg3LDYgKzY4OSwzMiBAQCBzdHJ1Y3QgbWVtY2dfdm1zdGF0cyB7XFxuIFxcdGF0b21pY19sb25nX3RcXHRcXHRzdGF0c191cGRhdGVzO1xcbiB9O1xcbiBcXG4rLypcXG4rICogVGhlIG5vbi1oaWVyYXJjaGljYWwgbWVtY2ctd2lkZSBjb3VudGVycyBhcmUgcmVhZCBiYWNrIG9ubHkgYnkgdGhlIGxlZ2FjeVxcbisgKiBtZW1vcnkuc3RhdCBhbmQgYnkgcmVwYXJlbnRpbmcgb24gb2ZmbGluZSwgYm90aCBvZiB3aGljaCBhcmUgdjEtb25seS5cXG4rICovXFxuKyNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4rc3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRyZXR1cm4gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRyZXR1cm4gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c19sb2NhbDtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbit7XFxuK1xcdHJldHVybiBOVUxMO1xcbit9XFxuK1xcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG4re1xcbitcXHRyZXR1cm4gTlVMTDtcXG4rfVxcbisjZW5kaWZcXG4rXFxuIC8qXFxuICAqIG1lbWNnIGFuZCBscnV2ZWMgc3RhdHMgZmx1c2hpbmdcXG4gICpcXG5AQCAtNDQ2OCw3ICs0NDk2LDEwIEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3Jlc2V0KHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MpXFxuIHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCB7XFxuIFxcdC8qIHBvaW50ZXIgdG8gdGhlIGFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSBhZ2dyZWdhdGVkKSBjb3VudGVycyAqL1xcbiBcXHRsb25nICphZ2dyZWdhdGU7XFxuLVxcdC8qIHBvaW50ZXIgdG8gdGhlIG5vbi1oaWVyYXJjaGljaGFsIChDUFUgYWdncmVnYXRlZCkgY291bnRlcnMgKi9cXG4rXFx0LypcXG4rXFx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cXG4rXFx0ICogc2tpcCB1cGRhdGluZyB0aGVtIChzZWUgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKSlcXG4rXFx0ICovXFxuIFxcdGxvbmcgKmxvY2FsO1xcbiBcXHQvKiBwb2ludGVyIHRvIHRoZSBwZW5kaW5nIGNoaWxkIGNvdW50ZXJzIGR1cmluZyB0cmVlIHByb3BhZ2F0aW9uICovXFxuIFxcdGxvbmcgKnBlbmRpbmc7XFxuQEAgLTQ1MDcsNyArNDUzOCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcXG4gXFx0XFx0fVxcbiBcXG4gXFx0XFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xcbi1cXHRcXHRpZiAoZGVsdGFfY3B1KVxcbitcXHRcXHRpZiAoZGVsdGFfY3B1IFxcdTAwMjZcXHUwMDI2IGFjLVxcdTAwM2Vsb2NhbClcXG4gXFx0XFx0XFx0YWMtXFx1MDAzZWxvY2FsW2ldICs9IGRlbHRhX2NwdTtcXG4gXFxuIFxcdFxcdGlmIChkZWx0YSkge1xcbkBAIC00NTIxLDYgKzQ1NTIsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXFxuICNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4ge1xcbitcXHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcXG4gXFx0aW50IG5pZDtcXG4gXFxuIFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW1fc3RhdCkpIHtcXG5AQCAtNDUyOCw3ICs0NTYwLDggQEAgc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4gXFx0XFx0aW50IGluZGV4ID0gbWVtY2dfc3RhdHNfaW5kZXgoTUVNQ0dfS01FTSk7XFxuIFxcbiBcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IGttZW07XFxuLVxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0ga21lbTtcXG4rXFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbitcXHRcXHRcXHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0ga21lbTtcXG4gXFx0XFx0aWYgKHBhcmVudClcXG4gXFx0XFx0XFx0cGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBrbWVtO1xcbiBcXHR9XFxuQEAgLTQ1NTAsNyArNDU4Myw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuIFxcdFxcdFxcdGlmIChwbHN0YXRzKVxcbiBcXHRcXHRcXHRcXHRwbHN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxuLVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG4rXFx0XFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbitcXHRcXHRcXHRcXHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG4gXFx0XFx0XFx0aWYgKHBhcmVudClcXG4gXFx0XFx0XFx0XFx0cGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHR9XFxuQEAgLTQ1NjMsNyArNDU5Nyw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuIFxcdFxcdFxcdGlmIChwbHN0YXRzKVxcbiBcXHRcXHRcXHRcXHRwbHN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHRcXHRtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxuLVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG4rXFx0XFx0XFx0aWYgKHN0YXRlX2xvY2FsKVxcbitcXHRcXHRcXHRcXHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG4gXFx0XFx0XFx0aWYgKHBhcmVudClcXG4gXFx0XFx0XFx0XFx0cGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xcbiBcXHRcXHR9XFxuQEAgLTQ1ODgsNyArNDYyMyw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuIFxcbiBcXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcXG4gXFx0XFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZSxcXG4tXFx0XFx0LmxvY2FsID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsLFxcbitcXHRcXHQubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyksXFxuIFxcdFxcdC5wZW5kaW5nID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxuIFxcdFxcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZyA6IE5VTEwsXFxuIFxcdFxcdC5jc3RhdCA9IHN0YXRjLVxcdTAwM2VzdGF0ZSxcXG5AQCAtNDU5OSw3ICs0NjM0LDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcXG4gXFxuIFxcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xcbiBcXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50cyxcXG4tXFx0XFx0LmxvY2FsID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c19sb2NhbCxcXG4rXFx0XFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcXG4gXFx0XFx0LnBlbmRpbmcgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX3BlbmRpbmcsXFxuIFxcdFxcdC5wcGVuZGluZyA9IHBhcmVudCA/IHBhcmVudC1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzX3BlbmRpbmcgOiBOVUxMLFxcbiBcXHRcXHQuY3N0YXQgPSBzdGF0Yy1cXHUwMDNlZXZlbnRzLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozMzo0Ny44OTg5NDE1ODRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjI3OTM1MjI2OTY2NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJNRU1DR1wiLFxuICAgIFwiTUVNQ0dfVjFcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtZW1vcnlfc3RhdF9zaG93XCIsXG4gICAgXCJtZW1jZ19wYWdlX3N0YXRlX2xvY2FsXCIsXG4gICAgXCJtZW1jZ19ldmVudHNfbG9jYWxcIixcbiAgICBcInJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWxcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25kaXRpb25hbGx5IHJlbW92ZXMgbGVnYWN5IHYxLW9ubHkgbG9jYWwgc3RhdGlzdGljcyAoc3RhdGVfbG9jYWwgYW5kIGV2ZW50c19sb2NhbCkgZnJvbSBzdHJ1Y3QgbWVtY2dfdm1zdGF0cyB3aGVuIENPTkZJR19NRU1DR19WMSBpcyBkaXNhYmxlZCwgYW5kIGFkZHMgTlVMTCBjaGVja3MgZHVyaW5nIHN0YXRzIGZsdXNoaW5nIGFuZCBhZ2dyZWdhdGlvbi4gVGhpcyBtb2RpZmllcyBjb3JlIG1lbWNnIHN0YXRpc3RpY3MgYWNjb3VudGluZyBhbmQgcmVwYXJlbnRpbmcgbG9naWMsIG1ha2luZyBpdCB3b3J0aCBmdXp6aW5nIHdpdGggYm90aCBjZ3JvdXAgdjEgYW5kIHYyIHdvcmtsb2Fkcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI5YmIzYjVlZDQ5OGMyMWRiZGYxNWE1YmI0ZmYwNTVhYzJmYTIxY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTA6MzM6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDdjZTUwYmNjZjEyNjQuLmI5OGIyZDY4YzYyYmUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTY3NSw5ICs2NzUsMTEgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xuIFx0bG9uZ1x0XHRcdHN0YXRlW01FTUNHX1ZNU1RBVF9TSVpFXTtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzW05SX01FTUNHX0VWRU5UU107XG4gXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXHUwMDI2IGV2ZW50cyAqL1xuIFx0bG9uZ1x0XHRcdHN0YXRlX2xvY2FsW01FTUNHX1ZNU1RBVF9TSVpFXTtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XG4rI2VuZGlmXG4gXG4gXHQvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZ1x0XHRcdHN0YXRlX3BlbmRpbmdbTUVNQ0dfVk1TVEFUX1NJWkVdO1xuQEAgLTY4Nyw2ICs2ODksMzIgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRzdGF0c191cGRhdGVzO1xuIH07XG4gXG4rLypcbisgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5XG4rICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuXG4rICovXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuK3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK1x0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWw7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbDtcbit9XG4rI2Vsc2VcbitzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nXG4gICpcbkBAIC00NDY4LDcgKzQ0OTYsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xuIFx0LyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4gXHRsb25nICphZ2dyZWdhdGU7XG4tXHQvKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2hhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4rXHQvKlxuK1x0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbitcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXG4rXHQgKi9cbiBcdGxvbmcgKmxvY2FsO1xuIFx0LyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZyAqcGVuZGluZztcbkBAIC00NTA3LDcgKzQ1MzgsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gXHRcdH1cbiBcbiBcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuLVx0XHRpZiAoZGVsdGFfY3B1KVxuK1x0XHRpZiAoZGVsdGFfY3B1IFx1MDAyNlx1MDAyNiBhYy1cdTAwM2Vsb2NhbClcbiBcdFx0XHRhYy1cdTAwM2Vsb2NhbFtpXSArPSBkZWx0YV9jcHU7XG4gXG4gXHRcdGlmIChkZWx0YSkge1xuQEAgLTQ1MjEsNiArNDU1Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcbiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4rXHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbiBcdGludCBuaWQ7XG4gXG4gXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNla21lbV9zdGF0KSkge1xuQEAgLTQ1MjgsNyArNDU2MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdGludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pO1xuIFxuIFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSArPSBrbWVtO1xuLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xuK1x0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IGttZW07XG4gXHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0ga21lbTtcbiBcdH1cbkBAIC00NTUwLDcgKzQ1ODMsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbitcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcbiBcdFx0fVxuQEAgLTQ1NjMsNyArNDU5Nyw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdFx0aWYgKHBsc3RhdHMpXG4gXHRcdFx0XHRwbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XG4gXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcbi1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuK1x0XHRcdGlmIChzdGF0ZV9sb2NhbClcbitcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0XHRwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHR9XG5AQCAtNDU4OCw3ICs0NjIzLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcbiBcbiBcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuIFx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZSxcbi1cdFx0LmxvY2FsID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxuIFx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZXN0YXRlLFxuQEAgLTQ1OTksNyArNDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuLVx0XHQubG9jYWwgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcbiBcdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nLFxuIFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZWV2ZW50cyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjMzOjQ3Ljg5ODk0NDA4NFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEyNzYyMjU5NTg1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUHJvcG9zZWQgUGF0Y2g6IGBtbS9tZW1jb250cm9sLmNgIE1vZGlmaWNhdGlvbnMqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCBhbmQgc2VlIHdoYXQncyBiZWluZyB0d2Vha2VkLiBJdCBsb29rcyBsaWtlIHRoZSB0YXJnZXQgaXMgYG1tL21lbWNvbnRyb2wuY2AuIFJpZ2h0IG9mZiB0aGUgYmF0LCBJIHNlZSBzb21lIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGFyb3VuZCB0aGUgYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBzdHJ1Y3R1cmUuIFNwZWNpZmljYWxseSwgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgYXJlIGd1YXJkZWQgYnkgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLiBJbnRlcmVzdGluZy4gTG9va3MgbGlrZSB3ZSdyZSBkZWFsaW5nIHdpdGggdmVyc2lvbmVkIG1lbWNnIHN0YXRzLlxuXG5UaGUgaW50cm9kdWN0aW9uIG9mIGBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheWAgYW5kIGBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXlgIHN1Z2dlc3RzIHdlIGhhdmUgdXRpbGl0eSBmdW5jdGlvbnMgdGhhdCBjb25kaXRpb25hbGx5IHJldHVybiBOVUxMIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzbid0IGVuYWJsZWQuIEdvb2QgcHJhY3RpY2UsIGtlZXBzIHRoaW5ncyBjbGVhbmVyIGFuZCBwcmV2ZW50cyBwb3RlbnRpYWwgYnVpbGQgaXNzdWVzLiBJJ20gYXNzdW1pbmcgdGhlc2UgYXJlIG1lYW50IHRvIGJlIHVzZWQgd2hlbiB2ZXJzaW9uIDEgb2YgbWVtY2cgaXMgKm5vdCogZW5hYmxlZC5cblxuTG9va2luZyBhdCBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIHRoZXJlJ3MgYSBjb25kaXRpb25hbCBgaWYgKGRlbHRhX2NwdSBcdTAwMjZcdTAwMjYgYWMtXHUwMDNlbG9jYWwpYC4gVGhlIHByZXNlbmNlIG9mIGBhYy1cdTAwM2Vsb2NhbGAgaXMgdGVsbGluZywgYW5kIGl0IHdpbGwgYmUgZGVwZW5kZW50IG9uIHRoZSBhcnJheSByZXR1cm5zLiBgZmx1c2hfbm1pX3N0YXRzYCBhbHNvIGNoZWNrcyBgaWYgKHN0YXRlX2xvY2FsKSAuLi5gLiBBbmQgaW4gYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYCwgd2Ugc2VlIGAubG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZylgLCBldGMuIFNvLCB0aGlzIGxvb2tzIGxpa2UgdGhlIGxvY2FsIGFycmF5cyBhcmUgYmVpbmcgYXNzaWduZWQgdG8gdGhlIGAubG9jYWxgIGVsZW1lbnQgb2YgYSBzdHJ1Y3R1cmUuXG5cblRvIGdldCBhIGJldHRlciBwaWN0dXJlLCBJJ20gZ29pbmcgdG8ganVtcCBpbnRvIHRoZSBjb2RlIGl0c2VsZi4gSSdsbCBuZWVkIHRvIGNoZWNrIGBtbS9tZW1jb250cm9sLmNgIGFuZCBwb3RlbnRpYWxseSBgbW0vbWVtY29udHJvbC12MS5jYCBvciB0aGUgS2NvbmZpZyBmaWxlcy4gQSBxdWljayBgZ3JlcHBlcmAgcnVuIG9yIGV2ZW4gYSByZWFkLWZpbGUgb3BlcmF0aW9uIGFyb3VuZCB0aGVzZSBsaW5lcyBpbiBgbW0vbWVtY29udHJvbC5jYCBhbmQgYSBsb29rIGF0IHRoZSByZWxldmFudCBLY29uZmlnIG9wdGlvbnMgc2hvdWxkIHF1aWNrbHkgaWxsdW1pbmF0ZSB0aGUgaW50ZW50IGFuZCBhbnkgcG90ZW50aWFsIGltcGxpY2F0aW9ucyBvZiB0aGVzZSBjaGFuZ2VzIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgbWVtY2cgZWNvc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTEzLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjI5LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6MzQ6MDAuNjYxMjA1OTFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTIwMzk2OTA2LCJFcnJvciI6Im5vIG1hdGNoZXMiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNQ0dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozNDowMC43ODE2MTMxMzRaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNTAwMzg5ODY2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipIdW50aW5nIERvd24gTUVNQ0cgQ29uZmlndXJhdGlvbioqXG5cbk9rYXksIHNvIEkgbmVlZCB0byB0cmFjayBkb3duIHdoZXJlIHRoZSBNRU1DRyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXJlIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBidWlsZCBzeXN0ZW0uIEdpdmVuIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIGtlcm5lbCdzIG1vZHVsYXJpdHkgYW5kIHRoZSB0eXBpY2FsIGRpcmVjdG9yeSBzdHJ1Y3R1cmUsIHRoZSBtb3N0IGxvZ2ljYWwgcGxhY2VzIHRvIHN0YXJ0IGxvb2tpbmcgYXJlIGVpdGhlciBgaW5pdC9LY29uZmlnYCBvciBgbW0vS2NvbmZpZ2AuIGBpbml0L0tjb25maWdgIGlzIG9mdGVuIHRoZSBwbGFjZSBmb3IgZ2xvYmFsIG9yIGZvdW5kYXRpb25hbCBzZXR0aW5ncywgd2hpbGUgYG1tL0tjb25maWdgIHdvdWxkIHNlZW0gbGlrZSB0aGUgbW9zdCBsb2dpY2FsIGxvY2F0aW9uIGZvciBtZW1vcnktcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSSdsbCBsaWtlbHkgZmluZCB0aGUgZGVmaW5pdGlvbiBvZiB0aGUgYE1FTUNHYCBzeW1ib2wgb3IgYSBjbG9zZWx5IHJlbGF0ZWQgb3B0aW9uIHdpdGhpbiBvbmUgb2YgdGhvc2UgZmlsZXMuIFRpbWUgdG8gY3JhY2sgb3BlbiB0aGUgc291cmNlIGFuZCBnZXQgc2VhcmNoaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0MjEwLCJPdXRwdXRUb2tlbnMiOjE3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6MzQ6MjUuNzg1NTEzNTc3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxNzUzMTU4MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDY4PWNvbmZpZyBDR1JPVVBfRkFWT1JfRFlOTU9EU1xcbi0tXFxuaW5pdC9LY29uZmlnLTEwNzctXFxuaW5pdC9LY29uZmlnOjEwNzg6Y29uZmlnIE1FTUNHXFxuaW5pdC9LY29uZmlnLTEwNzktXFx0Ym9vbCBcXFwiTWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuLS1cXG5pbml0L0tjb25maWctMTA4Ni1cXG5pbml0L0tjb25maWc6MTA4Nzpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxcbmluaXQvS2NvbmZpZy0xMDg4LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDkzLVxcbmluaXQvS2NvbmZpZzoxMDk0OmNvbmZpZyBNRU1DR19OTUlfU0FGRVRZX1JFUVVJUkVTX0FUT01JQ1xcbmluaXQvS2NvbmZpZy0xMDk1LVxcdGJvb2xcXG4tLVxcbmluaXQvS2NvbmZpZy0xMTAwLVxcbmluaXQvS2NvbmZpZzoxMTAxOmNvbmZpZyBNRU1DR19WMVxcbmluaXQvS2NvbmZpZy0xMTAyLVxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM0OjI3Ljk2MDgzNTQ5NVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjQ4MzA2OTQwNjcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIGFzIGl0IHN0YW5kczpcblxuKipDb2RlIEFyY2hhZW9sb2d5IFRpbWUhKipcblxuT2theSwgdGltZSB0byBkaWcgaW50byB0aGUgY29kZWJhc2UuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBzY29wZSBhbmQgaW1wYWN0IG9mIGBldmVudHNfbG9jYWxgIGFuZCBgc3RhdGVfbG9jYWxgLiBJIG5lZWQgdG8gZmlndXJlIG91dCAqd2hlcmUqIHRoZXNlIHZhcmlhYmxlcyBhcmUgYmVpbmcgdXRpbGl6ZWQuIEFyZSB0aGV5IGlzb2xhdGVkIHRvIGEgc2luZ2xlIGZ1bmN0aW9uLCBtb2R1bGUsIG9yIHNjYXR0ZXJlZCB0aHJvdWdob3V0IHRoZSBzeXN0ZW0/IEFyZSB0aGV5IGNlbnRyYWwgdG8gYSBjb3JlIGZ1bmN0aW9uYWxpdHksIG9yIG1vcmUgb2YgYSBzaWRlIGNvbmNlcm4/IEtub3dpbmcgdGhpcyB3aWxsIGhlbHAgbWUgdW5kZXJzdGFuZCB0aGVpciByZWxhdGl2ZSBpbXBvcnRhbmNlLCB0aGVpciBwb3RlbnRpYWwgaW1wYWN0IG9uIG90aGVyIGFyZWFzLCBhbmQgaG93IGVhc2lseSB0aGV5IGNhbiBiZSBtYW5pcHVsYXRlZC4gTGV0J3Mgc3RhcnQgYnkgZG9pbmcgYSBiYXNpYyBzZWFyY2ggZm9yIHRoZWlyIHVzYWdlcy4gVGltZSB0byBnZXQgbXkgZ3JlcCBvbiFcblxuXG4iLCJJbnB1dFRva2VucyI6NDYzMCwiT3V0cHV0VG9rZW5zIjoyMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM0OjMyLjc5MTUzMTI3M1oiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozMTkzMzk3MDY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihzdGF0ZV9sb2NhbHxldmVudHNfbG9jYWwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTA2IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jPTEyOTM9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTYtXFx0c3RydWN0IGludGVsX3VjICp1YyA9IGNvbnRhaW5lcl9vZihndWMsIHR5cGVvZigqdWMpLCBndWMpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTI5NzpcXHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgbG9nX2J1Zl9zdGF0ZV9sb2NhbDtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTgtXFx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlICpsb2dfYnVmX3N0YXRlO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzEzLVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNDpcXHRtZW1jcHkoXFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsIGxvZ19idWZfc3RhdGUsIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTUtXFx0YnVmZmVyX3NpemUgPSBpbnRlbF9ndWNfZ2V0X2xvZ19idWZmZXJfc2l6ZShcXHUwMDI2Z3VjLVxcdTAwM2Vsb2csIEdVQ19DQVBUVVJFX0xPR19CVUZGRVIpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNjpcXHRyZWFkX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwucmVhZF9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE3OlxcdHdyaXRlX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuc2FtcGxlZF93cml0ZV9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE4OlxcdGZ1bGxfY291bnQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmJ1ZmZlcl9mdWxsX2NudDtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTktXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzIwLVxcdC8qIEJvb2trZWVwaW5nIHN0dWZmICovXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzIxOlxcdGd1Yy1cXHUwMDNlbG9nLnN0YXRzW0dVQ19DQVBUVVJFX0xPR19CVUZGRVJdLmZsdXNoICs9IGxvZ19idWZfc3RhdGVfbG9jYWwuZmx1c2hfdG9fZmlsZTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMjItXFx0bmV3X292ZXJmbG93ID0gaW50ZWxfZ3VjX2NoZWNrX2xvZ19idWZfb3ZlcmZsb3coXFx1MDAyNmd1Yy1cXHUwMDNlbG9nLCBHVUNfQ0FQVFVSRV9MT0dfQlVGRkVSLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jPTM3NT1zdGF0aWMgdm9pZCBfZ3VjX2xvZ19jb3B5X2RlYnVnbG9nc19mb3JfcmVsYXkoc3RydWN0IGludGVsX2d1Y19sb2cgKmxvZylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy0zNzktXFx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlICpsb2dfYnVmX3N0YXRlLCAqbG9nX2J1Zl9zbmFwc2hvdF9zdGF0ZTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6MzgwOlxcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy0zODEtXFx0ZW51bSBndWNfbG9nX2J1ZmZlcl90eXBlIHR5cGU7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDE4LVxcdFxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0MTk6XFx0XFx0bWVtY3B5KFxcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLCBsb2dfYnVmX3N0YXRlLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjAtXFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDIxLVxcdFxcdGJ1ZmZlcl9zaXplID0gaW50ZWxfZ3VjX2dldF9sb2dfYnVmZmVyX3NpemUobG9nLCB0eXBlKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIyOlxcdFxcdHJlYWRfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5yZWFkX3B0cjtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIzOlxcdFxcdHdyaXRlX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuc2FtcGxlZF93cml0ZV9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyNDpcXHRcXHRmdWxsX2NudCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuYnVmZmVyX2Z1bGxfY250O1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjUtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyNi1cXHRcXHQvKiBCb29ra2VlcGluZyBzdHVmZiAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0Mjc6XFx0XFx0bG9nLVxcdTAwM2VzdGF0c1t0eXBlXS5mbHVzaCArPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsdXNoX3RvX2ZpbGU7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyOC1cXHRcXHRuZXdfb3ZlcmZsb3cgPSBpbnRlbF9ndWNfY2hlY2tfbG9nX2J1Zl9vdmVyZmxvdyhsb2csIHR5cGUsIGZ1bGxfY250KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MzUtXFx0XFx0LyogRmlyc3QgY29weSB0aGUgc3RhdGUgc3RydWN0dXJlIGluIHNuYXBzaG90IGJ1ZmZlciAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0MzY6XFx0XFx0bWVtY3B5KGxvZ19idWZfc25hcHNob3Rfc3RhdGUsIFxcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MzctXFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jPTEzODg9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgeGVfZ3VjICpndWMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xMzkxLVxcdHN0cnVjdCB4ZV91YyAqdWMgPSBjb250YWluZXJfb2YoZ3VjLCB0eXBlb2YoKnVjKSwgZ3VjKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxMzkyOlxcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTEzOTMtXFx0c3RydWN0IF9fZ3VjX2NhcHR1cmVfYnVmc3RhdGUgYnVmO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQwNi1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDA3OlxcdHhlX21hcF9tZW1jcHlfZnJvbShndWNfdG9feGUoZ3VjKSwgXFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsIFxcdTAwMjZndWMtXFx1MDAzZWxvZy5iby1cXHUwMDNldm1hcCxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDA4LVxcdFxcdFxcdCAgIGxvZ19idWZfc3RhdGVfb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDEwLVxcdGJ1ZmZlcl9zaXplID0gWEVfR1VDX0xPR19TVEFURV9DQVBUVVJFX0JVRkZFUl9TSVpFO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTE6XFx0cmVhZF9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnJlYWRfcHRyO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTI6XFx0d3JpdGVfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5zYW1wbGVkX3dyaXRlX3B0cjtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDEzOlxcdGZ1bGxfY291bnQgPSBGSUVMRF9HRVQoR1VDX0xPR19CVUZGRVJfU1RBVEVfQlVGRkVSX0ZVTExfQ05ULCBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE0LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0MTUtXFx0LyogQm9va2tlZXBpbmcgc3R1ZmYgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDE2OlxcdHRtcCA9IEZJRUxEX0dFVChHVUNfTE9HX0JVRkZFUl9TVEFURV9GTFVTSF9UT19GSUxFLCBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE3LVxcdGd1Yy1cXHUwMDNlbG9nLnN0YXRzW0dVQ19MT0dfVFlQRV9TVEFURV9DQVBUVVJFXS5mbHVzaCArPSB0bXA7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDU4LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0NTk6XFx0bG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyBcXHUwMDI2PSB+R1VDX0xPR19CVUZGRVJfU1RBVEVfRkxVU0hfVE9fRklMRTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDYwLVxcdHhlX21hcF93cihndWNfdG9feGUoZ3VjKSwgXFx1MDAyNmd1Yy1cXHUwMDNlbG9nLmJvLVxcdTAwM2V2bWFwLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjEtXFx0XFx0ICBsb2dfYnVmX3N0YXRlX29mZnNldCArIG9mZnNldG9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSwgZmxhZ3MpLCB1MzIsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQ2MjpcXHRcXHQgIGxvZ19idWZfc3RhdGVfbG9jYWwuZmxhZ3MpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjMtXFx0X19ndWNfY2FwdHVyZV9mbHVzaGxvZ19jb21wbGV0ZShndWMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oPTE5PXN0cnVjdCByZG1hX2Nncm91cCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgtMjktXFx0c3RydWN0IGNncm91cF9maWxlXFx0XFx0ZXZlbnRzX2ZpbGU7XFxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oOjMwOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19sb2NhbF9maWxlO1xcbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaC0zMS19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oPTM1PXN0cnVjdCBodWdldGxiX2Nncm91cCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNDgtXFx0YXRvbWljX2xvbmdfdCBldmVudHNbSFVHRV9NQVhfSFNUQVRFXVtIVUdFVExCX05SX01FTU9SWV9FVkVOVFNdO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo0OTpcXHRhdG9taWNfbG9uZ190IGV2ZW50c19sb2NhbFtIVUdFX01BWF9IU1RBVEVdW0hVR0VUTEJfTlJfTUVNT1JZX0VWRU5UU107XFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTUwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTU0LVxcdC8qIEhhbmRsZSBmb3IgXFxcImh1Z2V0bGIuZXZlbnRzLmxvY2FsXFxcIiAqL1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo1NTpcXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2xvY2FsX2ZpbGVbSFVHRV9NQVhfSFNUQVRFXTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNTYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjMxLVxcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfZmlsZTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyMzI6XFx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19sb2NhbF9maWxlO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTIzMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI0MS1cXHRhdG9taWNfbG9uZ190XFx0XFx0bWVtb3J5X2V2ZW50c1tNRU1DR19OUl9NRU1PUllfRVZFTlRTXTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNDI6XFx0YXRvbWljX2xvbmdfdFxcdFxcdG1lbW9yeV9ldmVudHNfbG9jYWxbTUVNQ0dfTlJfTUVNT1JZX0VWRU5UU107XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjQzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTQ2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05NDctXFx0XFx0XFx0XFx0XFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTQ4OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk0OS1cXHRcXHRcXHRcXHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDA1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQxMC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDExOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQxMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9NDI9c3RydWN0IG1pc2NfcmVzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC00Ni1cXHRhdG9taWM2NF90IGV2ZW50cztcXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg6NDc6XFx0YXRvbWljNjRfdCBldmVudHNfbG9jYWw7XFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTQ4LX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9NTY9c3RydWN0IG1pc2NfY2cge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTYxLVxcdC8qIG1pc2MuZXZlbnRzLmxvY2FsICovXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oOjYyOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZTtcXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtNjMtXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0xMjU9c3RhdGljIHZvaWQgbWlzY19jZ19ldmVudChlbnVtIG1pc2NfcmVzX3R5cGUgdHlwZSwgc3RydWN0IG1pc2NfY2cgKmNnKVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTEyNi17XFxua2VybmVsL2Nncm91cC9taXNjLmM6MTI3OlxcdGF0b21pYzY0X2luYyhcXHUwMDI2Y2ctXFx1MDAzZXJlc1t0eXBlXS5ldmVudHNfbG9jYWwpO1xcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjEyODpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNmNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxua2VybmVsL2Nncm91cC9taXNjLmMtMTI5LVxcbi0tXFxua2VybmVsL2Nncm91cC9taXNjLmM9MzY3PXN0YXRpYyBpbnQgX19taXNjX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIGJvb2wgbG9jYWwpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0zNzQtXFx0XFx0aWYgKGxvY2FsKVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjM3NTpcXHRcXHRcXHRldmVudHMgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZjZy1cXHUwMDNlcmVzW2ldLmV2ZW50c19sb2NhbCk7XFxua2VybmVsL2Nncm91cC9taXNjLmMtMzc2LVxcdFxcdGVsc2VcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM4ND1zdGF0aWMgaW50IG1pc2NfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTM4OC1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYzozODk6c3RhdGljIGludCBtaXNjX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxua2VybmVsL2Nncm91cC9taXNjLmMtMzkwLXtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM5NT1zdGF0aWMgc3RydWN0IGNmdHlwZSBtaXNjX2NnX2ZpbGVzW10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYy00MjMtXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNDpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbWlzY19jZywgZXZlbnRzX2xvY2FsX2ZpbGUpLFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNTpcXHRcXHQuc2VxX3Nob3cgPSBtaXNjX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTQyNi1cXHR9LFxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9NDk9c3RydWN0IHBpZHNfY2dyb3VwIHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTYxLVxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19maWxlO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjYyOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19sb2NhbF9maWxlO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTYzLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTY0LVxcdGF0b21pYzY0X3RcXHRcXHRcXHRldmVudHNbTlJfUElEQ0dfRVZFTlRTXTtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo2NTpcXHRhdG9taWM2NF90XFx0XFx0XFx0ZXZlbnRzX2xvY2FsW05SX1BJRENHX0VWRU5UU107XFxua2VybmVsL2Nncm91cC9waWRzLmMtNjYtfTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTI0Mz1zdGF0aWMgdm9pZCBwaWRzX2V2ZW50KHN0cnVjdCBwaWRzX2Nncm91cCAqcGlkc19mb3JraW5nLFxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMjQ4LVxcdC8qIE9ubHkgbG9nIHRoZSBmaXJzdCB0aW1lIGxpbWl0IGlzIGhpdC4gKi9cXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNDk6XFx0aWYgKGF0b21pYzY0X2luY19yZXR1cm4oXFx1MDAyNnAtXFx1MDAzZWV2ZW50c19sb2NhbFtQSURDR19GT1JLRkFJTF0pID09IDEpIHtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTAtXFx0XFx0cHJfaW5mbyhcXFwiY2dyb3VwOiBmb3JrIHJlamVjdGVkIGJ5IHBpZHMgY29udHJvbGxlciBpbiBcXFwiKTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI1NS1cXHQgICAgY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUykge1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI1NjpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNnAtXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTctXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMjU5LVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI2MDpcXHRhdG9taWM2NF9pbmMoXFx1MDAyNnBpZHNfb3Zlcl9saW1pdC1cXHUwMDNlZXZlbnRzX2xvY2FsW1BJRENHX01BWF0pO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI2MTpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNnBpZHNfb3Zlcl9saW1pdC1cXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI2Mi1cXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTM2MT1zdGF0aWMgaW50IF9fcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBib29sIGxvY2FsKVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMzcxLVxcdH1cXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzozNzI6XFx0ZXZlbnRzID0gbG9jYWwgPyBwaWRzLVxcdTAwM2VldmVudHNfbG9jYWwgOiBwaWRzLVxcdTAwM2VldmVudHM7XFxua2VybmVsL2Nncm91cC9waWRzLmMtMzczLVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9Mzc4PXN0YXRpYyBpbnQgcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMzgzLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjM4NDpzdGF0aWMgaW50IHBpZHNfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0zODUte1xcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9MzkwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHBpZHNfZmlsZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTQxNC1cXHRcXHQubmFtZSA9IFxcXCJldmVudHMubG9jYWxcXFwiLFxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjQxNTpcXHRcXHQuc2VxX3Nob3cgPSBwaWRzX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjQxNjpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGlkc19jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy00MTctXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9NzU9c3RydWN0IHJkbWFjZ19yZXNvdXJjZV9wb29sIHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTg5LVxcdHU2NFxcdFxcdFxcdGV2ZW50c19hbGxvY19mYWlsW1JETUFDR19SRVNPVVJDRV9NQVhdO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjkwOlxcdHU2NFxcdFxcdFxcdGV2ZW50c19sb2NhbF9tYXhbUkRNQUNHX1JFU09VUkNFX01BWF07XFxua2VybmVsL2Nncm91cC9yZG1hLmM6OTE6XFx0dTY0XFx0XFx0XFx0ZXZlbnRzX2xvY2FsX2FsbG9jX2ZhaWxbUkRNQUNHX1JFU09VUkNFX01BWF07XFxua2VybmVsL2Nncm91cC9yZG1hLmMtOTItfTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTEzOT1zdGF0aWMgYm9vbCBycG9vbF9oYXNfcGVyc2lzdGVudF9zdGF0ZShzdHJ1Y3QgcmRtYWNnX3Jlc291cmNlX3Bvb2wgKnJwb29sKVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmMtMTUwLVxcdFxcdCAgICBycG9vbC1cXHUwMDNlZXZlbnRzX21heFtpXSB8fFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MTpcXHRcXHQgICAgcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gfHxcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0xNTItXFx0XFx0ICAgIHJwb29sLVxcdTAwM2VldmVudHNfYWxsb2NfZmFpbFtpXSB8fFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MzpcXHRcXHQgICAgcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2ldKVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTE1NC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTI1OT1zdGF0aWMgdm9pZCByZG1hY2dfZXZlbnRfbG9ja2VkKHN0cnVjdCByZG1hX2Nncm91cCAqY2csXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yNzEtXFx0aWYgKHJwb29sKSB7XFxua2VybmVsL2Nncm91cC9yZG1hLmM6MjcyOlxcdFxcdHJwb29sLVxcdTAwM2VldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtpbmRleF0rKztcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyNzM6XFx0XFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFxcdTAwMjZjZy1cXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTI3NC1cXHR9XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yNzgtXFx0aWYgKHJwb29sKSB7XFxua2VybmVsL2Nncm91cC9yZG1hLmM6Mjc5OlxcdFxcdHJwb29sLVxcdTAwM2VldmVudHNfbG9jYWxfbWF4W2luZGV4XSsrO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjI4MDpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm92ZXJfY2ctXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yODEtXFx0fVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9Njg4PXN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03MTYtXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzE3OnN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxua2VybmVsL2Nncm91cC9yZG1hLmMtNzE4LXtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczMi1cXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzMzOlxcdFxcdFxcdFxcdCAgIHJwb29sID8gcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gOiAwVUxMLFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczNC1cXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzM1OlxcdFxcdFxcdFxcdCAgIHJwb29sID8gcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2ldIDogMFVMTCk7XFxua2VybmVsL2Nncm91cC9yZG1hLmMtNzM2LVxcdFxcdFxcdGlmIChpIFxcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWCAtIDEpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz03NDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgcmRtYWNnX2ZpbGVzW10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03NzMtXFx0XFx0Lm5hbWUgPSBcXFwiZXZlbnRzLmxvY2FsXFxcIixcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo3NzQ6XFx0XFx0LnNlcV9zaG93ID0gcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjc3NTpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcmRtYV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03NzYtXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz0yNDM9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfZXZlbnQoc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpodWdldGxiLCBpbnQgaWR4LFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNDUte1xcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6MjQ2OlxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2aHVnZXRsYi1cXHUwMDNlZXZlbnRzX2xvY2FsW2lkeF1bZXZlbnRdKTtcXG5tbS9odWdldGxiX2Nncm91cC5jOjI0NzpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNmh1Z2V0bGItXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlW2lkeF0pO1xcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtMjQ4LVxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz02Nzc9c3RhdGljIGludCBfX2h1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIGJvb2wgbG9jYWwpXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jLTY4Ni1cXHRpZiAobG9jYWwpXFxubW0vaHVnZXRsYl9jZ3JvdXAuYzo2ODc6XFx0XFx0bWF4ID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2aF9jZy1cXHUwMDNlZXZlbnRzX2xvY2FsW2lkeF1bSFVHRVRMQl9NQVhdKTtcXG5tbS9odWdldGxiX2Nncm91cC5jLTY4OC1cXHRlbHNlXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jPTY5Nj1zdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jLTcwMC1cXG5tbS9odWdldGxiX2Nncm91cC5jOjcwMTpzdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy03MDIte1xcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz03MDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgaHVnZXRsYl9kZmxfdG1wbFtdID0ge1xcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy03NDAtXFx0XFx0Lm5hbWUgPSBcXFwiZXZlbnRzLmxvY2FsXFxcIixcXG5tbS9odWdldGxiX2Nncm91cC5jOjc0MTpcXHRcXHQuc2VxX3Nob3cgPSBodWdldGxiX2V2ZW50c19sb2NhbF9zaG93LFxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6NzQyOlxcdFxcdC5maWxlX29mZnNldCA9IE1FTUZJTEVfT0ZGU0VUKHN0cnVjdCBodWdldGxiX2Nncm91cCwgZXZlbnRzX2xvY2FsX2ZpbGVbMF0pLFxcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNzQzLVxcdFxcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNzQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbm9kZV9ucl9scnVfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE3NTYtXFx0XFx0ZWxzZVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNzU3OlxcdFxcdFxcdG5yICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywgTlJfTFJVX0JBU0UgKyBscnUpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzU4LVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNzYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbnJfbHJ1X3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzc0LVxcdFxcdGVsc2VcXG5tbS9tZW1jb250cm9sLXYxLmM6MTc3NTpcXHRcXHRcXHRuciArPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBOUl9MUlVfQkFTRSArIGxydSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE3NzYtXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE4NjM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfZXZlbnRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTg2OS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTg3MDp2b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzEte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtY2cxX3N0YXRzKTsgaSsrKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc1OlxcdFxcdHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIG1lbWNnMV9zdGF0c1tpXSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE4NzYtfVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODc3LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc4OnZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC12MS5jLTE4Nzkte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4ODItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODgzOlxcdFxcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBpKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg4NC19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg4Nj12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4OTgtXFxubW0vbWVtY29udHJvbC12MS5jOjE4OTk6XFx0XFx0bnIgPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChtZW1jZywgbWVtY2cxX3N0YXRzW2ldKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTkwMC1cXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiJXMgJWx1XFxcXG5cXFwiLCBtZW1jZzFfc3RhdF9uYW1lc1tpXSwgbnIpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE5MDQtXFx0XFx0c2VxX2J1Zl9wcmludGYocywgXFxcIiVzICVsdVxcXFxuXFxcIiwgdm1fZXZlbnRfbmFtZShtZW1jZzFfZXZlbnRzW2ldKSxcXG5tbS9tZW1jb250cm9sLXYxLmM6MTkwNTpcXHRcXHRcXHQgICAgICAgbWVtY2dfZXZlbnRzX2xvY2FsKG1lbWNnLCBtZW1jZzFfZXZlbnRzW2ldKSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE5MDYtXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTkwOC1cXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiJXMgJWx1XFxcXG5cXFwiLCBscnVfbGlzdF9uYW1lKGkpLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoxOTA5OlxcdFxcdFxcdCAgICAgICBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBOUl9MUlVfQkFTRSArIGkpICpcXG5tbS9tZW1jb250cm9sLXYxLmMtMTkxMC1cXHRcXHRcXHQgICAgICAgUEFHRV9TSVpFKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0zMj1zdGF0aWMgaW5saW5lIGJvb2wgZG9fbWVtc3dfYWNjb3VudCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTM2LVxcbm1tL21lbWNvbnRyb2wtdjEuaDozNzp1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudCk7XFxubW0vbWVtY29udHJvbC12MS5oOjM4OnVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpO1xcbm1tL21lbWNvbnRyb2wtdjEuaDozOTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xcbm1tL21lbWNvbnRyb2wtdjEuaC00MC1ib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD02ND12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKTtcXG5tbS9tZW1jb250cm9sLXYxLmg6NjU6dm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcXG5tbS9tZW1jb250cm9sLXYxLmg6NjY6dm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCk7XFxubW0vbWVtY29udHJvbC12MS5oLTY3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNjktXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XFxubW0vbWVtY29udHJvbC12MS5oOjcwOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNzEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTIzNj1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcXG5tbS9tZW1jb250cm9sLmMtMjM3LVxcbm1tL21lbWNvbnRyb2wuYzoyMzg6c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG5tbS9tZW1jb250cm9sLmMtMjM5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTEtXFx0LyogVGhlIGZvbGxvd2luZyBjb3VudHMgYXJlIGFsbCBub24taGllcmFyY2hpY2FsIGFuZCBuZWVkIHRvIGJlIHJlcGFyZW50ZWQuICovXFxubW0vbWVtY29udHJvbC5jOjI1MjpcXHRyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jOjI1MzpcXHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0yNTQtXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU3LSNlbHNlXFxubW0vbWVtY29udHJvbC5jOjI1ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYy0yNTkte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwNy1cXG5tbS9tZW1jb250cm9sLmM6MzA4OlxcdHJlcGFyZW50X3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0zMDktfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4MT1zdHJ1Y3QgbHJ1dmVjX3N0YXRzIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00ODUtXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHN0YXRlICovXFxubW0vbWVtY29udHJvbC5jOjQ4NjpcXHRsb25nIHN0YXRlX2xvY2FsW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XFxubW0vbWVtY29udHJvbC5jLTQ4Ny1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0OS1cXG5tbS9tZW1jb250cm9sLmM6NTUwOnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL21lbWNvbnRyb2wuYy01NTEtXFx0XFx0XFx0XFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0LVxcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxubW0vbWVtY29udHJvbC5jOjU2NTpcXHR4ID0gUkVBRF9PTkNFKHBuLVxcdTAwM2VscnV2ZWNfc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcXG5tbS9tZW1jb250cm9sLmMtNTY2LSNpZmRlZiBDT05GSUdfU01QXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc0PXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc2LVxcbm1tL21lbWNvbnRyb2wuYzo1Nzc6dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy01NzgtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTg0LVxcdFxcdHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhwYXJlbnQsIE5PREVfREFUQShuaWQpKTtcXG5tbS9tZW1jb250cm9sLmM6NTg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjaGlsZF9scnV2ZWMsIGlkeCk7XFxubW0vbWVtY29udHJvbC5jLTU4Ni1cXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqY2hpbGRfcG4sICpwYXJlbnRfcG47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjczPXN0cnVjdCBtZW1jZ192bXN0YXRzIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02NzktXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXFx1MDAyNiBldmVudHMgKi9cXG5tbS9tZW1jb250cm9sLmM6NjgwOlxcdGxvbmdcXHRcXHRcXHRzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07XFxubW0vbWVtY29udHJvbC5jOjY4MTpcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XFxubW0vbWVtY29udHJvbC5jLTY4Mi0jZW5kaWZcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02OTYtI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYzo2OTc6c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNjk4LXtcXG5tbS9tZW1jb250cm9sLmM6Njk5OlxcdHJldHVybiBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwMC19XFxubW0vbWVtY29udHJvbC5jLTcwMS1cXG5tbS9tZW1jb250cm9sLmM6NzAyOnN0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy03MDMte1xcbm1tL21lbWNvbnRyb2wuYzo3MDQ6XFx0cmV0dXJuIG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwNS19XFxubW0vbWVtY29udHJvbC5jLTcwNi0jZWxzZVxcbm1tL21lbWNvbnRyb2wuYzo3MDc6c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNzA4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03MTEtXFxubW0vbWVtY29udHJvbC5jOjcxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNzEzLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04NjA9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTg3OC0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXFxubW0vbWVtY29udHJvbC5jOjg3OTogKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy5cXG5tbS9tZW1jb250cm9sLmMtODgwLSAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTk0ND12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NTgtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xcbm1tL21lbWNvbnRyb2wuYzo5NTk6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG5tbS9tZW1jb250cm9sLmMtOTYwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NjYtXFxubW0vbWVtY29udHJvbC5jOjk2NzpcXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxubW0vbWVtY29udHJvbC5jLTk2OC0jaWZkZWYgQ09ORklHX1NNUFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk3NC1cXG5tbS9tZW1jb250cm9sLmM6OTc1OnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy05NzYtXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcXG5tbS9tZW1jb250cm9sLmMtOTc3LXtcXG5tbS9tZW1jb250cm9sLmM6OTc4OlxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpZHgpO1xcbm1tL21lbWNvbnRyb2wuYy05NzktXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEzMj1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTQwLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmM6MTE0MTp1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG5tbS9tZW1jb250cm9sLmMtMTE0Mi17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE0Ny1cXG5tbS9tZW1jb250cm9sLmM6MTE0ODpcXHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy0xMTQ5LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzI0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzMwLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmM6MTczMTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxubW0vbWVtY29udHJvbC5jLTE3MzIte1xcbm1tL21lbWNvbnRyb2wuYzoxNzMzOlxcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpdGVtKSAqXFxubW0vbWVtY29udHJvbC5jLTE3MzQtXFx0XFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTExPXZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5MTktXFxubW0vbWVtY29udHJvbC5jOjE5MjA6XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c19sb2NhbFtldmVudF0pO1xcbm1tL21lbWNvbnRyb2wuYy0xOTIxLVxcdGlmICghc3dhcF9ldmVudCBcXHUwMDI2XFx1MDAyNiBhbGxvd19zcGlubmluZylcXG5tbS9tZW1jb250cm9sLmM6MTkyMjpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxubW0vbWVtY29udHJvbC5jLTE5MjMtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQ5Nj1zdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ1MDAtXFx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cXG5tbS9tZW1jb250cm9sLmM6NDUwMTpcXHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxcbm1tL21lbWNvbnRyb2wuYy00NTAyLVxcdCAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ1NTM9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG5tbS9tZW1jb250cm9sLmMtNDU1NC17XFxubW0vbWVtY29udHJvbC5jOjQ1NTU6XFx0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jLTQ1NTYtXFx0aW50IG5pZDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTYyLVxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0ga21lbTtcXG5tbS9tZW1jb250cm9sLmM6NDU2MzpcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ1NjQ6XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IGttZW07XFxubW0vbWVtY29udHJvbC5jLTQ1NjUtXFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTgxLVxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ1ODI6XFx0XFx0XFx0bHN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDU4My1cXHRcXHRcXHRpZiAocGxzdGF0cylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTg1LVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmM6NDU4NjpcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ1ODc6XFx0XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ1ODgtXFx0XFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTk1LVxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ1OTY6XFx0XFx0XFx0bHN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDU5Ny1cXHRcXHRcXHRpZiAocGxzdGF0cylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTk5LVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmM6NDYwMDpcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ2MDE6XFx0XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ2MDItXFx0XFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NjEyPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYyNS1cXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlLFxcbm1tL21lbWNvbnRyb2wuYzo0NjI2OlxcdFxcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcXG5tbS9tZW1jb250cm9sLmMtNDYyNy1cXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2MzYtXFx0XFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHMsXFxubW0vbWVtY29udHJvbC5jOjQ2Mzc6XFx0XFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcXG5tbS9tZW1jb250cm9sLmMtNDYzOC1cXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjU4LVxcdFxcdFxcdC5hZ2dyZWdhdGUgPSBsc3RhdHMtXFx1MDAzZXN0YXRlLFxcbm1tL21lbWNvbnRyb2wuYzo0NjU5OlxcdFxcdFxcdC5sb2NhbCA9IGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWwsXFxubW0vbWVtY29udHJvbC5jLTQ2NjAtXFx0XFx0XFx0LnBlbmRpbmcgPSBsc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTAzND1zdGF0aWMgaW50IG1lbW9yeV9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA0MS1cXG5tbS9tZW1jb250cm9sLmM6NTA0MjpzdGF0aWMgaW50IG1lbW9yeV9ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxubW0vbWVtY29udHJvbC5jLTUwNDMte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwNDUtXFxubW0vbWVtY29udHJvbC5jOjUwNDY6XFx0X19tZW1vcnlfZXZlbnRzX3Nob3cobSwgbWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNfbG9jYWwpO1xcbm1tL21lbWNvbnRyb2wuYy01MDQ3LVxcdHJldHVybiAwO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxNDc9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE5My1cXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxubW0vbWVtY29udHJvbC5jOjUxOTQ6XFx0XFx0LmZpbGVfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1lbV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5tbS9tZW1jb250cm9sLmM6NTE5NTpcXHRcXHQuc2VxX3Nob3cgPSBtZW1vcnlfZXZlbnRzX2xvY2FsX3Nob3csXFxubW0vbWVtY29udHJvbC5jLTUxOTYtXFx0fSxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz02NTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM0OjM1Ljk4NDkzMjIxOVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjc0Nzk4MDcyNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqRGl2aW5nIGludG8gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbCoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIG1lbW9yeSBjb250cm9sIGNvZGUgYWdhaW4uIEkgbmVlZCB0byByZWZyZXNoIG15IHVuZGVyc3RhbmRpbmcgb2YgaG93IG1lbW9yeSBhY2NvdW50aW5nIHdvcmtzIHdpdGhpbiBhIGNncm91cC4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gZm9jdXMgb24gYG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxgIGFuZCB0aGUgc3Vycm91bmRpbmcgbG9naWMuIExldCdzIHN0YXJ0IGJ5IHplcm9pbmcgaW4gb24gbGluZSA5NTkgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoYXQgZnVuY3Rpb24gY2FsbCBpcyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgSSB3YW50IHRvIHJlLWZhbWlsaWFyaXplIG15c2VsZiB3aXRoIGl0cyByb2xlIGluIHRoZSBsYXJnZXIgZnJhbWV3b3JrLiBJJ20gZXhwZWN0aW5nIHRoaXMgdG8gYmUgd2hlcmUgdGhlIGxvY2FsIHBlci1DUFUgcGFnZSBzdGF0ZSBpcyB1cGRhdGVkLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhlIGludGVyYWN0aW9ucyB3aXRoIG90aGVyIGRhdGEgc3RydWN0dXJlcyBhbmQgY29uY3VycmVuY3kgbWVjaGFuaXNtcy4gSSdsbCBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoaXMgZnVuY3Rpb24gaXMgdXNlZCB0byBnZXQgdGhlIHBlci1ub2RlIGluZm9ybWF0aW9uLiBJIHRoaW5rIGJ5IHRyYWNpbmcgaG93IHRoaXMgaXMgdXNlZCwgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHRoZSBnbG9iYWwgY291bnRlcnMgd2lsbCBiZWNvbWUgY2xlYXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1ODc5LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6MzQ6NDMuNDY0NzQxMTc2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxMzkxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tZW1jb250cm9sLmNcIixcbiAgXCJGaXJzdExpbmVcIjogOTUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgOTUwOlxcdFxcdFxcdHJldHVybjtcXG4gOTUxOlxcdFxcbiA5NTI6XFx0XFx0bWVtY2cgPSBnZXRfbm9uX2R5aW5nX21lbWNnX3N0YXJ0KG1lbWNnLCBcXHUwMDI2cmN1X2xvY2tlZCk7XFxuIDk1MzpcXHRcXHRfX21vZF9tZW1jZ19zdGF0ZShtZW1jZywgaWR4LCB2YWwpO1xcbiA5NTQ6XFx0XFx0Z2V0X25vbl9keWluZ19tZW1jZ19lbmQocmN1X2xvY2tlZCk7XFxuIDk1NTpcXHR9XFxuIDk1NjpcXHRcXG4gOTU3OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gOTU4OlxcdC8qIGlkeCBjYW4gYmUgb2YgdHlwZSBlbnVtIG1lbWNnX3N0YXRfaXRlbSBvciBub2RlX3N0YXRfaXRlbS4gKi9cXG4gOTU5OlxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpXFxuIDk2MDpcXHR7XFxuIDk2MTpcXHRcXHRsb25nIHg7XFxuIDk2MjpcXHRcXHRpbnQgaSA9IG1lbWNnX3N0YXRzX2luZGV4KGlkeCk7XFxuIDk2MzpcXHRcXG4gOTY0OlxcdFxcdGlmIChXQVJOX09OQ0UoQkFEX1NUQVRfSURYKGkpLCBcXFwiJXM6IG1pc3Npbmcgc3RhdCBpdGVtICVkXFxcXG5cXFwiLCBfX2Z1bmNfXywgaWR4KSlcXG4gOTY1OlxcdFxcdFxcdHJldHVybiAwO1xcbiA5NjY6XFx0XFxuIDk2NzpcXHRcXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxuIDk2ODpcXHQjaWZkZWYgQ09ORklHX1NNUFxcbiA5Njk6XFx0XFx0aWYgKHggXFx1MDAzYyAwKVxcbiA5NzA6XFx0XFx0XFx0eCA9IDA7XFxuIDk3MTpcXHQjZW5kaWZcXG4gOTcyOlxcdFxcdHJldHVybiB4O1xcbiA5NzM6XFx0fVxcbiA5NzQ6XFx0XFxuIDk3NTpcXHR2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gOTc2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuIDk3NzpcXHR7XFxuIDk3ODpcXHRcXHR1bnNpZ25lZCBsb25nIHZhbHVlID0gbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChtZW1jZywgaWR4KTtcXG4gOTc5OlxcdFxcbiA5ODA6XFx0XFx0X19tb2RfbWVtY2dfc3RhdGUobWVtY2csIGlkeCwgLXZhbHVlKTtcXG4gOTgxOlxcdFxcdF9fbW9kX21lbWNnX3N0YXRlKHBhcmVudCwgaWR4LCB2YWx1ZSk7XFxuIDk4MjpcXHR9XFxuIDk4MzpcXHQjZW5kaWZcXG4gOTg0OlxcdFxcbiA5ODU6XFx0c3RhdGljIHZvaWQgX19tb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKHN0cnVjdCBtZW1fY2dyb3VwX3Blcl9ub2RlICpwbixcXG4gOTg2OlxcdFxcdFxcdFxcdFxcdCAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgsIGxvbmcgdmFsKVxcbiA5ODc6XFx0e1xcbiA5ODg6XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnID0gcG4tXFx1MDAzZW1lbWNnO1xcbiA5ODk6XFx0XFx0aW50IGkgPSBtZW1jZ19zdGF0c19pbmRleChpZHgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozNDo0My40NjUwNTgyMTZaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjM3MzgyNjkxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIGlmIEkgd2VyZSB0aGUgb25lIHRoaW5raW5nIHRoZXNlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBNZW1vcnkgQ29udHJvbCBDb2RlKipcblxuT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIG1lbW9yeSBjZ3JvdXAgY29kZSBhZ2Fpbi4gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiBob3cgdGhlc2Ugc3RhdHMgYXJlIGJlaW5nIGZsdXNoZWQgYW5kIGFnZ3JlZ2F0ZWQuIExldCdzIHplcm8gaW4gb24gYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoYCBhbmQgYG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGVgLiBJJ20gZ29pbmcgdG8ganVtcCB0byB0aGF0IHNlY3Rpb24gYXJvdW5kIGxpbmVzIDQ1MDAgdG8gNDY1MCBpbiBgbW0vbWVtY29udHJvbC5jYC4gSG9wZWZ1bGx5LCB0aGUgc3RydWN0dXJlIGFuZCBsb2dpYyBhcmUgc3RpbGwgZnJlc2ggaW4gbXkgbWluZC4gSSdtIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGVzZSB0d28gZnVuY3Rpb25zIGFuZCBob3cgdGhleSBjb250cmlidXRlIHRvIHByb3ZpZGluZyBhY2N1cmF0ZSBtZW1vcnkgdXNhZ2UgcmVwb3J0cy4gVGhpcyBtaWdodCBoYXZlIGEgc3BlY2lmaWMgdXNlIGNhc2UgSSBoYXZlIGluIG1pbmQgd2hlcmUgdW5kZXJzdGFuZGluZyB0aGUgdGltaW5nIGFuZCBpbXBhY3Qgb2YgdGhlc2UgZnVuY3Rpb25zIGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY3OTQsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM0OjQ1LjgzODg4Nzc0N1oiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDM1MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDQ1MDAsXG4gIFwiTGluZUNvdW50XCI6IDYwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjQ1MDA6XFx0XFx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cXG40NTAxOlxcdFxcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXFxuNDUwMjpcXHRcXHQgKi9cXG40NTAzOlxcdFxcdGxvbmcgKmxvY2FsO1xcbjQ1MDQ6XFx0XFx0LyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xcbjQ1MDU6XFx0XFx0bG9uZyAqcGVuZGluZztcXG40NTA2OlxcdFxcdC8qIHBvaW50ZXIgdG8gdGhlIHBhcmVudCdzIHBlbmRpbmcgY291bnRlcnMsIGNvdWxkIGJlIE5VTEwgKi9cXG40NTA3OlxcdFxcdGxvbmcgKnBwZW5kaW5nO1xcbjQ1MDg6XFx0XFx0LyogcG9pbnRlciB0byB0aGUgcGVyY3B1IGNvdW50ZXJzIHRvIGJlIGFnZ3JlZ2F0ZWQgKi9cXG40NTA5OlxcdFxcdGxvbmcgKmNzdGF0O1xcbjQ1MTA6XFx0XFx0LyogcG9pbnRlciB0byB0aGUgcGVyY3B1IGNvdW50ZXJzIG9mIHRoZSBsYXN0IGFnZ3JlZ2F0aW9uKi9cXG40NTExOlxcdFxcdGxvbmcgKmNzdGF0X3ByZXY7XFxuNDUxMjpcXHRcXHQvKiBzaXplIG9mIHRoZSBhYm92ZSBjb3VudGVycyAqL1xcbjQ1MTM6XFx0XFx0aW50IHNpemU7XFxuNDUxNDpcXHR9O1xcbjQ1MTU6XFx0XFxuNDUxNjpcXHRzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXFxuNDUxNzpcXHR7XFxuNDUxODpcXHRcXHRpbnQgaTtcXG40NTE5OlxcdFxcdGxvbmcgZGVsdGEsIGRlbHRhX2NwdSwgdjtcXG40NTIwOlxcdFxcbjQ1MjE6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIGFjLVxcdTAwM2VzaXplOyBpKyspIHtcXG40NTIyOlxcdFxcdFxcdC8qXFxuNDUyMzpcXHRcXHRcXHQgKiBDb2xsZWN0IHRoZSBhZ2dyZWdhdGVkIHByb3BhZ2F0aW9uIGNvdW50cyBvZiBncm91cHNcXG40NTI0OlxcdFxcdFxcdCAqIGJlbG93IHVzLiBXZSdyZSBpbiBhIHBlci1jcHUgbG9vcCBoZXJlIGFuZCB0aGlzIGlzXFxuNDUyNTpcXHRcXHRcXHQgKiBhIGdsb2JhbCBjb3VudGVyLCBzbyB0aGUgZmlyc3QgY3ljbGUgd2lsbCBnZXQgdGhlbS5cXG40NTI2OlxcdFxcdFxcdCAqL1xcbjQ1Mjc6XFx0XFx0XFx0ZGVsdGEgPSBhYy1cXHUwMDNlcGVuZGluZ1tpXTtcXG40NTI4OlxcdFxcdFxcdGlmIChkZWx0YSlcXG40NTI5OlxcdFxcdFxcdFxcdGFjLVxcdTAwM2VwZW5kaW5nW2ldID0gMDtcXG40NTMwOlxcdFxcbjQ1MzE6XFx0XFx0XFx0LyogQWRkIENQVSBjaGFuZ2VzIG9uIHRoaXMgbGV2ZWwgc2luY2UgdGhlIGxhc3QgZmx1c2ggKi9cXG40NTMyOlxcdFxcdFxcdGRlbHRhX2NwdSA9IDA7XFxuNDUzMzpcXHRcXHRcXHR2ID0gUkVBRF9PTkNFKGFjLVxcdTAwM2Vjc3RhdFtpXSk7XFxuNDUzNDpcXHRcXHRcXHRpZiAodiAhPSBhYy1cXHUwMDNlY3N0YXRfcHJldltpXSkge1xcbjQ1MzU6XFx0XFx0XFx0XFx0ZGVsdGFfY3B1ID0gdiAtIGFjLVxcdTAwM2Vjc3RhdF9wcmV2W2ldO1xcbjQ1MzY6XFx0XFx0XFx0XFx0ZGVsdGEgKz0gZGVsdGFfY3B1O1xcbjQ1Mzc6XFx0XFx0XFx0XFx0YWMtXFx1MDAzZWNzdGF0X3ByZXZbaV0gPSB2O1xcbjQ1Mzg6XFx0XFx0XFx0fVxcbjQ1Mzk6XFx0XFxuNDU0MDpcXHRcXHRcXHQvKiBBZ2dyZWdhdGUgY291bnRzIG9uIHRoaXMgbGV2ZWwgYW5kIHByb3BhZ2F0ZSB1cHdhcmRzICovXFxuNDU0MTpcXHRcXHRcXHRpZiAoZGVsdGFfY3B1IFxcdTAwMjZcXHUwMDI2IGFjLVxcdTAwM2Vsb2NhbClcXG40NTQyOlxcdFxcdFxcdFxcdGFjLVxcdTAwM2Vsb2NhbFtpXSArPSBkZWx0YV9jcHU7XFxuNDU0MzpcXHRcXG40NTQ0OlxcdFxcdFxcdGlmIChkZWx0YSkge1xcbjQ1NDU6XFx0XFx0XFx0XFx0YWMtXFx1MDAzZWFnZ3JlZ2F0ZVtpXSArPSBkZWx0YTtcXG40NTQ2OlxcdFxcdFxcdFxcdGlmIChhYy1cXHUwMDNlcHBlbmRpbmcpXFxuNDU0NzpcXHRcXHRcXHRcXHRcXHRhYy1cXHUwMDNlcHBlbmRpbmdbaV0gKz0gZGVsdGE7XFxuNDU0ODpcXHRcXHRcXHR9XFxuNDU0OTpcXHRcXHR9XFxuNDU1MDpcXHR9XFxuNDU1MTpcXHRcXG40NTUyOlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG40NTUzOlxcdHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxuNDU1NDpcXHR7XFxuNDU1NTpcXHRcXHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcXG40NTU2OlxcdFxcdGludCBuaWQ7XFxuNDU1NzpcXHRcXG40NTU4OlxcdFxcdGlmIChhdG9taWNfcmVhZChcXHUwMDI2bWVtY2ctXFx1MDAzZWttZW1fc3RhdCkpIHtcXG40NTU5OlxcdFxcdFxcdGludCBrbWVtID0gYXRvbWljX3hjaGcoXFx1MDAyNm1lbWNnLVxcdTAwM2VrbWVtX3N0YXQsIDApO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozNDo0NS44MzkzOTQyMTdaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MTUyMzA0MzExMzk4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIE1lbWNnIE9wdGltaXphdGlvbiBDb21taXQqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIFRoZSBjb21taXQncyBhYm91dCBvcHRpbWl6aW5nIGBtZW1jZ192bXN0YXRzYCB3aGVuIHdlICpkb24ndCogaGF2ZSBgQ09ORklHX01FTUNHX1YxYCBlbmFibGVkLiBTbywgdGhlIGtleSBpcyB0aGUgdjEgY2dyb3VwIGxlZ2FjeSBzdHVmZi4gSXQgbG9va3MgbGlrZSBpdCdzIHRha2luZyBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBvdXQgb2YgdGhlIGBtZW1jZ192bXN0YXRzYCBzdHJ1Y3QsIHdoaWNoIG1ha2VzIHNlbnNlIGJlY2F1c2UgdGhvc2UgZmllbGRzIGFyZSBvbmx5IHVzZWQgaW4gdjEgZm9yIGBtZW1vcnkuc3RhdGAgYW5kIHdoZW4gcmVwYXJlbnRpbmcgb24gb2ZmbGluZS4gVGhpcyBpcyBjb25kaXRpb25hbCB2aWEgYCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFgLiBJbiBlc3NlbmNlLCBpZiBpdCBpcyB2MiBvbmx5LCB3ZSBzYXZlIHNvbWUgbWVtb3J5LlxuXG5Fc3NlbnRpYWxseSwgd2hlbiB0aGUgbGVnYWN5IHN1cHBvcnQgaXNuJ3QgcHJlc2VudCwgdGhlIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAsIGBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlYCwgYW5kIGBmbHVzaF9ubWlfc3RhdHNgIGZ1bmN0aW9ucyB3aWxsIG5vdyByZXR1cm4gYE5VTExgIGZvciBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXlgIGFuZCBgbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5YC4gVGhhdCdzIGNyaXRpY2FsIGJlY2F1c2UgdGhlc2UgYXJyYXlzIGFyZSBubyBsb25nZXIgcHJlc2VudCwgc28gdGhpcyBwcmV2ZW50cyBhbnkgYWNjZXNzIHRvIHRoZSBvbGQsIG5vdyBub24tZXhpc3RlbnQsIGxvY2FsIGFycmF5cy4gVGhpcyBhdm9pZHMgcG90ZW50aWFsIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZXMgb3Igb3RoZXIgbWVtb3J5IGNvcnJ1cHRpb24gaXNzdWVzLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24gaXM6IGlzIHRoaXMgZnV6emFibGU/IEl0IHRvdWNoZXMgY29yZSBrZXJuZWwgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIG1lbWNnIGxvZ2ljLiBJdCdzIG5vdCAqanVzdCogYSBjb3NtZXRpYyBjaGFuZ2U7IGl0J3MgY2hhbmdpbmcgY29uZGl0aW9uYWwgbG9naWMuIElmIHYxIGlzIG9uLCBgc3RhdGVfbG9jYWxgIGlzIHVzZWQuIElmIGl0J3Mgb2ZmLCBpdCBpcyBza2lwcGVkLiBUaGlzIHNlZW1zIGxpa2UgYSBnb29kIGNhbmRpZGF0ZSEgSXQncyAqZGVmaW5pdGVseSogcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cywgc2luY2UgbWVtb3J5IGNncm91cHMgYXJlIGZ1bmRhbWVudGFsIGFuZCB1c2VkIGV2ZXJ5d2hlcmUgYW5kIGFyZSBkZWZpbml0ZWx5IGZ1enplZC5cblxuSSBuZWVkIHRvIHF1aWNrbHkgY2hlY2sgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb24gb3B0aW9ucy4gYENPTkZJR19NRU1DR2AgaXMgdGhlIGJhc2UsIG9mIGNvdXJzZSwgYW5kIGBDT05GSUdfTUVNQ0dfVjFgIGlzIHRoZSBzd2l0Y2guIExldCdzIG1ha2Ugc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55IG90aGVyIHJlbGV2YW50IGNvbmZpZyBvcHRpb25zLCBsaWtlIGBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNgLiBJIHNob3VsZCBwcm9iYWJseSBkb3VibGUtY2hlY2sgYGluaXQvS2NvbmZpZ2AgZm9yIHRoYXQgb25lLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzk1NywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ2MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjE4LjE0MzcwOTg5NVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDQzNjQ3MjgyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIk1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluaXQvS2NvbmZpZz0xMDg3PWNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuLS1cXG5pbml0L0tjb25maWctMTA5My1cXG5pbml0L0tjb25maWc6MTA5NDpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5NS1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjE4LjU4NzM2MzI3N1oiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo3MDA5NTU5MDc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgYSBzdW1tYXJ5IG9mIG15IHRob3VnaHQgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2VybmVsIENvbmZpZ3VyYXRpb24gTGFuZHNjYXBlKipcblxuT2theSwgdGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSBzb21ldGhpbmcgcmVsYXRlZCB0byBrZXJuZWwgY29uZmlndXJhdGlvbiwgYW5kIG15IGd1dCB0ZWxscyBtZSB0aGUgYGluaXQvS2NvbmZpZ2AgZmlsZSBpcyB0aGUgcGxhY2UgdG8gc3RhcnQuIFNwZWNpZmljYWxseSwgSSdtIHplcm9pbmcgaW4gb24gbGluZXMgMTA3MCB0aHJvdWdoIDExMTAuIEknbSBhc3N1bWluZyB0aGF0IHRoaXMgc2VjdGlvbiBsaWtlbHkgaG91c2VzIHRoZSByZWxldmFudCBjb25maWd1cmF0aW9uIG9wdGlvbnMgb3IgcmVsYXRlZCBkZXBlbmRlbmNpZXMgSSdtIGludGVyZXN0ZWQgaW4uIEknbGwgbmVlZCB0byBjYXJlZnVsbHkgcGFyc2UgdGhvc2UgbGluZXMgZm9yIHRoZSByZWxldmFudCBjb25maWcgc3ltYm9scyBhbmQgdGhlaXIgcHJvcGVydGllcy4gSSdsbCBiZSBsb29raW5nIGZvciBjbHVlcyBvbiBob3cgdGhpcyBhcmVhIGJlaGF2ZXMgdW5kZXIgZGlmZmVyZW50IGNvbXBpbGF0aW9uIHNjZW5hcmlvcy4gTGV0J3Mgc2VlIHdoYXQgZ2VtcyB0aGlzIHNlY3Rpb24gaG9sZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE4OTkxLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6Mzc6MjUuNTk2OTI0NzUzWiIsIlNlcSI6MTYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3MjI1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTA3NSxcbiAgXCJMaW5lQ291bnRcIjogNDVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTA3NTpcXHRcXG4xMDc2OlxcdFxcdCAgU2F5IE4gaWYgdW5zdXJlLlxcbjEwNzc6XFx0XFxuMTA3ODpcXHRjb25maWcgTUVNQ0dcXG4xMDc5OlxcdFxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbjEwODA6XFx0XFx0c2VsZWN0IFBBR0VfQ09VTlRFUlxcbjEwODE6XFx0XFx0c2VsZWN0IEVWRU5URkRcXG4xMDgyOlxcdFxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG4xMDgzOlxcdFxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbjEwODQ6XFx0XFx0aGVscFxcbjEwODU6XFx0XFx0ICBQcm92aWRlcyBjb250cm9sIG92ZXIgdGhlIG1lbW9yeSBmb290cHJpbnQgb2YgdGFza3MgaW4gYSBjZ3JvdXAuXFxuMTA4NjpcXHRcXG4xMDg3OlxcdGNvbmZpZyBNRU1DR19OTUlfVU5TQUZFXFxuMTA4ODpcXHRcXHRib29sXFxuMTA4OTpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5MDpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5MTpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgIUFSQ0hfSEFWRV9OTUlfU0FGRV9DTVBYQ0hHXFxuMTA5MjpcXHRcXHRkZWZhdWx0IHlcXG4xMDkzOlxcdFxcbjEwOTQ6XFx0Y29uZmlnIE1FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXFxuMTA5NTpcXHRcXHRib29sXFxuMTA5NjpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTA5NzpcXHRcXHRkZXBlbmRzIG9uIEhBVkVfTk1JXFxuMTA5ODpcXHRcXHRkZXBlbmRzIG9uICFBUkNIX0hBU19OTUlfU0FGRV9USElTX0NQVV9PUFMgXFx1MDAyNlxcdTAwMjYgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdcXG4xMDk5OlxcdFxcdGRlZmF1bHQgeVxcbjExMDA6XFx0XFxuMTEwMTpcXHRjb25maWcgTUVNQ0dfVjFcXG4xMTAyOlxcdFxcdGJvb2wgXFxcIkxlZ2FjeSBjZ3JvdXAgdjEgbWVtb3J5IGNvbnRyb2xsZXJcXFwiXFxuMTEwMzpcXHRcXHRkZXBlbmRzIG9uIE1FTUNHXFxuMTEwNDpcXHRcXHRkZWZhdWx0IG5cXG4xMTA1OlxcdFxcdGhlbHBcXG4xMTA2OlxcdFxcdCAgTGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlciB3aGljaCBoYXMgYmVlbiBkZXByZWNhdGVkIGJ5XFxuMTEwNzpcXHRcXHQgIGNncm91cCB2MiBpbXBsZW1lbnRhdGlvbi4gVGhlIHYxIGlzIHRoZXJlIGZvciBsZWdhY3kgYXBwbGljYXRpb25zXFxuMTEwODpcXHRcXHQgIHdoaWNoIGhhdmVuJ3QgbWlncmF0ZWQgdG8gdGhlIG5ldyBjZ3JvdXAgdjIgaW50ZXJmYWNlIHlldC4gSWYgeW91XFxuMTEwOTpcXHRcXHQgIGRvIG5vdCBoYXZlIGFueSBzdWNoIGFwcGxpY2F0aW9uIHRoZW4geW91IGFyZSBjb21wbGV0ZWx5IGZpbmUgbGVhdmluZ1xcbjExMTA6XFx0XFx0ICB0aGlzIG9wdGlvbiBkaXNhYmxlZC5cXG4xMTExOlxcdFxcbjExMTI6XFx0XFx0ICBQbGVhc2Ugbm90ZSB0aGF0IGZlYXR1cmUgc2V0IG9mIHRoZSBsZWdhY3kgbWVtb3J5IGNvbnRyb2xsZXIgaXMgbGlrZWx5XFxuMTExMzpcXHRcXHQgIGdvaW5nIHRvIHNocmluayBkdWUgdG8gZGVwcmVjYXRpb24gcHJvY2Vzcy4gTmV3IGRlcGxveW1lbnRzIHdpdGggdjFcXG4xMTE0OlxcdFxcdCAgY29udHJvbGxlciBhcmUgaGlnaGx5IGRpc2NvdXJhZ2VkLlxcbjExMTU6XFx0XFxuMTExNjpcXHRcXHQgIFNheSBOIGlmIHVuc3VyZS5cXG4xMTE3OlxcdFxcbjExMTg6XFx0Y29uZmlnIEJMS19DR1JPVVBcXG4xMTE5OlxcdFxcdGJvb2wgXFxcIklPIGNvbnRyb2xsZXJcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjI1LjU5NzE5OTgxM1oiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0NTk5Nzk0MjE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCBhbmQgRmx1c2hlcyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZywgdGltZSB0byBkaWcgaW50byB0aGUgbWVtb3J5IGNncm91cCdzIGNvcmUgYWNjb3VudGluZywgc3BlY2lmaWNhbGx5IHRoZSBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgIGZ1bmN0aW9uIGluIGBtbS9tZW1jb250cm9sLmNgLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGlzIHJvdXRpbmUgd29ya3MsIGFuZCB3aGF0IGl0J3MgcmVzcG9uc2libGUgZm9yLiBNeSBpbW1lZGlhdGUgZm9jdXMgaXMgZ29pbmcgdG8gYmUgb24gdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRoZSByZWZhY3RvcmluZyBvZiBhY2NvdW50aW5nIGNvZGUgYW5kIHRoZSBwZXJmb3JtYW5jZSBjaGFyYWN0ZXJpc3RpY3Mgb2YgdGhhdCBjb2RlLiBJIGtub3cgdGhlcmUgaGF2ZSBiZWVuIGNoYW5nZXMgdGhlcmUsIHNvIGxldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgd2hlcmUgdGhpcyBmdW5jdGlvbiBnZXRzICpjYWxsZWQqIGZyb20uIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyB0byBnZXQgYSBjbGVhciBwaWN0dXJlIG9mIHdoZW4gdGhlIGZsdXNoIG9jY3Vycywgd2hhdCB0cmlnZ2VycyBpdCwgYW5kIHdoYXQgZGF0YSBpdCdzIGFjdHVhbGx5IG1vdmluZy4gVGhhdCBzaG91bGQgZXhwb3NlIGFueSBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3IgYXJlYXMgd2hlcmUgZnVydGhlciBvcHRpbWl6YXRpb24gb3IgdW5kZXJzdGFuZGluZyBtaWdodCBiZSBuZWVkZWQuIEkgd2FudCB0byBidWlsZCBhIGJldHRlciBtb2RlbCBmb3IgdGhlIHRyYWRlIG9mZnMgaW52b2x2ZWQgaW4gdXBkYXRpbmcgdGhlIHN0YXRzLiBVbmRlcnN0YW5kaW5nIHRoZSBjYWxsIGNvbnRleHQgd2lsbCByZWFsbHkgaGVscCBtZSBzZWUgdGhlIGJpZ2dlciBwaWN0dXJlIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgYWNjb3VudGluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTk4MjgsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjMwLjE5Njk5NjgyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NjQwMDYyNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTQ2MDg9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjExLVxcbm1tL21lbWNvbnRyb2wuYzo0NjEyOnN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxubW0vbWVtY29udHJvbC5jLTQ2MTMte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUyMjE9c3RydWN0IGNncm91cF9zdWJzeXMgbWVtb3J5X2NncnBfc3Vic3lzID0ge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUyMjctXFx0LmNzc19yZXNldCA9IG1lbV9jZ3JvdXBfY3NzX3Jlc2V0LFxcbm1tL21lbWNvbnRyb2wuYzo1MjI4OlxcdC5jc3NfcnN0YXRfZmx1c2ggPSBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaCxcXG5tbS9tZW1jb250cm9sLmMtNTIyOS1cXHQuYXR0YWNoID0gbWVtX2Nncm91cF9hdHRhY2gsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjMwLjI4MzQwMjMyN1oiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDY4OTM0NjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byBNZW1vcnkgQ29udHJvbCAobWVtY29udHJvbC5jKSoqXG5cbk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIGBtbS9tZW1jb250cm9sLmNgIGZpbGUgYWdhaW4uIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gaG93IG1lbW9yeSBhY2NvdW50aW5nIGlzIHdvcmtpbmcsIGFuZCBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQgaXMgYWx3YXlzIHRvIGV4YW1pbmUgc3BlY2lmaWMgZnVuY3Rpb25zIEkndmUgZ290IHF1ZXN0aW9ucyBhYm91dC4gU3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gcmVmcmVzaCBteSBtZW1vcnksIG9yIGdhaW4gYSBkZWVwZXIgdW5kZXJzdGFuZGluZywgb2YgdGhlIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaGAgZnVuY3Rpb24uIEl0J3MgYSBrZXkgcGllY2UgaW4gaG93IG1lbW9yeSBzdGF0aXN0aWNzIGFyZSBhZ2dyZWdhdGVkIGFuZCB3cml0dGVuIHRvIHRoZSBjZ3JvdXAgaGllcmFyY2h5LiBMZXQncyBzZWUgd2hhdCdzIGhhcHBlbmluZyB3aXRoaW4gdGhhdCBhcmVhIG9mIHRoZSBjb2RlLi4uIEknbGwgbG9vayBhdCBpdHMgcm9sZSBpbiBjb2xsZWN0aW5nIGFuZCB1cGRhdGluZyBtZW1vcnkgdXNhZ2Ugc3RhdHMsIGFzIHdlbGwgYXMgd2hlbiBpdCBpcyBjYWxsZWQgYW5kIHdoeS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAzNTMsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozNzozNS43NTIzMzk1MzhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDI1MjA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NjEyLFxuICBcIkxpbmVDb3VudFwiOiA2MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI0NjEyOlxcdHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuNDYxMzpcXHR7XFxuNDYxNDpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fY3NzKGNzcyk7XFxuNDYxNTpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xcbjQ2MTY6XFx0XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1ICpzdGF0YztcXG40NjE3OlxcdFxcdHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCBhYztcXG40NjE4OlxcdFxcdGludCBuaWQ7XFxuNDYxOTpcXHRcXG40NjIwOlxcdFxcdGZsdXNoX25taV9zdGF0cyhtZW1jZywgcGFyZW50KTtcXG40NjIxOlxcdFxcbjQ2MjI6XFx0XFx0c3RhdGMgPSBwZXJfY3B1X3B0cihtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUsIGNwdSk7XFxuNDYyMzpcXHRcXG40NjI0OlxcdFxcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xcbjQ2MjU6XFx0XFx0XFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZSxcXG40NjI2OlxcdFxcdFxcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcXG40NjI3OlxcdFxcdFxcdC5wZW5kaW5nID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxuNDYyODpcXHRcXHRcXHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcgOiBOVUxMLFxcbjQ2Mjk6XFx0XFx0XFx0LmNzdGF0ID0gc3RhdGMtXFx1MDAzZXN0YXRlLFxcbjQ2MzA6XFx0XFx0XFx0LmNzdGF0X3ByZXYgPSBzdGF0Yy1cXHUwMDNlc3RhdGVfcHJldixcXG40NjMxOlxcdFxcdFxcdC5zaXplID0gTUVNQ0dfVk1TVEFUX1NJWkUsXFxuNDYzMjpcXHRcXHR9O1xcbjQ2MzM6XFx0XFx0bWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZShcXHUwMDI2YWMpO1xcbjQ2MzQ6XFx0XFxuNDYzNTpcXHRcXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcXG40NjM2OlxcdFxcdFxcdC5hZ2dyZWdhdGUgPSBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlZXZlbnRzLFxcbjQ2Mzc6XFx0XFx0XFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcXG40NjM4OlxcdFxcdFxcdC5wZW5kaW5nID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZWV2ZW50c19wZW5kaW5nLFxcbjQ2Mzk6XFx0XFx0XFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyA6IE5VTEwsXFxuNDY0MDpcXHRcXHRcXHQuY3N0YXQgPSBzdGF0Yy1cXHUwMDNlZXZlbnRzLFxcbjQ2NDE6XFx0XFx0XFx0LmNzdGF0X3ByZXYgPSBzdGF0Yy1cXHUwMDNlZXZlbnRzX3ByZXYsXFxuNDY0MjpcXHRcXHRcXHQuc2l6ZSA9IE5SX01FTUNHX0VWRU5UUyxcXG40NjQzOlxcdFxcdH07XFxuNDY0NDpcXHRcXHRtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKFxcdTAwMjZhYyk7XFxuNDY0NTpcXHRcXG40NjQ2OlxcdFxcdGZvcl9lYWNoX25vZGVfc3RhdGUobmlkLCBOX01FTU9SWSkge1xcbjQ2NDc6XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUgKnBuID0gbWVtY2ctXFx1MDAzZW5vZGVpbmZvW25pZF07XFxuNDY0ODpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzICpsc3RhdHMgPSBwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzO1xcbjQ2NDk6XFx0XFx0XFx0c3RydWN0IGxydXZlY19zdGF0cyAqcGxzdGF0cyA9IE5VTEw7XFxuNDY1MDpcXHRcXHRcXHRzdHJ1Y3QgbHJ1dmVjX3N0YXRzX3BlcmNwdSAqbHN0YXRjO1xcbjQ2NTE6XFx0XFxuNDY1MjpcXHRcXHRcXHRpZiAocGFyZW50KVxcbjQ2NTM6XFx0XFx0XFx0XFx0cGxzdGF0cyA9IHBhcmVudC1cXHUwMDNlbm9kZWluZm9bbmlkXS1cXHUwMDNlbHJ1dmVjX3N0YXRzO1xcbjQ2NTQ6XFx0XFxuNDY1NTpcXHRcXHRcXHRsc3RhdGMgPSBwZXJfY3B1X3B0cihwbi1cXHUwMDNlbHJ1dmVjX3N0YXRzX3BlcmNwdSwgY3B1KTtcXG40NjU2OlxcdFxcbjQ2NTc6XFx0XFx0XFx0YWMgPSAoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sKSB7XFxuNDY1ODpcXHRcXHRcXHRcXHQuYWdncmVnYXRlID0gbHN0YXRzLVxcdTAwM2VzdGF0ZSxcXG40NjU5OlxcdFxcdFxcdFxcdC5sb2NhbCA9IGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWwsXFxuNDY2MDpcXHRcXHRcXHRcXHQucGVuZGluZyA9IGxzdGF0cy1cXHUwMDNlc3RhdGVfcGVuZGluZyxcXG40NjYxOlxcdFxcdFxcdFxcdC5wcGVuZGluZyA9IHBsc3RhdHMgPyBwbHN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nIDogTlVMTCxcXG40NjYyOlxcdFxcdFxcdFxcdC5jc3RhdCA9IGxzdGF0Yy1cXHUwMDNlc3RhdGUsXFxuNDY2MzpcXHRcXHRcXHRcXHQuY3N0YXRfcHJldiA9IGxzdGF0Yy1cXHUwMDNlc3RhdGVfcHJldixcXG40NjY0OlxcdFxcdFxcdFxcdC5zaXplID0gTlJfTUVNQ0dfTk9ERV9TVEFUX0lURU1TLFxcbjQ2NjU6XFx0XFx0XFx0fTtcXG40NjY2OlxcdFxcdFxcdG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoXFx1MDAyNmFjKTtcXG40NjY3OlxcdFxcbjQ2Njg6XFx0XFx0fVxcbjQ2Njk6XFx0XFx0V1JJVEVfT05DRShzdGF0Yy1cXHUwMDNlc3RhdHNfdXBkYXRlcywgMCk7XFxuNDY3MDpcXHRcXHQvKiBXZSBhcmUgaW4gYSBwZXItY3B1IGxvb3AgaGVyZSwgb25seSBkbyB0aGUgYXRvbWljIHdyaXRlIG9uY2UgKi9cXG40NjcxOlxcdFxcdGlmIChhdG9taWNfbG9uZ19yZWFkKFxcdTAwMjZtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdHNfdXBkYXRlcykpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjM1Ljc1Mjc2ODAzOFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMzMzNTcxMjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEaXZpbmcgaW50byB0aGUgTWVtY2cgdjEgQ29kZSoqXG5cbk9rYXksIHNvIEknbSB0cnlpbmcgdG8gZ2V0IGEgaGFuZGxlIG9uIHRoaXMgbWVtb3J5IGNvbnRyb2wgc3R1ZmYsIHNwZWNpZmljYWxseSB0aGUgdjEgaW1wbGVtZW50YXRpb24uIEZpcnN0LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiBob3cgdGhlc2Ugc3RhdHMgYXJlIGFnZ3JlZ2F0ZWQgYW5kIG1hbmFnZWQsIHNvIEknbSBnb2luZyB0byBsb29rIGF0IGBtZW1jZ19zdGF0X2FnZ3JlZ2F0ZWAsIGBtZW1jZ19ldmVudHNfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBhbmQgYHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbGAuIEkgd2FudCB0byBzZWUgaG93IHRoZXNlIGZpdCB0b2dldGhlci5cblxuVGhlbiwgc2luY2UgSSdtIGFscmVhZHkgbG9va2luZyBhdCB0aGF0IGFyZWEgb2YgY29kZSwgSSdsbCBnbyBkZWVwZXIgYW5kIHNjcnV0aW5pemUgdGhlIGxvY2FsIGFzcGVjdHMsIHNwZWNpZmljYWxseSBgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbGAsIGBtZW1jZ19ldmVudHNfbG9jYWxgLCBgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWxgLCBhbmQgYHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbGAuIFRoZXNlIGFyZSBmb3VuZCBpbiBib3RoIGBtbS9tZW1jb250cm9sLXYxLmNgIGFuZCBgbW0vbWVtY29udHJvbC5jYCwgc28gSSdsbCBiZSBzdXJlIHRvIGNoZWNrIGJvdGguXG5cbk5vdywgYSBjcnVjaWFsIGFzcGVjdCBvZiB1bmRlcnN0YW5kaW5nIHRoaXMgc3lzdGVtIGlzIGlkZW50aWZ5aW5nIHRoZSBwdWJsaWMgaW50ZXJmYWNlcywgc28gbGV0J3Mgem9vbSBvdXQgYSBiaXQuIEl0IGlzIHZpdGFsIHRvIHNlcGFyYXRlIGludGVybmFsIGltcGxlbWVudGF0aW9uIGRldGFpbCBmcm9tIGV4dGVybmFsIEFQSXMsIHNvIGxldCdzIHNlZSB3aGljaCBmdW5jdGlvbnMgYXJlIG5vbi1zdGF0aWMgYW5kIG5vbi1pbmxpbmVkIGVudHJ5cG9pbnRzIG9yIEFQSSBmdW5jdGlvbnMuXG5cblRvIGVuc3VyZSBJJ20gbm90IG1pc3NpbmcgYW55dGhpbmcsIEknbGwgcmV2aXNpdCBgbW0vbWVtY29udHJvbC12MS5jYCBhbmQgYG1tL21lbWNvbnRyb2wuY2AuXG5cbkZpbmFsbHksIGZvciBnb29kIG1lYXN1cmUsIEknbGwgY2hlY2sgYG1tL21lbWNvbnRyb2wtdjEuaGAgdG8gc2VlIHdoYXQgSSBjYW4gZmluZCBhYm91dCB0aGUgZnVuY3Rpb24gaGVhZGVycywgc2luY2UgaGVhZGVyIGZpbGVzIGRlZmluZSBmdW5jdGlvbiBzaWduYXR1cmVzIGFuZCBhcmUgdXNlZnVsIHRvIHF1aWNrbHkgZ3Jhc3Agd2hpY2ggZnVuY3Rpb25zIG1heSBiZSBpbnZvbHZlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjE2MzYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozNzo0OS4wODg0ODMzMThaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODg5NzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vbWVtY29udHJvbC12MS5oXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDEsXG4gIFwiTGluZUNvdW50XCI6IDgwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgIDE6XFx0LyogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAtb3ItbGF0ZXIgKi9cXG4gICAyOlxcdFxcbiAgIDM6XFx0I2lmbmRlZiBfX01NX01FTUNPTlRST0xfVjFfSFxcbiAgIDQ6XFx0I2RlZmluZSBfX01NX01FTUNPTlRST0xfVjFfSFxcbiAgIDU6XFx0XFxuICAgNjpcXHQjaW5jbHVkZSBcXHUwMDNjbGludXgvY2dyb3VwLWRlZnMuaFxcdTAwM2VcXG4gICA3OlxcdCNpbmNsdWRlIFxcdTAwM2NsaW51eC9tZW1jb250cm9sLmhcXHUwMDNlXFxuICAgODpcXHRcXG4gICA5OlxcdC8qIENncm91cCB2MSBhbmQgdjIgY29tbW9uIGRlY2xhcmF0aW9ucyAqL1xcbiAgMTA6XFx0XFxuICAxMTpcXHQvKlxcbiAgMTI6XFx0ICogSXRlcmF0aW9uIGNvbnN0cnVjdHMgZm9yIHZpc2l0aW5nIGFsbCBjZ3JvdXBzICh1bmRlciBhIHRyZWUpLiAgSWZcXG4gIDEzOlxcdCAqIGxvb3BzIGFyZSBleGl0ZWQgcHJlbWF0dXJlbHkgKGJyZWFrKSwgbWVtX2Nncm91cF9pdGVyX2JyZWFrKCkgbXVzdFxcbiAgMTQ6XFx0ICogYmUgdXNlZCBmb3IgcmVmZXJlbmNlIGNvdW50aW5nLlxcbiAgMTU6XFx0ICovXFxuICAxNjpcXHQjZGVmaW5lIGZvcl9lYWNoX21lbV9jZ3JvdXBfdHJlZShpdGVyLCByb290KVxcdFxcdFxcXFxcXG4gIDE3OlxcdFxcdGZvciAoaXRlciA9IG1lbV9jZ3JvdXBfaXRlcihyb290LCBOVUxMLCBOVUxMKTtcXHRcXFxcXFxuICAxODpcXHRcXHQgICAgIGl0ZXIgIT0gTlVMTDtcXHRcXHRcXHRcXHRcXFxcXFxuICAxOTpcXHRcXHQgICAgIGl0ZXIgPSBtZW1fY2dyb3VwX2l0ZXIocm9vdCwgaXRlciwgTlVMTCkpXFxuICAyMDpcXHRcXG4gIDIxOlxcdHZvaWQgZHJhaW5fYWxsX3N0b2NrKHN0cnVjdCBtZW1fY2dyb3VwICpyb290X21lbWNnKTtcXG4gIDIyOlxcdFxcbiAgMjM6XFx0aW50IG1lbW9yeV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KTtcXG4gIDI0OlxcdFxcbiAgMjU6XFx0c3RydWN0IG1lbV9jZ3JvdXAgKm1lbV9jZ3JvdXBfcHJpdmF0ZV9pZF9nZXRfb25saW5lKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gIDI2OlxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICB1bnNpZ25lZCBpbnQgbik7XFxuICAyNzpcXHRcXG4gIDI4OlxcdC8qIENncm91cCB2MS1zcGVjaWZpYyBkZWNsYXJhdGlvbnMgKi9cXG4gIDI5OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG4gIDMwOlxcdFxcbiAgMzE6XFx0LyogV2hldGhlciBsZWdhY3kgbWVtb3J5K3N3YXAgYWNjb3VudGluZyBpcyBhY3RpdmUgKi9cXG4gIDMyOlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBkb19tZW1zd19hY2NvdW50KHZvaWQpXFxuICAzMzpcXHR7XFxuICAzNDpcXHRcXHRyZXR1cm4gIWNncm91cF9zdWJzeXNfb25fZGZsKG1lbW9yeV9jZ3JwX3N1YnN5cyk7XFxuICAzNTpcXHR9XFxuICAzNjpcXHRcXG4gIDM3OlxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfZXZlbnRzX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGV2ZW50KTtcXG4gIDM4OlxcdHVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpO1xcbiAgMzk6XFx0dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpdGVtKTtcXG4gIDQwOlxcdGJvb2wgbWVtY2cxX2FsbG9jX2V2ZW50cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiAgNDE6XFx0dm9pZCBtZW1jZzFfZnJlZV9ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gIDQyOlxcdFxcbiAgNDM6XFx0dm9pZCBtZW1jZzFfbWVtY2dfaW5pdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiAgNDQ6XFx0XFxuICA0NTpcXHRzdHJ1Y3QgY2dyb3VwX3Rhc2tzZXQ7XFxuICA0NjpcXHR2b2lkIG1lbWNnMV9jc3Nfb2ZmbGluZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpO1xcbiAgNDc6XFx0XFxuICA0ODpcXHQvKiBmb3IgZW5jb2RpbmcgY2Z0LVxcdTAwM2Vwcml2YXRlIHZhbHVlIG9uIGZpbGUgKi9cXG4gIDQ5OlxcdGVudW0gcmVzX3R5cGUge1xcbiAgNTA6XFx0XFx0X01FTSxcXG4gIDUxOlxcdFxcdF9NRU1TV0FQLFxcbiAgNTI6XFx0XFx0X0tNRU0sXFxuICA1MzpcXHRcXHRfVENQLFxcbiAgNTQ6XFx0fTtcXG4gIDU1OlxcdFxcbiAgNTY6XFx0Ym9vbCBtZW1jZzFfb29tX3ByZXBhcmUoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sICpsb2NrZWQpO1xcbiAgNTc6XFx0dm9pZCBtZW1jZzFfb29tX2ZpbmlzaChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGJvb2wgbG9ja2VkKTtcXG4gIDU4OlxcdHZvaWQgbWVtY2cxX29vbV9yZWNvdmVyKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyk7XFxuICA1OTpcXHRcXG4gIDYwOlxcdHZvaWQgbWVtY2cxX2NvbW1pdF9jaGFyZ2Uoc3RydWN0IGZvbGlvICpmb2xpbywgc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4gIDYxOlxcdHZvaWQgbWVtY2cxX3VuY2hhcmdlX2JhdGNoKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgdW5zaWduZWQgbG9uZyBwZ3Bnb3V0LFxcbiAgNjI6XFx0XFx0XFx0XFx0ICAgdW5zaWduZWQgbG9uZyBucl9tZW1vcnkpO1xcbiAgNjM6XFx0XFxuICA2NDpcXHR2b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKTtcXG4gIDY1OlxcdHZvaWQgcmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCk7XFxuICA2NjpcXHR2b2lkIHJlcGFyZW50X21lbWNnMV9scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcXG4gIDY3OlxcdFxcbiAgNjg6XFx0dm9pZCByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csXFxuICA2OTpcXHRcXHRcXHRcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcXG4gIDcwOlxcdHZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4gIDcxOlxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50LCBpbnQgaWR4KTtcXG4gIDcyOlxcdFxcbiAgNzM6XFx0dm9pZCBtZW1jZzFfYWNjb3VudF9rbWVtKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IG5yX3BhZ2VzKTtcXG4gIDc0OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtZW1jZzFfdGNwbWVtX2FjdGl2ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXFxuICA3NTpcXHR7XFxuICA3NjpcXHRcXHRyZXR1cm4gbWVtY2ctXFx1MDAzZXRjcG1lbV9hY3RpdmU7XFxuICA3NzpcXHR9XFxuICA3ODpcXHRib29sIG1lbWNnMV9jaGFyZ2Vfc2ttZW0oc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCB1bnNpZ25lZCBpbnQgbnJfcGFnZXMsXFxuICA3OTpcXHRcXHRcXHRcXHQgZ2ZwX3QgZ2ZwX21hc2spO1xcbiAgODA6XFx0c3RhdGljIGlubGluZSB2b2lkIG1lbWNnMV91bmNoYXJnZV9za21lbShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHVuc2lnbmVkIGludCBucl9wYWdlcylcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6Mzc6NDkuMDg4NTc0MzY4WiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjEwMDQzOTU5MzE5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgY2dyb3VwIHYxIE1lbW9yeSBTdGF0aXN0aWNzKipcblxuT2theSwgc28gSSBuZWVkIHRvIGRpZyBpbnRvIGhvdyBgbWVtb3J5LnN0YXRgIHdvcmtzIHdpdGhpbiBjZ3JvdXAgdjEgdG8gdW5kZXJzdGFuZCBob3cgdGhvc2UgbG9jYWwgdmFsdWVzIGFyZSBhY3R1YWxseSBiZWluZyByZWFkLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byB6ZXJvIGluIG9uIHRoZSByZWxldmFudCBjb2RlLiBMZXQncyBzZWUuLi4gSSdsbCBzdGFydCBieSBzZWFyY2hpbmcgZm9yIHRoZSBmdW5jdGlvbiByZXNwb25zaWJsZSBmb3IgZGlzcGxheWluZyB0aGUgbWVtb3J5IHN0YXRpc3RpY3Mg4oCTIHRoYXQgc2hvdWxkIGJlIGBtZW1vcnlfc3RhdF9zaG93YCDigJMgb3IgcGVyaGFwcyBhIGZ1bmN0aW9uIG5hbWVkIHNvbWV0aGluZyBhbG9uZyB0aGUgbGluZXMgb2YgYG1lbWNnMV9zdGF0X2Zvcm1hdGAsIGlmIHRoZXJlJ3MgYSBjZ3JvdXAgdjEgc3BlY2lmaWMgZm9ybWF0dGluZyBmdW5jdGlvbi4gVGhpcyBzaG91bGQgZ2l2ZSBtZSBhIGdvb2QgZW50cnkgcG9pbnQgdG8gc2VlIHdoYXQncyBoYXBwZW5pbmcgYXQgdGhlIHNvdXJjZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjM1NzEsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM3OjU5LjEzMjUzODUxN1oiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTAwMjg4ODk2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1lbW9yeV9zdGF0X3Nob3dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21lbWNvbnRyb2wtdjEuYz0yMDI4PXN0cnVjdCBjZnR5cGUgbWVtX2Nncm91cF9sZWdhY3lfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0yMDU4LVxcdFxcdC5uYW1lID0gXFxcInN0YXRcXFwiLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoyMDU5OlxcdFxcdC5zZXFfc2hvdyA9IG1lbW9yeV9zdGF0X3Nob3csXFxubW0vbWVtY29udHJvbC12MS5jLTIwNjAtXFx0fSxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0yMT12b2lkIGRyYWluX2FsbF9zdG9jayhzdHJ1Y3QgbWVtX2Nncm91cCAqcm9vdF9tZW1jZyk7XFxubW0vbWVtY29udHJvbC12MS5oLTIyLVxcbm1tL21lbWNvbnRyb2wtdjEuaDoyMzppbnQgbWVtb3J5X3N0YXRfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpO1xcbm1tL21lbWNvbnRyb2wtdjEuaC0yNC1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MDQyPXN0YXRpYyBpbnQgbWVtb3J5X2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MDQ5LVxcbm1tL21lbWNvbnRyb2wuYzo1MDUwOmludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG5tbS9tZW1jb250cm9sLmMtNTA1MS17XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTE0Nz1zdGF0aWMgc3RydWN0IGNmdHlwZSBtZW1vcnlfZmlsZXNbXSA9IHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy01MTk4LVxcdFxcdC5uYW1lID0gXFxcInN0YXRcXFwiLFxcbm1tL21lbWNvbnRyb2wuYzo1MTk5OlxcdFxcdC5zZXFfc2hvdyA9IG1lbW9yeV9zdGF0X3Nob3csXFxubW0vbWVtY29udHJvbC5jLTUyMDAtXFx0fSxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6Mzc6NTkuMjMyODUwMzUzWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjMzMDk2NjU3NjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSdtIHRoaW5raW5nIHRocm91Z2ggdGhpcyBteXNlbGY6XG5cbioqRGVsdmluZyBpbnRvIE1lbW9yeSBTdGF0aXN0aWNzIGluIG1tL21lbWNvbnRyb2wuYyoqXG5cbk9rYXksIGxldCdzIGRpdmUgaW50byB0aGUga2VybmVsIGNvZGUuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyBvbiB0aGUgYG1lbW9yeV9zdGF0X3Nob3dgIGZ1bmN0aW9uLCB3aGljaCBpcywgYXMgdGhlIG5hbWUgaW1wbGllcywgc2l0dWF0ZWQgaW4gYG1tL21lbWNvbnRyb2wuY2AuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBtZWF0IG9mIGhvdyB0aGUgbWVtb3J5IGNvbnRyb2wgc3Vic3lzdGVtIGV4cG9zZXMgaXRzIHN0YXRpc3RpY3MuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGVzZSBtZW1vcnkgdXNhZ2UgZmlndXJlcyBhcmUgY2FsY3VsYXRlZCBhbmQgcHJlc2VudGVkLCBwYXJ0aWN1bGFybHkgcmVnYXJkaW5nIGNncm91cHMuIE15IGdvYWwgaXMgdG8gdW5kZXJzdGFuZCB3aGF0IGRhdGEgaXMgcHJlc2VudGVkIHRvIHRoZSB1c2VyLCB3aGVyZSBpbiBtZW1vcnkgaXQgaXMgY2FsY3VsYXRlZCBhbmQgc3RvcmVkLCBhbmQgYW55IGltcGxpY2F0aW9ucyB0aGlzIGhhcyBmb3IgcGVyZm9ybWFuY2Ugb3IgYWNjdXJhY3kuIEkgbmVlZCB0byBjaGVjayB0aGUgaW50ZXJuYWxzIGFuZCBzZWUgd2hhdCdzIGhhcHBlbmluZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQxNjYsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozODowMi41NDI1MTg2NTVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzk2OTcxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21lbWNvbnRyb2wuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA1MDUwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCI1MDUwOlxcdGludCBtZW1vcnlfc3RhdF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG41MDUxOlxcdHtcXG41MDUyOlxcdFxcdHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyA9IG1lbV9jZ3JvdXBfZnJvbV9zZXEobSk7XFxuNTA1MzpcXHRcXHRjaGFyICpidWYgPSBrbWFsbG9jKFNFUV9CVUZfU0laRSwgR0ZQX0tFUk5FTCk7XFxuNTA1NDpcXHRcXHRzdHJ1Y3Qgc2VxX2J1ZiBzO1xcbjUwNTU6XFx0XFxuNTA1NjpcXHRcXHRpZiAoIWJ1ZilcXG41MDU3OlxcdFxcdFxcdHJldHVybiAtRU5PTUVNO1xcbjUwNTg6XFx0XFx0c2VxX2J1Zl9pbml0KFxcdTAwMjZzLCBidWYsIFNFUV9CVUZfU0laRSk7XFxuNTA1OTpcXHRcXHRtZW1vcnlfc3RhdF9mb3JtYXQobWVtY2csIFxcdTAwMjZzKTtcXG41MDYwOlxcdFxcdHNlcV9wdXRzKG0sIGJ1Zik7XFxuNTA2MTpcXHRcXHRrZnJlZShidWYpO1xcbjUwNjI6XFx0XFx0cmV0dXJuIDA7XFxuNTA2MzpcXHR9XFxuNTA2NDpcXHRcXG41MDY1OlxcdCNpZmRlZiBDT05GSUdfTlVNQVxcbjUwNjY6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGxydXZlY19wYWdlX3N0YXRlX291dHB1dChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuNTA2NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgIGludCBpdGVtKVxcbjUwNjg6XFx0e1xcbjUwNjk6XFx0XFx0cmV0dXJuIGxydXZlY19wYWdlX3N0YXRlKGxydXZlYywgaXRlbSkgKlxcbjUwNzA6XFx0XFx0XFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcXG41MDcxOlxcdH1cXG41MDcyOlxcdFxcbjUwNzM6XFx0c3RhdGljIGludCBtZW1vcnlfbnVtYV9zdGF0X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbjUwNzQ6XFx0e1xcbjUwNzU6XFx0XFx0aW50IGk7XFxuNTA3NjpcXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cgPSBtZW1fY2dyb3VwX2Zyb21fc2VxKG0pO1xcbjUwNzc6XFx0XFxuNTA3ODpcXHRcXHRtZW1fY2dyb3VwX2ZsdXNoX3N0YXRzKG1lbWNnKTtcXG41MDc5OlxcdFxcbjUwODA6XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtb3J5X3N0YXRzKTsgaSsrKSB7XFxuNTA4MTpcXHRcXHRcXHRpbnQgbmlkO1xcbjUwODI6XFx0XFxuNTA4MzpcXHRcXHRcXHRpZiAobWVtb3J5X3N0YXRzW2ldLmlkeCBcXHUwMDNlPSBOUl9WTV9OT0RFX1NUQVRfSVRFTVMpXFxuNTA4NDpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG41MDg1OlxcdFxcbjUwODY6XFx0XFx0XFx0c2VxX3ByaW50ZihtLCBcXFwiJXNcXFwiLCBtZW1vcnlfc3RhdHNbaV0ubmFtZSk7XFxuNTA4NzpcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX3N0YXRlKG5pZCwgTl9NRU1PUlkpIHtcXG41MDg4OlxcdFxcdFxcdFxcdHU2NCBzaXplO1xcbjUwODk6XFx0XFx0XFx0XFx0c3RydWN0IGxydXZlYyAqbHJ1dmVjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozODowMi41NDI5MTkxMzVaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjQ1Njc0NTYxMDAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqRnV6emluZyBEZWNpc2lvbiBmb3IgTWVtb3J5IENncm91cCBTdGF0IEFnZ3JlZ2F0aW9uKipcblxuT2theSwgc28gYFdvcnRoRnV6emluZ2AgaXMgZGVmaW5pdGVseSBgdHJ1ZWAgaGVyZS4gVGhpcyBjb21taXQgdG91Y2hlcyBjb3JlIG1lbW9yeSBjZ3JvdXAgc3RhdGlzdGljcyBhZ2dyZWdhdGlvbiBsb2dpYywgYW5kIHRoYXQncyBhbHdheXMgYSBnb29kIGNhbmRpZGF0ZSBmb3IgZnV6emluZy4gU3BlY2lmaWNhbGx5LCBJIHNlZSBjaGFuZ2VzIGltcGFjdGluZyBmdW5jdGlvbnMgbGlrZSBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZWAsIGBmbHVzaF9ubWlfc3RhdHNgLCBgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2hgLCBhbmQgdGhlIGhhbmRsaW5nIG9mIGBtZW1jZ192bXN0YXRzYCBmaWVsZHMgKGBzdGF0ZV9sb2NhbGAsIGBldmVudHNfbG9jYWxgKS4gVGhlc2UgZmllbGRzIGFyZSBjb25kaXRpb25hbGx5IGFsbG9jYXRlZCBhbmQgYWdncmVnYXRlZCBiYXNlZCBvbiB0aGUgYENPTkZJR19NRU1DR19WMWAgc2V0dGluZywgbWVhbmluZyB2MSBtZW1vcnkgY29udHJvbGxlci4gU3RhdCBmbHVzaGVzLCB0cmlnZ2VyZWQgYnkgcmVhZGluZyBgbWVtb3J5LnN0YXRgIG9yIGR1cmluZyByZWNsYW1hdGlvbi9hY2NvdW50aW5nIG9wZXJhdGlvbnMsIGFyZSBhbGwgYWZmZWN0ZWQsIG1ha2luZyB0aGlzIGFyZWEgYSBiaXQgb2YgYSBtaW5lZmllbGQuXG5cbkkndmUgdGFrZW4gYSBxdWljayBsb29rIGF0IHRoZSByZWxldmFudCBjb25maWdzLiBgTUVNQ0dgIGlzIHRoZSBiYXNlIGNvbnRyb2xsZXIsIGBNRU1DR19WMWAgZW5hYmxlcyB0aGUgbGVnYWN5IHYxIGZ1bmN0aW9uYWxpdHkuIEkgYWxzbyBub3RpY2VkIGBDT05GSUdfTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNgIGlzIGludm9sdmVkIHdpdGggYGZsdXNoX25taV9zdGF0c2AsIHdoaWNoIGl0c2VsZiBkZXBlbmRzIG9uIGEgZmV3IG1vcmUgZmxhZ3MsIGxpa2UgYEhBVkVfTk1JYCwgYEFSQ0hfSEFTX05NSV9TQUZFX1RISVNfQ1BVX09QU2AsIGFuZCBgQVJDSF9IQVZFX05NSV9TQUZFX0NNUFhDSEdgLlxuXG5Ob3csIGZvciBmb2N1cyBzeW1ib2xzOiBJJ3ZlIGlkZW50aWZpZWQgc29tZSBub24tc3RhdGljIGVudHJ5cG9pbnRzL0FQSSBmdW5jdGlvbnMgd2l0aGluIHRoaXMgc3Vic3lzdGVtIHRoYXQgYXJlIHJlbGF0ZWQgdG8gc3RhdCB1cGRhdGVzLCBmbHVzaGluZywgb3IgY2dyb3VwIG9wZXJhdGlvbnMuIFRob3NlIGZ1bmN0aW9ucyBhcmUgdGhlIG1haW4gdGFyZ2V0LiBTcGVjaWZpY2FsbHk6IGBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsYCwgYG1lbWNnX2V2ZW50c19sb2NhbGAsIGByZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbGAsIGByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWxgLCBhbmQgYG1lbW9yeV9zdGF0X3Nob3dgLiBJJ3ZlIHZlcmlmaWVkIHRoZWlyIGRlZmluaXRpb25zIGluIGBtbS9tZW1jb250cm9sLmNgIGFuZCBgbW0vbWVtY29udHJvbC12MS5jYCwgZW5zdXJpbmcgdGhleSBhcmUgbm9uLXN0YXRpYyBhbmQgcmVsZXZhbnQgdG8gbWVtb3J5IGNncm91cCBtYW5hZ2VtZW50LiBJIGFsc28gZ2xhbmNlZCBvdmVyIGBtZW1jZzFfc3RhdF9mb3JtYXRgIGFuZCBgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWxgIHRvIG1ha2Ugc3VyZSBub3RoaW5nIGltcG9ydGFudCB3YXMgbWlzc2VkLlxuXG5JJ3ZlIGdvbmUgdGhyb3VnaCB0aGUgcHJvbXB0IHJlcXVpcmVtZW50cy4gQmFzZWQgb24gdGhlIGFuYWx5c2lzLCBJIGNhbiBjb25maWRlbnRseSBjb25zdHJ1Y3QgdGhlIHJlcXVpcmVkIG91dHB1dCBmb3IgYHNldC1yZXN1bHRzYC4gRXZlcnl0aGluZyBjaGVja3Mgb3V0LCBhbmQgSSdtIHJlYWR5IHRvIHByb2NlZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1MDA4LCJPdXRwdXRUb2tlbnMiOjE3MiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4MSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM4OjI3LjExMDM3ODA4NFoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE0MDgyODExNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X3N0YXRfc2hvd1wiLFxuICAgIFwibWVtY2dfcGFnZV9zdGF0ZV9sb2NhbFwiLFxuICAgIFwibWVtY2dfZXZlbnRzX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiLFxuICAgIFwicmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSByZW1vdmVzIGxlZ2FjeSB2MS1vbmx5IGxvY2FsIHN0YXRpc3RpY3MgKHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwpIGZyb20gc3RydWN0IG1lbWNnX3Ztc3RhdHMgd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQsIGFuZCBhZGRzIE5VTEwgY2hlY2tzIGR1cmluZyBzdGF0cyBmbHVzaGluZyBhbmQgYWdncmVnYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1jZyBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB3aXRoIGJvdGggY2dyb3VwIHYxIGFuZCB2MiB3b3JrbG9hZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNQ0dcIixcbiAgICBcIk1FTUNHX1YxXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWVtb3J5X3N0YXRfc2hvd1wiLFxuICAgIFwibWVtY2dfcGFnZV9zdGF0ZV9sb2NhbFwiLFxuICAgIFwibWVtY2dfZXZlbnRzX2xvY2FsXCIsXG4gICAgXCJyZXBhcmVudF9tZW1jZ19zdGF0ZV9sb2NhbFwiLFxuICAgIFwicmVwYXJlbnRfbWVtY2cxX3N0YXRlX2xvY2FsXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSByZW1vdmVzIGxlZ2FjeSB2MS1vbmx5IGxvY2FsIHN0YXRpc3RpY3MgKHN0YXRlX2xvY2FsIGFuZCBldmVudHNfbG9jYWwpIGZyb20gc3RydWN0IG1lbWNnX3Ztc3RhdHMgd2hlbiBDT05GSUdfTUVNQ0dfVjEgaXMgZGlzYWJsZWQsIGFuZCBhZGRzIE5VTEwgY2hlY2tzIGR1cmluZyBzdGF0cyBmbHVzaGluZyBhbmQgYWdncmVnYXRpb24uIFRoaXMgbW9kaWZpZXMgY29yZSBtZW1jZyBzdGF0aXN0aWNzIGFjY291bnRpbmcgYW5kIHJlcGFyZW50aW5nIGxvZ2ljLCBtYWtpbmcgaXQgd29ydGggZnV6emluZyB3aXRoIGJvdGggY2dyb3VwIHYxIGFuZCB2MiB3b3JrbG9hZHMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM4OjI3LjI1MTIxNjM5OFoiLCJTZXEiOjI5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjY0MDI4MTE2ODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozODoyNy4yNTIwNjY5MzhaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo2NjQwMTk1NzIzNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggY29uZGl0aW9uYWxseSBjb21waWxlcyBvdXQgdGhlIGxlZ2FjeSBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBzdGF0IGFycmF5cyBmcm9tIGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2Agd2hlbiBgQ09ORklHX01FTUNHX1YxYCBpcyBkaXNhYmxlZCwgYWRkaW5nIGhlbHBlciBhY2Nlc3NvcnMgYW5kIE5VTEwgY2hlY2tzIGluIHRoZSBhZ2dyZWdhdGlvbiBhbmQgc3RhdCBmbHVzaGluZyBwYXRocy5cXG5cXG4xLiBNZW1vcnkgSW5pdGlhbGl6YXRpb246IGBzdHJ1Y3QgbWVtY2dfdm1zdGF0c2AgaXMgYWxsb2NhdGVkIHVzaW5nIGBremFsbG9jX29iaigpYCwgZW5zdXJpbmcgemVyby1pbml0aWFsaXphdGlvbiBvZiBhbGwgZmllbGRzLlxcbjIuIFVuaW5pdGlhbGl6ZWQgTWVtb3J5IC8gSW5mby1sZWFrIFJpc2s6IE5vIHVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgb3Igc3RydWN0dXJlIHBhZGRpbmcgaXMgZXhwb3NlZCwgY29waWVkIHRvIHVzZXJzcGFjZSwgb3IgYnJhbmNoZWQgdXBvbi5cXG4zLiBLQVNBTiB2cyBLTVNBTjogQW55IHBvdGVudGlhbCByZWdyZXNzaW9ucyBmcm9tIHRoaXMgY2hhbmdlIChlLmcuIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSB3aGVuIGFjY2Vzc2luZyBgbG9jYWxgIGlmIGEgY2hlY2sgd2FzIG1pc3NpbmcsIG9yIG91dC1vZi1ib3VuZHMgYXJyYXkgYWNjZXNzKSBhcmUgY292ZXJlZCBieSBzdGFuZGFyZCBrZXJuZWwgYnVnIGRldGVjdG9ycyBhbmQgS0FTQU4uIEtNU0FOIHNwZWNpZmljYWxseSBkZXRlY3RzIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFuZCBpbmZvcm1hdGlvbiBsZWFrcywgbmVpdGhlciBvZiB3aGljaCBhcmUgaW50cm9kdWNlZCBvciBtb2RpZmllZCBoZXJlLlxcblxcblRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjI5YmIzYjVlZDQ5OGMyMWRiZGYxNWE1YmI0ZmYwNTVhYzJmYTIxY1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgU2VwIDIgMTA6MzM6NDYgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9tZW1jb250cm9sLmMgYi9tbS9tZW1jb250cm9sLmNcbmluZGV4IDdjZTUwYmNjZjEyNjQuLmI5OGIyZDY4YzYyYmUgMTAwNjQ0XG4tLS0gYS9tbS9tZW1jb250cm9sLmNcbisrKyBiL21tL21lbWNvbnRyb2wuY1xuQEAgLTY3NSw5ICs2NzUsMTEgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xuIFx0bG9uZ1x0XHRcdHN0YXRlW01FTUNHX1ZNU1RBVF9TSVpFXTtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzW05SX01FTUNHX0VWRU5UU107XG4gXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuIFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXHUwMDI2IGV2ZW50cyAqL1xuIFx0bG9uZ1x0XHRcdHN0YXRlX2xvY2FsW01FTUNHX1ZNU1RBVF9TSVpFXTtcbiBcdHVuc2lnbmVkIGxvbmdcdFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XG4rI2VuZGlmXG4gXG4gXHQvKiBQZW5kaW5nIGNoaWxkIGNvdW50cyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZ1x0XHRcdHN0YXRlX3BlbmRpbmdbTUVNQ0dfVk1TVEFUX1NJWkVdO1xuQEAgLTY4Nyw2ICs2ODksMzIgQEAgc3RydWN0IG1lbWNnX3Ztc3RhdHMge1xuIFx0YXRvbWljX2xvbmdfdFx0XHRzdGF0c191cGRhdGVzO1xuIH07XG4gXG4rLypcbisgKiBUaGUgbm9uLWhpZXJhcmNoaWNhbCBtZW1jZy13aWRlIGNvdW50ZXJzIGFyZSByZWFkIGJhY2sgb25seSBieSB0aGUgbGVnYWN5XG4rICogbWVtb3J5LnN0YXQgYW5kIGJ5IHJlcGFyZW50aW5nIG9uIG9mZmxpbmUsIGJvdGggb2Ygd2hpY2ggYXJlIHYxLW9ubHkuXG4rICovXG4rI2lmZGVmIENPTkZJR19NRU1DR19WMVxuK3N0YXRpYyBsb25nICptZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2cpXG4re1xuK1x0cmV0dXJuIG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfbG9jYWw7XG4rfVxuK1xuK3N0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdHJldHVybiBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbDtcbit9XG4rI2Vsc2VcbitzdGF0aWMgbG9uZyAqbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxuK3tcbitcdHJldHVybiBOVUxMO1xuK31cbitcbitzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcbit7XG4rXHRyZXR1cm4gTlVMTDtcbit9XG4rI2VuZGlmXG4rXG4gLypcbiAgKiBtZW1jZyBhbmQgbHJ1dmVjIHN0YXRzIGZsdXNoaW5nXG4gICpcbkBAIC00NDY4LDcgKzQ0OTYsMTAgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcmVzZXQoc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcylcbiBzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xuIFx0LyogcG9pbnRlciB0byB0aGUgYWdncmVnYXRlZCAoQ1BVIGFuZCBzdWJ0cmVlIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4gXHRsb25nICphZ2dyZWdhdGU7XG4tXHQvKiBwb2ludGVyIHRvIHRoZSBub24taGllcmFyY2hpY2hhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzICovXG4rXHQvKlxuK1x0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cbitcdCAqIHNraXAgdXBkYXRpbmcgdGhlbSAoc2VlIG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KCkpXG4rXHQgKi9cbiBcdGxvbmcgKmxvY2FsO1xuIFx0LyogcG9pbnRlciB0byB0aGUgcGVuZGluZyBjaGlsZCBjb3VudGVycyBkdXJpbmcgdHJlZSBwcm9wYWdhdGlvbiAqL1xuIFx0bG9uZyAqcGVuZGluZztcbkBAIC00NTA3LDcgKzQ1MzgsNyBAQCBzdGF0aWMgdm9pZCBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCAqYWMpXG4gXHRcdH1cbiBcbiBcdFx0LyogQWdncmVnYXRlIGNvdW50cyBvbiB0aGlzIGxldmVsIGFuZCBwcm9wYWdhdGUgdXB3YXJkcyAqL1xuLVx0XHRpZiAoZGVsdGFfY3B1KVxuK1x0XHRpZiAoZGVsdGFfY3B1IFx1MDAyNlx1MDAyNiBhYy1cdTAwM2Vsb2NhbClcbiBcdFx0XHRhYy1cdTAwM2Vsb2NhbFtpXSArPSBkZWx0YV9jcHU7XG4gXG4gXHRcdGlmIChkZWx0YSkge1xuQEAgLTQ1MjEsNiArNDU1Miw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfc3RhdF9hZ2dyZWdhdGUoc3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sICphYylcbiAjaWZkZWYgQ09ORklHX01FTUNHX05NSV9TQUZFVFlfUkVRVUlSRVNfQVRPTUlDXG4gc3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcbiB7XG4rXHRsb25nICpzdGF0ZV9sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKTtcbiBcdGludCBuaWQ7XG4gXG4gXHRpZiAoYXRvbWljX3JlYWQoXHUwMDI2bWVtY2ctXHUwMDNla21lbV9zdGF0KSkge1xuQEAgLTQ1MjgsNyArNDU2MCw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdGludCBpbmRleCA9IG1lbWNnX3N0YXRzX2luZGV4KE1FTUNHX0tNRU0pO1xuIFxuIFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlW2luZGV4XSArPSBrbWVtO1xuLVx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBrbWVtO1xuK1x0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IGttZW07XG4gXHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0ga21lbTtcbiBcdH1cbkBAIC00NTUwLDcgKzQ1ODMsOCBAQCBzdGF0aWMgdm9pZCBmbHVzaF9ubWlfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxuIFx0XHRcdGlmIChwbHN0YXRzKVxuIFx0XHRcdFx0cGxzdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XG4tXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbitcdFx0XHRpZiAoc3RhdGVfbG9jYWwpXG4rXHRcdFx0XHRzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcbiBcdFx0XHRpZiAocGFyZW50KVxuIFx0XHRcdFx0cGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZ1tpbmRleF0gKz0gc2xhYjtcbiBcdFx0fVxuQEAgLTQ1NjMsNyArNDU5Nyw4IEBAIHN0YXRpYyB2b2lkIGZsdXNoX25taV9zdGF0cyhzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXG4gXHRcdFx0aWYgKHBsc3RhdHMpXG4gXHRcdFx0XHRwbHN0YXRzLVx1MDAzZXN0YXRlX3BlbmRpbmdbaW5kZXhdICs9IHNsYWI7XG4gXHRcdFx0bWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcbi1cdFx0XHRtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZXN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuK1x0XHRcdGlmIChzdGF0ZV9sb2NhbClcbitcdFx0XHRcdHN0YXRlX2xvY2FsW2luZGV4XSArPSBzbGFiO1xuIFx0XHRcdGlmIChwYXJlbnQpXG4gXHRcdFx0XHRwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9wZW5kaW5nW2luZGV4XSArPSBzbGFiO1xuIFx0XHR9XG5AQCAtNDU4OCw3ICs0NjIzLDcgQEAgc3RhdGljIHZvaWQgbWVtX2Nncm91cF9jc3NfcnN0YXRfZmx1c2goc3RydWN0IGNncm91cF9zdWJzeXNfc3RhdGUgKmNzcywgaW50IGNwdSlcbiBcbiBcdGFjID0gKHN0cnVjdCBhZ2dyZWdhdGVfY29udHJvbCkge1xuIFx0XHQuYWdncmVnYXRlID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZSxcbi1cdFx0LmxvY2FsID0gbWVtY2ctXHUwMDNldm1zdGF0cy1cdTAwM2VzdGF0ZV9sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkobWVtY2cpLFxuIFx0XHQucGVuZGluZyA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyxcbiBcdFx0LnBwZW5kaW5nID0gcGFyZW50ID8gcGFyZW50LVx1MDAzZXZtc3RhdHMtXHUwMDNlc3RhdGVfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZXN0YXRlLFxuQEAgLTQ1OTksNyArNDYzNCw3IEBAIHN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXG4gXG4gXHRhYyA9IChzdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wpIHtcbiBcdFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVx1MDAzZXZtc3RhdHMtXHUwMDNlZXZlbnRzLFxuLVx0XHQubG9jYWwgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19sb2NhbCxcbitcdFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcbiBcdFx0LnBlbmRpbmcgPSBtZW1jZy1cdTAwM2V2bXN0YXRzLVx1MDAzZWV2ZW50c19wZW5kaW5nLFxuIFx0XHQucHBlbmRpbmcgPSBwYXJlbnQgPyBwYXJlbnQtXHUwMDNldm1zdGF0cy1cdTAwM2VldmVudHNfcGVuZGluZyA6IE5VTEwsXG4gXHRcdC5jc3RhdCA9IHN0YXRjLVx1MDAzZWV2ZW50cyxcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM4OjI3LjI1MjA2OTI3OFoiLCJTZXEiOjMxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNDg5MzMxMTc2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBGdXp6aW5nIEV2YWx1YXRpb24qKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gZmlndXJlIG91dCBpZiB0aGlzIHBhdGNoIHdhcnJhbnRzIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgYW55IGNoYW5nZXMgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIGVzcGVjaWFsbHkgdGhvc2UgaW52b2x2aW5nIG5ldyBkYXRhIHN0cnVjdHVyZXMgb3IgY29uZGl0aW9uYWwgbG9naWMsIGFyZSB3b3J0aCBhIGNsb3NlciBsb29rLlxuXG5GaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGlzIHBhdGNoIGlzIGRvaW5nLiBPa2F5LCBpdCdzIG1vZGlmeWluZyBgc3RydWN0IG1lbWNnX3Ztc3RhdHNgLiBUaGUga2V5IHNlZW1zIHRvIGJlIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gb2YgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgYmFzZWQgb24gYENPTkZJR19NRU1DR19WMWAuIEludGVyZXN0aW5nLiBUaGV5J3ZlIGludHJvZHVjZWQgaGVscGVyIGZ1bmN0aW9ucywgYG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5YCBhbmQgYG1lbWNnX2V2ZW50c19sb2NhbF9hcnJheWAsIHRvIGFic3RyYWN0IGFjY2VzcyB0byB0aGVzZSBmaWVsZHMuIFRoYXQncyBnb29kIHByYWN0aWNlLCBtYWtlcyB0aGUgY29kZSBjbGVhbmVyLiBUaGUgdXNlIG9mIHRoZXNlIGFjY2Vzc29ycyBzZWVtcyB3ZWxsIHRob3VnaHQgb3V0IHRvIGtlZXAgdGhlIGFic3RyYWN0aW9uIGNsZWFuLlxuXG5JdCBsb29rcyBsaWtlIHRoZSBwcmltYXJ5IG1vZGlmaWNhdGlvbnMgYXJlIGluIGBtZW1fY2dyb3VwX3N0YXRfYWdncmVnYXRlKClgLCBgZmx1c2hfbm1pX3N0YXRzKClgLCBhbmQgYG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKClgLiBXZSdyZSBzZWVpbmcgY2hlY2tzIGZvciBgYWMtXHUwMDNlbG9jYWxgIGJlZm9yZSB3cml0aW5nLCBjaGVja3MgaW4gYGZsdXNoX25taV9zdGF0c2AgYmVmb3JlIHdyaXRpbmcgdG8gYHN0YXRlX2xvY2FsYCwgYW5kIGEgZ2VuZXJhbCBwb3B1bGF0aW9uIG9mIGAubG9jYWxgIGluIHRoZSBgZmx1c2hgIGZ1bmN0aW9uLiBUaGlzIHN1Z2dlc3RzIHRoYXQgdGhlIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBpcyBoYW5kbGVkIGNvcnJlY3RseSBieSB0aGVzZSBmdW5jdGlvbnMuIFRoZSBjb2RlIHBhdGhzIGFsbCBzZWVtIGFwcHJvcHJpYXRlIGF0IGEgZmlyc3QgZ2xhbmNlLlxuXG5Ob3csIGxldCdzIGdldCBhIGJpZ2dlciBwaWN0dXJlLiBJJ20gZ29pbmcgdG8gcnVuIGEgcXVpY2sgYGdyZXBgIGZvciBgc3RhdGVfbG9jYWxgIGFuZCBgZXZlbnRzX2xvY2FsYCBhY3Jvc3MgdGhlIHJlbGV2YW50IGNvZGViYXNlLCBzcGVjaWZpY2FsbHkgaW4gYG1tL21lbWNvbnRyb2wuY2AgYW5kIGVsc2V3aGVyZSwgdG8gZW5zdXJlIEknbSBub3QgbWlzc2luZyBhbnkgc3VidGxlIGludGVyYWN0aW9ucyBvciB1bmV4cGVjdGVkIHVzZXMuIFRoaXMgd2lsbCB0ZWxsIG1lICpleGFjdGx5KiB3aGVyZSB0aGVzZSBmaWVsZHMgYXJlIGFjY2Vzc2VkIGFuZCBob3cgdGhleSBpbnRlcmFjdCB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBrZXJuZWwuIFRoaXMgaXMgd2hlcmUgSSdsbCBnZXQgYSBjbGVhciB2aWV3LlxuXG5cbiIsIklucHV0VG9rZW5zIjozNTEwLCJPdXRwdXRUb2tlbnMiOjIzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6Mzg6NTIuMTQ1Mzg1NDY1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjozNjI5Njc3MzA4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIihzdGF0ZV9sb2NhbHxldmVudHNfbG9jYWwpXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIlxcbkZ1bGwgb3V0cHV0IGlzIHRvbyBsb25nLCBzaG93aW5nIDUwMCBvdXQgb2YgNTA2IGxpbmVzLlxcblVzZSBtb3JlIHByZWNpc2UgZXhwcmVzc2lvbiBpZiBwb3NzaWJsZS5cXG5cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jPTEyOTM9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgaW50ZWxfZ3VjICpndWMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTYtXFx0c3RydWN0IGludGVsX3VjICp1YyA9IGNvbnRhaW5lcl9vZihndWMsIHR5cGVvZigqdWMpLCBndWMpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTI5NzpcXHRzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUgbG9nX2J1Zl9zdGF0ZV9sb2NhbDtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEyOTgtXFx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlICpsb2dfYnVmX3N0YXRlO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzEzLVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNDpcXHRtZW1jcHkoXFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsIGxvZ19idWZfc3RhdGUsIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTUtXFx0YnVmZmVyX3NpemUgPSBpbnRlbF9ndWNfZ2V0X2xvZ19idWZmZXJfc2l6ZShcXHUwMDI2Z3VjLVxcdTAwM2Vsb2csIEdVQ19DQVBUVVJFX0xPR19CVUZGRVIpO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19jYXB0dXJlLmM6MTMxNjpcXHRyZWFkX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwucmVhZF9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE3OlxcdHdyaXRlX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuc2FtcGxlZF93cml0ZV9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzE4OlxcdGZ1bGxfY291bnQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmJ1ZmZlcl9mdWxsX2NudDtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMTktXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYy0xMzIwLVxcdC8qIEJvb2trZWVwaW5nIHN0dWZmICovXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2NhcHR1cmUuYzoxMzIxOlxcdGd1Yy1cXHUwMDNlbG9nLnN0YXRzW0dVQ19DQVBUVVJFX0xPR19CVUZGRVJdLmZsdXNoICs9IGxvZ19idWZfc3RhdGVfbG9jYWwuZmx1c2hfdG9fZmlsZTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfY2FwdHVyZS5jLTEzMjItXFx0bmV3X292ZXJmbG93ID0gaW50ZWxfZ3VjX2NoZWNrX2xvZ19idWZfb3ZlcmZsb3coXFx1MDAyNmd1Yy1cXHUwMDNlbG9nLCBHVUNfQ0FQVFVSRV9MT0dfQlVGRkVSLFxcbi0tXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jPTM3NT1zdGF0aWMgdm9pZCBfZ3VjX2xvZ19jb3B5X2RlYnVnbG9nc19mb3JfcmVsYXkoc3RydWN0IGludGVsX2d1Y19sb2cgKmxvZylcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy0zNzktXFx0c3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlICpsb2dfYnVmX3N0YXRlLCAqbG9nX2J1Zl9zbmFwc2hvdF9zdGF0ZTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6MzgwOlxcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy0zODEtXFx0ZW51bSBndWNfbG9nX2J1ZmZlcl90eXBlIHR5cGU7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDE4LVxcdFxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0MTk6XFx0XFx0bWVtY3B5KFxcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLCBsb2dfYnVmX3N0YXRlLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjAtXFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmMtNDIxLVxcdFxcdGJ1ZmZlcl9zaXplID0gaW50ZWxfZ3VjX2dldF9sb2dfYnVmZmVyX3NpemUobG9nLCB0eXBlKTtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIyOlxcdFxcdHJlYWRfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5yZWFkX3B0cjtcXG5kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC91Yy9pbnRlbF9ndWNfbG9nLmM6NDIzOlxcdFxcdHdyaXRlX29mZnNldCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuc2FtcGxlZF93cml0ZV9wdHI7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jOjQyNDpcXHRcXHRmdWxsX2NudCA9IGxvZ19idWZfc3RhdGVfbG9jYWwuYnVmZmVyX2Z1bGxfY250O1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MjUtXFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyNi1cXHRcXHQvKiBCb29ra2VlcGluZyBzdHVmZiAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0Mjc6XFx0XFx0bG9nLVxcdTAwM2VzdGF0c1t0eXBlXS5mbHVzaCArPSBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsdXNoX3RvX2ZpbGU7XFxuZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvdWMvaW50ZWxfZ3VjX2xvZy5jLTQyOC1cXHRcXHRuZXdfb3ZlcmZsb3cgPSBpbnRlbF9ndWNfY2hlY2tfbG9nX2J1Zl9vdmVyZmxvdyhsb2csIHR5cGUsIGZ1bGxfY250KTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MzUtXFx0XFx0LyogRmlyc3QgY29weSB0aGUgc3RhdGUgc3RydWN0dXJlIGluIHNuYXBzaG90IGJ1ZmZlciAqL1xcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYzo0MzY6XFx0XFx0bWVtY3B5KGxvZ19idWZfc25hcHNob3Rfc3RhdGUsIFxcdTAwMjZsb2dfYnVmX3N0YXRlX2xvY2FsLFxcbmRyaXZlcnMvZ3B1L2RybS9pOTE1L2d0L3VjL2ludGVsX2d1Y19sb2cuYy00MzctXFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3QgZ3VjX2xvZ19idWZmZXJfc3RhdGUpKTtcXG4tLVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jPTEzODg9c3RhdGljIHZvaWQgX19ndWNfY2FwdHVyZV9wcm9jZXNzX291dHB1dChzdHJ1Y3QgeGVfZ3VjICpndWMpXFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xMzkxLVxcdHN0cnVjdCB4ZV91YyAqdWMgPSBjb250YWluZXJfb2YoZ3VjLCB0eXBlb2YoKnVjKSwgZ3VjKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxMzkyOlxcdHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSBsb2dfYnVmX3N0YXRlX2xvY2FsO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTEzOTMtXFx0c3RydWN0IF9fZ3VjX2NhcHR1cmVfYnVmc3RhdGUgYnVmO1xcbi0tXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmMtMTQwNi1cXHQgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDA3OlxcdHhlX21hcF9tZW1jcHlfZnJvbShndWNfdG9feGUoZ3VjKSwgXFx1MDAyNmxvZ19idWZfc3RhdGVfbG9jYWwsIFxcdTAwMjZndWMtXFx1MDAzZWxvZy5iby1cXHUwMDNldm1hcCxcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDA4LVxcdFxcdFxcdCAgIGxvZ19idWZfc3RhdGVfb2Zmc2V0LCBzaXplb2Yoc3RydWN0IGd1Y19sb2dfYnVmZmVyX3N0YXRlKSk7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDEwLVxcdGJ1ZmZlcl9zaXplID0gWEVfR1VDX0xPR19TVEFURV9DQVBUVVJFX0JVRkZFUl9TSVpFO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTE6XFx0cmVhZF9vZmZzZXQgPSBsb2dfYnVmX3N0YXRlX2xvY2FsLnJlYWRfcHRyO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0MTI6XFx0d3JpdGVfb2Zmc2V0ID0gbG9nX2J1Zl9zdGF0ZV9sb2NhbC5zYW1wbGVkX3dyaXRlX3B0cjtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDEzOlxcdGZ1bGxfY291bnQgPSBGSUVMRF9HRVQoR1VDX0xPR19CVUZGRVJfU1RBVEVfQlVGRkVSX0ZVTExfQ05ULCBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE0LVxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0MTUtXFx0LyogQm9va2tlZXBpbmcgc3R1ZmYgKi9cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYzoxNDE2OlxcdHRtcCA9IEZJRUxEX0dFVChHVUNfTE9HX0JVRkZFUl9TVEFURV9GTFVTSF9UT19GSUxFLCBsb2dfYnVmX3N0YXRlX2xvY2FsLmZsYWdzKTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDE3LVxcdGd1Yy1cXHUwMDNlbG9nLnN0YXRzW0dVQ19MT0dfVFlQRV9TVEFURV9DQVBUVVJFXS5mbHVzaCArPSB0bXA7XFxuLS1cXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDU4LVxcdCAqL1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jOjE0NTk6XFx0bG9nX2J1Zl9zdGF0ZV9sb2NhbC5mbGFncyBcXHUwMDI2PSB+R1VDX0xPR19CVUZGRVJfU1RBVEVfRkxVU0hfVE9fRklMRTtcXG5kcml2ZXJzL2dwdS9kcm0veGUveGVfZ3VjX2NhcHR1cmUuYy0xNDYwLVxcdHhlX21hcF93cihndWNfdG9feGUoZ3VjKSwgXFx1MDAyNmd1Yy1cXHUwMDNlbG9nLmJvLVxcdTAwM2V2bWFwLFxcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjEtXFx0XFx0ICBsb2dfYnVmX3N0YXRlX29mZnNldCArIG9mZnNldG9mKHN0cnVjdCBndWNfbG9nX2J1ZmZlcl9zdGF0ZSwgZmxhZ3MpLCB1MzIsXFxuZHJpdmVycy9ncHUvZHJtL3hlL3hlX2d1Y19jYXB0dXJlLmM6MTQ2MjpcXHRcXHQgIGxvZ19idWZfc3RhdGVfbG9jYWwuZmxhZ3MpO1xcbmRyaXZlcnMvZ3B1L2RybS94ZS94ZV9ndWNfY2FwdHVyZS5jLTE0NjMtXFx0X19ndWNfY2FwdHVyZV9mbHVzaGxvZ19jb21wbGV0ZShndWMpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oPTE5PXN0cnVjdCByZG1hX2Nncm91cCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2Nncm91cF9yZG1hLmgtMjktXFx0c3RydWN0IGNncm91cF9maWxlXFx0XFx0ZXZlbnRzX2ZpbGU7XFxuaW5jbHVkZS9saW51eC9jZ3JvdXBfcmRtYS5oOjMwOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19sb2NhbF9maWxlO1xcbmluY2x1ZGUvbGludXgvY2dyb3VwX3JkbWEuaC0zMS19O1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oPTM1PXN0cnVjdCBodWdldGxiX2Nncm91cCB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNDgtXFx0YXRvbWljX2xvbmdfdCBldmVudHNbSFVHRV9NQVhfSFNUQVRFXVtIVUdFVExCX05SX01FTU9SWV9FVkVOVFNdO1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo0OTpcXHRhdG9taWNfbG9uZ190IGV2ZW50c19sb2NhbFtIVUdFX01BWF9IU1RBVEVdW0hVR0VUTEJfTlJfTUVNT1JZX0VWRU5UU107XFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTUwLVxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdldGxiX2Nncm91cC5oLTU0LVxcdC8qIEhhbmRsZSBmb3IgXFxcImh1Z2V0bGIuZXZlbnRzLmxvY2FsXFxcIiAqL1xcbmluY2x1ZGUvbGludXgvaHVnZXRsYl9jZ3JvdXAuaDo1NTpcXHRzdHJ1Y3QgY2dyb3VwX2ZpbGUgZXZlbnRzX2xvY2FsX2ZpbGVbSFVHRV9NQVhfSFNUQVRFXTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2V0bGJfY2dyb3VwLmgtNTYtXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xODk9c3RydWN0IG1lbV9jZ3JvdXAge1xcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjMxLVxcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfZmlsZTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyMzI6XFx0c3RydWN0IGNncm91cF9maWxlIGV2ZW50c19sb2NhbF9maWxlO1xcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTIzMy1cXG4tLVxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTI0MS1cXHRhdG9taWNfbG9uZ190XFx0XFx0bWVtb3J5X2V2ZW50c1tNRU1DR19OUl9NRU1PUllfRVZFTlRTXTtcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoyNDI6XFx0YXRvbWljX2xvbmdfdFxcdFxcdG1lbW9yeV9ldmVudHNfbG9jYWxbTUVNQ0dfTlJfTUVNT1JZX0VWRU5UU107XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMjQzLVxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg9OTQ2PXVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbW9ub3RvbmljKHN0cnVjdCBscnV2ZWMgKmxydXZlYyxcXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaC05NDctXFx0XFx0XFx0XFx0XFx0ICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmg6OTQ4OnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbmluY2x1ZGUvbGludXgvbWVtY29udHJvbC5oLTk0OS1cXHRcXHRcXHRcXHQgICAgICBlbnVtIG5vZGVfc3RhdF9pdGVtIGlkeCk7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaD0xNDA1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQxMC1cXG5pbmNsdWRlL2xpbnV4L21lbWNvbnRyb2wuaDoxNDExOnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbHJ1dmVjICpscnV2ZWMsXFxuaW5jbHVkZS9saW51eC9tZW1jb250cm9sLmgtMTQxMi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9NDI9c3RydWN0IG1pc2NfcmVzIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvbWlzY19jZ3JvdXAuaC00Ni1cXHRhdG9taWM2NF90IGV2ZW50cztcXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg6NDc6XFx0YXRvbWljNjRfdCBldmVudHNfbG9jYWw7XFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTQ4LX07XFxuLS1cXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmg9NTY9c3RydWN0IG1pc2NfY2cge1xcbi0tXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oLTYxLVxcdC8qIG1pc2MuZXZlbnRzLmxvY2FsICovXFxuaW5jbHVkZS9saW51eC9taXNjX2Nncm91cC5oOjYyOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZSBldmVudHNfbG9jYWxfZmlsZTtcXG5pbmNsdWRlL2xpbnV4L21pc2NfY2dyb3VwLmgtNjMtXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYz0xMjU9c3RhdGljIHZvaWQgbWlzY19jZ19ldmVudChlbnVtIG1pc2NfcmVzX3R5cGUgdHlwZSwgc3RydWN0IG1pc2NfY2cgKmNnKVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTEyNi17XFxua2VybmVsL2Nncm91cC9taXNjLmM6MTI3OlxcdGF0b21pYzY0X2luYyhcXHUwMDI2Y2ctXFx1MDAzZXJlc1t0eXBlXS5ldmVudHNfbG9jYWwpO1xcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjEyODpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNmNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxua2VybmVsL2Nncm91cC9taXNjLmMtMTI5LVxcbi0tXFxua2VybmVsL2Nncm91cC9taXNjLmM9MzY3PXN0YXRpYyBpbnQgX19taXNjX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIGJvb2wgbG9jYWwpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYy0zNzQtXFx0XFx0aWYgKGxvY2FsKVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjM3NTpcXHRcXHRcXHRldmVudHMgPSBhdG9taWM2NF9yZWFkKFxcdTAwMjZjZy1cXHUwMDNlcmVzW2ldLmV2ZW50c19sb2NhbCk7XFxua2VybmVsL2Nncm91cC9taXNjLmMtMzc2LVxcdFxcdGVsc2VcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM4ND1zdGF0aWMgaW50IG1pc2NfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTM4OC1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYzozODk6c3RhdGljIGludCBtaXNjX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxua2VybmVsL2Nncm91cC9taXNjLmMtMzkwLXtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jPTM5NT1zdGF0aWMgc3RydWN0IGNmdHlwZSBtaXNjX2NnX2ZpbGVzW10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL21pc2MuYy00MjMtXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNDpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgbWlzY19jZywgZXZlbnRzX2xvY2FsX2ZpbGUpLFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jOjQyNTpcXHRcXHQuc2VxX3Nob3cgPSBtaXNjX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvbWlzYy5jLTQyNi1cXHR9LFxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9NDk9c3RydWN0IHBpZHNfY2dyb3VwIHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTYxLVxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19maWxlO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjYyOlxcdHN0cnVjdCBjZ3JvdXBfZmlsZVxcdFxcdGV2ZW50c19sb2NhbF9maWxlO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTYzLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTY0LVxcdGF0b21pYzY0X3RcXHRcXHRcXHRldmVudHNbTlJfUElEQ0dfRVZFTlRTXTtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzo2NTpcXHRhdG9taWM2NF90XFx0XFx0XFx0ZXZlbnRzX2xvY2FsW05SX1BJRENHX0VWRU5UU107XFxua2VybmVsL2Nncm91cC9waWRzLmMtNjYtfTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTI0Mz1zdGF0aWMgdm9pZCBwaWRzX2V2ZW50KHN0cnVjdCBwaWRzX2Nncm91cCAqcGlkc19mb3JraW5nLFxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMjQ4LVxcdC8qIE9ubHkgbG9nIHRoZSBmaXJzdCB0aW1lIGxpbWl0IGlzIGhpdC4gKi9cXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzoyNDk6XFx0aWYgKGF0b21pYzY0X2luY19yZXR1cm4oXFx1MDAyNnAtXFx1MDAzZWV2ZW50c19sb2NhbFtQSURDR19GT1JLRkFJTF0pID09IDEpIHtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTAtXFx0XFx0cHJfaW5mbyhcXFwiY2dyb3VwOiBmb3JrIHJlamVjdGVkIGJ5IHBpZHMgY29udHJvbGxlciBpbiBcXFwiKTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI1NS1cXHQgICAgY2dycF9kZmxfcm9vdC5mbGFncyBcXHUwMDI2IENHUlBfUk9PVF9QSURTX0xPQ0FMX0VWRU5UUykge1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI1NjpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNnAtXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0yNTctXFx0XFx0cmV0dXJuO1xcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMjU5LVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI2MDpcXHRhdG9taWM2NF9pbmMoXFx1MDAyNnBpZHNfb3Zlcl9saW1pdC1cXHUwMDNlZXZlbnRzX2xvY2FsW1BJRENHX01BWF0pO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjI2MTpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNnBpZHNfb3Zlcl9saW1pdC1cXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTI2Mi1cXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jPTM2MT1zdGF0aWMgaW50IF9fcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCBib29sIGxvY2FsKVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMzcxLVxcdH1cXG5rZXJuZWwvY2dyb3VwL3BpZHMuYzozNzI6XFx0ZXZlbnRzID0gbG9jYWwgPyBwaWRzLVxcdTAwM2VldmVudHNfbG9jYWwgOiBwaWRzLVxcdTAwM2VldmVudHM7XFxua2VybmVsL2Nncm91cC9waWRzLmMtMzczLVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9Mzc4PXN0YXRpYyBpbnQgcGlkc19ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKnNmLCB2b2lkICp2KVxcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmMtMzgzLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjM4NDpzdGF0aWMgaW50IHBpZHNfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZiwgdm9pZCAqdilcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy0zODUte1xcbi0tXFxua2VybmVsL2Nncm91cC9waWRzLmM9MzkwPXN0YXRpYyBzdHJ1Y3QgY2Z0eXBlIHBpZHNfZmlsZXNbXSA9IHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jLTQxNC1cXHRcXHQubmFtZSA9IFxcXCJldmVudHMubG9jYWxcXFwiLFxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjQxNTpcXHRcXHQuc2VxX3Nob3cgPSBwaWRzX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvcGlkcy5jOjQxNjpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcGlkc19jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5rZXJuZWwvY2dyb3VwL3BpZHMuYy00MTctXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9NzU9c3RydWN0IHJkbWFjZ19yZXNvdXJjZV9wb29sIHtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTg5LVxcdHU2NFxcdFxcdFxcdGV2ZW50c19hbGxvY19mYWlsW1JETUFDR19SRVNPVVJDRV9NQVhdO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjkwOlxcdHU2NFxcdFxcdFxcdGV2ZW50c19sb2NhbF9tYXhbUkRNQUNHX1JFU09VUkNFX01BWF07XFxua2VybmVsL2Nncm91cC9yZG1hLmM6OTE6XFx0dTY0XFx0XFx0XFx0ZXZlbnRzX2xvY2FsX2FsbG9jX2ZhaWxbUkRNQUNHX1JFU09VUkNFX01BWF07XFxua2VybmVsL2Nncm91cC9yZG1hLmMtOTItfTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTEzOT1zdGF0aWMgYm9vbCBycG9vbF9oYXNfcGVyc2lzdGVudF9zdGF0ZShzdHJ1Y3QgcmRtYWNnX3Jlc291cmNlX3Bvb2wgKnJwb29sKVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmMtMTUwLVxcdFxcdCAgICBycG9vbC1cXHUwMDNlZXZlbnRzX21heFtpXSB8fFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MTpcXHRcXHQgICAgcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gfHxcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0xNTItXFx0XFx0ICAgIHJwb29sLVxcdTAwM2VldmVudHNfYWxsb2NfZmFpbFtpXSB8fFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjE1MzpcXHRcXHQgICAgcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2ldKVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTE1NC1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jPTI1OT1zdGF0aWMgdm9pZCByZG1hY2dfZXZlbnRfbG9ja2VkKHN0cnVjdCByZG1hX2Nncm91cCAqY2csXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yNzEtXFx0aWYgKHJwb29sKSB7XFxua2VybmVsL2Nncm91cC9yZG1hLmM6MjcyOlxcdFxcdHJwb29sLVxcdTAwM2VldmVudHNfbG9jYWxfYWxsb2NfZmFpbFtpbmRleF0rKztcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzoyNzM6XFx0XFx0Y2dyb3VwX2ZpbGVfbm90aWZ5KFxcdTAwMjZjZy1cXHUwMDNlZXZlbnRzX2xvY2FsX2ZpbGUpO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTI3NC1cXHR9XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yNzgtXFx0aWYgKHJwb29sKSB7XFxua2VybmVsL2Nncm91cC9yZG1hLmM6Mjc5OlxcdFxcdHJwb29sLVxcdTAwM2VldmVudHNfbG9jYWxfbWF4W2luZGV4XSsrO1xcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjI4MDpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm92ZXJfY2ctXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlKTtcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy0yODEtXFx0fVxcbi0tXFxua2VybmVsL2Nncm91cC9yZG1hLmM9Njg4PXN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03MTYtXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzE3OnN0YXRpYyBpbnQgcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqc2YsIHZvaWQgKnYpXFxua2VybmVsL2Nncm91cC9yZG1hLmMtNzE4LXtcXG4tLVxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczMi1cXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzMzOlxcdFxcdFxcdFxcdCAgIHJwb29sID8gcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9tYXhbaV0gOiAwVUxMLFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jLTczNC1cXHRcXHRcXHRcXHQgICByZG1hY2dfcmVzb3VyY2VfbmFtZXNbaV0sXFxua2VybmVsL2Nncm91cC9yZG1hLmM6NzM1OlxcdFxcdFxcdFxcdCAgIHJwb29sID8gcnBvb2wtXFx1MDAzZWV2ZW50c19sb2NhbF9hbGxvY19mYWlsW2ldIDogMFVMTCk7XFxua2VybmVsL2Nncm91cC9yZG1hLmMtNzM2LVxcdFxcdFxcdGlmIChpIFxcdTAwM2MgUkRNQUNHX1JFU09VUkNFX01BWCAtIDEpXFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYz03NDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgcmRtYWNnX2ZpbGVzW10gPSB7XFxuLS1cXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03NzMtXFx0XFx0Lm5hbWUgPSBcXFwiZXZlbnRzLmxvY2FsXFxcIixcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYzo3NzQ6XFx0XFx0LnNlcV9zaG93ID0gcmRtYWNnX2V2ZW50c19sb2NhbF9zaG93LFxcbmtlcm5lbC9jZ3JvdXAvcmRtYS5jOjc3NTpcXHRcXHQuZmlsZV9vZmZzZXQgPSBvZmZzZXRvZihzdHJ1Y3QgcmRtYV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5rZXJuZWwvY2dyb3VwL3JkbWEuYy03NzYtXFx0XFx0LmZsYWdzID0gQ0ZUWVBFX05PVF9PTl9ST09ULFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz0yNDM9c3RhdGljIGlubGluZSB2b2lkIGh1Z2V0bGJfZXZlbnQoc3RydWN0IGh1Z2V0bGJfY2dyb3VwICpodWdldGxiLCBpbnQgaWR4LFxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy0yNDUte1xcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6MjQ2OlxcdGF0b21pY19sb25nX2luYyhcXHUwMDI2aHVnZXRsYi1cXHUwMDNlZXZlbnRzX2xvY2FsW2lkeF1bZXZlbnRdKTtcXG5tbS9odWdldGxiX2Nncm91cC5jOjI0NzpcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNmh1Z2V0bGItXFx1MDAzZWV2ZW50c19sb2NhbF9maWxlW2lkeF0pO1xcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtMjQ4LVxcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz02Nzc9c3RhdGljIGludCBfX2h1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIGJvb2wgbG9jYWwpXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jLTY4Ni1cXHRpZiAobG9jYWwpXFxubW0vaHVnZXRsYl9jZ3JvdXAuYzo2ODc6XFx0XFx0bWF4ID0gYXRvbWljX2xvbmdfcmVhZChcXHUwMDI2aF9jZy1cXHUwMDNlZXZlbnRzX2xvY2FsW2lkeF1bSFVHRVRMQl9NQVhdKTtcXG5tbS9odWdldGxiX2Nncm91cC5jLTY4OC1cXHRlbHNlXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jPTY5Nj1zdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5tbS9odWdldGxiX2Nncm91cC5jLTcwMC1cXG5tbS9odWdldGxiX2Nncm91cC5jOjcwMTpzdGF0aWMgaW50IGh1Z2V0bGJfZXZlbnRzX2xvY2FsX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy03MDIte1xcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYz03MDY9c3RhdGljIHN0cnVjdCBjZnR5cGUgaHVnZXRsYl9kZmxfdG1wbFtdID0ge1xcbi0tXFxubW0vaHVnZXRsYl9jZ3JvdXAuYy03NDAtXFx0XFx0Lm5hbWUgPSBcXFwiZXZlbnRzLmxvY2FsXFxcIixcXG5tbS9odWdldGxiX2Nncm91cC5jOjc0MTpcXHRcXHQuc2VxX3Nob3cgPSBodWdldGxiX2V2ZW50c19sb2NhbF9zaG93LFxcbm1tL2h1Z2V0bGJfY2dyb3VwLmM6NzQyOlxcdFxcdC5maWxlX29mZnNldCA9IE1FTUZJTEVfT0ZGU0VUKHN0cnVjdCBodWdldGxiX2Nncm91cCwgZXZlbnRzX2xvY2FsX2ZpbGVbMF0pLFxcbm1tL2h1Z2V0bGJfY2dyb3VwLmMtNzQzLVxcdFxcdC5mbGFncyA9IENGVFlQRV9OT1RfT05fUk9PVCxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNzQyPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbm9kZV9ucl9scnVfcGFnZXMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE3NTYtXFx0XFx0ZWxzZVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxNzU3OlxcdFxcdFxcdG5yICs9IGxydXZlY19wYWdlX3N0YXRlX2xvY2FsKGxydXZlYywgTlJfTFJVX0JBU0UgKyBscnUpO1xcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzU4LVxcdH1cXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYz0xNzYyPXN0YXRpYyB1bnNpZ25lZCBsb25nIG1lbV9jZ3JvdXBfbnJfbHJ1X3BhZ2VzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xNzc0LVxcdFxcdGVsc2VcXG5tbS9tZW1jb250cm9sLXYxLmM6MTc3NTpcXHRcXHRcXHRuciArPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBOUl9MUlVfQkFTRSArIGxydSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE3NzYtXFx0fVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jPTE4NjM9c3RhdGljIGNvbnN0IHVuc2lnbmVkIGludCBtZW1jZzFfZXZlbnRzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTg2OS1cXG5tbS9tZW1jb250cm9sLXYxLmM6MTg3MDp2b2lkIHJlcGFyZW50X21lbWNnMV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzEte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4NzQtXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIEFSUkFZX1NJWkUobWVtY2cxX3N0YXRzKTsgaSsrKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc1OlxcdFxcdHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQsIG1lbWNnMV9zdGF0c1tpXSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE4NzYtfVxcbm1tL21lbWNvbnRyb2wtdjEuYy0xODc3LVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODc4OnZvaWQgcmVwYXJlbnRfbWVtY2cxX2xydXZlY19zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC12MS5jLTE4Nzkte1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4ODItXFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIE5SX0xSVV9MSVNUUzsgaSsrKVxcbm1tL21lbWNvbnRyb2wtdjEuYzoxODgzOlxcdFxcdHJlcGFyZW50X21lbWNnX2xydXZlY19zdGF0ZV9sb2NhbChtZW1jZywgcGFyZW50LCBpKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTg4NC19XFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmM9MTg4Nj12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE4OTgtXFxubW0vbWVtY29udHJvbC12MS5jOjE4OTk6XFx0XFx0bnIgPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsX291dHB1dChtZW1jZywgbWVtY2cxX3N0YXRzW2ldKTtcXG5tbS9tZW1jb250cm9sLXYxLmMtMTkwMC1cXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiJXMgJWx1XFxcXG5cXFwiLCBtZW1jZzFfc3RhdF9uYW1lc1tpXSwgbnIpO1xcbi0tXFxubW0vbWVtY29udHJvbC12MS5jLTE5MDQtXFx0XFx0c2VxX2J1Zl9wcmludGYocywgXFxcIiVzICVsdVxcXFxuXFxcIiwgdm1fZXZlbnRfbmFtZShtZW1jZzFfZXZlbnRzW2ldKSxcXG5tbS9tZW1jb250cm9sLXYxLmM6MTkwNTpcXHRcXHRcXHQgICAgICAgbWVtY2dfZXZlbnRzX2xvY2FsKG1lbWNnLCBtZW1jZzFfZXZlbnRzW2ldKSk7XFxubW0vbWVtY29udHJvbC12MS5jLTE5MDYtXFxuLS1cXG5tbS9tZW1jb250cm9sLXYxLmMtMTkwOC1cXHRcXHRzZXFfYnVmX3ByaW50ZihzLCBcXFwiJXMgJWx1XFxcXG5cXFwiLCBscnVfbGlzdF9uYW1lKGkpLFxcbm1tL21lbWNvbnRyb2wtdjEuYzoxOTA5OlxcdFxcdFxcdCAgICAgICBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBOUl9MUlVfQkFTRSArIGkpICpcXG5tbS9tZW1jb250cm9sLXYxLmMtMTkxMC1cXHRcXHRcXHQgICAgICAgUEFHRV9TSVpFKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD0zMj1zdGF0aWMgaW5saW5lIGJvb2wgZG9fbWVtc3dfYWNjb3VudCh2b2lkKVxcbi0tXFxubW0vbWVtY29udHJvbC12MS5oLTM2LVxcbm1tL21lbWNvbnRyb2wtdjEuaDozNzp1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudCk7XFxubW0vbWVtY29udHJvbC12MS5oOjM4OnVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBpZHgpO1xcbm1tL21lbWNvbnRyb2wtdjEuaDozOTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pO1xcbm1tL21lbWNvbnRyb2wtdjEuaC00MC1ib29sIG1lbWNnMV9hbGxvY19ldmVudHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wtdjEuaD02ND12b2lkIG1lbWNnMV9zdGF0X2Zvcm1hdChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIHN0cnVjdCBzZXFfYnVmICpzKTtcXG5tbS9tZW1jb250cm9sLXYxLmg6NjU6dm9pZCByZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KTtcXG5tbS9tZW1jb250cm9sLXYxLmg6NjY6dm9pZCByZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCk7XFxubW0vbWVtY29udHJvbC12MS5oLTY3LVxcbm1tL21lbWNvbnRyb2wtdjEuaDo2ODp2b2lkIHJlcGFyZW50X21lbWNnX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNjktXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeCk7XFxubW0vbWVtY29udHJvbC12MS5oOjcwOnZvaWQgcmVwYXJlbnRfbWVtY2dfbHJ1dmVjX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZyxcXG5tbS9tZW1jb250cm9sLXYxLmgtNzEtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTIzNj1zdGF0aWMgdm9pZCBfX21lbV9jZ3JvdXBfZmx1c2hfc3RhdHMoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBib29sIGZvcmNlKTtcXG5tbS9tZW1jb250cm9sLmMtMjM3LVxcbm1tL21lbWNvbnRyb2wuYzoyMzg6c3RhdGljIGlubGluZSB2b2lkIHJlcGFyZW50X3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG5tbS9tZW1jb250cm9sLmMtMjM5LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0yNTEtXFx0LyogVGhlIGZvbGxvd2luZyBjb3VudHMgYXJlIGFsbCBub24taGllcmFyY2hpY2FsIGFuZCBuZWVkIHRvIGJlIHJlcGFyZW50ZWQuICovXFxubW0vbWVtY29udHJvbC5jOjI1MjpcXHRyZXBhcmVudF9tZW1jZzFfc3RhdGVfbG9jYWwobWVtY2csIHBhcmVudCk7XFxubW0vbWVtY29udHJvbC5jOjI1MzpcXHRyZXBhcmVudF9tZW1jZzFfbHJ1dmVjX3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0yNTQtXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMjU3LSNlbHNlXFxubW0vbWVtY29udHJvbC5jOjI1ODpzdGF0aWMgaW5saW5lIHZvaWQgcmVwYXJlbnRfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50KVxcbm1tL21lbWNvbnRyb2wuYy0yNTkte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTI3Nz1zdGF0aWMgdm9pZCBtZW1jZ19yZXBhcmVudF9vYmpjZ3Moc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTMwNy1cXG5tbS9tZW1jb250cm9sLmM6MzA4OlxcdHJlcGFyZW50X3N0YXRlX2xvY2FsKG1lbWNnLCBwYXJlbnQpO1xcbm1tL21lbWNvbnRyb2wuYy0zMDktfVxcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ4MT1zdHJ1Y3QgbHJ1dmVjX3N0YXRzIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00ODUtXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHN0YXRlICovXFxubW0vbWVtY29udHJvbC5jOjQ4NjpcXHRsb25nIHN0YXRlX2xvY2FsW05SX01FTUNHX05PREVfU1RBVF9JVEVNU107XFxubW0vbWVtY29udHJvbC5jLTQ4Ny1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz01MzM9dW5zaWduZWQgbG9uZyBscnV2ZWNfcGFnZV9zdGF0ZV9tb25vdG9uaWMoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTU0OS1cXG5tbS9tZW1jb250cm9sLmM6NTUwOnVuc2lnbmVkIGxvbmcgbHJ1dmVjX3BhZ2Vfc3RhdGVfbG9jYWwoc3RydWN0IGxydXZlYyAqbHJ1dmVjLFxcbm1tL21lbWNvbnRyb2wuYy01NTEtXFx0XFx0XFx0XFx0ICAgICAgZW51bSBub2RlX3N0YXRfaXRlbSBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTY0LVxcdHBuID0gY29udGFpbmVyX29mKGxydXZlYywgc3RydWN0IG1lbV9jZ3JvdXBfcGVyX25vZGUsIGxydXZlYyk7XFxubW0vbWVtY29udHJvbC5jOjU2NTpcXHR4ID0gUkVBRF9PTkNFKHBuLVxcdTAwM2VscnV2ZWNfc3RhdHMtXFx1MDAzZXN0YXRlX2xvY2FsW2ldKTtcXG5tbS9tZW1jb250cm9sLmMtNTY2LSNpZmRlZiBDT05GSUdfU01QXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTc0PXN0YXRpYyB2b2lkIF9fbW9kX21lbWNnX2xydXZlY19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqcG4sXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTc2LVxcbm1tL21lbWNvbnRyb2wuYzo1Nzc6dm9pZCByZXBhcmVudF9tZW1jZ19scnV2ZWNfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy01NzgtXFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQsIGludCBpZHgpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTg0LVxcdFxcdHN0cnVjdCBscnV2ZWMgKnBhcmVudF9scnV2ZWMgPSBtZW1fY2dyb3VwX2xydXZlYyhwYXJlbnQsIE5PREVfREFUQShuaWQpKTtcXG5tbS9tZW1jb250cm9sLmM6NTg1OlxcdFxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSBscnV2ZWNfcGFnZV9zdGF0ZV9sb2NhbChjaGlsZF9scnV2ZWMsIGlkeCk7XFxubW0vbWVtY29udHJvbC5jLTU4Ni1cXHRcXHRzdHJ1Y3QgbWVtX2Nncm91cF9wZXJfbm9kZSAqY2hpbGRfcG4sICpwYXJlbnRfcG47XFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NjczPXN0cnVjdCBtZW1jZ192bXN0YXRzIHtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02NzktXFx0LyogTm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIHBhZ2Ugc3RhdGUgXFx1MDAyNiBldmVudHMgKi9cXG5tbS9tZW1jb250cm9sLmM6NjgwOlxcdGxvbmdcXHRcXHRcXHRzdGF0ZV9sb2NhbFtNRU1DR19WTVNUQVRfU0laRV07XFxubW0vbWVtY29udHJvbC5jOjY4MTpcXHR1bnNpZ25lZCBsb25nXFx0XFx0ZXZlbnRzX2xvY2FsW05SX01FTUNHX0VWRU5UU107XFxubW0vbWVtY29udHJvbC5jLTY4Mi0jZW5kaWZcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02OTYtI2lmZGVmIENPTkZJR19NRU1DR19WMVxcbm1tL21lbWNvbnRyb2wuYzo2OTc6c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNjk4LXtcXG5tbS9tZW1jb250cm9sLmM6Njk5OlxcdHJldHVybiBtZW1jZy1cXHUwMDNldm1zdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwMC19XFxubW0vbWVtY29udHJvbC5jLTcwMS1cXG5tbS9tZW1jb250cm9sLmM6NzAyOnN0YXRpYyB1bnNpZ25lZCBsb25nICptZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnKVxcbm1tL21lbWNvbnRyb2wuYy03MDMte1xcbm1tL21lbWNvbnRyb2wuYzo3MDQ6XFx0cmV0dXJuIG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWw7XFxubW0vbWVtY29udHJvbC5jLTcwNS19XFxubW0vbWVtY29udHJvbC5jLTcwNi0jZWxzZVxcbm1tL21lbWNvbnRyb2wuYzo3MDc6c3RhdGljIGxvbmcgKm1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNzA4LXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03MTEtXFxubW0vbWVtY29udHJvbC5jOjcxMjpzdGF0aWMgdW5zaWduZWQgbG9uZyAqbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZylcXG5tbS9tZW1jb250cm9sLmMtNzEzLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz04NjA9c3RhdGljIGxvbmcgbWVtY2dfc3RhdGVfdmFsX2luX3BhZ2VzKGludCBpZHgsIGxvbmcgdmFsKVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTg3OC0gKiBVc2VkIGluIG1vZF9tZW1jZ19zdGF0ZSgpIGFuZCBtb2RfbWVtY2dfbHJ1dmVjX3N0YXRlKCkgdG8gYXZvaWQgcmFjZSB3aXRoXFxubW0vbWVtY29udHJvbC5jOjg3OTogKiByZXBhcmVudGluZyBvZiBub24taGllcmFyY2hpY2FsIHN0YXRlX2xvY2Fscy5cXG5tbS9tZW1jb250cm9sLmMtODgwLSAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTk0ND12b2lkIG1vZF9tZW1jZ19zdGF0ZShzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGVudW0gbWVtY2dfc3RhdF9pdGVtIGlkeCxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NTgtLyogaWR4IGNhbiBiZSBvZiB0eXBlIGVudW0gbWVtY2dfc3RhdF9pdGVtIG9yIG5vZGVfc3RhdF9pdGVtLiAqL1xcbm1tL21lbWNvbnRyb2wuYzo5NTk6dW5zaWduZWQgbG9uZyBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGlkeClcXG5tbS9tZW1jb250cm9sLmMtOTYwLXtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy05NjYtXFxubW0vbWVtY29udHJvbC5jOjk2NzpcXHR4ID0gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpXSk7XFxubW0vbWVtY29udHJvbC5jLTk2OC0jaWZkZWYgQ09ORklHX1NNUFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTk3NC1cXG5tbS9tZW1jb250cm9sLmM6OTc1OnZvaWQgcmVwYXJlbnRfbWVtY2dfc3RhdGVfbG9jYWwoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbm1tL21lbWNvbnRyb2wuYy05NzYtXFx0XFx0XFx0XFx0c3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudCwgaW50IGlkeClcXG5tbS9tZW1jb250cm9sLmMtOTc3LXtcXG5tbS9tZW1jb250cm9sLmM6OTc4OlxcdHVuc2lnbmVkIGxvbmcgdmFsdWUgPSBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpZHgpO1xcbm1tL21lbWNvbnRyb2wuYy05NzktXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9MTEzMj1ib29sIG1lbWNnX3ZtX2V2ZW50X2l0ZW1fdmFsaWQoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xMTQwLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmM6MTE0MTp1bnNpZ25lZCBsb25nIG1lbWNnX2V2ZW50c19sb2NhbChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGludCBldmVudClcXG5tbS9tZW1jb250cm9sLmMtMTE0Mi17XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtMTE0Ny1cXG5tbS9tZW1jb250cm9sLmM6MTE0ODpcXHRyZXR1cm4gUkVBRF9PTkNFKG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfbG9jYWxbaV0pO1xcbm1tL21lbWNvbnRyb2wuYy0xMTQ5LX1cXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xNzI0PXVuc2lnbmVkIGxvbmcgbWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLCBpbnQgaXRlbSlcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy0xNzMwLSNpZmRlZiBDT05GSUdfTUVNQ0dfVjFcXG5tbS9tZW1jb250cm9sLmM6MTczMTp1bnNpZ25lZCBsb25nIG1lbWNnX3BhZ2Vfc3RhdGVfbG9jYWxfb3V0cHV0KHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgaW50IGl0ZW0pXFxubW0vbWVtY29udHJvbC5jLTE3MzIte1xcbm1tL21lbWNvbnRyb2wuYzoxNzMzOlxcdHJldHVybiBtZW1jZ19wYWdlX3N0YXRlX2xvY2FsKG1lbWNnLCBpdGVtKSAqXFxubW0vbWVtY29udHJvbC5jLTE3MzQtXFx0XFx0bWVtY2dfcGFnZV9zdGF0ZV9vdXRwdXRfdW5pdChpdGVtKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz0xOTExPXZvaWQgX19tZW1jZ19tZW1vcnlfZXZlbnQoc3RydWN0IG1lbV9jZ3JvdXAgKm1lbWNnLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTE5MTktXFxubW0vbWVtY29udHJvbC5jOjE5MjA6XFx0YXRvbWljX2xvbmdfaW5jKFxcdTAwMjZtZW1jZy1cXHUwMDNlbWVtb3J5X2V2ZW50c19sb2NhbFtldmVudF0pO1xcbm1tL21lbWNvbnRyb2wuYy0xOTIxLVxcdGlmICghc3dhcF9ldmVudCBcXHUwMDI2XFx1MDAyNiBhbGxvd19zcGlubmluZylcXG5tbS9tZW1jb250cm9sLmM6MTkyMjpcXHRcXHRjZ3JvdXBfZmlsZV9ub3RpZnkoXFx1MDAyNm1lbWNnLVxcdTAwM2VldmVudHNfbG9jYWxfZmlsZSk7XFxubW0vbWVtY29udHJvbC5jLTE5MjMtXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NDQ5Nj1zdHJ1Y3QgYWdncmVnYXRlX2NvbnRyb2wge1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ1MDAtXFx0ICogcG9pbnRlciB0byB0aGUgbm9uLWhpZXJhcmNoaWNhbCAoQ1BVIGFnZ3JlZ2F0ZWQpIGNvdW50ZXJzIG9yIE5VTEwgdG9cXG5tbS9tZW1jb250cm9sLmM6NDUwMTpcXHQgKiBza2lwIHVwZGF0aW5nIHRoZW0gKHNlZSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheSgpKVxcbm1tL21lbWNvbnRyb2wuYy00NTAyLVxcdCAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQ1NTM9c3RhdGljIHZvaWQgZmx1c2hfbm1pX3N0YXRzKHN0cnVjdCBtZW1fY2dyb3VwICptZW1jZywgc3RydWN0IG1lbV9jZ3JvdXAgKnBhcmVudClcXG5tbS9tZW1jb250cm9sLmMtNDU1NC17XFxubW0vbWVtY29udHJvbC5jOjQ1NTU6XFx0bG9uZyAqc3RhdGVfbG9jYWwgPSBtZW1jZ19zdGF0ZV9sb2NhbF9hcnJheShtZW1jZyk7XFxubW0vbWVtY29udHJvbC5jLTQ1NTYtXFx0aW50IG5pZDtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTYyLVxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0ga21lbTtcXG5tbS9tZW1jb250cm9sLmM6NDU2MzpcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ1NjQ6XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IGttZW07XFxubW0vbWVtY29udHJvbC5jLTQ1NjUtXFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTgxLVxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ1ODI6XFx0XFx0XFx0bHN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDU4My1cXHRcXHRcXHRpZiAocGxzdGF0cylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTg1LVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmM6NDU4NjpcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ1ODc6XFx0XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ1ODgtXFx0XFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTk1LVxcdFxcdFxcdGxzdGF0cy1cXHUwMDNlc3RhdGVbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jOjQ1OTY6XFx0XFx0XFx0bHN0YXRzLVxcdTAwM2VzdGF0ZV9sb2NhbFtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmMtNDU5Ny1cXHRcXHRcXHRpZiAocGxzdGF0cylcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NTk5LVxcdFxcdFxcdG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZVtpbmRleF0gKz0gc2xhYjtcXG5tbS9tZW1jb250cm9sLmM6NDYwMDpcXHRcXHRcXHRpZiAoc3RhdGVfbG9jYWwpXFxubW0vbWVtY29udHJvbC5jOjQ2MDE6XFx0XFx0XFx0XFx0c3RhdGVfbG9jYWxbaW5kZXhdICs9IHNsYWI7XFxubW0vbWVtY29udHJvbC5jLTQ2MDItXFx0XFx0XFx0aWYgKHBhcmVudClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NjEyPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYyNS1cXHRcXHQuYWdncmVnYXRlID0gbWVtY2ctXFx1MDAzZXZtc3RhdHMtXFx1MDAzZXN0YXRlLFxcbm1tL21lbWNvbnRyb2wuYzo0NjI2OlxcdFxcdC5sb2NhbCA9IG1lbWNnX3N0YXRlX2xvY2FsX2FycmF5KG1lbWNnKSxcXG5tbS9tZW1jb250cm9sLmMtNDYyNy1cXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VzdGF0ZV9wZW5kaW5nLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTQ2MzYtXFx0XFx0LmFnZ3JlZ2F0ZSA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHMsXFxubW0vbWVtY29udHJvbC5jOjQ2Mzc6XFx0XFx0LmxvY2FsID0gbWVtY2dfZXZlbnRzX2xvY2FsX2FycmF5KG1lbWNnKSxcXG5tbS9tZW1jb250cm9sLmMtNDYzOC1cXHRcXHQucGVuZGluZyA9IG1lbWNnLVxcdTAwM2V2bXN0YXRzLVxcdTAwM2VldmVudHNfcGVuZGluZyxcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy00NjU4LVxcdFxcdFxcdC5hZ2dyZWdhdGUgPSBsc3RhdHMtXFx1MDAzZXN0YXRlLFxcbm1tL21lbWNvbnRyb2wuYzo0NjU5OlxcdFxcdFxcdC5sb2NhbCA9IGxzdGF0cy1cXHUwMDNlc3RhdGVfbG9jYWwsXFxubW0vbWVtY29udHJvbC5jLTQ2NjAtXFx0XFx0XFx0LnBlbmRpbmcgPSBsc3RhdHMtXFx1MDAzZXN0YXRlX3BlbmRpbmcsXFxuLS1cXG5tbS9tZW1jb250cm9sLmM9NTAzND1zdGF0aWMgaW50IG1lbW9yeV9ldmVudHNfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTA0MS1cXG5tbS9tZW1jb250cm9sLmM6NTA0MjpzdGF0aWMgaW50IG1lbW9yeV9ldmVudHNfbG9jYWxfc2hvdyhzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHZvaWQgKnYpXFxubW0vbWVtY29udHJvbC5jLTUwNDMte1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTUwNDUtXFxubW0vbWVtY29udHJvbC5jOjUwNDY6XFx0X19tZW1vcnlfZXZlbnRzX3Nob3cobSwgbWVtY2ctXFx1MDAzZW1lbW9yeV9ldmVudHNfbG9jYWwpO1xcbm1tL21lbWNvbnRyb2wuYy01MDQ3LVxcdHJldHVybiAwO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTUxNDc9c3RhdGljIHN0cnVjdCBjZnR5cGUgbWVtb3J5X2ZpbGVzW10gPSB7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNTE5My1cXHRcXHQuZmxhZ3MgPSBDRlRZUEVfTk9UX09OX1JPT1QsXFxubW0vbWVtY29udHJvbC5jOjUxOTQ6XFx0XFx0LmZpbGVfb2Zmc2V0ID0gb2Zmc2V0b2Yoc3RydWN0IG1lbV9jZ3JvdXAsIGV2ZW50c19sb2NhbF9maWxlKSxcXG5tbS9tZW1jb250cm9sLmM6NTE5NTpcXHRcXHQuc2VxX3Nob3cgPSBtZW1vcnlfZXZlbnRzX2xvY2FsX3Nob3csXFxubW0vbWVtY29udHJvbC5jLTUxOTYtXFx0fSxcXG4tLVxcbm1tL3dvcmtpbmdzZXQuYz02NTE9c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfc2hhZG93X25vZGVzKHN0cnVjdCBzaHJpbmtlciAqc2hyaW5rZXIsXFxuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAyVDEwOjM4OjU1Ljc3NTA2Nzc1M1oiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoxMDY4NzAxOTM2MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1lbWNnIFZNc3RhdHMgUGF0Y2gqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcyBwYXRjaCB3aXRoIGEgY3JpdGljYWwgZXllLiBJIHNlZSB3ZSdyZSBkZWFsaW5nIHdpdGggbW9kaWZpY2F0aW9ucyBpbiBgbW0vbWVtY29udHJvbC5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYG1lbWNnX3Ztc3RhdHNgIHN0cnVjdHVyZS4gUmlnaHQgb2ZmIHRoZSBiYXQsIEkgbm90aWNlIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbjsgdGhlIGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIGZpZWxkcyBhcmUgb25seSBwcmVzZW50IGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGVuYWJsZWQuIEEgY2xhc3NpYyBtZW1vcnkgb3B0aW1pemF0aW9uIHN0cmF0ZWd5IOKAkyBvbWl0IHRoZSBmaWVsZHMgd2hlbiB0aGV5IGFyZW4ndCB1c2VkLiBDbGV2ZXIuXG5cbk15IGltbWVkaWF0ZSBjb25jZXJuLCBhcyBhbHdheXMsIGlzIHdoZXRoZXIgdGhpcyBpbnRyb2R1Y2VzIGFueSBzdWJ0bGUgaXNzdWVzLiBDb3VsZCB0aGVyZSBiZSB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBsdXJraW5nIGhlcmU/IEEgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWsgdG8gdXNlciBzcGFjZT8gVW5pbml0aWFsaXplZCBzdHJ1Y3QgZmllbGRzIGJlaW5nIGFjY2Vzc2VkPyBVbmluaXRpYWxpemVkIHZhcmlhYmxlcyBpbmZsdWVuY2luZyBicmFuY2hpbmc/IE15IGV4cGVydCBpbnR1aXRpb24gdGVsbHMgbWUgdG8gdGhvcm91Z2hseSBpbnZlc3RpZ2F0ZSB0aGVzZSBwb3NzaWJpbGl0aWVzLlxuXG5BbHJpZ2h0LCB0aGUgaGVscGVyIGZ1bmN0aW9ucyBgbWVtY2dfc3RhdGVfbG9jYWxfYXJyYXkoKWAgYW5kIGBtZW1jZ19ldmVudHNfbG9jYWxfYXJyYXkoKWAgc2VlbSB0byBiZSB0aGUga2V5LiBUaGV5IGVpdGhlciByZXR1cm4gdGhlIGBzdGF0ZV9sb2NhbGAgb3IgYGV2ZW50c19sb2NhbGAgYXJyYXlzIGlmIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGFjdGl2ZSwgb3IgTlVMTCBvdGhlcndpc2UuIFRoYXQncyBnb29kLCBwcm92aWRpbmcgYSBzYWZlIHdheSB0byBoYW5kbGUgdGhlIGNvbmRpdGlvbmFsIHByZXNlbmNlIG9mIHRoZXNlIGZpZWxkcy4gVGhlIGNhbGxlcnMsIHNwZWNpZmljYWxseSBgbWVtX2Nncm91cF9zdGF0X2FnZ3JlZ2F0ZSgpYCwgYGZsdXNoX25taV9zdGF0cygpYCwgYW5kIGBtZW1fY2dyb3VwX2Nzc19yc3RhdF9mbHVzaCgpYCwgc2VlbSB0byBiZSB1c2luZyB0aGVzZSBoZWxwZXIgZnVuY3Rpb25zIG9yIGV4cGxpY2l0bHkgY2hlY2tpbmcgZm9yIE5VTEwsIHdoaWNoIGlzIHRoZSBjb3JyZWN0IGFwcHJvYWNoLiBTbywgYXQgZmlyc3QgZ2xhbmNlLCBJJ20gbm90IHNlZWluZyBhbnkgb2J2aW91cyByZWQgZmxhZ3MuXG5cbk5vdywgbGV0J3MgdmVyaWZ5LiBJIG5lZWQgdG8gdHJhY2Ugd2hlcmUgdGhpcyBgc3RydWN0IG1lbWNnX3Ztc3RhdHNgIGlzIGFsbG9jYXRlZCBhbmQgaW5pdGlhbGl6ZWQuIEkgbmVlZCB0byBtYWtlIHN1cmUgdGhhdCB0aGUgc3RydWN0dXJlIGl0c2VsZiBpcyBhbGxvY2F0ZWQgYW5kIHRoZSBmaWVsZHMgYXJlIHByb3Blcmx5IGluaXRpYWxpemVkLCBlc3BlY2lhbGx5IHdoZW4gYENPTkZJR19NRU1DR19WMWAgaXMgZW5hYmxlZCBvciBkaXNhYmxlZC4gVGhpcyBpcyB3aGVyZSBJJ2xsIGZpbmQgb3V0IHRoZSByZWFsIHRydXRoLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTMxMiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozOTowNi40NjIwODkzNjVaIiwiU2VxIjozNCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNjIzNjcyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgbWVtY2dfdm1zdGF0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWVtY29udHJvbC5jPTY0OT1zdGF0aWMgaW5saW5lIGludCBtZW1jZ19ldmVudHNfaW5kZXgoZW51bSB2bV9ldmVudF9pdGVtIGlkeClcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy02NTMtXFxubW0vbWVtY29udHJvbC5jOjY1NDpzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUge1xcbm1tL21lbWNvbnRyb2wuYy02NTUtXFx0LyogU3RhdHMgdXBkYXRlcyBzaW5jZSB0aGUgbGFzdCBmbHVzaCAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jLTY1OC1cXHQvKiBDYWNoZWQgcG9pbnRlcnMgZm9yIGZhc3QgaXRlcmF0aW9uIGluIG1lbWNnX3JzdGF0X3VwZGF0ZWQoKSAqL1xcbm1tL21lbWNvbnRyb2wuYzo2NTk6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1XFx0KnBhcmVudF9wY3B1O1xcbm1tL21lbWNvbnRyb2wuYzo2NjA6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNcXHRcXHRcXHQqdm1zdGF0cztcXG5tbS9tZW1jb250cm9sLmMtNjYxLVxcbi0tXFxubW0vbWVtY29udHJvbC5jLTY3Mi1cXG5tbS9tZW1jb250cm9sLmM6NjczOnN0cnVjdCBtZW1jZ192bXN0YXRzIHtcXG5tbS9tZW1jb250cm9sLmMtNjc0LVxcdC8qIEFnZ3JlZ2F0ZWQgKENQVSBhbmQgc3VidHJlZSkgcGFnZSBzdGF0ZSBcXHUwMDI2IGV2ZW50cyAqL1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTczNT1zdGF0aWMgdTY0IGZsdXNoX2xhc3RfdGltZTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYy03MzgtXFxubW0vbWVtY29udHJvbC5jOjczOTpzdGF0aWMgYm9vbCBtZW1jZ192bXN0YXRzX25lZWRzX2ZsdXNoKHN0cnVjdCBtZW1jZ192bXN0YXRzICp2bXN0YXRzKVxcbm1tL21lbWNvbnRyb2wuYy03NDAte1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTc0NT1zdGF0aWMgaW5saW5lIHZvaWQgbWVtY2dfcnN0YXRfdXBkYXRlZChzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2csIGxvbmcgdmFsLFxcbi0tXFxubW0vbWVtY29udHJvbC5jLTc0Ny17XFxubW0vbWVtY29udHJvbC5jOjc0ODpcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgX19wZXJjcHUgKnN0YXRjX3BjcHU7XFxubW0vbWVtY29udHJvbC5jOjc0OTpcXHRzdHJ1Y3QgbWVtY2dfdm1zdGF0c19wZXJjcHUgKnN0YXRjO1xcbm1tL21lbWNvbnRyb2wuYy03NTAtXFx0dW5zaWduZWQgbG9uZyBzdGF0c191cGRhdGVzO1xcbi0tXFxubW0vbWVtY29udHJvbC5jPTQyMDA9c3RhdGljIHN0cnVjdCBtZW1fY2dyb3VwICptZW1fY2dyb3VwX2FsbG9jKHN0cnVjdCBtZW1fY2dyb3VwICpwYXJlbnQpXFxubW0vbWVtY29udHJvbC5jLTQyMDEte1xcbm1tL21lbWNvbnRyb2wuYzo0MjAyOlxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XFxubW0vbWVtY29udHJvbC5jOjQyMDM6XFx0c3RydWN0IG1lbWNnX3Ztc3RhdHNfcGVyY3B1IF9fcGVyY3B1ICpwc3RhdGNfcGNwdTtcXG5tbS9tZW1jb250cm9sLmMtNDIwNC1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqbWVtY2c7XFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIxOC1cXG5tbS9tZW1jb250cm9sLmM6NDIxOTpcXHRtZW1jZy1cXHUwMDNldm1zdGF0cyA9IGt6YWxsb2Nfb2JqKHN0cnVjdCBtZW1jZ192bXN0YXRzLCBHRlBfS0VSTkVMX0FDQ09VTlQpO1xcbm1tL21lbWNvbnRyb2wuYy00MjIwLVxcdGlmICghbWVtY2ctXFx1MDAzZXZtc3RhdHMpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDIyMi1cXG5tbS9tZW1jb250cm9sLmM6NDIyMzpcXHRtZW1jZy1cXHUwMDNldm1zdGF0c19wZXJjcHUgPSBhbGxvY19wZXJjcHVfZ2ZwKHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSxcXG5tbS9tZW1jb250cm9sLmMtNDIyNC1cXHRcXHRcXHRcXHRcXHRcXHQgR0ZQX0tFUk5FTF9BQ0NPVU5UKTtcXG4tLVxcbm1tL21lbWNvbnRyb2wuYz00NjEyPXN0YXRpYyB2b2lkIG1lbV9jZ3JvdXBfY3NzX3JzdGF0X2ZsdXNoKHN0cnVjdCBjZ3JvdXBfc3Vic3lzX3N0YXRlICpjc3MsIGludCBjcHUpXFxuLS1cXG5tbS9tZW1jb250cm9sLmMtNDYxNS1cXHRzdHJ1Y3QgbWVtX2Nncm91cCAqcGFyZW50ID0gcGFyZW50X21lbV9jZ3JvdXAobWVtY2cpO1xcbm1tL21lbWNvbnRyb2wuYzo0NjE2OlxcdHN0cnVjdCBtZW1jZ192bXN0YXRzX3BlcmNwdSAqc3RhdGM7XFxubW0vbWVtY29udHJvbC5jLTQ2MTctXFx0c3RydWN0IGFnZ3JlZ2F0ZV9jb250cm9sIGFjO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMlQxMDozOTowNi41NzgzMzEwMVoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyNzA3NTY3NDEyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLTVNBTiBBc3Nlc3NtZW50OiBObyBOZWVkIGZvciBEZWRpY2F0ZWQgRnV6emluZyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBjb25jZXJuIHdhcyB3aGV0aGVyIHRoZSBjb25kaXRpb25hbCBpbmNsdXNpb24gb2YgYHN0YXRlX2xvY2FsYCBhbmQgYGV2ZW50c19sb2NhbGAgaW4gYG1lbWNnLVx1MDAzZXZtc3RhdHNgIGJhc2VkIG9uIGBDT05GSUdfTUVNQ0dfVjFgIGNvdWxkIGludHJvZHVjZSBhbnkgc3VidGxlIGlzc3VlcywgZXNwZWNpYWxseSBhcm91bmQgTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlcyBvciB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcy4gQnV0LCBhZnRlciBhIGNsb3NlciBsb29rLCBpdCBzZWVtcyBwcmV0dHkgY2xlYW4uXG5cbmBremFsbG9jX29iamAgZW5zdXJlcyB0aGUgZW50aXJlIGBtZW1jZy1cdTAwM2V2bXN0YXRzYCBpcyB6ZXJvZWQgb3V0IGF0IGFsbG9jYXRpb24uICBJZiBgQ09ORklHX01FTUNHX1YxYCBpcyAqbm90KiBzZXQsIHRoZSBvbWl0dGVkIGZpZWxkcyBkZWZhdWx0IHRvIE5VTEwsIGFuZCB0aGUgcmVsZXZhbnQgZnVuY3Rpb25zIGluY2x1ZGUgZXhwbGljaXQgTlVMTCBjaGVja3MgYmVmb3JlIGFjY2Vzc2luZyB0aGVzZSB2YXJpYWJsZXMgZHVyaW5nIGFnZ3JlZ2F0aW9uIGFuZCBOTUkgZmx1c2hlcy4gIElmIGBDT05GSUdfTUVNQ0dfVjFgICppcyogc2V0LCBldmVyeXRoaW5nIGlzIGluaXRpYWxpemVkIHRvIHplcm8uIFNvLCB0aGF0IGluaXRpYWwgY29uY2VybiBpcyBhZGRyZXNzZWQuXG5cbkkgdGhlbiByYW4gdGhyb3VnaCB0aGUgS01TQU4gXCJOZWVkc0tNU0FOPXRydWVcIiBjcml0ZXJpYSwgYW5kIG5vbmUgb2YgdGhlbSBhcHBseSBoZXJlOiBubyBrZXJuZWwgc3RydWN0dXJlcyBhcmUgYmVpbmcgc2VudCB0byB1c2VyIHNwYWNlIHdoZXJlIGZpZWxkcyBtaWdodCBiZSB1bmluaXRpYWxpemVkLCB0aGVyZSdzIG5vIGNvbmRpdGlvbmFsIGxvZ2ljIGJhc2VkIG9uIHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLCB3ZSBhcmVuJ3QgZGVhbGluZyB3aXRoIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGNvdWxkIGJlIHJlYWQgbGF0ZXIsIGFuZCB0aGVyZSBhcmUgbm8gYm91bmRzIGNoZWNrcyBvciBsb2dpYyB0aGF0IGNvdWxkIGFsbG93IGFjY2VzcyB0byB1bmluaXRpYWxpemVkIGJ5dGVzLlxuXG5FdmVuIGlmIHRoZXJlICp3ZXJlKiBhIE5VTEwgcG9pbnRlciBkZXJlZmVyZW5jZSwgS0FTQU4gd291bGQgcGljayBpdCB1cC4gQW55IG90aGVyIHBvdGVudGlhbCBpc3N1ZXMsIGxpa2UgaW52YWxpZCBpbmRleGluZyBkdWUgdG8gYSBsb2dpYyBlcnJvciwgd291bGQgYmUgZmxhZ2dlZCBieSBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzIG9yIEtBU0FOLCB0b28uIFdlIGFyZW4ndCBjcmVhdGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSB0aGF0J3MgZXhwb3NlZCB0byB1c2Vyc3BhY2UuXG5cblRoZXJlZm9yZSwgS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuIFdlJ3JlIHNhZmUgdG8gcHJvY2VlZCB3aXRob3V0IGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbi4gTGV0J3MgZmlyZSB1cCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNjg5MiwiT3V0cHV0VG9rZW5zIjoyNDIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDJUMTA6Mzk6MzMuNjU0MDA3ODM1WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTUyMjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxcblxcbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGFsbCBmaWVsZHMuXFxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcbjMuIEtBU0FOIHZzIEtNU0FOOiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBsb2NhbGAgaWYgYSBjaGVjayB3YXMgbWlzc2luZywgb3Igb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gc3BlY2lmaWNhbGx5IGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzLCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGhlcmUuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBjb25kaXRpb25hbGx5IGNvbXBpbGVzIG91dCB0aGUgbGVnYWN5IGBzdGF0ZV9sb2NhbGAgYW5kIGBldmVudHNfbG9jYWxgIHN0YXQgYXJyYXlzIGZyb20gYHN0cnVjdCBtZW1jZ192bXN0YXRzYCB3aGVuIGBDT05GSUdfTUVNQ0dfVjFgIGlzIGRpc2FibGVkLCBhZGRpbmcgaGVscGVyIGFjY2Vzc29ycyBhbmQgTlVMTCBjaGVja3MgaW4gdGhlIGFnZ3JlZ2F0aW9uIGFuZCBzdGF0IGZsdXNoaW5nIHBhdGhzLlxcblxcbjEuIE1lbW9yeSBJbml0aWFsaXphdGlvbjogYHN0cnVjdCBtZW1jZ192bXN0YXRzYCBpcyBhbGxvY2F0ZWQgdXNpbmcgYGt6YWxsb2Nfb2JqKClgLCBlbnN1cmluZyB6ZXJvLWluaXRpYWxpemF0aW9uIG9mIGFsbCBmaWVsZHMuXFxuMi4gVW5pbml0aWFsaXplZCBNZW1vcnkgLyBJbmZvLWxlYWsgUmlzazogTm8gdW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSBvciBzdHJ1Y3R1cmUgcGFkZGluZyBpcyBleHBvc2VkLCBjb3BpZWQgdG8gdXNlcnNwYWNlLCBvciBicmFuY2hlZCB1cG9uLlxcbjMuIEtBU0FOIHZzIEtNU0FOOiBBbnkgcG90ZW50aWFsIHJlZ3Jlc3Npb25zIGZyb20gdGhpcyBjaGFuZ2UgKGUuZy4gTlVMTCBwb2ludGVyIGRlcmVmZXJlbmNlIHdoZW4gYWNjZXNzaW5nIGBsb2NhbGAgaWYgYSBjaGVjayB3YXMgbWlzc2luZywgb3Igb3V0LW9mLWJvdW5kcyBhcnJheSBhY2Nlc3MpIGFyZSBjb3ZlcmVkIGJ5IHN0YW5kYXJkIGtlcm5lbCBidWcgZGV0ZWN0b3JzIGFuZCBLQVNBTi4gS01TQU4gc3BlY2lmaWNhbGx5IGRldGVjdHMgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYW5kIGluZm9ybWF0aW9uIGxlYWtzLCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBpbnRyb2R1Y2VkIG9yIG1vZGlmaWVkIGhlcmUuXFxuXFxuVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrkln[1] Phase: Succeeded StartedAt: 2026-09-02 10:39:56 +0000 UTC FinishedAt: 2026-09-02 10:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-02 10:39:56 +0000 UTC FinishedAt: 2026-09-02 10:39:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2] Phase: Succeeded StartedAt: 2026-09-02 10:39:56 +0000 UTC FinishedAt: 2026-09-02 14:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:39:56 +0000 UTC FinishedAt: 2026-09-02 14:20:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:39:56 +0000 UTC FinishedAt: 2026-09-02 10:40:07 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:39:56 +0000 UTC FinishedAt: 2026-09-02 10:40:02 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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-workflowxrkln/series-workflowxrkln-convert-artifact-1749641626/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:40:07 +0000 UTC FinishedAt: 2026-09-02 10:58:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:40:07 +0000 UTC FinishedAt: 2026-09-02 10:58:38 +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:*65dc539f-1da5-4d96-a7e2-b69463a81269,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-workflowxrkln/series-workflowxrkln-convert-artifact-1749641626/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": "0431ca2c-d255-42c8-b467-767127d15bc4", "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-workflowxrkln/series-workflowxrkln-build-action-489208392/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:40:07 +0000 UTC FinishedAt: 2026-09-02 10:58:28 +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:*65dc539f-1da5-4d96-a7e2-b69463a81269,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-workflowxrkln/series-workflowxrkln-convert-artifact-1749641626/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": "0431ca2c-d255-42c8-b467-767127d15bc4", "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-workflowxrkln/series-workflowxrkln-build-action-489208392/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:58:38 +0000 UTC FinishedAt: 2026-09-02 10:58:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:58:38 +0000 UTC FinishedAt: 2026-09-02 10:58:38 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:58:38 +0000 UTC FinishedAt: 2026-09-02 10:58:48 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:58:38 +0000 UTC FinishedAt: 2026-09-02 10:58:43 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-workflowxrkln/series-workflowxrkln-convert-artifact-1276259573/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:58:48 +0000 UTC FinishedAt: 2026-09-02 11:00:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 10:58:48 +0000 UTC FinishedAt: 2026-09-02 11:00:33 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0431ca2c-d255-42c8-b467-767127d15bc4,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-workflowxrkln/series-workflowxrkln-build-action-489208392/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-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:00:43 +0000 UTC FinishedAt: 2026-09-02 11:00:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:00:43 +0000 UTC FinishedAt: 2026-09-02 11:00:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:00:43 +0000 UTC FinishedAt: 2026-09-02 11:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:00:43 +0000 UTC FinishedAt: 2026-09-02 11:17:08 +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:*65dc539f-1da5-4d96-a7e2-b69463a81269,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-workflowxrkln/series-workflowxrkln-convert-artifact-1276259573/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": "b1457382-59e7-4cc4-ad5d-19de1b37ec83", "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-workflowxrkln/series-workflowxrkln-build-action-3772985089/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:00:43 +0000 UTC FinishedAt: 2026-09-02 11:16:58 +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:*65dc539f-1da5-4d96-a7e2-b69463a81269,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-workflowxrkln/series-workflowxrkln-convert-artifact-1276259573/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": "b1457382-59e7-4cc4-ad5d-19de1b37ec83", "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-workflowxrkln/series-workflowxrkln-build-action-3772985089/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:17:08 +0000 UTC FinishedAt: 2026-09-02 11:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:17:08 +0000 UTC FinishedAt: 2026-09-02 11:17:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:17:08 +0000 UTC FinishedAt: 2026-09-02 11:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:17:08 +0000 UTC FinishedAt: 2026-09-02 11:18:51 +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:*b1457382-59e7-4cc4-ad5d-19de1b37ec83,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-workflowxrkln/series-workflowxrkln-build-action-3772985089/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-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:19:01 +0000 UTC FinishedAt: 2026-09-02 14:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:19:01 +0000 UTC FinishedAt: 2026-09-02 14:20:58 +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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"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:*0431ca2c-d255-42c8-b467-767127d15bc4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b1457382-59e7-4cc4-ad5d-19de1b37ec83,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-workflowxrkln/series-workflowxrkln-build-action-489208392/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-workflowxrkln/series-workflowxrkln-build-action-3772985089/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:19:01 +0000 UTC FinishedAt: 2026-09-02 11:19:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:19:01 +0000 UTC FinishedAt: 2026-09-02 11:19:06 +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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"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-workflowxrkln/series-workflowxrkln-convert-artifact-1926786778/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:19:01 +0000 UTC FinishedAt: 2026-09-02 11:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:19:01 +0000 UTC FinishedAt: 2026-09-02 11:19:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:19:02 +0000 UTC FinishedAt: 2026-09-02 11:19:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:19:12 +0000 UTC FinishedAt: 2026-09-02 14:20:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowxrkln[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"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":["memory_stat_show","memcg_page_state_local","memcg_events_local","reparent_memcg_state_local","reparent_memcg1_state_local"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"ead700ca770c82167af32622cf8b68c9f87c3c7c","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEMCG","MEMCG_V1"],"series_id":"39d00352-e7ca-4d13-8422-ca4a369e202a","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-02 11:19:12 +0000 UTC FinishedAt: 2026-09-02 14:20:49 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0431ca2c-d255-42c8-b467-767127d15bc4,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*b1457382-59e7-4cc4-ad5d-19de1b37ec83,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-workflowxrkln/series-workflowxrkln-build-action-489208392/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-workflowxrkln/series-workflowxrkln-build-action-3772985089/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-workflowxrkln/series-workflowxrkln-convert-artifact-1926786778/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,}