Name: series-workflowfvpr8 Phase: Succeeded StartedAt: 2026-07-23 17:15:25 +0000 UTC FinishedAt: 2026-07-23 22:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[0] Phase: Succeeded StartedAt: 2026-07-23 17:15:25 +0000 UTC FinishedAt: 2026-07-23 17:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[0].run-triage Phase: Succeeded StartedAt: 2026-07-23 17:15:25 +0000 UTC FinishedAt: 2026-07-23 17:37:36 +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": "8026da5cb0d39f7978af447eb5c967cbd36d1ac6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "KVM", "PTDUMP_DEBUGFS", "TRANSPARENT_HUGEPAGE" ], "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": "8026da5cb0d39f7978af447eb5c967cbd36d1ac6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "KVM", "PTDUMP_DEBUGFS", "TRANSPARENT_HUGEPAGE" ], "series_id": "1325a0dc-52be-4fee-bc99-6b94d740313a" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "walk_pud_range", "get_hva_mapping_size", "host_pfn_mapping_level", "collapse_pud_page", "populate_pud", "ptdump_walk_pgd_level_core", "pudp_set_access_flags" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d2Fsa19wdWRfcmFuZ2UmIzM0OywKICAgICYjMzQ7Z2V0X2h2YV9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7aG9zdF9wZm5fbWFwcGluZ19sZXZlbCYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdWRfcGFnZSYjMzQ7LAogICAgJiMzNDtwb3B1bGF0ZV9wdWQmIzM0OywKICAgICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUmIzM0OywKICAgICYjMzQ7cHVkcF9zZXRfYWNjZXNzX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZm9sZGluZyBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoQVJNLCBBUk02NCwgTG9vbmdBcmNoLCBNSVBTLCBPcGVuUklTQywgUklTQy1WLCB4ODYpIGFuZCBnZW5lcmljIGhlYWRlcnMuIEl0IGZpeGVzIGhvdyBmb2xkZWQgcGFnZSB0YWJsZXMgYXJlIHdhbGtlZCBhbmQgYWNjZXNzZWQsIHdoaWNoIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBLVk0gcGFnZSBmYXVsdCBoYW5kbGVycywgTUdMUlUgcGFnZSB0YWJsZSB3YWxrZXJzLCBQQVQgbWVtb3J5IHNldHRpbmcsIGFuZCBwYWdlIHRhYmxlIGR1bXBpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBwYWdlIHRhYmxlIHRyYXZlcnNhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYxYzQ0Njk4YWE5ODM1ZDc1ZTUzMDZjZTQxNWM0MDMwZDAzM2VmNWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAxNzozNTowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmhcbmluZGV4IGU3NDQxNWM5NTliZWFjLi44ODY1OWIzOGUyMzY0OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2Utbm9tbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oXG5AQCAtMTgsMTIgJiM0MzsxOCwxMiBAQFxuICAqL1xuIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfdDtcbiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG1kX3Q7XG4tdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBnZF90WzJdO1xuJiM0Mzt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdkX3Q7XG4gdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBncHJvdF90O1xuIFxuICNkZWZpbmUgcHRlX3ZhbCh4KSAgICAgICh4KVxuICNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICh4KVxuLSNkZWZpbmUgcGdkX3ZhbCh4KVx0KCh4KVswXSlcbiYjNDM7I2RlZmluZSBwZ2RfdmFsKHgpICAgICAgKHgpXG4gI2RlZmluZSBwZ3Byb3RfdmFsKHgpICAgKHgpXG4gXG4gI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKHgpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtdHlwZXMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLXR5cGVzLmhcbmluZGV4IDY1MGU3OTNmNDE0MjlmLi43Zjg1Mzg0YWMzODZjYSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLXR5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLXR5cGVzLmhcbkBAIC0yNSw3ICYjNDM7MjUsNyBAQCB0eXBlZGVmIHN0cnVjdCB7IHB0ZXZhbF90IHBncHJvdDsgfSBwZ3Byb3RfdDtcbiBcbiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoKHgpLnB0ZSlcbiAjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoKHgpLnBtZClcbi0jZGVmaW5lIHBnZF92YWwoeClcdCgoeCkucGdkWzBdKVxuJiM0MzsjZGVmaW5lIHBnZF92YWwoeCkgICAgICAoKHgpLnBnZFswXSlcbiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoKHgpLnBncHJvdClcbiBcbiAjZGVmaW5lIF9fcHRlKHgpICAgICAgICAoKHB0ZV90KSB7ICh4KSB9IClcbkBAIC0zNiwxNCAmIzQzOzM2LDMyIEBAIHR5cGVkZWYgc3RydWN0IHsgcHRldmFsX3QgcGdwcm90OyB9IHBncHJvdF90O1xuIC8qXG4gICogLi4gd2hpbGUgdGhlc2UgbWFrZSBpdCBlYXNpZXIgb24gdGhlIGNvbXBpbGVyXG4gICovXG4mIzQzO3R5cGVkZWYgdTY0IHBnZHZhbF90O1xuJiM0MztcbiB0eXBlZGVmIHB0ZXZhbF90IHB0ZV90O1xuIHR5cGVkZWYgcG1kdmFsX3QgcG1kX3Q7XG4tdHlwZWRlZiBwbWR2YWxfdCBwZ2RfdFsyXTtcbiYjNDM7dHlwZWRlZiBwZ2R2YWxfdCBwZ2RfdDtcbiB0eXBlZGVmIHB0ZXZhbF90IHBncHJvdF90O1xuIFxuICNkZWZpbmUgcHRlX3ZhbCh4KSAgICAgICh4KVxuICNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICh4KVxuLSNkZWZpbmUgcGdkX3ZhbCh4KVx0KCh4KVswXSlcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgcG1kdmFsX3QgcGdkX3ZhbChwZ2RfdCBwZ2QpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBsb3dlciBhbmQgaGlnaGVyIHBtZHZhbF90IHZhbHVlcyBwb2ludCB0byB0aGUgc2FtZSBwYWdlLlxuJiM0MztcdCAqIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlaXIgb2Zmc2V0IHdpdGhpbiB0aGF0IHBhZ2UuXG4mIzQzO1x0ICogVGhlcmVmb3JlLCB3aGljaGV2ZXIgdmFsdWUgaXMgcmV0dXJuZWQsIHRoZSBiZWhhdmlvciBvZiBwbWRfcGZuKCksXG4mIzQzO1x0ICogcG1kX3BhZ2UoKSwgYW5kIG90aGVyIHVzZXJzIG9mIHBnZF92YWwoKSByZW1haW5zIHVuY2hhbmdlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEhvd2V2ZXIsIHBnZF92YWwoKSBoYXMgaGlzdG9yaWNhbGx5IHJldHVybmVkIHRoZSBsb3dlciBwbWR2YWxfdCwgc29cbiYjNDM7XHQgKiBrZWVwIHJldHVybmluZyB0aGUgbG93ZXIgb25lLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogU2VlIHRoZSBjb21tZW50cyBpbiBpbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gKCoocG1kdmFsX3QgKCopWzJdKVx1MDAyNnBnZClbMF07XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBwZ3Byb3RfdmFsKHgpICAgKHgpXG4gXG4gI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKHgpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA5ODI3OTVjZjQ1NjM3ZS4uZWFkZDAyN2ZlMGVlNDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTE0MSw4ICYjNDM7MTQxLDYgQEAgZXh0ZXJuIHBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcbiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTtcbiBcbi0jZGVmaW5lIHBnZHBfZ2V0KHBncGQpXHRcdFJFQURfT05DRSgqcGdkcClcbi1cbiAjZGVmaW5lIHB1ZF9wYWdlKHB1ZClcdFx0cG1kX3BhZ2UoX19wbWQocHVkX3ZhbChwdWQpKSlcbiAjZGVmaW5lIHB1ZF93cml0ZShwdWQpXHRcdHBtZF93cml0ZShfX3BtZChwdWRfdmFsKHB1ZCkpKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IGEyNjgxZDc1NTM1ODQxLi5hYWFlM2QxNDg5NWY2OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTE0MCwxMCAmIzQzOzE0MCwxNyBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpXG4gI2RlZmluZSBwdGVfbm9uZShwdGUpXHRcdCghcHRlX3ZhbChwdGUpKVxuICNkZWZpbmUgcHRlX3BhZ2UocHRlKVx0XHQocGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKSlcbiBcbiYjNDM7I2RlZmluZSBwdGVfdmFsaWQocHRlKVx0XHQoISEocHRlX3ZhbChwdGUpIFx1MDAyNiBQVEVfVkFMSUQpKVxuJiM0MzsjZGVmaW5lIHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKSBcXFxuJiM0MztcdCgocHRlX3ZhbChwdGUpIFx1MDAyNiAoUFRFX1ZBTElEIHwgUFRFX1BSRVNFTlRfSU5WQUxJRCkpID09IFBURV9QUkVTRU5UX0lOVkFMSUQpXG4mIzQzO1xuIC8qXG4gICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKS4gVW5kZWZpbmVkIGJlaGF2aW91ciBvdGhlcndpc2UuXG4gICovXG4tI2RlZmluZSBwdGVfcHJlc2VudChwdGUpXHQocHRlX3ZhbGlkKHB0ZSkgfHwgcHRlX3ByZXNlbnRfaW52YWxpZChwdGUpKVxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgcHRlX3ByZXNlbnQocHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHB0ZV92YWxpZChwdGUpIHx8IHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKTtcbiYjNDM7fVxuICNkZWZpbmUgcHRlX3lvdW5nKHB0ZSlcdFx0KCEhKHB0ZV92YWwocHRlKSBcdTAwMjYgUFRFX0FGKSlcbiAjZGVmaW5lIHB0ZV9zcGVjaWFsKHB0ZSlcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9TUEVDSUFMKSlcbiAjZGVmaW5lIHB0ZV93cml0ZShwdGUpXHRcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9XUklURSkpXG5AQCAtMTY4LDkgJiM0MzsxNzUsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpXG4gI2RlZmluZSBwdGVfc3dfZGlydHkocHRlKVx0KCEhKHB0ZV92YWwocHRlKSBcdTAwMjYgUFRFX0RJUlRZKSlcbiAjZGVmaW5lIHB0ZV9kaXJ0eShwdGUpXHRcdChwdGVfc3dfZGlydHkocHRlKSB8fCBwdGVfaHdfZGlydHkocHRlKSlcbiBcbi0jZGVmaW5lIHB0ZV92YWxpZChwdGUpXHRcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9WQUxJRCkpXG4tI2RlZmluZSBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkgXFxcbi1cdCgocHRlX3ZhbChwdGUpIFx1MDAyNiAoUFRFX1ZBTElEIHwgUFRFX1BSRVNFTlRfSU5WQUxJRCkpID09IFBURV9QUkVTRU5UX0lOVkFMSUQpXG4gLypcbiAgKiBFeGVjdXRlLW9ubHkgdXNlciBtYXBwaW5ncyBkbyBub3QgaGF2ZSB0aGUgUFRFX1VTRVIgYml0IHNldC4gQWxsIHZhbGlkXG4gICoga2VybmVsIG1hcHBpbmdzIGhhdmUgdGhlIFBURV9VWE4gYml0IHNldC5cbkBAIC0xMTg4LDI5ICYjNDM7MTE5Miw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w1X2VuYWJsZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAjZGVmaW5lIHA0ZF9jbGVhcl9maXhtYXAoKVxuIFxuICNkZWZpbmUgcDRkX29mZnNldF9raW1nKGRpcixhZGRyKVx0KChwNGRfdCAqKWRpcilcbi1cbi1zdGF0aWMgaW5saW5lXG4tcDRkX3QgKnA0ZF9vZmZzZXRfbG9ja2xlc3NfZm9sZGVkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi17XG4tXHQvKlxuLVx0ICogV2l0aCBydW50aW1lIGZvbGRpbmcgb2YgdGhlIHB1ZCwgcHVkX29mZnNldF9sb2NrbGVzcygpIHBhc3Nlc1xuLVx0ICogdGhlICYjMzk7cGdkX3QgKiYjMzk7IHdlIHJldHVybiBoZXJlIHRvIHA0ZF90b19mb2xkZWRfcHVkKCksIHdoaWNoXG4tXHQgKiB3aWxsIG9mZnNldCB0aGUgcG9pbnRlciBhc3N1bWluZyB0aGF0IGl0IHBvaW50cyBpbnRvXG4tXHQgKiBhIHBhZ2UtdGFibGUgcGFnZS4gSG93ZXZlciwgdGhlIGZhc3QgR1VQIHBhdGggcGFzc2VzIHVzIGFcbi1cdCAqIHBnZF90IGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHNvIHdlIG11c3QgdXNlIHRoZSBvcmlnaW5hbFxuLVx0ICogcG9pbnRlciBpbiAmIzM5O3BnZHAmIzM5OyB0byBjb25zdHJ1Y3QgdGhlIHA0ZCBwb2ludGVyIGluc3RlYWQgb2Zcbi1cdCAqIHVzaW5nIHRoZSBnZW5lcmljIHA0ZF9vZmZzZXRfbG9ja2xlc3MoKSBpbXBsZW1lbnRhdGlvbi5cbi1cdCAqXG4tXHQgKiBOb3RlOiByZXVzaW5nIHRoZSBvcmlnaW5hbCBwb2ludGVyIG1lYW5zIHRoYXQgd2UgbWF5XG4tXHQgKiBkZXJlZmVyZW5jZSB0aGUgc2FtZSAobGl2ZSkgcGFnZS10YWJsZSBlbnRyeSBtdWx0aXBsZSB0aW1lcy5cbi1cdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGl0IGlzIHN0aWxsIG9ubHkgbG9hZGVkIG9uY2UgaW4gdGhlXG4tXHQgKiBjb250ZXh0IG9mIGVhY2ggbGV2ZWwgYW5kIHRoZSBDUFUgZ3VhcmFudGVlcyBzYW1lLWFkZHJlc3Ncbi1cdCAqIHJlYWQtYWZ0ZXItcmVhZCBvcmRlcmluZy5cbi1cdCAqL1xuLVx0cmV0dXJuIHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4tfVxuLSNkZWZpbmUgcDRkX29mZnNldF9sb2NrbGVzcyBwNGRfb2Zmc2V0X2xvY2tsZXNzX2ZvbGRlZFxuLVxuICNlbmRpZiAgLyogQ09ORklHX1BHVEFCTEVfTEVWRUxTIFx1MDAzZSA0ICovXG4gXG4gI2RlZmluZSBwZ2RfRVJST1IoZSlcdFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCAxOTUyZTM0YmM4ZWUwMC4uNDM0ZTViNDgzNDY2NGYgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTYzNiw3ICYjNDM7NjM2LDkgQEAgc3RhdGljIGlubGluZSBsb25nIHBtZF9wcm90bm9uZShwbWRfdCBwbWQpXG4gI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUgKi9cbiBcbiAjZGVmaW5lIHBtZF9sZWFmKHBtZClcdFx0KChwbWRfdmFsKHBtZCkgXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXG4mIzQzOyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRFxuICNkZWZpbmUgcHVkX2xlYWYocHVkKVx0XHQoKHB1ZF92YWwocHVkKSBcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcbiYjNDM7I2VuZGlmXG4gXG4gLypcbiAgKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkIGFyZWEgdG8gY29wZSB3aXRoIHRoZSB2aXJ0dWFsIGFsaWFzaW5nXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jXG5pbmRleCBlMTA0ODk3YWE1MzI4NS4uODM3YjQwYmI2OTRmNGUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY1xuQEAgLTY2OSwxMCAmIzQzOzY2OSwxMCBAQCBzdGF0aWMgaW50IGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gXHRpbnQgbGV2ZWwgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBodmE7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVx0cGdkX3QgcGdkO1xuLVx0cDRkX3QgcDRkO1xuLVx0cHVkX3QgcHVkO1xuLVx0cG1kX3QgcG1kO1xuJiM0MztcdHBnZF90ICpwZ2RwLCBwZ2Q7XG4mIzQzO1x0cDRkX3QgKnA0ZHAsIHA0ZDtcbiYjNDM7XHRwdWRfdCAqcHVkcCwgcHVkO1xuJiM0MztcdHBtZF90ICpwbWRwLCBwbWQ7XG4gXG4gXHQvKlxuIFx0ICogTm90ZSwgdXNpbmcgdGhlIGFscmVhZHktcmV0cmlldmVkIG1lbXNsb3QgYW5kIF9fZ2ZuX3RvX2h2YV9tZW1zbG90KClcbkBAIC02OTgsMTkgJiM0Mzs2OTgsMjMgQEAgc3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0ICogdmFsdWUpIGFuZCB0aGVuIHAqZF9vZmZzZXQoKSB3YWxrcyBpbnRvIHRoZSB0YXJnZXQgaHVnZSBwYWdlIGluc3RlYWRcbiBcdCAqIG9mIHRoZSBvbGQgcGFnZSB0YWJsZSAoc2VlcyB0aGUgbmV3IHZhbHVlKS5cbiBcdCAqL1xuLVx0cGdkID0gcGdkcF9nZXQocGdkX29mZnNldChrdm0tXHUwMDNlbW0sIGh2YSkpO1xuJiM0MztcdHBnZHAgPSBwZ2Rfb2Zmc2V0KGt2bS1cdTAwM2VtbSwgaHZhKTtcbiYjNDM7XHRwZ2QgPSBwZ2RwX2dldChwZ2RwKTtcbiBcdGlmIChwZ2Rfbm9uZShwZ2QpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHA0ZCA9IHA0ZHBfZ2V0KHA0ZF9vZmZzZXQoXHUwMDI2cGdkLCBodmEpKTtcbiYjNDM7XHRwNGRwID0gcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGh2YSk7XG4mIzQzO1x0cDRkID0gcDRkcF9nZXQocDRkcCk7XG4gXHRpZiAocDRkX25vbmUocDRkKSB8fCAhcDRkX3ByZXNlbnQocDRkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRwdWQgPSBwdWRwX2dldChwdWRfb2Zmc2V0KFx1MDAyNnA0ZCwgaHZhKSk7XG4mIzQzO1x0cHVkcCA9IHB1ZF9vZmZzZXRfbG9ja2xlc3MocDRkcCwgcDRkLCBodmEpO1xuJiM0MztcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZHApO1xuIFx0aWYgKHB1ZF9ub25lKHB1ZCkgfHwgIXB1ZF9wcmVzZW50KHB1ZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cG1kID0gcG1kcF9nZXQocG1kX29mZnNldChcdTAwMjZwdWQsIGh2YSkpO1xuJiM0MztcdHBtZHAgPSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgaHZhKTtcbiYjNDM7XHRwbWQgPSBwbWRwX2dldChwbWRwKTtcbiBcdGlmIChwbWRfbm9uZShwbWQpIHx8ICFwbWRfcHJlc2VudChwbWQpKVxuIFx0XHRnb3RvIG91dDtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggZmE3YjkzNWY5NDdjYTAuLjE1MWY0ZDE1YmQxMmJmIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTc0NSw4ICYjNDM7NzQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXG4gI2lmZGVmIF9QQUdFX0hVR0VcbiAjZGVmaW5lIHBtZF9sZWFmKHBtZClcdCgocG1kX3ZhbChwbWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuJiM0MzsjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcdCgocHVkX3ZhbChwdWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuICNlbmRpZlxuJiM0MzsjZW5kaWZcbiBcbiAjZGVmaW5lIGd1cF9mYXN0X3Blcm1pdHRlZChzdGFydCwgZW5kKVx0KCFjcHVfaGFzX2RjX2FsaWFzZXMpXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggNmI4OTk5NmQwYjYyOGUuLjVhNDkxY2QwZjAwODY4IDEwMDY0NFxuLS0tIGEvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMzMxLDkgJiM0MzszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3BhZ2VfdmFkZHIocG1kX3QgcG1kKVxuIFx0cmV0dXJuICgodW5zaWduZWQgbG9uZykgX192YShwbWRfdmFsKHBtZCkgXHUwMDI2IFBBR0VfTUFTSykpO1xuIH1cbiBcbi0jZGVmaW5lIF9fcG1kX29mZnNldChhZGRyZXNzKSBcXFxuLVx0KCgoYWRkcmVzcykgXHUwMDNlXHUwMDNlIFBNRF9TSElGVCkgXHUwMDI2IChQVFJTX1BFUl9QTUQtMSkpXG4tXG4gI2RlZmluZSBQRk5fUFRFX1NISUZUXHRcdFBBR0VfU0hJRlRcbiAjZGVmaW5lIHB0ZV9wZm4oeClcdFx0KCh1bnNpZ25lZCBsb25nKSgoKHgpLnB0ZSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKVxuICNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpICBfX3B0ZSgoKChwZm4pIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfCBwZ3Byb3RfdmFsKHByb3QpKVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbmluZGV4IDA4MmY5YjI2MTczMzg3Li42ZDYwNDJiODFkNzkwOSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTM2MiwxMCAmIzQzOzM2MiwxMCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRpbnQgc2l6ZSA9IFBBR0VfU0laRTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRwZ2RfdCBwZ2Q7XG4tXHRwNGRfdCBwNGQ7XG4tXHRwdWRfdCBwdWQ7XG4tXHRwbWRfdCBwbWQ7XG4mIzQzO1x0cGdkX3QgKnBnZHAsIHBnZDtcbiYjNDM7XHRwNGRfdCAqcDRkcCwgcDRkO1xuJiM0MztcdHB1ZF90ICpwdWRwLCBwdWQ7XG4mIzQzO1x0cG1kX3QgKnBtZHAsIHBtZDtcbiBcbiBcdC8qXG4gXHQgKiBEaXNhYmxlIElSUXMgdG8gcHJldmVudCBjb25jdXJyZW50IHRlYXIgZG93biBvZiBob3N0IHBhZ2UgdGFibGVzLFxuQEAgLTM4MSwxNSAmIzQzOzM4MSwxOCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqIHZhbHVlKSBhbmQgdGhlbiBwKmRfb2Zmc2V0KCkgd2Fsa3MgaW50byB0aGUgdGFyZ2V0IGh1Z2UgcGFnZSBpbnN0ZWFkXG4gXHQgKiBvZiB0aGUgb2xkIHBhZ2UgdGFibGUgKHNlZXMgdGhlIG5ldyB2YWx1ZSkuXG4gXHQgKi9cbi1cdHBnZCA9IHBnZHBfZ2V0KHBnZF9vZmZzZXQoa3ZtLVx1MDAzZW1tLCBodmEpKTtcbiYjNDM7XHRwZ2RwID0gcGdkX29mZnNldChrdm0tXHUwMDNlbW0sIGh2YSk7XG4mIzQzO1x0cGdkID0gcGdkcF9nZXQocGdkcCk7XG4gXHRpZiAocGdkX25vbmUocGdkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRwNGQgPSBwNGRwX2dldChwNGRfb2Zmc2V0KFx1MDAyNnBnZCwgaHZhKSk7XG4mIzQzO1x0cDRkcCA9IHA0ZF9vZmZzZXRfbG9ja2xlc3MocGdkcCwgcGdkLCBodmEpO1xuJiM0MztcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZHApO1xuIFx0aWYgKHA0ZF9ub25lKHA0ZCkgfHwgIXA0ZF9wcmVzZW50KHA0ZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cHVkID0gcHVkcF9nZXQocHVkX29mZnNldChcdTAwMjZwNGQsIGh2YSkpO1xuJiM0MztcdHB1ZHAgPSBwdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZHAsIHA0ZCwgaHZhKTtcbiYjNDM7XHRwdWQgPSBwdWRwX2dldChwdWRwKTtcbiBcdGlmIChwdWRfbm9uZShwdWQpIHx8ICFwdWRfcHJlc2VudChwdWQpKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC0zOTgsNyAmIzQzOzQwMSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHBtZCA9IHBtZHBfZ2V0KHBtZF9vZmZzZXQoXHUwMDI2cHVkLCBodmEpKTtcbiYjNDM7XHRwbWRwID0gcG1kX29mZnNldF9sb2NrbGVzcyhwdWRwLCBwdWQsIGh2YSk7XG4mIzQzO1x0cG1kID0gcG1kcF9nZXQocG1kcCk7XG4gXHRpZiAocG1kX25vbmUocG1kKSB8fCAhcG1kX3ByZXNlbnQocG1kKSlcbiBcdFx0Z290byBvdXQ7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jIGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG5pbmRleCAwNGVkNmY4YWNhZTRmZC4uYjJiY2FmMTBkMTNmMWQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuY1xuQEAgLTE2NywxNCAmIzQzOzE2NywxNiBAQCBiYWRfYXJlYShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBjb2RlLFxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbi1cdHBnZF90ICpwZ2QsICpwZ2Rfaztcbi1cdHB1ZF90ICpwdWRfaztcbi1cdHA0ZF90ICpwNGRfaztcbi1cdHBtZF90ICpwbWRfaztcbi1cdHB0ZV90ICpwdGVfaztcbiYjNDM7XHRwZ2RfdCAqcGdkcF9rLCAqcGdkcCwgcGdkX2s7XG4mIzQzO1x0cDRkX3QgKnA0ZHBfaywgKnA0ZHA7XG4mIzQzO1x0cHVkX3QgKnB1ZHBfaywgKnB1ZHAsIHB1ZF9rO1xuJiM0MztcdHBtZF90ICpwbWRwX2ssICpwbWRwLCBwbWRfaztcbiYjNDM7XHRwdGVfdCAqcHRlcF9rO1xuIFx0aW50IGluZGV4O1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4gXG4mIzQzO1x0QlVJTERfQlVHX09OKENPTkZJR19QR1RBQkxFX0xFVkVMUyAhPSA1IFx1MDAyNlx1MDAyNiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgIT0gMik7XG4mIzQzO1xuIFx0LyogVXNlciBtb2RlIGFjY2Vzc2VzIGp1c3QgY2F1c2UgYSBTSUdTRUdWICovXG4gXHRpZiAodXNlcl9tb2RlKHJlZ3MpKVxuIFx0XHRyZXR1cm4gZG9fdHJhcChyZWdzLCBTSUdTRUdWLCBjb2RlLCBhZGRyKTtcbkBAIC0xODksMzkgJiM0MzsxOTEsNTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYWxsb2NfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFcbiBcdCAqL1xuIFx0aW5kZXggPSBwZ2RfaW5kZXgoYWRkcik7XG4gXHRwZm4gPSBjc3JfcmVhZChDU1JfU0FUUCkgXHUwMDI2IFNBVFBfUFBOO1xuLVx0cGdkID0gKHBnZF90ICopcGZuX3RvX3ZpcnQocGZuKSAmIzQzOyBpbmRleDtcbi1cdHBnZF9rID0gaW5pdF9tbS5wZ2QgJiM0MzsgaW5kZXg7XG4gXG4tXHRpZiAoIXBnZF9wcmVzZW50KHBnZHBfZ2V0KHBnZF9rKSkpIHtcbiYjNDM7XHRwZ2RwID0gKHBnZF90ICopcGZuX3RvX3ZpcnQocGZuKSAmIzQzOyBpbmRleDtcbiYjNDM7XHRwZ2RwX2sgPSBpbml0X21tLnBnZCAmIzQzOyBpbmRleDtcbiYjNDM7XG4mIzQzO1x0cGdkX2sgPSBwZ2RwX2dldChwZ2RwX2spO1xuJiM0MztcdGlmICghcGdkX3ByZXNlbnQocGdkX2spKSB7XG4gXHRcdG5vX2NvbnRleHQocmVncywgYWRkcik7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdHNldF9wZ2QocGdkLCBwZ2RwX2dldChwZ2RfaykpO1xuJiM0MztcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNSlcbiYjNDM7XHRcdHNldF9wZ2QocGdkcCwgcGdkX2spO1xuIFxuLVx0cDRkX2sgPSBwNGRfb2Zmc2V0KHBnZF9rLCBhZGRyKTtcbi1cdGlmICghcDRkX3ByZXNlbnQocDRkcF9nZXQocDRkX2spKSkge1xuJiM0MztcdHA0ZHAgPSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpO1xuJiM0MztcdHA0ZHBfayA9IHA0ZF9vZmZzZXQocGdkcF9rLCBhZGRyKTtcbiYjNDM7XHRpZiAoIXA0ZF9wcmVzZW50KHA0ZHBfZ2V0KHA0ZHBfaykpKSB7XG4gXHRcdG5vX2NvbnRleHQocmVncywgYWRkcik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHB1ZF9rID0gcHVkX29mZnNldChwNGRfaywgYWRkcik7XG4tXHRpZiAoIXB1ZF9wcmVzZW50KHB1ZHBfZ2V0KHB1ZF9rKSkpIHtcbiYjNDM7XHRwdWRwID0gcHVkX29mZnNldChwNGRwLCBhZGRyKTtcbiYjNDM7XHRwdWRwX2sgPSBwdWRfb2Zmc2V0KHA0ZHBfaywgYWRkcik7XG4mIzQzO1xuJiM0MztcdHB1ZF9rID0gcHVkcF9nZXQocHVkcF9rKTtcbiYjNDM7XHRpZiAoIXB1ZF9wcmVzZW50KHB1ZF9rKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRpZiAocHVkX2xlYWYocHVkcF9nZXQocHVkX2spKSlcbiYjNDM7XHRpZiAocHVkX2xlYWYocHVkX2spKVxuIFx0XHRnb3RvIGZsdXNoX3RsYjtcbiBcbiBcdC8qXG4gXHQgKiBTaW5jZSB0aGUgdm1hbGxvYyBhcmVhIGlzIGdsb2JhbCwgaXQgaXMgdW5uZWNlc3NhcnlcbiBcdCAqIHRvIGNvcHkgaW5kaXZpZHVhbCBQVEVzXG4gXHQgKi9cbi1cdHBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcik7XG4tXHRpZiAoIXBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZF9rKSkpIHtcbiYjNDM7XHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbiYjNDM7XHRwbWRwX2sgPSBwbWRfb2Zmc2V0KHB1ZHBfaywgYWRkcik7XG4mIzQzO1xuJiM0MztcdHBtZF9rID0gcG1kcF9nZXQocG1kcF9rKTtcbiYjNDM7XHRpZiAoIXBtZF9wcmVzZW50KHBtZF9rKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRpZiAocG1kX2xlYWYocG1kcF9nZXQocG1kX2spKSlcbiYjNDM7XHRpZiAoQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDIpXG4mIzQzO1x0XHRzZXRfcG1kKHBtZHAsIHBtZF9rKTtcbiYjNDM7XHRpZiAocG1kX2xlYWYocG1kX2spKVxuIFx0XHRnb3RvIGZsdXNoX3RsYjtcbiBcbiBcdC8qXG5AQCAtMjMwLDggJiM0MzsyNDQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYVxuIFx0ICogYWRkcmVzc2VzLiBJZiB3ZSBkb24mIzM5O3QgZG8gdGhpcywgdGhpcyB3aWxsIGp1c3RcbiBcdCAqIHNpbGVudGx5IGxvb3AgZm9yZXZlci5cbiBcdCAqL1xuLVx0cHRlX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfaywgYWRkcik7XG4tXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZXBfZ2V0KHB0ZV9rKSkpIHtcbiYjNDM7XHRwdGVwX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwX2ssIGFkZHIpO1xuJiM0MztcdGlmICghcHRlX3ByZXNlbnQocHRlcF9nZXQocHRlcF9rKSkpIHtcbiBcdFx0bm9fY29udGV4dChyZWdzLCBhZGRyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNcbmluZGV4IDJhZmE3YTIzMzQwZTkyLi40ZTU0NTk4ODk1M2EwYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuY1xuQEAgLTI3LDYgJiM0MzsyNyw3IEBAXG4gICovXG4gc3RydWN0IHBnX3N0YXRlIHtcbiBcdHN0cnVjdCBwdGR1bXBfc3RhdGUgcHRkdW1wO1xuJiM0MztcdGludCBmaXJzdF9sZXZlbDtcbiBcdGludCBsZXZlbDtcbiBcdHBncHJvdHZhbF90IGN1cnJlbnRfcHJvdDtcbiBcdHBncHJvdHZhbF90IGVmZmVjdGl2ZV9wcm90O1xuQEAgLTI1NCw3ICYjNDM7MjU1LDcgQEAgc3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIGludCBsZXZlbCwgdTY0IHZhbClcbiBcdHBncHJvdHZhbF90IHByb3QgPSB2YWwgXHUwMDI2IFBURV9GTEFHU19NQVNLO1xuIFx0cGdwcm90dmFsX3QgZWZmZWN0aXZlO1xuIFxuLVx0aWYgKGxldmVsIFx1MDAzZSAwKSB7XG4mIzQzO1x0aWYgKGxldmVsIFx1MDAzZSBzdC1cdTAwM2VmaXJzdF9sZXZlbCkge1xuIFx0XHRwZ3Byb3R2YWxfdCBoaWdoZXJfcHJvdCA9IHN0LVx1MDAzZXByb3RfbGV2ZWxzW2xldmVsIC0gMV07XG4gXG4gXHRcdGVmZmVjdGl2ZSA9IChoaWdoZXJfcHJvdCBcdTAwMjYgcHJvdCBcdTAwMjYgKF9QQUdFX1VTRVIgfCBfUEFHRV9SVykpIHxcbkBAIC00NTUsNiAmIzQzOzQ1Niw4IEBAIGJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHQuc2VxXHRcdD0gbVxuIFx0fTtcbiBcbiYjNDM7XHRzdC5maXJzdF9sZXZlbCA9IHB0ZHVtcF9wdF9sZXZlbF9maXJzdChtbSk7XG4mIzQzO1xuIFx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgbW0sIHBnZCk7XG4gXG4gXHRpZiAoIWNoZWNrd3gpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IDA3ODY4OWFhNzIwNmY4Li45MWIzM2EyNjVhNDMxZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0xMzQ2LDcgJiM0MzsxMzQ2LDcgQEAgc3RhdGljIGludCBjb2xsYXBzZV9wdWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRwbWRfdCAqcG1kLCBmaXJzdDtcbiBcdGludCBpO1xuIFxuLVx0aWYgKCFkaXJlY3RfZ2JwYWdlcylcbiYjNDM7XHRpZiAoQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDIgfHwgIWRpcmVjdF9nYnBhZ2VzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGFkZHIgXHUwMDI2PSBQVURfTUFTSztcbkBAIC0xNzMwLDcgJiM0MzsxNzMwLDggQEAgc3RhdGljIGludCBwb3B1bGF0ZV9wdWQoc3RydWN0IGNwYV9kYXRhICpjcGEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHA0ZF90ICpwNGQsXG4gXHQvKlxuIFx0ICogTWFwIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgZnJvbSB0aGUgR2IgYm91bmRhcnksIHBvc3NpYmx5IHdpdGggMUcgcGFnZXNcbiBcdCAqL1xuLVx0d2hpbGUgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9HQlBBR0VTKSBcdTAwMjZcdTAwMjYgZW5kIC0gc3RhcnQgXHUwMDNlPSBQVURfU0laRSkge1xuJiM0MztcdHdoaWxlIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDMgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9HQlBBR0VTKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgZW5kIC0gc3RhcnQgXHUwMDNlPSBQVURfU0laRSkge1xuIFx0XHRzZXRfcHVkKHB1ZCwgcHVkX21raHVnZShwZm5fcHVkKGNwYS1cdTAwM2VwZm4sXG4gXHRcdFx0XHQgICBjYW5vbl9wZ3Byb3QocHVkX3BncHJvdCkpKSk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXG5pbmRleCBmMzJmYWNkYjMwMzU0My4uZWRhZDg0N2EyZWNkYjggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BndGFibGUuY1xuQEAgLTQxMSw2ICYjNDM7NDExLDcgQEAgaW50IHBtZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBjaGFuZ2VkO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4gaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgcHVkX3QgKnB1ZHAsIHB1ZF90IGVudHJ5LCBpbnQgZGlydHkpXG4ge1xuQEAgLTQzMCw2ICYjNDM7NDMxLDcgQEAgaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0cmV0dXJuIGNoYW5nZWQ7XG4gfVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbiAjZW5kaWZcbiBcbiBib29sIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wNGQuaFxuaW5kZXggODljMjFmODRjZmZiZTIuLjE5ZjVhNmVkYTc2Y2MxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oXG5AQCAtMjIsMjYgJiM0MzsyMiw2MSBAQCBzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpXHRcdHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZClcdFx0eyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZClcdHsgcmV0dXJuIDE7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2NsZWFyKHBnZF90ICpwZ2QpXHR7IH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBnZF9sZWFmKHBnZF90IHBnZClcdFx0eyByZXR1cm4gZmFsc2U7IH1cbiYjNDM7I2RlZmluZSBwZ2RfbGVhZiBwZ2RfbGVhZlxuICNkZWZpbmUgcDRkX0VSUk9SKHA0ZClcdFx0XHRcdChwZ2RfRVJST1IoKHA0ZCkucGdkKSlcbiBcbiAjZGVmaW5lIHBnZF9wb3B1bGF0ZShtbSwgcGdkLCBwNGQpXHRcdGRvIHsgfSB3aGlsZSAoMClcbiAjZGVmaW5lIHBnZF9wb3B1bGF0ZV9zYWZlKG1tLCBwZ2QsIHA0ZClcdFx0ZG8geyB9IHdoaWxlICgwKVxuLS8qXG4tICogKHA0ZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2VzbiYjMzk7dCBnZXQgYWN0dWFsbHkgY2FsbGVkLFxuLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pXG4tICovXG4tI2RlZmluZSBzZXRfcGdkKHBnZHB0ciwgcGdkdmFsKVx0c2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KVxuIFxuLXN0YXRpYyBpbmxpbmUgcDRkX3QgKnA0ZF9vZmZzZXQocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0MzsjZGVmaW5lIHNldF9wZ2QocGdkcHRyLCBwZ2R2YWwpXHRcdFx0XHRcdFx0XFxcbiYjNDM7KHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHBnZF9jaGVja19kdW1teShwZ2R2YWwpO1x0XHRcdFx0XHRcXFxuJiM0MztcdHNldF9wNGQoKHA0ZF90ICopKHBnZHB0ciksIChwNGRfdCkgeyBwZ2R2YWwgfSk7XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcGdkX3QgcGdkcF9nZXQocGdkX3QgKnA0ZHApXG4ge1xuLVx0cmV0dXJuIChwNGRfdCAqKXBnZDtcbiYjNDM7XHRwZ2RfdCBkdW1teSA9IHsgMCB9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZHVtbXk7XG4gfVxuJiM0MzsjZGVmaW5lIHBnZHBfZ2V0IHBnZHBfZ2V0XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHBnZF9jaGVja19kdW1teShwZ2QpIEJVSUxEX0JVR19PTihfX2J1aWx0aW5fY29uc3RhbnRfcChwZ2RfdmFsKHBnZCkpKVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCAqX19wNGRfb2Zmc2V0KHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHA0ZF90ICopcGdkcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpXHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwZ2RfY2hlY2tfZHVtbXkoKihwZ2RwKSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19wNGRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpO1x0XHRcdFx0XHRcXFxuJiM0Mzt9KVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCAqX19wNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHA0ZF90ICopcGdkcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBwNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgYWRkcmVzcylcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwZ2RfY2hlY2tfZHVtbXkoKihwZ2RwKSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19wNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgYWRkcmVzcyk7XHRcdFx0XFxcbiYjNDM7fSlcbiBcbiAjZGVmaW5lIHA0ZF92YWwoeClcdFx0XHRcdChwZ2RfdmFsKCh4KS5wZ2QpKVxuICNkZWZpbmUgX19wNGQoeClcdFx0XHRcdCgocDRkX3QpIHsgX19wZ2QoeCkgfSlcbiBcbi0jZGVmaW5lIHBnZF9wYWdlKHBnZClcdFx0XHRcdChwNGRfcGFnZSgocDRkX3QpeyBwZ2QgfSkpXG4tI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpXHRcdFx0KCh1bnNpZ25lZCBsb25nKShwNGRfcGd0YWJsZSgocDRkX3QpeyBwZ2QgfSkpKVxuJiM0MzsjZGVmaW5lIHBnZF9wYWdlKHBnZClcdFx0XHRcdCh7IEJVSUxEX0JVRygpOyAoc3RydWN0IHBhZ2UgKilOVUxMOyB9KVxuJiM0MzsjZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZClcdFx0XHRcdFx0XHRcXFxuJiM0MzsoeyBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHBnZF9jaGVja19kdW1teShwZ2QpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0KHVuc2lnbmVkIGxvbmcpcDRkX3BndGFibGUoKHA0ZF90KSB7IHBnZCB9KTtcdFx0XHRcXFxuJiM0Mzt9KVxuIFxuIC8qXG4gICogYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHA0ZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwNGQgaXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oXG5pbmRleCAzNmI2NDkwZWQxODA4MS4uNjE4NTJlYjRiMTUwNGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmhcbkBAIC0zMSwyOSAmIzQzOzMxLDYxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHB1ZF9ub25lKHB1ZF90IHB1ZClcdFx0eyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHB1ZF9iYWQocHVkX3QgcHVkKVx0XHR7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBpbnQgcHVkX3ByZXNlbnQocHVkX3QgcHVkKVx0eyByZXR1cm4gMTsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHB1ZF91c2VyKHB1ZF90IHB1ZClcdFx0eyByZXR1cm4gMDsgfVxuLXN0YXRpYyBpbmxpbmUgaW50IHB1ZF9sZWFmKHB1ZF90IHB1ZClcdFx0eyByZXR1cm4gMDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHVkX2xlYWYocHVkX3QgcHVkKVx0XHR7IHJldHVybiBmYWxzZTsgfVxuJiM0MzsjZGVmaW5lIHB1ZF9sZWFmIHB1ZF9sZWFmXG4gc3RhdGljIGlubGluZSB2b2lkIHB1ZF9jbGVhcihwdWRfdCAqcHVkKVx0eyB9XG4gI2RlZmluZSBwbWRfRVJST1IocG1kKVx0XHRcdFx0KHB1ZF9FUlJPUigocG1kKS5wdWQpKVxuIFxuICNkZWZpbmUgcHVkX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSlcdFx0ZG8geyB9IHdoaWxlICgwKVxuIFxuLS8qXG4tICogKHBtZHMgYXJlIGZvbGRlZCBpbnRvIHB1ZHMgc28gdGhpcyBkb2VzbiYjMzk7dCBnZXQgYWN0dWFsbHkgY2FsbGVkLFxuLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pXG4tICovXG4tI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKVx0XHRcdHNldF9wbWQoKHBtZF90ICopKHB1ZHB0ciksIChwbWRfdCkgeyBwdWR2YWwgfSlcbiYjNDM7I2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKVx0XHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwdWRfY2hlY2tfZHVtbXkocHVkdmFsKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRzZXRfcG1kKChwbWRfdCAqKShwdWRwdHIpLCAocG1kX3QpIHsgcHVkdmFsIH0pO1x0XHRcdFxcXG4mIzQzO30pXG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHB1ZF90IHB1ZHBfZ2V0KHB1ZF90ICpwdWRwKVxuJiM0Mzt7XG4mIzQzO1x0cHVkX3QgZHVtbXkgPSB7IDAgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGR1bW15O1xuJiM0Mzt9XG4mIzQzOyNkZWZpbmUgcHVkcF9nZXQgcHVkcF9nZXRcbiBcbi1zdGF0aWMgaW5saW5lIHBtZF90ICogcG1kX29mZnNldChwdWRfdCAqIHB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0MzsjZGVmaW5lIHB1ZF9jaGVja19kdW1teShwdWQpIEJVSUxEX0JVR19PTihfX2J1aWx0aW5fY29uc3RhbnRfcChwdWRfdmFsKHB1ZCkpKVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwbWRfdCAqX19wbWRfb2Zmc2V0KHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHBtZF90ICopcHVkcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHJlc3MpXHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19wbWRfb2Zmc2V0KHB1ZHAsIGFkZHJlc3MpO1x0XHRcdFx0XHRcXFxuJiM0Mzt9KVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwbWRfdCAqX19wbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0cmV0dXJuIChwbWRfdCAqKXB1ZDtcbiYjNDM7XHRyZXR1cm4gKHBtZF90ICopcHVkcDtcbiB9XG4tI2RlZmluZSBwbWRfb2Zmc2V0IHBtZF9vZmZzZXRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgcG1kX29mZnNldF9sb2NrbGVzcyhwdWRwLCBwdWQsIGFkZHJlc3MpXHRcdFx0XHRcXFxuJiM0Mzsoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cHVkX2NoZWNrX2R1bW15KCoocHVkcCkpO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fcG1kX29mZnNldF9sb2NrbGVzcyhwdWRwLCBwdWQsIGFkZHJlc3MpO1x0XHRcdFxcXG4mIzQzO30pXG4gXG4gI2RlZmluZSBwbWRfdmFsKHgpXHRcdFx0XHQocHVkX3ZhbCgoeCkucHVkKSlcbiAjZGVmaW5lIF9fcG1kKHgpXHRcdFx0XHQoKHBtZF90KSB7IF9fcHVkKHgpIH0gKVxuIFxuLSNkZWZpbmUgcHVkX3BhZ2UocHVkKVx0XHRcdFx0KHBtZF9wYWdlKChwbWRfdCl7IHB1ZCB9KSlcbi0jZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZClcdFx0XHQoKHBtZF90ICopKHBtZF9wYWdlX3ZhZGRyKChwbWRfdCl7IHB1ZCB9KSkpXG4mIzQzOyNkZWZpbmUgcHVkX3BhZ2UocHVkKVx0XHRcdFx0KHsgQlVJTERfQlVHKCk7IChzdHJ1Y3QgcGFnZSAqKU5VTEw7IH0pXG4mIzQzOyNkZWZpbmUgcHVkX3BndGFibGUocHVkKVx0XHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwdWRfY2hlY2tfZHVtbXkocHVkKTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdCgocG1kX3QgKikocG1kX3BhZ2VfdmFkZHIoKHBtZF90KSB7IHB1ZCB9KSkpO1x0XHRcdFxcXG4mIzQzO30pXG4gXG4gLypcbiAgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcG1kIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHBtZCBpc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmhcbmluZGV4IDM1NmNiZmJhYWIyNDc2Li41ZWU4ZjE4NTJjZDhjOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaFxuQEAgLTI5LDI3ICYjNDM7MjksNjIgQEAgc3RhdGljIGlubGluZSBpbnQgcDRkX25vbmUocDRkX3QgcDRkKVx0XHR7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBpbnQgcDRkX2JhZChwNGRfdCBwNGQpXHRcdHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwNGRfcHJlc2VudChwNGRfdCBwNGQpXHR7IHJldHVybiAxOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIHA0ZF9jbGVhcihwNGRfdCAqcDRkKVx0eyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwNGRfbGVhZihwNGRfdCBwNGQpXHRcdHsgcmV0dXJuIGZhbHNlOyB9XG4mIzQzOyNkZWZpbmUgcDRkX2xlYWYgcDRkX2xlYWZcbiAjZGVmaW5lIHB1ZF9FUlJPUihwdWQpXHRcdFx0XHQocDRkX0VSUk9SKChwdWQpLnA0ZCkpXG4gXG4gI2RlZmluZSBwNGRfcG9wdWxhdGUobW0sIHA0ZCwgcHVkKVx0XHRkbyB7IH0gd2hpbGUgKDApXG4gI2RlZmluZSBwNGRfcG9wdWxhdGVfc2FmZShtbSwgcDRkLCBwdWQpXHRcdGRvIHsgfSB3aGlsZSAoMClcbi0vKlxuLSAqIChwdWRzIGFyZSBmb2xkZWQgaW50byBwNGRzIHNvIHRoaXMgZG9lc24mIzM5O3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCxcbi0gKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKVxuLSAqL1xuLSNkZWZpbmUgc2V0X3A0ZChwNGRwdHIsIHA0ZHZhbClcdHNldF9wdWQoKHB1ZF90ICopKHA0ZHB0ciksIChwdWRfdCkgeyBwNGR2YWwgfSlcbiBcbi1zdGF0aWMgaW5saW5lIHB1ZF90ICpwdWRfb2Zmc2V0KHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiYjNDM7I2RlZmluZSBzZXRfcDRkKHA0ZHB0ciwgcDRkdmFsKVx0XHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwNGRfY2hlY2tfZHVtbXkocDRkdmFsKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRzZXRfcHVkKChwdWRfdCAqKShwNGRwdHIpLCAocHVkX3QpIHsgcDRkdmFsIH0pO1x0XHRcdFxcXG4mIzQzO30pXG4mIzQzO1xuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCBwNGRwX2dldChwNGRfdCAqcDRkcClcbiYjNDM7e1xuJiM0MztcdHA0ZF90IGR1bW15ID0geyAwIH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBkdW1teTtcbiYjNDM7fVxuJiM0MzsjZGVmaW5lIHA0ZHBfZ2V0IHA0ZHBfZ2V0XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHA0ZF9jaGVja19kdW1teShwNGQpIEJVSUxEX0JVR19PTihfX2J1aWx0aW5fY29uc3RhbnRfcChwNGRfdmFsKHA0ZCkpKVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwdWRfdCAqX19wdWRfb2Zmc2V0KHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0cmV0dXJuIChwdWRfdCAqKXA0ZDtcbiYjNDM7XHRyZXR1cm4gKHB1ZF90ICopcDRkcDtcbiB9XG4tI2RlZmluZSBwdWRfb2Zmc2V0IHB1ZF9vZmZzZXRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHVkX29mZnNldChwNGRwLCBhZGRyZXNzKVx0XHRcdFx0XHRcXFxuJiM0Mzsoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fcHVkX29mZnNldChwNGRwLCBhZGRyZXNzKTtcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcHVkX3QgKl9fcHVkX29mZnNldF9sb2NrbGVzcyhwNGRfdCAqcDRkcCwgcDRkX3QgcDRkLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChwdWRfdCAqKXA0ZHA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGFkZHJlc3MpXHRcdFx0XHRcXFxuJiM0Mzsoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGFkZHJlc3MpO1x0XHRcdFxcXG4mIzQzO30pXG4gXG4gI2RlZmluZSBwdWRfdmFsKHgpXHRcdFx0XHQocDRkX3ZhbCgoeCkucDRkKSlcbiAjZGVmaW5lIF9fcHVkKHgpXHRcdFx0XHQoKHB1ZF90KSB7IF9fcDRkKHgpIH0pXG4gXG4tI2RlZmluZSBwNGRfcGFnZShwNGQpXHRcdFx0XHQocHVkX3BhZ2UoKHB1ZF90KXsgcDRkIH0pKVxuLSNkZWZpbmUgcDRkX3BndGFibGUocDRkKVx0XHRcdCgocHVkX3QgKikocHVkX3BndGFibGUoKHB1ZF90KXsgcDRkIH0pKSlcbiYjNDM7I2RlZmluZSBwNGRfcGFnZShwNGQpXHRcdFx0XHQoeyBCVUlMRF9CVUcoKTsgKHN0cnVjdCBwYWdlICopTlVMTDsgfSlcbiYjNDM7I2RlZmluZSBwNGRfcGd0YWJsZShwNGQpXHRcdFx0XHRcdFx0XFxcbiYjNDM7KHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHA0ZF9jaGVja19kdW1teShwNGQpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0KChwdWRfdCAqKShwdWRfcGd0YWJsZSgocHVkX3QpIHsgcDRkIH0pKSk7XHRcdFx0XFxcbiYjNDM7fSlcbiBcbiAvKlxuICAqIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwdWQgaXMgdHJpdmlhbDogdGhlIDEtZW50cnkgcHVkIGlzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdGR1bXAuaCBiL2luY2x1ZGUvbGludXgvcHRkdW1wLmhcbmluZGV4IDI0MGJkM2JmZjE4ZGQyLi4yNmZhNjI0ZWFjNDRlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRkdW1wLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHRkdW1wLmhcbkBAIC0yOSw2ICYjNDM7MjksNyBAQCBib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxuIFx0XHRcdFx0Ym9vbCBjaGVja3d4LCBib29sIGRtZXNnKTtcbiB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpO1xuJiM0MztpbnQgcHRkdW1wX3B0X2xldmVsX2ZpcnN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiBib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfY2hlY2t3eCh2b2lkKVxuZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmNcbmluZGV4IDU4NTEwOTZlNmY2NTZjLi45NjY3NmM5MDQzMGYxOCAxMDA2NDRcbi0tLSBhL21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wdGR1bXAuY1xuQEAgLTE5Nyw2ICYjNDM7MTk3LDE3IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcbiBcdHN0LVx1MDAzZW5vdGVfcGFnZV9mbHVzaChzdCk7XG4gfVxuIFxuJiM0MztpbnQgcHRkdW1wX3B0X2xldmVsX2ZpcnN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG1tX3BtZF9mb2xkZWQobW0pKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1x0aWYgKG1tX3B1ZF9mb2xkZWQobW0pKVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0aWYgKG1tX3A0ZF9mb2xkZWQobW0pKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBjaGVja193eF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4gXHRpZiAocHRkdW1wX2NoZWNrX3d4KCkpXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMDZlMTAzZjk3ODFlNWQuLjBjOWM0YWM4OWUwOTRhIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMzcyNyw3ICYjNDM7MzcyNyw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGlmICghcHVkX3ByZXNlbnQodmFsKSB8fCBXQVJOX09OX09OQ0UocHVkX2xlYWYodmFsKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHdhbGtfcG1kX3JhbmdlKFx1MDAyNnZhbCwgYWRkciwgbmV4dCwgYXJncyk7XG4mIzQzO1x0XHR3YWxrX3BtZF9yYW5nZShwdWQgJiM0MzsgaSwgYWRkciwgbmV4dCwgYXJncyk7XG4gXG4gXHRcdGlmIChuZWVkX3Jlc2NoZWQoKSB8fCB3YWxrLVx1MDAzZWJhdGNoZWQgXHUwMDNlPSBNQVhfTFJVX0JBVENIKSB7XG4gXHRcdFx0ZW5kID0gKGFkZHIgfCB+UFVEX01BU0spICYjNDM7IDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d2Fsa19wdWRfcmFuZ2UmIzM0OywKICAgICYjMzQ7Z2V0X2h2YV9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7aG9zdF9wZm5fbWFwcGluZ19sZXZlbCYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdWRfcGFnZSYjMzQ7LAogICAgJiMzNDtwb3B1bGF0ZV9wdWQmIzM0OywKICAgICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUmIzM0OywKICAgICYjMzQ7cHVkcF9zZXRfYWNjZXNzX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZm9sZGluZyBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoQVJNLCBBUk02NCwgTG9vbmdBcmNoLCBNSVBTLCBPcGVuUklTQywgUklTQy1WLCB4ODYpIGFuZCBnZW5lcmljIGhlYWRlcnMuIEl0IGZpeGVzIGhvdyBmb2xkZWQgcGFnZSB0YWJsZXMgYXJlIHdhbGtlZCBhbmQgYWNjZXNzZWQsIHdoaWNoIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBLVk0gcGFnZSBmYXVsdCBoYW5kbGVycywgTUdMUlUgcGFnZSB0YWJsZSB3YWxrZXJzLCBQQVQgbWVtb3J5IHNldHRpbmcsIGFuZCBwYWdlIHRhYmxlIGR1bXBpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBwYWdlIHRhYmxlIHRyYXZlcnNhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjFjNDQ2OThhYTk4MzVkNzVlNTMwNmNlNDE1YzQwMzBkMDMzZWY1YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDE3OjM1OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oCmluZGV4IGU3NDQxNWM5NTliZWFjLi44ODY1OWIzOGUyMzY0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2Utbm9tbXUuaApAQCAtMTgsMTIgJiM0MzsxOCwxMiBAQAogICovCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcHRlX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG1kX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdkX3RbMl07CiYjNDM7dHlwZWRlZiB1bnNpZ25lZCBsb25nIHBnZF90OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBncHJvdF90OwogCiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoeCkKICNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICh4KQotI2RlZmluZSBwZ2RfdmFsKHgpCSgoeClbMF0pCiYjNDM7I2RlZmluZSBwZ2RfdmFsKHgpICAgICAgKHgpCiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoeCkKIAogI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKHgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtdHlwZXMuaAppbmRleCA2NTBlNzkzZjQxNDI5Zi4uN2Y4NTM4NGFjMzg2Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLXR5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtdHlwZXMuaApAQCAtMjUsNyAmIzQzOzI1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeyBwdGV2YWxfdCBwZ3Byb3Q7IH0gcGdwcm90X3Q7CiAKICNkZWZpbmUgcHRlX3ZhbCh4KSAgICAgICgoeCkucHRlKQogI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKCh4KS5wbWQpCi0jZGVmaW5lIHBnZF92YWwoeCkJKCh4KS5wZ2RbMF0pCiYjNDM7I2RlZmluZSBwZ2RfdmFsKHgpICAgICAgKCh4KS5wZ2RbMF0pCiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoKHgpLnBncHJvdCkKIAogI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKChwdGVfdCkgeyAoeCkgfSApCkBAIC0zNiwxNCAmIzQzOzM2LDMyIEBAIHR5cGVkZWYgc3RydWN0IHsgcHRldmFsX3QgcGdwcm90OyB9IHBncHJvdF90OwogLyoKICAqIC4uIHdoaWxlIHRoZXNlIG1ha2UgaXQgZWFzaWVyIG9uIHRoZSBjb21waWxlcgogICovCiYjNDM7dHlwZWRlZiB1NjQgcGdkdmFsX3Q7CiYjNDM7CiB0eXBlZGVmIHB0ZXZhbF90IHB0ZV90OwogdHlwZWRlZiBwbWR2YWxfdCBwbWRfdDsKLXR5cGVkZWYgcG1kdmFsX3QgcGdkX3RbMl07CiYjNDM7dHlwZWRlZiBwZ2R2YWxfdCBwZ2RfdDsKIHR5cGVkZWYgcHRldmFsX3QgcGdwcm90X3Q7CiAKICNkZWZpbmUgcHRlX3ZhbCh4KSAgICAgICh4KQogI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKHgpCi0jZGVmaW5lIHBnZF92YWwoeCkJKCh4KVswXSkKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBtZHZhbF90IHBnZF92YWwocGdkX3QgcGdkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGhlIGxvd2VyIGFuZCBoaWdoZXIgcG1kdmFsX3QgdmFsdWVzIHBvaW50IHRvIHRoZSBzYW1lIHBhZ2UuCiYjNDM7CSAqIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlaXIgb2Zmc2V0IHdpdGhpbiB0aGF0IHBhZ2UuCiYjNDM7CSAqIFRoZXJlZm9yZSwgd2hpY2hldmVyIHZhbHVlIGlzIHJldHVybmVkLCB0aGUgYmVoYXZpb3Igb2YgcG1kX3BmbigpLAomIzQzOwkgKiBwbWRfcGFnZSgpLCBhbmQgb3RoZXIgdXNlcnMgb2YgcGdkX3ZhbCgpIHJlbWFpbnMgdW5jaGFuZ2VkLgomIzQzOwkgKgomIzQzOwkgKiBIb3dldmVyLCBwZ2RfdmFsKCkgaGFzIGhpc3RvcmljYWxseSByZXR1cm5lZCB0aGUgbG93ZXIgcG1kdmFsX3QsIHNvCiYjNDM7CSAqIGtlZXAgcmV0dXJuaW5nIHRoZSBsb3dlciBvbmUuCiYjNDM7CSAqCiYjNDM7CSAqIFNlZSB0aGUgY29tbWVudHMgaW4gaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gKCoocG1kdmFsX3QgKCopWzJdKSZhbXA7cGdkKVswXTsKJiM0Mzt9CiYjNDM7CiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoeCkKIAogI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKHgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggOTgyNzk1Y2Y0NTYzN2UuLmVhZGQwMjdmZTBlZTQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xNDEsOCAmIzQzOzE0MSw2IEBAIGV4dGVybiBwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAKIGV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOwogCi0jZGVmaW5lIHBnZHBfZ2V0KHBncGQpCQlSRUFEX09OQ0UoKnBnZHApCi0KICNkZWZpbmUgcHVkX3BhZ2UocHVkKQkJcG1kX3BhZ2UoX19wbWQocHVkX3ZhbChwdWQpKSkKICNkZWZpbmUgcHVkX3dyaXRlKHB1ZCkJCXBtZF93cml0ZShfX3BtZChwdWRfdmFsKHB1ZCkpKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGEyNjgxZDc1NTM1ODQxLi5hYWFlM2QxNDg5NWY2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE0MCwxMCAmIzQzOzE0MCwxNyBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpCiAjZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSghcHRlX3ZhbChwdGUpKQogI2RlZmluZSBwdGVfcGFnZShwdGUpCQkocGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKSkKIAomIzQzOyNkZWZpbmUgcHRlX3ZhbGlkKHB0ZSkJCSghIShwdGVfdmFsKHB0ZSkgJmFtcDsgUFRFX1ZBTElEKSkKJiM0MzsjZGVmaW5lIHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKSBcCiYjNDM7CSgocHRlX3ZhbChwdGUpICZhbXA7IChQVEVfVkFMSUQgfCBQVEVfUFJFU0VOVF9JTlZBTElEKSkgPT0gUFRFX1BSRVNFTlRfSU5WQUxJRCkKJiM0MzsKIC8qCiAgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpLiBVbmRlZmluZWQgYmVoYXZpb3VyIG90aGVyd2lzZS4KICAqLwotI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsaWQocHRlKSB8fCBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkpCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBwdGVfdmFsaWQocHRlKSB8fCBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSk7CiYjNDM7fQogI2RlZmluZSBwdGVfeW91bmcocHRlKQkJKCEhKHB0ZV92YWwocHRlKSAmYW1wOyBQVEVfQUYpKQogI2RlZmluZSBwdGVfc3BlY2lhbChwdGUpCSghIShwdGVfdmFsKHB0ZSkgJmFtcDsgUFRFX1NQRUNJQUwpKQogI2RlZmluZSBwdGVfd3JpdGUocHRlKQkJKCEhKHB0ZV92YWwocHRlKSAmYW1wOyBQVEVfV1JJVEUpKQpAQCAtMTY4LDkgJiM0MzsxNzUsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpCiAjZGVmaW5lIHB0ZV9zd19kaXJ0eShwdGUpCSghIShwdGVfdmFsKHB0ZSkgJmFtcDsgUFRFX0RJUlRZKSkKICNkZWZpbmUgcHRlX2RpcnR5KHB0ZSkJCShwdGVfc3dfZGlydHkocHRlKSB8fCBwdGVfaHdfZGlydHkocHRlKSkKIAotI2RlZmluZSBwdGVfdmFsaWQocHRlKQkJKCEhKHB0ZV92YWwocHRlKSAmYW1wOyBQVEVfVkFMSUQpKQotI2RlZmluZSBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkgXAotCSgocHRlX3ZhbChwdGUpICZhbXA7IChQVEVfVkFMSUQgfCBQVEVfUFJFU0VOVF9JTlZBTElEKSkgPT0gUFRFX1BSRVNFTlRfSU5WQUxJRCkKIC8qCiAgKiBFeGVjdXRlLW9ubHkgdXNlciBtYXBwaW5ncyBkbyBub3QgaGF2ZSB0aGUgUFRFX1VTRVIgYml0IHNldC4gQWxsIHZhbGlkCiAgKiBrZXJuZWwgbWFwcGluZ3MgaGF2ZSB0aGUgUFRFX1VYTiBiaXQgc2V0LgpAQCAtMTE4OCwyOSAmIzQzOzExOTIsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sNV9lbmFibGVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZGVmaW5lIHA0ZF9jbGVhcl9maXhtYXAoKQogCiAjZGVmaW5lIHA0ZF9vZmZzZXRfa2ltZyhkaXIsYWRkcikJKChwNGRfdCAqKWRpcikKLQotc3RhdGljIGlubGluZQotcDRkX3QgKnA0ZF9vZmZzZXRfbG9ja2xlc3NfZm9sZGVkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkvKgotCSAqIFdpdGggcnVudGltZSBmb2xkaW5nIG9mIHRoZSBwdWQsIHB1ZF9vZmZzZXRfbG9ja2xlc3MoKSBwYXNzZXMKLQkgKiB0aGUgJiMzOTtwZ2RfdCAqJiMzOTsgd2UgcmV0dXJuIGhlcmUgdG8gcDRkX3RvX2ZvbGRlZF9wdWQoKSwgd2hpY2gKLQkgKiB3aWxsIG9mZnNldCB0aGUgcG9pbnRlciBhc3N1bWluZyB0aGF0IGl0IHBvaW50cyBpbnRvCi0JICogYSBwYWdlLXRhYmxlIHBhZ2UuIEhvd2V2ZXIsIHRoZSBmYXN0IEdVUCBwYXRoIHBhc3NlcyB1cyBhCi0JICogcGdkX3QgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgc28gd2UgbXVzdCB1c2UgdGhlIG9yaWdpbmFsCi0JICogcG9pbnRlciBpbiAmIzM5O3BnZHAmIzM5OyB0byBjb25zdHJ1Y3QgdGhlIHA0ZCBwb2ludGVyIGluc3RlYWQgb2YKLQkgKiB1c2luZyB0aGUgZ2VuZXJpYyBwNGRfb2Zmc2V0X2xvY2tsZXNzKCkgaW1wbGVtZW50YXRpb24uCi0JICoKLQkgKiBOb3RlOiByZXVzaW5nIHRoZSBvcmlnaW5hbCBwb2ludGVyIG1lYW5zIHRoYXQgd2UgbWF5Ci0JICogZGVyZWZlcmVuY2UgdGhlIHNhbWUgKGxpdmUpIHBhZ2UtdGFibGUgZW50cnkgbXVsdGlwbGUgdGltZXMuCi0JICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaXQgaXMgc3RpbGwgb25seSBsb2FkZWQgb25jZSBpbiB0aGUKLQkgKiBjb250ZXh0IG9mIGVhY2ggbGV2ZWwgYW5kIHRoZSBDUFUgZ3VhcmFudGVlcyBzYW1lLWFkZHJlc3MKLQkgKiByZWFkLWFmdGVyLXJlYWQgb3JkZXJpbmcuCi0JICovCi0JcmV0dXJuIHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7Ci19Ci0jZGVmaW5lIHA0ZF9vZmZzZXRfbG9ja2xlc3MgcDRkX29mZnNldF9sb2NrbGVzc19mb2xkZWQKLQogI2VuZGlmICAvKiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgJmd0OyA0ICovCiAKICNkZWZpbmUgcGdkX0VSUk9SKGUpCVwKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAxOTUyZTM0YmM4ZWUwMC4uNDM0ZTViNDgzNDY2NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTYzNiw3ICYjNDM7NjM2LDkgQEAgc3RhdGljIGlubGluZSBsb25nIHBtZF9wcm90bm9uZShwbWRfdCBwbWQpCiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX1BURV9QUk9UTk9ORSAqLwogCiAjZGVmaW5lIHBtZF9sZWFmKHBtZCkJCSgocG1kX3ZhbChwbWQpICZhbXA7IF9QQUdFX0hVR0UpICE9IDApCiYjNDM7I2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZCkJCSgocHVkX3ZhbChwdWQpICZhbXA7IF9QQUdFX0hVR0UpICE9IDApCiYjNDM7I2VuZGlmCiAKIC8qCiAgKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkIGFyZWEgdG8gY29wZSB3aXRoIHRoZSB2aXJ0dWFsIGFsaWFzaW5nCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMKaW5kZXggZTEwNDg5N2FhNTMyODUuLjgzN2I0MGJiNjk0ZjRlIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jCkBAIC02NjksMTAgJiM0Mzs2NjksMTAgQEAgc3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogCWludCBsZXZlbCA9IDA7CiAJdW5zaWduZWQgbG9uZyBodmE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlwZ2RfdCBwZ2Q7Ci0JcDRkX3QgcDRkOwotCXB1ZF90IHB1ZDsKLQlwbWRfdCBwbWQ7CiYjNDM7CXBnZF90ICpwZ2RwLCBwZ2Q7CiYjNDM7CXA0ZF90ICpwNGRwLCBwNGQ7CiYjNDM7CXB1ZF90ICpwdWRwLCBwdWQ7CiYjNDM7CXBtZF90ICpwbWRwLCBwbWQ7CiAKIAkvKgogCSAqIE5vdGUsIHVzaW5nIHRoZSBhbHJlYWR5LXJldHJpZXZlZCBtZW1zbG90IGFuZCBfX2dmbl90b19odmFfbWVtc2xvdCgpCkBAIC02OTgsMTkgJiM0Mzs2OTgsMjMgQEAgc3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogCSAqIHZhbHVlKSBhbmQgdGhlbiBwKmRfb2Zmc2V0KCkgd2Fsa3MgaW50byB0aGUgdGFyZ2V0IGh1Z2UgcGFnZSBpbnN0ZWFkCiAJICogb2YgdGhlIG9sZCBwYWdlIHRhYmxlIChzZWVzIHRoZSBuZXcgdmFsdWUpLgogCSAqLwotCXBnZCA9IHBnZHBfZ2V0KHBnZF9vZmZzZXQoa3ZtLSZndDttbSwgaHZhKSk7CiYjNDM7CXBnZHAgPSBwZ2Rfb2Zmc2V0KGt2bS0mZ3Q7bW0sIGh2YSk7CiYjNDM7CXBnZCA9IHBnZHBfZ2V0KHBnZHApOwogCWlmIChwZ2Rfbm9uZShwZ2QpKQogCQlnb3RvIG91dDsKIAotCXA0ZCA9IHA0ZHBfZ2V0KHA0ZF9vZmZzZXQoJmFtcDtwZ2QsIGh2YSkpOwomIzQzOwlwNGRwID0gcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGh2YSk7CiYjNDM7CXA0ZCA9IHA0ZHBfZ2V0KHA0ZHApOwogCWlmIChwNGRfbm9uZShwNGQpIHx8ICFwNGRfcHJlc2VudChwNGQpKQogCQlnb3RvIG91dDsKIAotCXB1ZCA9IHB1ZHBfZ2V0KHB1ZF9vZmZzZXQoJmFtcDtwNGQsIGh2YSkpOwomIzQzOwlwdWRwID0gcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGh2YSk7CiYjNDM7CXB1ZCA9IHB1ZHBfZ2V0KHB1ZHApOwogCWlmIChwdWRfbm9uZShwdWQpIHx8ICFwdWRfcHJlc2VudChwdWQpKQogCQlnb3RvIG91dDsKIAotCXBtZCA9IHBtZHBfZ2V0KHBtZF9vZmZzZXQoJmFtcDtwdWQsIGh2YSkpOwomIzQzOwlwbWRwID0gcG1kX29mZnNldF9sb2NrbGVzcyhwdWRwLCBwdWQsIGh2YSk7CiYjNDM7CXBtZCA9IHBtZHBfZ2V0KHBtZHApOwogCWlmIChwbWRfbm9uZShwbWQpIHx8ICFwbWRfcHJlc2VudChwbWQpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZmE3YjkzNWY5NDdjYTAuLjE1MWY0ZDE1YmQxMmJmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTc0NSw4ICYjNDM7NzQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAKICNpZmRlZiBfUEFHRV9IVUdFCiAjZGVmaW5lIHBtZF9sZWFmKHBtZCkJKChwbWRfdmFsKHBtZCkgJmFtcDsgX1BBR0VfSFVHRSkgIT0gMCkKJiM0MzsjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKICNkZWZpbmUgcHVkX2xlYWYocHVkKQkoKHB1ZF92YWwocHVkKSAmYW1wOyBfUEFHRV9IVUdFKSAhPSAwKQogI2VuZGlmCiYjNDM7I2VuZGlmCiAKICNkZWZpbmUgZ3VwX2Zhc3RfcGVybWl0dGVkKHN0YXJ0LCBlbmQpCSghY3B1X2hhc19kY19hbGlhc2VzKQogCmRpZmYgLS1naXQgYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDZiODk5OTZkMGI2MjhlLi41YTQ5MWNkMGYwMDg2OCAxMDA2NDQKLS0tIGEvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTMzMSw5ICYjNDM7MzMxLDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBtZF9wYWdlX3ZhZGRyKHBtZF90IHBtZCkKIAlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwocG1kKSAmYW1wOyBQQUdFX01BU0spKTsKIH0KIAotI2RlZmluZSBfX3BtZF9vZmZzZXQoYWRkcmVzcykgXAotCSgoKGFkZHJlc3MpICZndDsmZ3Q7IFBNRF9TSElGVCkgJmFtcDsgKFBUUlNfUEVSX1BNRC0xKSkKLQogI2RlZmluZSBQRk5fUFRFX1NISUZUCQlQQUdFX1NISUZUCiAjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKCh4KS5wdGUpKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKQogI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkgIF9fcHRlKCgoKHBmbikgJmx0OyZsdDsgUEFHRV9TSElGVCkpIHwgcGdwcm90X3ZhbChwcm90KSkKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmMKaW5kZXggMDgyZjliMjYxNzMzODcuLjZkNjA0MmI4MWQ3OTA5IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuYwpAQCAtMzYyLDEwICYjNDM7MzYyLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLAogewogCWludCBzaXplID0gUEFHRV9TSVpFOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JcGdkX3QgcGdkOwotCXA0ZF90IHA0ZDsKLQlwdWRfdCBwdWQ7Ci0JcG1kX3QgcG1kOwomIzQzOwlwZ2RfdCAqcGdkcCwgcGdkOwomIzQzOwlwNGRfdCAqcDRkcCwgcDRkOwomIzQzOwlwdWRfdCAqcHVkcCwgcHVkOwomIzQzOwlwbWRfdCAqcG1kcCwgcG1kOwogCiAJLyoKIAkgKiBEaXNhYmxlIElSUXMgdG8gcHJldmVudCBjb25jdXJyZW50IHRlYXIgZG93biBvZiBob3N0IHBhZ2UgdGFibGVzLApAQCAtMzgxLDE1ICYjNDM7MzgxLDE4IEBAIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLAogCSAqIHZhbHVlKSBhbmQgdGhlbiBwKmRfb2Zmc2V0KCkgd2Fsa3MgaW50byB0aGUgdGFyZ2V0IGh1Z2UgcGFnZSBpbnN0ZWFkCiAJICogb2YgdGhlIG9sZCBwYWdlIHRhYmxlIChzZWVzIHRoZSBuZXcgdmFsdWUpLgogCSAqLwotCXBnZCA9IHBnZHBfZ2V0KHBnZF9vZmZzZXQoa3ZtLSZndDttbSwgaHZhKSk7CiYjNDM7CXBnZHAgPSBwZ2Rfb2Zmc2V0KGt2bS0mZ3Q7bW0sIGh2YSk7CiYjNDM7CXBnZCA9IHBnZHBfZ2V0KHBnZHApOwogCWlmIChwZ2Rfbm9uZShwZ2QpKQogCQlnb3RvIG91dDsKIAotCXA0ZCA9IHA0ZHBfZ2V0KHA0ZF9vZmZzZXQoJmFtcDtwZ2QsIGh2YSkpOwomIzQzOwlwNGRwID0gcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGh2YSk7CiYjNDM7CXA0ZCA9IHA0ZHBfZ2V0KHA0ZHApOwogCWlmIChwNGRfbm9uZShwNGQpIHx8ICFwNGRfcHJlc2VudChwNGQpKQogCQlnb3RvIG91dDsKIAotCXB1ZCA9IHB1ZHBfZ2V0KHB1ZF9vZmZzZXQoJmFtcDtwNGQsIGh2YSkpOwomIzQzOwlwdWRwID0gcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGh2YSk7CiYjNDM7CXB1ZCA9IHB1ZHBfZ2V0KHB1ZHApOwogCWlmIChwdWRfbm9uZShwdWQpIHx8ICFwdWRfcHJlc2VudChwdWQpKQogCQlnb3RvIG91dDsKIApAQCAtMzk4LDcgJiM0Mzs0MDEsOCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSwKIAkJZ290byBvdXQ7CiAJfQogCi0JcG1kID0gcG1kcF9nZXQocG1kX29mZnNldCgmYW1wO3B1ZCwgaHZhKSk7CiYjNDM7CXBtZHAgPSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgaHZhKTsKJiM0MzsJcG1kID0gcG1kcF9nZXQocG1kcCk7CiAJaWYgKHBtZF9ub25lKHBtZCkgfHwgIXBtZF9wcmVzZW50KHBtZCkpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMKaW5kZXggMDRlZDZmOGFjYWU0ZmQuLmIyYmNhZjEwZDEzZjFkIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jCkBAIC0xNjcsMTQgJiM0MzsxNjcsMTYgQEAgYmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY29kZSwKIAogc3RhdGljIGlubGluZSB2b2lkIHZtYWxsb2NfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcGdkX3QgKnBnZCwgKnBnZF9rOwotCXB1ZF90ICpwdWRfazsKLQlwNGRfdCAqcDRkX2s7Ci0JcG1kX3QgKnBtZF9rOwotCXB0ZV90ICpwdGVfazsKJiM0MzsJcGdkX3QgKnBnZHBfaywgKnBnZHAsIHBnZF9rOwomIzQzOwlwNGRfdCAqcDRkcF9rLCAqcDRkcDsKJiM0MzsJcHVkX3QgKnB1ZHBfaywgKnB1ZHAsIHB1ZF9rOwomIzQzOwlwbWRfdCAqcG1kcF9rLCAqcG1kcCwgcG1kX2s7CiYjNDM7CXB0ZV90ICpwdGVwX2s7CiAJaW50IGluZGV4OwogCXVuc2lnbmVkIGxvbmcgcGZuOwogCiYjNDM7CUJVSUxEX0JVR19PTihDT05GSUdfUEdUQUJMRV9MRVZFTFMgIT0gNSAmYW1wOyZhbXA7IENPTkZJR19QR1RBQkxFX0xFVkVMUyAhPSAyKTsKJiM0MzsKIAkvKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YgKi8KIAlpZiAodXNlcl9tb2RlKHJlZ3MpKQogCQlyZXR1cm4gZG9fdHJhcChyZWdzLCBTSUdTRUdWLCBjb2RlLCBhZGRyKTsKQEAgLTE4OSwzOSAmIzQzOzE5MSw1MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYQogCSAqLwogCWluZGV4ID0gcGdkX2luZGV4KGFkZHIpOwogCXBmbiA9IGNzcl9yZWFkKENTUl9TQVRQKSAmYW1wOyBTQVRQX1BQTjsKLQlwZ2QgPSAocGdkX3QgKilwZm5fdG9fdmlydChwZm4pICYjNDM7IGluZGV4OwotCXBnZF9rID0gaW5pdF9tbS5wZ2QgJiM0MzsgaW5kZXg7CiAKLQlpZiAoIXBnZF9wcmVzZW50KHBnZHBfZ2V0KHBnZF9rKSkpIHsKJiM0MzsJcGdkcCA9IChwZ2RfdCAqKXBmbl90b192aXJ0KHBmbikgJiM0MzsgaW5kZXg7CiYjNDM7CXBnZHBfayA9IGluaXRfbW0ucGdkICYjNDM7IGluZGV4OwomIzQzOwomIzQzOwlwZ2RfayA9IHBnZHBfZ2V0KHBnZHBfayk7CiYjNDM7CWlmICghcGdkX3ByZXNlbnQocGdkX2spKSB7CiAJCW5vX2NvbnRleHQocmVncywgYWRkcik7CiAJCXJldHVybjsKIAl9Ci0Jc2V0X3BnZChwZ2QsIHBnZHBfZ2V0KHBnZF9rKSk7CiYjNDM7CWlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNSkKJiM0MzsJCXNldF9wZ2QocGdkcCwgcGdkX2spOwogCi0JcDRkX2sgPSBwNGRfb2Zmc2V0KHBnZF9rLCBhZGRyKTsKLQlpZiAoIXA0ZF9wcmVzZW50KHA0ZHBfZ2V0KHA0ZF9rKSkpIHsKJiM0MzsJcDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7CiYjNDM7CXA0ZHBfayA9IHA0ZF9vZmZzZXQocGdkcF9rLCBhZGRyKTsKJiM0MzsJaWYgKCFwNGRfcHJlc2VudChwNGRwX2dldChwNGRwX2spKSkgewogCQlub19jb250ZXh0KHJlZ3MsIGFkZHIpOwogCQlyZXR1cm47CiAJfQogCi0JcHVkX2sgPSBwdWRfb2Zmc2V0KHA0ZF9rLCBhZGRyKTsKLQlpZiAoIXB1ZF9wcmVzZW50KHB1ZHBfZ2V0KHB1ZF9rKSkpIHsKJiM0MzsJcHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7CiYjNDM7CXB1ZHBfayA9IHB1ZF9vZmZzZXQocDRkcF9rLCBhZGRyKTsKJiM0MzsKJiM0MzsJcHVkX2sgPSBwdWRwX2dldChwdWRwX2spOwomIzQzOwlpZiAoIXB1ZF9wcmVzZW50KHB1ZF9rKSkgewogCQlub19jb250ZXh0KHJlZ3MsIGFkZHIpOwogCQlyZXR1cm47CiAJfQotCWlmIChwdWRfbGVhZihwdWRwX2dldChwdWRfaykpKQomIzQzOwlpZiAocHVkX2xlYWYocHVkX2spKQogCQlnb3RvIGZsdXNoX3RsYjsKIAogCS8qCiAJICogU2luY2UgdGhlIHZtYWxsb2MgYXJlYSBpcyBnbG9iYWwsIGl0IGlzIHVubmVjZXNzYXJ5CiAJICogdG8gY29weSBpbmRpdmlkdWFsIFBURXMKIAkgKi8KLQlwbWRfayA9IHBtZF9vZmZzZXQocHVkX2ssIGFkZHIpOwotCWlmICghcG1kX3ByZXNlbnQocG1kcF9nZXQocG1kX2spKSkgewomIzQzOwlwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTsKJiM0MzsJcG1kcF9rID0gcG1kX29mZnNldChwdWRwX2ssIGFkZHIpOwomIzQzOwomIzQzOwlwbWRfayA9IHBtZHBfZ2V0KHBtZHBfayk7CiYjNDM7CWlmICghcG1kX3ByZXNlbnQocG1kX2spKSB7CiAJCW5vX2NvbnRleHQocmVncywgYWRkcik7CiAJCXJldHVybjsKIAl9Ci0JaWYgKHBtZF9sZWFmKHBtZHBfZ2V0KHBtZF9rKSkpCiYjNDM7CWlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMikKJiM0MzsJCXNldF9wbWQocG1kcCwgcG1kX2spOwomIzQzOwlpZiAocG1kX2xlYWYocG1kX2spKQogCQlnb3RvIGZsdXNoX3RsYjsKIAogCS8qCkBAIC0yMzAsOCAmIzQzOzI0NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhCiAJICogYWRkcmVzc2VzLiBJZiB3ZSBkb24mIzM5O3QgZG8gdGhpcywgdGhpcyB3aWxsIGp1c3QKIAkgKiBzaWxlbnRseSBsb29wIGZvcmV2ZXIuCiAJICovCi0JcHRlX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfaywgYWRkcik7Ci0JaWYgKCFwdGVfcHJlc2VudChwdGVwX2dldChwdGVfaykpKSB7CiYjNDM7CXB0ZXBfayA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHBfaywgYWRkcik7CiYjNDM7CWlmICghcHRlX3ByZXNlbnQocHRlcF9nZXQocHRlcF9rKSkpIHsKIAkJbm9fY29udGV4dChyZWdzLCBhZGRyKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMKaW5kZXggMmFmYTdhMjMzNDBlOTIuLjRlNTQ1OTg4OTUzYTBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICAqLwogc3RydWN0IHBnX3N0YXRlIHsKIAlzdHJ1Y3QgcHRkdW1wX3N0YXRlIHB0ZHVtcDsKJiM0MzsJaW50IGZpcnN0X2xldmVsOwogCWludCBsZXZlbDsKIAlwZ3Byb3R2YWxfdCBjdXJyZW50X3Byb3Q7CiAJcGdwcm90dmFsX3QgZWZmZWN0aXZlX3Byb3Q7CkBAIC0yNTQsNyAmIzQzOzI1NSw3IEBAIHN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90KHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCBpbnQgbGV2ZWwsIHU2NCB2YWwpCiAJcGdwcm90dmFsX3QgcHJvdCA9IHZhbCAmYW1wOyBQVEVfRkxBR1NfTUFTSzsKIAlwZ3Byb3R2YWxfdCBlZmZlY3RpdmU7CiAKLQlpZiAobGV2ZWwgJmd0OyAwKSB7CiYjNDM7CWlmIChsZXZlbCAmZ3Q7IHN0LSZndDtmaXJzdF9sZXZlbCkgewogCQlwZ3Byb3R2YWxfdCBoaWdoZXJfcHJvdCA9IHN0LSZndDtwcm90X2xldmVsc1tsZXZlbCAtIDFdOwogCiAJCWVmZmVjdGl2ZSA9IChoaWdoZXJfcHJvdCAmYW1wOyBwcm90ICZhbXA7IChfUEFHRV9VU0VSIHwgX1BBR0VfUlcpKSB8CkBAIC00NTUsNiAmIzQzOzQ1Niw4IEBAIGJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLAogCQkuc2VxCQk9IG0KIAl9OwogCiYjNDM7CXN0LmZpcnN0X2xldmVsID0gcHRkdW1wX3B0X2xldmVsX2ZpcnN0KG1tKTsKJiM0MzsKIAlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsIG1tLCBwZ2QpOwogCiAJaWYgKCFjaGVja3d4KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKaW5kZXggMDc4Njg5YWE3MjA2ZjguLjkxYjMzYTI2NWE0MzFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKQEAgLTEzNDYsNyAmIzQzOzEzNDYsNyBAQCBzdGF0aWMgaW50IGNvbGxhcHNlX3B1ZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlwbWRfdCAqcG1kLCBmaXJzdDsKIAlpbnQgaTsKIAotCWlmICghZGlyZWN0X2dicGFnZXMpCiYjNDM7CWlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMiB8fCAhZGlyZWN0X2dicGFnZXMpCiAJCXJldHVybiAwOwogCiAJYWRkciAmYW1wOz0gUFVEX01BU0s7CkBAIC0xNzMwLDcgJiM0MzsxNzMwLDggQEAgc3RhdGljIGludCBwb3B1bGF0ZV9wdWQoc3RydWN0IGNwYV9kYXRhICpjcGEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHA0ZF90ICpwNGQsCiAJLyoKIAkgKiBNYXAgZXZlcnl0aGluZyBzdGFydGluZyBmcm9tIHRoZSBHYiBib3VuZGFyeSwgcG9zc2libHkgd2l0aCAxRyBwYWdlcwogCSAqLwotCXdoaWxlIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfR0JQQUdFUykgJmFtcDsmYW1wOyBlbmQgLSBzdGFydCAmZ3Q7PSBQVURfU0laRSkgewomIzQzOwl3aGlsZSAoQ09ORklHX1BHVEFCTEVfTEVWRUxTICZndDsgMyAmYW1wOyZhbXA7IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9HQlBBR0VTKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBlbmQgLSBzdGFydCAmZ3Q7PSBQVURfU0laRSkgewogCQlzZXRfcHVkKHB1ZCwgcHVkX21raHVnZShwZm5fcHVkKGNwYS0mZ3Q7cGZuLAogCQkJCSAgIGNhbm9uX3BncHJvdChwdWRfcGdwcm90KSkpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jCmluZGV4IGYzMmZhY2RiMzAzNTQzLi5lZGFkODQ3YTJlY2RiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BndGFibGUuYwpAQCAtNDExLDYgJiM0Mzs0MTEsNyBAQCBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiBjaGFuZ2VkOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVECiBpbnQgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQkgIHB1ZF90ICpwdWRwLCBwdWRfdCBlbnRyeSwgaW50IGRpcnR5KQogewpAQCAtNDMwLDYgJiM0Mzs0MzEsNyBAQCBpbnQgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAKIAlyZXR1cm4gY2hhbmdlZDsKIH0KJiM0MzsjZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi8KICNlbmRpZgogCiBib29sIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wNGQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oCmluZGV4IDg5YzIxZjg0Y2ZmYmUyLi4xOWY1YTZlZGE3NmNjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmgKQEAgLTIyLDI2ICYjNDM7MjIsNjEgQEAgc3RhdGljIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKQkJeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpCQl7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBwZ2RfcHJlc2VudChwZ2RfdCBwZ2QpCXsgcmV0dXJuIDE7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfY2xlYXIocGdkX3QgKnBnZCkJeyB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBnZF9sZWFmKHBnZF90IHBnZCkJCXsgcmV0dXJuIGZhbHNlOyB9CiYjNDM7I2RlZmluZSBwZ2RfbGVhZiBwZ2RfbGVhZgogI2RlZmluZSBwNGRfRVJST1IocDRkKQkJCQkocGdkX0VSUk9SKChwNGQpLnBnZCkpCiAKICNkZWZpbmUgcGdkX3BvcHVsYXRlKG1tLCBwZ2QsIHA0ZCkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcGdkX3BvcHVsYXRlX3NhZmUobW0sIHBnZCwgcDRkKQkJZG8geyB9IHdoaWxlICgwKQotLyoKLSAqIChwNGRzIGFyZSBmb2xkZWQgaW50byBwZ2RzIHNvIHRoaXMgZG9lc24mIzM5O3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCi0gKi8KLSNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbCkJc2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KQogCi1zdGF0aWMgaW5saW5lIHA0ZF90ICpwNGRfb2Zmc2V0KHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0MzsjZGVmaW5lIHNldF9wZ2QocGdkcHRyLCBwZ2R2YWwpCQkJCQkJXAomIzQzOyh7CQkJCQkJCQkJXAomIzQzOwlwZ2RfY2hlY2tfZHVtbXkocGdkdmFsKTsJCQkJCVwKJiM0MzsJc2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KTsJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHBnZF90IHBnZHBfZ2V0KHBnZF90ICpwNGRwKQogewotCXJldHVybiAocDRkX3QgKilwZ2Q7CiYjNDM7CXBnZF90IGR1bW15ID0geyAwIH07CiYjNDM7CiYjNDM7CXJldHVybiBkdW1teTsKIH0KJiM0MzsjZGVmaW5lIHBnZHBfZ2V0IHBnZHBfZ2V0CiYjNDM7CiYjNDM7I2RlZmluZSBwZ2RfY2hlY2tfZHVtbXkocGdkKSBCVUlMRF9CVUdfT04oX19idWlsdGluX2NvbnN0YW50X3AocGdkX3ZhbChwZ2QpKSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHA0ZF90ICpfX3A0ZF9vZmZzZXQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0Mzt7CiYjNDM7CXJldHVybiAocDRkX3QgKilwZ2RwOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIHA0ZF9vZmZzZXQocGdkcCwgYWRkcmVzcykJCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJcGdkX2NoZWNrX2R1bW15KCoocGdkcCkpOwkJCQkJXAomIzQzOwlfX3A0ZF9vZmZzZXQocGdkcCwgYWRkcmVzcyk7CQkJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHA0ZF90ICpfX3A0ZF9vZmZzZXRfbG9ja2xlc3MocGdkX3QgKnBnZHAsIHBnZF90IHBnZCwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0Mzt7CiYjNDM7CXJldHVybiAocDRkX3QgKilwZ2RwOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIHA0ZF9vZmZzZXRfbG9ja2xlc3MocGdkcCwgcGdkLCBhZGRyZXNzKQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXBnZF9jaGVja19kdW1teSgqKHBnZHApKTsJCQkJCVwKJiM0MzsJX19wNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgYWRkcmVzcyk7CQkJXAomIzQzO30pCiAKICNkZWZpbmUgcDRkX3ZhbCh4KQkJCQkocGdkX3ZhbCgoeCkucGdkKSkKICNkZWZpbmUgX19wNGQoeCkJCQkJKChwNGRfdCkgeyBfX3BnZCh4KSB9KQogCi0jZGVmaW5lIHBnZF9wYWdlKHBnZCkJCQkJKHA0ZF9wYWdlKChwNGRfdCl7IHBnZCB9KSkKLSNkZWZpbmUgcGdkX3BhZ2VfdmFkZHIocGdkKQkJCSgodW5zaWduZWQgbG9uZykocDRkX3BndGFibGUoKHA0ZF90KXsgcGdkIH0pKSkKJiM0MzsjZGVmaW5lIHBnZF9wYWdlKHBnZCkJCQkJKHsgQlVJTERfQlVHKCk7IChzdHJ1Y3QgcGFnZSAqKU5VTEw7IH0pCiYjNDM7I2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpCQkJCQkJXAomIzQzOyh7IAkJCQkJCQkJCVwKJiM0MzsJcGdkX2NoZWNrX2R1bW15KHBnZCk7CQkJCQkJXAomIzQzOwkodW5zaWduZWQgbG9uZylwNGRfcGd0YWJsZSgocDRkX3QpIHsgcGdkIH0pOwkJCVwKJiM0Mzt9KQogCiAvKgogICogYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHA0ZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwNGQgaXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmgKaW5kZXggMzZiNjQ5MGVkMTgwODEuLjYxODUyZWI0YjE1MDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaApAQCAtMzEsMjkgJiM0MzszMSw2MSBAQCBzdGF0aWMgaW5saW5lIGludCBwdWRfbm9uZShwdWRfdCBwdWQpCQl7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdWRfYmFkKHB1ZF90IHB1ZCkJCXsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB1ZF9wcmVzZW50KHB1ZF90IHB1ZCkJeyByZXR1cm4gMTsgfQogc3RhdGljIGlubGluZSBpbnQgcHVkX3VzZXIocHVkX3QgcHVkKQkJeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSBpbnQgcHVkX2xlYWYocHVkX3QgcHVkKQkJeyByZXR1cm4gMDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpCQl7IHJldHVybiBmYWxzZTsgfQomIzQzOyNkZWZpbmUgcHVkX2xlYWYgcHVkX2xlYWYKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfY2xlYXIocHVkX3QgKnB1ZCkJeyB9CiAjZGVmaW5lIHBtZF9FUlJPUihwbWQpCQkJCShwdWRfRVJST1IoKHBtZCkucHVkKSkKIAogI2RlZmluZSBwdWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKQkJZG8geyB9IHdoaWxlICgwKQogCi0vKgotICogKHBtZHMgYXJlIGZvbGRlZCBpbnRvIHB1ZHMgc28gdGhpcyBkb2VzbiYjMzk7dCBnZXQgYWN0dWFsbHkgY2FsbGVkLAotICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLikKLSAqLwotI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKQkJCXNldF9wbWQoKHBtZF90ICopKHB1ZHB0ciksIChwbWRfdCkgeyBwdWR2YWwgfSkKJiM0MzsjZGVmaW5lIHNldF9wdWQocHVkcHRyLCBwdWR2YWwpCQkJCQkJXAomIzQzOyh7CQkJCQkJCQkJXAomIzQzOwlwdWRfY2hlY2tfZHVtbXkocHVkdmFsKTsJCQkJCVwKJiM0MzsJc2V0X3BtZCgocG1kX3QgKikocHVkcHRyKSwgKHBtZF90KSB7IHB1ZHZhbCB9KTsJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHB1ZF90IHB1ZHBfZ2V0KHB1ZF90ICpwdWRwKQomIzQzO3sKJiM0MzsJcHVkX3QgZHVtbXkgPSB7IDAgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIGR1bW15OwomIzQzO30KJiM0MzsjZGVmaW5lIHB1ZHBfZ2V0IHB1ZHBfZ2V0CiAKLXN0YXRpYyBpbmxpbmUgcG1kX3QgKiBwbWRfb2Zmc2V0KHB1ZF90ICogcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiYjNDM7I2RlZmluZSBwdWRfY2hlY2tfZHVtbXkocHVkKSBCVUlMRF9CVUdfT04oX19idWlsdGluX2NvbnN0YW50X3AocHVkX3ZhbChwdWQpKSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHBtZF90ICpfX3BtZF9vZmZzZXQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0Mzt7CiYjNDM7CXJldHVybiAocG1kX3QgKilwdWRwOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcykJCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJcHVkX2NoZWNrX2R1bW15KCoocHVkcCkpOwkJCQkJXAomIzQzOwlfX3BtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7CQkJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHBtZF90ICpfX3BtZF9vZmZzZXRfbG9ja2xlc3MocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlyZXR1cm4gKHBtZF90ICopcHVkOwomIzQzOwlyZXR1cm4gKHBtZF90ICopcHVkcDsKIH0KLSNkZWZpbmUgcG1kX29mZnNldCBwbWRfb2Zmc2V0CiYjNDM7CiYjNDM7I2RlZmluZSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgYWRkcmVzcykJCQkJXAomIzQzOyh7CQkJCQkJCQkJXAomIzQzOwlwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7CQkJCQlcCiYjNDM7CV9fcG1kX29mZnNldF9sb2NrbGVzcyhwdWRwLCBwdWQsIGFkZHJlc3MpOwkJCVwKJiM0Mzt9KQogCiAjZGVmaW5lIHBtZF92YWwoeCkJCQkJKHB1ZF92YWwoKHgpLnB1ZCkpCiAjZGVmaW5lIF9fcG1kKHgpCQkJCSgocG1kX3QpIHsgX19wdWQoeCkgfSApCiAKLSNkZWZpbmUgcHVkX3BhZ2UocHVkKQkJCQkocG1kX3BhZ2UoKHBtZF90KXsgcHVkIH0pKQotI2RlZmluZSBwdWRfcGd0YWJsZShwdWQpCQkJKChwbWRfdCAqKShwbWRfcGFnZV92YWRkcigocG1kX3QpeyBwdWQgfSkpKQomIzQzOyNkZWZpbmUgcHVkX3BhZ2UocHVkKQkJCQkoeyBCVUlMRF9CVUcoKTsgKHN0cnVjdCBwYWdlICopTlVMTDsgfSkKJiM0MzsjZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZCkJCQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXB1ZF9jaGVja19kdW1teShwdWQpOwkJCQkJCVwKJiM0MzsJKChwbWRfdCAqKShwbWRfcGFnZV92YWRkcigocG1kX3QpIHsgcHVkIH0pKSk7CQkJXAomIzQzO30pCiAKIC8qCiAgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcG1kIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHBtZCBpcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaAppbmRleCAzNTZjYmZiYWFiMjQ3Ni4uNWVlOGYxODUyY2Q4YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oCkBAIC0yOSwyNyAmIzQzOzI5LDYyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHA0ZF9ub25lKHA0ZF90IHA0ZCkJCXsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHA0ZF9iYWQocDRkX3QgcDRkKQkJeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgcDRkX3ByZXNlbnQocDRkX3QgcDRkKQl7IHJldHVybiAxOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcDRkX2NsZWFyKHA0ZF90ICpwNGQpCXsgfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwNGRfbGVhZihwNGRfdCBwNGQpCQl7IHJldHVybiBmYWxzZTsgfQomIzQzOyNkZWZpbmUgcDRkX2xlYWYgcDRkX2xlYWYKICNkZWZpbmUgcHVkX0VSUk9SKHB1ZCkJCQkJKHA0ZF9FUlJPUigocHVkKS5wNGQpKQogCiAjZGVmaW5lIHA0ZF9wb3B1bGF0ZShtbSwgcDRkLCBwdWQpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHA0ZF9wb3B1bGF0ZV9zYWZlKG1tLCBwNGQsIHB1ZCkJCWRvIHsgfSB3aGlsZSAoMCkKLS8qCi0gKiAocHVkcyBhcmUgZm9sZGVkIGludG8gcDRkcyBzbyB0aGlzIGRvZXNuJiMzOTt0IGdldCBhY3R1YWxseSBjYWxsZWQsCi0gKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKQotICovCi0jZGVmaW5lIHNldF9wNGQocDRkcHRyLCBwNGR2YWwpCXNldF9wdWQoKHB1ZF90ICopKHA0ZHB0ciksIChwdWRfdCkgeyBwNGR2YWwgfSkKIAotc3RhdGljIGlubGluZSBwdWRfdCAqcHVkX29mZnNldChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiYjNDM7I2RlZmluZSBzZXRfcDRkKHA0ZHB0ciwgcDRkdmFsKQkJCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJcDRkX2NoZWNrX2R1bW15KHA0ZHZhbCk7CQkJCQlcCiYjNDM7CXNldF9wdWQoKHB1ZF90ICopKHA0ZHB0ciksIChwdWRfdCkgeyBwNGR2YWwgfSk7CQkJXAomIzQzO30pCiYjNDM7CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCBwNGRwX2dldChwNGRfdCAqcDRkcCkKJiM0Mzt7CiYjNDM7CXA0ZF90IGR1bW15ID0geyAwIH07CiYjNDM7CiYjNDM7CXJldHVybiBkdW1teTsKJiM0Mzt9CiYjNDM7I2RlZmluZSBwNGRwX2dldCBwNGRwX2dldAomIzQzOwomIzQzOyNkZWZpbmUgcDRkX2NoZWNrX2R1bW15KHA0ZCkgQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHA0ZF92YWwocDRkKSkpCiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwdWRfdCAqX19wdWRfb2Zmc2V0KHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JcmV0dXJuIChwdWRfdCAqKXA0ZDsKJiM0MzsJcmV0dXJuIChwdWRfdCAqKXA0ZHA7CiB9Ci0jZGVmaW5lIHB1ZF9vZmZzZXQgcHVkX29mZnNldAomIzQzOwomIzQzOyNkZWZpbmUgcHVkX29mZnNldChwNGRwLCBhZGRyZXNzKQkJCQkJXAomIzQzOyh7CQkJCQkJCQkJXAomIzQzOwlwNGRfY2hlY2tfZHVtbXkoKihwNGRwKSk7CQkJCQlcCiYjNDM7CV9fcHVkX29mZnNldChwNGRwLCBhZGRyZXNzKTsJCQkJCVwKJiM0Mzt9KQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcHVkX3QgKl9fcHVkX29mZnNldF9sb2NrbGVzcyhwNGRfdCAqcDRkcCwgcDRkX3QgcDRkLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQomIzQzO3sKJiM0MzsJcmV0dXJuIChwdWRfdCAqKXA0ZHA7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGFkZHJlc3MpCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJcDRkX2NoZWNrX2R1bW15KCoocDRkcCkpOwkJCQkJXAomIzQzOwlfX3B1ZF9vZmZzZXRfbG9ja2xlc3MocDRkcCwgcDRkLCBhZGRyZXNzKTsJCQlcCiYjNDM7fSkKIAogI2RlZmluZSBwdWRfdmFsKHgpCQkJCShwNGRfdmFsKCh4KS5wNGQpKQogI2RlZmluZSBfX3B1ZCh4KQkJCQkoKHB1ZF90KSB7IF9fcDRkKHgpIH0pCiAKLSNkZWZpbmUgcDRkX3BhZ2UocDRkKQkJCQkocHVkX3BhZ2UoKHB1ZF90KXsgcDRkIH0pKQotI2RlZmluZSBwNGRfcGd0YWJsZShwNGQpCQkJKChwdWRfdCAqKShwdWRfcGd0YWJsZSgocHVkX3QpeyBwNGQgfSkpKQomIzQzOyNkZWZpbmUgcDRkX3BhZ2UocDRkKQkJCQkoeyBCVUlMRF9CVUcoKTsgKHN0cnVjdCBwYWdlICopTlVMTDsgfSkKJiM0MzsjZGVmaW5lIHA0ZF9wZ3RhYmxlKHA0ZCkJCQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXA0ZF9jaGVja19kdW1teShwNGQpOwkJCQkJCVwKJiM0MzsJKChwdWRfdCAqKShwdWRfcGd0YWJsZSgocHVkX3QpIHsgcDRkIH0pKSk7CQkJXAomIzQzO30pCiAKIC8qCiAgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcHVkIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHB1ZCBpcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdGR1bXAuaCBiL2luY2x1ZGUvbGludXgvcHRkdW1wLmgKaW5kZXggMjQwYmQzYmZmMThkZDIuLjI2ZmE2MjRlYWM0NGVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHRkdW1wLmgKQEAgLTI5LDYgJiM0MzsyOSw3IEBAIGJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLAogCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLAogCQkJCWJvb2wgY2hlY2t3eCwgYm9vbCBkbWVzZyk7CiB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpOwomIzQzO2ludCBwdGR1bXBfcHRfbGV2ZWxfZmlyc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19jaGVja3d4KHZvaWQpCmRpZmYgLS1naXQgYS9tbS9wdGR1bXAuYyBiL21tL3B0ZHVtcC5jCmluZGV4IDU4NTEwOTZlNmY2NTZjLi45NjY3NmM5MDQzMGYxOCAxMDA2NDQKLS0tIGEvbW0vcHRkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcHRkdW1wLmMKQEAgLTE5Nyw2ICYjNDM7MTk3LDE3IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKIAlzdC0mZ3Q7bm90ZV9wYWdlX2ZsdXNoKHN0KTsKIH0KIAomIzQzO2ludCBwdGR1bXBfcHRfbGV2ZWxfZmlyc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7ewomIzQzOwlpZiAobW1fcG1kX2ZvbGRlZChtbSkpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsJaWYgKG1tX3B1ZF9mb2xkZWQobW0pKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CWlmIChtbV9wNGRfZm9sZGVkKG1tKSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGNoZWNrX3d4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCWlmIChwdGR1bXBfY2hlY2tfd3goKSkKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMDZlMTAzZjk3ODFlNWQuLjBjOWM0YWM4OWUwOTRhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMzcyNyw3ICYjNDM7MzcyNyw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCWlmICghcHVkX3ByZXNlbnQodmFsKSB8fCBXQVJOX09OX09OQ0UocHVkX2xlYWYodmFsKSkpCiAJCQljb250aW51ZTsKIAotCQl3YWxrX3BtZF9yYW5nZSgmYW1wO3ZhbCwgYWRkciwgbmV4dCwgYXJncyk7CiYjNDM7CQl3YWxrX3BtZF9yYW5nZShwdWQgJiM0MzsgaSwgYWRkciwgbmV4dCwgYXJncyk7CiAKIAkJaWYgKG5lZWRfcmVzY2hlZCgpIHx8IHdhbGstJmd0O2JhdGNoZWQgJmd0Oz0gTUFYX0xSVV9CQVRDSCkgewogCQkJZW5kID0gKGFkZHIgfCB+UFVEX01BU0spICYjNDM7IDE7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODUwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb3JlIE1NIFBhdGNoOiBQYWdlIFRhYmxlIEZvbGRpbmcgRml4ZXMgLSBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWVkKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhICpzaWduaWZpY2FudCogY2hhbmdlLiBJdCYjMzk7cyB0b3VjaGluZyBhIHdpZGUgcmFuZ2Ugb2YgYXJjaGl0ZWN0dXJlcyAoYGFybWAsIGBhcm02NGAsIGBsb29uZ2FyY2hgLCBgbWlwc2AsIGBvcGVucmlzY2AsIGByaXNjdmAsIGB4ODZgKSBhbmQgaW52b2x2ZXMgY3J1Y2lhbCBpbmNsdWRlIGZpbGVzIChgYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3AqYCkuIFRoZSBoZWFydCBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgd2UgaGFuZGxlIGZvbGRlZCBwYWdlIHRhYmxlcywgc3BlY2lmaWNhbGx5IHRoZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZW0uCgpFc3NlbnRpYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIHBhZ2UgdGFibGUgd2Fsa3MgdG8gY29ycmVjdCB0aGVzZSBmb2xkZWQgcGFnZSB0YWJsZSBpbXBsZW1lbnRhdGlvbnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBnZF9jaGVja19kdW1teWAsIGBwNGRfY2hlY2tfZHVtbXlgLCBhbmQgYHB1ZF9jaGVja19kdW1teWAgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmRhbWVudGFsIGFkanVzdG1lbnQgaW4gaG93IHRoZSBrZXJuZWwgdmVyaWZpZXMgdGhlIHZhbGlkaXR5IG9mIHRoZXNlIHN0cnVjdHVyZXMuCgpNeSBpbW1lZGlhdGUgcmVkIGZsYWcgaXMgdGhhdCB0aGlzIHBhdGNoICpkZWZpbml0ZWx5KiBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4gQW5kIHRoZSBmaXhlcyB0byBgdm1hbGxvY19mYXVsdGAgKFJJU0MtViksIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAgKFJJU0MtViBLVk0pLCBhbmQgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgIChMb29uZ0FyY2ggS1ZNKSBhcmUgaW5kaWNhdG9ycyB0aGF0IEtWTS92aXJ0dWFsaXphdGlvbiBpcyBhbHNvIGludm9sdmVkLiBUaGlzIGlzIGdvaW5nIHRvIGhhdmUgcmVhbC13b3JsZCBpbXBhY3QuCgpMb29raW5nIHNwZWNpZmljYWxseSBhdCBgbW0vdm1zY2FuLmNgLCB0aGUgY2hhbmdlIGluIGB3YWxrX3B1ZF9yYW5nZWAg4oCTIHBhc3NpbmcgYHB1ZCAmIzQzOyBpYCBpbnN0ZWFkIG9mIGAmYW1wO3ZhbGAgdG8gYHdhbGtfcG1kX3JhbmdlYCDigJMgc2VlbXMgbGlrZSBhIHN1YnRsZSBidXQgbGlrZWx5IGltcG9ydGFudCBjb3JyZWN0aW9uLiBUaGlzIGlzIHdpdGhpbiBNR0xSVSwgc28gdGhpcyBwYXRjaCBhZmZlY3RzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgcGFnZSByZWNsYWltIG1lY2hhbmlzbS4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBzY29wZSBvZiBpbXBhY3QsIGFuZCBJIHdhbnQgdG8gZXhhbWluZSB0aGVzZSBrZXkgc3ltYm9scyBjbG9zZWx5OgoqICAgYHdhbGtfcHVkX3JhbmdlYCAoaW4gYG1tL3Ztc2Nhbi5jYCkKKiAgIGB2bWFsbG9jX2ZhdWx0YCAoaW4gYGFyY2gvcmlzY3YvbW0vZmF1bHQuY2ApCiogICBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgIChpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgKQoqICAgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgIChpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYCkKKiAgIGBwdGR1bXBfcHRfbGV2ZWxfZmlyc3RgIChpbiBgbW0vcHRkdW1wLmNgKQoqICAgYGNvbGxhcHNlX3B1ZF9wYWdlYCAoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgKQoqICAgYHBvcHVsYXRlX3B1ZGAgKGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCkKCk15IHByaW9yaXR5IGlzIGB3YWxrX3B1ZF9yYW5nZWAsIGFuZCBjb25maXJtZWQgaXQgaXMgcGFydCBvZiBNR0xSVSYjMzk7cyBgd2Fsa19wZ2RfcmFuZ2VgIC0mZ3Q7IGB3YWxrX3A0ZF9yYW5nZWAgLSZndDsgYHdhbGtfcHVkX3JhbmdlYCAtJmd0OyBgd2Fsa19wbWRfcmFuZ2VgIC0mZ3Q7IGB3YWxrX3B0ZV9yYW5nZWAgZnVuY3Rpb24gY2FsbCBjaGFpbi4gSXQmIzM5O3Mgc3RhdGljLCBzbyBpdCBzaG91bGQgYmUgdGVzdGFibGUuCgpHaXZlbiB0aGUgd2lkZXNwcmVhZCBhcmNoaXRlY3R1cmUgaW1wYWN0IGFuZCB0aGUgZnVuZGFtZW50YWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgKHBhZ2UgdGFibGUgd2Fsa3MpLCAqKnRoaXMgaXMgZGVmaW5pdGVseSBhIGNhbmRpZGF0ZSBmb3IgZnV6emluZyoqLiBJJiMzOTtsbCBuZWVkIHRvIGRldmVsb3AgZm9jdXNlZCBmdXp6aW5nIHRhcmdldHMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGVzZSBhcmVhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YWxrX3B1ZF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTM2MzY9c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1zY2FuLmMtMzcwOC1cbm1tL3Ztc2Nhbi5jOjM3MDk6c3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL3Ztc2Nhbi5jLTM3MTAtXHRcdFx0ICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcbi0tXG5tbS92bXNjYW4uYz0zNzUxPXN0YXRpYyB2b2lkIHdhbGtfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG4tLVxubW0vdm1zY2FuLmMtMzc1NC1cdFx0LnRlc3Rfd2FsayA9IHNob3VsZF9za2lwX3ZtYSxcbm1tL3Ztc2Nhbi5jOjM3NTU6XHRcdC5wNGRfZW50cnkgPSB3YWxrX3B1ZF9yYW5nZSxcbm1tL3Ztc2Nhbi5jLTM3NTYtXHRcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODQzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIEkgc2VlIHRoaXMgYC5wNGRfZW50cnkgPSB3YWxrX3B1ZF9yYW5nZWAgYXNzaWdubWVudCBpbiBgd2Fsa19tbWAuIEhtbSwgaW50ZXJlc3RpbmcuIFRoYXQgbGlrZWx5IG1lYW5zIHRoaXMgZnVuY3Rpb24gdXNlcyBgd2Fsa19wdWRfcmFuZ2VgIHRvLCB3ZWxsLCB3YWxrIGEgcmFuZ2Ugb2YgcGFnZSB1cHBlciBkaXJlY3RvcnkgKFBVRCkgZW50cmllcywgd2hpY2ggaXMgYSBjb21tb24gc3RyYXRlZ3kuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgYENPTkZJR19MUlVfR0VOYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbWF5YmUgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLCBpcyBkZWZpbmVkLiBJIGJldCB0aGUgY29kZSYjMzk7cyBiZWhhdmlvciBjaGFuZ2VzIGRlcGVuZGluZyBvbiBob3cgdGhlIExSVSBpcyBpbXBsZW1lbnRlZC4gVGhpcyB3aWxsIHByb2JhYmx5IHRlbGwgbWUgd2hldGhlciB0aGUgY29kZSBpcyBkb2luZyBhbnkgZmFuY3kgTFJVLXJlbGF0ZWQgcGFnZSBzZWxlY3Rpb24gb3IgaGFuZGxpbmcgZHVyaW5nIHRoZSB3YWxrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIExSVSBmb3IgdGhpcyBjb2RlIHBhdGguIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlnIG9wdGlvbnMgdGVsbCBtZSBhYm91dCBob3cgdGhlIHBhZ2luZyBzdHJ1Y3R1cmVzIGFyZSBtYW5pcHVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YWxrX3B1ZF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jPTk2PXN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdld2Fsay5jLTE4NC1cbm1tL3BhZ2V3YWxrLmM6MTg1OnN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL3BhZ2V3YWxrLmMtMTg2LVx0XHRcdCAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vcGFnZXdhbGsuYz0yNTA9c3RhdGljIGludCB3YWxrX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtMjc5LVx0XHRpZiAoaGFzX2hhbmRsZXIgfHwgaGFzX2luc3RhbGwpXG5tbS9wYWdld2Fsay5jOjI4MDpcdFx0XHRlcnIgPSB3YWxrX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHdhbGspO1xubW0vcGFnZXdhbGsuYy0yODEtXHRcdGlmIChlcnIpXG4tLVxubW0vdm1zY2FuLmM9MzYzNj1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNzA4LVxubW0vdm1zY2FuLmM6MzcwOTpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1zY2FuLmMtMzcxMC1cdFx0XHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxuLS1cbm1tL3Ztc2Nhbi5jPTM3NTE9c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0zNzU0LVx0XHQudGVzdF93YWxrID0gc2hvdWxkX3NraXBfdm1hLFxubW0vdm1zY2FuLmM6Mzc1NTpcdFx0LnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlLFxubW0vdm1zY2FuLmMtMzc1Ni1cdFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNR0xSVSBDb250ZXh0IGluIGB3YWxrX3B1ZF9yYW5nZWAqKgoKUmlnaHQsIGB3YWxrX3B1ZF9yYW5nZWAgd2l0aGluIGBtbS92bXNjYW4uY2AuLi4gdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gTUdMUlUgdXRpbGl6ZXMsIGlzbiYjMzk7dCBpdD8gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgZW5hYmxpbmcgY29uZGl0aW9uLiBJcyBNR0xSVSB0aGUgZGVmYXVsdCBiZWhhdmlvciBub3csIG9yIGlzIGl0IGdhdGVkIGJlaGluZCBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbj8gSSBuZWVkIHRvIGtub3cgaWYgSSBjYW4ganVzdCBhc3N1bWUgaXQmIzM5O3MgcnVubmluZyB3aGVuIHRlc3Rpbmcgb3IgaWYgSSBuZWVkIHRvIGJ1aWxkIGEgc3BlY2lmaWMga2VybmVsIHRvIHNlZSBpdCBpbiBhY3Rpb24uIElmIGl0IHJlcXVpcmVzIGEgY29uZmlnLCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lLCBzbyBJIGNhbiBlbnN1cmUgdGhlIHRlc3RzIGFyZSByZXByZXNlbnRhdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzg5PWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTEzOTktIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwMDpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDAxLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDA4LVxubW0vS2NvbmZpZzoxNDA5OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTQtXG5tbS9LY29uZmlnOjE0MTU6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxNi1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDIzLVxubW0vS2NvbmZpZzoxNDI0OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI1LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipSZXZpc2l0aW5nIGB3YWxrX3B1ZF9yYW5nZWAgaW4gYG1tL3Ztc2Nhbi5jYCoqCgpPa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGB3YWxrX3B1ZF9yYW5nZWAuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGVyZSYjMzk7cyBzb21ldGhpbmcgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHBhZ2Ugd2Fsa2VyIGFuZCB0aGUgVk0gc2Nhbm5lciB0aGF0IGlzbiYjMzk7dCBxdWl0ZSBjbGlja2luZywgYW5kIG15IGludHVpdGlvbiBpcyBudWRnaW5nIG1lIHRvd2FyZHMgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzdWJ0bGUgbnVhbmNlcyBpbiBpdHMgaGFuZGxpbmcgb2YgUFVEIGVudHJpZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzIHdpdGhpbiB0aGUgcmVjbGFpbSBwcm9jZXNzIHRoYXQgYXJlIHdvcnRoIGFub3RoZXIgbG9vay4gTGV0JiMzOTtzIGRpZyBiYWNrIGludG8gdGhlIGRldGFpbHMgYW5kIHJlLWV2YWx1YXRlIGl0cyBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbGtfcHVkX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MzYzNj1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNzA4LVxubW0vdm1zY2FuLmM6MzcwOTpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1zY2FuLmMtMzcxMC1cdFx0XHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxuLS1cbm1tL3Ztc2Nhbi5jPTM3NTE9c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0zNzU0LVx0XHQudGVzdF93YWxrID0gc2hvdWxkX3NraXBfdm1hLFxubW0vdm1zY2FuLmM6Mzc1NTpcdFx0LnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlLFxubW0vdm1zY2FuLmMtMzc1Ni1cdFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpZ2dpbmcgaW50byBSSVNDLVYgTWVtb3J5IEZhdWx0cyoqCgpPa2F5LCBzbyBJIHJlbWVtYmVyIHdlIG5lZWQgYExSVV9HRU5gIGZvciBgd2Fsa19wdWRfcmFuZ2VgIGluIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRpZXMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBSSVNDLVYuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBhcmNoL3Jpc2N2L21tL2ZhdWx0LmNgLiBJIGhhdmUgYSBmZWVsaW5nIGB2bWFsbG9jX2ZhdWx0YCBpcyBnb2luZyB0byBiZSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGhhbmRsZXMgZmF1bHRzLCBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRvci4gSSYjMzk7bSBndWVzc2luZyB0aGlzIG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IGBMUlVfR0VOYCBnZXRzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBmYXVsdCBoYW5kbGluZyBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgZ2VuZXJpYyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmYXVsdCBoYW5kbGluZyBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgbWVtb3J5IGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFsbG9jX2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9tbS9mYXVsdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbW0vZmF1bHQuYz0xNjA9YmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY29kZSxcbi0tXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMTY3LVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjE2ODpzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0xNjkte1xuLS1cbmFyY2gvcmlzY3YvbW0vZmF1bHQuYz0yOTI9dm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzI2LVx0ICAgIHVubGlrZWx5KGFkZHIgXHUwMDNlPSBWTUFMTE9DX1NUQVJUIFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzYyBWTUFMTE9DX0VORCkpIHtcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYzozMjc6XHRcdHZtYWxsb2NfZmF1bHQocmVncywgY29kZSwgYWRkcik7XG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzI4LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDU1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQ6IFJJU0MtViAmYW1wOyBQYWdlIFRhYmxlIE9wdGltaXphdGlvbnMqKgoKUmlnaHQsIHRoaXMgbG9va3MgbGlrZSBhIFJJU0MtViBzcGVjaWZpYyBxdWVzdGlvbiwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBhcmNoaXRlY3R1cmUgaW4gbWluZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBzY2VuYXJpbyBvZiBjb2xsYXBzaW5nIFBVRCBwYWdlcyDigJMgb3IsIG1vcmUgYnJvYWRseSwgaG93IHRoZXkmIzM5O3JlIGhhbmRsZWQgd2hlbiBvcHRpbWl6YXRpb24gb2NjdXJzLgoKSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHdoYXQgSSYjMzk7bSB0aGlua2luZyBoZXJlIHdpdGggZXN0YWJsaXNoZWQgcHJhY3RpY2VzLCBzbyBJIHRoaW5rIGEgZ29vZCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSB0byBsb29rIGZvciBpbnNwaXJhdGlvbiBpbiB0aGUgeDg2IGNvZGUgYmFzZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBjaGVjayBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIHNlYXJjaCBmb3IgYW55IGZ1bmN0aW9ucyByZWxhdGluZyB0byBgY29sbGFwc2VfcHVkX3BhZ2VgLiBXaGlsZSB0aGUgYXJjaGl0ZWN0dXJlcyBhcmUgZGlmZmVyZW50LCB0aGVyZSBtYXkgYmUgc29tZSBjb25jZXB0dWFsIG92ZXJsYXAgaW4gdGhlIHdheSB3ZSBoYW5kbGUgUFRFIGFuZCBQVUQgZW50cmllcywgZXZlbiBpZiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcmUgbmVjZXNzYXJpbHkgZGlzdGluY3QuIFRoYXQgZmlsZSB3b3VsZCBsaWtlbHkgaG9sZCBzb21lIGluc2lnaHRzIG9uIHN0cmF0ZWdpZXMgZm9yIG1lcmdpbmcgb3IgbW9kaWZ5aW5nIHBhZ2UgZGlyZWN0b3J5IGVudHJpZXMuIFRoaXMgc2VhcmNoIHdpbGwgc2VydmUgYXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9wdWRfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0xMjcyPXN0YXRpYyBpbnQgY29sbGFwc2VfcG1kX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTM0MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTM0MjpzdGF0aWMgaW50IGNvbGxhcHNlX3B1ZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTM0My1cdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTM5Nz1zdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xNDIyLVx0aWYgKGNvbGxhcHNlZClcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTQyMzpcdFx0Y29sbGFwc2VkICYjNDM7PSBjb2xsYXBzZV9wdWRfcGFnZShwdWQsIGFkZHIsIHBndGFibGVzKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTQyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NzEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQ6CgoqKlRhcmdldGluZyB4ODYgUGFnZSBUYWJsZSBEaWFnbm9zdGljcyoqCgpSaWdodCwgdGhpcyBzZWVtcyB0byBiZSBhYm91dCB4ODYgc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoaXMgd291bGQgYmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgcmVsYXRlZCB0byBwYWdlIHRhYmxlcywgYW5kIGNvbnNpZGVyaW5nIHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdCB3b3VsZCBiZSBpbiB0aGUgeDg2LXNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwuICYjMzQ7YXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMmIzM0OyBqdW1wcyBvdXQgYXMgdGhlIG9idmlvdXMgY2FuZGlkYXRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuIEkmIzM5O20gYmV0dGluZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGxvZ2ljIGZvciBpbnNwZWN0aW5nIGFuZCBkdW1waW5nIHRoZSBjb250ZW50cyBvZiB0aG9zZSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B0ZHVtcF9wdF9sZXZlbF9maXJzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQyND1ib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTgtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NTk6XHRzdC5maXJzdF9sZXZlbCA9IHB0ZHVtcF9wdF9sZXZlbF9maXJzdChtbSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDQ5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSB4ODYgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBzbyB0aGlzIGxvb2tzIHg4NiBzcGVjaWZpYy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0IG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gSG9sZCBvbi4uLkkgaW5pdGlhbGx5IHRob3VnaHQgdGhlIGNoYW5nZXMgd2VyZSBpc29sYXRlZCB0byBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWdlIHdhbGtzLCBidXQgSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGlzLiBJJiMzOTt2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcuLi53YXNuJiMzOTt0IGB3YWxrX3B1ZF9yYW5nZWAgaW4gYG1tL3BhZ2V3YWxrLmNgIGFsc28gdG91Y2hlZD8gRG91YmxlIGNoZWNraW5nIHRoZSBwYXRjaCBkZXNjcmlwdGlvbi4uLiBub3BlLCBsb29rcyBsaWtlIGl0JiMzOTtzICpqdXN0KiBgbW0vdm1zY2FuLmNgLiBCdXQgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGtpbmRzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgYG1tL3BhZ2V3YWxrLmNgIGFueXdheS4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeSDigJMgSSB3YW50IHRvIGJlIDEwMCUgY29uZmlkZW50IEkgdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdHMgb2YgdGhpcy4gR290dGEgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyZGVwZW5kZW5jaWVzIG9yIGltcGxpY2l0IGFzc3VtcHRpb25zIGF0IHBsYXkgdGhhdCBtaWdodCBpbXBhY3QgdGhlIHBhZ2Ugd2Fsa2luZyBsb2dpYyBhdCB0aGUgUFVEIGxldmVsLiBUaGlzIGNvdWxkIGJlIG5vdGhpbmcsIGJ1dCB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBhbHdheXMgYSBnb29kIGlkZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbGtfcHVkX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZXdhbGsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jPTk2PXN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdld2Fsay5jLTE4NC1cbm1tL3BhZ2V3YWxrLmM6MTg1OnN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL3BhZ2V3YWxrLmMtMTg2LVx0XHRcdCAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vcGFnZXdhbGsuYz0yNTA9c3RhdGljIGludCB3YWxrX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtMjc5LVx0XHRpZiAoaGFzX2hhbmRsZXIgfHwgaGFzX2luc3RhbGwpXG5tbS9wYWdld2Fsay5jOjI4MDpcdFx0XHRlcnIgPSB3YWxrX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHdhbGspO1xubW0vcGFnZXdhbGsuYy0yODEtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgaXNvbGF0ZWQgdG8gYG1tL3Ztc2Nhbi5jYC4gVGhhdCYjMzk7cyBhIGZvY3VzZWQgYXJlYSwgd2hpY2ggaXMgZ29vZCBmb3IgcXVpY2sgYXNzZXNzbWVudC4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGBwdGVfcHJlc2VudGAuIEFoYSEgSSBzZWUgaXQmIzM5O3Mgbm93IGFuIGlubGluZSBmdW5jdGlvbjoKCmBgYGMKc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSkKewoJcmV0dXJuIHB0ZV92YWxpZChwdGUpIHx8IHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKTsKfQpgYGAKCkluc3RlYWQgb2YgdGhlIG1hY3JvIGl0IHVzZWQgdG8gYmUuIE5vdCBhIGh1Z2Ugc3RydWN0dXJhbCBzaGlmdCwgYnV0IHNvbWV0aGluZyB0byBub3RlLiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBvciBpbmxpbmluZyBvcHRpbWl6YXRpb24gdG8gcmVkdWNlIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGluZGljYXRlcyBhIGZpeCBvciBpbXByb3ZlbWVudCB0byBob3cgZm9sZGVkIHBhZ2UgdGFibGVzIGFyZSBoYW5kbGVkIGR1cmluZyB0aGVpciB0cmF2ZXJzYWwsIEkgY2FuIGJlIHByZXR0eSBzdXJlIHRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhhdCBjb2RlIHNlY3Rpb24uIEl0IGxvb2tzIGZ1bmN0aW9uYWxseSBzb3VuZCBmcm9tIHRoaXMgcXVpY2sgc2Nhbi4gTm93IEkmIzM5O2xsIGNoZWNrIGBtbS9wdGR1bXAuY2AgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2hhbmdlZCBzZWN0aW9uLCBzcGVjaWZpY2FsbHkgYHB0ZHVtcF9wdF9sZXZlbF9maXJzdGAuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgdGFibGUgZHVtcCBhbmQgd2FsayBjb2RlIHdpbGwgc29saWRpZnkgbXkgYXNzZXNzbWVudCBvZiBpdHMgaW1wYWN0IGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B0ZHVtcF9wdF9sZXZlbF9maXJzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4tLVxubW0vcHRkdW1wLmMtMTk5LVxubW0vcHRkdW1wLmM6MjAwOmludCBwdGR1bXBfcHRfbGV2ZWxfZmlyc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9wdGR1bXAuYy0yMDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSYjMzk7bSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgR2xvYmFsIFVzYWdlIGluIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCoqCgpSaWdodCwgc28gaXQmIzM5O3MgYmVlbiBmbGFnZ2VkIGFzIGVpdGhlciBleHBvcnRlZCBvciwgbW9yZSBsaWtlbHksIHVzZWQgZ2xvYmFsbHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayBob3cgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgIGlzIGltcGxlbWVudGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgTG9vbmdBcmNoIEtWTSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkLiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIGRlZmluaXRpb24gYW5kIGFueSByZWxldmFudCB1c2FnZSBvZiB0aGF0IHZhcmlhYmxlLCB3aGljaCBzaG91bGQgcHJvdmlkZSB0aGUgY29udGV4dCBuZWVkZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhLWZsb3cgdGhyb3VnaCB0aGUgdmFyaWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hvc3RfcGZuX21hcHBpbmdfbGV2ZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jPTYwOD1zdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNjQzLSAqXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmM6NjQ0OiAqIFdBUk5JTkchICBVc2Ugb2YgaG9zdF9wZm5fbWFwcGluZ19sZXZlbCgpIHJlcXVpcmVzIHRoZSBjYWxsZXIgYW5kIHRoZSBlbmRcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy02NDUtICogY29uc3VtZXIgdG8gYmUgdGllZCBpbnRvIEtWTSYjMzk7cyBoYW5kbGVycyBmb3IgTU1VIG5vdGlmaWVyIGV2ZW50cyFcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNjY1LSAqL1xuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jOjY2NjpzdGF0aWMgaW50IGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNjY3LVx0XHRcdFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmM9Nzc2PXN0YXRpYyBpbnQga3ZtX21hcF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncGEsIGJvb2wgd3JpdGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTg3MS1cdFx0LyogQ2hlY2sgcGFnZSBsZXZlbCBhYm91dCBob3N0IG1tdSovXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmM6ODcyOlx0XHRsZXZlbCA9IGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoa3ZtLCBnZm4sIG1lbXNsb3QpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTg3My1cdFx0aWYgKGxldmVsID09IDEpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdmlydHVhbGl6YXRpb24gYW5kIFJJU0MtViBhcmNoaXRlY3R1cmU6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gUGFnZSBGYXVsdCBIYW5kbGVyKioKClJpZ2h0LCBzbyB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgd2l0aGluIGBrdm1fbWFwX3BhZ2VgLCB0aGUgY29yZSBvZiB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbWVjaGFuaXNtLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSB2aXJ0dWFsLXRvLXBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gaXNzdWUsIGxpa2VseSB3aXRoaW4gYSBndWVzdCBWTS4gV2UmIzM5O3JlIGluIHRoZSB0aGljayBvZiBpdCwgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIG1hcCBhIGd1ZXN0JiMzOTtzIHZpcnR1YWwgYWRkcmVzcyB0byBhIHBoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiwgb3IgcGVyaGFwcyBkZXRlcm1pbmluZyB3aHkgd2UgKmNhbiYjMzk7dCogbWFwIGl0LgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBoZWFkIG92ZXIgdG8gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYC4gVGhlIGZhY3QgdGhhdCBpdCBtZW50aW9ucyB0aGUgc2l6ZSBvZiBhbiBIVkEgKEhvc3QgVmlydHVhbCBBZGRyZXNzKSBtYXBwaW5nIGlzIHRlbGxpbmcsIHNvIGxldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGZvciBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgLiBUaGF0IGZ1bmN0aW9uIHByb2JhYmx5IGhvbGRzIHRoZSBrZXkgdG8gZGV0ZXJtaW5pbmcgdGhlIGV4dGVudCBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIG1hcCwgb3IgcGVyaGFwcyB3aHkgaXQmIzM5O3MgZmFpbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcmNoaXRlY3R1cmUgZGV0ZXJtaW5lcyB0aGUgcmVxdWlyZWQgbWVtb3J5IGFsbG9jYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgTU1VLXJlbGF0ZWQgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfaHZhX21hcHBpbmdfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jPTMwND1zdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMzU5LVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6MzYwOnN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMzYxLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBodmEpXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NDE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDMxLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDMyOlx0XHRzeiA9IGdldF9odmFfbWFwcGluZ19zaXplKGt2bSwgaHZhKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQzMy1cdFx0aWYgKHN6IFx1MDAzYyBQTURfU0laRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgRmF1bHRzIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdGAsIGFuZCBpdCYjMzk7cyB0cmlnZ2VyZWQgZHVyaW5nIEtWTSBwYWdlIGZhdWx0cy4gVGhhdCYjMzk7cyB0aGUgY29udGV4dC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRocyB0aGF0IGludGVyYWN0IHdpdGggdGhpcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGdldCBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMuCgpGaXJzdCB1cCwgYHdhbGtfcHVkX3JhbmdlYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgaXQgKnJlcXVpcmVzKiBgQ09ORklHX0xSVV9HRU5gLiBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGVuIHRoZXJlJiMzOTtzIGB2bWFsbG9jX2ZhdWx0YCwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUklTQy1WIGFuZCBuZWVkcyBgQ09ORklHX1JJU0NWYC4gTWFrZXMgc2Vuc2U7IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmYXVsdCBoYW5kbGluZy4gRm9sbG93aW5nIHRoYXQsIHRoZXJlJiMzOTtzIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAgaW4gdGhlIFJJU0MtViBLVk0gY29kZSAoYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCksIHdoaWNoIGRlcGVuZHMgb24gYm90aCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfUklTQ1ZgLiBBZ2FpbiwgUklTQy1WIGFuZCBLVk0uIE5vIHN1cnByaXNlcyB0aGVyZS4KCk5leHQsIEkgc2VlIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYC4gQWdhaW4sIHRoZSBkZXBlbmRlbmN5IG9uIEtWTSwgYnV0IHRoaXMgdGltZSwgaXQmIzM5O3MgTG9vbmdBcmNoLCBzbyB3ZSBuZWVkIGBDT05GSUdfS1ZNYCAqYW5kKiBgQ09ORklHX0xPT05HQVJDSGAuIFJpZ2h0LiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIG1hcHBpbmdzLiBBbHJpZ2h0LgoKYGNvbGxhcHNlX3B1ZF9wYWdlYCBpbiB0aGUgeDg2IGNvZGUgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX1g4NmAuIE9rYXksIG5vdyB3ZSYjMzk7cmUgc2VlaW5nIGFuIHg4NiBzcGVjaWZpYyBjb2RlIHBhdGguIE5vIHJlYWwgc3VycHJpc2VzIHRoZXJlLgoKRmluYWxseSwgSSBzZWUgYHB0ZHVtcF9wdF9sZXZlbF9maXJzdGAgaW4gYG1tL3B0ZHVtcC5jYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgSSBkb24mIzM5O3Qgd29yayB3aXRoIHRoaXMgb2Z0ZW4uIEl0IHNlZW1zIHRvIGhhdmUgYSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfUFREVU1QX0NPUkVgLiBBbmQgdGhhdCYjMzk7cyB0aGUgb25lIEkgc2hvdWxkIGZvY3VzIG9uIGF0IHRoaXMgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRmluZGluZyB0aGUgQ29uZmlndXJhdGlvbiBGbGFnKioKClJpZ2h0LCB0aW1lIHRvIHRyYWNrIGRvd24gdGhpcyBgUFREVU1QX0NPUkVgIHRoaW5nLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBhIGZlZWxpbmcgdGhpcyBpcyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgc2VhcmNoIHRob3NlIGZpbGVzIGZvciB0aGUgZXhhY3Qgc3RyaW5nLCBgUFREVU1QX0NPUkVgLiBIb3BlZnVsbHksIHRoYXQmIzM5O2xsIGxlYWQgbWUgdG8gdGhlIHJlbGV2YW50IG9wdGlvbiwgaXRzIGRlcGVuZGVuY2llcywgYW5kIGl0cyBkZWZhdWx0IHZhbHVlLiBJIGV4cGVjdCB0aGUgS2NvbmZpZyBmaWxlcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlLiBUaGVuIEkmIzM5O2xsIHVuZGVyc3RhbmQgd2hhdCBgUFREVU1QX0NPUkVgIGFjdHVhbGx5ICpkb2VzKiBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM2NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkh1bnRpbmcgRG93biBgcHRkdW1wLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIGBwdGR1bXAuY2AgaXMgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgKG1tKSBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMgd2l0aCB0aGVzZSBraW5kcyBvZiBjb2RlIHNlYXJjaGVzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFyZSwgYW5kIEkmIzM5O2QgYmUgd2lsbGluZyB0byBiZXQgdGhhdCYjMzk7cyB3aGVyZSBJIGNhbiBwaW5wb2ludCB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgcGFydGljdWxhciBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIGl0IGVpdGhlciBkaXJlY3RseSBsaXN0ZWQgYXMgYSBzb3VyY2UgZmlsZSBmb3IgYSBwYXJ0aWN1bGFyIHRhcmdldCwgb3IgcGVyaGFwcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIGEgbW9yZSBnZW5lcmFsIHBhdHRlcm4gb3IgcnVsZS4gTm93IGxldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B0ZHVtcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTQxPW9iai0kKENPTkZJR19NQVBQSU5HX0RJUlRZX0hFTFBFUlMpICYjNDM7PSBtYXBwaW5nX2RpcnR5X2hlbHBlcnMub1xubW0vTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19QVERVTVApICYjNDM7PSBwdGR1bXAub1xubW0vTWFrZWZpbGUtMTQzLW9iai0kKENPTkZJR19QQUdFX1JFUE9SVElORykgJiM0Mzs9IHBhZ2VfcmVwb3J0aW5nLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkNvbmZpZ3VyYXRpb24gQXVkaXQgYW5kIENvZGUgTmF2aWdhdGlvbioqCgpBbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3Q6IGBDT05GSUdfUFREVU1QYCAtIHRoYXQmIzM5O3Mgb3VyIHN0YXJ0aW5nIHBvaW50LCBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMsIEkgbmVlZCB0byBjaGVjayBzb21lIHJlbGF0ZWQgb3B0aW9ucy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgQ09ORklHX0xSVV9HRU5gLCBkaWdnaW5nIGludG8gYG1tL0tjb25maWdgIHRvIHNlZSBpZiB0aGF0IHJldmVhbHMgYW55dGhpbmcgdXNlZnVsLiBBbmQgeWVzLCBpdCYjMzk7cyBqdXN0IGBDT05GSUdfTFJVX0dFTmAuIE5vdGhpbmcgdW5leHBlY3RlZCB0aGVyZS4KCk5leHQsIEkmIzM5O2xsIHN3aXRjaCBnZWFycyBhbmQgdmVyaWZ5IHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0tWTWAuIEkgbmVlZCB0byBjb25maXJtIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWNyb3NzIGFyY2hpdGVjdHVyZXMsIHNvIEkmIzM5O2xsIGNoZWNrIGJvdGggYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIGFuZCBgYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWdgLiBFeGNlbGxlbnQsIGl0IGxvb2tzIGNvbnNpc3RlbnQgYW5kIGl0JiMzOTtzIGFsc28gYENPTkZJR19LVk1gLgoKRmluYWxseSwgZm9yIGNvZGUtbGV2ZWwgZGVwZW5kZW5jaWVzLCBJIG5lZWQgdG8gY2hlY2sgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGZvciB0aGUgZnVuY3Rpb24gYGNvbGxhcHNlX3B1ZF9wYWdlYC4gTGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyBpbmRlZWQgcHJlc2VudCB3aXRoaW4gYHNldF9tZW1vcnkuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXQgaXMgYSBjcml0aWNhbCBwYXRoIGFuZCBJIG5lZWQgdG8gYmUgc3VyZSBpdCYjMzk7cyBhbHdheXMgaW5jbHVkZWQuIFRoaXMgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTItXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gc2V0X21lbW9yeS5vIG1lbXR5cGUub1xuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTc3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugc3BlY2lmaWMgc3ltYm9scywgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhleSBhcmUgY29tcGlsZWQuIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGF0IGdlbmVyYWxseSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB4ODYgY29tcGlsYXRpb24sIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgUklTQy1WIHRhcmdldHMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYGFyY2gvcmlzY3YvbW0vZmF1bHQuY2AgZm9yIGB2bWFsbG9jX2ZhdWx0YC4gUmlnaHQsIHRoYXQmIzM5O3MgUklTQy1WIHNwZWNpZmljLiBOb3csIGZvciBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAsIHRoYXQmIzM5O3MgaW4gYGFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY2AsIHdoaWNoIGNvbXBpbGVzIHdpdGggTG9vbmdBcmNoIGFuZCB1bmRlciBgQ09ORklHX0tWTWAuIFRoZW4gYGdldF9odmFfbWFwcGluZ19zaXplYCwgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCwgYWxzbywgc3BlY2lmaWNhbGx5IFJJU0MtViBhbmQgYENPTkZJR19LVk1gLgoKVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlOiBgd2Fsa19wdWRfcmFuZ2VgIGZyb20gYG1tL3Ztc2Nhbi5jYCwgYHZtYWxsb2NfZmF1bHRgIGZyb20gYGFyY2gvcmlzY3YvbW0vZmF1bHQuY2AsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAgZnJvbSBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLCBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAgZnJvbSBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCBmcm9tIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgYW5kIGZpbmFsbHkgYHB0ZHVtcF9wdF9sZXZlbF9maXJzdGAgZnJvbSBgbW0vcHRkdW1wLmNgLgoKVG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9uYWxpdHkgZW5hYmxlZCwgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBjb25maWcgb3B0aW9uczogYExSVV9HRU5gLCBgS1ZNYCwgYW5kIHRoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgYFBURFVNUF9ERUJVR0ZTYCBvciBgUFREVU1QX0NPUkVgIGVuYWJsZXMgYENPTkZJR19QVERVTVBgIGZvciB0aGUgcHRkdW1wIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9NDU9aWYgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgUFREVU1QX1NUQUdFMl9ERUJVR0ZTXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtQcmVzZW50IHRoZSBzdGFnZS0yIHBhZ2V0YWJsZXMgdG8gZGVidWdmc1wmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWc9MjE2PWNvbmZpZyBBUkNIX0hBU19QVERVTVBcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTIxOC1cbm1tL0tjb25maWcuZGVidWc6MjE5OmNvbmZpZyBQVERVTVBcbm1tL0tjb25maWcuZGVidWctMjIwLVx0Ym9vbFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjEtXG5tbS9LY29uZmlnLmRlYnVnOjIyMjpjb25maWcgUFREVU1QX0RFQlVHRlNcbm1tL0tjb25maWcuZGVidWctMjIzLVx0Ym9vbCBcJiMzNDtFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTc5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipQYWdlIFRhYmxlIER1bXBpbmcgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBXYWxrdGhyb3VnaCoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBQVERVTVBfREVCVUdGU2AgaXMgdGhlIGtleSB0byBlbmFibGluZyBgUFREVU1QYCBmdW5jdGlvbmFsaXR5LiBUaGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgYWRkIGBQVERVTVBfREVCVUdGU2AgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2hpY2ggc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGFnZSB0YWJsZSBkdW1waW5nIGlzIGFjdHVhbGx5IHRyaWdnZXJlZCBhbmQgaG93IHRoZSByZWxldmFudCBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgd2Fsa19wdWRfcmFuZ2VgIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIC0gdGhhdCBwcm9iYWJseSBtZWFucyBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBwYWdlIHRhYmxlIHdhbGtpbmcgdGhhdCBtaWdodCBjYWxsIGl0LgoKT2theSwgSSBzZWUgYHBvcHVsYXRlX3B1ZGAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBUaGF0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIHRoZSBwYWdlIHVwcGVyIGRpcmVjdG9yeS4gVGhlbiwgdGhlcmUmIzM5O3MgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgLiBUaGF0IG5hbWUgc291bmRzIGxpa2UgYSBzdHJvbmcgY2FuZGlkYXRlLCBzbyBJJiMzOTtsbCBwcmlvcml0aXplIHRoYXQuCgpHaXZlbiB0aGUgbmFtZSwgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCBzb3VuZHMgbGlrZSB0aGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgYGFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jYCBpbiBvcmRlciB0byBkZXRlcm1pbmUgaG93IGl0JiMzOTtzIGNhbGxlZCBhbmQgdGhlIHBhcmFtZXRlcnMgaXQgcmVjZWl2ZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgcGFnZSB0YWJsZSBkdW1waW5nIG1lY2hhbmlzbSB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00MTc9c3RhdGljIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyMy1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyNDpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyNS1cdFx0XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ3Nz12b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LXtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBtbS1cdTAwM2VwZ2QsIGZhbHNlLCB0cnVlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4MC19XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDgyPXZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODktI2VuZGlmXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0OTA6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgcGdkLCBmYWxzZSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDkxLX1cbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00OTM9dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAzLVx0cGdkID0ga2VybmVsX3RvX3VzZXJfcGdkcChwZ2QpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA0Olx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXHUwMDI2aW5pdF9tbSwgcGdkLCB0cnVlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDUtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NTA4PWJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MTItXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MTM6XHRyZXR1cm4gcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXHUwMDI2aW5pdF9tbSwgSU5JVF9QR0QsIHRydWUsIGZhbHNlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUxNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDU4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGVwdGhzKioKClJpZ2h0LCBzbyBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGdldHRpbmcgYSBoYW5kbGUgb24gdGhpcy4gVGhhdCBmdW5jdGlvbiYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgcGFnZSB0YWJsZSB3YWxraW5nIGxvZ2ljIHJlc2lkZXMuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGhvdyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIFBHRCBsZXZlbCwgcGFydGljdWxhcmx5LgoKTm93LCB3aGVyZSYjMzk7cyB0aGUgYWN0dWFsIHBvcHVsYXRpb24gb2YgdGhlIFBhZ2UgVXBwZXIgRGlyZWN0b3J5IChQVUQpIGhhcHBlbmluZz8gR2l2ZW4gdGhpcyBpcyB4ODYsIG15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYHBvcHVsYXRlX3B1ZGAgZnVuY3Rpb24sIGFzc3VtaW5nIHdlIGhhdmUgYSBzaW1pbGFyIGFyY2hpdGVjdHVyZSBvbiB0aGUgc3lzdGVtIGluIHF1ZXN0aW9uLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgb2Z0ZW4gd2hlcmUgdGhlIG1hZ2ljIG9mIG1lbW9yeSBtYXBwaW5nIGdldHMgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4gVGhpcyBmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHRoZSBQVUQgZW50cmllcyBhcmUgYmVpbmcgY3JhZnRlZCBhbmQgaG93IHRoZSBQQVQgKFBhZ2UgQXR0cmlidXRlIFRhYmxlKSBpcyBsaWtlbHkgaW50ZXJhY3RpbmcgdG8gaW5mbHVlbmNlIG1lbW9yeSBjaGFyYWN0ZXJpc3RpY3MgYXQgdGhpcyBsZXZlbC4gSSBiZXQgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBQQVQgc2V0dXAgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG9wdWxhdGVfcHVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE2MTA9c3RhdGljIGxvbmcgcG9wdWxhdGVfcG1kKHN0cnVjdCBjcGFfZGF0YSAqY3BhLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTY4My1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTY4NDpzdGF0aWMgaW50IHBvcHVsYXRlX3B1ZChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgcDRkX3QgKnA0ZCxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTY4NS1cdFx0XHRwZ3Byb3RfdCBwZ3Byb3QpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0xNzY3PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGdkKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODA3LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxODA4Olx0cmV0ID0gcG9wdWxhdGVfcHVkKGNwYSwgYWRkciwgcDRkLCBwZ3Byb3QpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODA5LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipGb2N1c2luZyBvbiBQb3RlbnRpYWwgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqCgpSaWdodCwgYHBvcHVsYXRlX3B1ZGAgaXMgY29taW5nIHVwIGZyZXF1ZW50bHkgaW4gbXkgbWVudGFsIG1vZGVsLCBzbyB0aGF04oCZcyBhbm90aGVyIGtleSBmdW5jdGlvbiB0byBkcmlsbCBkb3duIG9uLiBXaGVyZSBkb2VzIHRoZSBhY3R1YWwgZmxhZyBzZXR0aW5nIG9jY3VyPyBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGxvb2sgYXQgYGFyY2gveDg2L21tL3BndGFibGUuY2AgdG8gc2VlIGhvdyB0aGUgYWNjZXNzIGZsYWdzIGFyZSBzZXQgaW4gdGhlIFBhZ2UgVXBwZXIgRGlyZWN0b3J5IChQVUQpIGVudHJ5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaW1wbGVtZW50YXRpb25zIG9yIGNhbGxzIHJlbGF0ZWQgdG8gYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2AuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjcnVjaWFsIHdyaXRlIHByb3RlY3Rpb24gb3IgYWNjZXNzIGNvbnRyb2wgaGFwcGVucyBhdCB0aGF0IGxldmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B1ZHBfc2V0X2FjY2Vzc19mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BndGFibGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wZ3RhYmxlLmM9MzkzPWludCBwbWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTQxNC0jaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbmFyY2gveDg2L21tL3BndGFibGUuYzo0MTU6aW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTQxNi1cdFx0XHQgIHB1ZF90ICpwdWRwLCBwdWRfdCBlbnRyeSwgaW50IGRpcnR5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUxMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IFRoaW5raW5nOiBQaW5wb2ludGluZyBLZXkgTWVtb3J5IE1hbmFnZW1lbnQgQ29tcG9uZW50cyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBtZW50YWwgbWFwIG5lZWRzIGFuIHVwZGF0ZSByZWdhcmRpbmcga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZWFzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aGVyZSB0aGVyZSBhcmUgUFVEIChQYWdlIFVwcGVyIERpcmVjdG9yeSkgaW50ZXJhY3Rpb25zIG9yIHJlbGF0ZWQgY29uY2VwdHMuIAoKVGhlIGltbWVkaWF0ZSB0YXJnZXRzIHRoYXQgcG9wIHVwIGZvciBtZSBhcyBjcnVjaWFsIGZvY2FsIHBvaW50cyBhcmU6CgoqICAgYHdhbGtfcHVkX3JhbmdlYCAtIFRoaXMgaXMgYSBjZW50cmFsIGNvbXBvbmVudCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29yZSBmdW5jdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgc2Nhbm5pbmcgd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBzeXN0ZW0uCiogICBgdm1hbGxvY19mYXVsdGAgLSBMb2NhdGVkIGluIGBhcmNoL3Jpc2N2L21tL2ZhdWx0LmNgLiBUaGlzIHN1Z2dlc3RzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmYXVsdCBoYW5kbGluZyBtZWNoYW5pc20sIGxpa2VseSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHZtYWxsb2MgYXJlYXMgYXJlIGhhbmRsZWQgaW4gdGhpcyBhcmNoaXRlY3R1cmUuCiogICBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgIC0gRm91bmQgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCwgdGhpcyBvbmUmIzM5O3MgS1ZNLXJlbGF0ZWQgYW5kIGNvbmNlcm5zIHRoZSBzaXplIG9mIGhvc3QgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzLCBhZ2FpbiBwb3RlbnRpYWxseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuCiogICBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAgLSBTaW1pbGFybHksIGluIGBhcmNoL2xvb25nYXJjaC9rdm0vbW11LmNgLiBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgZnVuY3Rpb24sIGJ1dCBvbiBhIGRpZmZlcmVudCBhcmNoaXRlY3R1cmUuIEkgd2FudCB0byBjaGVjayBob3cgdGhvc2UgdHdvIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlci4KKiAgIGBjb2xsYXBzZV9wdWRfcGFnZWAgJmFtcDsgYHBvcHVsYXRlX3B1ZGAgLSBCb3RoIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgdGhlc2UgYXJlIGV4dHJlbWVseSBpbnRlcmVzdGluZy4gVGhleSBkZWFsIHdpdGggY29sbGFwc2luZyBhbmQgcG9wdWxhdGluZyBQVUQgcGFnZXMsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSBzd2VldCBzcG90IG9mIG15IGZvY3VzLiBMaWtlbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgaHVnZSBwYWdlcyBvbiB4ODYuCiogICBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgIC0gIFRoaXMgYXBwZWFycyBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgLiBQYWdlIHRhYmxlIGR1bXBpbmcsIGVzcGVjaWFsbHkgYXQgdGhlIFBHL1BVRCBsZXZlbCwgaXMgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzLgoqICAgYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2AgLSBJbiBgYXJjaC94ODYvbW0vcGd0YWJsZS5jYCwgdGhpcyBpcyBhIFBVRC1zcGVjaWZpYyBmdW5jdGlvbiBmb3Igc2V0dGluZyBhY2Nlc3MgZmxhZ3MuIEl0IHdvdWxkIGJlIGltcG9ydGFudCBmb3IgdHJhY2tpbmcgdGhlIHBlcm1pc3Npb25zIG9mIFBVRCBlbnRyaWVzLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgY29tcG9uZW50cyB0byB1bmRlcnN0YW5kIHdoYXQgY29uZGl0aW9ucyBicmluZyB0aGVtIGludG8gcGxheToKCiogICBgTFJVX0dFTmAgLSBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHRoZSBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIG1lY2hhbmlzbSBmb3IgcGFnZSByZWNsYW1hdGlvbi4KKiAgIGBLVk1gIC0gVGhpcyBtZWFucyB0aGVzZSBhcmUgcmVsZXZhbnQgd2hlbiB0aGUgS2VybmVsIFZpcnR1YWwgTWFjaGluZSBpcyB1c2VkLgoqICAgYFBURFVNUF9ERUJVR0ZTYCAtIERlYnVnZnMgaW50ZXJmYWNlIGZvciBwYWdlIHRhYmxlIGR1bXBpbmcuCiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIC0gVHJhbnNwYXJlbnQgSHVnZSBQYWdlcy4gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IGhhcyBhIGRpcmVjdCBpbmZsdWVuY2Ugb24gdGhlIHBhZ2UgdGFibGUgc3RydWN0dXJlLgoKTGV0IG1lIGFsc28gdmVyaWZ5IHRoYXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBkb2VzIGluZGVlZCBlbmFibGUgYENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbiwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHZlcnkgc2hhcnAgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTEwODY9Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbmFyY2gvS2NvbmZpZy0xMDg4LVxuYXJjaC9LY29uZmlnOjEwODk6Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbmFyY2gvS2NvbmZpZy0xMDkwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU5OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkludmVzdGlnYXRpbmcgQXJjaGl0ZWN0dXJlLVNwZWNpZmljIFNlbGVjdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgY29tcG9uZW50IGlzIGNob3NlbiB3aXRoaW4gYSBzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGUgc2VsZWN0aW9uIHByb2Nlc3MgaXMsIGluIGZhY3QsIGRyaXZlbiBieSB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZSBpdHNlbGYuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSXQgc2VlbXMgbG9naWNhbCwgYnV0IGxldCYjMzk7cyBub3QgYXNzdW1lIGFueXRoaW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBhIGNvbmNyZXRlIGV4YW1wbGUuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgY2hlY2sgd2hldGhlciB0aGUgeDg2IGFyY2hpdGVjdHVyZSBpcyBhIHRyaWdnZXIgZm9yIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB4ODYgc3lzdGVtcyB3aWxsIHNlbGVjdCB0aGlzIGNvbXBvbmVudC4gSXMgeDg2IGEgcmVsaWFibGUgaW5kaWNhdG9yPyBBcmUgdGhlcmUgZXhjZXB0aW9ucz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoYXQgYXJjaGl0ZWN0dXJlIGludGVyYWN0cyB3aXRoIGFuZCBzZWxlY3RzIHRoZSBjb21wb25lbnQgaW4gcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTIxMC1cdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gveDg2L0tjb25maWc6MjExOlx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgaWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTIxMi1cdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1AgICAgICAgICBpZiBYODZfNjQgXHUwMDI2XHUwMDI2IFVTRVJGQVVMVEZEXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgUmVsZXZhbnQgS2VybmVsIENvbmZpZ3VyYXRpb25zIGFuZCBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgaW5kZWVkIHJlbGV2YW50OiBgTFJVX0dFTmAsIGBLVk1gLCBgUFREVU1QX0RFQlVHRlNgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gU2VlbXMgb2J2aW91cywgYnV0IGdvb2QgdG8gY2hlY2suCgpgTFJVX0dFTmAgZGlyZWN0bHkgdGllcyBpbnRvIE1HTFJVLCBzbyB0aGF0JiMzOTtzIHNwb3Qgb24uIGBLVk1gIG1ha2VzIHNlbnNlLCBhbmQgc28gZG9lcyBgUFREVU1QX0RFQlVHRlNgLgoKTm93LCB0aGUgc3ltYm9sIHJlZmluZW1lbnQg4oCTIEkgbmVlZCB0byBrZWVwIHRoZSBmb2N1cyBsaXN0IG1hbmFnZWFibGUuIEkmIzM5O3ZlIG5hcnJvd2VkIGl0IGRvd24gdG86IGB3YWxrX3B1ZF9yYW5nZWAsIGB2bWFsbG9jX2ZhdWx0YCwgYGdldF9odmFfbWFwcGluZ19zaXplYCwgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgLCBgY29sbGFwc2VfcHVkX3BhZ2VgLCBgcG9wdWxhdGVfcHVkYCwgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCwgYW5kIGBwdWRwX3NldF9hY2Nlc3NfZmxhZ3NgLiBFaWdodCBzeW1ib2xzLCB0aGF0IHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQuCgpJIGp1c3QgZG91YmxlLWNoZWNrZWQgYHdhbGtfcHVkX3JhbmdlYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIHJhaXNlZCBhIG1vbWVudGFyeSBmbGFnLiBIb3dldmVyLCBzeXprYWxsZXIgKmNhbiogc3RpbGwgdGFyZ2V0IGl0IGlmIGl0JiMzOTtzIGluIHRoZSBrZXJuZWwgaW1hZ2UsIGFuZCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZm9yIHByaW9yaXRpemF0aW9uLiBJIHdhcyB0aGlua2luZyBvZiBzeXNjYWxscywgYnV0IHRoaXMgaXMgYWJvdXQgZGlyZWN0aW5nIGZ1enppbmcgY292ZXJhZ2UgbW9yZSBlZmZpY2llbnRseS4KClRoZW4gSSBjaGVja2VkIGB2bWFsbG9jX2ZhdWx0YC4gQWgsIHN0YXRpYyBpbmxpbmUuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgaXNzdWUg4oCTIGlmIGl0JiMzOTtzIHN0YXRpYyBpbmxpbmUsIHRoZSBzeW1ib2wgbWlnaHQgbm90IGJlIGluIHRoZSBzeW1ib2wgdGFibGUgYXQgYWxsLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gTGV0IG1lIGNoZWNrIGBhcmNoL3Jpc2N2L21tL2ZhdWx0LmNgIHRvIHNlZSBpZiBpdCBpcyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hbGxvY19mYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbW0vZmF1bHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L21tL2ZhdWx0LmM9MTYwPWJhZF9hcmVhKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IGNvZGUsXG4tLVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTE2Ny1cbmFyY2gvcmlzY3YvbW0vZmF1bHQuYzoxNjg6c3RhdGljIGlubGluZSB2b2lkIHZtYWxsb2NfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMTY5LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM9MjkyPXZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTMyNi1cdCAgICB1bmxpa2VseShhZGRyIFx1MDAzZT0gVk1BTExPQ19TVEFSVCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2MgVk1BTExPQ19FTkQpKSB7XG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM6MzI3Olx0XHR2bWFsbG9jX2ZhdWx0KHJlZ3MsIGNvZGUsIGFkZHIpO1xuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTMyOC1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIGhhbmRsZV9wYWdlX2ZhdWx0IGZvciBSSVNDLVYgQW5hbHlzaXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbiBoZXJlLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciYjMzk7cyBnb2luZyB0byBmb2xkIGl0IGRpcmVjdGx5IGludG8gYGhhbmRsZV9wYWdlX2ZhdWx0YC4gU28sIGZvciBteSBSSVNDLVYgYW5hbHlzaXMsIGBoYW5kbGVfcGFnZV9mYXVsdGAgYmVjb21lcyB0aGUgY3J1Y2lhbCBzeW1ib2wsIHRoZSBjZW50cmFsIHBvaW50IG9mIGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGhvdyB0aGlzIGlubGluZWQgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggaXQuCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byBjaGVja2luZyBgd2Fsa19wdWRfcmFuZ2VgIOKAkyBJJiMzOTtsbCBmaW5kIGl0IGluIGBtbS92bXNjYW4uY2AuIEl0IHNob3VsZCBwcm92aWRlIHNvbWUgaW5zaWdodCBpbnRvIHRoZSBjb3JlIHdvcmtpbmdzLCBjb25zaWRlcmluZyBgaGFuZGxlX3BhZ2VfZmF1bHRgIGlzIGdvaW5nIHRvIGJlIGlubGluZWQgd2l0aCBgd2Fsa19wdWRfcmFuZ2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YWxrX3B1ZF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTM2MzY9c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1zY2FuLmMtMzcwOC1cbm1tL3Ztc2Nhbi5jOjM3MDk6c3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL3Ztc2Nhbi5jLTM3MTAtXHRcdFx0ICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcbi0tXG5tbS92bXNjYW4uYz0zNzUxPXN0YXRpYyB2b2lkIHdhbGtfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG4tLVxubW0vdm1zY2FuLmMtMzc1NC1cdFx0LnRlc3Rfd2FsayA9IHNob3VsZF9za2lwX3ZtYSxcbm1tL3Ztc2Nhbi5jOjM3NTU6XHRcdC5wNGRfZW50cnkgPSB3YWxrX3B1ZF9yYW5nZSxcbm1tL3Ztc2Nhbi5jLTM3NTYtXHRcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ2NgoJCQkJCQkJb3V0cHV0OiAyMzcKCQkJCQkJCXRob3VnaHRzOiA2NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgcGF0Y2ggYW5kIHdoZXJlIGl0IHRvdWNoZXMgdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0byBiZW5lZml0IGZyb20gZnV6emluZyB0byBlbnN1cmUgdGhlIGNoYW5nZXMgZG9uJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBpbiBwYWdlIHRhYmxlIHRyYXZlcnNhbC4gU2luY2UgaXQgbW9kaWZpZXMgcGFnZSB0YWJsZSBmb2xkaW5nIGFjcm9zcyB2YXJpb3VzIGFyY2hpdGVjdHVyZXMsIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0LgoKRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCBzeW1ib2xzIGFyZSBpbiBwbGF5LiBJIHN0YXJ0ZWQgYnkgY2hlY2tpbmcgdGhlIHR5cGUgb2Ygc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlbGV2YW50OiBgc3RhdGljIGludGAgaXMgZGVmaW5pdGVseSBhIHNpZ24gdGhhdCB0aGV5JiMzOTtsbCBiZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aG9zZSBhcmUgZ29vZCBjYW5kaWRhdGVzLiBJIGxvb2tlZCBhdCBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIGFuZCBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAgaW4gYGFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY2AsIGBjb2xsYXBzZV9wdWRfcGFnZWAgYW5kIGBwb3B1bGF0ZV9wdWRgIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgYW5kIGBwdWRwX3NldF9hY2Nlc3NfZmxhZ3NgIGluIGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgLiAgSSBhbHNvIGNoZWNrZWQgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgIHdoaWNoIHR1cm5lZCBvdXQgdG8gYmUgYSBgYm9vbGAsIHdoaWNoIGRvZXNuJiMzOTt0IGNoYW5nZSB0aGluZ3MuCgpJbml0aWFsbHksIHRoaXMgZ2F2ZSBtZSBhIGxpc3Q6IGB3YWxrX3B1ZF9yYW5nZWAsIGBoYW5kbGVfcGFnZV9mYXVsdGAsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAsIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCwgYHBvcHVsYXRlX3B1ZGAsIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYC4KClRoZW4gSSByZW1lbWJlcmVkIGEgY3JpdGljYWwgZ3VpZGVsaW5lOiBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMuIGBoYW5kbGVfcGFnZV9mYXVsdGAgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoLCBzbyBpdCYjMzk7cyBvZmYgdGhlIGxpc3QuIFJlbW92aW5nIHRoYXQsIEkmIzM5O20gbGVmdCB3aXRoIHRoZXNlIGZvY3VzIHN5bWJvbHM6IGB3YWxrX3B1ZF9yYW5nZWAsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAsIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCwgYHBvcHVsYXRlX3B1ZGAsIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYC4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgbGlzdCB0byBzdGFydCB3aXRoLgoKSSYjMzk7bSBhbHNvIGtlZXBpbmcgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBMUlVfR0VOYCwgYEtWTWAsIGBQVERVTVBfREVCVUdGU2AsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCB3aWxsIGluZmx1ZW5jZSBob3cgSSBzZXQgdXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuCgpUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyBob3cgd2Ugd2FsayBhbmQgYWNjZXNzIGZvbGRlZCBwYWdlIHRhYmxlcy4gSXQgaW1wYWN0cyBLVk0sIE1HTFJVLCBQQVQsIGFuZCBwYWdlIHRhYmxlIGR1bXBpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFuZCBmdXp6aW5nIGlzIHRoZSByaWdodCBhcHByb2FjaCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcmVncmVzc2lvbnMgaW4gcGFnZSB0YWJsZSB0cmF2ZXJzYWwgb3IgYWNjZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3YWxrX3B1ZF9yYW5nZSYjMzQ7LAogICAgJiMzNDtnZXRfaHZhX21hcHBpbmdfc2l6ZSYjMzQ7LAogICAgJiMzNDtob3N0X3Bmbl9tYXBwaW5nX2xldmVsJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3B1ZF9wYWdlJiMzNDssCiAgICAmIzM0O3BvcHVsYXRlX3B1ZCYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZSYjMzQ7LAogICAgJiMzNDtwdWRwX3NldF9hY2Nlc3NfZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBmb2xkaW5nIG1hY3JvcyBhbmQgZnVuY3Rpb25zIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChBUk0sIEFSTTY0LCBMb29uZ0FyY2gsIE1JUFMsIE9wZW5SSVNDLCBSSVNDLVYsIHg4NikgYW5kIGdlbmVyaWMgaGVhZGVycy4gSXQgZml4ZXMgaG93IGZvbGRlZCBwYWdlIHRhYmxlcyBhcmUgd2Fsa2VkIGFuZCBhY2Nlc3NlZCwgd2hpY2ggaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gVGhlIGNoYW5nZXMgYWZmZWN0IEtWTSBwYWdlIGZhdWx0IGhhbmRsZXJzLCBNR0xSVSBwYWdlIHRhYmxlIHdhbGtlcnMsIFBBVCBtZW1vcnkgc2V0dGluZywgYW5kIHBhZ2UgdGFibGUgZHVtcGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHBhZ2UgdGFibGUgdHJhdmVyc2FsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dhbGtfcHVkX3JhbmdlJiMzNDssCiAgICAmIzM0O2dldF9odmFfbWFwcGluZ19zaXplJiMzNDssCiAgICAmIzM0O2hvc3RfcGZuX21hcHBpbmdfbGV2ZWwmIzM0OywKICAgICYjMzQ7Y29sbGFwc2VfcHVkX3BhZ2UmIzM0OywKICAgICYjMzQ7cG9wdWxhdGVfcHVkJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlJiMzNDssCiAgICAmIzM0O3B1ZHBfc2V0X2FjY2Vzc19mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHRhYmxlIGZvbGRpbmcgbWFjcm9zIGFuZCBmdW5jdGlvbnMgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKEFSTSwgQVJNNjQsIExvb25nQXJjaCwgTUlQUywgT3BlblJJU0MsIFJJU0MtViwgeDg2KSBhbmQgZ2VuZXJpYyBoZWFkZXJzLiBJdCBmaXhlcyBob3cgZm9sZGVkIHBhZ2UgdGFibGVzIGFyZSB3YWxrZWQgYW5kIGFjY2Vzc2VkLCB3aGljaCBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBUaGUgY2hhbmdlcyBhZmZlY3QgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIE1HTFJVIHBhZ2UgdGFibGUgd2Fsa2VycywgUEFUIG1lbW9yeSBzZXR0aW5nLCBhbmQgcGFnZSB0YWJsZSBkdW1waW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gcGFnZSB0YWJsZSB0cmF2ZXJzYWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNToxMS42ODUyNTk2NDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4MDM3MzM1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiS1ZNXCIsXG4gICAgXCJQVERVTVBfREVCVUdGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3YWxrX3B1ZF9yYW5nZVwiLFxuICAgIFwiZ2V0X2h2YV9tYXBwaW5nX3NpemVcIixcbiAgICBcImhvc3RfcGZuX21hcHBpbmdfbGV2ZWxcIixcbiAgICBcImNvbGxhcHNlX3B1ZF9wYWdlXCIsXG4gICAgXCJwb3B1bGF0ZV9wdWRcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlXCIsXG4gICAgXCJwdWRwX3NldF9hY2Nlc3NfZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHRhYmxlIGZvbGRpbmcgbWFjcm9zIGFuZCBmdW5jdGlvbnMgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKEFSTSwgQVJNNjQsIExvb25nQXJjaCwgTUlQUywgT3BlblJJU0MsIFJJU0MtViwgeDg2KSBhbmQgZ2VuZXJpYyBoZWFkZXJzLiBJdCBmaXhlcyBob3cgZm9sZGVkIHBhZ2UgdGFibGVzIGFyZSB3YWxrZWQgYW5kIGFjY2Vzc2VkLCB3aGljaCBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBUaGUgY2hhbmdlcyBhZmZlY3QgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIE1HTFJVIHBhZ2UgdGFibGUgd2Fsa2VycywgUEFUIG1lbW9yeSBzZXR0aW5nLCBhbmQgcGFnZSB0YWJsZSBkdW1waW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gcGFnZSB0YWJsZSB0cmF2ZXJzYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjExLjY4NTI2OTQ5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2Mzc2NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjFjNDQ2OThhYTk4MzVkNzVlNTMwNmNlNDE1YzQwMzBkMDMzZWY1YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyMyAxNzozNTowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmhcXG5pbmRleCBlNzQ0MTVjOTU5YmVhYy4uODg2NTliMzhlMjM2NDkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oXFxuKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oXFxuQEAgLTE4LDEyICsxOCwxMiBAQFxcbiAgKi9cXG4gdHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZV90O1xcbiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG1kX3Q7XFxuLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdFsyXTtcXG4rdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBnZF90O1xcbiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7XFxuIFxcbiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoeClcXG4gI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKHgpXFxuLSNkZWZpbmUgcGdkX3ZhbCh4KVxcdCgoeClbMF0pXFxuKyNkZWZpbmUgcGdkX3ZhbCh4KSAgICAgICh4KVxcbiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoeClcXG4gXFxuICNkZWZpbmUgX19wdGUoeCkgICAgICAgICh4KVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtdHlwZXMuaFxcbmluZGV4IDY1MGU3OTNmNDE0MjlmLi43Zjg1Mzg0YWMzODZjYSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oXFxuKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtdHlwZXMuaFxcbkBAIC0yNSw3ICsyNSw3IEBAIHR5cGVkZWYgc3RydWN0IHsgcHRldmFsX3QgcGdwcm90OyB9IHBncHJvdF90O1xcbiBcXG4gI2RlZmluZSBwdGVfdmFsKHgpICAgICAgKCh4KS5wdGUpXFxuICNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICgoeCkucG1kKVxcbi0jZGVmaW5lIHBnZF92YWwoeClcXHQoKHgpLnBnZFswXSlcXG4rI2RlZmluZSBwZ2RfdmFsKHgpICAgICAgKCh4KS5wZ2RbMF0pXFxuICNkZWZpbmUgcGdwcm90X3ZhbCh4KSAgICgoeCkucGdwcm90KVxcbiBcXG4gI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKChwdGVfdCkgeyAoeCkgfSApXFxuQEAgLTM2LDE0ICszNiwzMiBAQCB0eXBlZGVmIHN0cnVjdCB7IHB0ZXZhbF90IHBncHJvdDsgfSBwZ3Byb3RfdDtcXG4gLypcXG4gICogLi4gd2hpbGUgdGhlc2UgbWFrZSBpdCBlYXNpZXIgb24gdGhlIGNvbXBpbGVyXFxuICAqL1xcbit0eXBlZGVmIHU2NCBwZ2R2YWxfdDtcXG4rXFxuIHR5cGVkZWYgcHRldmFsX3QgcHRlX3Q7XFxuIHR5cGVkZWYgcG1kdmFsX3QgcG1kX3Q7XFxuLXR5cGVkZWYgcG1kdmFsX3QgcGdkX3RbMl07XFxuK3R5cGVkZWYgcGdkdmFsX3QgcGdkX3Q7XFxuIHR5cGVkZWYgcHRldmFsX3QgcGdwcm90X3Q7XFxuIFxcbiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoeClcXG4gI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKHgpXFxuLSNkZWZpbmUgcGdkX3ZhbCh4KVxcdCgoeClbMF0pXFxuK1xcbitzdGF0aWMgaW5saW5lIHBtZHZhbF90IHBnZF92YWwocGdkX3QgcGdkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBsb3dlciBhbmQgaGlnaGVyIHBtZHZhbF90IHZhbHVlcyBwb2ludCB0byB0aGUgc2FtZSBwYWdlLlxcbitcXHQgKiB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZWlyIG9mZnNldCB3aXRoaW4gdGhhdCBwYWdlLlxcbitcXHQgKiBUaGVyZWZvcmUsIHdoaWNoZXZlciB2YWx1ZSBpcyByZXR1cm5lZCwgdGhlIGJlaGF2aW9yIG9mIHBtZF9wZm4oKSxcXG4rXFx0ICogcG1kX3BhZ2UoKSwgYW5kIG90aGVyIHVzZXJzIG9mIHBnZF92YWwoKSByZW1haW5zIHVuY2hhbmdlZC5cXG4rXFx0ICpcXG4rXFx0ICogSG93ZXZlciwgcGdkX3ZhbCgpIGhhcyBoaXN0b3JpY2FsbHkgcmV0dXJuZWQgdGhlIGxvd2VyIHBtZHZhbF90LCBzb1xcbitcXHQgKiBrZWVwIHJldHVybmluZyB0aGUgbG93ZXIgb25lLlxcbitcXHQgKlxcbitcXHQgKiBTZWUgdGhlIGNvbW1lbnRzIGluIGluY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuICgqKHBtZHZhbF90ICgqKVsyXSlcXHUwMDI2cGdkKVswXTtcXG4rfVxcbitcXG4gI2RlZmluZSBwZ3Byb3RfdmFsKHgpICAgKHgpXFxuIFxcbiAjZGVmaW5lIF9fcHRlKHgpICAgICAgICAoeClcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggOTgyNzk1Y2Y0NTYzN2UuLmVhZGQwMjdmZTBlZTQzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0xNDEsOCArMTQxLDYgQEAgZXh0ZXJuIHBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFxuIGV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdO1xcbiBcXG4tI2RlZmluZSBwZ2RwX2dldChwZ3BkKVxcdFxcdFJFQURfT05DRSgqcGdkcClcXG4tXFxuICNkZWZpbmUgcHVkX3BhZ2UocHVkKVxcdFxcdHBtZF9wYWdlKF9fcG1kKHB1ZF92YWwocHVkKSkpXFxuICNkZWZpbmUgcHVkX3dyaXRlKHB1ZClcXHRcXHRwbWRfd3JpdGUoX19wbWQocHVkX3ZhbChwdWQpKSlcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCBhMjY4MWQ3NTUzNTg0MS4uYWFhZTNkMTQ4OTVmNjkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0xNDAsMTAgKzE0MCwxNyBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpXFxuICNkZWZpbmUgcHRlX25vbmUocHRlKVxcdFxcdCghcHRlX3ZhbChwdGUpKVxcbiAjZGVmaW5lIHB0ZV9wYWdlKHB0ZSlcXHRcXHQocGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKSlcXG4gXFxuKyNkZWZpbmUgcHRlX3ZhbGlkKHB0ZSlcXHRcXHQoISEocHRlX3ZhbChwdGUpIFxcdTAwMjYgUFRFX1ZBTElEKSlcXG4rI2RlZmluZSBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkgXFxcXFxcbitcXHQoKHB0ZV92YWwocHRlKSBcXHUwMDI2IChQVEVfVkFMSUQgfCBQVEVfUFJFU0VOVF9JTlZBTElEKSkgPT0gUFRFX1BSRVNFTlRfSU5WQUxJRClcXG4rXFxuIC8qXFxuICAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkuIFVuZGVmaW5lZCBiZWhhdmlvdXIgb3RoZXJ3aXNlLlxcbiAgKi9cXG4tI2RlZmluZSBwdGVfcHJlc2VudChwdGUpXFx0KHB0ZV92YWxpZChwdGUpIHx8IHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKSlcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSlcXG4re1xcbitcXHRyZXR1cm4gcHRlX3ZhbGlkKHB0ZSkgfHwgcHRlX3ByZXNlbnRfaW52YWxpZChwdGUpO1xcbit9XFxuICNkZWZpbmUgcHRlX3lvdW5nKHB0ZSlcXHRcXHQoISEocHRlX3ZhbChwdGUpIFxcdTAwMjYgUFRFX0FGKSlcXG4gI2RlZmluZSBwdGVfc3BlY2lhbChwdGUpXFx0KCEhKHB0ZV92YWwocHRlKSBcXHUwMDI2IFBURV9TUEVDSUFMKSlcXG4gI2RlZmluZSBwdGVfd3JpdGUocHRlKVxcdFxcdCghIShwdGVfdmFsKHB0ZSkgXFx1MDAyNiBQVEVfV1JJVEUpKVxcbkBAIC0xNjgsOSArMTc1LDYgQEAgc3RhdGljIGlubGluZSBwdGV2YWxfdCBfX3BoeXNfdG9fcHRlX3ZhbChwaHlzX2FkZHJfdCBwaHlzKVxcbiAjZGVmaW5lIHB0ZV9zd19kaXJ0eShwdGUpXFx0KCEhKHB0ZV92YWwocHRlKSBcXHUwMDI2IFBURV9ESVJUWSkpXFxuICNkZWZpbmUgcHRlX2RpcnR5KHB0ZSlcXHRcXHQocHRlX3N3X2RpcnR5KHB0ZSkgfHwgcHRlX2h3X2RpcnR5KHB0ZSkpXFxuIFxcbi0jZGVmaW5lIHB0ZV92YWxpZChwdGUpXFx0XFx0KCEhKHB0ZV92YWwocHRlKSBcXHUwMDI2IFBURV9WQUxJRCkpXFxuLSNkZWZpbmUgcHRlX3ByZXNlbnRfaW52YWxpZChwdGUpIFxcXFxcXG4tXFx0KChwdGVfdmFsKHB0ZSkgXFx1MDAyNiAoUFRFX1ZBTElEIHwgUFRFX1BSRVNFTlRfSU5WQUxJRCkpID09IFBURV9QUkVTRU5UX0lOVkFMSUQpXFxuIC8qXFxuICAqIEV4ZWN1dGUtb25seSB1c2VyIG1hcHBpbmdzIGRvIG5vdCBoYXZlIHRoZSBQVEVfVVNFUiBiaXQgc2V0LiBBbGwgdmFsaWRcXG4gICoga2VybmVsIG1hcHBpbmdzIGhhdmUgdGhlIFBURV9VWE4gYml0IHNldC5cXG5AQCAtMTE4OCwyOSArMTE5Miw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w1X2VuYWJsZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4gI2RlZmluZSBwNGRfY2xlYXJfZml4bWFwKClcXG4gXFxuICNkZWZpbmUgcDRkX29mZnNldF9raW1nKGRpcixhZGRyKVxcdCgocDRkX3QgKilkaXIpXFxuLVxcbi1zdGF0aWMgaW5saW5lXFxuLXA0ZF90ICpwNGRfb2Zmc2V0X2xvY2tsZXNzX2ZvbGRlZChwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLXtcXG4tXFx0LypcXG4tXFx0ICogV2l0aCBydW50aW1lIGZvbGRpbmcgb2YgdGhlIHB1ZCwgcHVkX29mZnNldF9sb2NrbGVzcygpIHBhc3Nlc1xcbi1cXHQgKiB0aGUgJ3BnZF90IConIHdlIHJldHVybiBoZXJlIHRvIHA0ZF90b19mb2xkZWRfcHVkKCksIHdoaWNoXFxuLVxcdCAqIHdpbGwgb2Zmc2V0IHRoZSBwb2ludGVyIGFzc3VtaW5nIHRoYXQgaXQgcG9pbnRzIGludG9cXG4tXFx0ICogYSBwYWdlLXRhYmxlIHBhZ2UuIEhvd2V2ZXIsIHRoZSBmYXN0IEdVUCBwYXRoIHBhc3NlcyB1cyBhXFxuLVxcdCAqIHBnZF90IGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHNvIHdlIG11c3QgdXNlIHRoZSBvcmlnaW5hbFxcbi1cXHQgKiBwb2ludGVyIGluICdwZ2RwJyB0byBjb25zdHJ1Y3QgdGhlIHA0ZCBwb2ludGVyIGluc3RlYWQgb2ZcXG4tXFx0ICogdXNpbmcgdGhlIGdlbmVyaWMgcDRkX29mZnNldF9sb2NrbGVzcygpIGltcGxlbWVudGF0aW9uLlxcbi1cXHQgKlxcbi1cXHQgKiBOb3RlOiByZXVzaW5nIHRoZSBvcmlnaW5hbCBwb2ludGVyIG1lYW5zIHRoYXQgd2UgbWF5XFxuLVxcdCAqIGRlcmVmZXJlbmNlIHRoZSBzYW1lIChsaXZlKSBwYWdlLXRhYmxlIGVudHJ5IG11bHRpcGxlIHRpbWVzLlxcbi1cXHQgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBpdCBpcyBzdGlsbCBvbmx5IGxvYWRlZCBvbmNlIGluIHRoZVxcbi1cXHQgKiBjb250ZXh0IG9mIGVhY2ggbGV2ZWwgYW5kIHRoZSBDUFUgZ3VhcmFudGVlcyBzYW1lLWFkZHJlc3NcXG4tXFx0ICogcmVhZC1hZnRlci1yZWFkIG9yZGVyaW5nLlxcbi1cXHQgKi9cXG4tXFx0cmV0dXJuIHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XFxuLX1cXG4tI2RlZmluZSBwNGRfb2Zmc2V0X2xvY2tsZXNzIHA0ZF9vZmZzZXRfbG9ja2xlc3NfZm9sZGVkXFxuLVxcbiAjZW5kaWYgIC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDQgKi9cXG4gXFxuICNkZWZpbmUgcGdkX0VSUk9SKGUpXFx0XFxcXFxcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCAxOTUyZTM0YmM4ZWUwMC4uNDM0ZTViNDgzNDY2NGYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTYzNiw3ICs2MzYsOSBAQCBzdGF0aWMgaW5saW5lIGxvbmcgcG1kX3Byb3Rub25lKHBtZF90IHBtZClcXG4gI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUgKi9cXG4gXFxuICNkZWZpbmUgcG1kX2xlYWYocG1kKVxcdFxcdCgocG1kX3ZhbChwbWQpIFxcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcXG4rI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVEXFxuICNkZWZpbmUgcHVkX2xlYWYocHVkKVxcdFxcdCgocHVkX3ZhbChwdWQpIFxcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcXG4rI2VuZGlmXFxuIFxcbiAvKlxcbiAgKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkIGFyZWEgdG8gY29wZSB3aXRoIHRoZSB2aXJ0dWFsIGFsaWFzaW5nXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY1xcbmluZGV4IGUxMDQ4OTdhYTUzMjg1Li44MzdiNDBiYjY5NGY0ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmNcXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmNcXG5AQCAtNjY5LDEwICs2NjksMTAgQEAgc3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBcXHRpbnQgbGV2ZWwgPSAwO1xcbiBcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFx0cGdkX3QgcGdkO1xcbi1cXHRwNGRfdCBwNGQ7XFxuLVxcdHB1ZF90IHB1ZDtcXG4tXFx0cG1kX3QgcG1kO1xcbitcXHRwZ2RfdCAqcGdkcCwgcGdkO1xcbitcXHRwNGRfdCAqcDRkcCwgcDRkO1xcbitcXHRwdWRfdCAqcHVkcCwgcHVkO1xcbitcXHRwbWRfdCAqcG1kcCwgcG1kO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTm90ZSwgdXNpbmcgdGhlIGFscmVhZHktcmV0cmlldmVkIG1lbXNsb3QgYW5kIF9fZ2ZuX3RvX2h2YV9tZW1zbG90KClcXG5AQCAtNjk4LDE5ICs2OTgsMjMgQEAgc3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBcXHQgKiB2YWx1ZSkgYW5kIHRoZW4gcCpkX29mZnNldCgpIHdhbGtzIGludG8gdGhlIHRhcmdldCBodWdlIHBhZ2UgaW5zdGVhZFxcbiBcXHQgKiBvZiB0aGUgb2xkIHBhZ2UgdGFibGUgKHNlZXMgdGhlIG5ldyB2YWx1ZSkuXFxuIFxcdCAqL1xcbi1cXHRwZ2QgPSBwZ2RwX2dldChwZ2Rfb2Zmc2V0KGt2bS1cXHUwMDNlbW0sIGh2YSkpO1xcbitcXHRwZ2RwID0gcGdkX29mZnNldChrdm0tXFx1MDAzZW1tLCBodmEpO1xcbitcXHRwZ2QgPSBwZ2RwX2dldChwZ2RwKTtcXG4gXFx0aWYgKHBnZF9ub25lKHBnZCkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cDRkID0gcDRkcF9nZXQocDRkX29mZnNldChcXHUwMDI2cGdkLCBodmEpKTtcXG4rXFx0cDRkcCA9IHA0ZF9vZmZzZXRfbG9ja2xlc3MocGdkcCwgcGdkLCBodmEpO1xcbitcXHRwNGQgPSBwNGRwX2dldChwNGRwKTtcXG4gXFx0aWYgKHA0ZF9ub25lKHA0ZCkgfHwgIXA0ZF9wcmVzZW50KHA0ZCkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cHVkID0gcHVkcF9nZXQocHVkX29mZnNldChcXHUwMDI2cDRkLCBodmEpKTtcXG4rXFx0cHVkcCA9IHB1ZF9vZmZzZXRfbG9ja2xlc3MocDRkcCwgcDRkLCBodmEpO1xcbitcXHRwdWQgPSBwdWRwX2dldChwdWRwKTtcXG4gXFx0aWYgKHB1ZF9ub25lKHB1ZCkgfHwgIXB1ZF9wcmVzZW50KHB1ZCkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cG1kID0gcG1kcF9nZXQocG1kX29mZnNldChcXHUwMDI2cHVkLCBodmEpKTtcXG4rXFx0cG1kcCA9IHBtZF9vZmZzZXRfbG9ja2xlc3MocHVkcCwgcHVkLCBodmEpO1xcbitcXHRwbWQgPSBwbWRwX2dldChwbWRwKTtcXG4gXFx0aWYgKHBtZF9ub25lKHBtZCkgfHwgIXBtZF9wcmVzZW50KHBtZCkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCBmYTdiOTM1Zjk0N2NhMC4uMTUxZjRkMTViZDEyYmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtNzQ1LDggKzc0NSwxMCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXG4gI2lmZGVmIF9QQUdFX0hVR0VcXG4gI2RlZmluZSBwbWRfbGVhZihwbWQpXFx0KChwbWRfdmFsKHBtZCkgXFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxcbisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcXG4gI2RlZmluZSBwdWRfbGVhZihwdWQpXFx0KChwdWRfdmFsKHB1ZCkgXFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxcbiAjZW5kaWZcXG4rI2VuZGlmXFxuIFxcbiAjZGVmaW5lIGd1cF9mYXN0X3Blcm1pdHRlZChzdGFydCwgZW5kKVxcdCghY3B1X2hhc19kY19hbGlhc2VzKVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IDZiODk5OTZkMGI2MjhlLi41YTQ5MWNkMGYwMDg2OCAxMDA2NDRcXG4tLS0gYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTMzMSw5ICszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3BhZ2VfdmFkZHIocG1kX3QgcG1kKVxcbiBcXHRyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwocG1kKSBcXHUwMDI2IFBBR0VfTUFTSykpO1xcbiB9XFxuIFxcbi0jZGVmaW5lIF9fcG1kX29mZnNldChhZGRyZXNzKSBcXFxcXFxuLVxcdCgoKGFkZHJlc3MpIFxcdTAwM2VcXHUwMDNlIFBNRF9TSElGVCkgXFx1MDAyNiAoUFRSU19QRVJfUE1ELTEpKVxcbi1cXG4gI2RlZmluZSBQRk5fUFRFX1NISUZUXFx0XFx0UEFHRV9TSElGVFxcbiAjZGVmaW5lIHB0ZV9wZm4oeClcXHRcXHQoKHVuc2lnbmVkIGxvbmcpKCgoeCkucHRlKSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVClcXG4gI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkgIF9fcHRlKCgoKHBmbikgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpIHwgcGdwcm90X3ZhbChwcm90KSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xcbmluZGV4IDA4MmY5YjI2MTczMzg3Li42ZDYwNDJiODFkNzkwOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuQEAgLTM2MiwxMCArMzYyLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxcbiB7XFxuIFxcdGludCBzaXplID0gUEFHRV9TSVpFO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXHRwZ2RfdCBwZ2Q7XFxuLVxcdHA0ZF90IHA0ZDtcXG4tXFx0cHVkX3QgcHVkO1xcbi1cXHRwbWRfdCBwbWQ7XFxuK1xcdHBnZF90ICpwZ2RwLCBwZ2Q7XFxuK1xcdHA0ZF90ICpwNGRwLCBwNGQ7XFxuK1xcdHB1ZF90ICpwdWRwLCBwdWQ7XFxuK1xcdHBtZF90ICpwbWRwLCBwbWQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEaXNhYmxlIElSUXMgdG8gcHJldmVudCBjb25jdXJyZW50IHRlYXIgZG93biBvZiBob3N0IHBhZ2UgdGFibGVzLFxcbkBAIC0zODEsMTUgKzM4MSwxOCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0ICogdmFsdWUpIGFuZCB0aGVuIHAqZF9vZmZzZXQoKSB3YWxrcyBpbnRvIHRoZSB0YXJnZXQgaHVnZSBwYWdlIGluc3RlYWRcXG4gXFx0ICogb2YgdGhlIG9sZCBwYWdlIHRhYmxlIChzZWVzIHRoZSBuZXcgdmFsdWUpLlxcbiBcXHQgKi9cXG4tXFx0cGdkID0gcGdkcF9nZXQocGdkX29mZnNldChrdm0tXFx1MDAzZW1tLCBodmEpKTtcXG4rXFx0cGdkcCA9IHBnZF9vZmZzZXQoa3ZtLVxcdTAwM2VtbSwgaHZhKTtcXG4rXFx0cGdkID0gcGdkcF9nZXQocGdkcCk7XFxuIFxcdGlmIChwZ2Rfbm9uZShwZ2QpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZF9vZmZzZXQoXFx1MDAyNnBnZCwgaHZhKSk7XFxuK1xcdHA0ZHAgPSBwNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgaHZhKTtcXG4rXFx0cDRkID0gcDRkcF9nZXQocDRkcCk7XFxuIFxcdGlmIChwNGRfbm9uZShwNGQpIHx8ICFwNGRfcHJlc2VudChwNGQpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZF9vZmZzZXQoXFx1MDAyNnA0ZCwgaHZhKSk7XFxuK1xcdHB1ZHAgPSBwdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZHAsIHA0ZCwgaHZhKTtcXG4rXFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XFxuIFxcdGlmIChwdWRfbm9uZShwdWQpIHx8ICFwdWRfcHJlc2VudChwdWQpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTM5OCw3ICs0MDEsOCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHBtZCA9IHBtZHBfZ2V0KHBtZF9vZmZzZXQoXFx1MDAyNnB1ZCwgaHZhKSk7XFxuK1xcdHBtZHAgPSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgaHZhKTtcXG4rXFx0cG1kID0gcG1kcF9nZXQocG1kcCk7XFxuIFxcdGlmIChwbWRfbm9uZShwbWQpIHx8ICFwbWRfcHJlc2VudChwbWQpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbW0vZmF1bHQuYyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuY1xcbmluZGV4IDA0ZWQ2ZjhhY2FlNGZkLi5iMmJjYWYxMGQxM2YxZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcXG5AQCAtMTY3LDE0ICsxNjcsMTYgQEAgYmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY29kZSxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuLVxcdHBnZF90ICpwZ2QsICpwZ2RfaztcXG4tXFx0cHVkX3QgKnB1ZF9rO1xcbi1cXHRwNGRfdCAqcDRkX2s7XFxuLVxcdHBtZF90ICpwbWRfaztcXG4tXFx0cHRlX3QgKnB0ZV9rO1xcbitcXHRwZ2RfdCAqcGdkcF9rLCAqcGdkcCwgcGdkX2s7XFxuK1xcdHA0ZF90ICpwNGRwX2ssICpwNGRwO1xcbitcXHRwdWRfdCAqcHVkcF9rLCAqcHVkcCwgcHVkX2s7XFxuK1xcdHBtZF90ICpwbWRwX2ssICpwbWRwLCBwbWRfaztcXG4rXFx0cHRlX3QgKnB0ZXBfaztcXG4gXFx0aW50IGluZGV4O1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4gXFxuK1xcdEJVSUxEX0JVR19PTihDT05GSUdfUEdUQUJMRV9MRVZFTFMgIT0gNSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgIT0gMik7XFxuK1xcbiBcXHQvKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YgKi9cXG4gXFx0aWYgKHVzZXJfbW9kZShyZWdzKSlcXG4gXFx0XFx0cmV0dXJuIGRvX3RyYXAocmVncywgU0lHU0VHViwgY29kZSwgYWRkcik7XFxuQEAgLTE4OSwzOSArMTkxLDUxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhXFxuIFxcdCAqL1xcbiBcXHRpbmRleCA9IHBnZF9pbmRleChhZGRyKTtcXG4gXFx0cGZuID0gY3NyX3JlYWQoQ1NSX1NBVFApIFxcdTAwMjYgU0FUUF9QUE47XFxuLVxcdHBnZCA9IChwZ2RfdCAqKXBmbl90b192aXJ0KHBmbikgKyBpbmRleDtcXG4tXFx0cGdkX2sgPSBpbml0X21tLnBnZCArIGluZGV4O1xcbiBcXG4tXFx0aWYgKCFwZ2RfcHJlc2VudChwZ2RwX2dldChwZ2RfaykpKSB7XFxuK1xcdHBnZHAgPSAocGdkX3QgKilwZm5fdG9fdmlydChwZm4pICsgaW5kZXg7XFxuK1xcdHBnZHBfayA9IGluaXRfbW0ucGdkICsgaW5kZXg7XFxuK1xcbitcXHRwZ2RfayA9IHBnZHBfZ2V0KHBnZHBfayk7XFxuK1xcdGlmICghcGdkX3ByZXNlbnQocGdkX2spKSB7XFxuIFxcdFxcdG5vX2NvbnRleHQocmVncywgYWRkcik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRzZXRfcGdkKHBnZCwgcGdkcF9nZXQocGdkX2spKTtcXG4rXFx0aWYgKENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSA1KVxcbitcXHRcXHRzZXRfcGdkKHBnZHAsIHBnZF9rKTtcXG4gXFxuLVxcdHA0ZF9rID0gcDRkX29mZnNldChwZ2RfaywgYWRkcik7XFxuLVxcdGlmICghcDRkX3ByZXNlbnQocDRkcF9nZXQocDRkX2spKSkge1xcbitcXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcXG4rXFx0cDRkcF9rID0gcDRkX29mZnNldChwZ2RwX2ssIGFkZHIpO1xcbitcXHRpZiAoIXA0ZF9wcmVzZW50KHA0ZHBfZ2V0KHA0ZHBfaykpKSB7XFxuIFxcdFxcdG5vX2NvbnRleHQocmVncywgYWRkcik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0cHVkX2sgPSBwdWRfb2Zmc2V0KHA0ZF9rLCBhZGRyKTtcXG4tXFx0aWYgKCFwdWRfcHJlc2VudChwdWRwX2dldChwdWRfaykpKSB7XFxuK1xcdHB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xcbitcXHRwdWRwX2sgPSBwdWRfb2Zmc2V0KHA0ZHBfaywgYWRkcik7XFxuK1xcbitcXHRwdWRfayA9IHB1ZHBfZ2V0KHB1ZHBfayk7XFxuK1xcdGlmICghcHVkX3ByZXNlbnQocHVkX2spKSB7XFxuIFxcdFxcdG5vX2NvbnRleHQocmVncywgYWRkcik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRpZiAocHVkX2xlYWYocHVkcF9nZXQocHVkX2spKSlcXG4rXFx0aWYgKHB1ZF9sZWFmKHB1ZF9rKSlcXG4gXFx0XFx0Z290byBmbHVzaF90bGI7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTaW5jZSB0aGUgdm1hbGxvYyBhcmVhIGlzIGdsb2JhbCwgaXQgaXMgdW5uZWNlc3NhcnlcXG4gXFx0ICogdG8gY29weSBpbmRpdmlkdWFsIFBURXNcXG4gXFx0ICovXFxuLVxcdHBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcik7XFxuLVxcdGlmICghcG1kX3ByZXNlbnQocG1kcF9nZXQocG1kX2spKSkge1xcbitcXHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcXG4rXFx0cG1kcF9rID0gcG1kX29mZnNldChwdWRwX2ssIGFkZHIpO1xcbitcXG4rXFx0cG1kX2sgPSBwbWRwX2dldChwbWRwX2spO1xcbitcXHRpZiAoIXBtZF9wcmVzZW50KHBtZF9rKSkge1xcbiBcXHRcXHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4tXFx0aWYgKHBtZF9sZWFmKHBtZHBfZ2V0KHBtZF9rKSkpXFxuK1xcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMilcXG4rXFx0XFx0c2V0X3BtZChwbWRwLCBwbWRfayk7XFxuK1xcdGlmIChwbWRfbGVhZihwbWRfaykpXFxuIFxcdFxcdGdvdG8gZmx1c2hfdGxiO1xcbiBcXG4gXFx0LypcXG5AQCAtMjMwLDggKzI0NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhXFxuIFxcdCAqIGFkZHJlc3Nlcy4gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhpcyB3aWxsIGp1c3RcXG4gXFx0ICogc2lsZW50bHkgbG9vcCBmb3JldmVyLlxcbiBcXHQgKi9cXG4tXFx0cHRlX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfaywgYWRkcik7XFxuLVxcdGlmICghcHRlX3ByZXNlbnQocHRlcF9nZXQocHRlX2spKSkge1xcbitcXHRwdGVwX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwX2ssIGFkZHIpO1xcbitcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZXBfZ2V0KHB0ZXBfaykpKSB7XFxuIFxcdFxcdG5vX2NvbnRleHQocmVncywgYWRkcik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYyBiL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXFxuaW5kZXggMmFmYTdhMjMzNDBlOTIuLjRlNTQ1OTg4OTUzYTBiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXFxuKysrIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAgKi9cXG4gc3RydWN0IHBnX3N0YXRlIHtcXG4gXFx0c3RydWN0IHB0ZHVtcF9zdGF0ZSBwdGR1bXA7XFxuK1xcdGludCBmaXJzdF9sZXZlbDtcXG4gXFx0aW50IGxldmVsO1xcbiBcXHRwZ3Byb3R2YWxfdCBjdXJyZW50X3Byb3Q7XFxuIFxcdHBncHJvdHZhbF90IGVmZmVjdGl2ZV9wcm90O1xcbkBAIC0yNTQsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIGludCBsZXZlbCwgdTY0IHZhbClcXG4gXFx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcXHUwMDI2IFBURV9GTEFHU19NQVNLO1xcbiBcXHRwZ3Byb3R2YWxfdCBlZmZlY3RpdmU7XFxuIFxcbi1cXHRpZiAobGV2ZWwgXFx1MDAzZSAwKSB7XFxuK1xcdGlmIChsZXZlbCBcXHUwMDNlIHN0LVxcdTAwM2VmaXJzdF9sZXZlbCkge1xcbiBcXHRcXHRwZ3Byb3R2YWxfdCBoaWdoZXJfcHJvdCA9IHN0LVxcdTAwM2Vwcm90X2xldmVsc1tsZXZlbCAtIDFdO1xcbiBcXG4gXFx0XFx0ZWZmZWN0aXZlID0gKGhpZ2hlcl9wcm90IFxcdTAwMjYgcHJvdCBcXHUwMDI2IChfUEFHRV9VU0VSIHwgX1BBR0VfUlcpKSB8XFxuQEAgLTQ1NSw2ICs0NTYsOCBAQCBib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0LnNlcVxcdFxcdD0gbVxcbiBcXHR9O1xcbiBcXG4rXFx0c3QuZmlyc3RfbGV2ZWwgPSBwdGR1bXBfcHRfbGV2ZWxfZmlyc3QobW0pO1xcbitcXG4gXFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIG1tLCBwZ2QpO1xcbiBcXG4gXFx0aWYgKCFjaGVja3d4KVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbmluZGV4IDA3ODY4OWFhNzIwNmY4Li45MWIzM2EyNjVhNDMxZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuKysrIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbkBAIC0xMzQ2LDcgKzEzNDYsNyBAQCBzdGF0aWMgaW50IGNvbGxhcHNlX3B1ZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0cG1kX3QgKnBtZCwgZmlyc3Q7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKCFkaXJlY3RfZ2JwYWdlcylcXG4rXFx0aWYgKENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSAyIHx8ICFkaXJlY3RfZ2JwYWdlcylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRhZGRyIFxcdTAwMjY9IFBVRF9NQVNLO1xcbkBAIC0xNzMwLDcgKzE3MzAsOCBAQCBzdGF0aWMgaW50IHBvcHVsYXRlX3B1ZChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgcDRkX3QgKnA0ZCxcXG4gXFx0LypcXG4gXFx0ICogTWFwIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgZnJvbSB0aGUgR2IgYm91bmRhcnksIHBvc3NpYmx5IHdpdGggMUcgcGFnZXNcXG4gXFx0ICovXFxuLVxcdHdoaWxlIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfR0JQQUdFUykgXFx1MDAyNlxcdTAwMjYgZW5kIC0gc3RhcnQgXFx1MDAzZT0gUFVEX1NJWkUpIHtcXG4rXFx0d2hpbGUgKENPTkZJR19QR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDMgXFx1MDAyNlxcdTAwMjYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0dCUEFHRVMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBlbmQgLSBzdGFydCBcXHUwMDNlPSBQVURfU0laRSkge1xcbiBcXHRcXHRzZXRfcHVkKHB1ZCwgcHVkX21raHVnZShwZm5fcHVkKGNwYS1cXHUwMDNlcGZuLFxcbiBcXHRcXHRcXHRcXHQgICBjYW5vbl9wZ3Byb3QocHVkX3BncHJvdCkpKSk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcXG5pbmRleCBmMzJmYWNkYjMwMzU0My4uZWRhZDg0N2EyZWNkYjggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jXFxuKysrIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXFxuQEAgLTQxMSw2ICs0MTEsNyBAQCBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRyZXR1cm4gY2hhbmdlZDtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuIGludCBwdWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFx0XFx0XFx0ICBwdWRfdCAqcHVkcCwgcHVkX3QgZW50cnksIGludCBkaXJ0eSlcXG4ge1xcbkBAIC00MzAsNiArNDMxLDcgQEAgaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXG4gXFx0cmV0dXJuIGNoYW5nZWQ7XFxuIH1cXG4rI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxuICNlbmRpZlxcbiBcXG4gYm9vbCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wNGQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oXFxuaW5kZXggODljMjFmODRjZmZiZTIuLjE5ZjVhNmVkYTc2Y2MxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oXFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmhcXG5AQCAtMjIsMjYgKzIyLDYxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBnZF9ub25lKHBnZF90IHBnZClcXHRcXHR7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKVxcdFxcdHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKVxcdHsgcmV0dXJuIDE7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqcGdkKVxcdHsgfVxcbitzdGF0aWMgaW5saW5lIGJvb2wgcGdkX2xlYWYocGdkX3QgcGdkKVxcdFxcdHsgcmV0dXJuIGZhbHNlOyB9XFxuKyNkZWZpbmUgcGdkX2xlYWYgcGdkX2xlYWZcXG4gI2RlZmluZSBwNGRfRVJST1IocDRkKVxcdFxcdFxcdFxcdChwZ2RfRVJST1IoKHA0ZCkucGdkKSlcXG4gXFxuICNkZWZpbmUgcGdkX3BvcHVsYXRlKG1tLCBwZ2QsIHA0ZClcXHRcXHRkbyB7IH0gd2hpbGUgKDApXFxuICNkZWZpbmUgcGdkX3BvcHVsYXRlX3NhZmUobW0sIHBnZCwgcDRkKVxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4tLypcXG4tICogKHA0ZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsXFxuLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pXFxuLSAqL1xcbi0jZGVmaW5lIHNldF9wZ2QocGdkcHRyLCBwZ2R2YWwpXFx0c2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KVxcbiBcXG4tc3RhdGljIGlubGluZSBwNGRfdCAqcDRkX29mZnNldChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuKyNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwZ2RfY2hlY2tfZHVtbXkocGdkdmFsKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHNldF9wNGQoKHA0ZF90ICopKHBnZHB0ciksIChwNGRfdCkgeyBwZ2R2YWwgfSk7XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwZ2RfdCBwZ2RwX2dldChwZ2RfdCAqcDRkcClcXG4ge1xcbi1cXHRyZXR1cm4gKHA0ZF90ICopcGdkO1xcbitcXHRwZ2RfdCBkdW1teSA9IHsgMCB9O1xcbitcXG4rXFx0cmV0dXJuIGR1bW15O1xcbiB9XFxuKyNkZWZpbmUgcGdkcF9nZXQgcGdkcF9nZXRcXG4rXFxuKyNkZWZpbmUgcGdkX2NoZWNrX2R1bW15KHBnZCkgQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHBnZF92YWwocGdkKSkpXFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHA0ZF90ICpfX3A0ZF9vZmZzZXQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4re1xcbitcXHRyZXR1cm4gKHA0ZF90ICopcGdkcDtcXG4rfVxcbitcXG4rI2RlZmluZSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cGdkX2NoZWNrX2R1bW15KCoocGdkcCkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19wNGRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSlcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcDRkX3QgKl9fcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuK3tcXG4rXFx0cmV0dXJuIChwNGRfdCAqKXBnZHA7XFxuK31cXG4rXFxuKyNkZWZpbmUgcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGFkZHJlc3MpXFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cGdkX2NoZWNrX2R1bW15KCoocGdkcCkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19wNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgYWRkcmVzcyk7XFx0XFx0XFx0XFxcXFxcbit9KVxcbiBcXG4gI2RlZmluZSBwNGRfdmFsKHgpXFx0XFx0XFx0XFx0KHBnZF92YWwoKHgpLnBnZCkpXFxuICNkZWZpbmUgX19wNGQoeClcXHRcXHRcXHRcXHQoKHA0ZF90KSB7IF9fcGdkKHgpIH0pXFxuIFxcbi0jZGVmaW5lIHBnZF9wYWdlKHBnZClcXHRcXHRcXHRcXHQocDRkX3BhZ2UoKHA0ZF90KXsgcGdkIH0pKVxcbi0jZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZClcXHRcXHRcXHQoKHVuc2lnbmVkIGxvbmcpKHA0ZF9wZ3RhYmxlKChwNGRfdCl7IHBnZCB9KSkpXFxuKyNkZWZpbmUgcGdkX3BhZ2UocGdkKVxcdFxcdFxcdFxcdCh7IEJVSUxEX0JVRygpOyAoc3RydWN0IHBhZ2UgKilOVUxMOyB9KVxcbisjZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7IFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cGdkX2NoZWNrX2R1bW15KHBnZCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQodW5zaWduZWQgbG9uZylwNGRfcGd0YWJsZSgocDRkX3QpIHsgcGdkIH0pO1xcdFxcdFxcdFxcXFxcXG4rfSlcXG4gXFxuIC8qXFxuICAqIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwNGQgaXMgdHJpdmlhbDogdGhlIDEtZW50cnkgcDRkIGlzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmhcXG5pbmRleCAzNmI2NDkwZWQxODA4MS4uNjE4NTJlYjRiMTUwNGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmhcXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaFxcbkBAIC0zMSwyOSArMzEsNjEgQEAgc3RhdGljIGlubGluZSBpbnQgcHVkX25vbmUocHVkX3QgcHVkKVxcdFxcdHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcHVkX2JhZChwdWRfdCBwdWQpXFx0XFx0eyByZXR1cm4gMDsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBwdWRfcHJlc2VudChwdWRfdCBwdWQpXFx0eyByZXR1cm4gMTsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBwdWRfdXNlcihwdWRfdCBwdWQpXFx0XFx0eyByZXR1cm4gMDsgfVxcbi1zdGF0aWMgaW5saW5lIGludCBwdWRfbGVhZihwdWRfdCBwdWQpXFx0XFx0eyByZXR1cm4gMDsgfVxcbitzdGF0aWMgaW5saW5lIGJvb2wgcHVkX2xlYWYocHVkX3QgcHVkKVxcdFxcdHsgcmV0dXJuIGZhbHNlOyB9XFxuKyNkZWZpbmUgcHVkX2xlYWYgcHVkX2xlYWZcXG4gc3RhdGljIGlubGluZSB2b2lkIHB1ZF9jbGVhcihwdWRfdCAqcHVkKVxcdHsgfVxcbiAjZGVmaW5lIHBtZF9FUlJPUihwbWQpXFx0XFx0XFx0XFx0KHB1ZF9FUlJPUigocG1kKS5wdWQpKVxcbiBcXG4gI2RlZmluZSBwdWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKVxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4gXFxuLS8qXFxuLSAqIChwbWRzIGFyZSBmb2xkZWQgaW50byBwdWRzIHNvIHRoaXMgZG9lc24ndCBnZXQgYWN0dWFsbHkgY2FsbGVkLFxcbi0gKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKVxcbi0gKi9cXG4tI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKVxcdFxcdFxcdHNldF9wbWQoKHBtZF90ICopKHB1ZHB0ciksIChwbWRfdCkgeyBwdWR2YWwgfSlcXG4rI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHB1ZF9jaGVja19kdW1teShwdWR2YWwpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0c2V0X3BtZCgocG1kX3QgKikocHVkcHRyKSwgKHBtZF90KSB7IHB1ZHZhbCB9KTtcXHRcXHRcXHRcXFxcXFxuK30pXFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHB1ZF90IHB1ZHBfZ2V0KHB1ZF90ICpwdWRwKVxcbit7XFxuK1xcdHB1ZF90IGR1bW15ID0geyAwIH07XFxuK1xcbitcXHRyZXR1cm4gZHVtbXk7XFxuK31cXG4rI2RlZmluZSBwdWRwX2dldCBwdWRwX2dldFxcbiBcXG4tc3RhdGljIGlubGluZSBwbWRfdCAqIHBtZF9vZmZzZXQocHVkX3QgKiBwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4rI2RlZmluZSBwdWRfY2hlY2tfZHVtbXkocHVkKSBCVUlMRF9CVUdfT04oX19idWlsdGluX2NvbnN0YW50X3AocHVkX3ZhbChwdWQpKSlcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcG1kX3QgKl9fcG1kX29mZnNldChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbit7XFxuK1xcdHJldHVybiAocG1kX3QgKilwdWRwO1xcbit9XFxuK1xcbisjZGVmaW5lIHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcylcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3BtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwbWRfdCAqX19wbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4ge1xcbi1cXHRyZXR1cm4gKHBtZF90ICopcHVkO1xcbitcXHRyZXR1cm4gKHBtZF90ICopcHVkcDtcXG4gfVxcbi0jZGVmaW5lIHBtZF9vZmZzZXQgcG1kX29mZnNldFxcbitcXG4rI2RlZmluZSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgYWRkcmVzcylcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3BtZF9vZmZzZXRfbG9ja2xlc3MocHVkcCwgcHVkLCBhZGRyZXNzKTtcXHRcXHRcXHRcXFxcXFxuK30pXFxuIFxcbiAjZGVmaW5lIHBtZF92YWwoeClcXHRcXHRcXHRcXHQocHVkX3ZhbCgoeCkucHVkKSlcXG4gI2RlZmluZSBfX3BtZCh4KVxcdFxcdFxcdFxcdCgocG1kX3QpIHsgX19wdWQoeCkgfSApXFxuIFxcbi0jZGVmaW5lIHB1ZF9wYWdlKHB1ZClcXHRcXHRcXHRcXHQocG1kX3BhZ2UoKHBtZF90KXsgcHVkIH0pKVxcbi0jZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZClcXHRcXHRcXHQoKHBtZF90ICopKHBtZF9wYWdlX3ZhZGRyKChwbWRfdCl7IHB1ZCB9KSkpXFxuKyNkZWZpbmUgcHVkX3BhZ2UocHVkKVxcdFxcdFxcdFxcdCh7IEJVSUxEX0JVRygpOyAoc3RydWN0IHBhZ2UgKilOVUxMOyB9KVxcbisjZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwdWRfY2hlY2tfZHVtbXkocHVkKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgocG1kX3QgKikocG1kX3BhZ2VfdmFkZHIoKHBtZF90KSB7IHB1ZCB9KSkpO1xcdFxcdFxcdFxcXFxcXG4rfSlcXG4gXFxuIC8qXFxuICAqIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwbWQgaXMgdHJpdmlhbDogdGhlIDEtZW50cnkgcG1kIGlzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmhcXG5pbmRleCAzNTZjYmZiYWFiMjQ3Ni4uNWVlOGYxODUyY2Q4YzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmhcXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaFxcbkBAIC0yOSwyNyArMjksNjIgQEAgc3RhdGljIGlubGluZSBpbnQgcDRkX25vbmUocDRkX3QgcDRkKVxcdFxcdHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcDRkX2JhZChwNGRfdCBwNGQpXFx0XFx0eyByZXR1cm4gMDsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBwNGRfcHJlc2VudChwNGRfdCBwNGQpXFx0eyByZXR1cm4gMTsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcDRkX2NsZWFyKHA0ZF90ICpwNGQpXFx0eyB9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwNGRfbGVhZihwNGRfdCBwNGQpXFx0XFx0eyByZXR1cm4gZmFsc2U7IH1cXG4rI2RlZmluZSBwNGRfbGVhZiBwNGRfbGVhZlxcbiAjZGVmaW5lIHB1ZF9FUlJPUihwdWQpXFx0XFx0XFx0XFx0KHA0ZF9FUlJPUigocHVkKS5wNGQpKVxcbiBcXG4gI2RlZmluZSBwNGRfcG9wdWxhdGUobW0sIHA0ZCwgcHVkKVxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4gI2RlZmluZSBwNGRfcG9wdWxhdGVfc2FmZShtbSwgcDRkLCBwdWQpXFx0XFx0ZG8geyB9IHdoaWxlICgwKVxcbi0vKlxcbi0gKiAocHVkcyBhcmUgZm9sZGVkIGludG8gcDRkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCxcXG4tICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLilcXG4tICovXFxuLSNkZWZpbmUgc2V0X3A0ZChwNGRwdHIsIHA0ZHZhbClcXHRzZXRfcHVkKChwdWRfdCAqKShwNGRwdHIpLCAocHVkX3QpIHsgcDRkdmFsIH0pXFxuIFxcbi1zdGF0aWMgaW5saW5lIHB1ZF90ICpwdWRfb2Zmc2V0KHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4rI2RlZmluZSBzZXRfcDRkKHA0ZHB0ciwgcDRkdmFsKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHA0ZF9jaGVja19kdW1teShwNGR2YWwpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0c2V0X3B1ZCgocHVkX3QgKikocDRkcHRyKSwgKHB1ZF90KSB7IHA0ZHZhbCB9KTtcXHRcXHRcXHRcXFxcXFxuK30pXFxuK1xcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCBwNGRwX2dldChwNGRfdCAqcDRkcClcXG4re1xcbitcXHRwNGRfdCBkdW1teSA9IHsgMCB9O1xcbitcXG4rXFx0cmV0dXJuIGR1bW15O1xcbit9XFxuKyNkZWZpbmUgcDRkcF9nZXQgcDRkcF9nZXRcXG4rXFxuKyNkZWZpbmUgcDRkX2NoZWNrX2R1bW15KHA0ZCkgQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHA0ZF92YWwocDRkKSkpXFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHB1ZF90ICpfX3B1ZF9vZmZzZXQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4ge1xcbi1cXHRyZXR1cm4gKHB1ZF90ICopcDRkO1xcbitcXHRyZXR1cm4gKHB1ZF90ICopcDRkcDtcXG4gfVxcbi0jZGVmaW5lIHB1ZF9vZmZzZXQgcHVkX29mZnNldFxcbitcXG4rI2RlZmluZSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHJlc3MpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19wdWRfb2Zmc2V0KHA0ZHAsIGFkZHJlc3MpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSlcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcHVkX3QgKl9fcHVkX29mZnNldF9sb2NrbGVzcyhwNGRfdCAqcDRkcCwgcDRkX3QgcDRkLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuK3tcXG4rXFx0cmV0dXJuIChwdWRfdCAqKXA0ZHA7XFxuK31cXG4rXFxuKyNkZWZpbmUgcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGFkZHJlc3MpXFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19wdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZHAsIHA0ZCwgYWRkcmVzcyk7XFx0XFx0XFx0XFxcXFxcbit9KVxcbiBcXG4gI2RlZmluZSBwdWRfdmFsKHgpXFx0XFx0XFx0XFx0KHA0ZF92YWwoKHgpLnA0ZCkpXFxuICNkZWZpbmUgX19wdWQoeClcXHRcXHRcXHRcXHQoKHB1ZF90KSB7IF9fcDRkKHgpIH0pXFxuIFxcbi0jZGVmaW5lIHA0ZF9wYWdlKHA0ZClcXHRcXHRcXHRcXHQocHVkX3BhZ2UoKHB1ZF90KXsgcDRkIH0pKVxcbi0jZGVmaW5lIHA0ZF9wZ3RhYmxlKHA0ZClcXHRcXHRcXHQoKHB1ZF90ICopKHB1ZF9wZ3RhYmxlKChwdWRfdCl7IHA0ZCB9KSkpXFxuKyNkZWZpbmUgcDRkX3BhZ2UocDRkKVxcdFxcdFxcdFxcdCh7IEJVSUxEX0JVRygpOyAoc3RydWN0IHBhZ2UgKilOVUxMOyB9KVxcbisjZGVmaW5lIHA0ZF9wZ3RhYmxlKHA0ZClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwNGRfY2hlY2tfZHVtbXkocDRkKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgocHVkX3QgKikocHVkX3BndGFibGUoKHB1ZF90KSB7IHA0ZCB9KSkpO1xcdFxcdFxcdFxcXFxcXG4rfSlcXG4gXFxuIC8qXFxuICAqIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwdWQgaXMgdHJpdmlhbDogdGhlIDEtZW50cnkgcHVkIGlzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRkdW1wLmggYi9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oXFxuaW5kZXggMjQwYmQzYmZmMThkZDIuLjI2ZmE2MjRlYWM0NGVmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRkdW1wLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oXFxuQEAgLTI5LDYgKzI5LDcgQEAgYm9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxcbiBcXHRcXHRcXHRcXHRib29sIGNoZWNrd3gsIGJvb2wgZG1lc2cpO1xcbiB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpO1xcbitpbnQgcHRkdW1wX3B0X2xldmVsX2ZpcnN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG4gYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfY2hlY2t3eCh2b2lkKVxcbmRpZmYgLS1naXQgYS9tbS9wdGR1bXAuYyBiL21tL3B0ZHVtcC5jXFxuaW5kZXggNTg1MTA5NmU2ZjY1NmMuLjk2Njc2YzkwNDMwZjE4IDEwMDY0NFxcbi0tLSBhL21tL3B0ZHVtcC5jXFxuKysrIGIvbW0vcHRkdW1wLmNcXG5AQCAtMTk3LDYgKzE5NywxNyBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuIFxcdHN0LVxcdTAwM2Vub3RlX3BhZ2VfZmx1c2goc3QpO1xcbiB9XFxuIFxcbitpbnQgcHRkdW1wX3B0X2xldmVsX2ZpcnN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbit7XFxuK1xcdGlmIChtbV9wbWRfZm9sZGVkKG1tKSlcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcdGlmIChtbV9wdWRfZm9sZGVkKG1tKSlcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcdGlmIChtbV9wNGRfZm9sZGVkKG1tKSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGNoZWNrX3d4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiB7XFxuIFxcdGlmIChwdGR1bXBfY2hlY2tfd3goKSlcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDA2ZTEwM2Y5NzgxZTVkLi4wYzljNGFjODllMDk0YSAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTM3MjcsNyArMzcyNyw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdGlmICghcHVkX3ByZXNlbnQodmFsKSB8fCBXQVJOX09OX09OQ0UocHVkX2xlYWYodmFsKSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0d2Fsa19wbWRfcmFuZ2UoXFx1MDAyNnZhbCwgYWRkciwgbmV4dCwgYXJncyk7XFxuK1xcdFxcdHdhbGtfcG1kX3JhbmdlKHB1ZCArIGksIGFkZHIsIG5leHQsIGFyZ3MpO1xcbiBcXG4gXFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpIHx8IHdhbGstXFx1MDAzZWJhdGNoZWQgXFx1MDAzZT0gTUFYX0xSVV9CQVRDSCkge1xcbiBcXHRcXHRcXHRlbmQgPSAoYWRkciB8IH5QVURfTUFTSykgKyAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNToxMi40OTI1NDQyMjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzI5OTY0MzU5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiS1ZNXCIsXG4gICAgXCJQVERVTVBfREVCVUdGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3YWxrX3B1ZF9yYW5nZVwiLFxuICAgIFwiZ2V0X2h2YV9tYXBwaW5nX3NpemVcIixcbiAgICBcImhvc3RfcGZuX21hcHBpbmdfbGV2ZWxcIixcbiAgICBcImNvbGxhcHNlX3B1ZF9wYWdlXCIsXG4gICAgXCJwb3B1bGF0ZV9wdWRcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlXCIsXG4gICAgXCJwdWRwX3NldF9hY2Nlc3NfZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHRhYmxlIGZvbGRpbmcgbWFjcm9zIGFuZCBmdW5jdGlvbnMgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKEFSTSwgQVJNNjQsIExvb25nQXJjaCwgTUlQUywgT3BlblJJU0MsIFJJU0MtViwgeDg2KSBhbmQgZ2VuZXJpYyBoZWFkZXJzLiBJdCBmaXhlcyBob3cgZm9sZGVkIHBhZ2UgdGFibGVzIGFyZSB3YWxrZWQgYW5kIGFjY2Vzc2VkLCB3aGljaCBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBUaGUgY2hhbmdlcyBhZmZlY3QgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIE1HTFJVIHBhZ2UgdGFibGUgd2Fsa2VycywgUEFUIG1lbW9yeSBzZXR0aW5nLCBhbmQgcGFnZSB0YWJsZSBkdW1waW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gcGFnZSB0YWJsZSB0cmF2ZXJzYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjFjNDQ2OThhYTk4MzVkNzVlNTMwNmNlNDE1YzQwMzBkMDMzZWY1YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE3OjM1OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oXG5pbmRleCBlNzQ0MTVjOTU5YmVhYy4uODg2NTliMzhlMjM2NDkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmhcbisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2Utbm9tbXUuaFxuQEAgLTE4LDEyICsxOCwxMiBAQFxuICAqL1xuIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfdDtcbiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG1kX3Q7XG4tdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBnZF90WzJdO1xuK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdDtcbiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7XG4gXG4gI2RlZmluZSBwdGVfdmFsKHgpICAgICAgKHgpXG4gI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKHgpXG4tI2RlZmluZSBwZ2RfdmFsKHgpXHQoKHgpWzBdKVxuKyNkZWZpbmUgcGdkX3ZhbCh4KSAgICAgICh4KVxuICNkZWZpbmUgcGdwcm90X3ZhbCh4KSAgICh4KVxuIFxuICNkZWZpbmUgX19wdGUoeCkgICAgICAgICh4KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLXR5cGVzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oXG5pbmRleCA2NTBlNzkzZjQxNDI5Zi4uN2Y4NTM4NGFjMzg2Y2EgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oXG4rKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oXG5AQCAtMjUsNyArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCB7IHB0ZXZhbF90IHBncHJvdDsgfSBwZ3Byb3RfdDtcbiBcbiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoKHgpLnB0ZSlcbiAjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoKHgpLnBtZClcbi0jZGVmaW5lIHBnZF92YWwoeClcdCgoeCkucGdkWzBdKVxuKyNkZWZpbmUgcGdkX3ZhbCh4KSAgICAgICgoeCkucGdkWzBdKVxuICNkZWZpbmUgcGdwcm90X3ZhbCh4KSAgICgoeCkucGdwcm90KVxuIFxuICNkZWZpbmUgX19wdGUoeCkgICAgICAgICgocHRlX3QpIHsgKHgpIH0gKVxuQEAgLTM2LDE0ICszNiwzMiBAQCB0eXBlZGVmIHN0cnVjdCB7IHB0ZXZhbF90IHBncHJvdDsgfSBwZ3Byb3RfdDtcbiAvKlxuICAqIC4uIHdoaWxlIHRoZXNlIG1ha2UgaXQgZWFzaWVyIG9uIHRoZSBjb21waWxlclxuICAqL1xuK3R5cGVkZWYgdTY0IHBnZHZhbF90O1xuK1xuIHR5cGVkZWYgcHRldmFsX3QgcHRlX3Q7XG4gdHlwZWRlZiBwbWR2YWxfdCBwbWRfdDtcbi10eXBlZGVmIHBtZHZhbF90IHBnZF90WzJdO1xuK3R5cGVkZWYgcGdkdmFsX3QgcGdkX3Q7XG4gdHlwZWRlZiBwdGV2YWxfdCBwZ3Byb3RfdDtcbiBcbiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoeClcbiAjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoeClcbi0jZGVmaW5lIHBnZF92YWwoeClcdCgoeClbMF0pXG4rXG4rc3RhdGljIGlubGluZSBwbWR2YWxfdCBwZ2RfdmFsKHBnZF90IHBnZClcbit7XG4rXHQvKlxuK1x0ICogVGhlIGxvd2VyIGFuZCBoaWdoZXIgcG1kdmFsX3QgdmFsdWVzIHBvaW50IHRvIHRoZSBzYW1lIHBhZ2UuXG4rXHQgKiB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZWlyIG9mZnNldCB3aXRoaW4gdGhhdCBwYWdlLlxuK1x0ICogVGhlcmVmb3JlLCB3aGljaGV2ZXIgdmFsdWUgaXMgcmV0dXJuZWQsIHRoZSBiZWhhdmlvciBvZiBwbWRfcGZuKCksXG4rXHQgKiBwbWRfcGFnZSgpLCBhbmQgb3RoZXIgdXNlcnMgb2YgcGdkX3ZhbCgpIHJlbWFpbnMgdW5jaGFuZ2VkLlxuK1x0ICpcbitcdCAqIEhvd2V2ZXIsIHBnZF92YWwoKSBoYXMgaGlzdG9yaWNhbGx5IHJldHVybmVkIHRoZSBsb3dlciBwbWR2YWxfdCwgc29cbitcdCAqIGtlZXAgcmV0dXJuaW5nIHRoZSBsb3dlciBvbmUuXG4rXHQgKlxuK1x0ICogU2VlIHRoZSBjb21tZW50cyBpbiBpbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5cbitcdCAqL1xuK1x0cmV0dXJuICgqKHBtZHZhbF90ICgqKVsyXSlcdTAwMjZwZ2QpWzBdO1xuK31cbitcbiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoeClcbiBcbiAjZGVmaW5lIF9fcHRlKHgpICAgICAgICAoeClcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDk4Mjc5NWNmNDU2MzdlLi5lYWRkMDI3ZmUwZWU0MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTQxLDggKzE0MSw2IEBAIGV4dGVybiBwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXG4gZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07XG4gXG4tI2RlZmluZSBwZ2RwX2dldChwZ3BkKVx0XHRSRUFEX09OQ0UoKnBnZHApXG4tXG4gI2RlZmluZSBwdWRfcGFnZShwdWQpXHRcdHBtZF9wYWdlKF9fcG1kKHB1ZF92YWwocHVkKSkpXG4gI2RlZmluZSBwdWRfd3JpdGUocHVkKVx0XHRwbWRfd3JpdGUoX19wbWQocHVkX3ZhbChwdWQpKSlcbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBhMjY4MWQ3NTUzNTg0MS4uYWFhZTNkMTQ4OTVmNjkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0xNDAsMTAgKzE0MCwxNyBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpXG4gI2RlZmluZSBwdGVfbm9uZShwdGUpXHRcdCghcHRlX3ZhbChwdGUpKVxuICNkZWZpbmUgcHRlX3BhZ2UocHRlKVx0XHQocGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKSlcbiBcbisjZGVmaW5lIHB0ZV92YWxpZChwdGUpXHRcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9WQUxJRCkpXG4rI2RlZmluZSBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkgXFxcbitcdCgocHRlX3ZhbChwdGUpIFx1MDAyNiAoUFRFX1ZBTElEIHwgUFRFX1BSRVNFTlRfSU5WQUxJRCkpID09IFBURV9QUkVTRU5UX0lOVkFMSUQpXG4rXG4gLypcbiAgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpLiBVbmRlZmluZWQgYmVoYXZpb3VyIG90aGVyd2lzZS5cbiAgKi9cbi0jZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSlcdChwdGVfdmFsaWQocHRlKSB8fCBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkpXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSlcbit7XG4rXHRyZXR1cm4gcHRlX3ZhbGlkKHB0ZSkgfHwgcHRlX3ByZXNlbnRfaW52YWxpZChwdGUpO1xuK31cbiAjZGVmaW5lIHB0ZV95b3VuZyhwdGUpXHRcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9BRikpXG4gI2RlZmluZSBwdGVfc3BlY2lhbChwdGUpXHQoISEocHRlX3ZhbChwdGUpIFx1MDAyNiBQVEVfU1BFQ0lBTCkpXG4gI2RlZmluZSBwdGVfd3JpdGUocHRlKVx0XHQoISEocHRlX3ZhbChwdGUpIFx1MDAyNiBQVEVfV1JJVEUpKVxuQEAgLTE2OCw5ICsxNzUsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpXG4gI2RlZmluZSBwdGVfc3dfZGlydHkocHRlKVx0KCEhKHB0ZV92YWwocHRlKSBcdTAwMjYgUFRFX0RJUlRZKSlcbiAjZGVmaW5lIHB0ZV9kaXJ0eShwdGUpXHRcdChwdGVfc3dfZGlydHkocHRlKSB8fCBwdGVfaHdfZGlydHkocHRlKSlcbiBcbi0jZGVmaW5lIHB0ZV92YWxpZChwdGUpXHRcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9WQUxJRCkpXG4tI2RlZmluZSBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkgXFxcbi1cdCgocHRlX3ZhbChwdGUpIFx1MDAyNiAoUFRFX1ZBTElEIHwgUFRFX1BSRVNFTlRfSU5WQUxJRCkpID09IFBURV9QUkVTRU5UX0lOVkFMSUQpXG4gLypcbiAgKiBFeGVjdXRlLW9ubHkgdXNlciBtYXBwaW5ncyBkbyBub3QgaGF2ZSB0aGUgUFRFX1VTRVIgYml0IHNldC4gQWxsIHZhbGlkXG4gICoga2VybmVsIG1hcHBpbmdzIGhhdmUgdGhlIFBURV9VWE4gYml0IHNldC5cbkBAIC0xMTg4LDI5ICsxMTkyLDYgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbDVfZW5hYmxlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuICNkZWZpbmUgcDRkX2NsZWFyX2ZpeG1hcCgpXG4gXG4gI2RlZmluZSBwNGRfb2Zmc2V0X2tpbWcoZGlyLGFkZHIpXHQoKHA0ZF90ICopZGlyKVxuLVxuLXN0YXRpYyBpbmxpbmVcbi1wNGRfdCAqcDRkX29mZnNldF9sb2NrbGVzc19mb2xkZWQocGdkX3QgKnBnZHAsIHBnZF90IHBnZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qXG4tXHQgKiBXaXRoIHJ1bnRpbWUgZm9sZGluZyBvZiB0aGUgcHVkLCBwdWRfb2Zmc2V0X2xvY2tsZXNzKCkgcGFzc2VzXG4tXHQgKiB0aGUgJ3BnZF90IConIHdlIHJldHVybiBoZXJlIHRvIHA0ZF90b19mb2xkZWRfcHVkKCksIHdoaWNoXG4tXHQgKiB3aWxsIG9mZnNldCB0aGUgcG9pbnRlciBhc3N1bWluZyB0aGF0IGl0IHBvaW50cyBpbnRvXG4tXHQgKiBhIHBhZ2UtdGFibGUgcGFnZS4gSG93ZXZlciwgdGhlIGZhc3QgR1VQIHBhdGggcGFzc2VzIHVzIGFcbi1cdCAqIHBnZF90IGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHNvIHdlIG11c3QgdXNlIHRoZSBvcmlnaW5hbFxuLVx0ICogcG9pbnRlciBpbiAncGdkcCcgdG8gY29uc3RydWN0IHRoZSBwNGQgcG9pbnRlciBpbnN0ZWFkIG9mXG4tXHQgKiB1c2luZyB0aGUgZ2VuZXJpYyBwNGRfb2Zmc2V0X2xvY2tsZXNzKCkgaW1wbGVtZW50YXRpb24uXG4tXHQgKlxuLVx0ICogTm90ZTogcmV1c2luZyB0aGUgb3JpZ2luYWwgcG9pbnRlciBtZWFucyB0aGF0IHdlIG1heVxuLVx0ICogZGVyZWZlcmVuY2UgdGhlIHNhbWUgKGxpdmUpIHBhZ2UtdGFibGUgZW50cnkgbXVsdGlwbGUgdGltZXMuXG4tXHQgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBpdCBpcyBzdGlsbCBvbmx5IGxvYWRlZCBvbmNlIGluIHRoZVxuLVx0ICogY29udGV4dCBvZiBlYWNoIGxldmVsIGFuZCB0aGUgQ1BVIGd1YXJhbnRlZXMgc2FtZS1hZGRyZXNzXG4tXHQgKiByZWFkLWFmdGVyLXJlYWQgb3JkZXJpbmcuXG4tXHQgKi9cbi1cdHJldHVybiBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpO1xuLX1cbi0jZGVmaW5lIHA0ZF9vZmZzZXRfbG9ja2xlc3MgcDRkX29mZnNldF9sb2NrbGVzc19mb2xkZWRcbi1cbiAjZW5kaWYgIC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcdTAwM2UgNCAqL1xuIFxuICNkZWZpbmUgcGdkX0VSUk9SKGUpXHRcXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMTk1MmUzNGJjOGVlMDAuLjQzNGU1YjQ4MzQ2NjRmIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC02MzYsNyArNjM2LDkgQEAgc3RhdGljIGlubGluZSBsb25nIHBtZF9wcm90bm9uZShwbWRfdCBwbWQpXG4gI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUgKi9cbiBcbiAjZGVmaW5lIHBtZF9sZWFmKHBtZClcdFx0KChwbWRfdmFsKHBtZCkgXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXG4rI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVEXG4gI2RlZmluZSBwdWRfbGVhZihwdWQpXHRcdCgocHVkX3ZhbChwdWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuKyNlbmRpZlxuIFxuIC8qXG4gICogV2UgcHJvdmlkZSBvdXIgb3duIGdldF91bm1hcHBlZCBhcmVhIHRvIGNvcGUgd2l0aCB0aGUgdmlydHVhbCBhbGlhc2luZ1xuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY1xuaW5kZXggZTEwNDg5N2FhNTMyODUuLjgzN2I0MGJiNjk0ZjRlIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmNcbkBAIC02NjksMTAgKzY2OSwxMCBAQCBzdGF0aWMgaW50IGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gXHRpbnQgbGV2ZWwgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBodmE7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVx0cGdkX3QgcGdkO1xuLVx0cDRkX3QgcDRkO1xuLVx0cHVkX3QgcHVkO1xuLVx0cG1kX3QgcG1kO1xuK1x0cGdkX3QgKnBnZHAsIHBnZDtcbitcdHA0ZF90ICpwNGRwLCBwNGQ7XG4rXHRwdWRfdCAqcHVkcCwgcHVkO1xuK1x0cG1kX3QgKnBtZHAsIHBtZDtcbiBcbiBcdC8qXG4gXHQgKiBOb3RlLCB1c2luZyB0aGUgYWxyZWFkeS1yZXRyaWV2ZWQgbWVtc2xvdCBhbmQgX19nZm5fdG9faHZhX21lbXNsb3QoKVxuQEAgLTY5OCwxOSArNjk4LDIzIEBAIHN0YXRpYyBpbnQgaG9zdF9wZm5fbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBcdCAqIHZhbHVlKSBhbmQgdGhlbiBwKmRfb2Zmc2V0KCkgd2Fsa3MgaW50byB0aGUgdGFyZ2V0IGh1Z2UgcGFnZSBpbnN0ZWFkXG4gXHQgKiBvZiB0aGUgb2xkIHBhZ2UgdGFibGUgKHNlZXMgdGhlIG5ldyB2YWx1ZSkuXG4gXHQgKi9cbi1cdHBnZCA9IHBnZHBfZ2V0KHBnZF9vZmZzZXQoa3ZtLVx1MDAzZW1tLCBodmEpKTtcbitcdHBnZHAgPSBwZ2Rfb2Zmc2V0KGt2bS1cdTAwM2VtbSwgaHZhKTtcbitcdHBnZCA9IHBnZHBfZ2V0KHBnZHApO1xuIFx0aWYgKHBnZF9ub25lKHBnZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cDRkID0gcDRkcF9nZXQocDRkX29mZnNldChcdTAwMjZwZ2QsIGh2YSkpO1xuK1x0cDRkcCA9IHA0ZF9vZmZzZXRfbG9ja2xlc3MocGdkcCwgcGdkLCBodmEpO1xuK1x0cDRkID0gcDRkcF9nZXQocDRkcCk7XG4gXHRpZiAocDRkX25vbmUocDRkKSB8fCAhcDRkX3ByZXNlbnQocDRkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRwdWQgPSBwdWRwX2dldChwdWRfb2Zmc2V0KFx1MDAyNnA0ZCwgaHZhKSk7XG4rXHRwdWRwID0gcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGh2YSk7XG4rXHRwdWQgPSBwdWRwX2dldChwdWRwKTtcbiBcdGlmIChwdWRfbm9uZShwdWQpIHx8ICFwdWRfcHJlc2VudChwdWQpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHBtZCA9IHBtZHBfZ2V0KHBtZF9vZmZzZXQoXHUwMDI2cHVkLCBodmEpKTtcbitcdHBtZHAgPSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgaHZhKTtcbitcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xuIFx0aWYgKHBtZF9ub25lKHBtZCkgfHwgIXBtZF9wcmVzZW50KHBtZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBmYTdiOTM1Zjk0N2NhMC4uMTUxZjRkMTViZDEyYmYgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtNzQ1LDggKzc0NSwxMCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFxuICNpZmRlZiBfUEFHRV9IVUdFXG4gI2RlZmluZSBwbWRfbGVhZihwbWQpXHQoKHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcbisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcdCgocHVkX3ZhbChwdWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuICNlbmRpZlxuKyNlbmRpZlxuIFxuICNkZWZpbmUgZ3VwX2Zhc3RfcGVybWl0dGVkKHN0YXJ0LCBlbmQpXHQoIWNwdV9oYXNfZGNfYWxpYXNlcylcbiBcbmRpZmYgLS1naXQgYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA2Yjg5OTk2ZDBiNjI4ZS4uNWE0OTFjZDBmMDA4NjggMTAwNjQ0XG4tLS0gYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0zMzEsOSArMzMxLDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBtZF9wYWdlX3ZhZGRyKHBtZF90IHBtZClcbiBcdHJldHVybiAoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbChwbWQpIFx1MDAyNiBQQUdFX01BU0spKTtcbiB9XG4gXG4tI2RlZmluZSBfX3BtZF9vZmZzZXQoYWRkcmVzcykgXFxcbi1cdCgoKGFkZHJlc3MpIFx1MDAzZVx1MDAzZSBQTURfU0hJRlQpIFx1MDAyNiAoUFRSU19QRVJfUE1ELTEpKVxuLVxuICNkZWZpbmUgUEZOX1BURV9TSElGVFx0XHRQQUdFX1NISUZUXG4gI2RlZmluZSBwdGVfcGZuKHgpXHRcdCgodW5zaWduZWQgbG9uZykoKCh4KS5wdGUpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVClcbiAjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KSAgX19wdGUoKCgocGZuKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpIHwgcGdwcm90X3ZhbChwcm90KSlcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5pbmRleCAwODJmOWIyNjE3MzM4Ny4uNmQ2MDQyYjgxZDc5MDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbkBAIC0zNjIsMTAgKzM2MiwxMCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRpbnQgc2l6ZSA9IFBBR0VfU0laRTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRwZ2RfdCBwZ2Q7XG4tXHRwNGRfdCBwNGQ7XG4tXHRwdWRfdCBwdWQ7XG4tXHRwbWRfdCBwbWQ7XG4rXHRwZ2RfdCAqcGdkcCwgcGdkO1xuK1x0cDRkX3QgKnA0ZHAsIHA0ZDtcbitcdHB1ZF90ICpwdWRwLCBwdWQ7XG4rXHRwbWRfdCAqcG1kcCwgcG1kO1xuIFxuIFx0LypcbiBcdCAqIERpc2FibGUgSVJRcyB0byBwcmV2ZW50IGNvbmN1cnJlbnQgdGVhciBkb3duIG9mIGhvc3QgcGFnZSB0YWJsZXMsXG5AQCAtMzgxLDE1ICszODEsMTggQEAgc3RhdGljIGludCBnZXRfaHZhX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG4gXHQgKiB2YWx1ZSkgYW5kIHRoZW4gcCpkX29mZnNldCgpIHdhbGtzIGludG8gdGhlIHRhcmdldCBodWdlIHBhZ2UgaW5zdGVhZFxuIFx0ICogb2YgdGhlIG9sZCBwYWdlIHRhYmxlIChzZWVzIHRoZSBuZXcgdmFsdWUpLlxuIFx0ICovXG4tXHRwZ2QgPSBwZ2RwX2dldChwZ2Rfb2Zmc2V0KGt2bS1cdTAwM2VtbSwgaHZhKSk7XG4rXHRwZ2RwID0gcGdkX29mZnNldChrdm0tXHUwMDNlbW0sIGh2YSk7XG4rXHRwZ2QgPSBwZ2RwX2dldChwZ2RwKTtcbiBcdGlmIChwZ2Rfbm9uZShwZ2QpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHA0ZCA9IHA0ZHBfZ2V0KHA0ZF9vZmZzZXQoXHUwMDI2cGdkLCBodmEpKTtcbitcdHA0ZHAgPSBwNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgaHZhKTtcbitcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZHApO1xuIFx0aWYgKHA0ZF9ub25lKHA0ZCkgfHwgIXA0ZF9wcmVzZW50KHA0ZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cHVkID0gcHVkcF9nZXQocHVkX29mZnNldChcdTAwMjZwNGQsIGh2YSkpO1xuK1x0cHVkcCA9IHB1ZF9vZmZzZXRfbG9ja2xlc3MocDRkcCwgcDRkLCBodmEpO1xuK1x0cHVkID0gcHVkcF9nZXQocHVkcCk7XG4gXHRpZiAocHVkX25vbmUocHVkKSB8fCAhcHVkX3ByZXNlbnQocHVkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtMzk4LDcgKzQwMSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHBtZCA9IHBtZHBfZ2V0KHBtZF9vZmZzZXQoXHUwMDI2cHVkLCBodmEpKTtcbitcdHBtZHAgPSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgaHZhKTtcbitcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xuIFx0aWYgKHBtZF9ub25lKHBtZCkgfHwgIXBtZF9wcmVzZW50KHBtZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbW0vZmF1bHQuYyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuY1xuaW5kZXggMDRlZDZmOGFjYWU0ZmQuLmIyYmNhZjEwZDEzZjFkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbkBAIC0xNjcsMTQgKzE2NywxNiBAQCBiYWRfYXJlYShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBjb2RlLFxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbi1cdHBnZF90ICpwZ2QsICpwZ2Rfaztcbi1cdHB1ZF90ICpwdWRfaztcbi1cdHA0ZF90ICpwNGRfaztcbi1cdHBtZF90ICpwbWRfaztcbi1cdHB0ZV90ICpwdGVfaztcbitcdHBnZF90ICpwZ2RwX2ssICpwZ2RwLCBwZ2RfaztcbitcdHA0ZF90ICpwNGRwX2ssICpwNGRwO1xuK1x0cHVkX3QgKnB1ZHBfaywgKnB1ZHAsIHB1ZF9rO1xuK1x0cG1kX3QgKnBtZHBfaywgKnBtZHAsIHBtZF9rO1xuK1x0cHRlX3QgKnB0ZXBfaztcbiBcdGludCBpbmRleDtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuO1xuIFxuK1x0QlVJTERfQlVHX09OKENPTkZJR19QR1RBQkxFX0xFVkVMUyAhPSA1IFx1MDAyNlx1MDAyNiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgIT0gMik7XG4rXG4gXHQvKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YgKi9cbiBcdGlmICh1c2VyX21vZGUocmVncykpXG4gXHRcdHJldHVybiBkb190cmFwKHJlZ3MsIFNJR1NFR1YsIGNvZGUsIGFkZHIpO1xuQEAgLTE4OSwzOSArMTkxLDUxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhXG4gXHQgKi9cbiBcdGluZGV4ID0gcGdkX2luZGV4KGFkZHIpO1xuIFx0cGZuID0gY3NyX3JlYWQoQ1NSX1NBVFApIFx1MDAyNiBTQVRQX1BQTjtcbi1cdHBnZCA9IChwZ2RfdCAqKXBmbl90b192aXJ0KHBmbikgKyBpbmRleDtcbi1cdHBnZF9rID0gaW5pdF9tbS5wZ2QgKyBpbmRleDtcbiBcbi1cdGlmICghcGdkX3ByZXNlbnQocGdkcF9nZXQocGdkX2spKSkge1xuK1x0cGdkcCA9IChwZ2RfdCAqKXBmbl90b192aXJ0KHBmbikgKyBpbmRleDtcbitcdHBnZHBfayA9IGluaXRfbW0ucGdkICsgaW5kZXg7XG4rXG4rXHRwZ2RfayA9IHBnZHBfZ2V0KHBnZHBfayk7XG4rXHRpZiAoIXBnZF9wcmVzZW50KHBnZF9rKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRzZXRfcGdkKHBnZCwgcGdkcF9nZXQocGdkX2spKTtcbitcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNSlcbitcdFx0c2V0X3BnZChwZ2RwLCBwZ2Rfayk7XG4gXG4tXHRwNGRfayA9IHA0ZF9vZmZzZXQocGdkX2ssIGFkZHIpO1xuLVx0aWYgKCFwNGRfcHJlc2VudChwNGRwX2dldChwNGRfaykpKSB7XG4rXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcbitcdHA0ZHBfayA9IHA0ZF9vZmZzZXQocGdkcF9rLCBhZGRyKTtcbitcdGlmICghcDRkX3ByZXNlbnQocDRkcF9nZXQocDRkcF9rKSkpIHtcbiBcdFx0bm9fY29udGV4dChyZWdzLCBhZGRyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0cHVkX2sgPSBwdWRfb2Zmc2V0KHA0ZF9rLCBhZGRyKTtcbi1cdGlmICghcHVkX3ByZXNlbnQocHVkcF9nZXQocHVkX2spKSkge1xuK1x0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XG4rXHRwdWRwX2sgPSBwdWRfb2Zmc2V0KHA0ZHBfaywgYWRkcik7XG4rXG4rXHRwdWRfayA9IHB1ZHBfZ2V0KHB1ZHBfayk7XG4rXHRpZiAoIXB1ZF9wcmVzZW50KHB1ZF9rKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRpZiAocHVkX2xlYWYocHVkcF9nZXQocHVkX2spKSlcbitcdGlmIChwdWRfbGVhZihwdWRfaykpXG4gXHRcdGdvdG8gZmx1c2hfdGxiO1xuIFxuIFx0LypcbiBcdCAqIFNpbmNlIHRoZSB2bWFsbG9jIGFyZWEgaXMgZ2xvYmFsLCBpdCBpcyB1bm5lY2Vzc2FyeVxuIFx0ICogdG8gY29weSBpbmRpdmlkdWFsIFBURXNcbiBcdCAqL1xuLVx0cG1kX2sgPSBwbWRfb2Zmc2V0KHB1ZF9rLCBhZGRyKTtcbi1cdGlmICghcG1kX3ByZXNlbnQocG1kcF9nZXQocG1kX2spKSkge1xuK1x0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4rXHRwbWRwX2sgPSBwbWRfb2Zmc2V0KHB1ZHBfaywgYWRkcik7XG4rXG4rXHRwbWRfayA9IHBtZHBfZ2V0KHBtZHBfayk7XG4rXHRpZiAoIXBtZF9wcmVzZW50KHBtZF9rKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRpZiAocG1kX2xlYWYocG1kcF9nZXQocG1kX2spKSlcbitcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMilcbitcdFx0c2V0X3BtZChwbWRwLCBwbWRfayk7XG4rXHRpZiAocG1kX2xlYWYocG1kX2spKVxuIFx0XHRnb3RvIGZsdXNoX3RsYjtcbiBcbiBcdC8qXG5AQCAtMjMwLDggKzI0NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhXG4gXHQgKiBhZGRyZXNzZXMuIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoaXMgd2lsbCBqdXN0XG4gXHQgKiBzaWxlbnRseSBsb29wIGZvcmV2ZXIuXG4gXHQgKi9cbi1cdHB0ZV9rID0gcHRlX29mZnNldF9rZXJuZWwocG1kX2ssIGFkZHIpO1xuLVx0aWYgKCFwdGVfcHJlc2VudChwdGVwX2dldChwdGVfaykpKSB7XG4rXHRwdGVwX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwX2ssIGFkZHIpO1xuK1x0aWYgKCFwdGVfcHJlc2VudChwdGVwX2dldChwdGVwX2spKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMgYi9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuY1xuaW5kZXggMmFmYTdhMjMzNDBlOTIuLjRlNTQ1OTg4OTUzYTBiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNcbisrKyBiL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXG5AQCAtMjcsNiArMjcsNyBAQFxuICAqL1xuIHN0cnVjdCBwZ19zdGF0ZSB7XG4gXHRzdHJ1Y3QgcHRkdW1wX3N0YXRlIHB0ZHVtcDtcbitcdGludCBmaXJzdF9sZXZlbDtcbiBcdGludCBsZXZlbDtcbiBcdHBncHJvdHZhbF90IGN1cnJlbnRfcHJvdDtcbiBcdHBncHJvdHZhbF90IGVmZmVjdGl2ZV9wcm90O1xuQEAgLTI1NCw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCwgaW50IGxldmVsLCB1NjQgdmFsKVxuIFx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcdTAwMjYgUFRFX0ZMQUdTX01BU0s7XG4gXHRwZ3Byb3R2YWxfdCBlZmZlY3RpdmU7XG4gXG4tXHRpZiAobGV2ZWwgXHUwMDNlIDApIHtcbitcdGlmIChsZXZlbCBcdTAwM2Ugc3QtXHUwMDNlZmlyc3RfbGV2ZWwpIHtcbiBcdFx0cGdwcm90dmFsX3QgaGlnaGVyX3Byb3QgPSBzdC1cdTAwM2Vwcm90X2xldmVsc1tsZXZlbCAtIDFdO1xuIFxuIFx0XHRlZmZlY3RpdmUgPSAoaGlnaGVyX3Byb3QgXHUwMDI2IHByb3QgXHUwMDI2IChfUEFHRV9VU0VSIHwgX1BBR0VfUlcpKSB8XG5AQCAtNDU1LDYgKzQ1Niw4IEBAIGJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHQuc2VxXHRcdD0gbVxuIFx0fTtcbiBcbitcdHN0LmZpcnN0X2xldmVsID0gcHRkdW1wX3B0X2xldmVsX2ZpcnN0KG1tKTtcbitcbiBcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIG1tLCBwZ2QpO1xuIFxuIFx0aWYgKCFjaGVja3d4KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCAwNzg2ODlhYTcyMDZmOC4uOTFiMzNhMjY1YTQzMWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMTM0Niw3ICsxMzQ2LDcgQEAgc3RhdGljIGludCBjb2xsYXBzZV9wdWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRwbWRfdCAqcG1kLCBmaXJzdDtcbiBcdGludCBpO1xuIFxuLVx0aWYgKCFkaXJlY3RfZ2JwYWdlcylcbitcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMiB8fCAhZGlyZWN0X2dicGFnZXMpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0YWRkciBcdTAwMjY9IFBVRF9NQVNLO1xuQEAgLTE3MzAsNyArMTczMCw4IEBAIHN0YXRpYyBpbnQgcG9wdWxhdGVfcHVkKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBwNGRfdCAqcDRkLFxuIFx0LypcbiBcdCAqIE1hcCBldmVyeXRoaW5nIHN0YXJ0aW5nIGZyb20gdGhlIEdiIGJvdW5kYXJ5LCBwb3NzaWJseSB3aXRoIDFHIHBhZ2VzXG4gXHQgKi9cbi1cdHdoaWxlIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfR0JQQUdFUykgXHUwMDI2XHUwMDI2IGVuZCAtIHN0YXJ0IFx1MDAzZT0gUFVEX1NJWkUpIHtcbitcdHdoaWxlIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDMgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9HQlBBR0VTKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBlbmQgLSBzdGFydCBcdTAwM2U9IFBVRF9TSVpFKSB7XG4gXHRcdHNldF9wdWQocHVkLCBwdWRfbWtodWdlKHBmbl9wdWQoY3BhLVx1MDAzZXBmbixcbiBcdFx0XHRcdCAgIGNhbm9uX3BncHJvdChwdWRfcGdwcm90KSkpKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcbmluZGV4IGYzMmZhY2RiMzAzNTQzLi5lZGFkODQ3YTJlY2RiOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BndGFibGUuY1xuKysrIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXG5AQCAtNDExLDYgKzQxMSw3IEBAIGludCBwbWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyZXR1cm4gY2hhbmdlZDtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4gaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgcHVkX3QgKnB1ZHAsIHB1ZF90IGVudHJ5LCBpbnQgZGlydHkpXG4ge1xuQEAgLTQzMCw2ICs0MzEsNyBAQCBpbnQgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHRyZXR1cm4gY2hhbmdlZDtcbiB9XG4rI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG4gI2VuZGlmXG4gXG4gYm9vbCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmhcbmluZGV4IDg5YzIxZjg0Y2ZmYmUyLi4xOWY1YTZlZGE3NmNjMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wNGQuaFxuQEAgLTIyLDI2ICsyMiw2MSBAQCBzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpXHRcdHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZClcdFx0eyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZClcdHsgcmV0dXJuIDE7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2NsZWFyKHBnZF90ICpwZ2QpXHR7IH1cbitzdGF0aWMgaW5saW5lIGJvb2wgcGdkX2xlYWYocGdkX3QgcGdkKVx0XHR7IHJldHVybiBmYWxzZTsgfVxuKyNkZWZpbmUgcGdkX2xlYWYgcGdkX2xlYWZcbiAjZGVmaW5lIHA0ZF9FUlJPUihwNGQpXHRcdFx0XHQocGdkX0VSUk9SKChwNGQpLnBnZCkpXG4gXG4gI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBnZCwgcDRkKVx0XHRkbyB7IH0gd2hpbGUgKDApXG4gI2RlZmluZSBwZ2RfcG9wdWxhdGVfc2FmZShtbSwgcGdkLCBwNGQpXHRcdGRvIHsgfSB3aGlsZSAoMClcbi0vKlxuLSAqIChwNGRzIGFyZSBmb2xkZWQgaW50byBwZ2RzIHNvIHRoaXMgZG9lc24ndCBnZXQgYWN0dWFsbHkgY2FsbGVkLFxuLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pXG4tICovXG4tI2RlZmluZSBzZXRfcGdkKHBnZHB0ciwgcGdkdmFsKVx0c2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KVxuIFxuLXN0YXRpYyBpbmxpbmUgcDRkX3QgKnA0ZF9vZmZzZXQocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuKyNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbClcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHBnZF9jaGVja19kdW1teShwZ2R2YWwpO1x0XHRcdFx0XHRcXFxuK1x0c2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KTtcdFx0XHRcXFxuK30pXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwZ2RfdCBwZ2RwX2dldChwZ2RfdCAqcDRkcClcbiB7XG4tXHRyZXR1cm4gKHA0ZF90ICopcGdkO1xuK1x0cGdkX3QgZHVtbXkgPSB7IDAgfTtcbitcbitcdHJldHVybiBkdW1teTtcbiB9XG4rI2RlZmluZSBwZ2RwX2dldCBwZ2RwX2dldFxuK1xuKyNkZWZpbmUgcGdkX2NoZWNrX2R1bW15KHBnZCkgQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHBnZF92YWwocGdkKSkpXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCAqX19wNGRfb2Zmc2V0KHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4re1xuK1x0cmV0dXJuIChwNGRfdCAqKXBnZHA7XG4rfVxuK1xuKyNkZWZpbmUgcDRkX29mZnNldChwZ2RwLCBhZGRyZXNzKVx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHBnZF9jaGVja19kdW1teSgqKHBnZHApKTtcdFx0XHRcdFx0XFxcbitcdF9fcDRkX29mZnNldChwZ2RwLCBhZGRyZXNzKTtcdFx0XHRcdFx0XFxcbit9KVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcDRkX3QgKl9fcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4re1xuK1x0cmV0dXJuIChwNGRfdCAqKXBnZHA7XG4rfVxuK1xuKyNkZWZpbmUgcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGFkZHJlc3MpXHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHBnZF9jaGVja19kdW1teSgqKHBnZHApKTtcdFx0XHRcdFx0XFxcbitcdF9fcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGFkZHJlc3MpO1x0XHRcdFxcXG4rfSlcbiBcbiAjZGVmaW5lIHA0ZF92YWwoeClcdFx0XHRcdChwZ2RfdmFsKCh4KS5wZ2QpKVxuICNkZWZpbmUgX19wNGQoeClcdFx0XHRcdCgocDRkX3QpIHsgX19wZ2QoeCkgfSlcbiBcbi0jZGVmaW5lIHBnZF9wYWdlKHBnZClcdFx0XHRcdChwNGRfcGFnZSgocDRkX3QpeyBwZ2QgfSkpXG4tI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpXHRcdFx0KCh1bnNpZ25lZCBsb25nKShwNGRfcGd0YWJsZSgocDRkX3QpeyBwZ2QgfSkpKVxuKyNkZWZpbmUgcGdkX3BhZ2UocGdkKVx0XHRcdFx0KHsgQlVJTERfQlVHKCk7IChzdHJ1Y3QgcGFnZSAqKU5VTEw7IH0pXG4rI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpXHRcdFx0XHRcdFx0XFxcbisoeyBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cGdkX2NoZWNrX2R1bW15KHBnZCk7XHRcdFx0XHRcdFx0XFxcbitcdCh1bnNpZ25lZCBsb25nKXA0ZF9wZ3RhYmxlKChwNGRfdCkgeyBwZ2QgfSk7XHRcdFx0XFxcbit9KVxuIFxuIC8qXG4gICogYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHA0ZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwNGQgaXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oXG5pbmRleCAzNmI2NDkwZWQxODA4MS4uNjE4NTJlYjRiMTUwNGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmhcbkBAIC0zMSwyOSArMzEsNjEgQEAgc3RhdGljIGlubGluZSBpbnQgcHVkX25vbmUocHVkX3QgcHVkKVx0XHR7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBpbnQgcHVkX2JhZChwdWRfdCBwdWQpXHRcdHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwdWRfcHJlc2VudChwdWRfdCBwdWQpXHR7IHJldHVybiAxOyB9XG4gc3RhdGljIGlubGluZSBpbnQgcHVkX3VzZXIocHVkX3QgcHVkKVx0XHR7IHJldHVybiAwOyB9XG4tc3RhdGljIGlubGluZSBpbnQgcHVkX2xlYWYocHVkX3QgcHVkKVx0XHR7IHJldHVybiAwOyB9XG4rc3RhdGljIGlubGluZSBib29sIHB1ZF9sZWFmKHB1ZF90IHB1ZClcdFx0eyByZXR1cm4gZmFsc2U7IH1cbisjZGVmaW5lIHB1ZF9sZWFmIHB1ZF9sZWFmXG4gc3RhdGljIGlubGluZSB2b2lkIHB1ZF9jbGVhcihwdWRfdCAqcHVkKVx0eyB9XG4gI2RlZmluZSBwbWRfRVJST1IocG1kKVx0XHRcdFx0KHB1ZF9FUlJPUigocG1kKS5wdWQpKVxuIFxuICNkZWZpbmUgcHVkX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSlcdFx0ZG8geyB9IHdoaWxlICgwKVxuIFxuLS8qXG4tICogKHBtZHMgYXJlIGZvbGRlZCBpbnRvIHB1ZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsXG4tICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLilcbi0gKi9cbi0jZGVmaW5lIHNldF9wdWQocHVkcHRyLCBwdWR2YWwpXHRcdFx0c2V0X3BtZCgocG1kX3QgKikocHVkcHRyKSwgKHBtZF90KSB7IHB1ZHZhbCB9KVxuKyNkZWZpbmUgc2V0X3B1ZChwdWRwdHIsIHB1ZHZhbClcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHB1ZF9jaGVja19kdW1teShwdWR2YWwpO1x0XHRcdFx0XHRcXFxuK1x0c2V0X3BtZCgocG1kX3QgKikocHVkcHRyKSwgKHBtZF90KSB7IHB1ZHZhbCB9KTtcdFx0XHRcXFxuK30pXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwdWRfdCBwdWRwX2dldChwdWRfdCAqcHVkcClcbit7XG4rXHRwdWRfdCBkdW1teSA9IHsgMCB9O1xuK1xuK1x0cmV0dXJuIGR1bW15O1xuK31cbisjZGVmaW5lIHB1ZHBfZ2V0IHB1ZHBfZ2V0XG4gXG4tc3RhdGljIGlubGluZSBwbWRfdCAqIHBtZF9vZmZzZXQocHVkX3QgKiBwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbisjZGVmaW5lIHB1ZF9jaGVja19kdW1teShwdWQpIEJVSUxEX0JVR19PTihfX2J1aWx0aW5fY29uc3RhbnRfcChwdWRfdmFsKHB1ZCkpKVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcG1kX3QgKl9fcG1kX29mZnNldChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuK3tcbitcdHJldHVybiAocG1kX3QgKilwdWRwO1xuK31cbitcbisjZGVmaW5lIHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcylcdFx0XHRcdFx0XFxcbisoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7XHRcdFx0XHRcdFxcXG4rXHRfX3BtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7XHRcdFx0XHRcdFxcXG4rfSlcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHBtZF90ICpfX3BtZF9vZmZzZXRfbG9ja2xlc3MocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHJldHVybiAocG1kX3QgKilwdWQ7XG4rXHRyZXR1cm4gKHBtZF90ICopcHVkcDtcbiB9XG4tI2RlZmluZSBwbWRfb2Zmc2V0IHBtZF9vZmZzZXRcbitcbisjZGVmaW5lIHBtZF9vZmZzZXRfbG9ja2xlc3MocHVkcCwgcHVkLCBhZGRyZXNzKVx0XHRcdFx0XFxcbisoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7XHRcdFx0XHRcdFxcXG4rXHRfX3BtZF9vZmZzZXRfbG9ja2xlc3MocHVkcCwgcHVkLCBhZGRyZXNzKTtcdFx0XHRcXFxuK30pXG4gXG4gI2RlZmluZSBwbWRfdmFsKHgpXHRcdFx0XHQocHVkX3ZhbCgoeCkucHVkKSlcbiAjZGVmaW5lIF9fcG1kKHgpXHRcdFx0XHQoKHBtZF90KSB7IF9fcHVkKHgpIH0gKVxuIFxuLSNkZWZpbmUgcHVkX3BhZ2UocHVkKVx0XHRcdFx0KHBtZF9wYWdlKChwbWRfdCl7IHB1ZCB9KSlcbi0jZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZClcdFx0XHQoKHBtZF90ICopKHBtZF9wYWdlX3ZhZGRyKChwbWRfdCl7IHB1ZCB9KSkpXG4rI2RlZmluZSBwdWRfcGFnZShwdWQpXHRcdFx0XHQoeyBCVUlMRF9CVUcoKTsgKHN0cnVjdCBwYWdlICopTlVMTDsgfSlcbisjZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZClcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHB1ZF9jaGVja19kdW1teShwdWQpO1x0XHRcdFx0XHRcdFxcXG4rXHQoKHBtZF90ICopKHBtZF9wYWdlX3ZhZGRyKChwbWRfdCkgeyBwdWQgfSkpKTtcdFx0XHRcXFxuK30pXG4gXG4gLypcbiAgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcG1kIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHBtZCBpc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmhcbmluZGV4IDM1NmNiZmJhYWIyNDc2Li41ZWU4ZjE4NTJjZDhjOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaFxuQEAgLTI5LDI3ICsyOSw2MiBAQCBzdGF0aWMgaW5saW5lIGludCBwNGRfbm9uZShwNGRfdCBwNGQpXHRcdHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwNGRfYmFkKHA0ZF90IHA0ZClcdFx0eyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHA0ZF9wcmVzZW50KHA0ZF90IHA0ZClcdHsgcmV0dXJuIDE7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcDRkX2NsZWFyKHA0ZF90ICpwNGQpXHR7IH1cbitzdGF0aWMgaW5saW5lIGJvb2wgcDRkX2xlYWYocDRkX3QgcDRkKVx0XHR7IHJldHVybiBmYWxzZTsgfVxuKyNkZWZpbmUgcDRkX2xlYWYgcDRkX2xlYWZcbiAjZGVmaW5lIHB1ZF9FUlJPUihwdWQpXHRcdFx0XHQocDRkX0VSUk9SKChwdWQpLnA0ZCkpXG4gXG4gI2RlZmluZSBwNGRfcG9wdWxhdGUobW0sIHA0ZCwgcHVkKVx0XHRkbyB7IH0gd2hpbGUgKDApXG4gI2RlZmluZSBwNGRfcG9wdWxhdGVfc2FmZShtbSwgcDRkLCBwdWQpXHRcdGRvIHsgfSB3aGlsZSAoMClcbi0vKlxuLSAqIChwdWRzIGFyZSBmb2xkZWQgaW50byBwNGRzIHNvIHRoaXMgZG9lc24ndCBnZXQgYWN0dWFsbHkgY2FsbGVkLFxuLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pXG4tICovXG4tI2RlZmluZSBzZXRfcDRkKHA0ZHB0ciwgcDRkdmFsKVx0c2V0X3B1ZCgocHVkX3QgKikocDRkcHRyKSwgKHB1ZF90KSB7IHA0ZHZhbCB9KVxuIFxuLXN0YXRpYyBpbmxpbmUgcHVkX3QgKnB1ZF9vZmZzZXQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuKyNkZWZpbmUgc2V0X3A0ZChwNGRwdHIsIHA0ZHZhbClcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHA0ZF9jaGVja19kdW1teShwNGR2YWwpO1x0XHRcdFx0XHRcXFxuK1x0c2V0X3B1ZCgocHVkX3QgKikocDRkcHRyKSwgKHB1ZF90KSB7IHA0ZHZhbCB9KTtcdFx0XHRcXFxuK30pXG4rXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCBwNGRwX2dldChwNGRfdCAqcDRkcClcbit7XG4rXHRwNGRfdCBkdW1teSA9IHsgMCB9O1xuK1xuK1x0cmV0dXJuIGR1bW15O1xuK31cbisjZGVmaW5lIHA0ZHBfZ2V0IHA0ZHBfZ2V0XG4rXG4rI2RlZmluZSBwNGRfY2hlY2tfZHVtbXkocDRkKSBCVUlMRF9CVUdfT04oX19idWlsdGluX2NvbnN0YW50X3AocDRkX3ZhbChwNGQpKSlcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHB1ZF90ICpfX3B1ZF9vZmZzZXQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRyZXR1cm4gKHB1ZF90ICopcDRkO1xuK1x0cmV0dXJuIChwdWRfdCAqKXA0ZHA7XG4gfVxuLSNkZWZpbmUgcHVkX29mZnNldCBwdWRfb2Zmc2V0XG4rXG4rI2RlZmluZSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHJlc3MpXHRcdFx0XHRcdFxcXG4rKHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1x0XHRcdFx0XHRcXFxuK1x0X19wdWRfb2Zmc2V0KHA0ZHAsIGFkZHJlc3MpO1x0XHRcdFx0XHRcXFxuK30pXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwdWRfdCAqX19wdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZF90ICpwNGRwLCBwNGRfdCBwNGQsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbit7XG4rXHRyZXR1cm4gKHB1ZF90ICopcDRkcDtcbit9XG4rXG4rI2RlZmluZSBwdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZHAsIHA0ZCwgYWRkcmVzcylcdFx0XHRcdFxcXG4rKHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1x0XHRcdFx0XHRcXFxuK1x0X19wdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZHAsIHA0ZCwgYWRkcmVzcyk7XHRcdFx0XFxcbit9KVxuIFxuICNkZWZpbmUgcHVkX3ZhbCh4KVx0XHRcdFx0KHA0ZF92YWwoKHgpLnA0ZCkpXG4gI2RlZmluZSBfX3B1ZCh4KVx0XHRcdFx0KChwdWRfdCkgeyBfX3A0ZCh4KSB9KVxuIFxuLSNkZWZpbmUgcDRkX3BhZ2UocDRkKVx0XHRcdFx0KHB1ZF9wYWdlKChwdWRfdCl7IHA0ZCB9KSlcbi0jZGVmaW5lIHA0ZF9wZ3RhYmxlKHA0ZClcdFx0XHQoKHB1ZF90ICopKHB1ZF9wZ3RhYmxlKChwdWRfdCl7IHA0ZCB9KSkpXG4rI2RlZmluZSBwNGRfcGFnZShwNGQpXHRcdFx0XHQoeyBCVUlMRF9CVUcoKTsgKHN0cnVjdCBwYWdlICopTlVMTDsgfSlcbisjZGVmaW5lIHA0ZF9wZ3RhYmxlKHA0ZClcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHA0ZF9jaGVja19kdW1teShwNGQpO1x0XHRcdFx0XHRcdFxcXG4rXHQoKHB1ZF90ICopKHB1ZF9wZ3RhYmxlKChwdWRfdCkgeyBwNGQgfSkpKTtcdFx0XHRcXFxuK30pXG4gXG4gLypcbiAgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcHVkIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHB1ZCBpc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRkdW1wLmggYi9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oXG5pbmRleCAyNDBiZDNiZmYxOGRkMi4uMjZmYTYyNGVhYzQ0ZWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oXG5AQCAtMjksNiArMjksNyBAQCBib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxuIFx0XHRcdFx0Ym9vbCBjaGVja3d4LCBib29sIGRtZXNnKTtcbiB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpO1xuK2ludCBwdGR1bXBfcHRfbGV2ZWxfZmlyc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19jaGVja3d4KHZvaWQpXG5kaWZmIC0tZ2l0IGEvbW0vcHRkdW1wLmMgYi9tbS9wdGR1bXAuY1xuaW5kZXggNTg1MTA5NmU2ZjY1NmMuLjk2Njc2YzkwNDMwZjE4IDEwMDY0NFxuLS0tIGEvbW0vcHRkdW1wLmNcbisrKyBiL21tL3B0ZHVtcC5jXG5AQCAtMTk3LDYgKzE5NywxNyBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4gXHRzdC1cdTAwM2Vub3RlX3BhZ2VfZmx1c2goc3QpO1xuIH1cbiBcbitpbnQgcHRkdW1wX3B0X2xldmVsX2ZpcnN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuK3tcbitcdGlmIChtbV9wbWRfZm9sZGVkKG1tKSlcbitcdFx0cmV0dXJuIDM7XG4rXHRpZiAobW1fcHVkX2ZvbGRlZChtbSkpXG4rXHRcdHJldHVybiAyO1xuK1x0aWYgKG1tX3A0ZF9mb2xkZWQobW0pKVxuK1x0XHRyZXR1cm4gMTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGNoZWNrX3d4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiBcdGlmIChwdGR1bXBfY2hlY2tfd3goKSlcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAwNmUxMDNmOTc4MWU1ZC4uMGM5YzRhYzg5ZTA5NGEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0zNzI3LDcgKzM3MjcsNyBAQCBzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRpZiAoIXB1ZF9wcmVzZW50KHZhbCkgfHwgV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKHZhbCkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHR3YWxrX3BtZF9yYW5nZShcdTAwMjZ2YWwsIGFkZHIsIG5leHQsIGFyZ3MpO1xuK1x0XHR3YWxrX3BtZF9yYW5nZShwdWQgKyBpLCBhZGRyLCBuZXh0LCBhcmdzKTtcbiBcbiBcdFx0aWYgKG5lZWRfcmVzY2hlZCgpIHx8IHdhbGstXHUwMDNlYmF0Y2hlZCBcdTAwM2U9IE1BWF9MUlVfQkFUQ0gpIHtcbiBcdFx0XHRlbmQgPSAoYWRkciB8IH5QVURfTUFTSykgKyAxO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzU6MTIuNDkyNTQ4MDMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0MDExMTA5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29yZSBNTSBQYXRjaDogUGFnZSBUYWJsZSBGb2xkaW5nIEZpeGVzIC0gRnV6emluZyBUYXJnZXQgSWRlbnRpZmllZCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgKnNpZ25pZmljYW50KiBjaGFuZ2UuIEl0J3MgdG91Y2hpbmcgYSB3aWRlIHJhbmdlIG9mIGFyY2hpdGVjdHVyZXMgKGBhcm1gLCBgYXJtNjRgLCBgbG9vbmdhcmNoYCwgYG1pcHNgLCBgb3BlbnJpc2NgLCBgcmlzY3ZgLCBgeDg2YCkgYW5kIGludm9sdmVzIGNydWNpYWwgaW5jbHVkZSBmaWxlcyAoYGFzbS1nZW5lcmljL3BndGFibGUtbm9wKmApLiBUaGUgaGVhcnQgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHdlIGhhbmRsZSBmb2xkZWQgcGFnZSB0YWJsZXMsIHNwZWNpZmljYWxseSB0aGUgbWFjcm9zIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVtLlxuXG5Fc3NlbnRpYWxseSwgaXQncyBtb2RpZnlpbmcgcGFnZSB0YWJsZSB3YWxrcyB0byBjb3JyZWN0IHRoZXNlIGZvbGRlZCBwYWdlIHRhYmxlIGltcGxlbWVudGF0aW9ucy4gVGhlIGludHJvZHVjdGlvbiBvZiBgcGdkX2NoZWNrX2R1bW15YCwgYHA0ZF9jaGVja19kdW1teWAsIGFuZCBgcHVkX2NoZWNrX2R1bW15YCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmdW5kYW1lbnRhbCBhZGp1c3RtZW50IGluIGhvdyB0aGUga2VybmVsIHZlcmlmaWVzIHRoZSB2YWxpZGl0eSBvZiB0aGVzZSBzdHJ1Y3R1cmVzLlxuXG5NeSBpbW1lZGlhdGUgcmVkIGZsYWcgaXMgdGhhdCB0aGlzIHBhdGNoICpkZWZpbml0ZWx5KiBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMuIEl0J3MgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBBbmQgdGhlIGZpeGVzIHRvIGB2bWFsbG9jX2ZhdWx0YCAoUklTQy1WKSwgYGdldF9odmFfbWFwcGluZ19zaXplYCAoUklTQy1WIEtWTSksIGFuZCBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAgKExvb25nQXJjaCBLVk0pIGFyZSBpbmRpY2F0b3JzIHRoYXQgS1ZNL3ZpcnR1YWxpemF0aW9uIGlzIGFsc28gaW52b2x2ZWQuIFRoaXMgaXMgZ29pbmcgdG8gaGF2ZSByZWFsLXdvcmxkIGltcGFjdC5cblxuTG9va2luZyBzcGVjaWZpY2FsbHkgYXQgYG1tL3Ztc2Nhbi5jYCwgdGhlIGNoYW5nZSBpbiBgd2Fsa19wdWRfcmFuZ2VgIOKAkyBwYXNzaW5nIGBwdWQgKyBpYCBpbnN0ZWFkIG9mIGBcdTAwMjZ2YWxgIHRvIGB3YWxrX3BtZF9yYW5nZWAg4oCTIHNlZW1zIGxpa2UgYSBzdWJ0bGUgYnV0IGxpa2VseSBpbXBvcnRhbnQgY29ycmVjdGlvbi4gVGhpcyBpcyB3aXRoaW4gTUdMUlUsIHNvIHRoaXMgcGF0Y2ggYWZmZWN0cyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHBhZ2UgcmVjbGFpbSBtZWNoYW5pc20uXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBzY29wZSBvZiBpbXBhY3QsIGFuZCBJIHdhbnQgdG8gZXhhbWluZSB0aGVzZSBrZXkgc3ltYm9scyBjbG9zZWx5OlxuKiAgIGB3YWxrX3B1ZF9yYW5nZWAgKGluIGBtbS92bXNjYW4uY2ApXG4qICAgYHZtYWxsb2NfZmF1bHRgIChpbiBgYXJjaC9yaXNjdi9tbS9mYXVsdC5jYClcbiogICBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgIChpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgKVxuKiAgIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCAoaW4gYGFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY2ApXG4qICAgYHB0ZHVtcF9wdF9sZXZlbF9maXJzdGAgKGluIGBtbS9wdGR1bXAuY2ApXG4qICAgYGNvbGxhcHNlX3B1ZF9wYWdlYCAoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgKVxuKiAgIGBwb3B1bGF0ZV9wdWRgIChpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2ApXG5cbk15IHByaW9yaXR5IGlzIGB3YWxrX3B1ZF9yYW5nZWAsIGFuZCBjb25maXJtZWQgaXQgaXMgcGFydCBvZiBNR0xSVSdzIGB3YWxrX3BnZF9yYW5nZWAgLVx1MDAzZSBgd2Fsa19wNGRfcmFuZ2VgIC1cdTAwM2UgYHdhbGtfcHVkX3JhbmdlYCAtXHUwMDNlIGB3YWxrX3BtZF9yYW5nZWAgLVx1MDAzZSBgd2Fsa19wdGVfcmFuZ2VgIGZ1bmN0aW9uIGNhbGwgY2hhaW4uIEl0J3Mgc3RhdGljLCBzbyBpdCBzaG91bGQgYmUgdGVzdGFibGUuXG5cbkdpdmVuIHRoZSB3aWRlc3ByZWFkIGFyY2hpdGVjdHVyZSBpbXBhY3QgYW5kIHRoZSBmdW5kYW1lbnRhbCBuYXR1cmUgb2YgdGhlIGNoYW5nZSAocGFnZSB0YWJsZSB3YWxrcyksICoqdGhpcyBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nKiouIEknbGwgbmVlZCB0byBkZXZlbG9wIGZvY3VzZWQgZnV6emluZyB0YXJnZXRzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlc2UgYXJlYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjI0Ljg5MzY2MzgzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDIwNTkzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3YWxrX3B1ZF9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0zNjM2PXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzcwOC1cXG5tbS92bXNjYW4uYzozNzA5OnN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1zY2FuLmMtMzcxMC1cXHRcXHRcXHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmM9Mzc1MT1zdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbi0tXFxubW0vdm1zY2FuLmMtMzc1NC1cXHRcXHQudGVzdF93YWxrID0gc2hvdWxkX3NraXBfdm1hLFxcbm1tL3Ztc2Nhbi5jOjM3NTU6XFx0XFx0LnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlLFxcbm1tL3Ztc2Nhbi5jLTM3NTYtXFx0XFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjI0Ljk4Nzg3NjQxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDYxMDgxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBDb2RlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgSSBzZWUgdGhpcyBgLnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlYCBhc3NpZ25tZW50IGluIGB3YWxrX21tYC4gSG1tLCBpbnRlcmVzdGluZy4gVGhhdCBsaWtlbHkgbWVhbnMgdGhpcyBmdW5jdGlvbiB1c2VzIGB3YWxrX3B1ZF9yYW5nZWAgdG8sIHdlbGwsIHdhbGsgYSByYW5nZSBvZiBwYWdlIHVwcGVyIGRpcmVjdG9yeSAoUFVEKSBlbnRyaWVzLCB3aGljaCBpcyBhIGNvbW1vbiBzdHJhdGVneS4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiBgQ09ORklHX0xSVV9HRU5gIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBtYXliZSBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAsIGlzIGRlZmluZWQuIEkgYmV0IHRoZSBjb2RlJ3MgYmVoYXZpb3IgY2hhbmdlcyBkZXBlbmRpbmcgb24gaG93IHRoZSBMUlUgaXMgaW1wbGVtZW50ZWQuIFRoaXMgd2lsbCBwcm9iYWJseSB0ZWxsIG1lIHdoZXRoZXIgdGhlIGNvZGUgaXMgZG9pbmcgYW55IGZhbmN5IExSVS1yZWxhdGVkIHBhZ2Ugc2VsZWN0aW9uIG9yIGhhbmRsaW5nIGR1cmluZyB0aGUgd2Fsay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIExSVSBmb3IgdGhpcyBjb2RlIHBhdGguIExldCdzIHNlZSB3aGF0IHRoZSBjb25maWcgb3B0aW9ucyB0ZWxsIG1lIGFib3V0IGhvdyB0aGUgcGFnaW5nIHN0cnVjdHVyZXMgYXJlIG1hbmlwdWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg0MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjI4Ljg5Mzk4NzE0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDE4MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3YWxrX3B1ZF9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZXdhbGsuYz05Nj1zdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTE4NC1cXG5tbS9wYWdld2Fsay5jOjE4NTpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vcGFnZXdhbGsuYy0xODYtXFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL3BhZ2V3YWxrLmM9MjUwPXN0YXRpYyBpbnQgd2Fsa19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtMjc5LVxcdFxcdGlmIChoYXNfaGFuZGxlciB8fCBoYXNfaW5zdGFsbClcXG5tbS9wYWdld2Fsay5jOjI4MDpcXHRcXHRcXHRlcnIgPSB3YWxrX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHdhbGspO1xcbm1tL3BhZ2V3YWxrLmMtMjgxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS92bXNjYW4uYz0zNjM2PXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzcwOC1cXG5tbS92bXNjYW4uYzozNzA5OnN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1zY2FuLmMtMzcxMC1cXHRcXHRcXHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmM9Mzc1MT1zdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbi0tXFxubW0vdm1zY2FuLmMtMzc1NC1cXHRcXHQudGVzdF93YWxrID0gc2hvdWxkX3NraXBfdm1hLFxcbm1tL3Ztc2Nhbi5jOjM3NTU6XFx0XFx0LnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlLFxcbm1tL3Ztc2Nhbi5jLTM3NTYtXFx0XFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjI4Ljk3ODE3NTkyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODA5NDM5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1HTFJVIENvbnRleHQgaW4gYHdhbGtfcHVkX3JhbmdlYCoqXG5cblJpZ2h0LCBgd2Fsa19wdWRfcmFuZ2VgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLi4uIHRoYXQncyB0aGUgZnVuY3Rpb24gTUdMUlUgdXRpbGl6ZXMsIGlzbid0IGl0PyBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBlbmFibGluZyBjb25kaXRpb24uIElzIE1HTFJVIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG5vdywgb3IgaXMgaXQgZ2F0ZWQgYmVoaW5kIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJIG5lZWQgdG8ga25vdyBpZiBJIGNhbiBqdXN0IGFzc3VtZSBpdCdzIHJ1bm5pbmcgd2hlbiB0ZXN0aW5nIG9yIGlmIEkgbmVlZCB0byBidWlsZCBhIHNwZWNpZmljIGtlcm5lbCB0byBzZWUgaXQgaW4gYWN0aW9uLiBJZiBpdCByZXF1aXJlcyBhIGNvbmZpZywgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lLCBzbyBJIGNhbiBlbnN1cmUgdGhlIHRlc3RzIGFyZSByZXByZXNlbnRhdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTozMi42NTkxMjIxNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc3OTgwMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzg5PWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTM5OS0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwMDpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwMS1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDA4LVxcbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDEwLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE0LVxcbm1tL0tjb25maWc6MTQxNTpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQxNi1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjMtXFxubW0vS2NvbmZpZzoxNDI0OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyNS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjMzLjAzNzEwODQ0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODkwMzUxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmV2aXNpdGluZyBgd2Fsa19wdWRfcmFuZ2VgIGluIGBtbS92bXNjYW4uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGB3YWxrX3B1ZF9yYW5nZWAuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGVyZSdzIHNvbWV0aGluZyBpbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgcGFnZSB3YWxrZXIgYW5kIHRoZSBWTSBzY2FubmVyIHRoYXQgaXNuJ3QgcXVpdGUgY2xpY2tpbmcsIGFuZCBteSBpbnR1aXRpb24gaXMgbnVkZ2luZyBtZSB0b3dhcmRzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgc3VidGxlIG51YW5jZXMgaW4gaXRzIGhhbmRsaW5nIG9mIFBVRCBlbnRyaWVzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyB3aXRoaW4gdGhlIHJlY2xhaW0gcHJvY2VzcyB0aGF0IGFyZSB3b3J0aCBhbm90aGVyIGxvb2suIExldCdzIGRpZyBiYWNrIGludG8gdGhlIGRldGFpbHMgYW5kIHJlLWV2YWx1YXRlIGl0cyBiZWhhdmlvdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzU6MzYuMDI2MTQ2ODI3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1MTc0NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2Fsa19wdWRfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MzYzNj1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM3MDgtXFxubW0vdm1zY2FuLmM6MzcwOTpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3Ztc2Nhbi5jLTM3MTAtXFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM3NTE9c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM3NTQtXFx0XFx0LnRlc3Rfd2FsayA9IHNob3VsZF9za2lwX3ZtYSxcXG5tbS92bXNjYW4uYzozNzU1OlxcdFxcdC5wNGRfZW50cnkgPSB3YWxrX3B1ZF9yYW5nZSxcXG5tbS92bXNjYW4uYy0zNzU2LVxcdFxcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTozNi4xMzc2NzE4NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2Mjk0ODY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGlnZ2luZyBpbnRvIFJJU0MtViBNZW1vcnkgRmF1bHRzKipcblxuT2theSwgc28gSSByZW1lbWJlciB3ZSBuZWVkIGBMUlVfR0VOYCBmb3IgYHdhbGtfcHVkX3JhbmdlYCBpbiBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCBSSVNDLVYuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBhcmNoL3Jpc2N2L21tL2ZhdWx0LmNgLiBJIGhhdmUgYSBmZWVsaW5nIGB2bWFsbG9jX2ZhdWx0YCBpcyBnb2luZyB0byBiZSByZWxldmFudCBoZXJlLiBMZXQncyBzZWUgaG93IHRoZSBhcmNoaXRlY3R1cmUgaGFuZGxlcyBmYXVsdHMsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdG9yLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBzaGVkIGxpZ2h0IG9uIGhvdyBgTFJVX0dFTmAgZ2V0cyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZmF1bHQgaGFuZGxpbmcgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGdlbmVyaWMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmF1bHQgaGFuZGxpbmcgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTozOS41MDA2MzExNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDI3NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYWxsb2NfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9tbS9mYXVsdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbW0vZmF1bHQuYz0xNjA9YmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY29kZSxcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0xNjctXFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjE2ODpzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMTY5LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYz0yOTI9dm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zMjYtXFx0ICAgIHVubGlrZWx5KGFkZHIgXFx1MDAzZT0gVk1BTExPQ19TVEFSVCBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgVk1BTExPQ19FTkQpKSB7XFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjMyNzpcXHRcXHR2bWFsbG9jX2ZhdWx0KHJlZ3MsIGNvZGUsIGFkZHIpO1xcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zMjgtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTozOS41Nzg2NjQ0MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDE3NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQ6IFJJU0MtViBcdTAwMjYgUGFnZSBUYWJsZSBPcHRpbWl6YXRpb25zKipcblxuUmlnaHQsIHRoaXMgbG9va3MgbGlrZSBhIFJJU0MtViBzcGVjaWZpYyBxdWVzdGlvbiwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBhcmNoaXRlY3R1cmUgaW4gbWluZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHNjZW5hcmlvIG9mIGNvbGxhcHNpbmcgUFVEIHBhZ2VzIOKAkyBvciwgbW9yZSBicm9hZGx5LCBob3cgdGhleSdyZSBoYW5kbGVkIHdoZW4gb3B0aW1pemF0aW9uIG9jY3Vycy5cblxuSSdsbCBjcm9zcy1yZWZlcmVuY2Ugd2hhdCBJJ20gdGhpbmtpbmcgaGVyZSB3aXRoIGVzdGFibGlzaGVkIHByYWN0aWNlcywgc28gSSB0aGluayBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgdG8gbG9vayBmb3IgaW5zcGlyYXRpb24gaW4gdGhlIHg4NiBjb2RlIGJhc2UuIFNwZWNpZmljYWxseSwgSSdsbCBjaGVjayBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIHNlYXJjaCBmb3IgYW55IGZ1bmN0aW9ucyByZWxhdGluZyB0byBgY29sbGFwc2VfcHVkX3BhZ2VgLiBXaGlsZSB0aGUgYXJjaGl0ZWN0dXJlcyBhcmUgZGlmZmVyZW50LCB0aGVyZSBtYXkgYmUgc29tZSBjb25jZXB0dWFsIG92ZXJsYXAgaW4gdGhlIHdheSB3ZSBoYW5kbGUgUFRFIGFuZCBQVUQgZW50cmllcywgZXZlbiBpZiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcmUgbmVjZXNzYXJpbHkgZGlzdGluY3QuIFRoYXQgZmlsZSB3b3VsZCBsaWtlbHkgaG9sZCBzb21lIGluc2lnaHRzIG9uIHN0cmF0ZWdpZXMgZm9yIG1lcmdpbmcgb3IgbW9kaWZ5aW5nIHBhZ2UgZGlyZWN0b3J5IGVudHJpZXMuIFRoaXMgc2VhcmNoIHdpbGwgc2VydmUgYXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA1NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjQzLjIxMjg0Mjc0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTYwMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3B1ZF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0xMjcyPXN0YXRpYyBpbnQgY29sbGFwc2VfcG1kX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xMzQxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTM0MjpzdGF0aWMgaW50IGNvbGxhcHNlX3B1ZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTEzNDMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTM5Nz1zdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE0MjItXFx0aWYgKGNvbGxhcHNlZClcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE0MjM6XFx0XFx0Y29sbGFwc2VkICs9IGNvbGxhcHNlX3B1ZF9wYWdlKHB1ZCwgYWRkciwgcGd0YWJsZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTQyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzU6NDMuMzQ5NDEwMDQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTM4NDQzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBkZXZlbG9wbWVudDpcblxuKipUYXJnZXRpbmcgeDg2IFBhZ2UgVGFibGUgRGlhZ25vc3RpY3MqKlxuXG5SaWdodCwgdGhpcyBzZWVtcyB0byBiZSBhYm91dCB4ODYgc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzIHdvdWxkIGJlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZXMsIGFuZCBjb25zaWRlcmluZyB0aGUgYXJjaGl0ZWN0dXJlLCB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgd291bGQgYmUgaW4gdGhlIHg4Ni1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsLiBcImFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXCIganVtcHMgb3V0IGFzIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdtIGJldHRpbmcgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgbG9naWMgZm9yIGluc3BlY3RpbmcgYW5kIGR1bXBpbmcgdGhlIGNvbnRlbnRzIG9mIHRob3NlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NzEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTo0Ni42NDMyNTY3NDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTA3OTIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXBfcHRfbGV2ZWxfZmlyc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDI0PWJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1OTpcXHRzdC5maXJzdF9sZXZlbCA9IHB0ZHVtcF9wdF9sZXZlbF9maXJzdChtbSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTo0Ni43NTQzNDAxMTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNjc0MDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSB4ODYgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqXG5cbkFscmlnaHQsIHNvIHRoaXMgbG9va3MgeDg2IHNwZWNpZmljLiBUaGF0J3MgZ29vZCB0byBrbm93IOKAkyBpdCBuYXJyb3dzIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIEhvbGQgb24uLi5JIGluaXRpYWxseSB0aG91Z2h0IHRoZSBjaGFuZ2VzIHdlcmUgaXNvbGF0ZWQgdG8gYG1tL3Ztc2Nhbi5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCBwYWdlIHdhbGtzLCBidXQgSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGlzLiBJJ3ZlIGdvdCBhIG5hZ2dpbmcgZmVlbGluZy4uLndhc24ndCBgd2Fsa19wdWRfcmFuZ2VgIGluIGBtbS9wYWdld2Fsay5jYCBhbHNvIHRvdWNoZWQ/IERvdWJsZSBjaGVja2luZyB0aGUgcGF0Y2ggZGVzY3JpcHRpb24uLi4gbm9wZSwgbG9va3MgbGlrZSBpdCdzICpqdXN0KiBgbW0vdm1zY2FuLmNgLiBCdXQgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGtpbmRzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMsIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCBgbW0vcGFnZXdhbGsuY2AgYW55d2F5LiBCZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5IOKAkyBJIHdhbnQgdG8gYmUgMTAwJSBjb25maWRlbnQgSSB1bmRlcnN0YW5kIHRoZSByaXBwbGUgZWZmZWN0cyBvZiB0aGlzLiBHb3R0YSBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJkZXBlbmRlbmNpZXMgb3IgaW1wbGljaXQgYXNzdW1wdGlvbnMgYXQgcGxheSB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgcGFnZSB3YWxraW5nIGxvZ2ljIGF0IHRoZSBQVUQgbGV2ZWwuIFRoaXMgY291bGQgYmUgbm90aGluZywgYnV0IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyBhIGdvb2QgaWRlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTo1MS40ODEwODM5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNTM3NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbGtfcHVkX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2V3YWxrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZXdhbGsuYz05Nj1zdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTE4NC1cXG5tbS9wYWdld2Fsay5jOjE4NTpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vcGFnZXdhbGsuYy0xODYtXFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL3BhZ2V3YWxrLmM9MjUwPXN0YXRpYyBpbnQgd2Fsa19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtMjc5LVxcdFxcdGlmIChoYXNfaGFuZGxlciB8fCBoYXNfaW5zdGFsbClcXG5tbS9wYWdld2Fsay5jOjI4MDpcXHRcXHRcXHRlcnIgPSB3YWxrX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHdhbGspO1xcbm1tL3BhZ2V3YWxrLmMtMjgxLVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjUxLjY0MjYyOTQ2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDgwMTIxNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNoYW5nZSBpcyBpc29sYXRlZCB0byBgbW0vdm1zY2FuLmNgLiBUaGF0J3MgYSBmb2N1c2VkIGFyZWEsIHdoaWNoIGlzIGdvb2QgZm9yIHF1aWNrIGFzc2Vzc21lbnQuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaGAsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBgcHRlX3ByZXNlbnRgLiBBaGEhIEkgc2VlIGl0J3Mgbm93IGFuIGlubGluZSBmdW5jdGlvbjpcblxuYGBgY1xuc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSlcbntcblx0cmV0dXJuIHB0ZV92YWxpZChwdGUpIHx8IHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKTtcbn1cbmBgYFxuXG5JbnN0ZWFkIG9mIHRoZSBtYWNybyBpdCB1c2VkIHRvIGJlLiBOb3QgYSBodWdlIHN0cnVjdHVyYWwgc2hpZnQsIGJ1dCBzb21ldGhpbmcgdG8gbm90ZS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBvciBpbmxpbmluZyBvcHRpbWl6YXRpb24gdG8gcmVkdWNlIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGluZGljYXRlcyBhIGZpeCBvciBpbXByb3ZlbWVudCB0byBob3cgZm9sZGVkIHBhZ2UgdGFibGVzIGFyZSBoYW5kbGVkIGR1cmluZyB0aGVpciB0cmF2ZXJzYWwsIEkgY2FuIGJlIHByZXR0eSBzdXJlIHRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhhdCBjb2RlIHNlY3Rpb24uIEl0IGxvb2tzIGZ1bmN0aW9uYWxseSBzb3VuZCBmcm9tIHRoaXMgcXVpY2sgc2Nhbi4gTm93IEknbGwgY2hlY2sgYG1tL3B0ZHVtcC5jYCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjaGFuZ2VkIHNlY3Rpb24sIHNwZWNpZmljYWxseSBgcHRkdW1wX3B0X2xldmVsX2ZpcnN0YC4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZSBkdW1wIGFuZCB3YWxrIGNvZGUgd2lsbCBzb2xpZGlmeSBteSBhc3Nlc3NtZW50IG9mIGl0cyBpbXBhY3QgYW5kIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzU6NTYuMTIyNzUzOTQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA1NzM2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRkdW1wX3B0X2xldmVsX2ZpcnN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3B0ZHVtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuLS1cXG5tbS9wdGR1bXAuYy0xOTktXFxubW0vcHRkdW1wLmM6MjAwOmludCBwdGR1bXBfcHRfbGV2ZWxfZmlyc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vcHRkdW1wLmMtMjAxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzU6NTYuMjUzMzMxOTc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mzk0MDIxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IEknbSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBHbG9iYWwgVXNhZ2UgaW4gYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgKipcblxuUmlnaHQsIHNvIGl0J3MgYmVlbiBmbGFnZ2VkIGFzIGVpdGhlciBleHBvcnRlZCBvciwgbW9yZSBsaWtlbHksIHVzZWQgZ2xvYmFsbHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayBob3cgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgIGlzIGltcGxlbWVudGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgTG9vbmdBcmNoIEtWTSBjb2RlLiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIGBhcmNoL2xvb25nYXJjaC9rdm0vbW11LmNgIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaGFuZGxlZC4gVGhhdCBmaWxlIHNob3VsZCBjb250YWluIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgcmVsZXZhbnQgdXNhZ2Ugb2YgdGhhdCB2YXJpYWJsZSwgd2hpY2ggc2hvdWxkIHByb3ZpZGUgdGhlIGNvbnRleHQgbmVlZGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YS1mbG93IHRocm91Z2ggdGhlIHZhcmlhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE4MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjU5Ljg5MjczNjgxOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2Mzk3NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhvc3RfcGZuX21hcHBpbmdfbGV2ZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYz02MDg9c3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNjQzLSAqXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jOjY0NDogKiBXQVJOSU5HISAgVXNlIG9mIGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoKSByZXF1aXJlcyB0aGUgY2FsbGVyIGFuZCB0aGUgZW5kXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTY0NS0gKiBjb25zdW1lciB0byBiZSB0aWVkIGludG8gS1ZNJ3MgaGFuZGxlcnMgZm9yIE1NVSBub3RpZmllciBldmVudHMhXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNjY1LSAqL1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYzo2NjY6c3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy02NjctXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYz03NzY9c3RhdGljIGludCBrdm1fbWFwX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdwYSwgYm9vbCB3cml0ZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy04NzEtXFx0XFx0LyogQ2hlY2sgcGFnZSBsZXZlbCBhYm91dCBob3N0IG1tdSovXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jOjg3MjpcXHRcXHRsZXZlbCA9IGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoa3ZtLCBnZm4sIG1lbXNsb3QpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy04NzMtXFx0XFx0aWYgKGxldmVsID09IDEpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MDAuMjU5MTM5MDMyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODA5MjczMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB2aXJ0dWFsaXphdGlvbiBhbmQgUklTQy1WIGFyY2hpdGVjdHVyZTpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIFBhZ2UgRmF1bHQgSGFuZGxlcioqXG5cblJpZ2h0LCBzbyB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgd2l0aGluIGBrdm1fbWFwX3BhZ2VgLCB0aGUgY29yZSBvZiB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbWVjaGFuaXNtLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHZpcnR1YWwtdG8tcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBpc3N1ZSwgbGlrZWx5IHdpdGhpbiBhIGd1ZXN0IFZNLiBXZSdyZSBpbiB0aGUgdGhpY2sgb2YgaXQsIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byBtYXAgYSBndWVzdCdzIHZpcnR1YWwgYWRkcmVzcyB0byBhIHBoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiwgb3IgcGVyaGFwcyBkZXRlcm1pbmluZyB3aHkgd2UgKmNhbid0KiBtYXAgaXQuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBvdmVyIHRvIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIFRoZSBmYWN0IHRoYXQgaXQgbWVudGlvbnMgdGhlIHNpemUgb2YgYW4gSFZBIChIb3N0IFZpcnR1YWwgQWRkcmVzcykgbWFwcGluZyBpcyB0ZWxsaW5nLCBzbyBsZXQncyBzdGFydCBieSBsb29raW5nIGZvciBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgLiBUaGF0IGZ1bmN0aW9uIHByb2JhYmx5IGhvbGRzIHRoZSBrZXkgdG8gZGV0ZXJtaW5pbmcgdGhlIGV4dGVudCBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB3ZSdyZSB0cnlpbmcgdG8gbWFwLCBvciBwZXJoYXBzIHdoeSBpdCdzIGZhaWxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGRldGVybWluZXMgdGhlIHJlcXVpcmVkIG1lbW9yeSBhbGxvY2F0aW9uLiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgTU1VLXJlbGF0ZWQgZXJyb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgxNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjA1Ljc0MDA2OTA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ2NzYyMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X2h2YV9tYXBwaW5nX3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmM9MzA0PXN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTM1OS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzozNjA6c3RhdGljIGludCBnZXRfaHZhX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMzYxLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaHZhKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NDE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00MzEtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDMyOlxcdFxcdHN6ID0gZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpO1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQzMy1cXHRcXHRpZiAoc3ogXFx1MDAzYyBQTURfU0laRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MDUuODU0NzQ5NTMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTA5OTQ4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhZ2UgRmF1bHRzIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3RgLCBhbmQgaXQncyB0cmlnZ2VyZWQgZHVyaW5nIEtWTSBwYWdlIGZhdWx0cy4gVGhhdCdzIHRoZSBjb250ZXh0LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIHBhdGhzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGdldCBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMuXG5cbkZpcnN0IHVwLCBgd2Fsa19wdWRfcmFuZ2VgIGluIGBtbS92bXNjYW4uY2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGl0ICpyZXF1aXJlcyogYENPTkZJR19MUlVfR0VOYC4gSSdsbCBoYXZlIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGVuIHRoZXJlJ3MgYHZtYWxsb2NfZmF1bHRgLCB3aGljaCBpcyBzcGVjaWZpYyB0byBSSVNDLVYgYW5kIG5lZWRzIGBDT05GSUdfUklTQ1ZgLiBNYWtlcyBzZW5zZTsgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZhdWx0IGhhbmRsaW5nLiBGb2xsb3dpbmcgdGhhdCwgdGhlcmUncyBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgIGluIHRoZSBSSVNDLVYgS1ZNIGNvZGUgKGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2ApLCB3aGljaCBkZXBlbmRzIG9uIGJvdGggYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX1JJU0NWYC4gQWdhaW4sIFJJU0MtViBhbmQgS1ZNLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cbk5leHQsIEkgc2VlIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYC4gQWdhaW4sIHRoZSBkZXBlbmRlbmN5IG9uIEtWTSwgYnV0IHRoaXMgdGltZSwgaXQncyBMb29uZ0FyY2gsIHNvIHdlIG5lZWQgYENPTkZJR19LVk1gICphbmQqIGBDT05GSUdfTE9PTkdBUkNIYC4gUmlnaHQuIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gbWFwcGluZ3MuIEFscmlnaHQuXG5cbmBjb2xsYXBzZV9wdWRfcGFnZWAgaW4gdGhlIHg4NiBjb2RlIGhhcyBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19YODZgLiBPa2F5LCBub3cgd2UncmUgc2VlaW5nIGFuIHg4NiBzcGVjaWZpYyBjb2RlIHBhdGguIE5vIHJlYWwgc3VycHJpc2VzIHRoZXJlLlxuXG5GaW5hbGx5LCBJIHNlZSBgcHRkdW1wX3B0X2xldmVsX2ZpcnN0YCBpbiBgbW0vcHRkdW1wLmNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBJIGRvbid0IHdvcmsgd2l0aCB0aGlzIG9mdGVuLiBJdCBzZWVtcyB0byBoYXZlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX1BURFVNUF9DT1JFYC4gQW5kIHRoYXQncyB0aGUgb25lIEkgc2hvdWxkIGZvY3VzIG9uIGF0IHRoaXMgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MTIuMzA1NzQ2ODg5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUwMjU3MjMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVERVTVBfQ09SRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNjoxMi40MTA3ODEyNzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxMTcwMjY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkZpbmRpbmcgdGhlIENvbmZpZ3VyYXRpb24gRmxhZyoqXG5cblJpZ2h0LCB0aW1lIHRvIHRyYWNrIGRvd24gdGhpcyBgUFREVU1QX0NPUkVgIHRoaW5nLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYSBmZWVsaW5nIHRoaXMgaXMgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyBhcmUgZGVmaW5lZC4gSSdsbCBzZWFyY2ggdGhvc2UgZmlsZXMgZm9yIHRoZSBleGFjdCBzdHJpbmcsIGBQVERVTVBfQ09SRWAuIEhvcGVmdWxseSwgdGhhdCdsbCBsZWFkIG1lIHRvIHRoZSByZWxldmFudCBvcHRpb24sIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBpdHMgZGVmYXVsdCB2YWx1ZS4gSSBleHBlY3QgdGhlIEtjb25maWcgZmlsZXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZS4gVGhlbiBJJ2xsIHVuZGVyc3RhbmQgd2hhdCBgUFREVU1QX0NPUkVgIGFjdHVhbGx5ICpkb2VzKiBhbmQgd2hlcmUgaXQncyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE1MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjE1LjYyMjQ4ODYwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkxOTMyMDE4NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURFVNUF9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MTkuNTQxODE1NTQ0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTE1MzkwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkh1bnRpbmcgRG93biBgcHRkdW1wLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYHB0ZHVtcC5jYCBpcyBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IChtbSkgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzIHdpdGggdGhlc2Uga2luZHMgb2YgY29kZSBzZWFyY2hlcywgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFyZSwgYW5kIEknZCBiZSB3aWxsaW5nIHRvIGJldCB0aGF0J3Mgd2hlcmUgSSBjYW4gcGlucG9pbnQgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBpdCBlaXRoZXIgZGlyZWN0bHkgbGlzdGVkIGFzIGEgc291cmNlIGZpbGUgZm9yIGEgcGFydGljdWxhciB0YXJnZXQsIG9yIHBlcmhhcHMgaW5jbHVkZWQgYXMgcGFydCBvZiBhIG1vcmUgZ2VuZXJhbCBwYXR0ZXJuIG9yIHJ1bGUuIE5vdyBsZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzY2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MjQuMzUzMzU2NzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTU1MjY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xNDE9b2JqLSQoQ09ORklHX01BUFBJTkdfRElSVFlfSEVMUEVSUykgKz0gbWFwcGluZ19kaXJ0eV9oZWxwZXJzLm9cXG5tbS9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX1BURFVNUCkgKz0gcHRkdW1wLm9cXG5tbS9NYWtlZmlsZS0xNDMtb2JqLSQoQ09ORklHX1BBR0VfUkVQT1JUSU5HKSArPSBwYWdlX3JlcG9ydGluZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjI0LjQ1NDkxNTUwM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ1ODQxNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQ29uZmlndXJhdGlvbiBBdWRpdCBhbmQgQ29kZSBOYXZpZ2F0aW9uKipcblxuQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0OiBgQ09ORklHX1BURFVNUGAgLSB0aGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LCBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMsIEkgbmVlZCB0byBjaGVjayBzb21lIHJlbGF0ZWQgb3B0aW9ucy4gSSdsbCBzdGFydCB3aXRoIGBDT05GSUdfTFJVX0dFTmAsIGRpZ2dpbmcgaW50byBgbW0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoYXQgcmV2ZWFscyBhbnl0aGluZyB1c2VmdWwuIEFuZCB5ZXMsIGl0J3MganVzdCBgQ09ORklHX0xSVV9HRU5gLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuXG5cbk5leHQsIEknbGwgc3dpdGNoIGdlYXJzIGFuZCB2ZXJpZnkgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfS1ZNYC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcywgc28gSSdsbCBjaGVjayBib3RoIGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYCBhbmQgYGFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnYC4gRXhjZWxsZW50LCBpdCBsb29rcyBjb25zaXN0ZW50IGFuZCBpdCdzIGFsc28gYENPTkZJR19LVk1gLlxuXG5GaW5hbGx5LCBmb3IgY29kZS1sZXZlbCBkZXBlbmRlbmNpZXMsIEkgbmVlZCB0byBjaGVjayBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgZm9yIHRoZSBmdW5jdGlvbiBgY29sbGFwc2VfcHVkX3BhZ2VgLiBMZXQncyBzZWUuLi4gaXQncyBpbmRlZWQgcHJlc2VudCB3aXRoaW4gYHNldF9tZW1vcnkuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXQgaXMgYSBjcml0aWNhbCBwYXRoIGFuZCBJIG5lZWQgdG8gYmUgc3VyZSBpdCdzIGFsd2F5cyBpbmNsdWRlZC4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjI4LjgwMDc2MDUzMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2ODgxNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTItXFxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlOjM6b2JqLXlcXHRcXHRcXHRcXHQ6PSBzZXRfbWVtb3J5Lm8gbWVtdHlwZS5vXFxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjI4LjkzNzY0NjU3MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzE3MTg4NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgSW5xdWlyeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHNwZWNpZmljIHN5bWJvbHMsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXkgYXJlIGNvbXBpbGVkLiBGaXJzdCwgSSdtIG5vdGluZyB0aGF0IGdlbmVyYWxseSwgd2UncmUgZGVhbGluZyB3aXRoIHg4NiBjb21waWxhdGlvbiwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBSSVNDLVYgdGFyZ2V0cy4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYGFyY2gvcmlzY3YvbW0vZmF1bHQuY2AgZm9yIGB2bWFsbG9jX2ZhdWx0YC4gUmlnaHQsIHRoYXQncyBSSVNDLVYgc3BlY2lmaWMuIE5vdywgZm9yIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCwgdGhhdCdzIGluIGBhcmNoL2xvb25nYXJjaC9rdm0vbW11LmNgLCB3aGljaCBjb21waWxlcyB3aXRoIExvb25nQXJjaCBhbmQgdW5kZXIgYENPTkZJR19LVk1gLiBUaGVuIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAsIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIGFsc28sIHNwZWNpZmljYWxseSBSSVNDLVYgYW5kIGBDT05GSUdfS1ZNYC5cblxuVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlOiBgd2Fsa19wdWRfcmFuZ2VgIGZyb20gYG1tL3Ztc2Nhbi5jYCwgYHZtYWxsb2NfZmF1bHRgIGZyb20gYGFyY2gvcmlzY3YvbW0vZmF1bHQuY2AsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAgZnJvbSBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLCBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAgZnJvbSBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCBmcm9tIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgYW5kIGZpbmFsbHkgYHB0ZHVtcF9wdF9sZXZlbF9maXJzdGAgZnJvbSBgbW0vcHRkdW1wLmNgLlxuXG5UbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eSBlbmFibGVkLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgY29uZmlnIG9wdGlvbnM6IGBMUlVfR0VOYCwgYEtWTWAsIGFuZCB0aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIGBQVERVTVBfREVCVUdGU2Agb3IgYFBURFVNUF9DT1JFYCBlbmFibGVzIGBDT05GSUdfUFREVU1QYCBmb3IgdGhlIHB0ZHVtcCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNzcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MzQuNjU0ODM3OTczWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI1ODI3NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVERVTVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9NDU9aWYgS1ZNXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0yMTY9Y29uZmlnIEFSQ0hfSEFTX1BURFVNUFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMTgtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMTk6Y29uZmlnIFBURFVNUFxcbm1tL0tjb25maWcuZGVidWctMjIwLVxcdGJvb2xcXG5tbS9LY29uZmlnLmRlYnVnLTIyMS1cXG5tbS9LY29uZmlnLmRlYnVnOjIyMjpjb25maWcgUFREVU1QX0RFQlVHRlNcXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cXHRib29sIFxcXCJFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNjozNi44ODA2NzUyMzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3Nzg0NTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKlBhZ2UgVGFibGUgRHVtcGluZyBDb25maWd1cmF0aW9uIGFuZCBDb2RlIFdhbGt0aHJvdWdoKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBrZXkgdG8gZW5hYmxpbmcgYFBURFVNUGAgZnVuY3Rpb25hbGl0eS4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgYWRkIGBQVERVTVBfREVCVUdGU2AgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2hpY2ggc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYWdlIHRhYmxlIGR1bXBpbmcgaXMgYWN0dWFsbHkgdHJpZ2dlcmVkIGFuZCBob3cgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBJJ2xsIHN0YXJ0IHdpdGggYHdhbGtfcHVkX3JhbmdlYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIC0gdGhhdCBwcm9iYWJseSBtZWFucyBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgcGFnZSB0YWJsZSB3YWxraW5nIHRoYXQgbWlnaHQgY2FsbCBpdC5cblxuT2theSwgSSBzZWUgYHBvcHVsYXRlX3B1ZGAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBUaGF0J3MgbGlrZWx5IGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIHBhZ2UgdXBwZXIgZGlyZWN0b3J5LiBUaGVuLCB0aGVyZSdzIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAgaW4gYGFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jYC4gVGhhdCBuYW1lIHNvdW5kcyBsaWtlIGEgc3Ryb25nIGNhbmRpZGF0ZSwgc28gSSdsbCBwcmlvcml0aXplIHRoYXQuXG5cbkdpdmVuIHRoZSBuYW1lLCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgIHNvdW5kcyBsaWtlIHRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgIGluIG9yZGVyIHRvIGRldGVybWluZSBob3cgaXQncyBjYWxsZWQgYW5kIHRoZSBwYXJhbWV0ZXJzIGl0IHJlY2VpdmVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHBhZ2UgdGFibGUgZHVtcGluZyBtZWNoYW5pc20gd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTc5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjQyLjI1ODUyMzE0OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDcxMTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQxNz1zdGF0aWMgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjMtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDI0OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyNS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCxcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ3Nz12b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3OC17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc5OlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBtbS1cXHUwMDNlcGdkLCBmYWxzZSwgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLX1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ4Mj12b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODktI2VuZGlmXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDkwOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBwZ2QsIGZhbHNlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDkxLX1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ5Mz12b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwMy1cXHRwZ2QgPSBrZXJuZWxfdG9fdXNlcl9wZ2RwKHBnZCk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA0OlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFxcdTAwMjZpbml0X21tLCBwZ2QsIHRydWUsIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDUtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz01MDg9Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTEyLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUxMzpcXHRyZXR1cm4gcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXFx1MDAyNmluaXRfbW0sIElOSVRfUEdELCB0cnVlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTE0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6NDIuNDUzOTk4MjQ0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTM2NTU5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGVwdGhzKipcblxuUmlnaHQsIHNvIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGlzLiBUaGF0IGZ1bmN0aW9uJ3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHBhZ2UgdGFibGUgd2Fsa2luZyBsb2dpYyByZXNpZGVzLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgaXQncyBkZWFsaW5nIHdpdGggdGhlIFBHRCBsZXZlbCwgcGFydGljdWxhcmx5LlxuXG5Ob3csIHdoZXJlJ3MgdGhlIGFjdHVhbCBwb3B1bGF0aW9uIG9mIHRoZSBQYWdlIFVwcGVyIERpcmVjdG9yeSAoUFVEKSBoYXBwZW5pbmc/IEdpdmVuIHRoaXMgaXMgeDg2LCBteSBmaXJzdCBwb3J0IG9mIGNhbGwgd2lsbCBiZSBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYHBvcHVsYXRlX3B1ZGAgZnVuY3Rpb24sIGFzc3VtaW5nIHdlIGhhdmUgYSBzaW1pbGFyIGFyY2hpdGVjdHVyZSBvbiB0aGUgc3lzdGVtIGluIHF1ZXN0aW9uLiBJdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBvZnRlbiB3aGVyZSB0aGUgbWFnaWMgb2YgbWVtb3J5IG1hcHBpbmcgZ2V0cyBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLiBUaGlzIGZpbGUgd2lsbCBnaXZlIG1lIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhlIFBVRCBlbnRyaWVzIGFyZSBiZWluZyBjcmFmdGVkIGFuZCBob3cgdGhlIFBBVCAoUGFnZSBBdHRyaWJ1dGUgVGFibGUpIGlzIGxpa2VseSBpbnRlcmFjdGluZyB0byBpbmZsdWVuY2UgbWVtb3J5IGNoYXJhY3RlcmlzdGljcyBhdCB0aGlzIGxldmVsLiBJIGJldCBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIFBBVCBzZXR1cCBmb3IgdGhpcyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ1OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjQ2LjE0NzY1Nzk4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjExNTExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwb3B1bGF0ZV9wdWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE2MTA9c3RhdGljIGxvbmcgcG9wdWxhdGVfcG1kKHN0cnVjdCBjcGFfZGF0YSAqY3BhLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xNjgzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTY4NDpzdGF0aWMgaW50IHBvcHVsYXRlX3B1ZChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgcDRkX3QgKnA0ZCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE2ODUtXFx0XFx0XFx0cGdwcm90X3QgcGdwcm90KVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0xNzY3PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGdkKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE4MDctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxODA4OlxcdHJldCA9IHBvcHVsYXRlX3B1ZChjcGEsIGFkZHIsIHA0ZCwgcGdwcm90KTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE4MDktXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6NDYuMjM5Nzc5NzkzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODEzNTI1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipGb2N1c2luZyBvbiBQb3RlbnRpYWwgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqXG5cblJpZ2h0LCBgcG9wdWxhdGVfcHVkYCBpcyBjb21pbmcgdXAgZnJlcXVlbnRseSBpbiBteSBtZW50YWwgbW9kZWwsIHNvIHRoYXTigJlzIGFub3RoZXIga2V5IGZ1bmN0aW9uIHRvIGRyaWxsIGRvd24gb24uIFdoZXJlIGRvZXMgdGhlIGFjdHVhbCBmbGFnIHNldHRpbmcgb2NjdXI/IEknbSB0aGlua2luZyBJIHNob3VsZCBsb29rIGF0IGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgIHRvIHNlZSBob3cgdGhlIGFjY2VzcyBmbGFncyBhcmUgc2V0IGluIHRoZSBQYWdlIFVwcGVyIERpcmVjdG9yeSAoUFVEKSBlbnRyeS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaW1wbGVtZW50YXRpb25zIG9yIGNhbGxzIHJlbGF0ZWQgdG8gYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2AuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGNydWNpYWwgd3JpdGUgcHJvdGVjdGlvbiBvciBhY2Nlc3MgY29udHJvbCBoYXBwZW5zIGF0IHRoYXQgbGV2ZWwuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA5NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjQ5LjYyMTEzNTY2MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyMzIwMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1ZHBfc2V0X2FjY2Vzc19mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGd0YWJsZS5jPTM5Mz1pbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTQxNC0jaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NDE1OmludCBwdWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNDE2LVxcdFxcdFxcdCAgcHVkX3QgKnB1ZHAsIHB1ZF90IGVudHJ5LCBpbnQgZGlydHkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjQ5LjkzMzQ2MTA1OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjgxMzM2Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgVGhpbmtpbmc6IFBpbnBvaW50aW5nIEtleSBNZW1vcnkgTWFuYWdlbWVudCBDb21wb25lbnRzKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBtZW50YWwgbWFwIG5lZWRzIGFuIHVwZGF0ZSByZWdhcmRpbmcga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZm9jdXNpbmcgb24gYXJlYXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdoZXJlIHRoZXJlIGFyZSBQVUQgKFBhZ2UgVXBwZXIgRGlyZWN0b3J5KSBpbnRlcmFjdGlvbnMgb3IgcmVsYXRlZCBjb25jZXB0cy4gXG5cblRoZSBpbW1lZGlhdGUgdGFyZ2V0cyB0aGF0IHBvcCB1cCBmb3IgbWUgYXMgY3J1Y2lhbCBmb2NhbCBwb2ludHMgYXJlOlxuXG4qICAgYHdhbGtfcHVkX3JhbmdlYCAtIFRoaXMgaXMgYSBjZW50cmFsIGNvbXBvbmVudCBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIGRlZmluaXRlbHkgYSBjb3JlIGZ1bmN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIG1lbW9yeSBzY2FubmluZyB3aXRoaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHN5c3RlbS5cbiogICBgdm1hbGxvY19mYXVsdGAgLSBMb2NhdGVkIGluIGBhcmNoL3Jpc2N2L21tL2ZhdWx0LmNgLiBUaGlzIHN1Z2dlc3RzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmYXVsdCBoYW5kbGluZyBtZWNoYW5pc20sIGxpa2VseSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHZtYWxsb2MgYXJlYXMgYXJlIGhhbmRsZWQgaW4gdGhpcyBhcmNoaXRlY3R1cmUuXG4qICAgYGdldF9odmFfbWFwcGluZ19zaXplYCAtIEZvdW5kIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIHRoaXMgb25lJ3MgS1ZNLXJlbGF0ZWQgYW5kIGNvbmNlcm5zIHRoZSBzaXplIG9mIGhvc3QgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzLCBhZ2FpbiBwb3RlbnRpYWxseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuXG4qICAgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgIC0gU2ltaWxhcmx5LCBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYC4gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIGZ1bmN0aW9uLCBidXQgb24gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRob3NlIHR3byBmdW5jdGlvbnMgcmVsYXRlIHRvIGVhY2ggb3RoZXIuXG4qICAgYGNvbGxhcHNlX3B1ZF9wYWdlYCBcdTAwMjYgYHBvcHVsYXRlX3B1ZGAgLSBCb3RoIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgdGhlc2UgYXJlIGV4dHJlbWVseSBpbnRlcmVzdGluZy4gVGhleSBkZWFsIHdpdGggY29sbGFwc2luZyBhbmQgcG9wdWxhdGluZyBQVUQgcGFnZXMsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSBzd2VldCBzcG90IG9mIG15IGZvY3VzLiBMaWtlbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgaHVnZSBwYWdlcyBvbiB4ODYuXG4qICAgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCAtICBUaGlzIGFwcGVhcnMgaW4gYGFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jYC4gUGFnZSB0YWJsZSBkdW1waW5nLCBlc3BlY2lhbGx5IGF0IHRoZSBQRy9QVUQgbGV2ZWwsIGlzIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIGFuZCBhbmFseXNpcy5cbiogICBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYCAtIEluIGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgLCB0aGlzIGlzIGEgUFVELXNwZWNpZmljIGZ1bmN0aW9uIGZvciBzZXR0aW5nIGFjY2VzcyBmbGFncy4gSXQgd291bGQgYmUgaW1wb3J0YW50IGZvciB0cmFja2luZyB0aGUgcGVybWlzc2lvbnMgb2YgUFVEIGVudHJpZXMuXG5cbkkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGNvbXBvbmVudHMgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmRpdGlvbnMgYnJpbmcgdGhlbSBpbnRvIHBsYXk6XG5cbiogICBgTFJVX0dFTmAgLSBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHRoZSBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIG1lY2hhbmlzbSBmb3IgcGFnZSByZWNsYW1hdGlvbi5cbiogICBgS1ZNYCAtIFRoaXMgbWVhbnMgdGhlc2UgYXJlIHJlbGV2YW50IHdoZW4gdGhlIEtlcm5lbCBWaXJ0dWFsIE1hY2hpbmUgaXMgdXNlZC5cbiogICBgUFREVU1QX0RFQlVHRlNgIC0gRGVidWdmcyBpbnRlcmZhY2UgZm9yIHBhZ2UgdGFibGUgZHVtcGluZy5cbiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIC0gVHJhbnNwYXJlbnQgSHVnZSBQYWdlcy4gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IGhhcyBhIGRpcmVjdCBpbmZsdWVuY2Ugb24gdGhlIHBhZ2UgdGFibGUgc3RydWN0dXJlLlxuXG5MZXQgbWUgYWxzbyB2ZXJpZnkgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRvZXMgaW5kZWVkIGVuYWJsZSBgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURgLiBUaGF0J3MgYSByZWFzb25hYmxlIGFzc3VtcHRpb24sIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gVGhpcyB3aWxsIGdpdmUgbWUgYSB2ZXJ5IHNoYXJwIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTEwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjU4LjIxNDgwMTY4NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMzk1ODQzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTEwODY9Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbi0tXFxuYXJjaC9LY29uZmlnLTEwODgtXFxuYXJjaC9LY29uZmlnOjEwODk6Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5hcmNoL0tjb25maWctMTA5MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM3OjAwLjM0ODc2Nzg5M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ3OTQzNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipJbnZlc3RpZ2F0aW5nIEFyY2hpdGVjdHVyZS1TcGVjaWZpYyBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgcGFydGljdWxhciBjb21wb25lbnQgaXMgY2hvc2VuIHdpdGhpbiBhIHN5c3RlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IHRoZSBzZWxlY3Rpb24gcHJvY2VzcyBpcywgaW4gZmFjdCwgZHJpdmVuIGJ5IHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgaXRzZWxmLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEl0IHNlZW1zIGxvZ2ljYWwsIGJ1dCBsZXQncyBub3QgYXNzdW1lIGFueXRoaW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIGEgY29uY3JldGUgZXhhbXBsZS4gSSBuZWVkIHRvIHNwZWNpZmljYWxseSBjaGVjayB3aGV0aGVyIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGlzIGEgdHJpZ2dlciBmb3IgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHg4NiBzeXN0ZW1zIHdpbGwgc2VsZWN0IHRoaXMgY29tcG9uZW50LiBJcyB4ODYgYSByZWxpYWJsZSBpbmRpY2F0b3I/IEFyZSB0aGVyZSBleGNlcHRpb25zPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhhdCBhcmNoaXRlY3R1cmUgaW50ZXJhY3RzIHdpdGggYW5kIHNlbGVjdHMgdGhlIGNvbXBvbmVudCBpbiBxdWVzdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1OTksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNzowMy43OTY3MTU0ODZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDcwMjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTAtXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gveDg2L0tjb25maWc6MjExOlxcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMjEyLVxcdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1AgICAgICAgICBpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgVVNFUkZBVUxURkRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6Mzc6MDMuOTQ3NDIyOTI1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTg5OTcyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBbmFseXNpcyBvZiBSZWxldmFudCBLZXJuZWwgQ29uZmlndXJhdGlvbnMgYW5kIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgaW5kZWVkIHJlbGV2YW50OiBgTFJVX0dFTmAsIGBLVk1gLCBgUFREVU1QX0RFQlVHRlNgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gU2VlbXMgb2J2aW91cywgYnV0IGdvb2QgdG8gY2hlY2suXG5cbmBMUlVfR0VOYCBkaXJlY3RseSB0aWVzIGludG8gTUdMUlUsIHNvIHRoYXQncyBzcG90IG9uLiBgS1ZNYCBtYWtlcyBzZW5zZSwgYW5kIHNvIGRvZXMgYFBURFVNUF9ERUJVR0ZTYC5cblxuTm93LCB0aGUgc3ltYm9sIHJlZmluZW1lbnQg4oCTIEkgbmVlZCB0byBrZWVwIHRoZSBmb2N1cyBsaXN0IG1hbmFnZWFibGUuIEkndmUgbmFycm93ZWQgaXQgZG93biB0bzogYHdhbGtfcHVkX3JhbmdlYCwgYHZtYWxsb2NfZmF1bHRgLCBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgLCBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAsIGBjb2xsYXBzZV9wdWRfcGFnZWAsIGBwb3B1bGF0ZV9wdWRgLCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgLCBhbmQgYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2AuIEVpZ2h0IHN5bWJvbHMsIHRoYXQgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC5cblxuSSBqdXN0IGRvdWJsZS1jaGVja2VkIGB3YWxrX3B1ZF9yYW5nZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyBzdGF0aWMsIHdoaWNoIHJhaXNlZCBhIG1vbWVudGFyeSBmbGFnLiBIb3dldmVyLCBzeXprYWxsZXIgKmNhbiogc3RpbGwgdGFyZ2V0IGl0IGlmIGl0J3MgaW4gdGhlIGtlcm5lbCBpbWFnZSwgYW5kIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBmb3IgcHJpb3JpdGl6YXRpb24uIEkgd2FzIHRoaW5raW5nIG9mIHN5c2NhbGxzLCBidXQgdGhpcyBpcyBhYm91dCBkaXJlY3RpbmcgZnV6emluZyBjb3ZlcmFnZSBtb3JlIGVmZmljaWVudGx5LlxuXG5UaGVuIEkgY2hlY2tlZCBgdm1hbGxvY19mYXVsdGAuIEFoLCBzdGF0aWMgaW5saW5lLiBUaGF0J3MgYSBwb3RlbnRpYWwgaXNzdWUg4oCTIGlmIGl0J3Mgc3RhdGljIGlubGluZSwgdGhlIHN5bWJvbCBtaWdodCBub3QgYmUgaW4gdGhlIHN5bWJvbCB0YWJsZSBhdCBhbGwuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBpdCdzIGRlZmluZWQuIExldCBtZSBjaGVjayBgYXJjaC9yaXNjdi9tbS9mYXVsdC5jYCB0byBzZWUgaWYgaXQgaXMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM3OjEwLjUwNjQyMzg1NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MjMzODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYWxsb2NfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9tbS9mYXVsdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbW0vZmF1bHQuYz0xNjA9YmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY29kZSxcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0xNjctXFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjE2ODpzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMTY5LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYz0yOTI9dm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zMjYtXFx0ICAgIHVubGlrZWx5KGFkZHIgXFx1MDAzZT0gVk1BTExPQ19TVEFSVCBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgVk1BTExPQ19FTkQpKSB7XFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjMyNzpcXHRcXHR2bWFsbG9jX2ZhdWx0KHJlZ3MsIGNvZGUsIGFkZHIpO1xcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zMjgtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNzoxMC42NDI2NjIwNjZaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MTA1MjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBoYW5kbGVfcGFnZV9mYXVsdCBmb3IgUklTQy1WIEFuYWx5c2lzKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgYHN0YXRpYyBpbmxpbmVgIGZ1bmN0aW9uIGhlcmUuIFRoYXQgbWVhbnMgdGhlIGNvbXBpbGVyJ3MgZ29pbmcgdG8gZm9sZCBpdCBkaXJlY3RseSBpbnRvIGBoYW5kbGVfcGFnZV9mYXVsdGAuIFNvLCBmb3IgbXkgUklTQy1WIGFuYWx5c2lzLCBgaGFuZGxlX3BhZ2VfZmF1bHRgIGJlY29tZXMgdGhlIGNydWNpYWwgc3ltYm9sLCB0aGUgY2VudHJhbCBwb2ludCBvZiBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBob3cgdGhpcyBpbmxpbmVkIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGl0LlxuXG5Ob3csIGxldCdzIHBpdm90IHRvIGNoZWNraW5nIGB3YWxrX3B1ZF9yYW5nZWAg4oCTIEknbGwgZmluZCBpdCBpbiBgbW0vdm1zY2FuLmNgLiBJdCBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byB0aGUgY29yZSB3b3JraW5ncywgY29uc2lkZXJpbmcgYGhhbmRsZV9wYWdlX2ZhdWx0YCBpcyBnb2luZyB0byBiZSBpbmxpbmVkIHdpdGggYHdhbGtfcHVkX3JhbmdlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNzoxNC4zMzM3MTgxNTJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDM2MjUyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3YWxrX3B1ZF9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0zNjM2PXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzcwOC1cXG5tbS92bXNjYW4uYzozNzA5OnN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1zY2FuLmMtMzcxMC1cXHRcXHRcXHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmM9Mzc1MT1zdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbi0tXFxubW0vdm1zY2FuLmMtMzc1NC1cXHRcXHQudGVzdF93YWxrID0gc2hvdWxkX3NraXBfdm1hLFxcbm1tL3Ztc2Nhbi5jOjM3NTU6XFx0XFx0LnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlLFxcbm1tL3Ztc2Nhbi5jLTM3NTYtXFx0XFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM3OjE0LjQzNDA4NjQ0NVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkyODI2NTUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgcGF0Y2ggYW5kIHdoZXJlIGl0IHRvdWNoZXMgdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0byBiZW5lZml0IGZyb20gZnV6emluZyB0byBlbnN1cmUgdGhlIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIGluIHBhZ2UgdGFibGUgdHJhdmVyc2FsLiBTaW5jZSBpdCBtb2RpZmllcyBwYWdlIHRhYmxlIGZvbGRpbmcgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcywgSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdC5cblxuRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCBzeW1ib2xzIGFyZSBpbiBwbGF5LiBJIHN0YXJ0ZWQgYnkgY2hlY2tpbmcgdGhlIHR5cGUgb2Ygc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlbGV2YW50OiBgc3RhdGljIGludGAgaXMgZGVmaW5pdGVseSBhIHNpZ24gdGhhdCB0aGV5J2xsIGJlIGluIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRob3NlIGFyZSBnb29kIGNhbmRpZGF0ZXMuIEkgbG9va2VkIGF0IGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCwgYW5kIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCBhbmQgYHBvcHVsYXRlX3B1ZGAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBhbmQgYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2AgaW4gYGFyY2gveDg2L21tL3BndGFibGUuY2AuICBJIGFsc28gY2hlY2tlZCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgIGluIGBhcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuY2Agd2hpY2ggdHVybmVkIG91dCB0byBiZSBhIGBib29sYCwgd2hpY2ggZG9lc24ndCBjaGFuZ2UgdGhpbmdzLlxuXG5Jbml0aWFsbHksIHRoaXMgZ2F2ZSBtZSBhIGxpc3Q6IGB3YWxrX3B1ZF9yYW5nZWAsIGBoYW5kbGVfcGFnZV9mYXVsdGAsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAsIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCwgYHBvcHVsYXRlX3B1ZGAsIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYC5cblxuVGhlbiBJIHJlbWVtYmVyZWQgYSBjcml0aWNhbCBndWlkZWxpbmU6IGF2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGhhbmRsZV9wYWdlX2ZhdWx0YCBpcyBkZWZpbml0ZWx5IGEgaG90IHBhdGgsIHNvIGl0J3Mgb2ZmIHRoZSBsaXN0LiBSZW1vdmluZyB0aGF0LCBJJ20gbGVmdCB3aXRoIHRoZXNlIGZvY3VzIHN5bWJvbHM6IGB3YWxrX3B1ZF9yYW5nZWAsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAsIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCwgYHBvcHVsYXRlX3B1ZGAsIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYC4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgbGlzdCB0byBzdGFydCB3aXRoLlxuXG5JJ20gYWxzbyBrZWVwaW5nIGluIG1pbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgTFJVX0dFTmAsIGBLVk1gLCBgUFREVU1QX0RFQlVHRlNgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggd2lsbCBpbmZsdWVuY2UgaG93IEkgc2V0IHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5UaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyBob3cgd2Ugd2FsayBhbmQgYWNjZXNzIGZvbGRlZCBwYWdlIHRhYmxlcy4gSXQgaW1wYWN0cyBLVk0sIE1HTFJVLCBQQVQsIGFuZCBwYWdlIHRhYmxlIGR1bXBpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFuZCBmdXp6aW5nIGlzIHRoZSByaWdodCBhcHByb2FjaCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSByZWdyZXNzaW9ucyBpbiBwYWdlIHRhYmxlIHRyYXZlcnNhbCBvciBhY2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDY2LCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNzoyNS4zNjIzNTQ4NTNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2MjE4MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIktWTVwiLFxuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2Fsa19wdWRfcmFuZ2VcIixcbiAgICBcImdldF9odmFfbWFwcGluZ19zaXplXCIsXG4gICAgXCJob3N0X3Bmbl9tYXBwaW5nX2xldmVsXCIsXG4gICAgXCJjb2xsYXBzZV9wdWRfcGFnZVwiLFxuICAgIFwicG9wdWxhdGVfcHVkXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZVwiLFxuICAgIFwicHVkcF9zZXRfYWNjZXNzX2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBmb2xkaW5nIG1hY3JvcyBhbmQgZnVuY3Rpb25zIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChBUk0sIEFSTTY0LCBMb29uZ0FyY2gsIE1JUFMsIE9wZW5SSVNDLCBSSVNDLVYsIHg4NikgYW5kIGdlbmVyaWMgaGVhZGVycy4gSXQgZml4ZXMgaG93IGZvbGRlZCBwYWdlIHRhYmxlcyBhcmUgd2Fsa2VkIGFuZCBhY2Nlc3NlZCwgd2hpY2ggaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gVGhlIGNoYW5nZXMgYWZmZWN0IEtWTSBwYWdlIGZhdWx0IGhhbmRsZXJzLCBNR0xSVSBwYWdlIHRhYmxlIHdhbGtlcnMsIFBBVCBtZW1vcnkgc2V0dGluZywgYW5kIHBhZ2UgdGFibGUgZHVtcGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHBhZ2UgdGFibGUgdHJhdmVyc2FsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIktWTVwiLFxuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2Fsa19wdWRfcmFuZ2VcIixcbiAgICBcImdldF9odmFfbWFwcGluZ19zaXplXCIsXG4gICAgXCJob3N0X3Bmbl9tYXBwaW5nX2xldmVsXCIsXG4gICAgXCJjb2xsYXBzZV9wdWRfcGFnZVwiLFxuICAgIFwicG9wdWxhdGVfcHVkXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZVwiLFxuICAgIFwicHVkcF9zZXRfYWNjZXNzX2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBmb2xkaW5nIG1hY3JvcyBhbmQgZnVuY3Rpb25zIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChBUk0sIEFSTTY0LCBMb29uZ0FyY2gsIE1JUFMsIE9wZW5SSVNDLCBSSVNDLVYsIHg4NikgYW5kIGdlbmVyaWMgaGVhZGVycy4gSXQgZml4ZXMgaG93IGZvbGRlZCBwYWdlIHRhYmxlcyBhcmUgd2Fsa2VkIGFuZCBhY2Nlc3NlZCwgd2hpY2ggaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gVGhlIGNoYW5nZXMgYWZmZWN0IEtWTSBwYWdlIGZhdWx0IGhhbmRsZXJzLCBNR0xSVSBwYWdlIHRhYmxlIHdhbGtlcnMsIFBBVCBtZW1vcnkgc2V0dGluZywgYW5kIHBhZ2UgdGFibGUgZHVtcGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHBhZ2UgdGFibGUgdHJhdmVyc2FsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfvpr8[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-23 17:15:25 +0000 UTC FinishedAt: 2026-07-23 17:37:27 +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": "8026da5cb0d39f7978af447eb5c967cbd36d1ac6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "KVM", "PTDUMP_DEBUGFS", "TRANSPARENT_HUGEPAGE" ], "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": "8026da5cb0d39f7978af447eb5c967cbd36d1ac6", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "LRU_GEN", "KVM", "PTDUMP_DEBUGFS", "TRANSPARENT_HUGEPAGE" ], "series_id": "1325a0dc-52be-4fee-bc99-6b94d740313a" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "walk_pud_range", "get_hva_mapping_size", "host_pfn_mapping_level", "collapse_pud_page", "populate_pud", "ptdump_walk_pgd_level_core", "pudp_set_access_flags" ], "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+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d2Fsa19wdWRfcmFuZ2UmIzM0OywKICAgICYjMzQ7Z2V0X2h2YV9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7aG9zdF9wZm5fbWFwcGluZ19sZXZlbCYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdWRfcGFnZSYjMzQ7LAogICAgJiMzNDtwb3B1bGF0ZV9wdWQmIzM0OywKICAgICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUmIzM0OywKICAgICYjMzQ7cHVkcF9zZXRfYWNjZXNzX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZm9sZGluZyBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoQVJNLCBBUk02NCwgTG9vbmdBcmNoLCBNSVBTLCBPcGVuUklTQywgUklTQy1WLCB4ODYpIGFuZCBnZW5lcmljIGhlYWRlcnMuIEl0IGZpeGVzIGhvdyBmb2xkZWQgcGFnZSB0YWJsZXMgYXJlIHdhbGtlZCBhbmQgYWNjZXNzZWQsIHdoaWNoIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBLVk0gcGFnZSBmYXVsdCBoYW5kbGVycywgTUdMUlUgcGFnZSB0YWJsZSB3YWxrZXJzLCBQQVQgbWVtb3J5IHNldHRpbmcsIGFuZCBwYWdlIHRhYmxlIGR1bXBpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBwYWdlIHRhYmxlIHRyYXZlcnNhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDYxYzQ0Njk4YWE5ODM1ZDc1ZTUzMDZjZTQxNWM0MDMwZDAzM2VmNWFcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1bCAyMyAxNzozNTowOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmhcbmluZGV4IGU3NDQxNWM5NTliZWFjLi44ODY1OWIzOGUyMzY0OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2Utbm9tbXUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oXG5AQCAtMTgsMTIgJiM0MzsxOCwxMiBAQFxuICAqL1xuIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfdDtcbiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG1kX3Q7XG4tdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBnZF90WzJdO1xuJiM0Mzt0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdkX3Q7XG4gdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBncHJvdF90O1xuIFxuICNkZWZpbmUgcHRlX3ZhbCh4KSAgICAgICh4KVxuICNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICh4KVxuLSNkZWZpbmUgcGdkX3ZhbCh4KVx0KCh4KVswXSlcbiYjNDM7I2RlZmluZSBwZ2RfdmFsKHgpICAgICAgKHgpXG4gI2RlZmluZSBwZ3Byb3RfdmFsKHgpICAgKHgpXG4gXG4gI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKHgpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtdHlwZXMuaCBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLXR5cGVzLmhcbmluZGV4IDY1MGU3OTNmNDE0MjlmLi43Zjg1Mzg0YWMzODZjYSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLXR5cGVzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLXR5cGVzLmhcbkBAIC0yNSw3ICYjNDM7MjUsNyBAQCB0eXBlZGVmIHN0cnVjdCB7IHB0ZXZhbF90IHBncHJvdDsgfSBwZ3Byb3RfdDtcbiBcbiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoKHgpLnB0ZSlcbiAjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoKHgpLnBtZClcbi0jZGVmaW5lIHBnZF92YWwoeClcdCgoeCkucGdkWzBdKVxuJiM0MzsjZGVmaW5lIHBnZF92YWwoeCkgICAgICAoKHgpLnBnZFswXSlcbiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoKHgpLnBncHJvdClcbiBcbiAjZGVmaW5lIF9fcHRlKHgpICAgICAgICAoKHB0ZV90KSB7ICh4KSB9IClcbkBAIC0zNiwxNCAmIzQzOzM2LDMyIEBAIHR5cGVkZWYgc3RydWN0IHsgcHRldmFsX3QgcGdwcm90OyB9IHBncHJvdF90O1xuIC8qXG4gICogLi4gd2hpbGUgdGhlc2UgbWFrZSBpdCBlYXNpZXIgb24gdGhlIGNvbXBpbGVyXG4gICovXG4mIzQzO3R5cGVkZWYgdTY0IHBnZHZhbF90O1xuJiM0MztcbiB0eXBlZGVmIHB0ZXZhbF90IHB0ZV90O1xuIHR5cGVkZWYgcG1kdmFsX3QgcG1kX3Q7XG4tdHlwZWRlZiBwbWR2YWxfdCBwZ2RfdFsyXTtcbiYjNDM7dHlwZWRlZiBwZ2R2YWxfdCBwZ2RfdDtcbiB0eXBlZGVmIHB0ZXZhbF90IHBncHJvdF90O1xuIFxuICNkZWZpbmUgcHRlX3ZhbCh4KSAgICAgICh4KVxuICNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICh4KVxuLSNkZWZpbmUgcGdkX3ZhbCh4KVx0KCh4KVswXSlcbiYjNDM7XG4mIzQzO3N0YXRpYyBpbmxpbmUgcG1kdmFsX3QgcGdkX3ZhbChwZ2RfdCBwZ2QpXG4mIzQzO3tcbiYjNDM7XHQvKlxuJiM0MztcdCAqIFRoZSBsb3dlciBhbmQgaGlnaGVyIHBtZHZhbF90IHZhbHVlcyBwb2ludCB0byB0aGUgc2FtZSBwYWdlLlxuJiM0MztcdCAqIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlaXIgb2Zmc2V0IHdpdGhpbiB0aGF0IHBhZ2UuXG4mIzQzO1x0ICogVGhlcmVmb3JlLCB3aGljaGV2ZXIgdmFsdWUgaXMgcmV0dXJuZWQsIHRoZSBiZWhhdmlvciBvZiBwbWRfcGZuKCksXG4mIzQzO1x0ICogcG1kX3BhZ2UoKSwgYW5kIG90aGVyIHVzZXJzIG9mIHBnZF92YWwoKSByZW1haW5zIHVuY2hhbmdlZC5cbiYjNDM7XHQgKlxuJiM0MztcdCAqIEhvd2V2ZXIsIHBnZF92YWwoKSBoYXMgaGlzdG9yaWNhbGx5IHJldHVybmVkIHRoZSBsb3dlciBwbWR2YWxfdCwgc29cbiYjNDM7XHQgKiBrZWVwIHJldHVybmluZyB0aGUgbG93ZXIgb25lLlxuJiM0MztcdCAqXG4mIzQzO1x0ICogU2VlIHRoZSBjb21tZW50cyBpbiBpbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5cbiYjNDM7XHQgKi9cbiYjNDM7XHRyZXR1cm4gKCoocG1kdmFsX3QgKCopWzJdKVx1MDAyNnBnZClbMF07XG4mIzQzO31cbiYjNDM7XG4gI2RlZmluZSBwZ3Byb3RfdmFsKHgpICAgKHgpXG4gXG4gI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKHgpXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA5ODI3OTVjZjQ1NjM3ZS4uZWFkZDAyN2ZlMGVlNDMgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTE0MSw4ICYjNDM7MTQxLDYgQEAgZXh0ZXJuIHBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbixcbiBcbiBleHRlcm4gcGdkX3Qgc3dhcHBlcl9wZ19kaXJbUFRSU19QRVJfUEdEXTtcbiBcbi0jZGVmaW5lIHBnZHBfZ2V0KHBncGQpXHRcdFJFQURfT05DRSgqcGdkcClcbi1cbiAjZGVmaW5lIHB1ZF9wYWdlKHB1ZClcdFx0cG1kX3BhZ2UoX19wbWQocHVkX3ZhbChwdWQpKSlcbiAjZGVmaW5lIHB1ZF93cml0ZShwdWQpXHRcdHBtZF93cml0ZShfX3BtZChwdWRfdmFsKHB1ZCkpKVxuIFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IGEyNjgxZDc1NTM1ODQxLi5hYWFlM2QxNDg5NWY2OSAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTE0MCwxMCAmIzQzOzE0MCwxNyBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpXG4gI2RlZmluZSBwdGVfbm9uZShwdGUpXHRcdCghcHRlX3ZhbChwdGUpKVxuICNkZWZpbmUgcHRlX3BhZ2UocHRlKVx0XHQocGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKSlcbiBcbiYjNDM7I2RlZmluZSBwdGVfdmFsaWQocHRlKVx0XHQoISEocHRlX3ZhbChwdGUpIFx1MDAyNiBQVEVfVkFMSUQpKVxuJiM0MzsjZGVmaW5lIHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKSBcXFxuJiM0MztcdCgocHRlX3ZhbChwdGUpIFx1MDAyNiAoUFRFX1ZBTElEIHwgUFRFX1BSRVNFTlRfSU5WQUxJRCkpID09IFBURV9QUkVTRU5UX0lOVkFMSUQpXG4mIzQzO1xuIC8qXG4gICogVGhlIGZvbGxvd2luZyBvbmx5IHdvcmsgaWYgcHRlX3ByZXNlbnQoKS4gVW5kZWZpbmVkIGJlaGF2aW91ciBvdGhlcndpc2UuXG4gICovXG4tI2RlZmluZSBwdGVfcHJlc2VudChwdGUpXHQocHRlX3ZhbGlkKHB0ZSkgfHwgcHRlX3ByZXNlbnRfaW52YWxpZChwdGUpKVxuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIGJvb2wgcHRlX3ByZXNlbnQocHRlX3QgcHRlKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIHB0ZV92YWxpZChwdGUpIHx8IHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKTtcbiYjNDM7fVxuICNkZWZpbmUgcHRlX3lvdW5nKHB0ZSlcdFx0KCEhKHB0ZV92YWwocHRlKSBcdTAwMjYgUFRFX0FGKSlcbiAjZGVmaW5lIHB0ZV9zcGVjaWFsKHB0ZSlcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9TUEVDSUFMKSlcbiAjZGVmaW5lIHB0ZV93cml0ZShwdGUpXHRcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9XUklURSkpXG5AQCAtMTY4LDkgJiM0MzsxNzUsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpXG4gI2RlZmluZSBwdGVfc3dfZGlydHkocHRlKVx0KCEhKHB0ZV92YWwocHRlKSBcdTAwMjYgUFRFX0RJUlRZKSlcbiAjZGVmaW5lIHB0ZV9kaXJ0eShwdGUpXHRcdChwdGVfc3dfZGlydHkocHRlKSB8fCBwdGVfaHdfZGlydHkocHRlKSlcbiBcbi0jZGVmaW5lIHB0ZV92YWxpZChwdGUpXHRcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9WQUxJRCkpXG4tI2RlZmluZSBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkgXFxcbi1cdCgocHRlX3ZhbChwdGUpIFx1MDAyNiAoUFRFX1ZBTElEIHwgUFRFX1BSRVNFTlRfSU5WQUxJRCkpID09IFBURV9QUkVTRU5UX0lOVkFMSUQpXG4gLypcbiAgKiBFeGVjdXRlLW9ubHkgdXNlciBtYXBwaW5ncyBkbyBub3QgaGF2ZSB0aGUgUFRFX1VTRVIgYml0IHNldC4gQWxsIHZhbGlkXG4gICoga2VybmVsIG1hcHBpbmdzIGhhdmUgdGhlIFBURV9VWE4gYml0IHNldC5cbkBAIC0xMTg4LDI5ICYjNDM7MTE5Miw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w1X2VuYWJsZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cbiAjZGVmaW5lIHA0ZF9jbGVhcl9maXhtYXAoKVxuIFxuICNkZWZpbmUgcDRkX29mZnNldF9raW1nKGRpcixhZGRyKVx0KChwNGRfdCAqKWRpcilcbi1cbi1zdGF0aWMgaW5saW5lXG4tcDRkX3QgKnA0ZF9vZmZzZXRfbG9ja2xlc3NfZm9sZGVkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcilcbi17XG4tXHQvKlxuLVx0ICogV2l0aCBydW50aW1lIGZvbGRpbmcgb2YgdGhlIHB1ZCwgcHVkX29mZnNldF9sb2NrbGVzcygpIHBhc3Nlc1xuLVx0ICogdGhlICYjMzk7cGdkX3QgKiYjMzk7IHdlIHJldHVybiBoZXJlIHRvIHA0ZF90b19mb2xkZWRfcHVkKCksIHdoaWNoXG4tXHQgKiB3aWxsIG9mZnNldCB0aGUgcG9pbnRlciBhc3N1bWluZyB0aGF0IGl0IHBvaW50cyBpbnRvXG4tXHQgKiBhIHBhZ2UtdGFibGUgcGFnZS4gSG93ZXZlciwgdGhlIGZhc3QgR1VQIHBhdGggcGFzc2VzIHVzIGFcbi1cdCAqIHBnZF90IGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHNvIHdlIG11c3QgdXNlIHRoZSBvcmlnaW5hbFxuLVx0ICogcG9pbnRlciBpbiAmIzM5O3BnZHAmIzM5OyB0byBjb25zdHJ1Y3QgdGhlIHA0ZCBwb2ludGVyIGluc3RlYWQgb2Zcbi1cdCAqIHVzaW5nIHRoZSBnZW5lcmljIHA0ZF9vZmZzZXRfbG9ja2xlc3MoKSBpbXBsZW1lbnRhdGlvbi5cbi1cdCAqXG4tXHQgKiBOb3RlOiByZXVzaW5nIHRoZSBvcmlnaW5hbCBwb2ludGVyIG1lYW5zIHRoYXQgd2UgbWF5XG4tXHQgKiBkZXJlZmVyZW5jZSB0aGUgc2FtZSAobGl2ZSkgcGFnZS10YWJsZSBlbnRyeSBtdWx0aXBsZSB0aW1lcy5cbi1cdCAqIFRoaXMgaXMgc2FmZSBiZWNhdXNlIGl0IGlzIHN0aWxsIG9ubHkgbG9hZGVkIG9uY2UgaW4gdGhlXG4tXHQgKiBjb250ZXh0IG9mIGVhY2ggbGV2ZWwgYW5kIHRoZSBDUFUgZ3VhcmFudGVlcyBzYW1lLWFkZHJlc3Ncbi1cdCAqIHJlYWQtYWZ0ZXItcmVhZCBvcmRlcmluZy5cbi1cdCAqL1xuLVx0cmV0dXJuIHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XG4tfVxuLSNkZWZpbmUgcDRkX29mZnNldF9sb2NrbGVzcyBwNGRfb2Zmc2V0X2xvY2tsZXNzX2ZvbGRlZFxuLVxuICNlbmRpZiAgLyogQ09ORklHX1BHVEFCTEVfTEVWRUxTIFx1MDAzZSA0ICovXG4gXG4gI2RlZmluZSBwZ2RfRVJST1IoZSlcdFxcXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCAxOTUyZTM0YmM4ZWUwMC4uNDM0ZTViNDgzNDY2NGYgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTYzNiw3ICYjNDM7NjM2LDkgQEAgc3RhdGljIGlubGluZSBsb25nIHBtZF9wcm90bm9uZShwbWRfdCBwbWQpXG4gI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUgKi9cbiBcbiAjZGVmaW5lIHBtZF9sZWFmKHBtZClcdFx0KChwbWRfdmFsKHBtZCkgXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXG4mIzQzOyNpZm5kZWYgX19QQUdFVEFCTEVfUE1EX0ZPTERFRFxuICNkZWZpbmUgcHVkX2xlYWYocHVkKVx0XHQoKHB1ZF92YWwocHVkKSBcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcbiYjNDM7I2VuZGlmXG4gXG4gLypcbiAgKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkIGFyZWEgdG8gY29wZSB3aXRoIHRoZSB2aXJ0dWFsIGFsaWFzaW5nXG5kaWZmIC0tZ2l0IGEvYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jIGIvYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jXG5pbmRleCBlMTA0ODk3YWE1MzI4NS4uODM3YjQwYmI2OTRmNGUgMTAwNjQ0XG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY1xuQEAgLTY2OSwxMCAmIzQzOzY2OSwxMCBAQCBzdGF0aWMgaW50IGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gXHRpbnQgbGV2ZWwgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBodmE7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVx0cGdkX3QgcGdkO1xuLVx0cDRkX3QgcDRkO1xuLVx0cHVkX3QgcHVkO1xuLVx0cG1kX3QgcG1kO1xuJiM0MztcdHBnZF90ICpwZ2RwLCBwZ2Q7XG4mIzQzO1x0cDRkX3QgKnA0ZHAsIHA0ZDtcbiYjNDM7XHRwdWRfdCAqcHVkcCwgcHVkO1xuJiM0MztcdHBtZF90ICpwbWRwLCBwbWQ7XG4gXG4gXHQvKlxuIFx0ICogTm90ZSwgdXNpbmcgdGhlIGFscmVhZHktcmV0cmlldmVkIG1lbXNsb3QgYW5kIF9fZ2ZuX3RvX2h2YV9tZW1zbG90KClcbkBAIC02OTgsMTkgJiM0Mzs2OTgsMjMgQEAgc3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxuIFx0ICogdmFsdWUpIGFuZCB0aGVuIHAqZF9vZmZzZXQoKSB3YWxrcyBpbnRvIHRoZSB0YXJnZXQgaHVnZSBwYWdlIGluc3RlYWRcbiBcdCAqIG9mIHRoZSBvbGQgcGFnZSB0YWJsZSAoc2VlcyB0aGUgbmV3IHZhbHVlKS5cbiBcdCAqL1xuLVx0cGdkID0gcGdkcF9nZXQocGdkX29mZnNldChrdm0tXHUwMDNlbW0sIGh2YSkpO1xuJiM0MztcdHBnZHAgPSBwZ2Rfb2Zmc2V0KGt2bS1cdTAwM2VtbSwgaHZhKTtcbiYjNDM7XHRwZ2QgPSBwZ2RwX2dldChwZ2RwKTtcbiBcdGlmIChwZ2Rfbm9uZShwZ2QpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHA0ZCA9IHA0ZHBfZ2V0KHA0ZF9vZmZzZXQoXHUwMDI2cGdkLCBodmEpKTtcbiYjNDM7XHRwNGRwID0gcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGh2YSk7XG4mIzQzO1x0cDRkID0gcDRkcF9nZXQocDRkcCk7XG4gXHRpZiAocDRkX25vbmUocDRkKSB8fCAhcDRkX3ByZXNlbnQocDRkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRwdWQgPSBwdWRwX2dldChwdWRfb2Zmc2V0KFx1MDAyNnA0ZCwgaHZhKSk7XG4mIzQzO1x0cHVkcCA9IHB1ZF9vZmZzZXRfbG9ja2xlc3MocDRkcCwgcDRkLCBodmEpO1xuJiM0MztcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZHApO1xuIFx0aWYgKHB1ZF9ub25lKHB1ZCkgfHwgIXB1ZF9wcmVzZW50KHB1ZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cG1kID0gcG1kcF9nZXQocG1kX29mZnNldChcdTAwMjZwdWQsIGh2YSkpO1xuJiM0MztcdHBtZHAgPSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgaHZhKTtcbiYjNDM7XHRwbWQgPSBwbWRwX2dldChwbWRwKTtcbiBcdGlmIChwbWRfbm9uZShwbWQpIHx8ICFwbWRfcHJlc2VudChwbWQpKVxuIFx0XHRnb3RvIG91dDtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggZmE3YjkzNWY5NDdjYTAuLjE1MWY0ZDE1YmQxMmJmIDEwMDY0NFxuLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuQEAgLTc0NSw4ICYjNDM7NzQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sXG4gXG4gI2lmZGVmIF9QQUdFX0hVR0VcbiAjZGVmaW5lIHBtZF9sZWFmKHBtZClcdCgocG1kX3ZhbChwbWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuJiM0MzsjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcdCgocHVkX3ZhbChwdWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuICNlbmRpZlxuJiM0MzsjZW5kaWZcbiBcbiAjZGVmaW5lIGd1cF9mYXN0X3Blcm1pdHRlZChzdGFydCwgZW5kKVx0KCFjcHVfaGFzX2RjX2FsaWFzZXMpXG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggNmI4OTk5NmQwYjYyOGUuLjVhNDkxY2QwZjAwODY4IDEwMDY0NFxuLS0tIGEvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMzMxLDkgJiM0MzszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3BhZ2VfdmFkZHIocG1kX3QgcG1kKVxuIFx0cmV0dXJuICgodW5zaWduZWQgbG9uZykgX192YShwbWRfdmFsKHBtZCkgXHUwMDI2IFBBR0VfTUFTSykpO1xuIH1cbiBcbi0jZGVmaW5lIF9fcG1kX29mZnNldChhZGRyZXNzKSBcXFxuLVx0KCgoYWRkcmVzcykgXHUwMDNlXHUwMDNlIFBNRF9TSElGVCkgXHUwMDI2IChQVFJTX1BFUl9QTUQtMSkpXG4tXG4gI2RlZmluZSBQRk5fUFRFX1NISUZUXHRcdFBBR0VfU0hJRlRcbiAjZGVmaW5lIHB0ZV9wZm4oeClcdFx0KCh1bnNpZ25lZCBsb25nKSgoKHgpLnB0ZSkpIFx1MDAzZVx1MDAzZSBQQUdFX1NISUZUKVxuICNkZWZpbmUgcGZuX3B0ZShwZm4sIHByb3QpICBfX3B0ZSgoKChwZm4pIFx1MDAzY1x1MDAzYyBQQUdFX1NISUZUKSkgfCBwZ3Byb3RfdmFsKHByb3QpKVxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbmluZGV4IDA4MmY5YjI2MTczMzg3Li42ZDYwNDJiODFkNzkwOSAxMDA2NDRcbi0tLSBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuQEAgLTM2MiwxMCAmIzQzOzM2MiwxMCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRpbnQgc2l6ZSA9IFBBR0VfU0laRTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRwZ2RfdCBwZ2Q7XG4tXHRwNGRfdCBwNGQ7XG4tXHRwdWRfdCBwdWQ7XG4tXHRwbWRfdCBwbWQ7XG4mIzQzO1x0cGdkX3QgKnBnZHAsIHBnZDtcbiYjNDM7XHRwNGRfdCAqcDRkcCwgcDRkO1xuJiM0MztcdHB1ZF90ICpwdWRwLCBwdWQ7XG4mIzQzO1x0cG1kX3QgKnBtZHAsIHBtZDtcbiBcbiBcdC8qXG4gXHQgKiBEaXNhYmxlIElSUXMgdG8gcHJldmVudCBjb25jdXJyZW50IHRlYXIgZG93biBvZiBob3N0IHBhZ2UgdGFibGVzLFxuQEAgLTM4MSwxNSAmIzQzOzM4MSwxOCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbiBcdCAqIHZhbHVlKSBhbmQgdGhlbiBwKmRfb2Zmc2V0KCkgd2Fsa3MgaW50byB0aGUgdGFyZ2V0IGh1Z2UgcGFnZSBpbnN0ZWFkXG4gXHQgKiBvZiB0aGUgb2xkIHBhZ2UgdGFibGUgKHNlZXMgdGhlIG5ldyB2YWx1ZSkuXG4gXHQgKi9cbi1cdHBnZCA9IHBnZHBfZ2V0KHBnZF9vZmZzZXQoa3ZtLVx1MDAzZW1tLCBodmEpKTtcbiYjNDM7XHRwZ2RwID0gcGdkX29mZnNldChrdm0tXHUwMDNlbW0sIGh2YSk7XG4mIzQzO1x0cGdkID0gcGdkcF9nZXQocGdkcCk7XG4gXHRpZiAocGdkX25vbmUocGdkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRwNGQgPSBwNGRwX2dldChwNGRfb2Zmc2V0KFx1MDAyNnBnZCwgaHZhKSk7XG4mIzQzO1x0cDRkcCA9IHA0ZF9vZmZzZXRfbG9ja2xlc3MocGdkcCwgcGdkLCBodmEpO1xuJiM0MztcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZHApO1xuIFx0aWYgKHA0ZF9ub25lKHA0ZCkgfHwgIXA0ZF9wcmVzZW50KHA0ZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cHVkID0gcHVkcF9nZXQocHVkX29mZnNldChcdTAwMjZwNGQsIGh2YSkpO1xuJiM0MztcdHB1ZHAgPSBwdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZHAsIHA0ZCwgaHZhKTtcbiYjNDM7XHRwdWQgPSBwdWRwX2dldChwdWRwKTtcbiBcdGlmIChwdWRfbm9uZShwdWQpIHx8ICFwdWRfcHJlc2VudChwdWQpKVxuIFx0XHRnb3RvIG91dDtcbiBcbkBAIC0zOTgsNyAmIzQzOzQwMSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHBtZCA9IHBtZHBfZ2V0KHBtZF9vZmZzZXQoXHUwMDI2cHVkLCBodmEpKTtcbiYjNDM7XHRwbWRwID0gcG1kX29mZnNldF9sb2NrbGVzcyhwdWRwLCBwdWQsIGh2YSk7XG4mIzQzO1x0cG1kID0gcG1kcF9nZXQocG1kcCk7XG4gXHRpZiAocG1kX25vbmUocG1kKSB8fCAhcG1kX3ByZXNlbnQocG1kKSlcbiBcdFx0Z290byBvdXQ7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jIGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG5pbmRleCAwNGVkNmY4YWNhZTRmZC4uYjJiY2FmMTBkMTNmMWQgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuY1xuQEAgLTE2NywxNCAmIzQzOzE2NywxNiBAQCBiYWRfYXJlYShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBjb2RlLFxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbi1cdHBnZF90ICpwZ2QsICpwZ2Rfaztcbi1cdHB1ZF90ICpwdWRfaztcbi1cdHA0ZF90ICpwNGRfaztcbi1cdHBtZF90ICpwbWRfaztcbi1cdHB0ZV90ICpwdGVfaztcbiYjNDM7XHRwZ2RfdCAqcGdkcF9rLCAqcGdkcCwgcGdkX2s7XG4mIzQzO1x0cDRkX3QgKnA0ZHBfaywgKnA0ZHA7XG4mIzQzO1x0cHVkX3QgKnB1ZHBfaywgKnB1ZHAsIHB1ZF9rO1xuJiM0MztcdHBtZF90ICpwbWRwX2ssICpwbWRwLCBwbWRfaztcbiYjNDM7XHRwdGVfdCAqcHRlcF9rO1xuIFx0aW50IGluZGV4O1xuIFx0dW5zaWduZWQgbG9uZyBwZm47XG4gXG4mIzQzO1x0QlVJTERfQlVHX09OKENPTkZJR19QR1RBQkxFX0xFVkVMUyAhPSA1IFx1MDAyNlx1MDAyNiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgIT0gMik7XG4mIzQzO1xuIFx0LyogVXNlciBtb2RlIGFjY2Vzc2VzIGp1c3QgY2F1c2UgYSBTSUdTRUdWICovXG4gXHRpZiAodXNlcl9tb2RlKHJlZ3MpKVxuIFx0XHRyZXR1cm4gZG9fdHJhcChyZWdzLCBTSUdTRUdWLCBjb2RlLCBhZGRyKTtcbkBAIC0xODksMzkgJiM0MzsxOTEsNTEgQEAgc3RhdGljIGlubGluZSB2b2lkIHZtYWxsb2NfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFcbiBcdCAqL1xuIFx0aW5kZXggPSBwZ2RfaW5kZXgoYWRkcik7XG4gXHRwZm4gPSBjc3JfcmVhZChDU1JfU0FUUCkgXHUwMDI2IFNBVFBfUFBOO1xuLVx0cGdkID0gKHBnZF90ICopcGZuX3RvX3ZpcnQocGZuKSAmIzQzOyBpbmRleDtcbi1cdHBnZF9rID0gaW5pdF9tbS5wZ2QgJiM0MzsgaW5kZXg7XG4gXG4tXHRpZiAoIXBnZF9wcmVzZW50KHBnZHBfZ2V0KHBnZF9rKSkpIHtcbiYjNDM7XHRwZ2RwID0gKHBnZF90ICopcGZuX3RvX3ZpcnQocGZuKSAmIzQzOyBpbmRleDtcbiYjNDM7XHRwZ2RwX2sgPSBpbml0X21tLnBnZCAmIzQzOyBpbmRleDtcbiYjNDM7XG4mIzQzO1x0cGdkX2sgPSBwZ2RwX2dldChwZ2RwX2spO1xuJiM0MztcdGlmICghcGdkX3ByZXNlbnQocGdkX2spKSB7XG4gXHRcdG5vX2NvbnRleHQocmVncywgYWRkcik7XG4gXHRcdHJldHVybjtcbiBcdH1cbi1cdHNldF9wZ2QocGdkLCBwZ2RwX2dldChwZ2RfaykpO1xuJiM0MztcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNSlcbiYjNDM7XHRcdHNldF9wZ2QocGdkcCwgcGdkX2spO1xuIFxuLVx0cDRkX2sgPSBwNGRfb2Zmc2V0KHBnZF9rLCBhZGRyKTtcbi1cdGlmICghcDRkX3ByZXNlbnQocDRkcF9nZXQocDRkX2spKSkge1xuJiM0MztcdHA0ZHAgPSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpO1xuJiM0MztcdHA0ZHBfayA9IHA0ZF9vZmZzZXQocGdkcF9rLCBhZGRyKTtcbiYjNDM7XHRpZiAoIXA0ZF9wcmVzZW50KHA0ZHBfZ2V0KHA0ZHBfaykpKSB7XG4gXHRcdG5vX2NvbnRleHQocmVncywgYWRkcik7XG4gXHRcdHJldHVybjtcbiBcdH1cbiBcbi1cdHB1ZF9rID0gcHVkX29mZnNldChwNGRfaywgYWRkcik7XG4tXHRpZiAoIXB1ZF9wcmVzZW50KHB1ZHBfZ2V0KHB1ZF9rKSkpIHtcbiYjNDM7XHRwdWRwID0gcHVkX29mZnNldChwNGRwLCBhZGRyKTtcbiYjNDM7XHRwdWRwX2sgPSBwdWRfb2Zmc2V0KHA0ZHBfaywgYWRkcik7XG4mIzQzO1xuJiM0MztcdHB1ZF9rID0gcHVkcF9nZXQocHVkcF9rKTtcbiYjNDM7XHRpZiAoIXB1ZF9wcmVzZW50KHB1ZF9rKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRpZiAocHVkX2xlYWYocHVkcF9nZXQocHVkX2spKSlcbiYjNDM7XHRpZiAocHVkX2xlYWYocHVkX2spKVxuIFx0XHRnb3RvIGZsdXNoX3RsYjtcbiBcbiBcdC8qXG4gXHQgKiBTaW5jZSB0aGUgdm1hbGxvYyBhcmVhIGlzIGdsb2JhbCwgaXQgaXMgdW5uZWNlc3NhcnlcbiBcdCAqIHRvIGNvcHkgaW5kaXZpZHVhbCBQVEVzXG4gXHQgKi9cbi1cdHBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcik7XG4tXHRpZiAoIXBtZF9wcmVzZW50KHBtZHBfZ2V0KHBtZF9rKSkpIHtcbiYjNDM7XHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcbiYjNDM7XHRwbWRwX2sgPSBwbWRfb2Zmc2V0KHB1ZHBfaywgYWRkcik7XG4mIzQzO1xuJiM0MztcdHBtZF9rID0gcG1kcF9nZXQocG1kcF9rKTtcbiYjNDM7XHRpZiAoIXBtZF9wcmVzZW50KHBtZF9rKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRpZiAocG1kX2xlYWYocG1kcF9nZXQocG1kX2spKSlcbiYjNDM7XHRpZiAoQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDIpXG4mIzQzO1x0XHRzZXRfcG1kKHBtZHAsIHBtZF9rKTtcbiYjNDM7XHRpZiAocG1kX2xlYWYocG1kX2spKVxuIFx0XHRnb3RvIGZsdXNoX3RsYjtcbiBcbiBcdC8qXG5AQCAtMjMwLDggJiM0MzsyNDQsOCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYVxuIFx0ICogYWRkcmVzc2VzLiBJZiB3ZSBkb24mIzM5O3QgZG8gdGhpcywgdGhpcyB3aWxsIGp1c3RcbiBcdCAqIHNpbGVudGx5IGxvb3AgZm9yZXZlci5cbiBcdCAqL1xuLVx0cHRlX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfaywgYWRkcik7XG4tXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZXBfZ2V0KHB0ZV9rKSkpIHtcbiYjNDM7XHRwdGVwX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwX2ssIGFkZHIpO1xuJiM0MztcdGlmICghcHRlX3ByZXNlbnQocHRlcF9nZXQocHRlcF9rKSkpIHtcbiBcdFx0bm9fY29udGV4dChyZWdzLCBhZGRyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNcbmluZGV4IDJhZmE3YTIzMzQwZTkyLi40ZTU0NTk4ODk1M2EwYiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuY1xuQEAgLTI3LDYgJiM0MzsyNyw3IEBAXG4gICovXG4gc3RydWN0IHBnX3N0YXRlIHtcbiBcdHN0cnVjdCBwdGR1bXBfc3RhdGUgcHRkdW1wO1xuJiM0MztcdGludCBmaXJzdF9sZXZlbDtcbiBcdGludCBsZXZlbDtcbiBcdHBncHJvdHZhbF90IGN1cnJlbnRfcHJvdDtcbiBcdHBncHJvdHZhbF90IGVmZmVjdGl2ZV9wcm90O1xuQEAgLTI1NCw3ICYjNDM7MjU1LDcgQEAgc3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIGludCBsZXZlbCwgdTY0IHZhbClcbiBcdHBncHJvdHZhbF90IHByb3QgPSB2YWwgXHUwMDI2IFBURV9GTEFHU19NQVNLO1xuIFx0cGdwcm90dmFsX3QgZWZmZWN0aXZlO1xuIFxuLVx0aWYgKGxldmVsIFx1MDAzZSAwKSB7XG4mIzQzO1x0aWYgKGxldmVsIFx1MDAzZSBzdC1cdTAwM2VmaXJzdF9sZXZlbCkge1xuIFx0XHRwZ3Byb3R2YWxfdCBoaWdoZXJfcHJvdCA9IHN0LVx1MDAzZXByb3RfbGV2ZWxzW2xldmVsIC0gMV07XG4gXG4gXHRcdGVmZmVjdGl2ZSA9IChoaWdoZXJfcHJvdCBcdTAwMjYgcHJvdCBcdTAwMjYgKF9QQUdFX1VTRVIgfCBfUEFHRV9SVykpIHxcbkBAIC00NTUsNiAmIzQzOzQ1Niw4IEBAIGJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHQuc2VxXHRcdD0gbVxuIFx0fTtcbiBcbiYjNDM7XHRzdC5maXJzdF9sZXZlbCA9IHB0ZHVtcF9wdF9sZXZlbF9maXJzdChtbSk7XG4mIzQzO1xuIFx0cHRkdW1wX3dhbGtfcGdkKFx1MDAyNnN0LnB0ZHVtcCwgbW0sIHBnZCk7XG4gXG4gXHRpZiAoIWNoZWNrd3gpXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbmluZGV4IDA3ODY4OWFhNzIwNmY4Li45MWIzM2EyNjVhNDMxZiAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcbkBAIC0xMzQ2LDcgJiM0MzsxMzQ2LDcgQEAgc3RhdGljIGludCBjb2xsYXBzZV9wdWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRwbWRfdCAqcG1kLCBmaXJzdDtcbiBcdGludCBpO1xuIFxuLVx0aWYgKCFkaXJlY3RfZ2JwYWdlcylcbiYjNDM7XHRpZiAoQ09ORklHX1BHVEFCTEVfTEVWRUxTID09IDIgfHwgIWRpcmVjdF9nYnBhZ2VzKVxuIFx0XHRyZXR1cm4gMDtcbiBcbiBcdGFkZHIgXHUwMDI2PSBQVURfTUFTSztcbkBAIC0xNzMwLDcgJiM0MzsxNzMwLDggQEAgc3RhdGljIGludCBwb3B1bGF0ZV9wdWQoc3RydWN0IGNwYV9kYXRhICpjcGEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHA0ZF90ICpwNGQsXG4gXHQvKlxuIFx0ICogTWFwIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgZnJvbSB0aGUgR2IgYm91bmRhcnksIHBvc3NpYmx5IHdpdGggMUcgcGFnZXNcbiBcdCAqL1xuLVx0d2hpbGUgKGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9HQlBBR0VTKSBcdTAwMjZcdTAwMjYgZW5kIC0gc3RhcnQgXHUwMDNlPSBQVURfU0laRSkge1xuJiM0MztcdHdoaWxlIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDMgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9HQlBBR0VTKSBcdTAwMjZcdTAwMjZcbiYjNDM7XHQgICAgICAgZW5kIC0gc3RhcnQgXHUwMDNlPSBQVURfU0laRSkge1xuIFx0XHRzZXRfcHVkKHB1ZCwgcHVkX21raHVnZShwZm5fcHVkKGNwYS1cdTAwM2VwZm4sXG4gXHRcdFx0XHQgICBjYW5vbl9wZ3Byb3QocHVkX3BncHJvdCkpKSk7XG4gXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXG5pbmRleCBmMzJmYWNkYjMwMzU0My4uZWRhZDg0N2EyZWNkYjggMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BndGFibGUuY1xuQEAgLTQxMSw2ICYjNDM7NDExLDcgQEAgaW50IHBtZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdHJldHVybiBjaGFuZ2VkO1xuIH1cbiBcbiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4gaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgcHVkX3QgKnB1ZHAsIHB1ZF90IGVudHJ5LCBpbnQgZGlydHkpXG4ge1xuQEAgLTQzMCw2ICYjNDM7NDMxLDcgQEAgaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFxuIFx0cmV0dXJuIGNoYW5nZWQ7XG4gfVxuJiM0MzsjZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi9cbiAjZW5kaWZcbiBcbiBib29sIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wNGQuaFxuaW5kZXggODljMjFmODRjZmZiZTIuLjE5ZjVhNmVkYTc2Y2MxIDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oXG5AQCAtMjIsMjYgJiM0MzsyMiw2MSBAQCBzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpXHRcdHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZClcdFx0eyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZClcdHsgcmV0dXJuIDE7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2NsZWFyKHBnZF90ICpwZ2QpXHR7IH1cbiYjNDM7c3RhdGljIGlubGluZSBib29sIHBnZF9sZWFmKHBnZF90IHBnZClcdFx0eyByZXR1cm4gZmFsc2U7IH1cbiYjNDM7I2RlZmluZSBwZ2RfbGVhZiBwZ2RfbGVhZlxuICNkZWZpbmUgcDRkX0VSUk9SKHA0ZClcdFx0XHRcdChwZ2RfRVJST1IoKHA0ZCkucGdkKSlcbiBcbiAjZGVmaW5lIHBnZF9wb3B1bGF0ZShtbSwgcGdkLCBwNGQpXHRcdGRvIHsgfSB3aGlsZSAoMClcbiAjZGVmaW5lIHBnZF9wb3B1bGF0ZV9zYWZlKG1tLCBwZ2QsIHA0ZClcdFx0ZG8geyB9IHdoaWxlICgwKVxuLS8qXG4tICogKHA0ZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2VzbiYjMzk7dCBnZXQgYWN0dWFsbHkgY2FsbGVkLFxuLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pXG4tICovXG4tI2RlZmluZSBzZXRfcGdkKHBnZHB0ciwgcGdkdmFsKVx0c2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KVxuIFxuLXN0YXRpYyBpbmxpbmUgcDRkX3QgKnA0ZF9vZmZzZXQocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0MzsjZGVmaW5lIHNldF9wZ2QocGdkcHRyLCBwZ2R2YWwpXHRcdFx0XHRcdFx0XFxcbiYjNDM7KHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHBnZF9jaGVja19kdW1teShwZ2R2YWwpO1x0XHRcdFx0XHRcXFxuJiM0MztcdHNldF9wNGQoKHA0ZF90ICopKHBnZHB0ciksIChwNGRfdCkgeyBwZ2R2YWwgfSk7XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcGdkX3QgcGdkcF9nZXQocGdkX3QgKnA0ZHApXG4ge1xuLVx0cmV0dXJuIChwNGRfdCAqKXBnZDtcbiYjNDM7XHRwZ2RfdCBkdW1teSA9IHsgMCB9O1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gZHVtbXk7XG4gfVxuJiM0MzsjZGVmaW5lIHBnZHBfZ2V0IHBnZHBfZ2V0XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHBnZF9jaGVja19kdW1teShwZ2QpIEJVSUxEX0JVR19PTihfX2J1aWx0aW5fY29uc3RhbnRfcChwZ2RfdmFsKHBnZCkpKVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCAqX19wNGRfb2Zmc2V0KHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHA0ZF90ICopcGdkcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpXHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwZ2RfY2hlY2tfZHVtbXkoKihwZ2RwKSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19wNGRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpO1x0XHRcdFx0XHRcXFxuJiM0Mzt9KVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCAqX19wNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHA0ZF90ICopcGdkcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBwNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgYWRkcmVzcylcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwZ2RfY2hlY2tfZHVtbXkoKihwZ2RwKSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19wNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgYWRkcmVzcyk7XHRcdFx0XFxcbiYjNDM7fSlcbiBcbiAjZGVmaW5lIHA0ZF92YWwoeClcdFx0XHRcdChwZ2RfdmFsKCh4KS5wZ2QpKVxuICNkZWZpbmUgX19wNGQoeClcdFx0XHRcdCgocDRkX3QpIHsgX19wZ2QoeCkgfSlcbiBcbi0jZGVmaW5lIHBnZF9wYWdlKHBnZClcdFx0XHRcdChwNGRfcGFnZSgocDRkX3QpeyBwZ2QgfSkpXG4tI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpXHRcdFx0KCh1bnNpZ25lZCBsb25nKShwNGRfcGd0YWJsZSgocDRkX3QpeyBwZ2QgfSkpKVxuJiM0MzsjZGVmaW5lIHBnZF9wYWdlKHBnZClcdFx0XHRcdCh7IEJVSUxEX0JVRygpOyAoc3RydWN0IHBhZ2UgKilOVUxMOyB9KVxuJiM0MzsjZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZClcdFx0XHRcdFx0XHRcXFxuJiM0MzsoeyBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHBnZF9jaGVja19kdW1teShwZ2QpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0KHVuc2lnbmVkIGxvbmcpcDRkX3BndGFibGUoKHA0ZF90KSB7IHBnZCB9KTtcdFx0XHRcXFxuJiM0Mzt9KVxuIFxuIC8qXG4gICogYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHA0ZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwNGQgaXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oXG5pbmRleCAzNmI2NDkwZWQxODA4MS4uNjE4NTJlYjRiMTUwNGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmhcbkBAIC0zMSwyOSAmIzQzOzMxLDYxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHB1ZF9ub25lKHB1ZF90IHB1ZClcdFx0eyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHB1ZF9iYWQocHVkX3QgcHVkKVx0XHR7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBpbnQgcHVkX3ByZXNlbnQocHVkX3QgcHVkKVx0eyByZXR1cm4gMTsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHB1ZF91c2VyKHB1ZF90IHB1ZClcdFx0eyByZXR1cm4gMDsgfVxuLXN0YXRpYyBpbmxpbmUgaW50IHB1ZF9sZWFmKHB1ZF90IHB1ZClcdFx0eyByZXR1cm4gMDsgfVxuJiM0MztzdGF0aWMgaW5saW5lIGJvb2wgcHVkX2xlYWYocHVkX3QgcHVkKVx0XHR7IHJldHVybiBmYWxzZTsgfVxuJiM0MzsjZGVmaW5lIHB1ZF9sZWFmIHB1ZF9sZWFmXG4gc3RhdGljIGlubGluZSB2b2lkIHB1ZF9jbGVhcihwdWRfdCAqcHVkKVx0eyB9XG4gI2RlZmluZSBwbWRfRVJST1IocG1kKVx0XHRcdFx0KHB1ZF9FUlJPUigocG1kKS5wdWQpKVxuIFxuICNkZWZpbmUgcHVkX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSlcdFx0ZG8geyB9IHdoaWxlICgwKVxuIFxuLS8qXG4tICogKHBtZHMgYXJlIGZvbGRlZCBpbnRvIHB1ZHMgc28gdGhpcyBkb2VzbiYjMzk7dCBnZXQgYWN0dWFsbHkgY2FsbGVkLFxuLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pXG4tICovXG4tI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKVx0XHRcdHNldF9wbWQoKHBtZF90ICopKHB1ZHB0ciksIChwbWRfdCkgeyBwdWR2YWwgfSlcbiYjNDM7I2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKVx0XHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwdWRfY2hlY2tfZHVtbXkocHVkdmFsKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRzZXRfcG1kKChwbWRfdCAqKShwdWRwdHIpLCAocG1kX3QpIHsgcHVkdmFsIH0pO1x0XHRcdFxcXG4mIzQzO30pXG4mIzQzO1xuJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHB1ZF90IHB1ZHBfZ2V0KHB1ZF90ICpwdWRwKVxuJiM0Mzt7XG4mIzQzO1x0cHVkX3QgZHVtbXkgPSB7IDAgfTtcbiYjNDM7XG4mIzQzO1x0cmV0dXJuIGR1bW15O1xuJiM0Mzt9XG4mIzQzOyNkZWZpbmUgcHVkcF9nZXQgcHVkcF9nZXRcbiBcbi1zdGF0aWMgaW5saW5lIHBtZF90ICogcG1kX29mZnNldChwdWRfdCAqIHB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0MzsjZGVmaW5lIHB1ZF9jaGVja19kdW1teShwdWQpIEJVSUxEX0JVR19PTihfX2J1aWx0aW5fY29uc3RhbnRfcChwdWRfdmFsKHB1ZCkpKVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwbWRfdCAqX19wbWRfb2Zmc2V0KHB1ZF90ICpwdWRwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4mIzQzO3tcbiYjNDM7XHRyZXR1cm4gKHBtZF90ICopcHVkcDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7I2RlZmluZSBwbWRfb2Zmc2V0KHB1ZHAsIGFkZHJlc3MpXHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7XHRcdFx0XHRcdFxcXG4mIzQzO1x0X19wbWRfb2Zmc2V0KHB1ZHAsIGFkZHJlc3MpO1x0XHRcdFx0XHRcXFxuJiM0Mzt9KVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwbWRfdCAqX19wbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsXG4mIzQzO1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0cmV0dXJuIChwbWRfdCAqKXB1ZDtcbiYjNDM7XHRyZXR1cm4gKHBtZF90ICopcHVkcDtcbiB9XG4tI2RlZmluZSBwbWRfb2Zmc2V0IHBtZF9vZmZzZXRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgcG1kX29mZnNldF9sb2NrbGVzcyhwdWRwLCBwdWQsIGFkZHJlc3MpXHRcdFx0XHRcXFxuJiM0Mzsoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cHVkX2NoZWNrX2R1bW15KCoocHVkcCkpO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fcG1kX29mZnNldF9sb2NrbGVzcyhwdWRwLCBwdWQsIGFkZHJlc3MpO1x0XHRcdFxcXG4mIzQzO30pXG4gXG4gI2RlZmluZSBwbWRfdmFsKHgpXHRcdFx0XHQocHVkX3ZhbCgoeCkucHVkKSlcbiAjZGVmaW5lIF9fcG1kKHgpXHRcdFx0XHQoKHBtZF90KSB7IF9fcHVkKHgpIH0gKVxuIFxuLSNkZWZpbmUgcHVkX3BhZ2UocHVkKVx0XHRcdFx0KHBtZF9wYWdlKChwbWRfdCl7IHB1ZCB9KSlcbi0jZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZClcdFx0XHQoKHBtZF90ICopKHBtZF9wYWdlX3ZhZGRyKChwbWRfdCl7IHB1ZCB9KSkpXG4mIzQzOyNkZWZpbmUgcHVkX3BhZ2UocHVkKVx0XHRcdFx0KHsgQlVJTERfQlVHKCk7IChzdHJ1Y3QgcGFnZSAqKU5VTEw7IH0pXG4mIzQzOyNkZWZpbmUgcHVkX3BndGFibGUocHVkKVx0XHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwdWRfY2hlY2tfZHVtbXkocHVkKTtcdFx0XHRcdFx0XHRcXFxuJiM0MztcdCgocG1kX3QgKikocG1kX3BhZ2VfdmFkZHIoKHBtZF90KSB7IHB1ZCB9KSkpO1x0XHRcdFxcXG4mIzQzO30pXG4gXG4gLypcbiAgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcG1kIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHBtZCBpc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmhcbmluZGV4IDM1NmNiZmJhYWIyNDc2Li41ZWU4ZjE4NTJjZDhjOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaFxuQEAgLTI5LDI3ICYjNDM7MjksNjIgQEAgc3RhdGljIGlubGluZSBpbnQgcDRkX25vbmUocDRkX3QgcDRkKVx0XHR7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBpbnQgcDRkX2JhZChwNGRfdCBwNGQpXHRcdHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwNGRfcHJlc2VudChwNGRfdCBwNGQpXHR7IHJldHVybiAxOyB9XG4gc3RhdGljIGlubGluZSB2b2lkIHA0ZF9jbGVhcihwNGRfdCAqcDRkKVx0eyB9XG4mIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwNGRfbGVhZihwNGRfdCBwNGQpXHRcdHsgcmV0dXJuIGZhbHNlOyB9XG4mIzQzOyNkZWZpbmUgcDRkX2xlYWYgcDRkX2xlYWZcbiAjZGVmaW5lIHB1ZF9FUlJPUihwdWQpXHRcdFx0XHQocDRkX0VSUk9SKChwdWQpLnA0ZCkpXG4gXG4gI2RlZmluZSBwNGRfcG9wdWxhdGUobW0sIHA0ZCwgcHVkKVx0XHRkbyB7IH0gd2hpbGUgKDApXG4gI2RlZmluZSBwNGRfcG9wdWxhdGVfc2FmZShtbSwgcDRkLCBwdWQpXHRcdGRvIHsgfSB3aGlsZSAoMClcbi0vKlxuLSAqIChwdWRzIGFyZSBmb2xkZWQgaW50byBwNGRzIHNvIHRoaXMgZG9lc24mIzM5O3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCxcbi0gKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKVxuLSAqL1xuLSNkZWZpbmUgc2V0X3A0ZChwNGRwdHIsIHA0ZHZhbClcdHNldF9wdWQoKHB1ZF90ICopKHA0ZHB0ciksIChwdWRfdCkgeyBwNGR2YWwgfSlcbiBcbi1zdGF0aWMgaW5saW5lIHB1ZF90ICpwdWRfb2Zmc2V0KHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiYjNDM7I2RlZmluZSBzZXRfcDRkKHA0ZHB0ciwgcDRkdmFsKVx0XHRcdFx0XHRcdFxcXG4mIzQzOyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbiYjNDM7XHRwNGRfY2hlY2tfZHVtbXkocDRkdmFsKTtcdFx0XHRcdFx0XFxcbiYjNDM7XHRzZXRfcHVkKChwdWRfdCAqKShwNGRwdHIpLCAocHVkX3QpIHsgcDRkdmFsIH0pO1x0XHRcdFxcXG4mIzQzO30pXG4mIzQzO1xuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCBwNGRwX2dldChwNGRfdCAqcDRkcClcbiYjNDM7e1xuJiM0MztcdHA0ZF90IGR1bW15ID0geyAwIH07XG4mIzQzO1xuJiM0MztcdHJldHVybiBkdW1teTtcbiYjNDM7fVxuJiM0MzsjZGVmaW5lIHA0ZHBfZ2V0IHA0ZHBfZ2V0XG4mIzQzO1xuJiM0MzsjZGVmaW5lIHA0ZF9jaGVja19kdW1teShwNGQpIEJVSUxEX0JVR19PTihfX2J1aWx0aW5fY29uc3RhbnRfcChwNGRfdmFsKHA0ZCkpKVxuJiM0MztcbiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwdWRfdCAqX19wdWRfb2Zmc2V0KHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4ge1xuLVx0cmV0dXJuIChwdWRfdCAqKXA0ZDtcbiYjNDM7XHRyZXR1cm4gKHB1ZF90ICopcDRkcDtcbiB9XG4tI2RlZmluZSBwdWRfb2Zmc2V0IHB1ZF9vZmZzZXRcbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHVkX29mZnNldChwNGRwLCBhZGRyZXNzKVx0XHRcdFx0XHRcXFxuJiM0Mzsoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fcHVkX29mZnNldChwNGRwLCBhZGRyZXNzKTtcdFx0XHRcdFx0XFxcbiYjNDM7fSlcbiYjNDM7XG4mIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcHVkX3QgKl9fcHVkX29mZnNldF9sb2NrbGVzcyhwNGRfdCAqcDRkcCwgcDRkX3QgcDRkLFxuJiM0MztcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuJiM0Mzt7XG4mIzQzO1x0cmV0dXJuIChwdWRfdCAqKXA0ZHA7XG4mIzQzO31cbiYjNDM7XG4mIzQzOyNkZWZpbmUgcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGFkZHJlc3MpXHRcdFx0XHRcXFxuJiM0Mzsoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4mIzQzO1x0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1x0XHRcdFx0XHRcXFxuJiM0MztcdF9fcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGFkZHJlc3MpO1x0XHRcdFxcXG4mIzQzO30pXG4gXG4gI2RlZmluZSBwdWRfdmFsKHgpXHRcdFx0XHQocDRkX3ZhbCgoeCkucDRkKSlcbiAjZGVmaW5lIF9fcHVkKHgpXHRcdFx0XHQoKHB1ZF90KSB7IF9fcDRkKHgpIH0pXG4gXG4tI2RlZmluZSBwNGRfcGFnZShwNGQpXHRcdFx0XHQocHVkX3BhZ2UoKHB1ZF90KXsgcDRkIH0pKVxuLSNkZWZpbmUgcDRkX3BndGFibGUocDRkKVx0XHRcdCgocHVkX3QgKikocHVkX3BndGFibGUoKHB1ZF90KXsgcDRkIH0pKSlcbiYjNDM7I2RlZmluZSBwNGRfcGFnZShwNGQpXHRcdFx0XHQoeyBCVUlMRF9CVUcoKTsgKHN0cnVjdCBwYWdlICopTlVMTDsgfSlcbiYjNDM7I2RlZmluZSBwNGRfcGd0YWJsZShwNGQpXHRcdFx0XHRcdFx0XFxcbiYjNDM7KHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuJiM0MztcdHA0ZF9jaGVja19kdW1teShwNGQpO1x0XHRcdFx0XHRcdFxcXG4mIzQzO1x0KChwdWRfdCAqKShwdWRfcGd0YWJsZSgocHVkX3QpIHsgcDRkIH0pKSk7XHRcdFx0XFxcbiYjNDM7fSlcbiBcbiAvKlxuICAqIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwdWQgaXMgdHJpdmlhbDogdGhlIDEtZW50cnkgcHVkIGlzXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdGR1bXAuaCBiL2luY2x1ZGUvbGludXgvcHRkdW1wLmhcbmluZGV4IDI0MGJkM2JmZjE4ZGQyLi4yNmZhNjI0ZWFjNDRlZiAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRkdW1wLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHRkdW1wLmhcbkBAIC0yOSw2ICYjNDM7MjksNyBAQCBib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxuIFx0XHRcdFx0Ym9vbCBjaGVja3d4LCBib29sIGRtZXNnKTtcbiB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpO1xuJiM0MztpbnQgcHRkdW1wX3B0X2xldmVsX2ZpcnN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcbiBib29sIHB0ZHVtcF9jaGVja193eCh2b2lkKTtcbiBcbiBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfY2hlY2t3eCh2b2lkKVxuZGlmZiAtLWdpdCBhL21tL3B0ZHVtcC5jIGIvbW0vcHRkdW1wLmNcbmluZGV4IDU4NTEwOTZlNmY2NTZjLi45NjY3NmM5MDQzMGYxOCAxMDA2NDRcbi0tLSBhL21tL3B0ZHVtcC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9wdGR1bXAuY1xuQEAgLTE5Nyw2ICYjNDM7MTk3LDE3IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZClcbiBcdHN0LVx1MDAzZW5vdGVfcGFnZV9mbHVzaChzdCk7XG4gfVxuIFxuJiM0MztpbnQgcHRkdW1wX3B0X2xldmVsX2ZpcnN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKG1tX3BtZF9mb2xkZWQobW0pKVxuJiM0MztcdFx0cmV0dXJuIDM7XG4mIzQzO1x0aWYgKG1tX3B1ZF9mb2xkZWQobW0pKVxuJiM0MztcdFx0cmV0dXJuIDI7XG4mIzQzO1x0aWYgKG1tX3A0ZF9mb2xkZWQobW0pKVxuJiM0MztcdFx0cmV0dXJuIDE7XG4mIzQzO1x0cmV0dXJuIDA7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIGludCBjaGVja193eF9zaG93KHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcbiB7XG4gXHRpZiAocHRkdW1wX2NoZWNrX3d4KCkpXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xuaW5kZXggMDZlMTAzZjk3ODFlNWQuLjBjOWM0YWM4OWUwOTRhIDEwMDY0NFxuLS0tIGEvbW0vdm1zY2FuLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL3Ztc2Nhbi5jXG5AQCAtMzcyNyw3ICYjNDM7MzcyNyw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4gXHRcdGlmICghcHVkX3ByZXNlbnQodmFsKSB8fCBXQVJOX09OX09OQ0UocHVkX2xlYWYodmFsKSkpXG4gXHRcdFx0Y29udGludWU7XG4gXG4tXHRcdHdhbGtfcG1kX3JhbmdlKFx1MDAyNnZhbCwgYWRkciwgbmV4dCwgYXJncyk7XG4mIzQzO1x0XHR3YWxrX3BtZF9yYW5nZShwdWQgJiM0MzsgaSwgYWRkciwgbmV4dCwgYXJncyk7XG4gXG4gXHRcdGlmIChuZWVkX3Jlc2NoZWQoKSB8fCB3YWxrLVx1MDAzZWJhdGNoZWQgXHUwMDNlPSBNQVhfTFJVX0JBVENIKSB7XG4gXHRcdFx0ZW5kID0gKGFkZHIgfCB+UFVEX01BU0spICYjNDM7IDE7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzU8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0xSVV9HRU4mIzM0OywKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O1BURFVNUF9ERUJVR0ZTJiMzNDssCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7d2Fsa19wdWRfcmFuZ2UmIzM0OywKICAgICYjMzQ7Z2V0X2h2YV9tYXBwaW5nX3NpemUmIzM0OywKICAgICYjMzQ7aG9zdF9wZm5fbWFwcGluZ19sZXZlbCYjMzQ7LAogICAgJiMzNDtjb2xsYXBzZV9wdWRfcGFnZSYjMzQ7LAogICAgJiMzNDtwb3B1bGF0ZV9wdWQmIzM0OywKICAgICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUmIzM0OywKICAgICYjMzQ7cHVkcF9zZXRfYWNjZXNzX2ZsYWdzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHBhZ2UgdGFibGUgZm9sZGluZyBtYWNyb3MgYW5kIGZ1bmN0aW9ucyBhY3Jvc3MgbXVsdGlwbGUgYXJjaGl0ZWN0dXJlcyAoQVJNLCBBUk02NCwgTG9vbmdBcmNoLCBNSVBTLCBPcGVuUklTQywgUklTQy1WLCB4ODYpIGFuZCBnZW5lcmljIGhlYWRlcnMuIEl0IGZpeGVzIGhvdyBmb2xkZWQgcGFnZSB0YWJsZXMgYXJlIHdhbGtlZCBhbmQgYWNjZXNzZWQsIHdoaWNoIGlzIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgbG9naWMuIFRoZSBjaGFuZ2VzIGFmZmVjdCBLVk0gcGFnZSBmYXVsdCBoYW5kbGVycywgTUdMUlUgcGFnZSB0YWJsZSB3YWxrZXJzLCBQQVQgbWVtb3J5IHNldHRpbmcsIGFuZCBwYWdlIHRhYmxlIGR1bXBpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMgdGhhdCBzaG91bGQgYmUgZnV6emVkIHRvIGVuc3VyZSBubyByZWdyZXNzaW9ucyBpbiBwYWdlIHRhYmxlIHRyYXZlcnNhbC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNjFjNDQ2OThhYTk4MzVkNzVlNTMwNmNlNDE1YzQwMzBkMDMzZWY1YQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVsIDIzIDE3OjM1OjA5IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oCmluZGV4IGU3NDQxNWM5NTliZWFjLi44ODY1OWIzOGUyMzY0OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2Utbm9tbXUuaApAQCAtMTgsMTIgJiM0MzsxOCwxMiBAQAogICovCiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcHRlX3Q7CiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG1kX3Q7Ci10eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdkX3RbMl07CiYjNDM7dHlwZWRlZiB1bnNpZ25lZCBsb25nIHBnZF90OwogdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBncHJvdF90OwogCiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoeCkKICNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICh4KQotI2RlZmluZSBwZ2RfdmFsKHgpCSgoeClbMF0pCiYjNDM7I2RlZmluZSBwZ2RfdmFsKHgpICAgICAgKHgpCiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoeCkKIAogI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKHgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtdHlwZXMuaAppbmRleCA2NTBlNzkzZjQxNDI5Zi4uN2Y4NTM4NGFjMzg2Y2EgMTAwNjQ0Ci0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLXR5cGVzLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtdHlwZXMuaApAQCAtMjUsNyAmIzQzOzI1LDcgQEAgdHlwZWRlZiBzdHJ1Y3QgeyBwdGV2YWxfdCBwZ3Byb3Q7IH0gcGdwcm90X3Q7CiAKICNkZWZpbmUgcHRlX3ZhbCh4KSAgICAgICgoeCkucHRlKQogI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKCh4KS5wbWQpCi0jZGVmaW5lIHBnZF92YWwoeCkJKCh4KS5wZ2RbMF0pCiYjNDM7I2RlZmluZSBwZ2RfdmFsKHgpICAgICAgKCh4KS5wZ2RbMF0pCiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoKHgpLnBncHJvdCkKIAogI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKChwdGVfdCkgeyAoeCkgfSApCkBAIC0zNiwxNCAmIzQzOzM2LDMyIEBAIHR5cGVkZWYgc3RydWN0IHsgcHRldmFsX3QgcGdwcm90OyB9IHBncHJvdF90OwogLyoKICAqIC4uIHdoaWxlIHRoZXNlIG1ha2UgaXQgZWFzaWVyIG9uIHRoZSBjb21waWxlcgogICovCiYjNDM7dHlwZWRlZiB1NjQgcGdkdmFsX3Q7CiYjNDM7CiB0eXBlZGVmIHB0ZXZhbF90IHB0ZV90OwogdHlwZWRlZiBwbWR2YWxfdCBwbWRfdDsKLXR5cGVkZWYgcG1kdmFsX3QgcGdkX3RbMl07CiYjNDM7dHlwZWRlZiBwZ2R2YWxfdCBwZ2RfdDsKIHR5cGVkZWYgcHRldmFsX3QgcGdwcm90X3Q7CiAKICNkZWZpbmUgcHRlX3ZhbCh4KSAgICAgICh4KQogI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKHgpCi0jZGVmaW5lIHBnZF92YWwoeCkJKCh4KVswXSkKJiM0MzsKJiM0MztzdGF0aWMgaW5saW5lIHBtZHZhbF90IHBnZF92YWwocGdkX3QgcGdkKQomIzQzO3sKJiM0MzsJLyoKJiM0MzsJICogVGhlIGxvd2VyIGFuZCBoaWdoZXIgcG1kdmFsX3QgdmFsdWVzIHBvaW50IHRvIHRoZSBzYW1lIHBhZ2UuCiYjNDM7CSAqIHRoZSBvbmx5IGRpZmZlcmVuY2UgaXMgdGhlaXIgb2Zmc2V0IHdpdGhpbiB0aGF0IHBhZ2UuCiYjNDM7CSAqIFRoZXJlZm9yZSwgd2hpY2hldmVyIHZhbHVlIGlzIHJldHVybmVkLCB0aGUgYmVoYXZpb3Igb2YgcG1kX3BmbigpLAomIzQzOwkgKiBwbWRfcGFnZSgpLCBhbmQgb3RoZXIgdXNlcnMgb2YgcGdkX3ZhbCgpIHJlbWFpbnMgdW5jaGFuZ2VkLgomIzQzOwkgKgomIzQzOwkgKiBIb3dldmVyLCBwZ2RfdmFsKCkgaGFzIGhpc3RvcmljYWxseSByZXR1cm5lZCB0aGUgbG93ZXIgcG1kdmFsX3QsIHNvCiYjNDM7CSAqIGtlZXAgcmV0dXJuaW5nIHRoZSBsb3dlciBvbmUuCiYjNDM7CSAqCiYjNDM7CSAqIFNlZSB0aGUgY29tbWVudHMgaW4gaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwuCiYjNDM7CSAqLwomIzQzOwlyZXR1cm4gKCoocG1kdmFsX3QgKCopWzJdKSZhbXA7cGdkKVswXTsKJiM0Mzt9CiYjNDM7CiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoeCkKIAogI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKHgpCmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggOTgyNzk1Y2Y0NTYzN2UuLmVhZGQwMjdmZTBlZTQzIDEwMDY0NAotLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oCkBAIC0xNDEsOCAmIzQzOzE0MSw2IEBAIGV4dGVybiBwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sCiAKIGV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdOwogCi0jZGVmaW5lIHBnZHBfZ2V0KHBncGQpCQlSRUFEX09OQ0UoKnBnZHApCi0KICNkZWZpbmUgcHVkX3BhZ2UocHVkKQkJcG1kX3BhZ2UoX19wbWQocHVkX3ZhbChwdWQpKSkKICNkZWZpbmUgcHVkX3dyaXRlKHB1ZCkJCXBtZF93cml0ZShfX3BtZChwdWRfdmFsKHB1ZCkpKQogCmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IGEyNjgxZDc1NTM1ODQxLi5hYWFlM2QxNDg5NWY2OSAxMDA2NDQKLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTE0MCwxMCAmIzQzOzE0MCwxNyBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpCiAjZGVmaW5lIHB0ZV9ub25lKHB0ZSkJCSghcHRlX3ZhbChwdGUpKQogI2RlZmluZSBwdGVfcGFnZShwdGUpCQkocGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKSkKIAomIzQzOyNkZWZpbmUgcHRlX3ZhbGlkKHB0ZSkJCSghIShwdGVfdmFsKHB0ZSkgJmFtcDsgUFRFX1ZBTElEKSkKJiM0MzsjZGVmaW5lIHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKSBcCiYjNDM7CSgocHRlX3ZhbChwdGUpICZhbXA7IChQVEVfVkFMSUQgfCBQVEVfUFJFU0VOVF9JTlZBTElEKSkgPT0gUFRFX1BSRVNFTlRfSU5WQUxJRCkKJiM0MzsKIC8qCiAgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpLiBVbmRlZmluZWQgYmVoYXZpb3VyIG90aGVyd2lzZS4KICAqLwotI2RlZmluZSBwdGVfcHJlc2VudChwdGUpCShwdGVfdmFsaWQocHRlKSB8fCBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkpCiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSkKJiM0Mzt7CiYjNDM7CXJldHVybiBwdGVfdmFsaWQocHRlKSB8fCBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSk7CiYjNDM7fQogI2RlZmluZSBwdGVfeW91bmcocHRlKQkJKCEhKHB0ZV92YWwocHRlKSAmYW1wOyBQVEVfQUYpKQogI2RlZmluZSBwdGVfc3BlY2lhbChwdGUpCSghIShwdGVfdmFsKHB0ZSkgJmFtcDsgUFRFX1NQRUNJQUwpKQogI2RlZmluZSBwdGVfd3JpdGUocHRlKQkJKCEhKHB0ZV92YWwocHRlKSAmYW1wOyBQVEVfV1JJVEUpKQpAQCAtMTY4LDkgJiM0MzsxNzUsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpCiAjZGVmaW5lIHB0ZV9zd19kaXJ0eShwdGUpCSghIShwdGVfdmFsKHB0ZSkgJmFtcDsgUFRFX0RJUlRZKSkKICNkZWZpbmUgcHRlX2RpcnR5KHB0ZSkJCShwdGVfc3dfZGlydHkocHRlKSB8fCBwdGVfaHdfZGlydHkocHRlKSkKIAotI2RlZmluZSBwdGVfdmFsaWQocHRlKQkJKCEhKHB0ZV92YWwocHRlKSAmYW1wOyBQVEVfVkFMSUQpKQotI2RlZmluZSBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkgXAotCSgocHRlX3ZhbChwdGUpICZhbXA7IChQVEVfVkFMSUQgfCBQVEVfUFJFU0VOVF9JTlZBTElEKSkgPT0gUFRFX1BSRVNFTlRfSU5WQUxJRCkKIC8qCiAgKiBFeGVjdXRlLW9ubHkgdXNlciBtYXBwaW5ncyBkbyBub3QgaGF2ZSB0aGUgUFRFX1VTRVIgYml0IHNldC4gQWxsIHZhbGlkCiAgKiBrZXJuZWwgbWFwcGluZ3MgaGF2ZSB0aGUgUFRFX1VYTiBiaXQgc2V0LgpAQCAtMTE4OCwyOSAmIzQzOzExOTIsNiBAQCBzdGF0aWMgaW5saW5lIGJvb2wgcGd0YWJsZV9sNV9lbmFibGVkKHZvaWQpIHsgcmV0dXJuIGZhbHNlOyB9CiAjZGVmaW5lIHA0ZF9jbGVhcl9maXhtYXAoKQogCiAjZGVmaW5lIHA0ZF9vZmZzZXRfa2ltZyhkaXIsYWRkcikJKChwNGRfdCAqKWRpcikKLQotc3RhdGljIGlubGluZQotcDRkX3QgKnA0ZF9vZmZzZXRfbG9ja2xlc3NfZm9sZGVkKHBnZF90ICpwZ2RwLCBwZ2RfdCBwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcikKLXsKLQkvKgotCSAqIFdpdGggcnVudGltZSBmb2xkaW5nIG9mIHRoZSBwdWQsIHB1ZF9vZmZzZXRfbG9ja2xlc3MoKSBwYXNzZXMKLQkgKiB0aGUgJiMzOTtwZ2RfdCAqJiMzOTsgd2UgcmV0dXJuIGhlcmUgdG8gcDRkX3RvX2ZvbGRlZF9wdWQoKSwgd2hpY2gKLQkgKiB3aWxsIG9mZnNldCB0aGUgcG9pbnRlciBhc3N1bWluZyB0aGF0IGl0IHBvaW50cyBpbnRvCi0JICogYSBwYWdlLXRhYmxlIHBhZ2UuIEhvd2V2ZXIsIHRoZSBmYXN0IEdVUCBwYXRoIHBhc3NlcyB1cyBhCi0JICogcGdkX3QgYWxsb2NhdGVkIG9uIHRoZSBzdGFjayBhbmQgc28gd2UgbXVzdCB1c2UgdGhlIG9yaWdpbmFsCi0JICogcG9pbnRlciBpbiAmIzM5O3BnZHAmIzM5OyB0byBjb25zdHJ1Y3QgdGhlIHA0ZCBwb2ludGVyIGluc3RlYWQgb2YKLQkgKiB1c2luZyB0aGUgZ2VuZXJpYyBwNGRfb2Zmc2V0X2xvY2tsZXNzKCkgaW1wbGVtZW50YXRpb24uCi0JICoKLQkgKiBOb3RlOiByZXVzaW5nIHRoZSBvcmlnaW5hbCBwb2ludGVyIG1lYW5zIHRoYXQgd2UgbWF5Ci0JICogZGVyZWZlcmVuY2UgdGhlIHNhbWUgKGxpdmUpIHBhZ2UtdGFibGUgZW50cnkgbXVsdGlwbGUgdGltZXMuCi0JICogVGhpcyBpcyBzYWZlIGJlY2F1c2UgaXQgaXMgc3RpbGwgb25seSBsb2FkZWQgb25jZSBpbiB0aGUKLQkgKiBjb250ZXh0IG9mIGVhY2ggbGV2ZWwgYW5kIHRoZSBDUFUgZ3VhcmFudGVlcyBzYW1lLWFkZHJlc3MKLQkgKiByZWFkLWFmdGVyLXJlYWQgb3JkZXJpbmcuCi0JICovCi0JcmV0dXJuIHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7Ci19Ci0jZGVmaW5lIHA0ZF9vZmZzZXRfbG9ja2xlc3MgcDRkX29mZnNldF9sb2NrbGVzc19mb2xkZWQKLQogI2VuZGlmICAvKiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgJmd0OyA0ICovCiAKICNkZWZpbmUgcGdkX0VSUk9SKGUpCVwKZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaAppbmRleCAxOTUyZTM0YmM4ZWUwMC4uNDM0ZTViNDgzNDY2NGYgMTAwNjQ0Ci0tLSBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaAomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTYzNiw3ICYjNDM7NjM2LDkgQEAgc3RhdGljIGlubGluZSBsb25nIHBtZF9wcm90bm9uZShwbWRfdCBwbWQpCiAjZW5kaWYgLyogQ09ORklHX0FSQ0hfSEFTX1BURV9QUk9UTk9ORSAqLwogCiAjZGVmaW5lIHBtZF9sZWFmKHBtZCkJCSgocG1kX3ZhbChwbWQpICZhbXA7IF9QQUdFX0hVR0UpICE9IDApCiYjNDM7I2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVECiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZCkJCSgocHVkX3ZhbChwdWQpICZhbXA7IF9QQUdFX0hVR0UpICE9IDApCiYjNDM7I2VuZGlmCiAKIC8qCiAgKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkIGFyZWEgdG8gY29wZSB3aXRoIHRoZSB2aXJ0dWFsIGFsaWFzaW5nCmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMgYi9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMKaW5kZXggZTEwNDg5N2FhNTMyODUuLjgzN2I0MGJiNjk0ZjRlIDEwMDY0NAotLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jCkBAIC02NjksMTAgJiM0Mzs2NjksMTAgQEAgc3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogCWludCBsZXZlbCA9IDA7CiAJdW5zaWduZWQgbG9uZyBodmE7CiAJdW5zaWduZWQgbG9uZyBmbGFnczsKLQlwZ2RfdCBwZ2Q7Ci0JcDRkX3QgcDRkOwotCXB1ZF90IHB1ZDsKLQlwbWRfdCBwbWQ7CiYjNDM7CXBnZF90ICpwZ2RwLCBwZ2Q7CiYjNDM7CXA0ZF90ICpwNGRwLCBwNGQ7CiYjNDM7CXB1ZF90ICpwdWRwLCBwdWQ7CiYjNDM7CXBtZF90ICpwbWRwLCBwbWQ7CiAKIAkvKgogCSAqIE5vdGUsIHVzaW5nIHRoZSBhbHJlYWR5LXJldHJpZXZlZCBtZW1zbG90IGFuZCBfX2dmbl90b19odmFfbWVtc2xvdCgpCkBAIC02OTgsMTkgJiM0Mzs2OTgsMjMgQEAgc3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLAogCSAqIHZhbHVlKSBhbmQgdGhlbiBwKmRfb2Zmc2V0KCkgd2Fsa3MgaW50byB0aGUgdGFyZ2V0IGh1Z2UgcGFnZSBpbnN0ZWFkCiAJICogb2YgdGhlIG9sZCBwYWdlIHRhYmxlIChzZWVzIHRoZSBuZXcgdmFsdWUpLgogCSAqLwotCXBnZCA9IHBnZHBfZ2V0KHBnZF9vZmZzZXQoa3ZtLSZndDttbSwgaHZhKSk7CiYjNDM7CXBnZHAgPSBwZ2Rfb2Zmc2V0KGt2bS0mZ3Q7bW0sIGh2YSk7CiYjNDM7CXBnZCA9IHBnZHBfZ2V0KHBnZHApOwogCWlmIChwZ2Rfbm9uZShwZ2QpKQogCQlnb3RvIG91dDsKIAotCXA0ZCA9IHA0ZHBfZ2V0KHA0ZF9vZmZzZXQoJmFtcDtwZ2QsIGh2YSkpOwomIzQzOwlwNGRwID0gcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGh2YSk7CiYjNDM7CXA0ZCA9IHA0ZHBfZ2V0KHA0ZHApOwogCWlmIChwNGRfbm9uZShwNGQpIHx8ICFwNGRfcHJlc2VudChwNGQpKQogCQlnb3RvIG91dDsKIAotCXB1ZCA9IHB1ZHBfZ2V0KHB1ZF9vZmZzZXQoJmFtcDtwNGQsIGh2YSkpOwomIzQzOwlwdWRwID0gcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGh2YSk7CiYjNDM7CXB1ZCA9IHB1ZHBfZ2V0KHB1ZHApOwogCWlmIChwdWRfbm9uZShwdWQpIHx8ICFwdWRfcHJlc2VudChwdWQpKQogCQlnb3RvIG91dDsKIAotCXBtZCA9IHBtZHBfZ2V0KHBtZF9vZmZzZXQoJmFtcDtwdWQsIGh2YSkpOwomIzQzOwlwbWRwID0gcG1kX29mZnNldF9sb2NrbGVzcyhwdWRwLCBwdWQsIGh2YSk7CiYjNDM7CXBtZCA9IHBtZHBfZ2V0KHBtZHApOwogCWlmIChwbWRfbm9uZShwbWQpIHx8ICFwbWRfcHJlc2VudChwbWQpKQogCQlnb3RvIG91dDsKIApkaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKaW5kZXggZmE3YjkzNWY5NDdjYTAuLjE1MWY0ZDE1YmQxMmJmIDEwMDY0NAotLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTc0NSw4ICYjNDM7NzQ1LDEwIEBAIHN0YXRpYyBpbmxpbmUgcG1kX3QgcG1kcF9odWdlX2dldF9hbmRfY2xlYXIoc3RydWN0IG1tX3N0cnVjdCAqbW0sCiAKICNpZmRlZiBfUEFHRV9IVUdFCiAjZGVmaW5lIHBtZF9sZWFmKHBtZCkJKChwbWRfdmFsKHBtZCkgJmFtcDsgX1BBR0VfSFVHRSkgIT0gMCkKJiM0MzsjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERUQKICNkZWZpbmUgcHVkX2xlYWYocHVkKQkoKHB1ZF92YWwocHVkKSAmYW1wOyBfUEFHRV9IVUdFKSAhPSAwKQogI2VuZGlmCiYjNDM7I2VuZGlmCiAKICNkZWZpbmUgZ3VwX2Zhc3RfcGVybWl0dGVkKHN0YXJ0LCBlbmQpCSghY3B1X2hhc19kY19hbGlhc2VzKQogCmRpZmYgLS1naXQgYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oCmluZGV4IDZiODk5OTZkMGI2MjhlLi41YTQ5MWNkMGYwMDg2OCAxMDA2NDQKLS0tIGEvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKQEAgLTMzMSw5ICYjNDM7MzMxLDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBtZF9wYWdlX3ZhZGRyKHBtZF90IHBtZCkKIAlyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwocG1kKSAmYW1wOyBQQUdFX01BU0spKTsKIH0KIAotI2RlZmluZSBfX3BtZF9vZmZzZXQoYWRkcmVzcykgXAotCSgoKGFkZHJlc3MpICZndDsmZ3Q7IFBNRF9TSElGVCkgJmFtcDsgKFBUUlNfUEVSX1BNRC0xKSkKLQogI2RlZmluZSBQRk5fUFRFX1NISUZUCQlQQUdFX1NISUZUCiAjZGVmaW5lIHB0ZV9wZm4oeCkJCSgodW5zaWduZWQgbG9uZykoKCh4KS5wdGUpKSAmZ3Q7Jmd0OyBQQUdFX1NISUZUKQogI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkgIF9fcHRlKCgoKHBmbikgJmx0OyZsdDsgUEFHRV9TSElGVCkpIHwgcGdwcm90X3ZhbChwcm90KSkKZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3Yva3ZtL21tdS5jIGIvYXJjaC9yaXNjdi9rdm0vbW11LmMKaW5kZXggMDgyZjliMjYxNzMzODcuLjZkNjA0MmI4MWQ3OTA5IDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuYwpAQCAtMzYyLDEwICYjNDM7MzYyLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLAogewogCWludCBzaXplID0gUEFHRV9TSVpFOwogCXVuc2lnbmVkIGxvbmcgZmxhZ3M7Ci0JcGdkX3QgcGdkOwotCXA0ZF90IHA0ZDsKLQlwdWRfdCBwdWQ7Ci0JcG1kX3QgcG1kOwomIzQzOwlwZ2RfdCAqcGdkcCwgcGdkOwomIzQzOwlwNGRfdCAqcDRkcCwgcDRkOwomIzQzOwlwdWRfdCAqcHVkcCwgcHVkOwomIzQzOwlwbWRfdCAqcG1kcCwgcG1kOwogCiAJLyoKIAkgKiBEaXNhYmxlIElSUXMgdG8gcHJldmVudCBjb25jdXJyZW50IHRlYXIgZG93biBvZiBob3N0IHBhZ2UgdGFibGVzLApAQCAtMzgxLDE1ICYjNDM7MzgxLDE4IEBAIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLAogCSAqIHZhbHVlKSBhbmQgdGhlbiBwKmRfb2Zmc2V0KCkgd2Fsa3MgaW50byB0aGUgdGFyZ2V0IGh1Z2UgcGFnZSBpbnN0ZWFkCiAJICogb2YgdGhlIG9sZCBwYWdlIHRhYmxlIChzZWVzIHRoZSBuZXcgdmFsdWUpLgogCSAqLwotCXBnZCA9IHBnZHBfZ2V0KHBnZF9vZmZzZXQoa3ZtLSZndDttbSwgaHZhKSk7CiYjNDM7CXBnZHAgPSBwZ2Rfb2Zmc2V0KGt2bS0mZ3Q7bW0sIGh2YSk7CiYjNDM7CXBnZCA9IHBnZHBfZ2V0KHBnZHApOwogCWlmIChwZ2Rfbm9uZShwZ2QpKQogCQlnb3RvIG91dDsKIAotCXA0ZCA9IHA0ZHBfZ2V0KHA0ZF9vZmZzZXQoJmFtcDtwZ2QsIGh2YSkpOwomIzQzOwlwNGRwID0gcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGh2YSk7CiYjNDM7CXA0ZCA9IHA0ZHBfZ2V0KHA0ZHApOwogCWlmIChwNGRfbm9uZShwNGQpIHx8ICFwNGRfcHJlc2VudChwNGQpKQogCQlnb3RvIG91dDsKIAotCXB1ZCA9IHB1ZHBfZ2V0KHB1ZF9vZmZzZXQoJmFtcDtwNGQsIGh2YSkpOwomIzQzOwlwdWRwID0gcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGh2YSk7CiYjNDM7CXB1ZCA9IHB1ZHBfZ2V0KHB1ZHApOwogCWlmIChwdWRfbm9uZShwdWQpIHx8ICFwdWRfcHJlc2VudChwdWQpKQogCQlnb3RvIG91dDsKIApAQCAtMzk4LDcgJiM0Mzs0MDEsOCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSwKIAkJZ290byBvdXQ7CiAJfQogCi0JcG1kID0gcG1kcF9nZXQocG1kX29mZnNldCgmYW1wO3B1ZCwgaHZhKSk7CiYjNDM7CXBtZHAgPSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgaHZhKTsKJiM0MzsJcG1kID0gcG1kcF9nZXQocG1kcCk7CiAJaWYgKHBtZF9ub25lKHBtZCkgfHwgIXBtZF9wcmVzZW50KHBtZCkpCiAJCWdvdG8gb3V0OwogCmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMKaW5kZXggMDRlZDZmOGFjYWU0ZmQuLmIyYmNhZjEwZDEzZjFkIDEwMDY0NAotLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9yaXNjdi9tbS9mYXVsdC5jCkBAIC0xNjcsMTQgJiM0MzsxNjcsMTYgQEAgYmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY29kZSwKIAogc3RhdGljIGlubGluZSB2b2lkIHZtYWxsb2NfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFkZHIpCiB7Ci0JcGdkX3QgKnBnZCwgKnBnZF9rOwotCXB1ZF90ICpwdWRfazsKLQlwNGRfdCAqcDRkX2s7Ci0JcG1kX3QgKnBtZF9rOwotCXB0ZV90ICpwdGVfazsKJiM0MzsJcGdkX3QgKnBnZHBfaywgKnBnZHAsIHBnZF9rOwomIzQzOwlwNGRfdCAqcDRkcF9rLCAqcDRkcDsKJiM0MzsJcHVkX3QgKnB1ZHBfaywgKnB1ZHAsIHB1ZF9rOwomIzQzOwlwbWRfdCAqcG1kcF9rLCAqcG1kcCwgcG1kX2s7CiYjNDM7CXB0ZV90ICpwdGVwX2s7CiAJaW50IGluZGV4OwogCXVuc2lnbmVkIGxvbmcgcGZuOwogCiYjNDM7CUJVSUxEX0JVR19PTihDT05GSUdfUEdUQUJMRV9MRVZFTFMgIT0gNSAmYW1wOyZhbXA7IENPTkZJR19QR1RBQkxFX0xFVkVMUyAhPSAyKTsKJiM0MzsKIAkvKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YgKi8KIAlpZiAodXNlcl9tb2RlKHJlZ3MpKQogCQlyZXR1cm4gZG9fdHJhcChyZWdzLCBTSUdTRUdWLCBjb2RlLCBhZGRyKTsKQEAgLTE4OSwzOSAmIzQzOzE5MSw1MSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYQogCSAqLwogCWluZGV4ID0gcGdkX2luZGV4KGFkZHIpOwogCXBmbiA9IGNzcl9yZWFkKENTUl9TQVRQKSAmYW1wOyBTQVRQX1BQTjsKLQlwZ2QgPSAocGdkX3QgKilwZm5fdG9fdmlydChwZm4pICYjNDM7IGluZGV4OwotCXBnZF9rID0gaW5pdF9tbS5wZ2QgJiM0MzsgaW5kZXg7CiAKLQlpZiAoIXBnZF9wcmVzZW50KHBnZHBfZ2V0KHBnZF9rKSkpIHsKJiM0MzsJcGdkcCA9IChwZ2RfdCAqKXBmbl90b192aXJ0KHBmbikgJiM0MzsgaW5kZXg7CiYjNDM7CXBnZHBfayA9IGluaXRfbW0ucGdkICYjNDM7IGluZGV4OwomIzQzOwomIzQzOwlwZ2RfayA9IHBnZHBfZ2V0KHBnZHBfayk7CiYjNDM7CWlmICghcGdkX3ByZXNlbnQocGdkX2spKSB7CiAJCW5vX2NvbnRleHQocmVncywgYWRkcik7CiAJCXJldHVybjsKIAl9Ci0Jc2V0X3BnZChwZ2QsIHBnZHBfZ2V0KHBnZF9rKSk7CiYjNDM7CWlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNSkKJiM0MzsJCXNldF9wZ2QocGdkcCwgcGdkX2spOwogCi0JcDRkX2sgPSBwNGRfb2Zmc2V0KHBnZF9rLCBhZGRyKTsKLQlpZiAoIXA0ZF9wcmVzZW50KHA0ZHBfZ2V0KHA0ZF9rKSkpIHsKJiM0MzsJcDRkcCA9IHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7CiYjNDM7CXA0ZHBfayA9IHA0ZF9vZmZzZXQocGdkcF9rLCBhZGRyKTsKJiM0MzsJaWYgKCFwNGRfcHJlc2VudChwNGRwX2dldChwNGRwX2spKSkgewogCQlub19jb250ZXh0KHJlZ3MsIGFkZHIpOwogCQlyZXR1cm47CiAJfQogCi0JcHVkX2sgPSBwdWRfb2Zmc2V0KHA0ZF9rLCBhZGRyKTsKLQlpZiAoIXB1ZF9wcmVzZW50KHB1ZHBfZ2V0KHB1ZF9rKSkpIHsKJiM0MzsJcHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7CiYjNDM7CXB1ZHBfayA9IHB1ZF9vZmZzZXQocDRkcF9rLCBhZGRyKTsKJiM0MzsKJiM0MzsJcHVkX2sgPSBwdWRwX2dldChwdWRwX2spOwomIzQzOwlpZiAoIXB1ZF9wcmVzZW50KHB1ZF9rKSkgewogCQlub19jb250ZXh0KHJlZ3MsIGFkZHIpOwogCQlyZXR1cm47CiAJfQotCWlmIChwdWRfbGVhZihwdWRwX2dldChwdWRfaykpKQomIzQzOwlpZiAocHVkX2xlYWYocHVkX2spKQogCQlnb3RvIGZsdXNoX3RsYjsKIAogCS8qCiAJICogU2luY2UgdGhlIHZtYWxsb2MgYXJlYSBpcyBnbG9iYWwsIGl0IGlzIHVubmVjZXNzYXJ5CiAJICogdG8gY29weSBpbmRpdmlkdWFsIFBURXMKIAkgKi8KLQlwbWRfayA9IHBtZF9vZmZzZXQocHVkX2ssIGFkZHIpOwotCWlmICghcG1kX3ByZXNlbnQocG1kcF9nZXQocG1kX2spKSkgewomIzQzOwlwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTsKJiM0MzsJcG1kcF9rID0gcG1kX29mZnNldChwdWRwX2ssIGFkZHIpOwomIzQzOwomIzQzOwlwbWRfayA9IHBtZHBfZ2V0KHBtZHBfayk7CiYjNDM7CWlmICghcG1kX3ByZXNlbnQocG1kX2spKSB7CiAJCW5vX2NvbnRleHQocmVncywgYWRkcik7CiAJCXJldHVybjsKIAl9Ci0JaWYgKHBtZF9sZWFmKHBtZHBfZ2V0KHBtZF9rKSkpCiYjNDM7CWlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMikKJiM0MzsJCXNldF9wbWQocG1kcCwgcG1kX2spOwomIzQzOwlpZiAocG1kX2xlYWYocG1kX2spKQogCQlnb3RvIGZsdXNoX3RsYjsKIAogCS8qCkBAIC0yMzAsOCAmIzQzOzI0NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhCiAJICogYWRkcmVzc2VzLiBJZiB3ZSBkb24mIzM5O3QgZG8gdGhpcywgdGhpcyB3aWxsIGp1c3QKIAkgKiBzaWxlbnRseSBsb29wIGZvcmV2ZXIuCiAJICovCi0JcHRlX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfaywgYWRkcik7Ci0JaWYgKCFwdGVfcHJlc2VudChwdGVwX2dldChwdGVfaykpKSB7CiYjNDM7CXB0ZXBfayA9IHB0ZV9vZmZzZXRfa2VybmVsKHBtZHBfaywgYWRkcik7CiYjNDM7CWlmICghcHRlX3ByZXNlbnQocHRlcF9nZXQocHRlcF9rKSkpIHsKIAkJbm9fY29udGV4dChyZWdzLCBhZGRyKTsKIAkJcmV0dXJuOwogCX0KZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMKaW5kZXggMmFmYTdhMjMzNDBlOTIuLjRlNTQ1OTg4OTUzYTBiIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYwpAQCAtMjcsNiAmIzQzOzI3LDcgQEAKICAqLwogc3RydWN0IHBnX3N0YXRlIHsKIAlzdHJ1Y3QgcHRkdW1wX3N0YXRlIHB0ZHVtcDsKJiM0MzsJaW50IGZpcnN0X2xldmVsOwogCWludCBsZXZlbDsKIAlwZ3Byb3R2YWxfdCBjdXJyZW50X3Byb3Q7CiAJcGdwcm90dmFsX3QgZWZmZWN0aXZlX3Byb3Q7CkBAIC0yNTQsNyAmIzQzOzI1NSw3IEBAIHN0YXRpYyB2b2lkIGVmZmVjdGl2ZV9wcm90KHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0LCBpbnQgbGV2ZWwsIHU2NCB2YWwpCiAJcGdwcm90dmFsX3QgcHJvdCA9IHZhbCAmYW1wOyBQVEVfRkxBR1NfTUFTSzsKIAlwZ3Byb3R2YWxfdCBlZmZlY3RpdmU7CiAKLQlpZiAobGV2ZWwgJmd0OyAwKSB7CiYjNDM7CWlmIChsZXZlbCAmZ3Q7IHN0LSZndDtmaXJzdF9sZXZlbCkgewogCQlwZ3Byb3R2YWxfdCBoaWdoZXJfcHJvdCA9IHN0LSZndDtwcm90X2xldmVsc1tsZXZlbCAtIDFdOwogCiAJCWVmZmVjdGl2ZSA9IChoaWdoZXJfcHJvdCAmYW1wOyBwcm90ICZhbXA7IChfUEFHRV9VU0VSIHwgX1BBR0VfUlcpKSB8CkBAIC00NTUsNiAmIzQzOzQ1Niw4IEBAIGJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLAogCQkuc2VxCQk9IG0KIAl9OwogCiYjNDM7CXN0LmZpcnN0X2xldmVsID0gcHRkdW1wX3B0X2xldmVsX2ZpcnN0KG1tKTsKJiM0MzsKIAlwdGR1bXBfd2Fsa19wZ2QoJmFtcDtzdC5wdGR1bXAsIG1tLCBwZ2QpOwogCiAJaWYgKCFjaGVja3d4KQpkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKaW5kZXggMDc4Njg5YWE3MjA2ZjguLjkxYjMzYTI2NWE0MzFmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMKQEAgLTEzNDYsNyAmIzQzOzEzNDYsNyBAQCBzdGF0aWMgaW50IGNvbGxhcHNlX3B1ZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwKIAlwbWRfdCAqcG1kLCBmaXJzdDsKIAlpbnQgaTsKIAotCWlmICghZGlyZWN0X2dicGFnZXMpCiYjNDM7CWlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMiB8fCAhZGlyZWN0X2dicGFnZXMpCiAJCXJldHVybiAwOwogCiAJYWRkciAmYW1wOz0gUFVEX01BU0s7CkBAIC0xNzMwLDcgJiM0MzsxNzMwLDggQEAgc3RhdGljIGludCBwb3B1bGF0ZV9wdWQoc3RydWN0IGNwYV9kYXRhICpjcGEsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHA0ZF90ICpwNGQsCiAJLyoKIAkgKiBNYXAgZXZlcnl0aGluZyBzdGFydGluZyBmcm9tIHRoZSBHYiBib3VuZGFyeSwgcG9zc2libHkgd2l0aCAxRyBwYWdlcwogCSAqLwotCXdoaWxlIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfR0JQQUdFUykgJmFtcDsmYW1wOyBlbmQgLSBzdGFydCAmZ3Q7PSBQVURfU0laRSkgewomIzQzOwl3aGlsZSAoQ09ORklHX1BHVEFCTEVfTEVWRUxTICZndDsgMyAmYW1wOyZhbXA7IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9HQlBBR0VTKSAmYW1wOyZhbXA7CiYjNDM7CSAgICAgICBlbmQgLSBzdGFydCAmZ3Q7PSBQVURfU0laRSkgewogCQlzZXRfcHVkKHB1ZCwgcHVkX21raHVnZShwZm5fcHVkKGNwYS0mZ3Q7cGZuLAogCQkJCSAgIGNhbm9uX3BncHJvdChwdWRfcGdwcm90KSkpKTsKIApkaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jCmluZGV4IGYzMmZhY2RiMzAzNTQzLi5lZGFkODQ3YTJlY2RiOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gveDg2L21tL3BndGFibGUuYwpAQCAtNDExLDYgJiM0Mzs0MTEsNyBAQCBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiBjaGFuZ2VkOwogfQogCiYjNDM7I2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVECiBpbnQgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAJCQkgIHB1ZF90ICpwdWRwLCBwdWRfdCBlbnRyeSwgaW50IGRpcnR5KQogewpAQCAtNDMwLDYgJiM0Mzs0MzEsNyBAQCBpbnQgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsCiAKIAlyZXR1cm4gY2hhbmdlZDsKIH0KJiM0MzsjZW5kaWYgLyogQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgKi8KICNlbmRpZgogCiBib29sIHB0ZXBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wNGQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oCmluZGV4IDg5YzIxZjg0Y2ZmYmUyLi4xOWY1YTZlZGE3NmNjMSAxMDA2NDQKLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmgKQEAgLTIyLDI2ICYjNDM7MjIsNjEgQEAgc3RhdGljIGlubGluZSBpbnQgcGdkX25vbmUocGdkX3QgcGdkKQkJeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgcGdkX2JhZChwZ2RfdCBwZ2QpCQl7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBwZ2RfcHJlc2VudChwZ2RfdCBwZ2QpCXsgcmV0dXJuIDE7IH0KIHN0YXRpYyBpbmxpbmUgdm9pZCBwZ2RfY2xlYXIocGdkX3QgKnBnZCkJeyB9CiYjNDM7c3RhdGljIGlubGluZSBib29sIHBnZF9sZWFmKHBnZF90IHBnZCkJCXsgcmV0dXJuIGZhbHNlOyB9CiYjNDM7I2RlZmluZSBwZ2RfbGVhZiBwZ2RfbGVhZgogI2RlZmluZSBwNGRfRVJST1IocDRkKQkJCQkocGdkX0VSUk9SKChwNGQpLnBnZCkpCiAKICNkZWZpbmUgcGdkX3BvcHVsYXRlKG1tLCBwZ2QsIHA0ZCkJCWRvIHsgfSB3aGlsZSAoMCkKICNkZWZpbmUgcGdkX3BvcHVsYXRlX3NhZmUobW0sIHBnZCwgcDRkKQkJZG8geyB9IHdoaWxlICgwKQotLyoKLSAqIChwNGRzIGFyZSBmb2xkZWQgaW50byBwZ2RzIHNvIHRoaXMgZG9lc24mIzM5O3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCwKLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pCi0gKi8KLSNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbCkJc2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KQogCi1zdGF0aWMgaW5saW5lIHA0ZF90ICpwNGRfb2Zmc2V0KHBnZF90ICpwZ2QsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0MzsjZGVmaW5lIHNldF9wZ2QocGdkcHRyLCBwZ2R2YWwpCQkJCQkJXAomIzQzOyh7CQkJCQkJCQkJXAomIzQzOwlwZ2RfY2hlY2tfZHVtbXkocGdkdmFsKTsJCQkJCVwKJiM0MzsJc2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KTsJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHBnZF90IHBnZHBfZ2V0KHBnZF90ICpwNGRwKQogewotCXJldHVybiAocDRkX3QgKilwZ2Q7CiYjNDM7CXBnZF90IGR1bW15ID0geyAwIH07CiYjNDM7CiYjNDM7CXJldHVybiBkdW1teTsKIH0KJiM0MzsjZGVmaW5lIHBnZHBfZ2V0IHBnZHBfZ2V0CiYjNDM7CiYjNDM7I2RlZmluZSBwZ2RfY2hlY2tfZHVtbXkocGdkKSBCVUlMRF9CVUdfT04oX19idWlsdGluX2NvbnN0YW50X3AocGdkX3ZhbChwZ2QpKSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHA0ZF90ICpfX3A0ZF9vZmZzZXQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0Mzt7CiYjNDM7CXJldHVybiAocDRkX3QgKilwZ2RwOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIHA0ZF9vZmZzZXQocGdkcCwgYWRkcmVzcykJCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJcGdkX2NoZWNrX2R1bW15KCoocGdkcCkpOwkJCQkJXAomIzQzOwlfX3A0ZF9vZmZzZXQocGdkcCwgYWRkcmVzcyk7CQkJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHA0ZF90ICpfX3A0ZF9vZmZzZXRfbG9ja2xlc3MocGdkX3QgKnBnZHAsIHBnZF90IHBnZCwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0Mzt7CiYjNDM7CXJldHVybiAocDRkX3QgKilwZ2RwOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIHA0ZF9vZmZzZXRfbG9ja2xlc3MocGdkcCwgcGdkLCBhZGRyZXNzKQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXBnZF9jaGVja19kdW1teSgqKHBnZHApKTsJCQkJCVwKJiM0MzsJX19wNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgYWRkcmVzcyk7CQkJXAomIzQzO30pCiAKICNkZWZpbmUgcDRkX3ZhbCh4KQkJCQkocGdkX3ZhbCgoeCkucGdkKSkKICNkZWZpbmUgX19wNGQoeCkJCQkJKChwNGRfdCkgeyBfX3BnZCh4KSB9KQogCi0jZGVmaW5lIHBnZF9wYWdlKHBnZCkJCQkJKHA0ZF9wYWdlKChwNGRfdCl7IHBnZCB9KSkKLSNkZWZpbmUgcGdkX3BhZ2VfdmFkZHIocGdkKQkJCSgodW5zaWduZWQgbG9uZykocDRkX3BndGFibGUoKHA0ZF90KXsgcGdkIH0pKSkKJiM0MzsjZGVmaW5lIHBnZF9wYWdlKHBnZCkJCQkJKHsgQlVJTERfQlVHKCk7IChzdHJ1Y3QgcGFnZSAqKU5VTEw7IH0pCiYjNDM7I2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpCQkJCQkJXAomIzQzOyh7IAkJCQkJCQkJCVwKJiM0MzsJcGdkX2NoZWNrX2R1bW15KHBnZCk7CQkJCQkJXAomIzQzOwkodW5zaWduZWQgbG9uZylwNGRfcGd0YWJsZSgocDRkX3QpIHsgcGdkIH0pOwkJCVwKJiM0Mzt9KQogCiAvKgogICogYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHA0ZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwNGQgaXMKZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmgKaW5kZXggMzZiNjQ5MGVkMTgwODEuLjYxODUyZWI0YjE1MDRkIDEwMDY0NAotLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaApAQCAtMzEsMjkgJiM0MzszMSw2MSBAQCBzdGF0aWMgaW5saW5lIGludCBwdWRfbm9uZShwdWRfdCBwdWQpCQl7IHJldHVybiAwOyB9CiBzdGF0aWMgaW5saW5lIGludCBwdWRfYmFkKHB1ZF90IHB1ZCkJCXsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHB1ZF9wcmVzZW50KHB1ZF90IHB1ZCkJeyByZXR1cm4gMTsgfQogc3RhdGljIGlubGluZSBpbnQgcHVkX3VzZXIocHVkX3QgcHVkKQkJeyByZXR1cm4gMDsgfQotc3RhdGljIGlubGluZSBpbnQgcHVkX2xlYWYocHVkX3QgcHVkKQkJeyByZXR1cm4gMDsgfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwdWRfbGVhZihwdWRfdCBwdWQpCQl7IHJldHVybiBmYWxzZTsgfQomIzQzOyNkZWZpbmUgcHVkX2xlYWYgcHVkX2xlYWYKIHN0YXRpYyBpbmxpbmUgdm9pZCBwdWRfY2xlYXIocHVkX3QgKnB1ZCkJeyB9CiAjZGVmaW5lIHBtZF9FUlJPUihwbWQpCQkJCShwdWRfRVJST1IoKHBtZCkucHVkKSkKIAogI2RlZmluZSBwdWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKQkJZG8geyB9IHdoaWxlICgwKQogCi0vKgotICogKHBtZHMgYXJlIGZvbGRlZCBpbnRvIHB1ZHMgc28gdGhpcyBkb2VzbiYjMzk7dCBnZXQgYWN0dWFsbHkgY2FsbGVkLAotICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLikKLSAqLwotI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKQkJCXNldF9wbWQoKHBtZF90ICopKHB1ZHB0ciksIChwbWRfdCkgeyBwdWR2YWwgfSkKJiM0MzsjZGVmaW5lIHNldF9wdWQocHVkcHRyLCBwdWR2YWwpCQkJCQkJXAomIzQzOyh7CQkJCQkJCQkJXAomIzQzOwlwdWRfY2hlY2tfZHVtbXkocHVkdmFsKTsJCQkJCVwKJiM0MzsJc2V0X3BtZCgocG1kX3QgKikocHVkcHRyKSwgKHBtZF90KSB7IHB1ZHZhbCB9KTsJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHB1ZF90IHB1ZHBfZ2V0KHB1ZF90ICpwdWRwKQomIzQzO3sKJiM0MzsJcHVkX3QgZHVtbXkgPSB7IDAgfTsKJiM0MzsKJiM0MzsJcmV0dXJuIGR1bW15OwomIzQzO30KJiM0MzsjZGVmaW5lIHB1ZHBfZ2V0IHB1ZHBfZ2V0CiAKLXN0YXRpYyBpbmxpbmUgcG1kX3QgKiBwbWRfb2Zmc2V0KHB1ZF90ICogcHVkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiYjNDM7I2RlZmluZSBwdWRfY2hlY2tfZHVtbXkocHVkKSBCVUlMRF9CVUdfT04oX19idWlsdGluX2NvbnN0YW50X3AocHVkX3ZhbChwdWQpKSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHBtZF90ICpfX3BtZF9vZmZzZXQocHVkX3QgKnB1ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcykKJiM0Mzt7CiYjNDM7CXJldHVybiAocG1kX3QgKilwdWRwOwomIzQzO30KJiM0MzsKJiM0MzsjZGVmaW5lIHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcykJCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJcHVkX2NoZWNrX2R1bW15KCoocHVkcCkpOwkJCQkJXAomIzQzOwlfX3BtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7CQkJCQlcCiYjNDM7fSkKJiM0MzsKJiM0MztzdGF0aWMgX19hbHdheXNfaW5saW5lIHBtZF90ICpfX3BtZF9vZmZzZXRfbG9ja2xlc3MocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCwKJiM0MzsJCXVuc2lnbmVkIGxvbmcgYWRkcmVzcykKIHsKLQlyZXR1cm4gKHBtZF90ICopcHVkOwomIzQzOwlyZXR1cm4gKHBtZF90ICopcHVkcDsKIH0KLSNkZWZpbmUgcG1kX29mZnNldCBwbWRfb2Zmc2V0CiYjNDM7CiYjNDM7I2RlZmluZSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgYWRkcmVzcykJCQkJXAomIzQzOyh7CQkJCQkJCQkJXAomIzQzOwlwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7CQkJCQlcCiYjNDM7CV9fcG1kX29mZnNldF9sb2NrbGVzcyhwdWRwLCBwdWQsIGFkZHJlc3MpOwkJCVwKJiM0Mzt9KQogCiAjZGVmaW5lIHBtZF92YWwoeCkJCQkJKHB1ZF92YWwoKHgpLnB1ZCkpCiAjZGVmaW5lIF9fcG1kKHgpCQkJCSgocG1kX3QpIHsgX19wdWQoeCkgfSApCiAKLSNkZWZpbmUgcHVkX3BhZ2UocHVkKQkJCQkocG1kX3BhZ2UoKHBtZF90KXsgcHVkIH0pKQotI2RlZmluZSBwdWRfcGd0YWJsZShwdWQpCQkJKChwbWRfdCAqKShwbWRfcGFnZV92YWRkcigocG1kX3QpeyBwdWQgfSkpKQomIzQzOyNkZWZpbmUgcHVkX3BhZ2UocHVkKQkJCQkoeyBCVUlMRF9CVUcoKTsgKHN0cnVjdCBwYWdlICopTlVMTDsgfSkKJiM0MzsjZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZCkJCQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXB1ZF9jaGVja19kdW1teShwdWQpOwkJCQkJCVwKJiM0MzsJKChwbWRfdCAqKShwbWRfcGFnZV92YWRkcigocG1kX3QpIHsgcHVkIH0pKSk7CQkJXAomIzQzO30pCiAKIC8qCiAgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcG1kIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHBtZCBpcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmggYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaAppbmRleCAzNTZjYmZiYWFiMjQ3Ni4uNWVlOGYxODUyY2Q4YzkgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oCkBAIC0yOSwyNyAmIzQzOzI5LDYyIEBAIHN0YXRpYyBpbmxpbmUgaW50IHA0ZF9ub25lKHA0ZF90IHA0ZCkJCXsgcmV0dXJuIDA7IH0KIHN0YXRpYyBpbmxpbmUgaW50IHA0ZF9iYWQocDRkX3QgcDRkKQkJeyByZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSBpbnQgcDRkX3ByZXNlbnQocDRkX3QgcDRkKQl7IHJldHVybiAxOyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgcDRkX2NsZWFyKHA0ZF90ICpwNGQpCXsgfQomIzQzO3N0YXRpYyBpbmxpbmUgYm9vbCBwNGRfbGVhZihwNGRfdCBwNGQpCQl7IHJldHVybiBmYWxzZTsgfQomIzQzOyNkZWZpbmUgcDRkX2xlYWYgcDRkX2xlYWYKICNkZWZpbmUgcHVkX0VSUk9SKHB1ZCkJCQkJKHA0ZF9FUlJPUigocHVkKS5wNGQpKQogCiAjZGVmaW5lIHA0ZF9wb3B1bGF0ZShtbSwgcDRkLCBwdWQpCQlkbyB7IH0gd2hpbGUgKDApCiAjZGVmaW5lIHA0ZF9wb3B1bGF0ZV9zYWZlKG1tLCBwNGQsIHB1ZCkJCWRvIHsgfSB3aGlsZSAoMCkKLS8qCi0gKiAocHVkcyBhcmUgZm9sZGVkIGludG8gcDRkcyBzbyB0aGlzIGRvZXNuJiMzOTt0IGdldCBhY3R1YWxseSBjYWxsZWQsCi0gKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKQotICovCi0jZGVmaW5lIHNldF9wNGQocDRkcHRyLCBwNGR2YWwpCXNldF9wdWQoKHB1ZF90ICopKHA0ZHB0ciksIChwdWRfdCkgeyBwNGR2YWwgfSkKIAotc3RhdGljIGlubGluZSBwdWRfdCAqcHVkX29mZnNldChwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiYjNDM7I2RlZmluZSBzZXRfcDRkKHA0ZHB0ciwgcDRkdmFsKQkJCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJcDRkX2NoZWNrX2R1bW15KHA0ZHZhbCk7CQkJCQlcCiYjNDM7CXNldF9wdWQoKHB1ZF90ICopKHA0ZHB0ciksIChwdWRfdCkgeyBwNGR2YWwgfSk7CQkJXAomIzQzO30pCiYjNDM7CiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCBwNGRwX2dldChwNGRfdCAqcDRkcCkKJiM0Mzt7CiYjNDM7CXA0ZF90IGR1bW15ID0geyAwIH07CiYjNDM7CiYjNDM7CXJldHVybiBkdW1teTsKJiM0Mzt9CiYjNDM7I2RlZmluZSBwNGRwX2dldCBwNGRwX2dldAomIzQzOwomIzQzOyNkZWZpbmUgcDRkX2NoZWNrX2R1bW15KHA0ZCkgQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHA0ZF92YWwocDRkKSkpCiYjNDM7CiYjNDM7c3RhdGljIF9fYWx3YXlzX2lubGluZSBwdWRfdCAqX19wdWRfb2Zmc2V0KHA0ZF90ICpwNGRwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpCiB7Ci0JcmV0dXJuIChwdWRfdCAqKXA0ZDsKJiM0MzsJcmV0dXJuIChwdWRfdCAqKXA0ZHA7CiB9Ci0jZGVmaW5lIHB1ZF9vZmZzZXQgcHVkX29mZnNldAomIzQzOwomIzQzOyNkZWZpbmUgcHVkX29mZnNldChwNGRwLCBhZGRyZXNzKQkJCQkJXAomIzQzOyh7CQkJCQkJCQkJXAomIzQzOwlwNGRfY2hlY2tfZHVtbXkoKihwNGRwKSk7CQkJCQlcCiYjNDM7CV9fcHVkX29mZnNldChwNGRwLCBhZGRyZXNzKTsJCQkJCVwKJiM0Mzt9KQomIzQzOwomIzQzO3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcHVkX3QgKl9fcHVkX29mZnNldF9sb2NrbGVzcyhwNGRfdCAqcDRkcCwgcDRkX3QgcDRkLAomIzQzOwkJdW5zaWduZWQgbG9uZyBhZGRyZXNzKQomIzQzO3sKJiM0MzsJcmV0dXJuIChwdWRfdCAqKXA0ZHA7CiYjNDM7fQomIzQzOwomIzQzOyNkZWZpbmUgcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGFkZHJlc3MpCQkJCVwKJiM0MzsoewkJCQkJCQkJCVwKJiM0MzsJcDRkX2NoZWNrX2R1bW15KCoocDRkcCkpOwkJCQkJXAomIzQzOwlfX3B1ZF9vZmZzZXRfbG9ja2xlc3MocDRkcCwgcDRkLCBhZGRyZXNzKTsJCQlcCiYjNDM7fSkKIAogI2RlZmluZSBwdWRfdmFsKHgpCQkJCShwNGRfdmFsKCh4KS5wNGQpKQogI2RlZmluZSBfX3B1ZCh4KQkJCQkoKHB1ZF90KSB7IF9fcDRkKHgpIH0pCiAKLSNkZWZpbmUgcDRkX3BhZ2UocDRkKQkJCQkocHVkX3BhZ2UoKHB1ZF90KXsgcDRkIH0pKQotI2RlZmluZSBwNGRfcGd0YWJsZShwNGQpCQkJKChwdWRfdCAqKShwdWRfcGd0YWJsZSgocHVkX3QpeyBwNGQgfSkpKQomIzQzOyNkZWZpbmUgcDRkX3BhZ2UocDRkKQkJCQkoeyBCVUlMRF9CVUcoKTsgKHN0cnVjdCBwYWdlICopTlVMTDsgfSkKJiM0MzsjZGVmaW5lIHA0ZF9wZ3RhYmxlKHA0ZCkJCQkJCQlcCiYjNDM7KHsJCQkJCQkJCQlcCiYjNDM7CXA0ZF9jaGVja19kdW1teShwNGQpOwkJCQkJCVwKJiM0MzsJKChwdWRfdCAqKShwdWRfcGd0YWJsZSgocHVkX3QpIHsgcDRkIH0pKSk7CQkJXAomIzQzO30pCiAKIC8qCiAgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcHVkIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHB1ZCBpcwpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wdGR1bXAuaCBiL2luY2x1ZGUvbGludXgvcHRkdW1wLmgKaW5kZXggMjQwYmQzYmZmMThkZDIuLjI2ZmE2MjRlYWM0NGVmIDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvcHRkdW1wLmgKQEAgLTI5LDYgJiM0MzsyOSw3IEBAIGJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLAogCQkJCXN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLAogCQkJCWJvb2wgY2hlY2t3eCwgYm9vbCBkbWVzZyk7CiB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpOwomIzQzO2ludCBwdGR1bXBfcHRfbGV2ZWxfZmlyc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0pOwogYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZCk7CiAKIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19jaGVja3d4KHZvaWQpCmRpZmYgLS1naXQgYS9tbS9wdGR1bXAuYyBiL21tL3B0ZHVtcC5jCmluZGV4IDU4NTEwOTZlNmY2NTZjLi45NjY3NmM5MDQzMGYxOCAxMDA2NDQKLS0tIGEvbW0vcHRkdW1wLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vcHRkdW1wLmMKQEAgLTE5Nyw2ICYjNDM7MTk3LDE3IEBAIHZvaWQgcHRkdW1wX3dhbGtfcGdkKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnN0LCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCkKIAlzdC0mZ3Q7bm90ZV9wYWdlX2ZsdXNoKHN0KTsKIH0KIAomIzQzO2ludCBwdGR1bXBfcHRfbGV2ZWxfZmlyc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0pCiYjNDM7ewomIzQzOwlpZiAobW1fcG1kX2ZvbGRlZChtbSkpCiYjNDM7CQlyZXR1cm4gMzsKJiM0MzsJaWYgKG1tX3B1ZF9mb2xkZWQobW0pKQomIzQzOwkJcmV0dXJuIDI7CiYjNDM7CWlmIChtbV9wNGRfZm9sZGVkKG1tKSkKJiM0MzsJCXJldHVybiAxOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgaW50IGNoZWNrX3d4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KQogewogCWlmIChwdGR1bXBfY2hlY2tfd3goKSkKZGlmZiAtLWdpdCBhL21tL3Ztc2Nhbi5jIGIvbW0vdm1zY2FuLmMKaW5kZXggMDZlMTAzZjk3ODFlNWQuLjBjOWM0YWM4OWUwOTRhIDEwMDY0NAotLS0gYS9tbS92bXNjYW4uYwomIzQzOyYjNDM7JiM0MzsgYi9tbS92bXNjYW4uYwpAQCAtMzcyNyw3ICYjNDM7MzcyNyw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsCiAJCWlmICghcHVkX3ByZXNlbnQodmFsKSB8fCBXQVJOX09OX09OQ0UocHVkX2xlYWYodmFsKSkpCiAJCQljb250aW51ZTsKIAotCQl3YWxrX3BtZF9yYW5nZSgmYW1wO3ZhbCwgYWRkciwgbmV4dCwgYXJncyk7CiYjNDM7CQl3YWxrX3BtZF9yYW5nZShwdWQgJiM0MzsgaSwgYWRkciwgbmV4dCwgYXJncyk7CiAKIAkJaWYgKG5lZWRfcmVzY2hlZCgpIHx8IHdhbGstJmd0O2JhdGNoZWQgJmd0Oz0gTUFYX0xSVV9CQVRDSCkgewogCQkJZW5kID0gKGFkZHIgfCB+UFVEX01BU0spICYjNDM7IDE7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyODUwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMTAxMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipDb3JlIE1NIFBhdGNoOiBQYWdlIFRhYmxlIEZvbGRpbmcgRml4ZXMgLSBGdXp6aW5nIFRhcmdldCBJZGVudGlmaWVkKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIHBhdGNoIGluIGZyb250IG9mIG1lLCBhbmQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IGlzIHRoYXQgdGhpcyBpcyBhICpzaWduaWZpY2FudCogY2hhbmdlLiBJdCYjMzk7cyB0b3VjaGluZyBhIHdpZGUgcmFuZ2Ugb2YgYXJjaGl0ZWN0dXJlcyAoYGFybWAsIGBhcm02NGAsIGBsb29uZ2FyY2hgLCBgbWlwc2AsIGBvcGVucmlzY2AsIGByaXNjdmAsIGB4ODZgKSBhbmQgaW52b2x2ZXMgY3J1Y2lhbCBpbmNsdWRlIGZpbGVzIChgYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3AqYCkuIFRoZSBoZWFydCBvZiB0aGUgY2hhbmdlIHJldm9sdmVzIGFyb3VuZCBob3cgd2UgaGFuZGxlIGZvbGRlZCBwYWdlIHRhYmxlcywgc3BlY2lmaWNhbGx5IHRoZSBtYWNyb3MgYW5kIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZW0uCgpFc3NlbnRpYWxseSwgaXQmIzM5O3MgbW9kaWZ5aW5nIHBhZ2UgdGFibGUgd2Fsa3MgdG8gY29ycmVjdCB0aGVzZSBmb2xkZWQgcGFnZSB0YWJsZSBpbXBsZW1lbnRhdGlvbnMuIFRoZSBpbnRyb2R1Y3Rpb24gb2YgYHBnZF9jaGVja19kdW1teWAsIGBwNGRfY2hlY2tfZHVtbXlgLCBhbmQgYHB1ZF9jaGVja19kdW1teWAgc3VnZ2VzdHMgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGZ1bmRhbWVudGFsIGFkanVzdG1lbnQgaW4gaG93IHRoZSBrZXJuZWwgdmVyaWZpZXMgdGhlIHZhbGlkaXR5IG9mIHRoZXNlIHN0cnVjdHVyZXMuCgpNeSBpbW1lZGlhdGUgcmVkIGZsYWcgaXMgdGhhdCB0aGlzIHBhdGNoICpkZWZpbml0ZWx5KiBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMuIEl0JiMzOTtzIHRvdWNoaW5nIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgY29tcG9uZW50cy4gQW5kIHRoZSBmaXhlcyB0byBgdm1hbGxvY19mYXVsdGAgKFJJU0MtViksIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAgKFJJU0MtViBLVk0pLCBhbmQgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgIChMb29uZ0FyY2ggS1ZNKSBhcmUgaW5kaWNhdG9ycyB0aGF0IEtWTS92aXJ0dWFsaXphdGlvbiBpcyBhbHNvIGludm9sdmVkLiBUaGlzIGlzIGdvaW5nIHRvIGhhdmUgcmVhbC13b3JsZCBpbXBhY3QuCgpMb29raW5nIHNwZWNpZmljYWxseSBhdCBgbW0vdm1zY2FuLmNgLCB0aGUgY2hhbmdlIGluIGB3YWxrX3B1ZF9yYW5nZWAg4oCTIHBhc3NpbmcgYHB1ZCAmIzQzOyBpYCBpbnN0ZWFkIG9mIGAmYW1wO3ZhbGAgdG8gYHdhbGtfcG1kX3JhbmdlYCDigJMgc2VlbXMgbGlrZSBhIHN1YnRsZSBidXQgbGlrZWx5IGltcG9ydGFudCBjb3JyZWN0aW9uLiBUaGlzIGlzIHdpdGhpbiBNR0xSVSwgc28gdGhpcyBwYXRjaCBhZmZlY3RzIHRoZSBwZXJmb3JtYW5jZSBvZiB0aGUgcGFnZSByZWNsYWltIG1lY2hhbmlzbS4KCkkgbmVlZCB0byBjb25maXJtIHRoZSBzY29wZSBvZiBpbXBhY3QsIGFuZCBJIHdhbnQgdG8gZXhhbWluZSB0aGVzZSBrZXkgc3ltYm9scyBjbG9zZWx5OgoqICAgYHdhbGtfcHVkX3JhbmdlYCAoaW4gYG1tL3Ztc2Nhbi5jYCkKKiAgIGB2bWFsbG9jX2ZhdWx0YCAoaW4gYGFyY2gvcmlzY3YvbW0vZmF1bHQuY2ApCiogICBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgIChpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgKQoqICAgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgIChpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYCkKKiAgIGBwdGR1bXBfcHRfbGV2ZWxfZmlyc3RgIChpbiBgbW0vcHRkdW1wLmNgKQoqICAgYGNvbGxhcHNlX3B1ZF9wYWdlYCAoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgKQoqICAgYHBvcHVsYXRlX3B1ZGAgKGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCkKCk15IHByaW9yaXR5IGlzIGB3YWxrX3B1ZF9yYW5nZWAsIGFuZCBjb25maXJtZWQgaXQgaXMgcGFydCBvZiBNR0xSVSYjMzk7cyBgd2Fsa19wZ2RfcmFuZ2VgIC0mZ3Q7IGB3YWxrX3A0ZF9yYW5nZWAgLSZndDsgYHdhbGtfcHVkX3JhbmdlYCAtJmd0OyBgd2Fsa19wbWRfcmFuZ2VgIC0mZ3Q7IGB3YWxrX3B0ZV9yYW5nZWAgZnVuY3Rpb24gY2FsbCBjaGFpbi4gSXQmIzM5O3Mgc3RhdGljLCBzbyBpdCBzaG91bGQgYmUgdGVzdGFibGUuCgpHaXZlbiB0aGUgd2lkZXNwcmVhZCBhcmNoaXRlY3R1cmUgaW1wYWN0IGFuZCB0aGUgZnVuZGFtZW50YWwgbmF0dXJlIG9mIHRoZSBjaGFuZ2UgKHBhZ2UgdGFibGUgd2Fsa3MpLCAqKnRoaXMgaXMgZGVmaW5pdGVseSBhIGNhbmRpZGF0ZSBmb3IgZnV6emluZyoqLiBJJiMzOTtsbCBuZWVkIHRvIGRldmVsb3AgZm9jdXNlZCBmdXp6aW5nIHRhcmdldHMgc3BlY2lmaWNhbGx5IHRhcmdldGluZyB0aGVzZSBhcmVhcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YWxrX3B1ZF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTM2MzY9c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1zY2FuLmMtMzcwOC1cbm1tL3Ztc2Nhbi5jOjM3MDk6c3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL3Ztc2Nhbi5jLTM3MTAtXHRcdFx0ICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcbi0tXG5tbS92bXNjYW4uYz0zNzUxPXN0YXRpYyB2b2lkIHdhbGtfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG4tLVxubW0vdm1zY2FuLmMtMzc1NC1cdFx0LnRlc3Rfd2FsayA9IHNob3VsZF9za2lwX3ZtYSxcbm1tL3Ztc2Nhbi5jOjM3NTU6XHRcdC5wNGRfZW50cnkgPSB3YWxrX3B1ZF9yYW5nZSxcbm1tL3Ztc2Nhbi5jLTM3NTYtXHRcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0ODQzCgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogNDMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHByZXNlbnRlZCBhcyBhIHBlcnNvbmFsIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOgoKKipOYXZpZ2F0aW5nIE1lbW9yeSBNYW5hZ2VtZW50IENvZGUqKgoKUmlnaHQsIHNvIEkmIzM5O20gZGlnZ2luZyBpbnRvIHRoaXMgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSwgYW5kIEkgc2VlIHRoaXMgYC5wNGRfZW50cnkgPSB3YWxrX3B1ZF9yYW5nZWAgYXNzaWdubWVudCBpbiBgd2Fsa19tbWAuIEhtbSwgaW50ZXJlc3RpbmcuIFRoYXQgbGlrZWx5IG1lYW5zIHRoaXMgZnVuY3Rpb24gdXNlcyBgd2Fsa19wdWRfcmFuZ2VgIHRvLCB3ZWxsLCB3YWxrIGEgcmFuZ2Ugb2YgcGFnZSB1cHBlciBkaXJlY3RvcnkgKFBVRCkgZW50cmllcywgd2hpY2ggaXMgYSBjb21tb24gc3RyYXRlZ3kuIE5vdywgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgaWYgYENPTkZJR19MUlVfR0VOYCBvciBzb21ldGhpbmcgc2ltaWxhciwgbWF5YmUgYENPTkZJR19MUlVfR0VOX0VOQUJMRURgLCBpcyBkZWZpbmVkLiBJIGJldCB0aGUgY29kZSYjMzk7cyBiZWhhdmlvciBjaGFuZ2VzIGRlcGVuZGluZyBvbiBob3cgdGhlIExSVSBpcyBpbXBsZW1lbnRlZC4gVGhpcyB3aWxsIHByb2JhYmx5IHRlbGwgbWUgd2hldGhlciB0aGUgY29kZSBpcyBkb2luZyBhbnkgZmFuY3kgTFJVLXJlbGF0ZWQgcGFnZSBzZWxlY3Rpb24gb3IgaGFuZGxpbmcgZHVyaW5nIHRoZSB3YWxrLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIExSVSBmb3IgdGhpcyBjb2RlIHBhdGguIExldCYjMzk7cyBzZWUgd2hhdCB0aGUgY29uZmlnIG9wdGlvbnMgdGVsbCBtZSBhYm91dCBob3cgdGhlIHBhZ2luZyBzdHJ1Y3R1cmVzIGFyZSBtYW5pcHVsYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YWxrX3B1ZF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jPTk2PXN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdld2Fsay5jLTE4NC1cbm1tL3BhZ2V3YWxrLmM6MTg1OnN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL3BhZ2V3YWxrLmMtMTg2LVx0XHRcdCAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vcGFnZXdhbGsuYz0yNTA9c3RhdGljIGludCB3YWxrX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtMjc5LVx0XHRpZiAoaGFzX2hhbmRsZXIgfHwgaGFzX2luc3RhbGwpXG5tbS9wYWdld2Fsay5jOjI4MDpcdFx0XHRlcnIgPSB3YWxrX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHdhbGspO1xubW0vcGFnZXdhbGsuYy0yODEtXHRcdGlmIChlcnIpXG4tLVxubW0vdm1zY2FuLmM9MzYzNj1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNzA4LVxubW0vdm1zY2FuLmM6MzcwOTpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1zY2FuLmMtMzcxMC1cdFx0XHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxuLS1cbm1tL3Ztc2Nhbi5jPTM3NTE9c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0zNzU0LVx0XHQudGVzdF93YWxrID0gc2hvdWxkX3NraXBfdm1hLFxubW0vdm1zY2FuLmM6Mzc1NTpcdFx0LnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlLFxubW0vdm1zY2FuLmMtMzc1Ni1cdFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTU2MTAKCQkJCQkJCW91dHB1dDogMjkKCQkJCQkJCXRob3VnaHRzOiA0MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipNR0xSVSBDb250ZXh0IGluIGB3YWxrX3B1ZF9yYW5nZWAqKgoKUmlnaHQsIGB3YWxrX3B1ZF9yYW5nZWAgd2l0aGluIGBtbS92bXNjYW4uY2AuLi4gdGhhdCYjMzk7cyB0aGUgZnVuY3Rpb24gTUdMUlUgdXRpbGl6ZXMsIGlzbiYjMzk7dCBpdD8gTXkgZmlyc3QgdGhvdWdodCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgZW5hYmxpbmcgY29uZGl0aW9uLiBJcyBNR0xSVSB0aGUgZGVmYXVsdCBiZWhhdmlvciBub3csIG9yIGlzIGl0IGdhdGVkIGJlaGluZCBzb21lIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbj8gSSBuZWVkIHRvIGtub3cgaWYgSSBjYW4ganVzdCBhc3N1bWUgaXQmIzM5O3MgcnVubmluZyB3aGVuIHRlc3Rpbmcgb3IgaWYgSSBuZWVkIHRvIGJ1aWxkIGEgc3BlY2lmaWMga2VybmVsIHRvIHNlZSBpdCBpbiBhY3Rpb24uIElmIGl0IHJlcXVpcmVzIGEgY29uZmlnLCBJJiMzOTtsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lLCBzbyBJIGNhbiBlbnN1cmUgdGhlIHRlc3RzIGFyZSByZXByZXNlbnRhdGl2ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgTFJVX0dFTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz0xMzg5PWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1Bcbi0tXG5tbS9LY29uZmlnLTEzOTktIyBtdWx0aS1nZW4gTFJVIHtcbm1tL0tjb25maWc6MTQwMDpjb25maWcgTFJVX0dFTlxubW0vS2NvbmZpZy0xNDAxLVx0Ym9vbCBcJiMzNDtNdWx0aS1HZW4gTFJVXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDA4LVxubW0vS2NvbmZpZzoxNDA5OmNvbmZpZyBMUlVfR0VOX0VOQUJMRURcbm1tL0tjb25maWctMTQxMC1cdGJvb2wgXCYjMzQ7RW5hYmxlIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTE0MTQtXG5tbS9LY29uZmlnOjE0MTU6Y29uZmlnIExSVV9HRU5fU1RBVFNcbm1tL0tjb25maWctMTQxNi1cdGJvb2wgXCYjMzQ7RnVsbCBzdGF0cyBmb3IgZGVidWdnaW5nXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy0xNDIzLVxubW0vS2NvbmZpZzoxNDI0OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxubW0vS2NvbmZpZy0xNDI1LVx0ZGVmX2Jvb2wgeVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MDc0CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipSZXZpc2l0aW5nIGB3YWxrX3B1ZF9yYW5nZWAgaW4gYG1tL3Ztc2Nhbi5jYCoqCgpPa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGB3YWxrX3B1ZF9yYW5nZWAuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGVyZSYjMzk7cyBzb21ldGhpbmcgaW4gdGhlIGludGVyYWN0aW9uIGJldHdlZW4gdGhlIHBhZ2Ugd2Fsa2VyIGFuZCB0aGUgVk0gc2Nhbm5lciB0aGF0IGlzbiYjMzk7dCBxdWl0ZSBjbGlja2luZywgYW5kIG15IGludHVpdGlvbiBpcyBudWRnaW5nIG1lIHRvd2FyZHMgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbi4gSSBzdXNwZWN0IHRoZXJlIG1heSBiZSBzdWJ0bGUgbnVhbmNlcyBpbiBpdHMgaGFuZGxpbmcgb2YgUFVEIGVudHJpZXMsIHBhcnRpY3VsYXJseSBhcm91bmQgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucyBvciBlZGdlIGNhc2VzIHdpdGhpbiB0aGUgcmVjbGFpbSBwcm9jZXNzIHRoYXQgYXJlIHdvcnRoIGFub3RoZXIgbG9vay4gTGV0JiMzOTtzIGRpZyBiYWNrIGludG8gdGhlIGRldGFpbHMgYW5kIHJlLWV2YWx1YXRlIGl0cyBiZWhhdmlvdXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbGtfcHVkX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vdm1zY2FuLmM9MzYzNj1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS92bXNjYW4uYy0zNzA4LVxubW0vdm1zY2FuLmM6MzcwOTpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxubW0vdm1zY2FuLmMtMzcxMC1cdFx0XHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxuLS1cbm1tL3Ztc2Nhbi5jPTM3NTE9c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2Fsaylcbi0tXG5tbS92bXNjYW4uYy0zNzU0LVx0XHQudGVzdF93YWxrID0gc2hvdWxkX3NraXBfdm1hLFxubW0vdm1zY2FuLmM6Mzc1NTpcdFx0LnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlLFxubW0vdm1zY2FuLmMtMzc1Ni1cdFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2NTM2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6CgoqKkRpZ2dpbmcgaW50byBSSVNDLVYgTWVtb3J5IEZhdWx0cyoqCgpPa2F5LCBzbyBJIHJlbWVtYmVyIHdlIG5lZWQgYExSVV9HRU5gIGZvciBgd2Fsa19wdWRfcmFuZ2VgIGluIGBtbS92bXNjYW4uY2AuIEkgbmVlZCB0byBmaWd1cmUgb3V0IGhvdyB0aGlzIHRpZXMgaW50byB0aGUgYmlnZ2VyIHBpY3R1cmUsIGVzcGVjaWFsbHkgZ2l2ZW4gdGhhdCB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBSSVNDLVYuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBhcmNoL3Jpc2N2L21tL2ZhdWx0LmNgLiBJIGhhdmUgYSBmZWVsaW5nIGB2bWFsbG9jX2ZhdWx0YCBpcyBnb2luZyB0byBiZSByZWxldmFudCBoZXJlLiBMZXQmIzM5O3Mgc2VlIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGhhbmRsZXMgZmF1bHRzLCBhbmQgaG93IHRoYXQgaW50ZXJhY3RzIHdpdGggdGhlIHZpcnR1YWwgbWVtb3J5IGFsbG9jYXRvci4gSSYjMzk7bSBndWVzc2luZyB0aGlzIG1pZ2h0IHNoZWQgbGlnaHQgb24gaG93IGBMUlVfR0VOYCBnZXRzIHVzZWQgaW4gY29uanVuY3Rpb24gd2l0aCBmYXVsdCBoYW5kbGluZyBpbiB0aGlzIHNwZWNpZmljIGNvbnRleHQuIFVuZGVyc3RhbmRpbmcgdGhlIGNvbm5lY3Rpb24gYmV0d2VlbiB0aGUgZ2VuZXJpYyBtZW1vcnkgbWFuYWdlbWVudCBhbmQgdGhlIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmYXVsdCBoYW5kbGluZyBpcyBrZXkgdG8gZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgbWVtb3J5IGJlaGF2aW9yLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFsbG9jX2ZhdWx0JiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9yaXNjdi9tbS9mYXVsdC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbW0vZmF1bHQuYz0xNjA9YmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY29kZSxcbi0tXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMTY3LVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjE2ODpzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcilcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0xNjkte1xuLS1cbmFyY2gvcmlzY3YvbW0vZmF1bHQuYz0yOTI9dm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcbi0tXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzI2LVx0ICAgIHVubGlrZWx5KGFkZHIgXHUwMDNlPSBWTUFMTE9DX1NUQVJUIFx1MDAyNlx1MDAyNiBhZGRyIFx1MDAzYyBWTUFMTE9DX0VORCkpIHtcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYzozMjc6XHRcdHZtYWxsb2NfZmF1bHQocmVncywgY29kZSwgYWRkcik7XG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMzI4LVx0XHRyZXR1cm47XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE3MDU1CgkJCQkJCQlvdXRwdXQ6IDQxCgkJCQkJCQl0aG91Z2h0czogMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKk5hdmlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQ6IFJJU0MtViAmYW1wOyBQYWdlIFRhYmxlIE9wdGltaXphdGlvbnMqKgoKUmlnaHQsIHRoaXMgbG9va3MgbGlrZSBhIFJJU0MtViBzcGVjaWZpYyBxdWVzdGlvbiwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBhcmNoaXRlY3R1cmUgaW4gbWluZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoZSBzY2VuYXJpbyBvZiBjb2xsYXBzaW5nIFBVRCBwYWdlcyDigJMgb3IsIG1vcmUgYnJvYWRseSwgaG93IHRoZXkmIzM5O3JlIGhhbmRsZWQgd2hlbiBvcHRpbWl6YXRpb24gb2NjdXJzLgoKSSYjMzk7bGwgY3Jvc3MtcmVmZXJlbmNlIHdoYXQgSSYjMzk7bSB0aGlua2luZyBoZXJlIHdpdGggZXN0YWJsaXNoZWQgcHJhY3RpY2VzLCBzbyBJIHRoaW5rIGEgZ29vZCBwbGFjZSB0byBzdGFydCB3b3VsZCBiZSB0byBsb29rIGZvciBpbnNwaXJhdGlvbiBpbiB0aGUgeDg2IGNvZGUgYmFzZS4gU3BlY2lmaWNhbGx5LCBJJiMzOTtsbCBjaGVjayBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIHNlYXJjaCBmb3IgYW55IGZ1bmN0aW9ucyByZWxhdGluZyB0byBgY29sbGFwc2VfcHVkX3BhZ2VgLiBXaGlsZSB0aGUgYXJjaGl0ZWN0dXJlcyBhcmUgZGlmZmVyZW50LCB0aGVyZSBtYXkgYmUgc29tZSBjb25jZXB0dWFsIG92ZXJsYXAgaW4gdGhlIHdheSB3ZSBoYW5kbGUgUFRFIGFuZCBQVUQgZW50cmllcywgZXZlbiBpZiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcmUgbmVjZXNzYXJpbHkgZGlzdGluY3QuIFRoYXQgZmlsZSB3b3VsZCBsaWtlbHkgaG9sZCBzb21lIGluc2lnaHRzIG9uIHN0cmF0ZWdpZXMgZm9yIG1lcmdpbmcgb3IgbW9kaWZ5aW5nIHBhZ2UgZGlyZWN0b3J5IGVudHJpZXMuIFRoaXMgc2VhcmNoIHdpbGwgc2VydmUgYXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBteSBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb2xsYXBzZV9wdWRfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0xMjcyPXN0YXRpYyBpbnQgY29sbGFwc2VfcG1kX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTM0MS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTM0MjpzdGF0aWMgaW50IGNvbGxhcHNlX3B1ZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTM0My1cdFx0XHQgICAgIHN0cnVjdCBsaXN0X2hlYWQgKnBndGFibGVzKVxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTM5Nz1zdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xNDIyLVx0aWYgKGNvbGxhcHNlZClcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTQyMzpcdFx0Y29sbGFwc2VkICYjNDM7PSBjb2xsYXBzZV9wdWRfcGFnZShwdWQsIGFkZHIsIHBndGFibGVzKTtcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTQyNC1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzU8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc2NzEKCQkJCQkJCW91dHB1dDogNDMKCQkJCQkJCXRob3VnaHRzOiAyOQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgZGV2ZWxvcG1lbnQ6CgoqKlRhcmdldGluZyB4ODYgUGFnZSBUYWJsZSBEaWFnbm9zdGljcyoqCgpSaWdodCwgdGhpcyBzZWVtcyB0byBiZSBhYm91dCB4ODYgc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGdvaW5nIG9uIGhlcmUuIEkmIzM5O20gdGhpbmtpbmcgdGhlIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoaXMgd291bGQgYmUgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgcmVsYXRlZCB0byBwYWdlIHRhYmxlcywgYW5kIGNvbnNpZGVyaW5nIHRoZSBhcmNoaXRlY3R1cmUsIHRoZSBiZXN0IHBsYWNlIHRvIGZpbmQgdGhhdCB3b3VsZCBiZSBpbiB0aGUgeDg2LXNwZWNpZmljIHBhcnRzIG9mIHRoZSBrZXJuZWwuICYjMzQ7YXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMmIzM0OyBqdW1wcyBvdXQgYXMgdGhlIG9idmlvdXMgY2FuZGlkYXRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaW4gdGhlcmUuIEkmIzM5O20gYmV0dGluZyB0aGF0JiMzOTtzIHdoZXJlIEkmIzM5O2xsIGZpbmQgdGhlIGxvZ2ljIGZvciBpbnNwZWN0aW5nIGFuZCBkdW1waW5nIHRoZSBjb250ZW50cyBvZiB0aG9zZSBjcml0aWNhbCBkYXRhIHN0cnVjdHVyZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B0ZHVtcF9wdF9sZXZlbF9maXJzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQyND1ib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NTgtXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0NTk6XHRzdC5maXJzdF9sZXZlbCA9IHB0ZHVtcF9wdF9sZXZlbF9maXJzdChtbSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00NjAtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4MDQ5CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQW5hbHl6aW5nIHRoZSB4ODYgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqCgpBbHJpZ2h0LCBzbyB0aGlzIGxvb2tzIHg4NiBzcGVjaWZpYy4gVGhhdCYjMzk7cyBnb29kIHRvIGtub3cg4oCTIGl0IG5hcnJvd3MgdGhlIHNjb3BlIGNvbnNpZGVyYWJseS4gSG9sZCBvbi4uLkkgaW5pdGlhbGx5IHRob3VnaHQgdGhlIGNoYW5nZXMgd2VyZSBpc29sYXRlZCB0byBgbW0vdm1zY2FuLmNgLCBzcGVjaWZpY2FsbHkgcmVsYXRlZCB0byBob3cgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBwYWdlIHdhbGtzLCBidXQgSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGlzLiBJJiMzOTt2ZSBnb3QgYSBuYWdnaW5nIGZlZWxpbmcuLi53YXNuJiMzOTt0IGB3YWxrX3B1ZF9yYW5nZWAgaW4gYG1tL3BhZ2V3YWxrLmNgIGFsc28gdG91Y2hlZD8gRG91YmxlIGNoZWNraW5nIHRoZSBwYXRjaCBkZXNjcmlwdGlvbi4uLiBub3BlLCBsb29rcyBsaWtlIGl0JiMzOTtzICpqdXN0KiBgbW0vdm1zY2FuLmNgLiBCdXQgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGtpbmRzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMsIEkmIzM5O20gZ29pbmcgdG8gcXVpY2tseSBnbGFuY2UgYXQgYG1tL3BhZ2V3YWxrLmNgIGFueXdheS4gQmV0dGVyIHRvIGJlIHNhZmUgdGhhbiBzb3JyeSDigJMgSSB3YW50IHRvIGJlIDEwMCUgY29uZmlkZW50IEkgdW5kZXJzdGFuZCB0aGUgcmlwcGxlIGVmZmVjdHMgb2YgdGhpcy4gR290dGEgc2VlIGlmIHRoZXJlIGFyZSBhbnkgc3VidGxlIGludGVyZGVwZW5kZW5jaWVzIG9yIGltcGxpY2l0IGFzc3VtcHRpb25zIGF0IHBsYXkgdGhhdCBtaWdodCBpbXBhY3QgdGhlIHBhZ2Ugd2Fsa2luZyBsb2dpYyBhdCB0aGUgUFVEIGxldmVsLiBUaGlzIGNvdWxkIGJlIG5vdGhpbmcsIGJ1dCB3aXRoIG1lbW9yeSBtYW5hZ2VtZW50LCBhIHF1aWNrIHNhbml0eSBjaGVjayBpcyBhbHdheXMgYSBnb29kIGlkZWEuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3dhbGtfcHVkX3JhbmdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vcGFnZXdhbGsuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9wYWdld2Fsay5jPTk2PXN0YXRpYyBpbnQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9wYWdld2Fsay5jLTE4NC1cbm1tL3BhZ2V3YWxrLmM6MTg1OnN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL3BhZ2V3YWxrLmMtMTg2LVx0XHRcdCAgc3RydWN0IG1tX3dhbGsgKndhbGspXG4tLVxubW0vcGFnZXdhbGsuYz0yNTA9c3RhdGljIGludCB3YWxrX3A0ZF9yYW5nZShwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL3BhZ2V3YWxrLmMtMjc5LVx0XHRpZiAoaGFzX2hhbmRsZXIgfHwgaGFzX2luc3RhbGwpXG5tbS9wYWdld2Fsay5jOjI4MDpcdFx0XHRlcnIgPSB3YWxrX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHdhbGspO1xubW0vcGFnZXdhbGsuYy0yODEtXHRcdGlmIChlcnIpXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE4NjI5CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTQyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKioKCk9rYXksIHNvIHRoZSBjaGFuZ2UgaXMgaXNvbGF0ZWQgdG8gYG1tL3Ztc2Nhbi5jYC4gVGhhdCYjMzk7cyBhIGZvY3VzZWQgYXJlYSwgd2hpY2ggaXMgZ29vZCBmb3IgcXVpY2sgYXNzZXNzbWVudC4gTXkgbmV4dCBzdGVwIGlzIHRvIGV4YW1pbmUgYGFyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oYCwgc3BlY2lmaWNhbGx5IGxvb2tpbmcgZm9yIGBwdGVfcHJlc2VudGAuIEFoYSEgSSBzZWUgaXQmIzM5O3Mgbm93IGFuIGlubGluZSBmdW5jdGlvbjoKCmBgYGMKc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSkKewoJcmV0dXJuIHB0ZV92YWxpZChwdGUpIHx8IHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKTsKfQpgYGAKCkluc3RlYWQgb2YgdGhlIG1hY3JvIGl0IHVzZWQgdG8gYmUuIE5vdCBhIGh1Z2Ugc3RydWN0dXJhbCBzaGlmdCwgYnV0IHNvbWV0aGluZyB0byBub3RlLiBJdCYjMzk7cyBsaWtlbHkgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBvciBpbmxpbmluZyBvcHRpbWl6YXRpb24gdG8gcmVkdWNlIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGluZGljYXRlcyBhIGZpeCBvciBpbXByb3ZlbWVudCB0byBob3cgZm9sZGVkIHBhZ2UgdGFibGVzIGFyZSBoYW5kbGVkIGR1cmluZyB0aGVpciB0cmF2ZXJzYWwsIEkgY2FuIGJlIHByZXR0eSBzdXJlIHRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhhdCBjb2RlIHNlY3Rpb24uIEl0IGxvb2tzIGZ1bmN0aW9uYWxseSBzb3VuZCBmcm9tIHRoaXMgcXVpY2sgc2Nhbi4gTm93IEkmIzM5O2xsIGNoZWNrIGBtbS9wdGR1bXAuY2AgdG8gc2VlIGhvdyBpdCBpbnRlcmFjdHMgd2l0aCB0aGUgY2hhbmdlZCBzZWN0aW9uLCBzcGVjaWZpY2FsbHkgYHB0ZHVtcF9wdF9sZXZlbF9maXJzdGAuIFVuZGVyc3RhbmRpbmcgaG93IHRoaXMgaW50ZXJhY3RzIHdpdGggdGhlIHBhZ2UgdGFibGUgZHVtcCBhbmQgd2FsayBjb2RlIHdpbGwgc29saWRpZnkgbXkgYXNzZXNzbWVudCBvZiBpdHMgaW1wYWN0IGFuZCBpbXBsaWNhdGlvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B0ZHVtcF9wdF9sZXZlbF9maXJzdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4tLVxubW0vcHRkdW1wLmMtMTk5LVxubW0vcHRkdW1wLmM6MjAwOmludCBwdGR1bXBfcHRfbGV2ZWxfZmlyc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0pXG5tbS9wdGR1bXAuYy0yMDEte1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxOTE4MgoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDM5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCBjcmFmdGVkIHdpdGggdGhlIGV4cGVjdGF0aW9uIHRoYXQgSSYjMzk7bSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6CgoqKkludmVzdGlnYXRpbmcgR2xvYmFsIFVzYWdlIGluIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCoqCgpSaWdodCwgc28gaXQmIzM5O3MgYmVlbiBmbGFnZ2VkIGFzIGVpdGhlciBleHBvcnRlZCBvciwgbW9yZSBsaWtlbHksIHVzZWQgZ2xvYmFsbHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayBob3cgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgIGlzIGltcGxlbWVudGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgTG9vbmdBcmNoIEtWTSBjb2RlLiBJJiMzOTtsbCBuZWVkIHRvIGRpdmUgaW50byBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYCB0byB1bmRlcnN0YW5kIGhvdyBpdCYjMzk7cyBoYW5kbGVkLiBUaGF0IGZpbGUgc2hvdWxkIGNvbnRhaW4gdGhlIGRlZmluaXRpb24gYW5kIGFueSByZWxldmFudCB1c2FnZSBvZiB0aGF0IHZhcmlhYmxlLCB3aGljaCBzaG91bGQgcHJvdmlkZSB0aGUgY29udGV4dCBuZWVkZWQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkYXRhLWZsb3cgdGhyb3VnaCB0aGUgdmFyaWFibGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM1PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2hvc3RfcGZuX21hcHBpbmdfbGV2ZWwmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL2xvb25nYXJjaC9rdm0vbW11LmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jPTYwOD1zdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNjQzLSAqXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmM6NjQ0OiAqIFdBUk5JTkchICBVc2Ugb2YgaG9zdF9wZm5fbWFwcGluZ19sZXZlbCgpIHJlcXVpcmVzIHRoZSBjYWxsZXIgYW5kIHRoZSBlbmRcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy02NDUtICogY29uc3VtZXIgdG8gYmUgdGllZCBpbnRvIEtWTSYjMzk7cyBoYW5kbGVycyBmb3IgTU1VIG5vdGlmaWVyIGV2ZW50cyFcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNjY1LSAqL1xuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jOjY2NjpzdGF0aWMgaW50IGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNjY3LVx0XHRcdFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcbi0tXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmM9Nzc2PXN0YXRpYyBpbnQga3ZtX21hcF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdW5zaWduZWQgbG9uZyBncGEsIGJvb2wgd3JpdGUpXG4tLVxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTg3MS1cdFx0LyogQ2hlY2sgcGFnZSBsZXZlbCBhYm91dCBob3N0IG1tdSovXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmM6ODcyOlx0XHRsZXZlbCA9IGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoa3ZtLCBnZm4sIG1lbXNsb3QpO1xuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTg3My1cdFx0aWYgKGxldmVsID09IDEpIHtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk4MTUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiA1MQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBhbiBleHBlcnQgaW4gdmlydHVhbGl6YXRpb24gYW5kIFJJU0MtViBhcmNoaXRlY3R1cmU6CgoqKkRpdmluZyBpbnRvIHRoZSBLVk0gUGFnZSBGYXVsdCBIYW5kbGVyKioKClJpZ2h0LCBzbyB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgd2l0aGluIGBrdm1fbWFwX3BhZ2VgLCB0aGUgY29yZSBvZiB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbWVjaGFuaXNtLiBUaGF0IHRlbGxzIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggYSB2aXJ0dWFsLXRvLXBoeXNpY2FsIGFkZHJlc3MgdHJhbnNsYXRpb24gaXNzdWUsIGxpa2VseSB3aXRoaW4gYSBndWVzdCBWTS4gV2UmIzM5O3JlIGluIHRoZSB0aGljayBvZiBpdCwgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgaG93IHRvIG1hcCBhIGd1ZXN0JiMzOTtzIHZpcnR1YWwgYWRkcmVzcyB0byBhIHBoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiwgb3IgcGVyaGFwcyBkZXRlcm1pbmluZyB3aHkgd2UgKmNhbiYjMzk7dCogbWFwIGl0LgoKTXkgaW1tZWRpYXRlIG5leHQgc3RlcCBpcyB0byBoZWFkIG92ZXIgdG8gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYC4gVGhlIGZhY3QgdGhhdCBpdCBtZW50aW9ucyB0aGUgc2l6ZSBvZiBhbiBIVkEgKEhvc3QgVmlydHVhbCBBZGRyZXNzKSBtYXBwaW5nIGlzIHRlbGxpbmcsIHNvIGxldCYjMzk7cyBzdGFydCBieSBsb29raW5nIGZvciBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgLiBUaGF0IGZ1bmN0aW9uIHByb2JhYmx5IGhvbGRzIHRoZSBrZXkgdG8gZGV0ZXJtaW5pbmcgdGhlIGV4dGVudCBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB3ZSYjMzk7cmUgdHJ5aW5nIHRvIG1hcCwgb3IgcGVyaGFwcyB3aHkgaXQmIzM5O3MgZmFpbGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcmNoaXRlY3R1cmUgZGV0ZXJtaW5lcyB0aGUgcmVxdWlyZWQgbWVtb3J5IGFsbG9jYXRpb24uIEkmIzM5O2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgTU1VLXJlbGF0ZWQgZXJyb3JzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtnZXRfaHZhX21hcHBpbmdfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3Yva3ZtL21tdS5jPTMwND1zdGF0aWMgYm9vbCBmYXVsdF9zdXBwb3J0c19nc3RhZ2VfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMzU5LVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6MzYwOnN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMzYxLVx0XHRcdFx0dW5zaWduZWQgbG9uZyBodmEpXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NDE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9yaXNjdi9rdm0vbW11LmMtNDMxLVxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDMyOlx0XHRzeiA9IGdldF9odmFfbWFwcGluZ19zaXplKGt2bSwgaHZhKTtcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQzMy1cdFx0aWYgKHN6IFx1MDAzYyBQTURfU0laRSlcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0MTQKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAyNTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBhZ2UgRmF1bHRzIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdGAsIGFuZCBpdCYjMzk7cyB0cmlnZ2VyZWQgZHVyaW5nIEtWTSBwYWdlIGZhdWx0cy4gVGhhdCYjMzk7cyB0aGUgY29udGV4dC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY29kZSBwYXRocyB0aGF0IGludGVyYWN0IHdpdGggdGhpcy4gTGV0JiMzOTtzIHNlZS4uLiBJJiMzOTt2ZSBnb3QgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGdldCBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMuCgpGaXJzdCB1cCwgYHdhbGtfcHVkX3JhbmdlYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkLCBidXQgaXQgKnJlcXVpcmVzKiBgQ09ORklHX0xSVV9HRU5gLiBJJiMzOTtsbCBoYXZlIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGVuIHRoZXJlJiMzOTtzIGB2bWFsbG9jX2ZhdWx0YCwgd2hpY2ggaXMgc3BlY2lmaWMgdG8gUklTQy1WIGFuZCBuZWVkcyBgQ09ORklHX1JJU0NWYC4gTWFrZXMgc2Vuc2U7IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmYXVsdCBoYW5kbGluZy4gRm9sbG93aW5nIHRoYXQsIHRoZXJlJiMzOTtzIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAgaW4gdGhlIFJJU0MtViBLVk0gY29kZSAoYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCksIHdoaWNoIGRlcGVuZHMgb24gYm90aCBgQ09ORklHX0tWTWAgYW5kIGBDT05GSUdfUklTQ1ZgLiBBZ2FpbiwgUklTQy1WIGFuZCBLVk0uIE5vIHN1cnByaXNlcyB0aGVyZS4KCk5leHQsIEkgc2VlIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYC4gQWdhaW4sIHRoZSBkZXBlbmRlbmN5IG9uIEtWTSwgYnV0IHRoaXMgdGltZSwgaXQmIzM5O3MgTG9vbmdBcmNoLCBzbyB3ZSBuZWVkIGBDT05GSUdfS1ZNYCAqYW5kKiBgQ09ORklHX0xPT05HQVJDSGAuIFJpZ2h0LiBBcmNoaXRlY3R1cmUtc3BlY2lmaWMgS1ZNIG1hcHBpbmdzLiBBbHJpZ2h0LgoKYGNvbGxhcHNlX3B1ZF9wYWdlYCBpbiB0aGUgeDg2IGNvZGUgaGFzIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX1g4NmAuIE9rYXksIG5vdyB3ZSYjMzk7cmUgc2VlaW5nIGFuIHg4NiBzcGVjaWZpYyBjb2RlIHBhdGguIE5vIHJlYWwgc3VycHJpc2VzIHRoZXJlLgoKRmluYWxseSwgSSBzZWUgYHB0ZHVtcF9wdF9sZXZlbF9maXJzdGAgaW4gYG1tL3B0ZHVtcC5jYC4gVGhpcyBpcyBpbnRlcmVzdGluZzsgSSBkb24mIzM5O3Qgd29yayB3aXRoIHRoaXMgb2Z0ZW4uIEl0IHNlZW1zIHRvIGhhdmUgYSBkZXBlbmRlbmN5IG9uIGBDT05GSUdfUFREVU1QX0NPUkVgLiBBbmQgdGhhdCYjMzk7cyB0aGUgb25lIEkgc2hvdWxkIGZvY3VzIG9uIGF0IHRoaXMgdGltZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9LY29uZmlnLmRlYnVnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O2Vycm9yJiMzNDs6ICYjMzQ7bm8gbWF0Y2hlcyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjExNTIKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiAxNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBwcmVzZW50ZWQgYXMgYSBzdHJlYW0gb2YgdGhvdWdodDoKCioqRmluZGluZyB0aGUgQ29uZmlndXJhdGlvbiBGbGFnKioKClJpZ2h0LCB0aW1lIHRvIHRyYWNrIGRvd24gdGhpcyBgUFREVU1QX0NPUkVgIHRoaW5nLiBMZXQmIzM5O3Mgc2VlLi4uIEkmIzM5O3ZlIGdvdCBhIGZlZWxpbmcgdGhpcyBpcyBhIGtlcm5lbCBjb25maWd1cmF0aW9uIG9wdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpdmUgaW50byB0aGUgS2NvbmZpZyBmaWxlcy4gVGhhdCYjMzk7cyB1c3VhbGx5IHdoZXJlIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyBhcmUgZGVmaW5lZC4gSSYjMzk7bGwgc2VhcmNoIHRob3NlIGZpbGVzIGZvciB0aGUgZXhhY3Qgc3RyaW5nLCBgUFREVU1QX0NPUkVgLiBIb3BlZnVsbHksIHRoYXQmIzM5O2xsIGxlYWQgbWUgdG8gdGhlIHJlbGV2YW50IG9wdGlvbiwgaXRzIGRlcGVuZGVuY2llcywgYW5kIGl0cyBkZWZhdWx0IHZhbHVlLiBJIGV4cGVjdCB0aGUgS2NvbmZpZyBmaWxlcyB3aWxsIGdpdmUgbWUgYSBjbGVhciBwaWN0dXJlLiBUaGVuIEkmIzM5O2xsIHVuZGVyc3RhbmQgd2hhdCBgUFREVU1QX0NPUkVgIGFjdHVhbGx5ICpkb2VzKiBhbmQgd2hlcmUgaXQmIzM5O3MgdXNlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QX0NPUkUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMTM2NgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDE3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgc3VtbWFyeSBvZiBteSB0aG91Z2h0IHByb2Nlc3M6CgoqKkh1bnRpbmcgRG93biBgcHRkdW1wLmNgKioKCk9rYXksIHNvIEkgbmVlZCB0byBmaW5kIHdoZXJlIGBwdGR1bXAuY2AgaXMgYnVpbHQgd2l0aGluIHRoZSBrZXJuZWwmIzM5O3MgbWVtb3J5IG1hbmFnZW1lbnQgKG1tKSBzdWJzeXN0ZW0uIE15IGZpcnN0IGluc3RpbmN0LCBhcyBhbHdheXMgd2l0aCB0aGVzZSBraW5kcyBvZiBjb2RlIHNlYXJjaGVzLCBpcyB0byBnbyBzdHJhaWdodCB0byB0aGUgYG1tL01ha2VmaWxlYC4gVGhhdCYjMzk7cyB3aGVyZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFyZSwgYW5kIEkmIzM5O2QgYmUgd2lsbGluZyB0byBiZXQgdGhhdCYjMzk7cyB3aGVyZSBJIGNhbiBwaW5wb2ludCB0aGUgaW5jbHVzaW9uIG9mIHRoaXMgcGFydGljdWxhciBmaWxlLiBJIGV4cGVjdCB0byBmaW5kIGl0IGVpdGhlciBkaXJlY3RseSBsaXN0ZWQgYXMgYSBzb3VyY2UgZmlsZSBmb3IgYSBwYXJ0aWN1bGFyIHRhcmdldCwgb3IgcGVyaGFwcyBpbmNsdWRlZCBhcyBwYXJ0IG9mIGEgbW9yZSBnZW5lcmFsIHBhdHRlcm4gb3IgcnVsZS4gTm93IGxldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B0ZHVtcC5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTQxPW9iai0kKENPTkZJR19NQVBQSU5HX0RJUlRZX0hFTFBFUlMpICYjNDM7PSBtYXBwaW5nX2RpcnR5X2hlbHBlcnMub1xubW0vTWFrZWZpbGU6MTQyOm9iai0kKENPTkZJR19QVERVTVApICYjNDM7PSBwdGR1bXAub1xubW0vTWFrZWZpbGUtMTQzLW9iai0kKENPTkZJR19QQUdFX1JFUE9SVElORykgJiM0Mzs9IHBhZ2VfcmVwb3J0aW5nLm9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjE2NDYKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiAxNDEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uCgoqKkNvbmZpZ3VyYXRpb24gQXVkaXQgYW5kIENvZGUgTmF2aWdhdGlvbioqCgpBbHJpZ2h0LCBmaXJzdCB0aGluZ3MgZmlyc3Q6IGBDT05GSUdfUFREVU1QYCAtIHRoYXQmIzM5O3Mgb3VyIHN0YXJ0aW5nIHBvaW50LCBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMsIEkgbmVlZCB0byBjaGVjayBzb21lIHJlbGF0ZWQgb3B0aW9ucy4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgQ09ORklHX0xSVV9HRU5gLCBkaWdnaW5nIGludG8gYG1tL0tjb25maWdgIHRvIHNlZSBpZiB0aGF0IHJldmVhbHMgYW55dGhpbmcgdXNlZnVsLiBBbmQgeWVzLCBpdCYjMzk7cyBqdXN0IGBDT05GSUdfTFJVX0dFTmAuIE5vdGhpbmcgdW5leHBlY3RlZCB0aGVyZS4KCk5leHQsIEkmIzM5O2xsIHN3aXRjaCBnZWFycyBhbmQgdmVyaWZ5IHRoZSBwcmVzZW5jZSBvZiBgQ09ORklHX0tWTWAuIEkgbmVlZCB0byBjb25maXJtIGl0cyBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWNyb3NzIGFyY2hpdGVjdHVyZXMsIHNvIEkmIzM5O2xsIGNoZWNrIGJvdGggYGFyY2gvcmlzY3Yva3ZtL0tjb25maWdgIGFuZCBgYXJjaC9sb29uZ2FyY2gva3ZtL0tjb25maWdgLiBFeGNlbGxlbnQsIGl0IGxvb2tzIGNvbnNpc3RlbnQgYW5kIGl0JiMzOTtzIGFsc28gYENPTkZJR19LVk1gLgoKRmluYWxseSwgZm9yIGNvZGUtbGV2ZWwgZGVwZW5kZW5jaWVzLCBJIG5lZWQgdG8gY2hlY2sgYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgIGZvciB0aGUgZnVuY3Rpb24gYGNvbGxhcHNlX3B1ZF9wYWdlYC4gTGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyBpbmRlZWQgcHJlc2VudCB3aXRoaW4gYHNldF9tZW1vcnkuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXQgaXMgYSBjcml0aWNhbCBwYXRoIGFuZCBJIG5lZWQgdG8gYmUgc3VyZSBpdCYjMzk7cyBhbHdheXMgaW5jbHVkZWQuIFRoaXMgbmVlZHMgZnVydGhlciBpbnZlc3RpZ2F0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzZXRfbWVtb3J5Lm8mIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTItXG5hcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGU6MzpvYmoteVx0XHRcdFx0Oj0gc2V0X21lbW9yeS5vIG1lbXR5cGUub1xuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTQtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyMTc3CgkJCQkJCQlvdXRwdXQ6IDI0CgkJCQkJCQl0aG91Z2h0czogMzQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IExpbmUgb2YgSW5xdWlyeSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhlc2Ugc3BlY2lmaWMgc3ltYm9scywgYW5kIEkgbmVlZCB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhleSBhcmUgY29tcGlsZWQuIEZpcnN0LCBJJiMzOTttIG5vdGluZyB0aGF0IGdlbmVyYWxseSwgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCB4ODYgY29tcGlsYXRpb24sIGJ1dCBJIHdhbnQgdG8gYmUgY2VydGFpbiBhYm91dCB0aGUgUklTQy1WIHRhcmdldHMuIExldCYjMzk7cyBzZWUuLi4gSSYjMzk7bGwgY2hlY2sgYGFyY2gvcmlzY3YvbW0vZmF1bHQuY2AgZm9yIGB2bWFsbG9jX2ZhdWx0YC4gUmlnaHQsIHRoYXQmIzM5O3MgUklTQy1WIHNwZWNpZmljLiBOb3csIGZvciBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAsIHRoYXQmIzM5O3MgaW4gYGFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY2AsIHdoaWNoIGNvbXBpbGVzIHdpdGggTG9vbmdBcmNoIGFuZCB1bmRlciBgQ09ORklHX0tWTWAuIFRoZW4gYGdldF9odmFfbWFwcGluZ19zaXplYCwgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCwgYWxzbywgc3BlY2lmaWNhbGx5IFJJU0MtViBhbmQgYENPTkZJR19LVk1gLgoKVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlOiBgd2Fsa19wdWRfcmFuZ2VgIGZyb20gYG1tL3Ztc2Nhbi5jYCwgYHZtYWxsb2NfZmF1bHRgIGZyb20gYGFyY2gvcmlzY3YvbW0vZmF1bHQuY2AsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAgZnJvbSBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLCBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAgZnJvbSBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCBmcm9tIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgYW5kIGZpbmFsbHkgYHB0ZHVtcF9wdF9sZXZlbF9maXJzdGAgZnJvbSBgbW0vcHRkdW1wLmNgLgoKVG8gbWFrZSBzdXJlIEkgaGF2ZSB0aGUgbmVjZXNzYXJ5IGZ1bmN0aW9uYWxpdHkgZW5hYmxlZCwgSSYjMzk7bGwgbmVlZCB0byBmb2N1cyBvbiB0aGVzZSBjb25maWcgb3B0aW9uczogYExSVV9HRU5gLCBgS1ZNYCwgYW5kIHRoZW4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb2YgYFBURFVNUF9ERUJVR0ZTYCBvciBgUFREVU1QX0NPUkVgIGVuYWJsZXMgYENPTkZJR19QVERVTVBgIGZvciB0aGUgcHRkdW1wIGFuYWx5c2lzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFREVU1QJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvYXJtNjQva3ZtL0tjb25maWc9NDU9aWYgS1ZNXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ2LVxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZzo0Nzpjb25maWcgUFREVU1QX1NUQUdFMl9ERUJVR0ZTXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtQcmVzZW50IHRoZSBzdGFnZS0yIHBhZ2V0YWJsZXMgdG8gZGVidWdmc1wmIzM0O1xuLS1cbm1tL0tjb25maWcuZGVidWc9MjE2PWNvbmZpZyBBUkNIX0hBU19QVERVTVBcbi0tXG5tbS9LY29uZmlnLmRlYnVnLTIxOC1cbm1tL0tjb25maWcuZGVidWc6MjE5OmNvbmZpZyBQVERVTVBcbm1tL0tjb25maWcuZGVidWctMjIwLVx0Ym9vbFxubW0vS2NvbmZpZy5kZWJ1Zy0yMjEtXG5tbS9LY29uZmlnLmRlYnVnOjIyMjpjb25maWcgUFREVU1QX0RFQlVHRlNcbm1tL0tjb25maWcuZGVidWctMjIzLVx0Ym9vbCBcJiMzNDtFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIzMTc5CgkJCQkJCQlvdXRwdXQ6IDQ2CgkJCQkJCQl0aG91Z2h0czogMTYwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OgoKKipQYWdlIFRhYmxlIER1bXBpbmcgQ29uZmlndXJhdGlvbiBhbmQgQ29kZSBXYWxrdGhyb3VnaCoqCgpBbHJpZ2h0LCBpdCBsb29rcyBsaWtlIGBQVERVTVBfREVCVUdGU2AgaXMgdGhlIGtleSB0byBlbmFibGluZyBgUFREVU1QYCBmdW5jdGlvbmFsaXR5LiBUaGF0IG1ha2VzIHNlbnNlLiBMZXQmIzM5O3MgYWRkIGBQVERVTVBfREVCVUdGU2AgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2hpY2ggc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuCgpOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgcGFnZSB0YWJsZSBkdW1waW5nIGlzIGFjdHVhbGx5IHRyaWdnZXJlZCBhbmQgaG93IHRoZSByZWxldmFudCBmdW5jdGlvbnMgYXJlIGNhbGxlZC4gSSYjMzk7bGwgc3RhcnQgd2l0aCBgd2Fsa19wdWRfcmFuZ2VgIGluIGBtbS92bXNjYW4uY2AuIEl0JiMzOTtzIG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIC0gdGhhdCBwcm9iYWJseSBtZWFucyBpdCYjMzk7cyBhbiBpbnRlcm5hbCBoZWxwZXIgZnVuY3Rpb24uIEkmIzM5O2xsIG5lZWQgdG8gbG9vayBmb3IgYW55IG90aGVyIGZ1bmN0aW9ucyByZWxhdGVkIHRvIHRoZSBwYWdlIHRhYmxlIHdhbGtpbmcgdGhhdCBtaWdodCBjYWxsIGl0LgoKT2theSwgSSBzZWUgYHBvcHVsYXRlX3B1ZGAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBUaGF0JiMzOTtzIGxpa2VseSBpbnZvbHZlZCBpbiBzZXR0aW5nIHVwIHRoZSBwYWdlIHVwcGVyIGRpcmVjdG9yeS4gVGhlbiwgdGhlcmUmIzM5O3MgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgLiBUaGF0IG5hbWUgc291bmRzIGxpa2UgYSBzdHJvbmcgY2FuZGlkYXRlLCBzbyBJJiMzOTtsbCBwcmlvcml0aXplIHRoYXQuCgpHaXZlbiB0aGUgbmFtZSwgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCBzb3VuZHMgbGlrZSB0aGUgbW9zdCBjcml0aWNhbCBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gY2hlY2sgYGFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jYCBpbiBvcmRlciB0byBkZXRlcm1pbmUgaG93IGl0JiMzOTtzIGNhbGxlZCBhbmQgdGhlIHBhcmFtZXRlcnMgaXQgcmVjZWl2ZXMuIFRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCB1bmRlcnN0YW5kaW5nIG9mIGhvdyB0aGUgcGFnZSB0YWJsZSBkdW1waW5nIG1lY2hhbmlzbSB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00MTc9c3RhdGljIHZvaWQgbm90ZV9wYWdlX2ZsdXNoKHN0cnVjdCBwdGR1bXBfc3RhdGUgKnB0X3N0KVxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyMy1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQyNDpib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyNS1cdFx0XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxuLS1cbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ3Nz12b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDc4LXtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ3OTpcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBtbS1cdTAwM2VwZ2QsIGZhbHNlLCB0cnVlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ4MC19XG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDgyPXZvaWQgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2RlYnVnZnMoc3RydWN0IHNlcV9maWxlICptLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSxcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODktI2VuZGlmXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo0OTA6XHRwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShtLCBtbSwgcGdkLCBmYWxzZSwgZmFsc2UpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDkxLX1cbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz00OTM9dm9pZCBwdGR1bXBfd2Fsa191c2VyX3BnZF9sZXZlbF9jaGVja3d4KHZvaWQpXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTAzLVx0cGdkID0ga2VybmVsX3RvX3VzZXJfcGdkcChwZ2QpO1xuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA0Olx0cHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXHUwMDI2aW5pdF9tbSwgcGdkLCB0cnVlLCBmYWxzZSk7XG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDUtI2VuZGlmXG4tLVxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NTA4PWJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NoZWNrd3godm9pZClcbi0tXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MTItXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYzo1MTM6XHRyZXR1cm4gcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXHUwMDI2aW5pdF9tbSwgSU5JVF9QR0QsIHRydWUsIGZhbHNlKTtcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUxNC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDU4CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGZyb20gYW4gZXhwZXJ0JiMzOTtzIHBlcnNwZWN0aXZlOgoKKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGVwdGhzKioKClJpZ2h0LCBzbyBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgIGlzIGEgc29saWQgc3RhcnRpbmcgcG9pbnQgZm9yIGdldHRpbmcgYSBoYW5kbGUgb24gdGhpcy4gVGhhdCBmdW5jdGlvbiYjMzk7cyBsaWtlbHkgd2hlcmUgdGhlIGNvcmUgcGFnZSB0YWJsZSB3YWxraW5nIGxvZ2ljIHJlc2lkZXMuIEkgbmVlZCB0byB6ZXJvIGluIG9uIGhvdyBpdCYjMzk7cyBkZWFsaW5nIHdpdGggdGhlIFBHRCBsZXZlbCwgcGFydGljdWxhcmx5LgoKTm93LCB3aGVyZSYjMzk7cyB0aGUgYWN0dWFsIHBvcHVsYXRpb24gb2YgdGhlIFBhZ2UgVXBwZXIgRGlyZWN0b3J5IChQVUQpIGhhcHBlbmluZz8gR2l2ZW4gdGhpcyBpcyB4ODYsIG15IGZpcnN0IHBvcnQgb2YgY2FsbCB3aWxsIGJlIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYC4gU3BlY2lmaWNhbGx5LCBJJiMzOTttIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYHBvcHVsYXRlX3B1ZGAgZnVuY3Rpb24sIGFzc3VtaW5nIHdlIGhhdmUgYSBzaW1pbGFyIGFyY2hpdGVjdHVyZSBvbiB0aGUgc3lzdGVtIGluIHF1ZXN0aW9uLiBJdCYjMzk7cyBhIGtleSBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgb2Z0ZW4gd2hlcmUgdGhlIG1hZ2ljIG9mIG1lbW9yeSBtYXBwaW5nIGdldHMgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4gVGhpcyBmaWxlIHdpbGwgZ2l2ZSBtZSB0aGUgbG93LWxldmVsIGRldGFpbHMgb2YgaG93IHRoZSBQVUQgZW50cmllcyBhcmUgYmVpbmcgY3JhZnRlZCBhbmQgaG93IHRoZSBQQVQgKFBhZ2UgQXR0cmlidXRlIFRhYmxlKSBpcyBsaWtlbHkgaW50ZXJhY3RpbmcgdG8gaW5mbHVlbmNlIG1lbW9yeSBjaGFyYWN0ZXJpc3RpY3MgYXQgdGhpcyBsZXZlbC4gSSBiZXQgaXQgaGFzIHNvbWV0aGluZyB0byBkbyB3aXRoIHRoZSBQQVQgc2V0dXAgZm9yIHRoaXMgY29uZmlndXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7cG9wdWxhdGVfcHVkJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE2MTA9c3RhdGljIGxvbmcgcG9wdWxhdGVfcG1kKHN0cnVjdCBjcGFfZGF0YSAqY3BhLFxuLS1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTY4My1cbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTY4NDpzdGF0aWMgaW50IHBvcHVsYXRlX3B1ZChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgcDRkX3QgKnA0ZCxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTY4NS1cdFx0XHRwZ3Byb3RfdCBwZ3Byb3QpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0xNzY3PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGdkKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODA3LVxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxODA4Olx0cmV0ID0gcG9wdWxhdGVfcHVkKGNwYSwgYWRkciwgcDRkLCBwZ3Byb3QpO1xuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xODA5LVx0aWYgKHJldCBcdTAwM2MgMCkge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTA5NgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlLCBhcyBpZiB0aGV5IHdlcmUgbXkgb3duOgoKKipGb2N1c2luZyBvbiBQb3RlbnRpYWwgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqCgpSaWdodCwgYHBvcHVsYXRlX3B1ZGAgaXMgY29taW5nIHVwIGZyZXF1ZW50bHkgaW4gbXkgbWVudGFsIG1vZGVsLCBzbyB0aGF04oCZcyBhbm90aGVyIGtleSBmdW5jdGlvbiB0byBkcmlsbCBkb3duIG9uLiBXaGVyZSBkb2VzIHRoZSBhY3R1YWwgZmxhZyBzZXR0aW5nIG9jY3VyPyBJJiMzOTttIHRoaW5raW5nIEkgc2hvdWxkIGxvb2sgYXQgYGFyY2gveDg2L21tL3BndGFibGUuY2AgdG8gc2VlIGhvdyB0aGUgYWNjZXNzIGZsYWdzIGFyZSBzZXQgaW4gdGhlIFBhZ2UgVXBwZXIgRGlyZWN0b3J5IChQVUQpIGVudHJ5LiBTcGVjaWZpY2FsbHksIEkmIzM5O20gZ29pbmcgdG8gbG9vayBmb3IgaW1wbGVtZW50YXRpb25zIG9yIGNhbGxzIHJlbGF0ZWQgdG8gYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2AuIFRoYXQmIzM5O3MgbGlrZWx5IHdoZXJlIHRoZSBjcnVjaWFsIHdyaXRlIHByb3RlY3Rpb24gb3IgYWNjZXNzIGNvbnRyb2wgaGFwcGVucyBhdCB0aGF0IGxldmVsLiBMZXQmIzM5O3Mgc2VlIHdoYXQgd2UgY2FuIGZpbmQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3B1ZHBfc2V0X2FjY2Vzc19mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L21tL3BndGFibGUuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9tbS9wZ3RhYmxlLmM9MzkzPWludCBwbWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTQxNC0jaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbmFyY2gveDg2L21tL3BndGFibGUuYzo0MTU6aW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTQxNi1cdFx0XHQgIHB1ZF90ICpwdWRwLCBwdWRfdCBlbnRyeSwgaW50IGRpcnR5KVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNTUxMAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDMwNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBDdXJyZW50IFRoaW5raW5nOiBQaW5wb2ludGluZyBLZXkgTWVtb3J5IE1hbmFnZW1lbnQgQ29tcG9uZW50cyoqCgpPa2F5LCBsZXQmIzM5O3Mgc2VlLiBNeSBtZW50YWwgbWFwIG5lZWRzIGFuIHVwZGF0ZSByZWdhcmRpbmcga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJiMzOTttIGZvY3VzaW5nIG9uIGFyZWFzIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHNwZWNpZmljYWxseSB3aGVyZSB0aGVyZSBhcmUgUFVEIChQYWdlIFVwcGVyIERpcmVjdG9yeSkgaW50ZXJhY3Rpb25zIG9yIHJlbGF0ZWQgY29uY2VwdHMuIAoKVGhlIGltbWVkaWF0ZSB0YXJnZXRzIHRoYXQgcG9wIHVwIGZvciBtZSBhcyBjcnVjaWFsIGZvY2FsIHBvaW50cyBhcmU6CgoqICAgYHdhbGtfcHVkX3JhbmdlYCAtIFRoaXMgaXMgYSBjZW50cmFsIGNvbXBvbmVudCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBkZWZpbml0ZWx5IGEgY29yZSBmdW5jdGlvbiBmb3IgdW5kZXJzdGFuZGluZyBtZW1vcnkgc2Nhbm5pbmcgd2l0aGluIHRoZSB2aXJ0dWFsIG1lbW9yeSBzeXN0ZW0uCiogICBgdm1hbGxvY19mYXVsdGAgLSBMb2NhdGVkIGluIGBhcmNoL3Jpc2N2L21tL2ZhdWx0LmNgLiBUaGlzIHN1Z2dlc3RzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmYXVsdCBoYW5kbGluZyBtZWNoYW5pc20sIGxpa2VseSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHZtYWxsb2MgYXJlYXMgYXJlIGhhbmRsZWQgaW4gdGhpcyBhcmNoaXRlY3R1cmUuCiogICBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgIC0gRm91bmQgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCwgdGhpcyBvbmUmIzM5O3MgS1ZNLXJlbGF0ZWQgYW5kIGNvbmNlcm5zIHRoZSBzaXplIG9mIGhvc3QgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzLCBhZ2FpbiBwb3RlbnRpYWxseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuCiogICBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAgLSBTaW1pbGFybHksIGluIGBhcmNoL2xvb25nYXJjaC9rdm0vbW11LmNgLiBUaGlzIGlzIHZlcnkgc2ltaWxhciB0byB0aGUgcHJldmlvdXMgZnVuY3Rpb24sIGJ1dCBvbiBhIGRpZmZlcmVudCBhcmNoaXRlY3R1cmUuIEkgd2FudCB0byBjaGVjayBob3cgdGhvc2UgdHdvIGZ1bmN0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlci4KKiAgIGBjb2xsYXBzZV9wdWRfcGFnZWAgJmFtcDsgYHBvcHVsYXRlX3B1ZGAgLSBCb3RoIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgdGhlc2UgYXJlIGV4dHJlbWVseSBpbnRlcmVzdGluZy4gVGhleSBkZWFsIHdpdGggY29sbGFwc2luZyBhbmQgcG9wdWxhdGluZyBQVUQgcGFnZXMsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSBzd2VldCBzcG90IG9mIG15IGZvY3VzLiBMaWtlbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgaHVnZSBwYWdlcyBvbiB4ODYuCiogICBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgIC0gIFRoaXMgYXBwZWFycyBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgLiBQYWdlIHRhYmxlIGR1bXBpbmcsIGVzcGVjaWFsbHkgYXQgdGhlIFBHL1BVRCBsZXZlbCwgaXMgZXNzZW50aWFsIGZvciBkZWJ1Z2dpbmcgYW5kIGFuYWx5c2lzLgoqICAgYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2AgLSBJbiBgYXJjaC94ODYvbW0vcGd0YWJsZS5jYCwgdGhpcyBpcyBhIFBVRC1zcGVjaWZpYyBmdW5jdGlvbiBmb3Igc2V0dGluZyBhY2Nlc3MgZmxhZ3MuIEl0IHdvdWxkIGJlIGltcG9ydGFudCBmb3IgdHJhY2tpbmcgdGhlIHBlcm1pc3Npb25zIG9mIFBVRCBlbnRyaWVzLgoKSSBhbHNvIG5lZWQgdG8gY2hlY2sgdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhc3NvY2lhdGVkIHdpdGggdGhlc2UgY29tcG9uZW50cyB0byB1bmRlcnN0YW5kIHdoYXQgY29uZGl0aW9ucyBicmluZyB0aGVtIGludG8gcGxheToKCiogICBgTFJVX0dFTmAgLSBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHRoZSBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIG1lY2hhbmlzbSBmb3IgcGFnZSByZWNsYW1hdGlvbi4KKiAgIGBLVk1gIC0gVGhpcyBtZWFucyB0aGVzZSBhcmUgcmVsZXZhbnQgd2hlbiB0aGUgS2VybmVsIFZpcnR1YWwgTWFjaGluZSBpcyB1c2VkLgoqICAgYFBURFVNUF9ERUJVR0ZTYCAtIERlYnVnZnMgaW50ZXJmYWNlIGZvciBwYWdlIHRhYmxlIGR1bXBpbmcuCiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIC0gVHJhbnNwYXJlbnQgSHVnZSBQYWdlcy4gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IGhhcyBhIGRpcmVjdCBpbmZsdWVuY2Ugb24gdGhlIHBhZ2UgdGFibGUgc3RydWN0dXJlLgoKTGV0IG1lIGFsc28gdmVyaWZ5IHRoYXQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBkb2VzIGluZGVlZCBlbmFibGUgYENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEYC4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgYXNzdW1wdGlvbiwgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoYXQgcmVsYXRpb25zaGlwLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIHZlcnkgc2hhcnAgcGljdHVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6MzY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9LY29uZmlnPTEwODY9Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxuLS1cbmFyY2gvS2NvbmZpZy0xMDg4LVxuYXJjaC9LY29uZmlnOjEwODk6Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcbmFyY2gvS2NvbmZpZy0xMDkwLVx0Ym9vbFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNjU5OQoJCQkJCQkJb3V0cHV0OiA0NAoJCQkJCQkJdGhvdWdodHM6IDE5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhvc2UgdGhvdWdodHMgZnJvbSBhIGZpcnN0LXBlcnNvbiwgZXhwZXJ0IHBlcnNwZWN0aXZlLCBhaW1pbmcgZm9yIGEgZnVsc29tZSByZW5kZXJpbmc6CgoqKkludmVzdGlnYXRpbmcgQXJjaGl0ZWN0dXJlLVNwZWNpZmljIFNlbGVjdGlvbioqCgpBbHJpZ2h0LCBJJiMzOTttIHRoaW5raW5nIGFib3V0IGhvdyB0aGlzIHBhcnRpY3VsYXIgY29tcG9uZW50IGlzIGNob3NlbiB3aXRoaW4gYSBzeXN0ZW0uIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdGhhdCB0aGUgc2VsZWN0aW9uIHByb2Nlc3MgaXMsIGluIGZhY3QsIGRyaXZlbiBieSB0aGUgc3lzdGVtJiMzOTtzIGFyY2hpdGVjdHVyZSBpdHNlbGYuIFNvLCBJIG5lZWQgdG8gdmVyaWZ5IHRoYXQgYXNzdW1wdGlvbi4gSXQgc2VlbXMgbG9naWNhbCwgYnV0IGxldCYjMzk7cyBub3QgYXNzdW1lIGFueXRoaW5nLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGRyaWxsIGRvd24gaW50byBhIGNvbmNyZXRlIGV4YW1wbGUuIEkgbmVlZCB0byBzcGVjaWZpY2FsbHkgY2hlY2sgd2hldGhlciB0aGUgeDg2IGFyY2hpdGVjdHVyZSBpcyBhIHRyaWdnZXIgZm9yIHRoZSBzZWxlY3Rpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIGNvbmZpcm0gd2hldGhlciB4ODYgc3lzdGVtcyB3aWxsIHNlbGVjdCB0aGlzIGNvbXBvbmVudC4gSXMgeDg2IGEgcmVsaWFibGUgaW5kaWNhdG9yPyBBcmUgdGhlcmUgZXhjZXB0aW9ucz8gSSBuZWVkIHRvIGFuYWx5emUgaG93IHRoYXQgYXJjaGl0ZWN0dXJlIGludGVyYWN0cyB3aXRoIGFuZCBzZWxlY3RzIHRoZSBjb21wb25lbnQgaW4gcXVlc3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYvS2NvbmZpZyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9LY29uZmlnPTU4PWNvbmZpZyBYODZcbi0tXG5hcmNoL3g4Ni9LY29uZmlnLTIxMC1cdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VcbmFyY2gveDg2L0tjb25maWc6MjExOlx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVUQgaWYgWDg2XzY0XG5hcmNoL3g4Ni9LY29uZmlnLTIxMi1cdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1AgICAgICAgICBpZiBYODZfNjQgXHUwMDI2XHUwMDI2IFVTRVJGQVVMVEZEXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzIzIDE3OjM3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2OTY4CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMzU5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEN1cnJlbnQgQW5hbHlzaXMgb2YgUmVsZXZhbnQgS2VybmVsIENvbmZpZ3VyYXRpb25zIGFuZCBTeW1ib2xzKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgaW5kZWVkIHJlbGV2YW50OiBgTFJVX0dFTmAsIGBLVk1gLCBgUFREVU1QX0RFQlVHRlNgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gU2VlbXMgb2J2aW91cywgYnV0IGdvb2QgdG8gY2hlY2suCgpgTFJVX0dFTmAgZGlyZWN0bHkgdGllcyBpbnRvIE1HTFJVLCBzbyB0aGF0JiMzOTtzIHNwb3Qgb24uIGBLVk1gIG1ha2VzIHNlbnNlLCBhbmQgc28gZG9lcyBgUFREVU1QX0RFQlVHRlNgLgoKTm93LCB0aGUgc3ltYm9sIHJlZmluZW1lbnQg4oCTIEkgbmVlZCB0byBrZWVwIHRoZSBmb2N1cyBsaXN0IG1hbmFnZWFibGUuIEkmIzM5O3ZlIG5hcnJvd2VkIGl0IGRvd24gdG86IGB3YWxrX3B1ZF9yYW5nZWAsIGB2bWFsbG9jX2ZhdWx0YCwgYGdldF9odmFfbWFwcGluZ19zaXplYCwgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgLCBgY29sbGFwc2VfcHVkX3BhZ2VgLCBgcG9wdWxhdGVfcHVkYCwgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCwgYW5kIGBwdWRwX3NldF9hY2Nlc3NfZmxhZ3NgLiBFaWdodCBzeW1ib2xzLCB0aGF0IHNob3VsZCBiZSBhIHJlYXNvbmFibGUgc3RhcnRpbmcgcG9pbnQuCgpJIGp1c3QgZG91YmxlLWNoZWNrZWQgYHdhbGtfcHVkX3JhbmdlYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCYjMzk7cyBzdGF0aWMsIHdoaWNoIHJhaXNlZCBhIG1vbWVudGFyeSBmbGFnLiBIb3dldmVyLCBzeXprYWxsZXIgKmNhbiogc3RpbGwgdGFyZ2V0IGl0IGlmIGl0JiMzOTtzIGluIHRoZSBrZXJuZWwgaW1hZ2UsIGFuZCB0aGUgZm9jdXMgc3ltYm9scyBhcmUgZm9yIHByaW9yaXRpemF0aW9uLiBJIHdhcyB0aGlua2luZyBvZiBzeXNjYWxscywgYnV0IHRoaXMgaXMgYWJvdXQgZGlyZWN0aW5nIGZ1enppbmcgY292ZXJhZ2UgbW9yZSBlZmZpY2llbnRseS4KClRoZW4gSSBjaGVja2VkIGB2bWFsbG9jX2ZhdWx0YC4gQWgsIHN0YXRpYyBpbmxpbmUuIFRoYXQmIzM5O3MgYSBwb3RlbnRpYWwgaXNzdWUg4oCTIGlmIGl0JiMzOTtzIHN0YXRpYyBpbmxpbmUsIHRoZSBzeW1ib2wgbWlnaHQgbm90IGJlIGluIHRoZSBzeW1ib2wgdGFibGUgYXQgYWxsLiBJIG5lZWQgdG8gaW52ZXN0aWdhdGUgd2hlcmUgaXQmIzM5O3MgZGVmaW5lZC4gTGV0IG1lIGNoZWNrIGBhcmNoL3Jpc2N2L21tL2ZhdWx0LmNgIHRvIHNlZSBpZiBpdCBpcyB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMjMgMTc6Mzc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7dm1hbGxvY19mYXVsdCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcmlzY3YvbW0vZmF1bHQuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Jpc2N2L21tL2ZhdWx0LmM9MTYwPWJhZF9hcmVhKHN0cnVjdCBwdF9yZWdzICpyZWdzLCBzdHJ1Y3QgbW1fc3RydWN0ICptbSwgaW50IGNvZGUsXG4tLVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTE2Ny1cbmFyY2gvcmlzY3YvbW0vZmF1bHQuYzoxNjg6c3RhdGljIGlubGluZSB2b2lkIHZtYWxsb2NfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIGludCBjb2RlLCB1bnNpZ25lZCBsb25nIGFkZHIpXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMTY5LXtcbi0tXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM9MjkyPXZvaWQgaGFuZGxlX3BhZ2VfZmF1bHQoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTMyNi1cdCAgICB1bmxpa2VseShhZGRyIFx1MDAzZT0gVk1BTExPQ19TVEFSVCBcdTAwMjZcdTAwMjYgYWRkciBcdTAwM2MgVk1BTExPQ19FTkQpKSB7XG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmM6MzI3Olx0XHR2bWFsbG9jX2ZhdWx0KHJlZ3MsIGNvZGUsIGFkZHIpO1xuYXJjaC9yaXNjdi9tbS9mYXVsdC5jLTMyOC1cdFx0cmV0dXJuO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzk1OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDYzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZvY3VzaW5nIG9uIGhhbmRsZV9wYWdlX2ZhdWx0IGZvciBSSVNDLVYgQW5hbHlzaXMqKgoKT2theSwgc28gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBhIGBzdGF0aWMgaW5saW5lYCBmdW5jdGlvbiBoZXJlLiBUaGF0IG1lYW5zIHRoZSBjb21waWxlciYjMzk7cyBnb2luZyB0byBmb2xkIGl0IGRpcmVjdGx5IGludG8gYGhhbmRsZV9wYWdlX2ZhdWx0YC4gU28sIGZvciBteSBSSVNDLVYgYW5hbHlzaXMsIGBoYW5kbGVfcGFnZV9mYXVsdGAgYmVjb21lcyB0aGUgY3J1Y2lhbCBzeW1ib2wsIHRoZSBjZW50cmFsIHBvaW50IG9mIGludGVyZXN0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgYmVoYXZpb3IgYW5kIGhvdyB0aGlzIGlubGluZWQgZnVuY3Rpb24gaW50ZXJhY3RzIHdpdGggaXQuCgpOb3csIGxldCYjMzk7cyBwaXZvdCB0byBjaGVja2luZyBgd2Fsa19wdWRfcmFuZ2VgIOKAkyBJJiMzOTtsbCBmaW5kIGl0IGluIGBtbS92bXNjYW4uY2AuIEl0IHNob3VsZCBwcm92aWRlIHNvbWUgaW5zaWdodCBpbnRvIHRoZSBjb3JlIHdvcmtpbmdzLCBjb25zaWRlcmluZyBgaGFuZGxlX3BhZ2VfZmF1bHRgIGlzIGdvaW5nIHRvIGJlIGlubGluZWQgd2l0aCBgd2Fsa19wdWRfcmFuZ2VgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt3YWxrX3B1ZF9yYW5nZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3Ztc2Nhbi5jPTM2MzY9c3RhdGljIHZvaWQgd2Fsa19wbWRfcmFuZ2UocHVkX3QgKnB1ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXG4tLVxubW0vdm1zY2FuLmMtMzcwOC1cbm1tL3Ztc2Nhbi5jOjM3MDk6c3RhdGljIGludCB3YWxrX3B1ZF9yYW5nZShwNGRfdCAqcDRkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcbm1tL3Ztc2Nhbi5jLTM3MTAtXHRcdFx0ICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcbi0tXG5tbS92bXNjYW4uYz0zNzUxPXN0YXRpYyB2b2lkIHdhbGtfbW0oc3RydWN0IG1tX3N0cnVjdCAqbW0sIHN0cnVjdCBscnVfZ2VuX21tX3dhbGsgKndhbGspXG4tLVxubW0vdm1zY2FuLmMtMzc1NC1cdFx0LnRlc3Rfd2FsayA9IHNob3VsZF9za2lwX3ZtYSxcbm1tL3Ztc2Nhbi5jOjM3NTU6XHRcdC5wNGRfZW50cnkgPSB3YWxrX3B1ZF9yYW5nZSxcbm1tL3Ztc2Nhbi5jLTM3NTYtXHRcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQ2NgoJCQkJCQkJb3V0cHV0OiAyMzcKCQkJCQkJCXRob3VnaHRzOiA2NTAKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgUG90ZW50aWFsIEZ1enppbmcgVGFyZ2V0cyoqCgpPa2F5LCBzbyBJJiMzOTttIHRoaW5raW5nIGFib3V0IHRoaXMgcGF0Y2ggYW5kIHdoZXJlIGl0IHRvdWNoZXMgdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0byBiZW5lZml0IGZyb20gZnV6emluZyB0byBlbnN1cmUgdGhlIGNoYW5nZXMgZG9uJiMzOTt0IGludHJvZHVjZSByZWdyZXNzaW9ucyBpbiBwYWdlIHRhYmxlIHRyYXZlcnNhbC4gU2luY2UgaXQgbW9kaWZpZXMgcGFnZSB0YWJsZSBmb2xkaW5nIGFjcm9zcyB2YXJpb3VzIGFyY2hpdGVjdHVyZXMsIEkmIzM5O20gZm9jdXNpbmcgb24gdGhlIGNvcmUgbWVtb3J5IG1hbmFnZW1lbnQgYXNwZWN0LgoKRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCBzeW1ib2xzIGFyZSBpbiBwbGF5LiBJIHN0YXJ0ZWQgYnkgY2hlY2tpbmcgdGhlIHR5cGUgb2Ygc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlbGV2YW50OiBgc3RhdGljIGludGAgaXMgZGVmaW5pdGVseSBhIHNpZ24gdGhhdCB0aGV5JiMzOTtsbCBiZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCBzbyB0aG9zZSBhcmUgZ29vZCBjYW5kaWRhdGVzLiBJIGxvb2tlZCBhdCBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIGFuZCBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAgaW4gYGFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY2AsIGBjb2xsYXBzZV9wdWRfcGFnZWAgYW5kIGBwb3B1bGF0ZV9wdWRgIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgYW5kIGBwdWRwX3NldF9hY2Nlc3NfZmxhZ3NgIGluIGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgLiAgSSBhbHNvIGNoZWNrZWQgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCBpbiBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgIHdoaWNoIHR1cm5lZCBvdXQgdG8gYmUgYSBgYm9vbGAsIHdoaWNoIGRvZXNuJiMzOTt0IGNoYW5nZSB0aGluZ3MuCgpJbml0aWFsbHksIHRoaXMgZ2F2ZSBtZSBhIGxpc3Q6IGB3YWxrX3B1ZF9yYW5nZWAsIGBoYW5kbGVfcGFnZV9mYXVsdGAsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAsIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCwgYHBvcHVsYXRlX3B1ZGAsIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYC4KClRoZW4gSSByZW1lbWJlcmVkIGEgY3JpdGljYWwgZ3VpZGVsaW5lOiBhdm9pZCBob3QtcGF0aCBmdW5jdGlvbnMuIGBoYW5kbGVfcGFnZV9mYXVsdGAgaXMgZGVmaW5pdGVseSBhIGhvdCBwYXRoLCBzbyBpdCYjMzk7cyBvZmYgdGhlIGxpc3QuIFJlbW92aW5nIHRoYXQsIEkmIzM5O20gbGVmdCB3aXRoIHRoZXNlIGZvY3VzIHN5bWJvbHM6IGB3YWxrX3B1ZF9yYW5nZWAsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAsIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCwgYHBvcHVsYXRlX3B1ZGAsIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYC4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgbGlzdCB0byBzdGFydCB3aXRoLgoKSSYjMzk7bSBhbHNvIGtlZXBpbmcgaW4gbWluZCB0aGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnM6IGBMUlVfR0VOYCwgYEtWTWAsIGBQVERVTVBfREVCVUdGU2AsIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgLCB3aGljaCB3aWxsIGluZmx1ZW5jZSBob3cgSSBzZXQgdXAgdGhlIGZ1enppbmcgZW52aXJvbm1lbnQuCgpUaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyBob3cgd2Ugd2FsayBhbmQgYWNjZXNzIGZvbGRlZCBwYWdlIHRhYmxlcy4gSXQgaW1wYWN0cyBLVk0sIE1HTFJVLCBQQVQsIGFuZCBwYWdlIHRhYmxlIGR1bXBpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFuZCBmdXp6aW5nIGlzIHRoZSByaWdodCBhcHByb2FjaCB0byBlbnN1cmUgdGhlcmUgYXJlbiYjMzk7dCBhbnkgcmVncmVzc2lvbnMgaW4gcGFnZSB0YWJsZSB0cmF2ZXJzYWwgb3IgYWNjZXNzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8yMyAxNzozNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7TFJVX0dFTiYjMzQ7LAogICAgJiMzNDtLVk0mIzM0OywKICAgICYjMzQ7UFREVU1QX0RFQlVHRlMmIzM0OywKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDt3YWxrX3B1ZF9yYW5nZSYjMzQ7LAogICAgJiMzNDtnZXRfaHZhX21hcHBpbmdfc2l6ZSYjMzQ7LAogICAgJiMzNDtob3N0X3Bmbl9tYXBwaW5nX2xldmVsJiMzNDssCiAgICAmIzM0O2NvbGxhcHNlX3B1ZF9wYWdlJiMzNDssCiAgICAmIzM0O3BvcHVsYXRlX3B1ZCYjMzQ7LAogICAgJiMzNDtwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZSYjMzQ7LAogICAgJiMzNDtwdWRwX3NldF9hY2Nlc3NfZmxhZ3MmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBmb2xkaW5nIG1hY3JvcyBhbmQgZnVuY3Rpb25zIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChBUk0sIEFSTTY0LCBMb29uZ0FyY2gsIE1JUFMsIE9wZW5SSVNDLCBSSVNDLVYsIHg4NikgYW5kIGdlbmVyaWMgaGVhZGVycy4gSXQgZml4ZXMgaG93IGZvbGRlZCBwYWdlIHRhYmxlcyBhcmUgd2Fsa2VkIGFuZCBhY2Nlc3NlZCwgd2hpY2ggaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gVGhlIGNoYW5nZXMgYWZmZWN0IEtWTSBwYWdlIGZhdWx0IGhhbmRsZXJzLCBNR0xSVSBwYWdlIHRhYmxlIHdhbGtlcnMsIFBBVCBtZW1vcnkgc2V0dGluZywgYW5kIHBhZ2UgdGFibGUgZHVtcGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHBhZ2UgdGFibGUgdHJhdmVyc2FsLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtMUlVfR0VOJiMzNDssCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtQVERVTVBfREVCVUdGUyYjMzQ7LAogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O3dhbGtfcHVkX3JhbmdlJiMzNDssCiAgICAmIzM0O2dldF9odmFfbWFwcGluZ19zaXplJiMzNDssCiAgICAmIzM0O2hvc3RfcGZuX21hcHBpbmdfbGV2ZWwmIzM0OywKICAgICYjMzQ7Y29sbGFwc2VfcHVkX3BhZ2UmIzM0OywKICAgICYjMzQ7cG9wdWxhdGVfcHVkJiMzNDssCiAgICAmIzM0O3B0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlJiMzNDssCiAgICAmIzM0O3B1ZHBfc2V0X2FjY2Vzc19mbGFncyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHRhYmxlIGZvbGRpbmcgbWFjcm9zIGFuZCBmdW5jdGlvbnMgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKEFSTSwgQVJNNjQsIExvb25nQXJjaCwgTUlQUywgT3BlblJJU0MsIFJJU0MtViwgeDg2KSBhbmQgZ2VuZXJpYyBoZWFkZXJzLiBJdCBmaXhlcyBob3cgZm9sZGVkIHBhZ2UgdGFibGVzIGFyZSB3YWxrZWQgYW5kIGFjY2Vzc2VkLCB3aGljaCBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBUaGUgY2hhbmdlcyBhZmZlY3QgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIE1HTFJVIHBhZ2UgdGFibGUgd2Fsa2VycywgUEFUIG1lbW9yeSBzZXR0aW5nLCBhbmQgcGFnZSB0YWJsZSBkdW1waW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gcGFnZSB0YWJsZSB0cmF2ZXJzYWwuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNToxMS42ODUyNTk2NDlaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzM4MDM3MzM1ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiS1ZNXCIsXG4gICAgXCJQVERVTVBfREVCVUdGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3YWxrX3B1ZF9yYW5nZVwiLFxuICAgIFwiZ2V0X2h2YV9tYXBwaW5nX3NpemVcIixcbiAgICBcImhvc3RfcGZuX21hcHBpbmdfbGV2ZWxcIixcbiAgICBcImNvbGxhcHNlX3B1ZF9wYWdlXCIsXG4gICAgXCJwb3B1bGF0ZV9wdWRcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlXCIsXG4gICAgXCJwdWRwX3NldF9hY2Nlc3NfZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHRhYmxlIGZvbGRpbmcgbWFjcm9zIGFuZCBmdW5jdGlvbnMgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKEFSTSwgQVJNNjQsIExvb25nQXJjaCwgTUlQUywgT3BlblJJU0MsIFJJU0MtViwgeDg2KSBhbmQgZ2VuZXJpYyBoZWFkZXJzLiBJdCBmaXhlcyBob3cgZm9sZGVkIHBhZ2UgdGFibGVzIGFyZSB3YWxrZWQgYW5kIGFjY2Vzc2VkLCB3aGljaCBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBUaGUgY2hhbmdlcyBhZmZlY3QgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIE1HTFJVIHBhZ2UgdGFibGUgd2Fsa2VycywgUEFUIG1lbW9yeSBzZXR0aW5nLCBhbmQgcGFnZSB0YWJsZSBkdW1waW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gcGFnZSB0YWJsZSB0cmF2ZXJzYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjExLjY4NTI2OTQ5OVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODA2Mzc2NzgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNjFjNDQ2OThhYTk4MzVkNzVlNTMwNmNlNDE1YzQwMzBkMDMzZWY1YVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVGh1IEp1bCAyMyAxNzozNTowOSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmhcXG5pbmRleCBlNzQ0MTVjOTU5YmVhYy4uODg2NTliMzhlMjM2NDkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oXFxuKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oXFxuQEAgLTE4LDEyICsxOCwxMiBAQFxcbiAgKi9cXG4gdHlwZWRlZiB1bnNpZ25lZCBsb25nIHB0ZV90O1xcbiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG1kX3Q7XFxuLXR5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdFsyXTtcXG4rdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBnZF90O1xcbiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7XFxuIFxcbiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoeClcXG4gI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKHgpXFxuLSNkZWZpbmUgcGdkX3ZhbCh4KVxcdCgoeClbMF0pXFxuKyNkZWZpbmUgcGdkX3ZhbCh4KSAgICAgICh4KVxcbiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoeClcXG4gXFxuICNkZWZpbmUgX19wdGUoeCkgICAgICAgICh4KVxcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtdHlwZXMuaFxcbmluZGV4IDY1MGU3OTNmNDE0MjlmLi43Zjg1Mzg0YWMzODZjYSAxMDA2NDRcXG4tLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oXFxuKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS0ybGV2ZWwtdHlwZXMuaFxcbkBAIC0yNSw3ICsyNSw3IEBAIHR5cGVkZWYgc3RydWN0IHsgcHRldmFsX3QgcGdwcm90OyB9IHBncHJvdF90O1xcbiBcXG4gI2RlZmluZSBwdGVfdmFsKHgpICAgICAgKCh4KS5wdGUpXFxuICNkZWZpbmUgcG1kX3ZhbCh4KSAgICAgICgoeCkucG1kKVxcbi0jZGVmaW5lIHBnZF92YWwoeClcXHQoKHgpLnBnZFswXSlcXG4rI2RlZmluZSBwZ2RfdmFsKHgpICAgICAgKCh4KS5wZ2RbMF0pXFxuICNkZWZpbmUgcGdwcm90X3ZhbCh4KSAgICgoeCkucGdwcm90KVxcbiBcXG4gI2RlZmluZSBfX3B0ZSh4KSAgICAgICAgKChwdGVfdCkgeyAoeCkgfSApXFxuQEAgLTM2LDE0ICszNiwzMiBAQCB0eXBlZGVmIHN0cnVjdCB7IHB0ZXZhbF90IHBncHJvdDsgfSBwZ3Byb3RfdDtcXG4gLypcXG4gICogLi4gd2hpbGUgdGhlc2UgbWFrZSBpdCBlYXNpZXIgb24gdGhlIGNvbXBpbGVyXFxuICAqL1xcbit0eXBlZGVmIHU2NCBwZ2R2YWxfdDtcXG4rXFxuIHR5cGVkZWYgcHRldmFsX3QgcHRlX3Q7XFxuIHR5cGVkZWYgcG1kdmFsX3QgcG1kX3Q7XFxuLXR5cGVkZWYgcG1kdmFsX3QgcGdkX3RbMl07XFxuK3R5cGVkZWYgcGdkdmFsX3QgcGdkX3Q7XFxuIHR5cGVkZWYgcHRldmFsX3QgcGdwcm90X3Q7XFxuIFxcbiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoeClcXG4gI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKHgpXFxuLSNkZWZpbmUgcGdkX3ZhbCh4KVxcdCgoeClbMF0pXFxuK1xcbitzdGF0aWMgaW5saW5lIHBtZHZhbF90IHBnZF92YWwocGdkX3QgcGdkKVxcbit7XFxuK1xcdC8qXFxuK1xcdCAqIFRoZSBsb3dlciBhbmQgaGlnaGVyIHBtZHZhbF90IHZhbHVlcyBwb2ludCB0byB0aGUgc2FtZSBwYWdlLlxcbitcXHQgKiB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZWlyIG9mZnNldCB3aXRoaW4gdGhhdCBwYWdlLlxcbitcXHQgKiBUaGVyZWZvcmUsIHdoaWNoZXZlciB2YWx1ZSBpcyByZXR1cm5lZCwgdGhlIGJlaGF2aW9yIG9mIHBtZF9wZm4oKSxcXG4rXFx0ICogcG1kX3BhZ2UoKSwgYW5kIG90aGVyIHVzZXJzIG9mIHBnZF92YWwoKSByZW1haW5zIHVuY2hhbmdlZC5cXG4rXFx0ICpcXG4rXFx0ICogSG93ZXZlciwgcGdkX3ZhbCgpIGhhcyBoaXN0b3JpY2FsbHkgcmV0dXJuZWQgdGhlIGxvd2VyIHBtZHZhbF90LCBzb1xcbitcXHQgKiBrZWVwIHJldHVybmluZyB0aGUgbG93ZXIgb25lLlxcbitcXHQgKlxcbitcXHQgKiBTZWUgdGhlIGNvbW1lbnRzIGluIGluY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLlxcbitcXHQgKi9cXG4rXFx0cmV0dXJuICgqKHBtZHZhbF90ICgqKVsyXSlcXHUwMDI2cGdkKVswXTtcXG4rfVxcbitcXG4gI2RlZmluZSBwZ3Byb3RfdmFsKHgpICAgKHgpXFxuIFxcbiAjZGVmaW5lIF9fcHRlKHgpICAgICAgICAoeClcXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuaW5kZXggOTgyNzk1Y2Y0NTYzN2UuLmVhZGQwMjdmZTBlZTQzIDEwMDY0NFxcbi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0xNDEsOCArMTQxLDYgQEAgZXh0ZXJuIHBncHJvdF90IHBoeXNfbWVtX2FjY2Vzc19wcm90KHN0cnVjdCBmaWxlICpmaWxlLCB1bnNpZ25lZCBsb25nIHBmbixcXG4gXFxuIGV4dGVybiBwZ2RfdCBzd2FwcGVyX3BnX2RpcltQVFJTX1BFUl9QR0RdO1xcbiBcXG4tI2RlZmluZSBwZ2RwX2dldChwZ3BkKVxcdFxcdFJFQURfT05DRSgqcGdkcClcXG4tXFxuICNkZWZpbmUgcHVkX3BhZ2UocHVkKVxcdFxcdHBtZF9wYWdlKF9fcG1kKHB1ZF92YWwocHVkKSkpXFxuICNkZWZpbmUgcHVkX3dyaXRlKHB1ZClcXHRcXHRwbWRfd3JpdGUoX19wbWQocHVkX3ZhbChwdWQpKSlcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCBhMjY4MWQ3NTUzNTg0MS4uYWFhZTNkMTQ4OTVmNjkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG4rKysgYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbkBAIC0xNDAsMTAgKzE0MCwxNyBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpXFxuICNkZWZpbmUgcHRlX25vbmUocHRlKVxcdFxcdCghcHRlX3ZhbChwdGUpKVxcbiAjZGVmaW5lIHB0ZV9wYWdlKHB0ZSlcXHRcXHQocGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKSlcXG4gXFxuKyNkZWZpbmUgcHRlX3ZhbGlkKHB0ZSlcXHRcXHQoISEocHRlX3ZhbChwdGUpIFxcdTAwMjYgUFRFX1ZBTElEKSlcXG4rI2RlZmluZSBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkgXFxcXFxcbitcXHQoKHB0ZV92YWwocHRlKSBcXHUwMDI2IChQVEVfVkFMSUQgfCBQVEVfUFJFU0VOVF9JTlZBTElEKSkgPT0gUFRFX1BSRVNFTlRfSU5WQUxJRClcXG4rXFxuIC8qXFxuICAqIFRoZSBmb2xsb3dpbmcgb25seSB3b3JrIGlmIHB0ZV9wcmVzZW50KCkuIFVuZGVmaW5lZCBiZWhhdmlvdXIgb3RoZXJ3aXNlLlxcbiAgKi9cXG4tI2RlZmluZSBwdGVfcHJlc2VudChwdGUpXFx0KHB0ZV92YWxpZChwdGUpIHx8IHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKSlcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSlcXG4re1xcbitcXHRyZXR1cm4gcHRlX3ZhbGlkKHB0ZSkgfHwgcHRlX3ByZXNlbnRfaW52YWxpZChwdGUpO1xcbit9XFxuICNkZWZpbmUgcHRlX3lvdW5nKHB0ZSlcXHRcXHQoISEocHRlX3ZhbChwdGUpIFxcdTAwMjYgUFRFX0FGKSlcXG4gI2RlZmluZSBwdGVfc3BlY2lhbChwdGUpXFx0KCEhKHB0ZV92YWwocHRlKSBcXHUwMDI2IFBURV9TUEVDSUFMKSlcXG4gI2RlZmluZSBwdGVfd3JpdGUocHRlKVxcdFxcdCghIShwdGVfdmFsKHB0ZSkgXFx1MDAyNiBQVEVfV1JJVEUpKVxcbkBAIC0xNjgsOSArMTc1LDYgQEAgc3RhdGljIGlubGluZSBwdGV2YWxfdCBfX3BoeXNfdG9fcHRlX3ZhbChwaHlzX2FkZHJfdCBwaHlzKVxcbiAjZGVmaW5lIHB0ZV9zd19kaXJ0eShwdGUpXFx0KCEhKHB0ZV92YWwocHRlKSBcXHUwMDI2IFBURV9ESVJUWSkpXFxuICNkZWZpbmUgcHRlX2RpcnR5KHB0ZSlcXHRcXHQocHRlX3N3X2RpcnR5KHB0ZSkgfHwgcHRlX2h3X2RpcnR5KHB0ZSkpXFxuIFxcbi0jZGVmaW5lIHB0ZV92YWxpZChwdGUpXFx0XFx0KCEhKHB0ZV92YWwocHRlKSBcXHUwMDI2IFBURV9WQUxJRCkpXFxuLSNkZWZpbmUgcHRlX3ByZXNlbnRfaW52YWxpZChwdGUpIFxcXFxcXG4tXFx0KChwdGVfdmFsKHB0ZSkgXFx1MDAyNiAoUFRFX1ZBTElEIHwgUFRFX1BSRVNFTlRfSU5WQUxJRCkpID09IFBURV9QUkVTRU5UX0lOVkFMSUQpXFxuIC8qXFxuICAqIEV4ZWN1dGUtb25seSB1c2VyIG1hcHBpbmdzIGRvIG5vdCBoYXZlIHRoZSBQVEVfVVNFUiBiaXQgc2V0LiBBbGwgdmFsaWRcXG4gICoga2VybmVsIG1hcHBpbmdzIGhhdmUgdGhlIFBURV9VWE4gYml0IHNldC5cXG5AQCAtMTE4OCwyOSArMTE5Miw2IEBAIHN0YXRpYyBpbmxpbmUgYm9vbCBwZ3RhYmxlX2w1X2VuYWJsZWQodm9pZCkgeyByZXR1cm4gZmFsc2U7IH1cXG4gI2RlZmluZSBwNGRfY2xlYXJfZml4bWFwKClcXG4gXFxuICNkZWZpbmUgcDRkX29mZnNldF9raW1nKGRpcixhZGRyKVxcdCgocDRkX3QgKilkaXIpXFxuLVxcbi1zdGF0aWMgaW5saW5lXFxuLXA0ZF90ICpwNGRfb2Zmc2V0X2xvY2tsZXNzX2ZvbGRlZChwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLXtcXG4tXFx0LypcXG4tXFx0ICogV2l0aCBydW50aW1lIGZvbGRpbmcgb2YgdGhlIHB1ZCwgcHVkX29mZnNldF9sb2NrbGVzcygpIHBhc3Nlc1xcbi1cXHQgKiB0aGUgJ3BnZF90IConIHdlIHJldHVybiBoZXJlIHRvIHA0ZF90b19mb2xkZWRfcHVkKCksIHdoaWNoXFxuLVxcdCAqIHdpbGwgb2Zmc2V0IHRoZSBwb2ludGVyIGFzc3VtaW5nIHRoYXQgaXQgcG9pbnRzIGludG9cXG4tXFx0ICogYSBwYWdlLXRhYmxlIHBhZ2UuIEhvd2V2ZXIsIHRoZSBmYXN0IEdVUCBwYXRoIHBhc3NlcyB1cyBhXFxuLVxcdCAqIHBnZF90IGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHNvIHdlIG11c3QgdXNlIHRoZSBvcmlnaW5hbFxcbi1cXHQgKiBwb2ludGVyIGluICdwZ2RwJyB0byBjb25zdHJ1Y3QgdGhlIHA0ZCBwb2ludGVyIGluc3RlYWQgb2ZcXG4tXFx0ICogdXNpbmcgdGhlIGdlbmVyaWMgcDRkX29mZnNldF9sb2NrbGVzcygpIGltcGxlbWVudGF0aW9uLlxcbi1cXHQgKlxcbi1cXHQgKiBOb3RlOiByZXVzaW5nIHRoZSBvcmlnaW5hbCBwb2ludGVyIG1lYW5zIHRoYXQgd2UgbWF5XFxuLVxcdCAqIGRlcmVmZXJlbmNlIHRoZSBzYW1lIChsaXZlKSBwYWdlLXRhYmxlIGVudHJ5IG11bHRpcGxlIHRpbWVzLlxcbi1cXHQgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBpdCBpcyBzdGlsbCBvbmx5IGxvYWRlZCBvbmNlIGluIHRoZVxcbi1cXHQgKiBjb250ZXh0IG9mIGVhY2ggbGV2ZWwgYW5kIHRoZSBDUFUgZ3VhcmFudGVlcyBzYW1lLWFkZHJlc3NcXG4tXFx0ICogcmVhZC1hZnRlci1yZWFkIG9yZGVyaW5nLlxcbi1cXHQgKi9cXG4tXFx0cmV0dXJuIHA0ZF9vZmZzZXQocGdkcCwgYWRkcik7XFxuLX1cXG4tI2RlZmluZSBwNGRfb2Zmc2V0X2xvY2tsZXNzIHA0ZF9vZmZzZXRfbG9ja2xlc3NfZm9sZGVkXFxuLVxcbiAjZW5kaWYgIC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDQgKi9cXG4gXFxuICNkZWZpbmUgcGdkX0VSUk9SKGUpXFx0XFxcXFxcbmRpZmYgLS1naXQgYS9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCAxOTUyZTM0YmM4ZWUwMC4uNDM0ZTViNDgzNDY2NGYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuKysrIGIvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTYzNiw3ICs2MzYsOSBAQCBzdGF0aWMgaW5saW5lIGxvbmcgcG1kX3Byb3Rub25lKHBtZF90IHBtZClcXG4gI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUgKi9cXG4gXFxuICNkZWZpbmUgcG1kX2xlYWYocG1kKVxcdFxcdCgocG1kX3ZhbChwbWQpIFxcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcXG4rI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVEXFxuICNkZWZpbmUgcHVkX2xlYWYocHVkKVxcdFxcdCgocHVkX3ZhbChwdWQpIFxcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcXG4rI2VuZGlmXFxuIFxcbiAvKlxcbiAgKiBXZSBwcm92aWRlIG91ciBvd24gZ2V0X3VubWFwcGVkIGFyZWEgdG8gY29wZSB3aXRoIHRoZSB2aXJ0dWFsIGFsaWFzaW5nXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY1xcbmluZGV4IGUxMDQ4OTdhYTUzMjg1Li44MzdiNDBiYjY5NGY0ZSAxMDA2NDRcXG4tLS0gYS9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmNcXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmNcXG5AQCAtNjY5LDEwICs2NjksMTAgQEAgc3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBcXHRpbnQgbGV2ZWwgPSAwO1xcbiBcXHR1bnNpZ25lZCBsb25nIGh2YTtcXG4gXFx0dW5zaWduZWQgbG9uZyBmbGFncztcXG4tXFx0cGdkX3QgcGdkO1xcbi1cXHRwNGRfdCBwNGQ7XFxuLVxcdHB1ZF90IHB1ZDtcXG4tXFx0cG1kX3QgcG1kO1xcbitcXHRwZ2RfdCAqcGdkcCwgcGdkO1xcbitcXHRwNGRfdCAqcDRkcCwgcDRkO1xcbitcXHRwdWRfdCAqcHVkcCwgcHVkO1xcbitcXHRwbWRfdCAqcG1kcCwgcG1kO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogTm90ZSwgdXNpbmcgdGhlIGFscmVhZHktcmV0cmlldmVkIG1lbXNsb3QgYW5kIF9fZ2ZuX3RvX2h2YV9tZW1zbG90KClcXG5AQCAtNjk4LDE5ICs2OTgsMjMgQEAgc3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbiBcXHQgKiB2YWx1ZSkgYW5kIHRoZW4gcCpkX29mZnNldCgpIHdhbGtzIGludG8gdGhlIHRhcmdldCBodWdlIHBhZ2UgaW5zdGVhZFxcbiBcXHQgKiBvZiB0aGUgb2xkIHBhZ2UgdGFibGUgKHNlZXMgdGhlIG5ldyB2YWx1ZSkuXFxuIFxcdCAqL1xcbi1cXHRwZ2QgPSBwZ2RwX2dldChwZ2Rfb2Zmc2V0KGt2bS1cXHUwMDNlbW0sIGh2YSkpO1xcbitcXHRwZ2RwID0gcGdkX29mZnNldChrdm0tXFx1MDAzZW1tLCBodmEpO1xcbitcXHRwZ2QgPSBwZ2RwX2dldChwZ2RwKTtcXG4gXFx0aWYgKHBnZF9ub25lKHBnZCkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cDRkID0gcDRkcF9nZXQocDRkX29mZnNldChcXHUwMDI2cGdkLCBodmEpKTtcXG4rXFx0cDRkcCA9IHA0ZF9vZmZzZXRfbG9ja2xlc3MocGdkcCwgcGdkLCBodmEpO1xcbitcXHRwNGQgPSBwNGRwX2dldChwNGRwKTtcXG4gXFx0aWYgKHA0ZF9ub25lKHA0ZCkgfHwgIXA0ZF9wcmVzZW50KHA0ZCkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cHVkID0gcHVkcF9nZXQocHVkX29mZnNldChcXHUwMDI2cDRkLCBodmEpKTtcXG4rXFx0cHVkcCA9IHB1ZF9vZmZzZXRfbG9ja2xlc3MocDRkcCwgcDRkLCBodmEpO1xcbitcXHRwdWQgPSBwdWRwX2dldChwdWRwKTtcXG4gXFx0aWYgKHB1ZF9ub25lKHB1ZCkgfHwgIXB1ZF9wcmVzZW50KHB1ZCkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG4tXFx0cG1kID0gcG1kcF9nZXQocG1kX29mZnNldChcXHUwMDI2cHVkLCBodmEpKTtcXG4rXFx0cG1kcCA9IHBtZF9vZmZzZXRfbG9ja2xlc3MocHVkcCwgcHVkLCBodmEpO1xcbitcXHRwbWQgPSBwbWRwX2dldChwbWRwKTtcXG4gXFx0aWYgKHBtZF9ub25lKHBtZCkgfHwgIXBtZF9wcmVzZW50KHBtZCkpXFxuIFxcdFxcdGdvdG8gb3V0O1xcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5pbmRleCBmYTdiOTM1Zjk0N2NhMC4uMTUxZjRkMTViZDEyYmYgMTAwNjQ0XFxuLS0tIGEvYXJjaC9taXBzL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcXG5AQCAtNzQ1LDggKzc0NSwxMCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxcbiBcXG4gI2lmZGVmIF9QQUdFX0hVR0VcXG4gI2RlZmluZSBwbWRfbGVhZihwbWQpXFx0KChwbWRfdmFsKHBtZCkgXFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxcbisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcXG4gI2RlZmluZSBwdWRfbGVhZihwdWQpXFx0KChwdWRfdmFsKHB1ZCkgXFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxcbiAjZW5kaWZcXG4rI2VuZGlmXFxuIFxcbiAjZGVmaW5lIGd1cF9mYXN0X3Blcm1pdHRlZChzdGFydCwgZW5kKVxcdCghY3B1X2hhc19kY19hbGlhc2VzKVxcbiBcXG5kaWZmIC0tZ2l0IGEvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbmluZGV4IDZiODk5OTZkMGI2MjhlLi41YTQ5MWNkMGYwMDg2OCAxMDA2NDRcXG4tLS0gYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaFxcbisrKyBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oXFxuQEAgLTMzMSw5ICszMzEsNiBAQCBzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX3BhZ2VfdmFkZHIocG1kX3QgcG1kKVxcbiBcXHRyZXR1cm4gKCh1bnNpZ25lZCBsb25nKSBfX3ZhKHBtZF92YWwocG1kKSBcXHUwMDI2IFBBR0VfTUFTSykpO1xcbiB9XFxuIFxcbi0jZGVmaW5lIF9fcG1kX29mZnNldChhZGRyZXNzKSBcXFxcXFxuLVxcdCgoKGFkZHJlc3MpIFxcdTAwM2VcXHUwMDNlIFBNRF9TSElGVCkgXFx1MDAyNiAoUFRSU19QRVJfUE1ELTEpKVxcbi1cXG4gI2RlZmluZSBQRk5fUFRFX1NISUZUXFx0XFx0UEFHRV9TSElGVFxcbiAjZGVmaW5lIHB0ZV9wZm4oeClcXHRcXHQoKHVuc2lnbmVkIGxvbmcpKCgoeCkucHRlKSkgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVClcXG4gI2RlZmluZSBwZm5fcHRlKHBmbiwgcHJvdCkgIF9fcHRlKCgoKHBmbikgXFx1MDAzY1xcdTAwM2MgUEFHRV9TSElGVCkpIHwgcGdwcm90X3ZhbChwcm90KSlcXG5kaWZmIC0tZ2l0IGEvYXJjaC9yaXNjdi9rdm0vbW11LmMgYi9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xcbmluZGV4IDA4MmY5YjI2MTczMzg3Li42ZDYwNDJiODFkNzkwOSAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xcbisrKyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXFxuQEAgLTM2MiwxMCArMzYyLDEwIEBAIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxcbiB7XFxuIFxcdGludCBzaXplID0gUEFHRV9TSVpFO1xcbiBcXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xcbi1cXHRwZ2RfdCBwZ2Q7XFxuLVxcdHA0ZF90IHA0ZDtcXG4tXFx0cHVkX3QgcHVkO1xcbi1cXHRwbWRfdCBwbWQ7XFxuK1xcdHBnZF90ICpwZ2RwLCBwZ2Q7XFxuK1xcdHA0ZF90ICpwNGRwLCBwNGQ7XFxuK1xcdHB1ZF90ICpwdWRwLCBwdWQ7XFxuK1xcdHBtZF90ICpwbWRwLCBwbWQ7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBEaXNhYmxlIElSUXMgdG8gcHJldmVudCBjb25jdXJyZW50IHRlYXIgZG93biBvZiBob3N0IHBhZ2UgdGFibGVzLFxcbkBAIC0zODEsMTUgKzM4MSwxOCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0ICogdmFsdWUpIGFuZCB0aGVuIHAqZF9vZmZzZXQoKSB3YWxrcyBpbnRvIHRoZSB0YXJnZXQgaHVnZSBwYWdlIGluc3RlYWRcXG4gXFx0ICogb2YgdGhlIG9sZCBwYWdlIHRhYmxlIChzZWVzIHRoZSBuZXcgdmFsdWUpLlxcbiBcXHQgKi9cXG4tXFx0cGdkID0gcGdkcF9nZXQocGdkX29mZnNldChrdm0tXFx1MDAzZW1tLCBodmEpKTtcXG4rXFx0cGdkcCA9IHBnZF9vZmZzZXQoa3ZtLVxcdTAwM2VtbSwgaHZhKTtcXG4rXFx0cGdkID0gcGdkcF9nZXQocGdkcCk7XFxuIFxcdGlmIChwZ2Rfbm9uZShwZ2QpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZF9vZmZzZXQoXFx1MDAyNnBnZCwgaHZhKSk7XFxuK1xcdHA0ZHAgPSBwNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgaHZhKTtcXG4rXFx0cDRkID0gcDRkcF9nZXQocDRkcCk7XFxuIFxcdGlmIChwNGRfbm9uZShwNGQpIHx8ICFwNGRfcHJlc2VudChwNGQpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuLVxcdHB1ZCA9IHB1ZHBfZ2V0KHB1ZF9vZmZzZXQoXFx1MDAyNnA0ZCwgaHZhKSk7XFxuK1xcdHB1ZHAgPSBwdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZHAsIHA0ZCwgaHZhKTtcXG4rXFx0cHVkID0gcHVkcF9nZXQocHVkcCk7XFxuIFxcdGlmIChwdWRfbm9uZShwdWQpIHx8ICFwdWRfcHJlc2VudChwdWQpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuQEAgLTM5OCw3ICs0MDEsOCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcXG4gXFx0XFx0Z290byBvdXQ7XFxuIFxcdH1cXG4gXFxuLVxcdHBtZCA9IHBtZHBfZ2V0KHBtZF9vZmZzZXQoXFx1MDAyNnB1ZCwgaHZhKSk7XFxuK1xcdHBtZHAgPSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgaHZhKTtcXG4rXFx0cG1kID0gcG1kcF9nZXQocG1kcCk7XFxuIFxcdGlmIChwbWRfbm9uZShwbWQpIHx8ICFwbWRfcHJlc2VudChwbWQpKVxcbiBcXHRcXHRnb3RvIG91dDtcXG4gXFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbW0vZmF1bHQuYyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuY1xcbmluZGV4IDA0ZWQ2ZjhhY2FlNGZkLi5iMmJjYWYxMGQxM2YxZCAxMDA2NDRcXG4tLS0gYS9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcXG4rKysgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcXG5AQCAtMTY3LDE0ICsxNjcsMTYgQEAgYmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY29kZSxcXG4gXFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKVxcbiB7XFxuLVxcdHBnZF90ICpwZ2QsICpwZ2RfaztcXG4tXFx0cHVkX3QgKnB1ZF9rO1xcbi1cXHRwNGRfdCAqcDRkX2s7XFxuLVxcdHBtZF90ICpwbWRfaztcXG4tXFx0cHRlX3QgKnB0ZV9rO1xcbitcXHRwZ2RfdCAqcGdkcF9rLCAqcGdkcCwgcGdkX2s7XFxuK1xcdHA0ZF90ICpwNGRwX2ssICpwNGRwO1xcbitcXHRwdWRfdCAqcHVkcF9rLCAqcHVkcCwgcHVkX2s7XFxuK1xcdHBtZF90ICpwbWRwX2ssICpwbWRwLCBwbWRfaztcXG4rXFx0cHRlX3QgKnB0ZXBfaztcXG4gXFx0aW50IGluZGV4O1xcbiBcXHR1bnNpZ25lZCBsb25nIHBmbjtcXG4gXFxuK1xcdEJVSUxEX0JVR19PTihDT05GSUdfUEdUQUJMRV9MRVZFTFMgIT0gNSBcXHUwMDI2XFx1MDAyNiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgIT0gMik7XFxuK1xcbiBcXHQvKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YgKi9cXG4gXFx0aWYgKHVzZXJfbW9kZShyZWdzKSlcXG4gXFx0XFx0cmV0dXJuIGRvX3RyYXAocmVncywgU0lHU0VHViwgY29kZSwgYWRkcik7XFxuQEAgLTE4OSwzOSArMTkxLDUxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhXFxuIFxcdCAqL1xcbiBcXHRpbmRleCA9IHBnZF9pbmRleChhZGRyKTtcXG4gXFx0cGZuID0gY3NyX3JlYWQoQ1NSX1NBVFApIFxcdTAwMjYgU0FUUF9QUE47XFxuLVxcdHBnZCA9IChwZ2RfdCAqKXBmbl90b192aXJ0KHBmbikgKyBpbmRleDtcXG4tXFx0cGdkX2sgPSBpbml0X21tLnBnZCArIGluZGV4O1xcbiBcXG4tXFx0aWYgKCFwZ2RfcHJlc2VudChwZ2RwX2dldChwZ2RfaykpKSB7XFxuK1xcdHBnZHAgPSAocGdkX3QgKilwZm5fdG9fdmlydChwZm4pICsgaW5kZXg7XFxuK1xcdHBnZHBfayA9IGluaXRfbW0ucGdkICsgaW5kZXg7XFxuK1xcbitcXHRwZ2RfayA9IHBnZHBfZ2V0KHBnZHBfayk7XFxuK1xcdGlmICghcGdkX3ByZXNlbnQocGdkX2spKSB7XFxuIFxcdFxcdG5vX2NvbnRleHQocmVncywgYWRkcik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRzZXRfcGdkKHBnZCwgcGdkcF9nZXQocGdkX2spKTtcXG4rXFx0aWYgKENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSA1KVxcbitcXHRcXHRzZXRfcGdkKHBnZHAsIHBnZF9rKTtcXG4gXFxuLVxcdHA0ZF9rID0gcDRkX29mZnNldChwZ2RfaywgYWRkcik7XFxuLVxcdGlmICghcDRkX3ByZXNlbnQocDRkcF9nZXQocDRkX2spKSkge1xcbitcXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcXG4rXFx0cDRkcF9rID0gcDRkX29mZnNldChwZ2RwX2ssIGFkZHIpO1xcbitcXHRpZiAoIXA0ZF9wcmVzZW50KHA0ZHBfZ2V0KHA0ZHBfaykpKSB7XFxuIFxcdFxcdG5vX2NvbnRleHQocmVncywgYWRkcik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbiBcXG4tXFx0cHVkX2sgPSBwdWRfb2Zmc2V0KHA0ZF9rLCBhZGRyKTtcXG4tXFx0aWYgKCFwdWRfcHJlc2VudChwdWRwX2dldChwdWRfaykpKSB7XFxuK1xcdHB1ZHAgPSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHIpO1xcbitcXHRwdWRwX2sgPSBwdWRfb2Zmc2V0KHA0ZHBfaywgYWRkcik7XFxuK1xcbitcXHRwdWRfayA9IHB1ZHBfZ2V0KHB1ZHBfayk7XFxuK1xcdGlmICghcHVkX3ByZXNlbnQocHVkX2spKSB7XFxuIFxcdFxcdG5vX2NvbnRleHQocmVncywgYWRkcik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbi1cXHRpZiAocHVkX2xlYWYocHVkcF9nZXQocHVkX2spKSlcXG4rXFx0aWYgKHB1ZF9sZWFmKHB1ZF9rKSlcXG4gXFx0XFx0Z290byBmbHVzaF90bGI7XFxuIFxcbiBcXHQvKlxcbiBcXHQgKiBTaW5jZSB0aGUgdm1hbGxvYyBhcmVhIGlzIGdsb2JhbCwgaXQgaXMgdW5uZWNlc3NhcnlcXG4gXFx0ICogdG8gY29weSBpbmRpdmlkdWFsIFBURXNcXG4gXFx0ICovXFxuLVxcdHBtZF9rID0gcG1kX29mZnNldChwdWRfaywgYWRkcik7XFxuLVxcdGlmICghcG1kX3ByZXNlbnQocG1kcF9nZXQocG1kX2spKSkge1xcbitcXHRwbWRwID0gcG1kX29mZnNldChwdWRwLCBhZGRyKTtcXG4rXFx0cG1kcF9rID0gcG1kX29mZnNldChwdWRwX2ssIGFkZHIpO1xcbitcXG4rXFx0cG1kX2sgPSBwbWRwX2dldChwbWRwX2spO1xcbitcXHRpZiAoIXBtZF9wcmVzZW50KHBtZF9rKSkge1xcbiBcXHRcXHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xcbiBcXHRcXHRyZXR1cm47XFxuIFxcdH1cXG4tXFx0aWYgKHBtZF9sZWFmKHBtZHBfZ2V0KHBtZF9rKSkpXFxuK1xcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMilcXG4rXFx0XFx0c2V0X3BtZChwbWRwLCBwbWRfayk7XFxuK1xcdGlmIChwbWRfbGVhZihwbWRfaykpXFxuIFxcdFxcdGdvdG8gZmx1c2hfdGxiO1xcbiBcXG4gXFx0LypcXG5AQCAtMjMwLDggKzI0NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhXFxuIFxcdCAqIGFkZHJlc3Nlcy4gSWYgd2UgZG9uJ3QgZG8gdGhpcywgdGhpcyB3aWxsIGp1c3RcXG4gXFx0ICogc2lsZW50bHkgbG9vcCBmb3JldmVyLlxcbiBcXHQgKi9cXG4tXFx0cHRlX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRfaywgYWRkcik7XFxuLVxcdGlmICghcHRlX3ByZXNlbnQocHRlcF9nZXQocHRlX2spKSkge1xcbitcXHRwdGVwX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwX2ssIGFkZHIpO1xcbitcXHRpZiAoIXB0ZV9wcmVzZW50KHB0ZXBfZ2V0KHB0ZXBfaykpKSB7XFxuIFxcdFxcdG5vX2NvbnRleHQocmVncywgYWRkcik7XFxuIFxcdFxcdHJldHVybjtcXG4gXFx0fVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYyBiL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXFxuaW5kZXggMmFmYTdhMjMzNDBlOTIuLjRlNTQ1OTg4OTUzYTBiIDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXFxuKysrIGIvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNcXG5AQCAtMjcsNiArMjcsNyBAQFxcbiAgKi9cXG4gc3RydWN0IHBnX3N0YXRlIHtcXG4gXFx0c3RydWN0IHB0ZHVtcF9zdGF0ZSBwdGR1bXA7XFxuK1xcdGludCBmaXJzdF9sZXZlbDtcXG4gXFx0aW50IGxldmVsO1xcbiBcXHRwZ3Byb3R2YWxfdCBjdXJyZW50X3Byb3Q7XFxuIFxcdHBncHJvdHZhbF90IGVmZmVjdGl2ZV9wcm90O1xcbkBAIC0yNTQsNyArMjU1LDcgQEAgc3RhdGljIHZvaWQgZWZmZWN0aXZlX3Byb3Qoc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QsIGludCBsZXZlbCwgdTY0IHZhbClcXG4gXFx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcXHUwMDI2IFBURV9GTEFHU19NQVNLO1xcbiBcXHRwZ3Byb3R2YWxfdCBlZmZlY3RpdmU7XFxuIFxcbi1cXHRpZiAobGV2ZWwgXFx1MDAzZSAwKSB7XFxuK1xcdGlmIChsZXZlbCBcXHUwMDNlIHN0LVxcdTAwM2VmaXJzdF9sZXZlbCkge1xcbiBcXHRcXHRwZ3Byb3R2YWxfdCBoaWdoZXJfcHJvdCA9IHN0LVxcdTAwM2Vwcm90X2xldmVsc1tsZXZlbCAtIDFdO1xcbiBcXG4gXFx0XFx0ZWZmZWN0aXZlID0gKGhpZ2hlcl9wcm90IFxcdTAwMjYgcHJvdCBcXHUwMDI2IChfUEFHRV9VU0VSIHwgX1BBR0VfUlcpKSB8XFxuQEAgLTQ1NSw2ICs0NTYsOCBAQCBib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcXG4gXFx0XFx0LnNlcVxcdFxcdD0gbVxcbiBcXHR9O1xcbiBcXG4rXFx0c3QuZmlyc3RfbGV2ZWwgPSBwdGR1bXBfcHRfbGV2ZWxfZmlyc3QobW0pO1xcbitcXG4gXFx0cHRkdW1wX3dhbGtfcGdkKFxcdTAwMjZzdC5wdGR1bXAsIG1tLCBwZ2QpO1xcbiBcXG4gXFx0aWYgKCFjaGVja3d4KVxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbmluZGV4IDA3ODY4OWFhNzIwNmY4Li45MWIzM2EyNjVhNDMxZiAxMDA2NDRcXG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXFxuKysrIGIvYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1xcbkBAIC0xMzQ2LDcgKzEzNDYsNyBAQCBzdGF0aWMgaW50IGNvbGxhcHNlX3B1ZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG4gXFx0cG1kX3QgKnBtZCwgZmlyc3Q7XFxuIFxcdGludCBpO1xcbiBcXG4tXFx0aWYgKCFkaXJlY3RfZ2JwYWdlcylcXG4rXFx0aWYgKENPTkZJR19QR1RBQkxFX0xFVkVMUyA9PSAyIHx8ICFkaXJlY3RfZ2JwYWdlcylcXG4gXFx0XFx0cmV0dXJuIDA7XFxuIFxcbiBcXHRhZGRyIFxcdTAwMjY9IFBVRF9NQVNLO1xcbkBAIC0xNzMwLDcgKzE3MzAsOCBAQCBzdGF0aWMgaW50IHBvcHVsYXRlX3B1ZChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgcDRkX3QgKnA0ZCxcXG4gXFx0LypcXG4gXFx0ICogTWFwIGV2ZXJ5dGhpbmcgc3RhcnRpbmcgZnJvbSB0aGUgR2IgYm91bmRhcnksIHBvc3NpYmx5IHdpdGggMUcgcGFnZXNcXG4gXFx0ICovXFxuLVxcdHdoaWxlIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfR0JQQUdFUykgXFx1MDAyNlxcdTAwMjYgZW5kIC0gc3RhcnQgXFx1MDAzZT0gUFVEX1NJWkUpIHtcXG4rXFx0d2hpbGUgKENPTkZJR19QR1RBQkxFX0xFVkVMUyBcXHUwMDNlIDMgXFx1MDAyNlxcdTAwMjYgYm9vdF9jcHVfaGFzKFg4Nl9GRUFUVVJFX0dCUEFHRVMpIFxcdTAwMjZcXHUwMDI2XFxuK1xcdCAgICAgICBlbmQgLSBzdGFydCBcXHUwMDNlPSBQVURfU0laRSkge1xcbiBcXHRcXHRzZXRfcHVkKHB1ZCwgcHVkX21raHVnZShwZm5fcHVkKGNwYS1cXHUwMDNlcGZuLFxcbiBcXHRcXHRcXHRcXHQgICBjYW5vbl9wZ3Byb3QocHVkX3BncHJvdCkpKSk7XFxuIFxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcXG5pbmRleCBmMzJmYWNkYjMwMzU0My4uZWRhZDg0N2EyZWNkYjggMTAwNjQ0XFxuLS0tIGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jXFxuKysrIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXFxuQEAgLTQxMSw2ICs0MTEsNyBAQCBpbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbiBcXHRyZXR1cm4gY2hhbmdlZDtcXG4gfVxcbiBcXG4rI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXFxuIGludCBwdWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4gXFx0XFx0XFx0ICBwdWRfdCAqcHVkcCwgcHVkX3QgZW50cnksIGludCBkaXJ0eSlcXG4ge1xcbkBAIC00MzAsNiArNDMxLDcgQEAgaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxcbiBcXG4gXFx0cmV0dXJuIGNoYW5nZWQ7XFxuIH1cXG4rI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXFxuICNlbmRpZlxcbiBcXG4gYm9vbCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wNGQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oXFxuaW5kZXggODljMjFmODRjZmZiZTIuLjE5ZjVhNmVkYTc2Y2MxIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oXFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmhcXG5AQCAtMjIsMjYgKzIyLDYxIEBAIHN0YXRpYyBpbmxpbmUgaW50IHBnZF9ub25lKHBnZF90IHBnZClcXHRcXHR7IHJldHVybiAwOyB9XFxuIHN0YXRpYyBpbmxpbmUgaW50IHBnZF9iYWQocGdkX3QgcGdkKVxcdFxcdHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcGdkX3ByZXNlbnQocGdkX3QgcGdkKVxcdHsgcmV0dXJuIDE7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIHBnZF9jbGVhcihwZ2RfdCAqcGdkKVxcdHsgfVxcbitzdGF0aWMgaW5saW5lIGJvb2wgcGdkX2xlYWYocGdkX3QgcGdkKVxcdFxcdHsgcmV0dXJuIGZhbHNlOyB9XFxuKyNkZWZpbmUgcGdkX2xlYWYgcGdkX2xlYWZcXG4gI2RlZmluZSBwNGRfRVJST1IocDRkKVxcdFxcdFxcdFxcdChwZ2RfRVJST1IoKHA0ZCkucGdkKSlcXG4gXFxuICNkZWZpbmUgcGdkX3BvcHVsYXRlKG1tLCBwZ2QsIHA0ZClcXHRcXHRkbyB7IH0gd2hpbGUgKDApXFxuICNkZWZpbmUgcGdkX3BvcHVsYXRlX3NhZmUobW0sIHBnZCwgcDRkKVxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4tLypcXG4tICogKHA0ZHMgYXJlIGZvbGRlZCBpbnRvIHBnZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsXFxuLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pXFxuLSAqL1xcbi0jZGVmaW5lIHNldF9wZ2QocGdkcHRyLCBwZ2R2YWwpXFx0c2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KVxcbiBcXG4tc3RhdGljIGlubGluZSBwNGRfdCAqcDRkX29mZnNldChwZ2RfdCAqcGdkLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuKyNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwZ2RfY2hlY2tfZHVtbXkocGdkdmFsKTtcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHNldF9wNGQoKHA0ZF90ICopKHBnZHB0ciksIChwNGRfdCkgeyBwZ2R2YWwgfSk7XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwZ2RfdCBwZ2RwX2dldChwZ2RfdCAqcDRkcClcXG4ge1xcbi1cXHRyZXR1cm4gKHA0ZF90ICopcGdkO1xcbitcXHRwZ2RfdCBkdW1teSA9IHsgMCB9O1xcbitcXG4rXFx0cmV0dXJuIGR1bW15O1xcbiB9XFxuKyNkZWZpbmUgcGdkcF9nZXQgcGdkcF9nZXRcXG4rXFxuKyNkZWZpbmUgcGdkX2NoZWNrX2R1bW15KHBnZCkgQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHBnZF92YWwocGdkKSkpXFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHA0ZF90ICpfX3A0ZF9vZmZzZXQocGdkX3QgKnBnZHAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4re1xcbitcXHRyZXR1cm4gKHA0ZF90ICopcGdkcDtcXG4rfVxcbitcXG4rI2RlZmluZSBwNGRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cGdkX2NoZWNrX2R1bW15KCoocGdkcCkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19wNGRfb2Zmc2V0KHBnZHAsIGFkZHJlc3MpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSlcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcDRkX3QgKl9fcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuK3tcXG4rXFx0cmV0dXJuIChwNGRfdCAqKXBnZHA7XFxuK31cXG4rXFxuKyNkZWZpbmUgcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGFkZHJlc3MpXFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cGdkX2NoZWNrX2R1bW15KCoocGdkcCkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19wNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgYWRkcmVzcyk7XFx0XFx0XFx0XFxcXFxcbit9KVxcbiBcXG4gI2RlZmluZSBwNGRfdmFsKHgpXFx0XFx0XFx0XFx0KHBnZF92YWwoKHgpLnBnZCkpXFxuICNkZWZpbmUgX19wNGQoeClcXHRcXHRcXHRcXHQoKHA0ZF90KSB7IF9fcGdkKHgpIH0pXFxuIFxcbi0jZGVmaW5lIHBnZF9wYWdlKHBnZClcXHRcXHRcXHRcXHQocDRkX3BhZ2UoKHA0ZF90KXsgcGdkIH0pKVxcbi0jZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZClcXHRcXHRcXHQoKHVuc2lnbmVkIGxvbmcpKHA0ZF9wZ3RhYmxlKChwNGRfdCl7IHBnZCB9KSkpXFxuKyNkZWZpbmUgcGdkX3BhZ2UocGdkKVxcdFxcdFxcdFxcdCh7IEJVSUxEX0JVRygpOyAoc3RydWN0IHBhZ2UgKilOVUxMOyB9KVxcbisjZGVmaW5lIHBnZF9wYWdlX3ZhZGRyKHBnZClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7IFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cGdkX2NoZWNrX2R1bW15KHBnZCk7XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHQodW5zaWduZWQgbG9uZylwNGRfcGd0YWJsZSgocDRkX3QpIHsgcGdkIH0pO1xcdFxcdFxcdFxcXFxcXG4rfSlcXG4gXFxuIC8qXFxuICAqIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwNGQgaXMgdHJpdmlhbDogdGhlIDEtZW50cnkgcDRkIGlzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmhcXG5pbmRleCAzNmI2NDkwZWQxODA4MS4uNjE4NTJlYjRiMTUwNGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmhcXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaFxcbkBAIC0zMSwyOSArMzEsNjEgQEAgc3RhdGljIGlubGluZSBpbnQgcHVkX25vbmUocHVkX3QgcHVkKVxcdFxcdHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcHVkX2JhZChwdWRfdCBwdWQpXFx0XFx0eyByZXR1cm4gMDsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBwdWRfcHJlc2VudChwdWRfdCBwdWQpXFx0eyByZXR1cm4gMTsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBwdWRfdXNlcihwdWRfdCBwdWQpXFx0XFx0eyByZXR1cm4gMDsgfVxcbi1zdGF0aWMgaW5saW5lIGludCBwdWRfbGVhZihwdWRfdCBwdWQpXFx0XFx0eyByZXR1cm4gMDsgfVxcbitzdGF0aWMgaW5saW5lIGJvb2wgcHVkX2xlYWYocHVkX3QgcHVkKVxcdFxcdHsgcmV0dXJuIGZhbHNlOyB9XFxuKyNkZWZpbmUgcHVkX2xlYWYgcHVkX2xlYWZcXG4gc3RhdGljIGlubGluZSB2b2lkIHB1ZF9jbGVhcihwdWRfdCAqcHVkKVxcdHsgfVxcbiAjZGVmaW5lIHBtZF9FUlJPUihwbWQpXFx0XFx0XFx0XFx0KHB1ZF9FUlJPUigocG1kKS5wdWQpKVxcbiBcXG4gI2RlZmluZSBwdWRfcG9wdWxhdGUobW0sIHBtZCwgcHRlKVxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4gXFxuLS8qXFxuLSAqIChwbWRzIGFyZSBmb2xkZWQgaW50byBwdWRzIHNvIHRoaXMgZG9lc24ndCBnZXQgYWN0dWFsbHkgY2FsbGVkLFxcbi0gKiBidXQgdGhlIGRlZmluZSBpcyBuZWVkZWQgZm9yIGEgZ2VuZXJpYyBpbmxpbmUgZnVuY3Rpb24uKVxcbi0gKi9cXG4tI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKVxcdFxcdFxcdHNldF9wbWQoKHBtZF90ICopKHB1ZHB0ciksIChwbWRfdCkgeyBwdWR2YWwgfSlcXG4rI2RlZmluZSBzZXRfcHVkKHB1ZHB0ciwgcHVkdmFsKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHB1ZF9jaGVja19kdW1teShwdWR2YWwpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0c2V0X3BtZCgocG1kX3QgKikocHVkcHRyKSwgKHBtZF90KSB7IHB1ZHZhbCB9KTtcXHRcXHRcXHRcXFxcXFxuK30pXFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHB1ZF90IHB1ZHBfZ2V0KHB1ZF90ICpwdWRwKVxcbit7XFxuK1xcdHB1ZF90IGR1bW15ID0geyAwIH07XFxuK1xcbitcXHRyZXR1cm4gZHVtbXk7XFxuK31cXG4rI2RlZmluZSBwdWRwX2dldCBwdWRwX2dldFxcbiBcXG4tc3RhdGljIGlubGluZSBwbWRfdCAqIHBtZF9vZmZzZXQocHVkX3QgKiBwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4rI2RlZmluZSBwdWRfY2hlY2tfZHVtbXkocHVkKSBCVUlMRF9CVUdfT04oX19idWlsdGluX2NvbnN0YW50X3AocHVkX3ZhbChwdWQpKSlcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcG1kX3QgKl9fcG1kX29mZnNldChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxcbit7XFxuK1xcdHJldHVybiAocG1kX3QgKilwdWRwO1xcbit9XFxuK1xcbisjZGVmaW5lIHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcylcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3BtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbit9KVxcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwbWRfdCAqX19wbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZF90ICpwdWRwLCBwdWRfdCBwdWQsXFxuK1xcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4ge1xcbi1cXHRyZXR1cm4gKHBtZF90ICopcHVkO1xcbitcXHRyZXR1cm4gKHBtZF90ICopcHVkcDtcXG4gfVxcbi0jZGVmaW5lIHBtZF9vZmZzZXQgcG1kX29mZnNldFxcbitcXG4rI2RlZmluZSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgYWRkcmVzcylcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRfX3BtZF9vZmZzZXRfbG9ja2xlc3MocHVkcCwgcHVkLCBhZGRyZXNzKTtcXHRcXHRcXHRcXFxcXFxuK30pXFxuIFxcbiAjZGVmaW5lIHBtZF92YWwoeClcXHRcXHRcXHRcXHQocHVkX3ZhbCgoeCkucHVkKSlcXG4gI2RlZmluZSBfX3BtZCh4KVxcdFxcdFxcdFxcdCgocG1kX3QpIHsgX19wdWQoeCkgfSApXFxuIFxcbi0jZGVmaW5lIHB1ZF9wYWdlKHB1ZClcXHRcXHRcXHRcXHQocG1kX3BhZ2UoKHBtZF90KXsgcHVkIH0pKVxcbi0jZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZClcXHRcXHRcXHQoKHBtZF90ICopKHBtZF9wYWdlX3ZhZGRyKChwbWRfdCl7IHB1ZCB9KSkpXFxuKyNkZWZpbmUgcHVkX3BhZ2UocHVkKVxcdFxcdFxcdFxcdCh7IEJVSUxEX0JVRygpOyAoc3RydWN0IHBhZ2UgKilOVUxMOyB9KVxcbisjZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwdWRfY2hlY2tfZHVtbXkocHVkKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgocG1kX3QgKikocG1kX3BhZ2VfdmFkZHIoKHBtZF90KSB7IHB1ZCB9KSkpO1xcdFxcdFxcdFxcXFxcXG4rfSlcXG4gXFxuIC8qXFxuICAqIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwbWQgaXMgdHJpdmlhbDogdGhlIDEtZW50cnkgcG1kIGlzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmhcXG5pbmRleCAzNTZjYmZiYWFiMjQ3Ni4uNWVlOGYxODUyY2Q4YzkgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmhcXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaFxcbkBAIC0yOSwyNyArMjksNjIgQEAgc3RhdGljIGlubGluZSBpbnQgcDRkX25vbmUocDRkX3QgcDRkKVxcdFxcdHsgcmV0dXJuIDA7IH1cXG4gc3RhdGljIGlubGluZSBpbnQgcDRkX2JhZChwNGRfdCBwNGQpXFx0XFx0eyByZXR1cm4gMDsgfVxcbiBzdGF0aWMgaW5saW5lIGludCBwNGRfcHJlc2VudChwNGRfdCBwNGQpXFx0eyByZXR1cm4gMTsgfVxcbiBzdGF0aWMgaW5saW5lIHZvaWQgcDRkX2NsZWFyKHA0ZF90ICpwNGQpXFx0eyB9XFxuK3N0YXRpYyBpbmxpbmUgYm9vbCBwNGRfbGVhZihwNGRfdCBwNGQpXFx0XFx0eyByZXR1cm4gZmFsc2U7IH1cXG4rI2RlZmluZSBwNGRfbGVhZiBwNGRfbGVhZlxcbiAjZGVmaW5lIHB1ZF9FUlJPUihwdWQpXFx0XFx0XFx0XFx0KHA0ZF9FUlJPUigocHVkKS5wNGQpKVxcbiBcXG4gI2RlZmluZSBwNGRfcG9wdWxhdGUobW0sIHA0ZCwgcHVkKVxcdFxcdGRvIHsgfSB3aGlsZSAoMClcXG4gI2RlZmluZSBwNGRfcG9wdWxhdGVfc2FmZShtbSwgcDRkLCBwdWQpXFx0XFx0ZG8geyB9IHdoaWxlICgwKVxcbi0vKlxcbi0gKiAocHVkcyBhcmUgZm9sZGVkIGludG8gcDRkcyBzbyB0aGlzIGRvZXNuJ3QgZ2V0IGFjdHVhbGx5IGNhbGxlZCxcXG4tICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLilcXG4tICovXFxuLSNkZWZpbmUgc2V0X3A0ZChwNGRwdHIsIHA0ZHZhbClcXHRzZXRfcHVkKChwdWRfdCAqKShwNGRwdHIpLCAocHVkX3QpIHsgcDRkdmFsIH0pXFxuIFxcbi1zdGF0aWMgaW5saW5lIHB1ZF90ICpwdWRfb2Zmc2V0KHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4rI2RlZmluZSBzZXRfcDRkKHA0ZHB0ciwgcDRkdmFsKVxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rKHtcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdHA0ZF9jaGVja19kdW1teShwNGR2YWwpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0c2V0X3B1ZCgocHVkX3QgKikocDRkcHRyKSwgKHB1ZF90KSB7IHA0ZHZhbCB9KTtcXHRcXHRcXHRcXFxcXFxuK30pXFxuK1xcbitcXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCBwNGRwX2dldChwNGRfdCAqcDRkcClcXG4re1xcbitcXHRwNGRfdCBkdW1teSA9IHsgMCB9O1xcbitcXG4rXFx0cmV0dXJuIGR1bW15O1xcbit9XFxuKyNkZWZpbmUgcDRkcF9nZXQgcDRkcF9nZXRcXG4rXFxuKyNkZWZpbmUgcDRkX2NoZWNrX2R1bW15KHA0ZCkgQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHA0ZF92YWwocDRkKSkpXFxuK1xcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHB1ZF90ICpfX3B1ZF9vZmZzZXQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcXG4ge1xcbi1cXHRyZXR1cm4gKHB1ZF90ICopcDRkO1xcbitcXHRyZXR1cm4gKHB1ZF90ICopcDRkcDtcXG4gfVxcbi0jZGVmaW5lIHB1ZF9vZmZzZXQgcHVkX29mZnNldFxcbitcXG4rI2RlZmluZSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHJlc3MpXFx0XFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19wdWRfb2Zmc2V0KHA0ZHAsIGFkZHJlc3MpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rfSlcXG4rXFxuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcHVkX3QgKl9fcHVkX29mZnNldF9sb2NrbGVzcyhwNGRfdCAqcDRkcCwgcDRkX3QgcDRkLFxcbitcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXFxuK3tcXG4rXFx0cmV0dXJuIChwdWRfdCAqKXA0ZHA7XFxuK31cXG4rXFxuKyNkZWZpbmUgcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGFkZHJlc3MpXFx0XFx0XFx0XFx0XFxcXFxcbisoe1xcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1xcdFxcdFxcdFxcdFxcdFxcXFxcXG4rXFx0X19wdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZHAsIHA0ZCwgYWRkcmVzcyk7XFx0XFx0XFx0XFxcXFxcbit9KVxcbiBcXG4gI2RlZmluZSBwdWRfdmFsKHgpXFx0XFx0XFx0XFx0KHA0ZF92YWwoKHgpLnA0ZCkpXFxuICNkZWZpbmUgX19wdWQoeClcXHRcXHRcXHRcXHQoKHB1ZF90KSB7IF9fcDRkKHgpIH0pXFxuIFxcbi0jZGVmaW5lIHA0ZF9wYWdlKHA0ZClcXHRcXHRcXHRcXHQocHVkX3BhZ2UoKHB1ZF90KXsgcDRkIH0pKVxcbi0jZGVmaW5lIHA0ZF9wZ3RhYmxlKHA0ZClcXHRcXHRcXHQoKHB1ZF90ICopKHB1ZF9wZ3RhYmxlKChwdWRfdCl7IHA0ZCB9KSkpXFxuKyNkZWZpbmUgcDRkX3BhZ2UocDRkKVxcdFxcdFxcdFxcdCh7IEJVSUxEX0JVRygpOyAoc3RydWN0IHBhZ2UgKilOVUxMOyB9KVxcbisjZGVmaW5lIHA0ZF9wZ3RhYmxlKHA0ZClcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuKyh7XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFxcXFxcbitcXHRwNGRfY2hlY2tfZHVtbXkocDRkKTtcXHRcXHRcXHRcXHRcXHRcXHRcXFxcXFxuK1xcdCgocHVkX3QgKikocHVkX3BndGFibGUoKHB1ZF90KSB7IHA0ZCB9KSkpO1xcdFxcdFxcdFxcXFxcXG4rfSlcXG4gXFxuIC8qXFxuICAqIGFsbG9jYXRpbmcgYW5kIGZyZWVpbmcgYSBwdWQgaXMgdHJpdmlhbDogdGhlIDEtZW50cnkgcHVkIGlzXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRkdW1wLmggYi9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oXFxuaW5kZXggMjQwYmQzYmZmMThkZDIuLjI2ZmE2MjRlYWM0NGVmIDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvcHRkdW1wLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oXFxuQEAgLTI5LDYgKzI5LDcgQEAgYm9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZShzdHJ1Y3Qgc2VxX2ZpbGUgKm0sXFxuIFxcdFxcdFxcdFxcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxcbiBcXHRcXHRcXHRcXHRib29sIGNoZWNrd3gsIGJvb2wgZG1lc2cpO1xcbiB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpO1xcbitpbnQgcHRkdW1wX3B0X2xldmVsX2ZpcnN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKTtcXG4gYm9vbCBwdGR1bXBfY2hlY2tfd3godm9pZCk7XFxuIFxcbiBzdGF0aWMgaW5saW5lIHZvaWQgZGVidWdfY2hlY2t3eCh2b2lkKVxcbmRpZmYgLS1naXQgYS9tbS9wdGR1bXAuYyBiL21tL3B0ZHVtcC5jXFxuaW5kZXggNTg1MTA5NmU2ZjY1NmMuLjk2Njc2YzkwNDMwZjE4IDEwMDY0NFxcbi0tLSBhL21tL3B0ZHVtcC5jXFxuKysrIGIvbW0vcHRkdW1wLmNcXG5AQCAtMTk3LDYgKzE5NywxNyBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuIFxcdHN0LVxcdTAwM2Vub3RlX3BhZ2VfZmx1c2goc3QpO1xcbiB9XFxuIFxcbitpbnQgcHRkdW1wX3B0X2xldmVsX2ZpcnN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbit7XFxuK1xcdGlmIChtbV9wbWRfZm9sZGVkKG1tKSlcXG4rXFx0XFx0cmV0dXJuIDM7XFxuK1xcdGlmIChtbV9wdWRfZm9sZGVkKG1tKSlcXG4rXFx0XFx0cmV0dXJuIDI7XFxuK1xcdGlmIChtbV9wNGRfZm9sZGVkKG1tKSlcXG4rXFx0XFx0cmV0dXJuIDE7XFxuK1xcdHJldHVybiAwO1xcbit9XFxuK1xcbiBzdGF0aWMgaW50IGNoZWNrX3d4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxcbiB7XFxuIFxcdGlmIChwdGR1bXBfY2hlY2tfd3goKSlcXG5kaWZmIC0tZ2l0IGEvbW0vdm1zY2FuLmMgYi9tbS92bXNjYW4uY1xcbmluZGV4IDA2ZTEwM2Y5NzgxZTVkLi4wYzljNGFjODllMDk0YSAxMDA2NDRcXG4tLS0gYS9tbS92bXNjYW4uY1xcbisrKyBiL21tL3Ztc2Nhbi5jXFxuQEAgLTM3MjcsNyArMzcyNyw3IEBAIHN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxuIFxcdFxcdGlmICghcHVkX3ByZXNlbnQodmFsKSB8fCBXQVJOX09OX09OQ0UocHVkX2xlYWYodmFsKSkpXFxuIFxcdFxcdFxcdGNvbnRpbnVlO1xcbiBcXG4tXFx0XFx0d2Fsa19wbWRfcmFuZ2UoXFx1MDAyNnZhbCwgYWRkciwgbmV4dCwgYXJncyk7XFxuK1xcdFxcdHdhbGtfcG1kX3JhbmdlKHB1ZCArIGksIGFkZHIsIG5leHQsIGFyZ3MpO1xcbiBcXG4gXFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpIHx8IHdhbGstXFx1MDAzZWJhdGNoZWQgXFx1MDAzZT0gTUFYX0xSVV9CQVRDSCkge1xcbiBcXHRcXHRcXHRlbmQgPSAoYWRkciB8IH5QVURfTUFTSykgKyAxO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNToxMi40OTI1NDQyMjJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjoxMzI5OTY0MzU5NjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTFJVX0dFTlwiLFxuICAgIFwiS1ZNXCIsXG4gICAgXCJQVERVTVBfREVCVUdGU1wiLFxuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJ3YWxrX3B1ZF9yYW5nZVwiLFxuICAgIFwiZ2V0X2h2YV9tYXBwaW5nX3NpemVcIixcbiAgICBcImhvc3RfcGZuX21hcHBpbmdfbGV2ZWxcIixcbiAgICBcImNvbGxhcHNlX3B1ZF9wYWdlXCIsXG4gICAgXCJwb3B1bGF0ZV9wdWRcIixcbiAgICBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlXCIsXG4gICAgXCJwdWRwX3NldF9hY2Nlc3NfZmxhZ3NcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBwYWdlIHRhYmxlIGZvbGRpbmcgbWFjcm9zIGFuZCBmdW5jdGlvbnMgYWNyb3NzIG11bHRpcGxlIGFyY2hpdGVjdHVyZXMgKEFSTSwgQVJNNjQsIExvb25nQXJjaCwgTUlQUywgT3BlblJJU0MsIFJJU0MtViwgeDg2KSBhbmQgZ2VuZXJpYyBoZWFkZXJzLiBJdCBmaXhlcyBob3cgZm9sZGVkIHBhZ2UgdGFibGVzIGFyZSB3YWxrZWQgYW5kIGFjY2Vzc2VkLCB3aGljaCBpcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGxvZ2ljLiBUaGUgY2hhbmdlcyBhZmZlY3QgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxlcnMsIE1HTFJVIHBhZ2UgdGFibGUgd2Fsa2VycywgUEFUIG1lbW9yeSBzZXR0aW5nLCBhbmQgcGFnZSB0YWJsZSBkdW1waW5nLiBUaGVzZSBhcmUgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgc2hvdWxkIGJlIGZ1enplZCB0byBlbnN1cmUgbm8gcmVncmVzc2lvbnMgaW4gcGFnZSB0YWJsZSB0cmF2ZXJzYWwuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNjFjNDQ2OThhYTk4MzVkNzVlNTMwNmNlNDE1YzQwMzBkMDMzZWY1YVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUaHUgSnVsIDIzIDE3OjM1OjA5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGFnZS1ub21tdS5oXG5pbmRleCBlNzQ0MTVjOTU5YmVhYy4uODg2NTliMzhlMjM2NDkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wYWdlLW5vbW11LmhcbisrKyBiL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BhZ2Utbm9tbXUuaFxuQEAgLTE4LDEyICsxOCwxMiBAQFxuICAqL1xuIHR5cGVkZWYgdW5zaWduZWQgbG9uZyBwdGVfdDtcbiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcG1kX3Q7XG4tdHlwZWRlZiB1bnNpZ25lZCBsb25nIHBnZF90WzJdO1xuK3R5cGVkZWYgdW5zaWduZWQgbG9uZyBwZ2RfdDtcbiB0eXBlZGVmIHVuc2lnbmVkIGxvbmcgcGdwcm90X3Q7XG4gXG4gI2RlZmluZSBwdGVfdmFsKHgpICAgICAgKHgpXG4gI2RlZmluZSBwbWRfdmFsKHgpICAgICAgKHgpXG4tI2RlZmluZSBwZ2RfdmFsKHgpXHQoKHgpWzBdKVxuKyNkZWZpbmUgcGdkX3ZhbCh4KSAgICAgICh4KVxuICNkZWZpbmUgcGdwcm90X3ZhbCh4KSAgICh4KVxuIFxuICNkZWZpbmUgX19wdGUoeCkgICAgICAgICh4KVxuZGlmZiAtLWdpdCBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUtMmxldmVsLXR5cGVzLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oXG5pbmRleCA2NTBlNzkzZjQxNDI5Zi4uN2Y4NTM4NGFjMzg2Y2EgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oXG4rKysgYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC10eXBlcy5oXG5AQCAtMjUsNyArMjUsNyBAQCB0eXBlZGVmIHN0cnVjdCB7IHB0ZXZhbF90IHBncHJvdDsgfSBwZ3Byb3RfdDtcbiBcbiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoKHgpLnB0ZSlcbiAjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoKHgpLnBtZClcbi0jZGVmaW5lIHBnZF92YWwoeClcdCgoeCkucGdkWzBdKVxuKyNkZWZpbmUgcGdkX3ZhbCh4KSAgICAgICgoeCkucGdkWzBdKVxuICNkZWZpbmUgcGdwcm90X3ZhbCh4KSAgICgoeCkucGdwcm90KVxuIFxuICNkZWZpbmUgX19wdGUoeCkgICAgICAgICgocHRlX3QpIHsgKHgpIH0gKVxuQEAgLTM2LDE0ICszNiwzMiBAQCB0eXBlZGVmIHN0cnVjdCB7IHB0ZXZhbF90IHBncHJvdDsgfSBwZ3Byb3RfdDtcbiAvKlxuICAqIC4uIHdoaWxlIHRoZXNlIG1ha2UgaXQgZWFzaWVyIG9uIHRoZSBjb21waWxlclxuICAqL1xuK3R5cGVkZWYgdTY0IHBnZHZhbF90O1xuK1xuIHR5cGVkZWYgcHRldmFsX3QgcHRlX3Q7XG4gdHlwZWRlZiBwbWR2YWxfdCBwbWRfdDtcbi10eXBlZGVmIHBtZHZhbF90IHBnZF90WzJdO1xuK3R5cGVkZWYgcGdkdmFsX3QgcGdkX3Q7XG4gdHlwZWRlZiBwdGV2YWxfdCBwZ3Byb3RfdDtcbiBcbiAjZGVmaW5lIHB0ZV92YWwoeCkgICAgICAoeClcbiAjZGVmaW5lIHBtZF92YWwoeCkgICAgICAoeClcbi0jZGVmaW5lIHBnZF92YWwoeClcdCgoeClbMF0pXG4rXG4rc3RhdGljIGlubGluZSBwbWR2YWxfdCBwZ2RfdmFsKHBnZF90IHBnZClcbit7XG4rXHQvKlxuK1x0ICogVGhlIGxvd2VyIGFuZCBoaWdoZXIgcG1kdmFsX3QgdmFsdWVzIHBvaW50IHRvIHRoZSBzYW1lIHBhZ2UuXG4rXHQgKiB0aGUgb25seSBkaWZmZXJlbmNlIGlzIHRoZWlyIG9mZnNldCB3aXRoaW4gdGhhdCBwYWdlLlxuK1x0ICogVGhlcmVmb3JlLCB3aGljaGV2ZXIgdmFsdWUgaXMgcmV0dXJuZWQsIHRoZSBiZWhhdmlvciBvZiBwbWRfcGZuKCksXG4rXHQgKiBwbWRfcGFnZSgpLCBhbmQgb3RoZXIgdXNlcnMgb2YgcGdkX3ZhbCgpIHJlbWFpbnMgdW5jaGFuZ2VkLlxuK1x0ICpcbitcdCAqIEhvd2V2ZXIsIHBnZF92YWwoKSBoYXMgaGlzdG9yaWNhbGx5IHJldHVybmVkIHRoZSBsb3dlciBwbWR2YWxfdCwgc29cbitcdCAqIGtlZXAgcmV0dXJuaW5nIHRoZSBsb3dlciBvbmUuXG4rXHQgKlxuK1x0ICogU2VlIHRoZSBjb21tZW50cyBpbiBpbmNsdWRlL2FzbS9wZ3RhYmxlLTJsZXZlbC5cbitcdCAqL1xuK1x0cmV0dXJuICgqKHBtZHZhbF90ICgqKVsyXSlcdTAwMjZwZ2QpWzBdO1xuK31cbitcbiAjZGVmaW5lIHBncHJvdF92YWwoeCkgICAoeClcbiBcbiAjZGVmaW5lIF9fcHRlKHgpICAgICAgICAoeClcbmRpZmYgLS1naXQgYS9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL2FybS9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbmluZGV4IDk4Mjc5NWNmNDU2MzdlLi5lYWRkMDI3ZmUwZWU0MyAxMDA2NDRcbi0tLSBhL2FyY2gvYXJtL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9hcm0vaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtMTQxLDggKzE0MSw2IEBAIGV4dGVybiBwZ3Byb3RfdCBwaHlzX21lbV9hY2Nlc3NfcHJvdChzdHJ1Y3QgZmlsZSAqZmlsZSwgdW5zaWduZWQgbG9uZyBwZm4sXG4gXG4gZXh0ZXJuIHBnZF90IHN3YXBwZXJfcGdfZGlyW1BUUlNfUEVSX1BHRF07XG4gXG4tI2RlZmluZSBwZ2RwX2dldChwZ3BkKVx0XHRSRUFEX09OQ0UoKnBnZHApXG4tXG4gI2RlZmluZSBwdWRfcGFnZShwdWQpXHRcdHBtZF9wYWdlKF9fcG1kKHB1ZF92YWwocHVkKSkpXG4gI2RlZmluZSBwdWRfd3JpdGUocHVkKVx0XHRwbWRfd3JpdGUoX19wbWQocHVkX3ZhbChwdWQpKSlcbiBcbmRpZmYgLS1naXQgYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBhMjY4MWQ3NTUzNTg0MS4uYWFhZTNkMTQ4OTVmNjkgMTAwNjQ0XG4tLS0gYS9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0xNDAsMTAgKzE0MCwxNyBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpXG4gI2RlZmluZSBwdGVfbm9uZShwdGUpXHRcdCghcHRlX3ZhbChwdGUpKVxuICNkZWZpbmUgcHRlX3BhZ2UocHRlKVx0XHQocGZuX3RvX3BhZ2UocHRlX3BmbihwdGUpKSlcbiBcbisjZGVmaW5lIHB0ZV92YWxpZChwdGUpXHRcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9WQUxJRCkpXG4rI2RlZmluZSBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkgXFxcbitcdCgocHRlX3ZhbChwdGUpIFx1MDAyNiAoUFRFX1ZBTElEIHwgUFRFX1BSRVNFTlRfSU5WQUxJRCkpID09IFBURV9QUkVTRU5UX0lOVkFMSUQpXG4rXG4gLypcbiAgKiBUaGUgZm9sbG93aW5nIG9ubHkgd29yayBpZiBwdGVfcHJlc2VudCgpLiBVbmRlZmluZWQgYmVoYXZpb3VyIG90aGVyd2lzZS5cbiAgKi9cbi0jZGVmaW5lIHB0ZV9wcmVzZW50KHB0ZSlcdChwdGVfdmFsaWQocHRlKSB8fCBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkpXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSlcbit7XG4rXHRyZXR1cm4gcHRlX3ZhbGlkKHB0ZSkgfHwgcHRlX3ByZXNlbnRfaW52YWxpZChwdGUpO1xuK31cbiAjZGVmaW5lIHB0ZV95b3VuZyhwdGUpXHRcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9BRikpXG4gI2RlZmluZSBwdGVfc3BlY2lhbChwdGUpXHQoISEocHRlX3ZhbChwdGUpIFx1MDAyNiBQVEVfU1BFQ0lBTCkpXG4gI2RlZmluZSBwdGVfd3JpdGUocHRlKVx0XHQoISEocHRlX3ZhbChwdGUpIFx1MDAyNiBQVEVfV1JJVEUpKVxuQEAgLTE2OCw5ICsxNzUsNiBAQCBzdGF0aWMgaW5saW5lIHB0ZXZhbF90IF9fcGh5c190b19wdGVfdmFsKHBoeXNfYWRkcl90IHBoeXMpXG4gI2RlZmluZSBwdGVfc3dfZGlydHkocHRlKVx0KCEhKHB0ZV92YWwocHRlKSBcdTAwMjYgUFRFX0RJUlRZKSlcbiAjZGVmaW5lIHB0ZV9kaXJ0eShwdGUpXHRcdChwdGVfc3dfZGlydHkocHRlKSB8fCBwdGVfaHdfZGlydHkocHRlKSlcbiBcbi0jZGVmaW5lIHB0ZV92YWxpZChwdGUpXHRcdCghIShwdGVfdmFsKHB0ZSkgXHUwMDI2IFBURV9WQUxJRCkpXG4tI2RlZmluZSBwdGVfcHJlc2VudF9pbnZhbGlkKHB0ZSkgXFxcbi1cdCgocHRlX3ZhbChwdGUpIFx1MDAyNiAoUFRFX1ZBTElEIHwgUFRFX1BSRVNFTlRfSU5WQUxJRCkpID09IFBURV9QUkVTRU5UX0lOVkFMSUQpXG4gLypcbiAgKiBFeGVjdXRlLW9ubHkgdXNlciBtYXBwaW5ncyBkbyBub3QgaGF2ZSB0aGUgUFRFX1VTRVIgYml0IHNldC4gQWxsIHZhbGlkXG4gICoga2VybmVsIG1hcHBpbmdzIGhhdmUgdGhlIFBURV9VWE4gYml0IHNldC5cbkBAIC0xMTg4LDI5ICsxMTkyLDYgQEAgc3RhdGljIGlubGluZSBib29sIHBndGFibGVfbDVfZW5hYmxlZCh2b2lkKSB7IHJldHVybiBmYWxzZTsgfVxuICNkZWZpbmUgcDRkX2NsZWFyX2ZpeG1hcCgpXG4gXG4gI2RlZmluZSBwNGRfb2Zmc2V0X2tpbWcoZGlyLGFkZHIpXHQoKHA0ZF90ICopZGlyKVxuLVxuLXN0YXRpYyBpbmxpbmVcbi1wNGRfdCAqcDRkX29mZnNldF9sb2NrbGVzc19mb2xkZWQocGdkX3QgKnBnZHAsIHBnZF90IHBnZCwgdW5zaWduZWQgbG9uZyBhZGRyKVxuLXtcbi1cdC8qXG4tXHQgKiBXaXRoIHJ1bnRpbWUgZm9sZGluZyBvZiB0aGUgcHVkLCBwdWRfb2Zmc2V0X2xvY2tsZXNzKCkgcGFzc2VzXG4tXHQgKiB0aGUgJ3BnZF90IConIHdlIHJldHVybiBoZXJlIHRvIHA0ZF90b19mb2xkZWRfcHVkKCksIHdoaWNoXG4tXHQgKiB3aWxsIG9mZnNldCB0aGUgcG9pbnRlciBhc3N1bWluZyB0aGF0IGl0IHBvaW50cyBpbnRvXG4tXHQgKiBhIHBhZ2UtdGFibGUgcGFnZS4gSG93ZXZlciwgdGhlIGZhc3QgR1VQIHBhdGggcGFzc2VzIHVzIGFcbi1cdCAqIHBnZF90IGFsbG9jYXRlZCBvbiB0aGUgc3RhY2sgYW5kIHNvIHdlIG11c3QgdXNlIHRoZSBvcmlnaW5hbFxuLVx0ICogcG9pbnRlciBpbiAncGdkcCcgdG8gY29uc3RydWN0IHRoZSBwNGQgcG9pbnRlciBpbnN0ZWFkIG9mXG4tXHQgKiB1c2luZyB0aGUgZ2VuZXJpYyBwNGRfb2Zmc2V0X2xvY2tsZXNzKCkgaW1wbGVtZW50YXRpb24uXG4tXHQgKlxuLVx0ICogTm90ZTogcmV1c2luZyB0aGUgb3JpZ2luYWwgcG9pbnRlciBtZWFucyB0aGF0IHdlIG1heVxuLVx0ICogZGVyZWZlcmVuY2UgdGhlIHNhbWUgKGxpdmUpIHBhZ2UtdGFibGUgZW50cnkgbXVsdGlwbGUgdGltZXMuXG4tXHQgKiBUaGlzIGlzIHNhZmUgYmVjYXVzZSBpdCBpcyBzdGlsbCBvbmx5IGxvYWRlZCBvbmNlIGluIHRoZVxuLVx0ICogY29udGV4dCBvZiBlYWNoIGxldmVsIGFuZCB0aGUgQ1BVIGd1YXJhbnRlZXMgc2FtZS1hZGRyZXNzXG4tXHQgKiByZWFkLWFmdGVyLXJlYWQgb3JkZXJpbmcuXG4tXHQgKi9cbi1cdHJldHVybiBwNGRfb2Zmc2V0KHBnZHAsIGFkZHIpO1xuLX1cbi0jZGVmaW5lIHA0ZF9vZmZzZXRfbG9ja2xlc3MgcDRkX29mZnNldF9sb2NrbGVzc19mb2xkZWRcbi1cbiAjZW5kaWYgIC8qIENPTkZJR19QR1RBQkxFX0xFVkVMUyBcdTAwM2UgNCAqL1xuIFxuICNkZWZpbmUgcGdkX0VSUk9SKGUpXHRcXFxuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvbG9vbmdhcmNoL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuaW5kZXggMTk1MmUzNGJjOGVlMDAuLjQzNGU1YjQ4MzQ2NjRmIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL2xvb25nYXJjaC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC02MzYsNyArNjM2LDkgQEAgc3RhdGljIGlubGluZSBsb25nIHBtZF9wcm90bm9uZShwbWRfdCBwbWQpXG4gI2VuZGlmIC8qIENPTkZJR19BUkNIX0hBU19QVEVfUFJPVE5PTkUgKi9cbiBcbiAjZGVmaW5lIHBtZF9sZWFmKHBtZClcdFx0KChwbWRfdmFsKHBtZCkgXHUwMDI2IF9QQUdFX0hVR0UpICE9IDApXG4rI2lmbmRlZiBfX1BBR0VUQUJMRV9QTURfRk9MREVEXG4gI2RlZmluZSBwdWRfbGVhZihwdWQpXHRcdCgocHVkX3ZhbChwdWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuKyNlbmRpZlxuIFxuIC8qXG4gICogV2UgcHJvdmlkZSBvdXIgb3duIGdldF91bm1hcHBlZCBhcmVhIHRvIGNvcGUgd2l0aCB0aGUgdmlydHVhbCBhbGlhc2luZ1xuZGlmZiAtLWdpdCBhL2FyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYyBiL2FyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY1xuaW5kZXggZTEwNDg5N2FhNTMyODUuLjgzN2I0MGJiNjk0ZjRlIDEwMDY0NFxuLS0tIGEvYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jXG4rKysgYi9hcmNoL2xvb25nYXJjaC9rdm0vbW11LmNcbkBAIC02NjksMTAgKzY2OSwxMCBAQCBzdGF0aWMgaW50IGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4gXHRpbnQgbGV2ZWwgPSAwO1xuIFx0dW5zaWduZWQgbG9uZyBodmE7XG4gXHR1bnNpZ25lZCBsb25nIGZsYWdzO1xuLVx0cGdkX3QgcGdkO1xuLVx0cDRkX3QgcDRkO1xuLVx0cHVkX3QgcHVkO1xuLVx0cG1kX3QgcG1kO1xuK1x0cGdkX3QgKnBnZHAsIHBnZDtcbitcdHA0ZF90ICpwNGRwLCBwNGQ7XG4rXHRwdWRfdCAqcHVkcCwgcHVkO1xuK1x0cG1kX3QgKnBtZHAsIHBtZDtcbiBcbiBcdC8qXG4gXHQgKiBOb3RlLCB1c2luZyB0aGUgYWxyZWFkeS1yZXRyaWV2ZWQgbWVtc2xvdCBhbmQgX19nZm5fdG9faHZhX21lbXNsb3QoKVxuQEAgLTY5OCwxOSArNjk4LDIzIEBAIHN0YXRpYyBpbnQgaG9zdF9wZm5fbWFwcGluZ19sZXZlbChzdHJ1Y3Qga3ZtICprdm0sIGdmbl90IGdmbixcbiBcdCAqIHZhbHVlKSBhbmQgdGhlbiBwKmRfb2Zmc2V0KCkgd2Fsa3MgaW50byB0aGUgdGFyZ2V0IGh1Z2UgcGFnZSBpbnN0ZWFkXG4gXHQgKiBvZiB0aGUgb2xkIHBhZ2UgdGFibGUgKHNlZXMgdGhlIG5ldyB2YWx1ZSkuXG4gXHQgKi9cbi1cdHBnZCA9IHBnZHBfZ2V0KHBnZF9vZmZzZXQoa3ZtLVx1MDAzZW1tLCBodmEpKTtcbitcdHBnZHAgPSBwZ2Rfb2Zmc2V0KGt2bS1cdTAwM2VtbSwgaHZhKTtcbitcdHBnZCA9IHBnZHBfZ2V0KHBnZHApO1xuIFx0aWYgKHBnZF9ub25lKHBnZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cDRkID0gcDRkcF9nZXQocDRkX29mZnNldChcdTAwMjZwZ2QsIGh2YSkpO1xuK1x0cDRkcCA9IHA0ZF9vZmZzZXRfbG9ja2xlc3MocGdkcCwgcGdkLCBodmEpO1xuK1x0cDRkID0gcDRkcF9nZXQocDRkcCk7XG4gXHRpZiAocDRkX25vbmUocDRkKSB8fCAhcDRkX3ByZXNlbnQocDRkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG4tXHRwdWQgPSBwdWRwX2dldChwdWRfb2Zmc2V0KFx1MDAyNnA0ZCwgaHZhKSk7XG4rXHRwdWRwID0gcHVkX29mZnNldF9sb2NrbGVzcyhwNGRwLCBwNGQsIGh2YSk7XG4rXHRwdWQgPSBwdWRwX2dldChwdWRwKTtcbiBcdGlmIChwdWRfbm9uZShwdWQpIHx8ICFwdWRfcHJlc2VudChwdWQpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHBtZCA9IHBtZHBfZ2V0KHBtZF9vZmZzZXQoXHUwMDI2cHVkLCBodmEpKTtcbitcdHBtZHAgPSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgaHZhKTtcbitcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xuIFx0aWYgKHBtZF9ub25lKHBtZCkgfHwgIXBtZF9wcmVzZW50KHBtZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvbWlwcy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCBmYTdiOTM1Zjk0N2NhMC4uMTUxZjRkMTViZDEyYmYgMTAwNjQ0XG4tLS0gYS9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG4rKysgYi9hcmNoL21pcHMvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5AQCAtNzQ1LDggKzc0NSwxMCBAQCBzdGF0aWMgaW5saW5lIHBtZF90IHBtZHBfaHVnZV9nZXRfYW5kX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLFxuIFxuICNpZmRlZiBfUEFHRV9IVUdFXG4gI2RlZmluZSBwbWRfbGVhZihwbWQpXHQoKHBtZF92YWwocG1kKSBcdTAwMjYgX1BBR0VfSFVHRSkgIT0gMClcbisjaWZuZGVmIF9fUEFHRVRBQkxFX1BNRF9GT0xERURcbiAjZGVmaW5lIHB1ZF9sZWFmKHB1ZClcdCgocHVkX3ZhbChwdWQpIFx1MDAyNiBfUEFHRV9IVUdFKSAhPSAwKVxuICNlbmRpZlxuKyNlbmRpZlxuIFxuICNkZWZpbmUgZ3VwX2Zhc3RfcGVybWl0dGVkKHN0YXJ0LCBlbmQpXHQoIWNwdV9oYXNfZGNfYWxpYXNlcylcbiBcbmRpZmYgLS1naXQgYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vcGd0YWJsZS5oXG5pbmRleCA2Yjg5OTk2ZDBiNjI4ZS4uNWE0OTFjZDBmMDA4NjggMTAwNjQ0XG4tLS0gYS9hcmNoL29wZW5yaXNjL2luY2x1ZGUvYXNtL3BndGFibGUuaFxuKysrIGIvYXJjaC9vcGVucmlzYy9pbmNsdWRlL2FzbS9wZ3RhYmxlLmhcbkBAIC0zMzEsOSArMzMxLDYgQEAgc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBtZF9wYWdlX3ZhZGRyKHBtZF90IHBtZClcbiBcdHJldHVybiAoKHVuc2lnbmVkIGxvbmcpIF9fdmEocG1kX3ZhbChwbWQpIFx1MDAyNiBQQUdFX01BU0spKTtcbiB9XG4gXG4tI2RlZmluZSBfX3BtZF9vZmZzZXQoYWRkcmVzcykgXFxcbi1cdCgoKGFkZHJlc3MpIFx1MDAzZVx1MDAzZSBQTURfU0hJRlQpIFx1MDAyNiAoUFRSU19QRVJfUE1ELTEpKVxuLVxuICNkZWZpbmUgUEZOX1BURV9TSElGVFx0XHRQQUdFX1NISUZUXG4gI2RlZmluZSBwdGVfcGZuKHgpXHRcdCgodW5zaWduZWQgbG9uZykoKCh4KS5wdGUpKSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVClcbiAjZGVmaW5lIHBmbl9wdGUocGZuLCBwcm90KSAgX19wdGUoKCgocGZuKSBcdTAwM2NcdTAwM2MgUEFHRV9TSElGVCkpIHwgcGdwcm90X3ZhbChwcm90KSlcbmRpZmYgLS1naXQgYS9hcmNoL3Jpc2N2L2t2bS9tbXUuYyBiL2FyY2gvcmlzY3Yva3ZtL21tdS5jXG5pbmRleCAwODJmOWIyNjE3MzM4Ny4uNmQ2MDQyYjgxZDc5MDkgMTAwNjQ0XG4tLS0gYS9hcmNoL3Jpc2N2L2t2bS9tbXUuY1xuKysrIGIvYXJjaC9yaXNjdi9rdm0vbW11LmNcbkBAIC0zNjIsMTAgKzM2MiwxMCBAQCBzdGF0aWMgaW50IGdldF9odmFfbWFwcGluZ19zaXplKHN0cnVjdCBrdm0gKmt2bSxcbiB7XG4gXHRpbnQgc2l6ZSA9IFBBR0VfU0laRTtcbiBcdHVuc2lnbmVkIGxvbmcgZmxhZ3M7XG4tXHRwZ2RfdCBwZ2Q7XG4tXHRwNGRfdCBwNGQ7XG4tXHRwdWRfdCBwdWQ7XG4tXHRwbWRfdCBwbWQ7XG4rXHRwZ2RfdCAqcGdkcCwgcGdkO1xuK1x0cDRkX3QgKnA0ZHAsIHA0ZDtcbitcdHB1ZF90ICpwdWRwLCBwdWQ7XG4rXHRwbWRfdCAqcG1kcCwgcG1kO1xuIFxuIFx0LypcbiBcdCAqIERpc2FibGUgSVJRcyB0byBwcmV2ZW50IGNvbmN1cnJlbnQgdGVhciBkb3duIG9mIGhvc3QgcGFnZSB0YWJsZXMsXG5AQCAtMzgxLDE1ICszODEsMTggQEAgc3RhdGljIGludCBnZXRfaHZhX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXG4gXHQgKiB2YWx1ZSkgYW5kIHRoZW4gcCpkX29mZnNldCgpIHdhbGtzIGludG8gdGhlIHRhcmdldCBodWdlIHBhZ2UgaW5zdGVhZFxuIFx0ICogb2YgdGhlIG9sZCBwYWdlIHRhYmxlIChzZWVzIHRoZSBuZXcgdmFsdWUpLlxuIFx0ICovXG4tXHRwZ2QgPSBwZ2RwX2dldChwZ2Rfb2Zmc2V0KGt2bS1cdTAwM2VtbSwgaHZhKSk7XG4rXHRwZ2RwID0gcGdkX29mZnNldChrdm0tXHUwMDNlbW0sIGh2YSk7XG4rXHRwZ2QgPSBwZ2RwX2dldChwZ2RwKTtcbiBcdGlmIChwZ2Rfbm9uZShwZ2QpKVxuIFx0XHRnb3RvIG91dDtcbiBcbi1cdHA0ZCA9IHA0ZHBfZ2V0KHA0ZF9vZmZzZXQoXHUwMDI2cGdkLCBodmEpKTtcbitcdHA0ZHAgPSBwNGRfb2Zmc2V0X2xvY2tsZXNzKHBnZHAsIHBnZCwgaHZhKTtcbitcdHA0ZCA9IHA0ZHBfZ2V0KHA0ZHApO1xuIFx0aWYgKHA0ZF9ub25lKHA0ZCkgfHwgIXA0ZF9wcmVzZW50KHA0ZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuLVx0cHVkID0gcHVkcF9nZXQocHVkX29mZnNldChcdTAwMjZwNGQsIGh2YSkpO1xuK1x0cHVkcCA9IHB1ZF9vZmZzZXRfbG9ja2xlc3MocDRkcCwgcDRkLCBodmEpO1xuK1x0cHVkID0gcHVkcF9nZXQocHVkcCk7XG4gXHRpZiAocHVkX25vbmUocHVkKSB8fCAhcHVkX3ByZXNlbnQocHVkKSlcbiBcdFx0Z290byBvdXQ7XG4gXG5AQCAtMzk4LDcgKzQwMSw4IEBAIHN0YXRpYyBpbnQgZ2V0X2h2YV9tYXBwaW5nX3NpemUoc3RydWN0IGt2bSAqa3ZtLFxuIFx0XHRnb3RvIG91dDtcbiBcdH1cbiBcbi1cdHBtZCA9IHBtZHBfZ2V0KHBtZF9vZmZzZXQoXHUwMDI2cHVkLCBodmEpKTtcbitcdHBtZHAgPSBwbWRfb2Zmc2V0X2xvY2tsZXNzKHB1ZHAsIHB1ZCwgaHZhKTtcbitcdHBtZCA9IHBtZHBfZ2V0KHBtZHApO1xuIFx0aWYgKHBtZF9ub25lKHBtZCkgfHwgIXBtZF9wcmVzZW50KHBtZCkpXG4gXHRcdGdvdG8gb3V0O1xuIFxuZGlmZiAtLWdpdCBhL2FyY2gvcmlzY3YvbW0vZmF1bHQuYyBiL2FyY2gvcmlzY3YvbW0vZmF1bHQuY1xuaW5kZXggMDRlZDZmOGFjYWU0ZmQuLmIyYmNhZjEwZDEzZjFkIDEwMDY0NFxuLS0tIGEvYXJjaC9yaXNjdi9tbS9mYXVsdC5jXG4rKysgYi9hcmNoL3Jpc2N2L21tL2ZhdWx0LmNcbkBAIC0xNjcsMTQgKzE2NywxNiBAQCBiYWRfYXJlYShzdHJ1Y3QgcHRfcmVncyAqcmVncywgc3RydWN0IG1tX3N0cnVjdCAqbW0sIGludCBjb2RlLFxuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhZGRyKVxuIHtcbi1cdHBnZF90ICpwZ2QsICpwZ2Rfaztcbi1cdHB1ZF90ICpwdWRfaztcbi1cdHA0ZF90ICpwNGRfaztcbi1cdHBtZF90ICpwbWRfaztcbi1cdHB0ZV90ICpwdGVfaztcbitcdHBnZF90ICpwZ2RwX2ssICpwZ2RwLCBwZ2RfaztcbitcdHA0ZF90ICpwNGRwX2ssICpwNGRwO1xuK1x0cHVkX3QgKnB1ZHBfaywgKnB1ZHAsIHB1ZF9rO1xuK1x0cG1kX3QgKnBtZHBfaywgKnBtZHAsIHBtZF9rO1xuK1x0cHRlX3QgKnB0ZXBfaztcbiBcdGludCBpbmRleDtcbiBcdHVuc2lnbmVkIGxvbmcgcGZuO1xuIFxuK1x0QlVJTERfQlVHX09OKENPTkZJR19QR1RBQkxFX0xFVkVMUyAhPSA1IFx1MDAyNlx1MDAyNiBDT05GSUdfUEdUQUJMRV9MRVZFTFMgIT0gMik7XG4rXG4gXHQvKiBVc2VyIG1vZGUgYWNjZXNzZXMganVzdCBjYXVzZSBhIFNJR1NFR1YgKi9cbiBcdGlmICh1c2VyX21vZGUocmVncykpXG4gXHRcdHJldHVybiBkb190cmFwKHJlZ3MsIFNJR1NFR1YsIGNvZGUsIGFkZHIpO1xuQEAgLTE4OSwzOSArMTkxLDUxIEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhXG4gXHQgKi9cbiBcdGluZGV4ID0gcGdkX2luZGV4KGFkZHIpO1xuIFx0cGZuID0gY3NyX3JlYWQoQ1NSX1NBVFApIFx1MDAyNiBTQVRQX1BQTjtcbi1cdHBnZCA9IChwZ2RfdCAqKXBmbl90b192aXJ0KHBmbikgKyBpbmRleDtcbi1cdHBnZF9rID0gaW5pdF9tbS5wZ2QgKyBpbmRleDtcbiBcbi1cdGlmICghcGdkX3ByZXNlbnQocGdkcF9nZXQocGdkX2spKSkge1xuK1x0cGdkcCA9IChwZ2RfdCAqKXBmbl90b192aXJ0KHBmbikgKyBpbmRleDtcbitcdHBnZHBfayA9IGluaXRfbW0ucGdkICsgaW5kZXg7XG4rXG4rXHRwZ2RfayA9IHBnZHBfZ2V0KHBnZHBfayk7XG4rXHRpZiAoIXBnZF9wcmVzZW50KHBnZF9rKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRzZXRfcGdkKHBnZCwgcGdkcF9nZXQocGdkX2spKTtcbitcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gNSlcbitcdFx0c2V0X3BnZChwZ2RwLCBwZ2Rfayk7XG4gXG4tXHRwNGRfayA9IHA0ZF9vZmZzZXQocGdkX2ssIGFkZHIpO1xuLVx0aWYgKCFwNGRfcHJlc2VudChwNGRwX2dldChwNGRfaykpKSB7XG4rXHRwNGRwID0gcDRkX29mZnNldChwZ2RwLCBhZGRyKTtcbitcdHA0ZHBfayA9IHA0ZF9vZmZzZXQocGdkcF9rLCBhZGRyKTtcbitcdGlmICghcDRkX3ByZXNlbnQocDRkcF9nZXQocDRkcF9rKSkpIHtcbiBcdFx0bm9fY29udGV4dChyZWdzLCBhZGRyKTtcbiBcdFx0cmV0dXJuO1xuIFx0fVxuIFxuLVx0cHVkX2sgPSBwdWRfb2Zmc2V0KHA0ZF9rLCBhZGRyKTtcbi1cdGlmICghcHVkX3ByZXNlbnQocHVkcF9nZXQocHVkX2spKSkge1xuK1x0cHVkcCA9IHB1ZF9vZmZzZXQocDRkcCwgYWRkcik7XG4rXHRwdWRwX2sgPSBwdWRfb2Zmc2V0KHA0ZHBfaywgYWRkcik7XG4rXG4rXHRwdWRfayA9IHB1ZHBfZ2V0KHB1ZHBfayk7XG4rXHRpZiAoIXB1ZF9wcmVzZW50KHB1ZF9rKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRpZiAocHVkX2xlYWYocHVkcF9nZXQocHVkX2spKSlcbitcdGlmIChwdWRfbGVhZihwdWRfaykpXG4gXHRcdGdvdG8gZmx1c2hfdGxiO1xuIFxuIFx0LypcbiBcdCAqIFNpbmNlIHRoZSB2bWFsbG9jIGFyZWEgaXMgZ2xvYmFsLCBpdCBpcyB1bm5lY2Vzc2FyeVxuIFx0ICogdG8gY29weSBpbmRpdmlkdWFsIFBURXNcbiBcdCAqL1xuLVx0cG1kX2sgPSBwbWRfb2Zmc2V0KHB1ZF9rLCBhZGRyKTtcbi1cdGlmICghcG1kX3ByZXNlbnQocG1kcF9nZXQocG1kX2spKSkge1xuK1x0cG1kcCA9IHBtZF9vZmZzZXQocHVkcCwgYWRkcik7XG4rXHRwbWRwX2sgPSBwbWRfb2Zmc2V0KHB1ZHBfaywgYWRkcik7XG4rXG4rXHRwbWRfayA9IHBtZHBfZ2V0KHBtZHBfayk7XG4rXHRpZiAoIXBtZF9wcmVzZW50KHBtZF9rKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG4tXHRpZiAocG1kX2xlYWYocG1kcF9nZXQocG1kX2spKSlcbitcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMilcbitcdFx0c2V0X3BtZChwbWRwLCBwbWRfayk7XG4rXHRpZiAocG1kX2xlYWYocG1kX2spKVxuIFx0XHRnb3RvIGZsdXNoX3RsYjtcbiBcbiBcdC8qXG5AQCAtMjMwLDggKzI0NCw4IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCB2bWFsbG9jX2ZhdWx0KHN0cnVjdCBwdF9yZWdzICpyZWdzLCBpbnQgY29kZSwgdW5zaWduZWQgbG9uZyBhXG4gXHQgKiBhZGRyZXNzZXMuIElmIHdlIGRvbid0IGRvIHRoaXMsIHRoaXMgd2lsbCBqdXN0XG4gXHQgKiBzaWxlbnRseSBsb29wIGZvcmV2ZXIuXG4gXHQgKi9cbi1cdHB0ZV9rID0gcHRlX29mZnNldF9rZXJuZWwocG1kX2ssIGFkZHIpO1xuLVx0aWYgKCFwdGVfcHJlc2VudChwdGVwX2dldChwdGVfaykpKSB7XG4rXHRwdGVwX2sgPSBwdGVfb2Zmc2V0X2tlcm5lbChwbWRwX2ssIGFkZHIpO1xuK1x0aWYgKCFwdGVfcHJlc2VudChwdGVwX2dldChwdGVwX2spKSkge1xuIFx0XHRub19jb250ZXh0KHJlZ3MsIGFkZHIpO1xuIFx0XHRyZXR1cm47XG4gXHR9XG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMgYi9hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuY1xuaW5kZXggMmFmYTdhMjMzNDBlOTIuLjRlNTQ1OTg4OTUzYTBiIDEwMDY0NFxuLS0tIGEvYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNcbisrKyBiL2FyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXG5AQCAtMjcsNiArMjcsNyBAQFxuICAqL1xuIHN0cnVjdCBwZ19zdGF0ZSB7XG4gXHRzdHJ1Y3QgcHRkdW1wX3N0YXRlIHB0ZHVtcDtcbitcdGludCBmaXJzdF9sZXZlbDtcbiBcdGludCBsZXZlbDtcbiBcdHBncHJvdHZhbF90IGN1cnJlbnRfcHJvdDtcbiBcdHBncHJvdHZhbF90IGVmZmVjdGl2ZV9wcm90O1xuQEAgLTI1NCw3ICsyNTUsNyBAQCBzdGF0aWMgdm9pZCBlZmZlY3RpdmVfcHJvdChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpwdF9zdCwgaW50IGxldmVsLCB1NjQgdmFsKVxuIFx0cGdwcm90dmFsX3QgcHJvdCA9IHZhbCBcdTAwMjYgUFRFX0ZMQUdTX01BU0s7XG4gXHRwZ3Byb3R2YWxfdCBlZmZlY3RpdmU7XG4gXG4tXHRpZiAobGV2ZWwgXHUwMDNlIDApIHtcbitcdGlmIChsZXZlbCBcdTAwM2Ugc3QtXHUwMDNlZmlyc3RfbGV2ZWwpIHtcbiBcdFx0cGdwcm90dmFsX3QgaGlnaGVyX3Byb3QgPSBzdC1cdTAwM2Vwcm90X2xldmVsc1tsZXZlbCAtIDFdO1xuIFxuIFx0XHRlZmZlY3RpdmUgPSAoaGlnaGVyX3Byb3QgXHUwMDI2IHByb3QgXHUwMDI2IChfUEFHRV9VU0VSIHwgX1BBR0VfUlcpKSB8XG5AQCAtNDU1LDYgKzQ1Niw4IEBAIGJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxuIFx0XHQuc2VxXHRcdD0gbVxuIFx0fTtcbiBcbitcdHN0LmZpcnN0X2xldmVsID0gcHRkdW1wX3B0X2xldmVsX2ZpcnN0KG1tKTtcbitcbiBcdHB0ZHVtcF93YWxrX3BnZChcdTAwMjZzdC5wdGR1bXAsIG1tLCBwZ2QpO1xuIFxuIFx0aWYgKCFjaGVja3d4KVxuZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5pbmRleCAwNzg2ODlhYTcyMDZmOC4uOTFiMzNhMjY1YTQzMWYgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG4rKysgYi9hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jXG5AQCAtMTM0Niw3ICsxMzQ2LDcgQEAgc3RhdGljIGludCBjb2xsYXBzZV9wdWRfcGFnZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4gXHRwbWRfdCAqcG1kLCBmaXJzdDtcbiBcdGludCBpO1xuIFxuLVx0aWYgKCFkaXJlY3RfZ2JwYWdlcylcbitcdGlmIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgPT0gMiB8fCAhZGlyZWN0X2dicGFnZXMpXG4gXHRcdHJldHVybiAwO1xuIFxuIFx0YWRkciBcdTAwMjY9IFBVRF9NQVNLO1xuQEAgLTE3MzAsNyArMTczMCw4IEBAIHN0YXRpYyBpbnQgcG9wdWxhdGVfcHVkKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCBwNGRfdCAqcDRkLFxuIFx0LypcbiBcdCAqIE1hcCBldmVyeXRoaW5nIHN0YXJ0aW5nIGZyb20gdGhlIEdiIGJvdW5kYXJ5LCBwb3NzaWJseSB3aXRoIDFHIHBhZ2VzXG4gXHQgKi9cbi1cdHdoaWxlIChib290X2NwdV9oYXMoWDg2X0ZFQVRVUkVfR0JQQUdFUykgXHUwMDI2XHUwMDI2IGVuZCAtIHN0YXJ0IFx1MDAzZT0gUFVEX1NJWkUpIHtcbitcdHdoaWxlIChDT05GSUdfUEdUQUJMRV9MRVZFTFMgXHUwMDNlIDMgXHUwMDI2XHUwMDI2IGJvb3RfY3B1X2hhcyhYODZfRkVBVFVSRV9HQlBBR0VTKSBcdTAwMjZcdTAwMjZcbitcdCAgICAgICBlbmQgLSBzdGFydCBcdTAwM2U9IFBVRF9TSVpFKSB7XG4gXHRcdHNldF9wdWQocHVkLCBwdWRfbWtodWdlKHBmbl9wdWQoY3BhLVx1MDAzZXBmbixcbiBcdFx0XHRcdCAgIGNhbm9uX3BncHJvdChwdWRfcGdwcm90KSkpKTtcbiBcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMgYi9hcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcbmluZGV4IGYzMmZhY2RiMzAzNTQzLi5lZGFkODQ3YTJlY2RiOCAxMDA2NDRcbi0tLSBhL2FyY2gveDg2L21tL3BndGFibGUuY1xuKysrIGIvYXJjaC94ODYvbW0vcGd0YWJsZS5jXG5AQCAtNDExLDYgKzQxMSw3IEBAIGludCBwbWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4gXHRyZXR1cm4gY2hhbmdlZDtcbiB9XG4gXG4rI2lmZGVmIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEXG4gaW50IHB1ZHBfc2V0X2FjY2Vzc19mbGFncyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwgdW5zaWduZWQgbG9uZyBhZGRyZXNzLFxuIFx0XHRcdCAgcHVkX3QgKnB1ZHAsIHB1ZF90IGVudHJ5LCBpbnQgZGlydHkpXG4ge1xuQEAgLTQzMCw2ICs0MzEsNyBAQCBpbnQgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MsXG4gXG4gXHRyZXR1cm4gY2hhbmdlZDtcbiB9XG4rI2VuZGlmIC8qIENPTkZJR19IQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEICovXG4gI2VuZGlmXG4gXG4gYm9vbCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcDRkLmhcbmluZGV4IDg5YzIxZjg0Y2ZmYmUyLi4xOWY1YTZlZGE3NmNjMSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3A0ZC5oXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wNGQuaFxuQEAgLTIyLDI2ICsyMiw2MSBAQCBzdGF0aWMgaW5saW5lIGludCBwZ2Rfbm9uZShwZ2RfdCBwZ2QpXHRcdHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwZ2RfYmFkKHBnZF90IHBnZClcdFx0eyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHBnZF9wcmVzZW50KHBnZF90IHBnZClcdHsgcmV0dXJuIDE7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcGdkX2NsZWFyKHBnZF90ICpwZ2QpXHR7IH1cbitzdGF0aWMgaW5saW5lIGJvb2wgcGdkX2xlYWYocGdkX3QgcGdkKVx0XHR7IHJldHVybiBmYWxzZTsgfVxuKyNkZWZpbmUgcGdkX2xlYWYgcGdkX2xlYWZcbiAjZGVmaW5lIHA0ZF9FUlJPUihwNGQpXHRcdFx0XHQocGdkX0VSUk9SKChwNGQpLnBnZCkpXG4gXG4gI2RlZmluZSBwZ2RfcG9wdWxhdGUobW0sIHBnZCwgcDRkKVx0XHRkbyB7IH0gd2hpbGUgKDApXG4gI2RlZmluZSBwZ2RfcG9wdWxhdGVfc2FmZShtbSwgcGdkLCBwNGQpXHRcdGRvIHsgfSB3aGlsZSAoMClcbi0vKlxuLSAqIChwNGRzIGFyZSBmb2xkZWQgaW50byBwZ2RzIHNvIHRoaXMgZG9lc24ndCBnZXQgYWN0dWFsbHkgY2FsbGVkLFxuLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pXG4tICovXG4tI2RlZmluZSBzZXRfcGdkKHBnZHB0ciwgcGdkdmFsKVx0c2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KVxuIFxuLXN0YXRpYyBpbmxpbmUgcDRkX3QgKnA0ZF9vZmZzZXQocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuKyNkZWZpbmUgc2V0X3BnZChwZ2RwdHIsIHBnZHZhbClcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHBnZF9jaGVja19kdW1teShwZ2R2YWwpO1x0XHRcdFx0XHRcXFxuK1x0c2V0X3A0ZCgocDRkX3QgKikocGdkcHRyKSwgKHA0ZF90KSB7IHBnZHZhbCB9KTtcdFx0XHRcXFxuK30pXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwZ2RfdCBwZ2RwX2dldChwZ2RfdCAqcDRkcClcbiB7XG4tXHRyZXR1cm4gKHA0ZF90ICopcGdkO1xuK1x0cGdkX3QgZHVtbXkgPSB7IDAgfTtcbitcbitcdHJldHVybiBkdW1teTtcbiB9XG4rI2RlZmluZSBwZ2RwX2dldCBwZ2RwX2dldFxuK1xuKyNkZWZpbmUgcGdkX2NoZWNrX2R1bW15KHBnZCkgQlVJTERfQlVHX09OKF9fYnVpbHRpbl9jb25zdGFudF9wKHBnZF92YWwocGdkKSkpXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCAqX19wNGRfb2Zmc2V0KHBnZF90ICpwZ2RwLCB1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4re1xuK1x0cmV0dXJuIChwNGRfdCAqKXBnZHA7XG4rfVxuK1xuKyNkZWZpbmUgcDRkX29mZnNldChwZ2RwLCBhZGRyZXNzKVx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHBnZF9jaGVja19kdW1teSgqKHBnZHApKTtcdFx0XHRcdFx0XFxcbitcdF9fcDRkX29mZnNldChwZ2RwLCBhZGRyZXNzKTtcdFx0XHRcdFx0XFxcbit9KVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcDRkX3QgKl9fcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RfdCAqcGdkcCwgcGdkX3QgcGdkLFxuK1x0XHR1bnNpZ25lZCBsb25nIGFkZHJlc3MpXG4re1xuK1x0cmV0dXJuIChwNGRfdCAqKXBnZHA7XG4rfVxuK1xuKyNkZWZpbmUgcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGFkZHJlc3MpXHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHBnZF9jaGVja19kdW1teSgqKHBnZHApKTtcdFx0XHRcdFx0XFxcbitcdF9fcDRkX29mZnNldF9sb2NrbGVzcyhwZ2RwLCBwZ2QsIGFkZHJlc3MpO1x0XHRcdFxcXG4rfSlcbiBcbiAjZGVmaW5lIHA0ZF92YWwoeClcdFx0XHRcdChwZ2RfdmFsKCh4KS5wZ2QpKVxuICNkZWZpbmUgX19wNGQoeClcdFx0XHRcdCgocDRkX3QpIHsgX19wZ2QoeCkgfSlcbiBcbi0jZGVmaW5lIHBnZF9wYWdlKHBnZClcdFx0XHRcdChwNGRfcGFnZSgocDRkX3QpeyBwZ2QgfSkpXG4tI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpXHRcdFx0KCh1bnNpZ25lZCBsb25nKShwNGRfcGd0YWJsZSgocDRkX3QpeyBwZ2QgfSkpKVxuKyNkZWZpbmUgcGdkX3BhZ2UocGdkKVx0XHRcdFx0KHsgQlVJTERfQlVHKCk7IChzdHJ1Y3QgcGFnZSAqKU5VTEw7IH0pXG4rI2RlZmluZSBwZ2RfcGFnZV92YWRkcihwZ2QpXHRcdFx0XHRcdFx0XFxcbisoeyBcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cGdkX2NoZWNrX2R1bW15KHBnZCk7XHRcdFx0XHRcdFx0XFxcbitcdCh1bnNpZ25lZCBsb25nKXA0ZF9wZ3RhYmxlKChwNGRfdCkgeyBwZ2QgfSk7XHRcdFx0XFxcbit9KVxuIFxuIC8qXG4gICogYWxsb2NhdGluZyBhbmQgZnJlZWluZyBhIHA0ZCBpcyB0cml2aWFsOiB0aGUgMS1lbnRyeSBwNGQgaXNcbmRpZmYgLS1naXQgYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaCBiL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3BtZC5oXG5pbmRleCAzNmI2NDkwZWQxODA4MS4uNjE4NTJlYjRiMTUwNGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wbWQuaFxuKysrIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcG1kLmhcbkBAIC0zMSwyOSArMzEsNjEgQEAgc3RhdGljIGlubGluZSBpbnQgcHVkX25vbmUocHVkX3QgcHVkKVx0XHR7IHJldHVybiAwOyB9XG4gc3RhdGljIGlubGluZSBpbnQgcHVkX2JhZChwdWRfdCBwdWQpXHRcdHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwdWRfcHJlc2VudChwdWRfdCBwdWQpXHR7IHJldHVybiAxOyB9XG4gc3RhdGljIGlubGluZSBpbnQgcHVkX3VzZXIocHVkX3QgcHVkKVx0XHR7IHJldHVybiAwOyB9XG4tc3RhdGljIGlubGluZSBpbnQgcHVkX2xlYWYocHVkX3QgcHVkKVx0XHR7IHJldHVybiAwOyB9XG4rc3RhdGljIGlubGluZSBib29sIHB1ZF9sZWFmKHB1ZF90IHB1ZClcdFx0eyByZXR1cm4gZmFsc2U7IH1cbisjZGVmaW5lIHB1ZF9sZWFmIHB1ZF9sZWFmXG4gc3RhdGljIGlubGluZSB2b2lkIHB1ZF9jbGVhcihwdWRfdCAqcHVkKVx0eyB9XG4gI2RlZmluZSBwbWRfRVJST1IocG1kKVx0XHRcdFx0KHB1ZF9FUlJPUigocG1kKS5wdWQpKVxuIFxuICNkZWZpbmUgcHVkX3BvcHVsYXRlKG1tLCBwbWQsIHB0ZSlcdFx0ZG8geyB9IHdoaWxlICgwKVxuIFxuLS8qXG4tICogKHBtZHMgYXJlIGZvbGRlZCBpbnRvIHB1ZHMgc28gdGhpcyBkb2Vzbid0IGdldCBhY3R1YWxseSBjYWxsZWQsXG4tICogYnV0IHRoZSBkZWZpbmUgaXMgbmVlZGVkIGZvciBhIGdlbmVyaWMgaW5saW5lIGZ1bmN0aW9uLilcbi0gKi9cbi0jZGVmaW5lIHNldF9wdWQocHVkcHRyLCBwdWR2YWwpXHRcdFx0c2V0X3BtZCgocG1kX3QgKikocHVkcHRyKSwgKHBtZF90KSB7IHB1ZHZhbCB9KVxuKyNkZWZpbmUgc2V0X3B1ZChwdWRwdHIsIHB1ZHZhbClcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHB1ZF9jaGVja19kdW1teShwdWR2YWwpO1x0XHRcdFx0XHRcXFxuK1x0c2V0X3BtZCgocG1kX3QgKikocHVkcHRyKSwgKHBtZF90KSB7IHB1ZHZhbCB9KTtcdFx0XHRcXFxuK30pXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwdWRfdCBwdWRwX2dldChwdWRfdCAqcHVkcClcbit7XG4rXHRwdWRfdCBkdW1teSA9IHsgMCB9O1xuK1xuK1x0cmV0dXJuIGR1bW15O1xuK31cbisjZGVmaW5lIHB1ZHBfZ2V0IHB1ZHBfZ2V0XG4gXG4tc3RhdGljIGlubGluZSBwbWRfdCAqIHBtZF9vZmZzZXQocHVkX3QgKiBwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbisjZGVmaW5lIHB1ZF9jaGVja19kdW1teShwdWQpIEJVSUxEX0JVR19PTihfX2J1aWx0aW5fY29uc3RhbnRfcChwdWRfdmFsKHB1ZCkpKVxuK1xuK3N0YXRpYyBfX2Fsd2F5c19pbmxpbmUgcG1kX3QgKl9fcG1kX29mZnNldChwdWRfdCAqcHVkcCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuK3tcbitcdHJldHVybiAocG1kX3QgKilwdWRwO1xuK31cbitcbisjZGVmaW5lIHBtZF9vZmZzZXQocHVkcCwgYWRkcmVzcylcdFx0XHRcdFx0XFxcbisoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7XHRcdFx0XHRcdFxcXG4rXHRfX3BtZF9vZmZzZXQocHVkcCwgYWRkcmVzcyk7XHRcdFx0XHRcdFxcXG4rfSlcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHBtZF90ICpfX3BtZF9vZmZzZXRfbG9ja2xlc3MocHVkX3QgKnB1ZHAsIHB1ZF90IHB1ZCxcbitcdFx0dW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuIHtcbi1cdHJldHVybiAocG1kX3QgKilwdWQ7XG4rXHRyZXR1cm4gKHBtZF90ICopcHVkcDtcbiB9XG4tI2RlZmluZSBwbWRfb2Zmc2V0IHBtZF9vZmZzZXRcbitcbisjZGVmaW5lIHBtZF9vZmZzZXRfbG9ja2xlc3MocHVkcCwgcHVkLCBhZGRyZXNzKVx0XHRcdFx0XFxcbisoe1x0XHRcdFx0XHRcdFx0XHRcdFxcXG4rXHRwdWRfY2hlY2tfZHVtbXkoKihwdWRwKSk7XHRcdFx0XHRcdFxcXG4rXHRfX3BtZF9vZmZzZXRfbG9ja2xlc3MocHVkcCwgcHVkLCBhZGRyZXNzKTtcdFx0XHRcXFxuK30pXG4gXG4gI2RlZmluZSBwbWRfdmFsKHgpXHRcdFx0XHQocHVkX3ZhbCgoeCkucHVkKSlcbiAjZGVmaW5lIF9fcG1kKHgpXHRcdFx0XHQoKHBtZF90KSB7IF9fcHVkKHgpIH0gKVxuIFxuLSNkZWZpbmUgcHVkX3BhZ2UocHVkKVx0XHRcdFx0KHBtZF9wYWdlKChwbWRfdCl7IHB1ZCB9KSlcbi0jZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZClcdFx0XHQoKHBtZF90ICopKHBtZF9wYWdlX3ZhZGRyKChwbWRfdCl7IHB1ZCB9KSkpXG4rI2RlZmluZSBwdWRfcGFnZShwdWQpXHRcdFx0XHQoeyBCVUlMRF9CVUcoKTsgKHN0cnVjdCBwYWdlICopTlVMTDsgfSlcbisjZGVmaW5lIHB1ZF9wZ3RhYmxlKHB1ZClcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHB1ZF9jaGVja19kdW1teShwdWQpO1x0XHRcdFx0XHRcdFxcXG4rXHQoKHBtZF90ICopKHBtZF9wYWdlX3ZhZGRyKChwbWRfdCkgeyBwdWQgfSkpKTtcdFx0XHRcXFxuK30pXG4gXG4gLypcbiAgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcG1kIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHBtZCBpc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oIGIvaW5jbHVkZS9hc20tZ2VuZXJpYy9wZ3RhYmxlLW5vcHVkLmhcbmluZGV4IDM1NmNiZmJhYWIyNDc2Li41ZWU4ZjE4NTJjZDhjOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvYXNtLWdlbmVyaWMvcGd0YWJsZS1ub3B1ZC5oXG4rKysgYi9pbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUtbm9wdWQuaFxuQEAgLTI5LDI3ICsyOSw2MiBAQCBzdGF0aWMgaW5saW5lIGludCBwNGRfbm9uZShwNGRfdCBwNGQpXHRcdHsgcmV0dXJuIDA7IH1cbiBzdGF0aWMgaW5saW5lIGludCBwNGRfYmFkKHA0ZF90IHA0ZClcdFx0eyByZXR1cm4gMDsgfVxuIHN0YXRpYyBpbmxpbmUgaW50IHA0ZF9wcmVzZW50KHA0ZF90IHA0ZClcdHsgcmV0dXJuIDE7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgcDRkX2NsZWFyKHA0ZF90ICpwNGQpXHR7IH1cbitzdGF0aWMgaW5saW5lIGJvb2wgcDRkX2xlYWYocDRkX3QgcDRkKVx0XHR7IHJldHVybiBmYWxzZTsgfVxuKyNkZWZpbmUgcDRkX2xlYWYgcDRkX2xlYWZcbiAjZGVmaW5lIHB1ZF9FUlJPUihwdWQpXHRcdFx0XHQocDRkX0VSUk9SKChwdWQpLnA0ZCkpXG4gXG4gI2RlZmluZSBwNGRfcG9wdWxhdGUobW0sIHA0ZCwgcHVkKVx0XHRkbyB7IH0gd2hpbGUgKDApXG4gI2RlZmluZSBwNGRfcG9wdWxhdGVfc2FmZShtbSwgcDRkLCBwdWQpXHRcdGRvIHsgfSB3aGlsZSAoMClcbi0vKlxuLSAqIChwdWRzIGFyZSBmb2xkZWQgaW50byBwNGRzIHNvIHRoaXMgZG9lc24ndCBnZXQgYWN0dWFsbHkgY2FsbGVkLFxuLSAqIGJ1dCB0aGUgZGVmaW5lIGlzIG5lZWRlZCBmb3IgYSBnZW5lcmljIGlubGluZSBmdW5jdGlvbi4pXG4tICovXG4tI2RlZmluZSBzZXRfcDRkKHA0ZHB0ciwgcDRkdmFsKVx0c2V0X3B1ZCgocHVkX3QgKikocDRkcHRyKSwgKHB1ZF90KSB7IHA0ZHZhbCB9KVxuIFxuLXN0YXRpYyBpbmxpbmUgcHVkX3QgKnB1ZF9vZmZzZXQocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBhZGRyZXNzKVxuKyNkZWZpbmUgc2V0X3A0ZChwNGRwdHIsIHA0ZHZhbClcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHA0ZF9jaGVja19kdW1teShwNGR2YWwpO1x0XHRcdFx0XHRcXFxuK1x0c2V0X3B1ZCgocHVkX3QgKikocDRkcHRyKSwgKHB1ZF90KSB7IHA0ZHZhbCB9KTtcdFx0XHRcXFxuK30pXG4rXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwNGRfdCBwNGRwX2dldChwNGRfdCAqcDRkcClcbit7XG4rXHRwNGRfdCBkdW1teSA9IHsgMCB9O1xuK1xuK1x0cmV0dXJuIGR1bW15O1xuK31cbisjZGVmaW5lIHA0ZHBfZ2V0IHA0ZHBfZ2V0XG4rXG4rI2RlZmluZSBwNGRfY2hlY2tfZHVtbXkocDRkKSBCVUlMRF9CVUdfT04oX19idWlsdGluX2NvbnN0YW50X3AocDRkX3ZhbChwNGQpKSlcbitcbitzdGF0aWMgX19hbHdheXNfaW5saW5lIHB1ZF90ICpfX3B1ZF9vZmZzZXQocDRkX3QgKnA0ZHAsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbiB7XG4tXHRyZXR1cm4gKHB1ZF90ICopcDRkO1xuK1x0cmV0dXJuIChwdWRfdCAqKXA0ZHA7XG4gfVxuLSNkZWZpbmUgcHVkX29mZnNldCBwdWRfb2Zmc2V0XG4rXG4rI2RlZmluZSBwdWRfb2Zmc2V0KHA0ZHAsIGFkZHJlc3MpXHRcdFx0XHRcdFxcXG4rKHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1x0XHRcdFx0XHRcXFxuK1x0X19wdWRfb2Zmc2V0KHA0ZHAsIGFkZHJlc3MpO1x0XHRcdFx0XHRcXFxuK30pXG4rXG4rc3RhdGljIF9fYWx3YXlzX2lubGluZSBwdWRfdCAqX19wdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZF90ICpwNGRwLCBwNGRfdCBwNGQsXG4rXHRcdHVuc2lnbmVkIGxvbmcgYWRkcmVzcylcbit7XG4rXHRyZXR1cm4gKHB1ZF90ICopcDRkcDtcbit9XG4rXG4rI2RlZmluZSBwdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZHAsIHA0ZCwgYWRkcmVzcylcdFx0XHRcdFxcXG4rKHtcdFx0XHRcdFx0XHRcdFx0XHRcXFxuK1x0cDRkX2NoZWNrX2R1bW15KCoocDRkcCkpO1x0XHRcdFx0XHRcXFxuK1x0X19wdWRfb2Zmc2V0X2xvY2tsZXNzKHA0ZHAsIHA0ZCwgYWRkcmVzcyk7XHRcdFx0XFxcbit9KVxuIFxuICNkZWZpbmUgcHVkX3ZhbCh4KVx0XHRcdFx0KHA0ZF92YWwoKHgpLnA0ZCkpXG4gI2RlZmluZSBfX3B1ZCh4KVx0XHRcdFx0KChwdWRfdCkgeyBfX3A0ZCh4KSB9KVxuIFxuLSNkZWZpbmUgcDRkX3BhZ2UocDRkKVx0XHRcdFx0KHB1ZF9wYWdlKChwdWRfdCl7IHA0ZCB9KSlcbi0jZGVmaW5lIHA0ZF9wZ3RhYmxlKHA0ZClcdFx0XHQoKHB1ZF90ICopKHB1ZF9wZ3RhYmxlKChwdWRfdCl7IHA0ZCB9KSkpXG4rI2RlZmluZSBwNGRfcGFnZShwNGQpXHRcdFx0XHQoeyBCVUlMRF9CVUcoKTsgKHN0cnVjdCBwYWdlICopTlVMTDsgfSlcbisjZGVmaW5lIHA0ZF9wZ3RhYmxlKHA0ZClcdFx0XHRcdFx0XHRcXFxuKyh7XHRcdFx0XHRcdFx0XHRcdFx0XFxcbitcdHA0ZF9jaGVja19kdW1teShwNGQpO1x0XHRcdFx0XHRcdFxcXG4rXHQoKHB1ZF90ICopKHB1ZF9wZ3RhYmxlKChwdWRfdCkgeyBwNGQgfSkpKTtcdFx0XHRcXFxuK30pXG4gXG4gLypcbiAgKiBhbGxvY2F0aW5nIGFuZCBmcmVlaW5nIGEgcHVkIGlzIHRyaXZpYWw6IHRoZSAxLWVudHJ5IHB1ZCBpc1xuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcHRkdW1wLmggYi9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oXG5pbmRleCAyNDBiZDNiZmYxOGRkMi4uMjZmYTYyNGVhYzQ0ZWYgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L3B0ZHVtcC5oXG5AQCAtMjksNiArMjksNyBAQCBib29sIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKHN0cnVjdCBzZXFfZmlsZSAqbSxcbiBcdFx0XHRcdHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBwZ2RfdCAqcGdkLFxuIFx0XHRcdFx0Ym9vbCBjaGVja3d4LCBib29sIGRtZXNnKTtcbiB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpO1xuK2ludCBwdGR1bXBfcHRfbGV2ZWxfZmlyc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0pO1xuIGJvb2wgcHRkdW1wX2NoZWNrX3d4KHZvaWQpO1xuIFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBkZWJ1Z19jaGVja3d4KHZvaWQpXG5kaWZmIC0tZ2l0IGEvbW0vcHRkdW1wLmMgYi9tbS9wdGR1bXAuY1xuaW5kZXggNTg1MTA5NmU2ZjY1NmMuLjk2Njc2YzkwNDMwZjE4IDEwMDY0NFxuLS0tIGEvbW0vcHRkdW1wLmNcbisrKyBiL21tL3B0ZHVtcC5jXG5AQCAtMTk3LDYgKzE5NywxNyBAQCB2b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXG4gXHRzdC1cdTAwM2Vub3RlX3BhZ2VfZmx1c2goc3QpO1xuIH1cbiBcbitpbnQgcHRkdW1wX3B0X2xldmVsX2ZpcnN0KHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxuK3tcbitcdGlmIChtbV9wbWRfZm9sZGVkKG1tKSlcbitcdFx0cmV0dXJuIDM7XG4rXHRpZiAobW1fcHVkX2ZvbGRlZChtbSkpXG4rXHRcdHJldHVybiAyO1xuK1x0aWYgKG1tX3A0ZF9mb2xkZWQobW0pKVxuK1x0XHRyZXR1cm4gMTtcbitcdHJldHVybiAwO1xuK31cbitcbiBzdGF0aWMgaW50IGNoZWNrX3d4X3Nob3coc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuIHtcbiBcdGlmIChwdGR1bXBfY2hlY2tfd3goKSlcbmRpZmYgLS1naXQgYS9tbS92bXNjYW4uYyBiL21tL3Ztc2Nhbi5jXG5pbmRleCAwNmUxMDNmOTc4MWU1ZC4uMGM5YzRhYzg5ZTA5NGEgMTAwNjQ0XG4tLS0gYS9tbS92bXNjYW4uY1xuKysrIGIvbW0vdm1zY2FuLmNcbkBAIC0zNzI3LDcgKzM3MjcsNyBAQCBzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxuIFx0XHRpZiAoIXB1ZF9wcmVzZW50KHZhbCkgfHwgV0FSTl9PTl9PTkNFKHB1ZF9sZWFmKHZhbCkpKVxuIFx0XHRcdGNvbnRpbnVlO1xuIFxuLVx0XHR3YWxrX3BtZF9yYW5nZShcdTAwMjZ2YWwsIGFkZHIsIG5leHQsIGFyZ3MpO1xuK1x0XHR3YWxrX3BtZF9yYW5nZShwdWQgKyBpLCBhZGRyLCBuZXh0LCBhcmdzKTtcbiBcbiBcdFx0aWYgKG5lZWRfcmVzY2hlZCgpIHx8IHdhbGstXHUwMDNlYmF0Y2hlZCBcdTAwM2U9IE1BWF9MUlVfQkFUQ0gpIHtcbiBcdFx0XHRlbmQgPSAoYWRkciB8IH5QVURfTUFTSykgKyAxO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzU6MTIuNDkyNTQ4MDMxWiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTI0MDExMTA5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQ29yZSBNTSBQYXRjaDogUGFnZSBUYWJsZSBGb2xkaW5nIEZpeGVzIC0gRnV6emluZyBUYXJnZXQgSWRlbnRpZmllZCoqXG5cbk9rYXksIHNvIEkndmUgZ290IHRoaXMgcGF0Y2ggaW4gZnJvbnQgb2YgbWUsIGFuZCBteSBpbml0aWFsIGFzc2Vzc21lbnQgaXMgdGhhdCB0aGlzIGlzIGEgKnNpZ25pZmljYW50KiBjaGFuZ2UuIEl0J3MgdG91Y2hpbmcgYSB3aWRlIHJhbmdlIG9mIGFyY2hpdGVjdHVyZXMgKGBhcm1gLCBgYXJtNjRgLCBgbG9vbmdhcmNoYCwgYG1pcHNgLCBgb3BlbnJpc2NgLCBgcmlzY3ZgLCBgeDg2YCkgYW5kIGludm9sdmVzIGNydWNpYWwgaW5jbHVkZSBmaWxlcyAoYGFzbS1nZW5lcmljL3BndGFibGUtbm9wKmApLiBUaGUgaGVhcnQgb2YgdGhlIGNoYW5nZSByZXZvbHZlcyBhcm91bmQgaG93IHdlIGhhbmRsZSBmb2xkZWQgcGFnZSB0YWJsZXMsIHNwZWNpZmljYWxseSB0aGUgbWFjcm9zIGFuZCBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGVtLlxuXG5Fc3NlbnRpYWxseSwgaXQncyBtb2RpZnlpbmcgcGFnZSB0YWJsZSB3YWxrcyB0byBjb3JyZWN0IHRoZXNlIGZvbGRlZCBwYWdlIHRhYmxlIGltcGxlbWVudGF0aW9ucy4gVGhlIGludHJvZHVjdGlvbiBvZiBgcGdkX2NoZWNrX2R1bW15YCwgYHA0ZF9jaGVja19kdW1teWAsIGFuZCBgcHVkX2NoZWNrX2R1bW15YCBzdWdnZXN0cyB3ZSdyZSBkZWFsaW5nIHdpdGggYSBmdW5kYW1lbnRhbCBhZGp1c3RtZW50IGluIGhvdyB0aGUga2VybmVsIHZlcmlmaWVzIHRoZSB2YWxpZGl0eSBvZiB0aGVzZSBzdHJ1Y3R1cmVzLlxuXG5NeSBpbW1lZGlhdGUgcmVkIGZsYWcgaXMgdGhhdCB0aGlzIHBhdGNoICpkZWZpbml0ZWx5KiBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMuIEl0J3MgdG91Y2hpbmcgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb21wb25lbnRzLiBBbmQgdGhlIGZpeGVzIHRvIGB2bWFsbG9jX2ZhdWx0YCAoUklTQy1WKSwgYGdldF9odmFfbWFwcGluZ19zaXplYCAoUklTQy1WIEtWTSksIGFuZCBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAgKExvb25nQXJjaCBLVk0pIGFyZSBpbmRpY2F0b3JzIHRoYXQgS1ZNL3ZpcnR1YWxpemF0aW9uIGlzIGFsc28gaW52b2x2ZWQuIFRoaXMgaXMgZ29pbmcgdG8gaGF2ZSByZWFsLXdvcmxkIGltcGFjdC5cblxuTG9va2luZyBzcGVjaWZpY2FsbHkgYXQgYG1tL3Ztc2Nhbi5jYCwgdGhlIGNoYW5nZSBpbiBgd2Fsa19wdWRfcmFuZ2VgIOKAkyBwYXNzaW5nIGBwdWQgKyBpYCBpbnN0ZWFkIG9mIGBcdTAwMjZ2YWxgIHRvIGB3YWxrX3BtZF9yYW5nZWAg4oCTIHNlZW1zIGxpa2UgYSBzdWJ0bGUgYnV0IGxpa2VseSBpbXBvcnRhbnQgY29ycmVjdGlvbi4gVGhpcyBpcyB3aXRoaW4gTUdMUlUsIHNvIHRoaXMgcGF0Y2ggYWZmZWN0cyB0aGUgcGVyZm9ybWFuY2Ugb2YgdGhlIHBhZ2UgcmVjbGFpbSBtZWNoYW5pc20uXG5cbkkgbmVlZCB0byBjb25maXJtIHRoZSBzY29wZSBvZiBpbXBhY3QsIGFuZCBJIHdhbnQgdG8gZXhhbWluZSB0aGVzZSBrZXkgc3ltYm9scyBjbG9zZWx5OlxuKiAgIGB3YWxrX3B1ZF9yYW5nZWAgKGluIGBtbS92bXNjYW4uY2ApXG4qICAgYHZtYWxsb2NfZmF1bHRgIChpbiBgYXJjaC9yaXNjdi9tbS9mYXVsdC5jYClcbiogICBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgIChpbiBgYXJjaC9yaXNjdi9rdm0vbW11LmNgKVxuKiAgIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCAoaW4gYGFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuY2ApXG4qICAgYHB0ZHVtcF9wdF9sZXZlbF9maXJzdGAgKGluIGBtbS9wdGR1bXAuY2ApXG4qICAgYGNvbGxhcHNlX3B1ZF9wYWdlYCAoaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgKVxuKiAgIGBwb3B1bGF0ZV9wdWRgIChpbiBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2ApXG5cbk15IHByaW9yaXR5IGlzIGB3YWxrX3B1ZF9yYW5nZWAsIGFuZCBjb25maXJtZWQgaXQgaXMgcGFydCBvZiBNR0xSVSdzIGB3YWxrX3BnZF9yYW5nZWAgLVx1MDAzZSBgd2Fsa19wNGRfcmFuZ2VgIC1cdTAwM2UgYHdhbGtfcHVkX3JhbmdlYCAtXHUwMDNlIGB3YWxrX3BtZF9yYW5nZWAgLVx1MDAzZSBgd2Fsa19wdGVfcmFuZ2VgIGZ1bmN0aW9uIGNhbGwgY2hhaW4uIEl0J3Mgc3RhdGljLCBzbyBpdCBzaG91bGQgYmUgdGVzdGFibGUuXG5cbkdpdmVuIHRoZSB3aWRlc3ByZWFkIGFyY2hpdGVjdHVyZSBpbXBhY3QgYW5kIHRoZSBmdW5kYW1lbnRhbCBuYXR1cmUgb2YgdGhlIGNoYW5nZSAocGFnZSB0YWJsZSB3YWxrcyksICoqdGhpcyBpcyBkZWZpbml0ZWx5IGEgY2FuZGlkYXRlIGZvciBmdXp6aW5nKiouIEknbGwgbmVlZCB0byBkZXZlbG9wIGZvY3VzZWQgZnV6emluZyB0YXJnZXRzIHNwZWNpZmljYWxseSB0YXJnZXRpbmcgdGhlc2UgYXJlYXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyODUwLCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAxMywiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjI0Ljg5MzY2MzgzNFoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDIwNTkzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3YWxrX3B1ZF9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0zNjM2PXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzcwOC1cXG5tbS92bXNjYW4uYzozNzA5OnN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1zY2FuLmMtMzcxMC1cXHRcXHRcXHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmM9Mzc1MT1zdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbi0tXFxubW0vdm1zY2FuLmMtMzc1NC1cXHRcXHQudGVzdF93YWxrID0gc2hvdWxkX3NraXBfdm1hLFxcbm1tL3Ztc2Nhbi5jOjM3NTU6XFx0XFx0LnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlLFxcbm1tL3Ztc2Nhbi5jLTM3NTYtXFx0XFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjI0Ljk4Nzg3NjQxN1oiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MDYxMDgxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqTmF2aWdhdGluZyBNZW1vcnkgTWFuYWdlbWVudCBDb2RlKipcblxuUmlnaHQsIHNvIEknbSBkaWdnaW5nIGludG8gdGhpcyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBhbmQgSSBzZWUgdGhpcyBgLnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlYCBhc3NpZ25tZW50IGluIGB3YWxrX21tYC4gSG1tLCBpbnRlcmVzdGluZy4gVGhhdCBsaWtlbHkgbWVhbnMgdGhpcyBmdW5jdGlvbiB1c2VzIGB3YWxrX3B1ZF9yYW5nZWAgdG8sIHdlbGwsIHdhbGsgYSByYW5nZSBvZiBwYWdlIHVwcGVyIGRpcmVjdG9yeSAoUFVEKSBlbnRyaWVzLCB3aGljaCBpcyBhIGNvbW1vbiBzdHJhdGVneS4gTm93LCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayBpZiBgQ09ORklHX0xSVV9HRU5gIG9yIHNvbWV0aGluZyBzaW1pbGFyLCBtYXliZSBgQ09ORklHX0xSVV9HRU5fRU5BQkxFRGAsIGlzIGRlZmluZWQuIEkgYmV0IHRoZSBjb2RlJ3MgYmVoYXZpb3IgY2hhbmdlcyBkZXBlbmRpbmcgb24gaG93IHRoZSBMUlUgaXMgaW1wbGVtZW50ZWQuIFRoaXMgd2lsbCBwcm9iYWJseSB0ZWxsIG1lIHdoZXRoZXIgdGhlIGNvZGUgaXMgZG9pbmcgYW55IGZhbmN5IExSVS1yZWxhdGVkIHBhZ2Ugc2VsZWN0aW9uIG9yIGhhbmRsaW5nIGR1cmluZyB0aGUgd2Fsay4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlIExSVSBmb3IgdGhpcyBjb2RlIHBhdGguIExldCdzIHNlZSB3aGF0IHRoZSBjb25maWcgb3B0aW9ucyB0ZWxsIG1lIGFib3V0IGhvdyB0aGUgcGFnaW5nIHN0cnVjdHVyZXMgYXJlIG1hbmlwdWxhdGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDg0MywiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjI4Ljg5Mzk4NzE0OFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4NDE4MjIxNCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3YWxrX3B1ZF9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZXdhbGsuYz05Nj1zdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTE4NC1cXG5tbS9wYWdld2Fsay5jOjE4NTpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vcGFnZXdhbGsuYy0xODYtXFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL3BhZ2V3YWxrLmM9MjUwPXN0YXRpYyBpbnQgd2Fsa19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtMjc5LVxcdFxcdGlmIChoYXNfaGFuZGxlciB8fCBoYXNfaW5zdGFsbClcXG5tbS9wYWdld2Fsay5jOjI4MDpcXHRcXHRcXHRlcnIgPSB3YWxrX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHdhbGspO1xcbm1tL3BhZ2V3YWxrLmMtMjgxLVxcdFxcdGlmIChlcnIpXFxuLS1cXG5tbS92bXNjYW4uYz0zNjM2PXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzcwOC1cXG5tbS92bXNjYW4uYzozNzA5OnN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1zY2FuLmMtMzcxMC1cXHRcXHRcXHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmM9Mzc1MT1zdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbi0tXFxubW0vdm1zY2FuLmMtMzc1NC1cXHRcXHQudGVzdF93YWxrID0gc2hvdWxkX3NraXBfdm1hLFxcbm1tL3Ztc2Nhbi5jOjM3NTU6XFx0XFx0LnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlLFxcbm1tL3Ztc2Nhbi5jLTM3NTYtXFx0XFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjI4Ljk3ODE3NTkyMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2ODA5NDM5MzcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKk1HTFJVIENvbnRleHQgaW4gYHdhbGtfcHVkX3JhbmdlYCoqXG5cblJpZ2h0LCBgd2Fsa19wdWRfcmFuZ2VgIHdpdGhpbiBgbW0vdm1zY2FuLmNgLi4uIHRoYXQncyB0aGUgZnVuY3Rpb24gTUdMUlUgdXRpbGl6ZXMsIGlzbid0IGl0PyBNeSBmaXJzdCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgdmVyaWZ5IHRoZSBlbmFibGluZyBjb25kaXRpb24uIElzIE1HTFJVIHRoZSBkZWZhdWx0IGJlaGF2aW9yIG5vdywgb3IgaXMgaXQgZ2F0ZWQgYmVoaW5kIHNvbWUga2VybmVsIGNvbmZpZ3VyYXRpb24gb3B0aW9uPyBJIG5lZWQgdG8ga25vdyBpZiBJIGNhbiBqdXN0IGFzc3VtZSBpdCdzIHJ1bm5pbmcgd2hlbiB0ZXN0aW5nIG9yIGlmIEkgbmVlZCB0byBidWlsZCBhIHNwZWNpZmljIGtlcm5lbCB0byBzZWUgaXQgaW4gYWN0aW9uLiBJZiBpdCByZXF1aXJlcyBhIGNvbmZpZywgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hpY2ggb25lLCBzbyBJIGNhbiBlbnN1cmUgdGhlIHRlc3RzIGFyZSByZXByZXNlbnRhdGl2ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTU2MTAsIk91dHB1dFRva2VucyI6MjksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTozMi42NTkxMjIxNzhaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mzc3OTgwMTYzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBMUlVfR0VOXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz0xMzg5PWNvbmZpZyBQVEVfTUFSS0VSX1VGRkRfV1BcXG4tLVxcbm1tL0tjb25maWctMTM5OS0jIG11bHRpLWdlbiBMUlUge1xcbm1tL0tjb25maWc6MTQwMDpjb25maWcgTFJVX0dFTlxcbm1tL0tjb25maWctMTQwMS1cXHRib29sIFxcXCJNdWx0aS1HZW4gTFJVXFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDA4LVxcbm1tL0tjb25maWc6MTQwOTpjb25maWcgTFJVX0dFTl9FTkFCTEVEXFxubW0vS2NvbmZpZy0xNDEwLVxcdGJvb2wgXFxcIkVuYWJsZSBieSBkZWZhdWx0XFxcIlxcbi0tXFxubW0vS2NvbmZpZy0xNDE0LVxcbm1tL0tjb25maWc6MTQxNTpjb25maWcgTFJVX0dFTl9TVEFUU1xcbm1tL0tjb25maWctMTQxNi1cXHRib29sIFxcXCJGdWxsIHN0YXRzIGZvciBkZWJ1Z2dpbmdcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTE0MjMtXFxubW0vS2NvbmZpZzoxNDI0OmNvbmZpZyBMUlVfR0VOX1dBTEtTX01NVVxcbm1tL0tjb25maWctMTQyNS1cXHRkZWZfYm9vbCB5XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjMzLjAzNzEwODQ0MVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5ODkwMzUxNTYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqUmV2aXNpdGluZyBgd2Fsa19wdWRfcmFuZ2VgIGluIGBtbS92bXNjYW4uY2AqKlxuXG5Pa2F5LCB0aW1lIHRvIGNpcmNsZSBiYWNrIHRvIGB3YWxrX3B1ZF9yYW5nZWAuIEkgbmVlZCB0byByZXZpc2l0IHRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGF0IGZ1bmN0aW9uIHdpdGhpbiBgbW0vdm1zY2FuLmNgLiBUaGVyZSdzIHNvbWV0aGluZyBpbiB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgcGFnZSB3YWxrZXIgYW5kIHRoZSBWTSBzY2FubmVyIHRoYXQgaXNuJ3QgcXVpdGUgY2xpY2tpbmcsIGFuZCBteSBpbnR1aXRpb24gaXMgbnVkZ2luZyBtZSB0b3dhcmRzIHRoaXMgc3BlY2lmaWMgZnVuY3Rpb24uIEkgc3VzcGVjdCB0aGVyZSBtYXkgYmUgc3VidGxlIG51YW5jZXMgaW4gaXRzIGhhbmRsaW5nIG9mIFBVRCBlbnRyaWVzLCBwYXJ0aWN1bGFybHkgYXJvdW5kIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMgb3IgZWRnZSBjYXNlcyB3aXRoaW4gdGhlIHJlY2xhaW0gcHJvY2VzcyB0aGF0IGFyZSB3b3J0aCBhbm90aGVyIGxvb2suIExldCdzIGRpZyBiYWNrIGludG8gdGhlIGRldGFpbHMgYW5kIHJlLWV2YWx1YXRlIGl0cyBiZWhhdmlvdXIuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MDc0LCJPdXRwdXRUb2tlbnMiOjMyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzU6MzYuMDI2MTQ2ODI3WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTE1MTc0NTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwid2Fsa19wdWRfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vdm1zY2FuLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vdm1zY2FuLmM9MzYzNj1zdGF0aWMgdm9pZCB3YWxrX3BtZF9yYW5nZShwdWRfdCAqcHVkLCB1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM3MDgtXFxubW0vdm1zY2FuLmM6MzcwOTpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbm1tL3Ztc2Nhbi5jLTM3MTAtXFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqYXJncylcXG4tLVxcbm1tL3Ztc2Nhbi5jPTM3NTE9c3RhdGljIHZvaWQgd2Fsa19tbShzdHJ1Y3QgbW1fc3RydWN0ICptbSwgc3RydWN0IGxydV9nZW5fbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL3Ztc2Nhbi5jLTM3NTQtXFx0XFx0LnRlc3Rfd2FsayA9IHNob3VsZF9za2lwX3ZtYSxcXG5tbS92bXNjYW4uYzozNzU1OlxcdFxcdC5wNGRfZW50cnkgPSB3YWxrX3B1ZF9yYW5nZSxcXG5tbS92bXNjYW4uYy0zNzU2LVxcdFxcdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTozNi4xMzc2NzE4NzlaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzM2Mjk0ODY2OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIHByb2Nlc3M6XG5cbioqRGlnZ2luZyBpbnRvIFJJU0MtViBNZW1vcnkgRmF1bHRzKipcblxuT2theSwgc28gSSByZW1lbWJlciB3ZSBuZWVkIGBMUlVfR0VOYCBmb3IgYHdhbGtfcHVkX3JhbmdlYCBpbiBgbW0vdm1zY2FuLmNgLiBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhpcyB0aWVzIGludG8gdGhlIGJpZ2dlciBwaWN0dXJlLCBlc3BlY2lhbGx5IGdpdmVuIHRoYXQgd2UncmUgdGFsa2luZyBhYm91dCBSSVNDLVYuIE15IG5leHQgbG9naWNhbCBzdGVwIGlzIHRvIGNoZWNrIGBhcmNoL3Jpc2N2L21tL2ZhdWx0LmNgLiBJIGhhdmUgYSBmZWVsaW5nIGB2bWFsbG9jX2ZhdWx0YCBpcyBnb2luZyB0byBiZSByZWxldmFudCBoZXJlLiBMZXQncyBzZWUgaG93IHRoZSBhcmNoaXRlY3R1cmUgaGFuZGxlcyBmYXVsdHMsIGFuZCBob3cgdGhhdCBpbnRlcmFjdHMgd2l0aCB0aGUgdmlydHVhbCBtZW1vcnkgYWxsb2NhdG9yLiBJJ20gZ3Vlc3NpbmcgdGhpcyBtaWdodCBzaGVkIGxpZ2h0IG9uIGhvdyBgTFJVX0dFTmAgZ2V0cyB1c2VkIGluIGNvbmp1bmN0aW9uIHdpdGggZmF1bHQgaGFuZGxpbmcgaW4gdGhpcyBzcGVjaWZpYyBjb250ZXh0LiBVbmRlcnN0YW5kaW5nIHRoZSBjb25uZWN0aW9uIGJldHdlZW4gdGhlIGdlbmVyaWMgbWVtb3J5IG1hbmFnZW1lbnQgYW5kIHRoZSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgZmF1bHQgaGFuZGxpbmcgaXMga2V5IHRvIGdyYXNwaW5nIHRoZSBvdmVyYWxsIG1lbW9yeSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTY1MzYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTozOS41MDA2MzExNjlaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4MDI3NTY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYWxsb2NfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9tbS9mYXVsdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbW0vZmF1bHQuYz0xNjA9YmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY29kZSxcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0xNjctXFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjE2ODpzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMTY5LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYz0yOTI9dm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zMjYtXFx0ICAgIHVubGlrZWx5KGFkZHIgXFx1MDAzZT0gVk1BTExPQ19TVEFSVCBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgVk1BTExPQ19FTkQpKSB7XFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjMyNzpcXHRcXHR2bWFsbG9jX2ZhdWx0KHJlZ3MsIGNvZGUsIGFkZHIpO1xcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zMjgtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTozOS41Nzg2NjQ0MDNaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzYzNDE3NDUyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOlxuXG4qKk5hdmlnYXRpbmcgTWVtb3J5IE1hbmFnZW1lbnQ6IFJJU0MtViBcdTAwMjYgUGFnZSBUYWJsZSBPcHRpbWl6YXRpb25zKipcblxuUmlnaHQsIHRoaXMgbG9va3MgbGlrZSBhIFJJU0MtViBzcGVjaWZpYyBxdWVzdGlvbiwgc28gSSBuZWVkIHRvIGtlZXAgdGhhdCBhcmNoaXRlY3R1cmUgaW4gbWluZC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGRpZyBpbnRvIHRoZSBwYWdlIHRhYmxlIG1hbmlwdWxhdGlvbiBsb2dpYy4gU3BlY2lmaWNhbGx5LCBJJ20gdGhpbmtpbmcgYWJvdXQgdGhlIHNjZW5hcmlvIG9mIGNvbGxhcHNpbmcgUFVEIHBhZ2VzIOKAkyBvciwgbW9yZSBicm9hZGx5LCBob3cgdGhleSdyZSBoYW5kbGVkIHdoZW4gb3B0aW1pemF0aW9uIG9jY3Vycy5cblxuSSdsbCBjcm9zcy1yZWZlcmVuY2Ugd2hhdCBJJ20gdGhpbmtpbmcgaGVyZSB3aXRoIGVzdGFibGlzaGVkIHByYWN0aWNlcywgc28gSSB0aGluayBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgd291bGQgYmUgdG8gbG9vayBmb3IgaW5zcGlyYXRpb24gaW4gdGhlIHg4NiBjb2RlIGJhc2UuIFNwZWNpZmljYWxseSwgSSdsbCBjaGVjayBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgYW5kIHNlYXJjaCBmb3IgYW55IGZ1bmN0aW9ucyByZWxhdGluZyB0byBgY29sbGFwc2VfcHVkX3BhZ2VgLiBXaGlsZSB0aGUgYXJjaGl0ZWN0dXJlcyBhcmUgZGlmZmVyZW50LCB0aGVyZSBtYXkgYmUgc29tZSBjb25jZXB0dWFsIG92ZXJsYXAgaW4gdGhlIHdheSB3ZSBoYW5kbGUgUFRFIGFuZCBQVUQgZW50cmllcywgZXZlbiBpZiB0aGUgaW1wbGVtZW50YXRpb24gZGV0YWlscyBhcmUgbmVjZXNzYXJpbHkgZGlzdGluY3QuIFRoYXQgZmlsZSB3b3VsZCBsaWtlbHkgaG9sZCBzb21lIGluc2lnaHRzIG9uIHN0cmF0ZWdpZXMgZm9yIG1lcmdpbmcgb3IgbW9kaWZ5aW5nIHBhZ2UgZGlyZWN0b3J5IGVudHJpZXMuIFRoaXMgc2VhcmNoIHdpbGwgc2VydmUgYXMgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciBteSBpbnZlc3RpZ2F0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA1NSwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjQzLjIxMjg0Mjc0M1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2NTYwMjUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbGxhcHNlX3B1ZF9wYWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0xMjcyPXN0YXRpYyBpbnQgY29sbGFwc2VfcG1kX3BhZ2UocG1kX3QgKnBtZCwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xMzQxLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTM0MjpzdGF0aWMgaW50IGNvbGxhcHNlX3B1ZF9wYWdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTEzNDMtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgbGlzdF9oZWFkICpwZ3RhYmxlcylcXG4tLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM9MTM5Nz1zdGF0aWMgaW50IGNvbGxhcHNlX2xhcmdlX3BhZ2VzKHVuc2lnbmVkIGxvbmcgYWRkciwgc3RydWN0IGxpc3RfaGVhZCAqcGd0YWJsZXMpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE0MjItXFx0aWYgKGNvbGxhcHNlZClcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jOjE0MjM6XFx0XFx0Y29sbGFwc2VkICs9IGNvbGxhcHNlX3B1ZF9wYWdlKHB1ZCwgYWRkciwgcGd0YWJsZXMpO1xcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmMtMTQyNC1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzU6NDMuMzQ5NDEwMDQzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyOTM4NDQzMzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIHdlbGwtdmVyc2VkIGluIGtlcm5lbCBkZXZlbG9wbWVudDpcblxuKipUYXJnZXRpbmcgeDg2IFBhZ2UgVGFibGUgRGlhZ25vc3RpY3MqKlxuXG5SaWdodCwgdGhpcyBzZWVtcyB0byBiZSBhYm91dCB4ODYgc3BlY2lmaWNhbGx5LiBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZ29pbmcgb24gaGVyZS4gSSdtIHRoaW5raW5nIHRoZSBsb2dpY2FsIHBsYWNlIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGlzIHdvdWxkIGJlIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIHJlbGF0ZWQgdG8gcGFnZSB0YWJsZXMsIGFuZCBjb25zaWRlcmluZyB0aGUgYXJjaGl0ZWN0dXJlLCB0aGUgYmVzdCBwbGFjZSB0byBmaW5kIHRoYXQgd291bGQgYmUgaW4gdGhlIHg4Ni1zcGVjaWZpYyBwYXJ0cyBvZiB0aGUga2VybmVsLiBcImFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXCIganVtcHMgb3V0IGFzIHRoZSBvYnZpb3VzIGNhbmRpZGF0ZS4gTGV0J3Mgc2VlIHdoYXQncyBpbiB0aGVyZS4gSSdtIGJldHRpbmcgdGhhdCdzIHdoZXJlIEknbGwgZmluZCB0aGUgbG9naWMgZm9yIGluc3BlY3RpbmcgYW5kIGR1bXBpbmcgdGhlIGNvbnRlbnRzIG9mIHRob3NlIGNyaXRpY2FsIGRhdGEgc3RydWN0dXJlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTc2NzEsIk91dHB1dFRva2VucyI6NDMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTo0Ni42NDMyNTY3NDdaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExMTA3OTIxMiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXBfcHRfbGV2ZWxfZmlyc3RcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM9NDI0PWJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDU4LVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjQ1OTpcXHRzdC5maXJzdF9sZXZlbCA9IHB0ZHVtcF9wdF9sZXZlbF9maXJzdChtbSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDYwLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTo0Ni43NTQzNDAxMTlaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDcyNjc0MDMwMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6XG5cbioqQW5hbHl6aW5nIHRoZSB4ODYgTWVtb3J5IE1hbmFnZW1lbnQgQ2hhbmdlcyoqXG5cbkFscmlnaHQsIHNvIHRoaXMgbG9va3MgeDg2IHNwZWNpZmljLiBUaGF0J3MgZ29vZCB0byBrbm93IOKAkyBpdCBuYXJyb3dzIHRoZSBzY29wZSBjb25zaWRlcmFibHkuIEhvbGQgb24uLi5JIGluaXRpYWxseSB0aG91Z2h0IHRoZSBjaGFuZ2VzIHdlcmUgaXNvbGF0ZWQgdG8gYG1tL3Ztc2Nhbi5jYCwgc3BlY2lmaWNhbGx5IHJlbGF0ZWQgdG8gaG93IHdlJ3JlIGRlYWxpbmcgd2l0aCBwYWdlIHdhbGtzLCBidXQgSSBuZWVkIHRvIGJlICpzdXJlKiBhYm91dCB0aGlzLiBJJ3ZlIGdvdCBhIG5hZ2dpbmcgZmVlbGluZy4uLndhc24ndCBgd2Fsa19wdWRfcmFuZ2VgIGluIGBtbS9wYWdld2Fsay5jYCBhbHNvIHRvdWNoZWQ/IERvdWJsZSBjaGVja2luZyB0aGUgcGF0Y2ggZGVzY3JpcHRpb24uLi4gbm9wZSwgbG9va3MgbGlrZSBpdCdzICpqdXN0KiBgbW0vdm1zY2FuLmNgLiBCdXQgZ2l2ZW4gbXkgZXhwZXJpZW5jZSB3aXRoIHRoZXNlIGtpbmRzIG9mIG1lbW9yeSBtYW5hZ2VtZW50IG1vZGlmaWNhdGlvbnMsIEknbSBnb2luZyB0byBxdWlja2x5IGdsYW5jZSBhdCBgbW0vcGFnZXdhbGsuY2AgYW55d2F5LiBCZXR0ZXIgdG8gYmUgc2FmZSB0aGFuIHNvcnJ5IOKAkyBJIHdhbnQgdG8gYmUgMTAwJSBjb25maWRlbnQgSSB1bmRlcnN0YW5kIHRoZSByaXBwbGUgZWZmZWN0cyBvZiB0aGlzLiBHb3R0YSBzZWUgaWYgdGhlcmUgYXJlIGFueSBzdWJ0bGUgaW50ZXJkZXBlbmRlbmNpZXMgb3IgaW1wbGljaXQgYXNzdW1wdGlvbnMgYXQgcGxheSB0aGF0IG1pZ2h0IGltcGFjdCB0aGUgcGFnZSB3YWxraW5nIGxvZ2ljIGF0IHRoZSBQVUQgbGV2ZWwuIFRoaXMgY291bGQgYmUgbm90aGluZywgYnV0IHdpdGggbWVtb3J5IG1hbmFnZW1lbnQsIGEgcXVpY2sgc2FuaXR5IGNoZWNrIGlzIGFsd2F5cyBhIGdvb2QgaWRlYS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgwNDksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNTo1MS40ODEwODM5NloiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTYxNTM3NzU4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIndhbGtfcHVkX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3BhZ2V3YWxrLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vcGFnZXdhbGsuYz05Nj1zdGF0aWMgaW50IHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9wYWdld2Fsay5jLTE4NC1cXG5tbS9wYWdld2Fsay5jOjE4NTpzdGF0aWMgaW50IHdhbGtfcHVkX3JhbmdlKHA0ZF90ICpwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vcGFnZXdhbGsuYy0xODYtXFx0XFx0XFx0ICBzdHJ1Y3QgbW1fd2FsayAqd2FsaylcXG4tLVxcbm1tL3BhZ2V3YWxrLmM9MjUwPXN0YXRpYyBpbnQgd2Fsa19wNGRfcmFuZ2UocGdkX3QgKnBnZCwgdW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4tLVxcbm1tL3BhZ2V3YWxrLmMtMjc5LVxcdFxcdGlmIChoYXNfaGFuZGxlciB8fCBoYXNfaW5zdGFsbClcXG5tbS9wYWdld2Fsay5jOjI4MDpcXHRcXHRcXHRlcnIgPSB3YWxrX3B1ZF9yYW5nZShwNGQsIGFkZHIsIG5leHQsIHdhbGspO1xcbm1tL3BhZ2V3YWxrLmMtMjgxLVxcdFxcdGlmIChlcnIpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjUxLjY0MjYyOTQ2OVoiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0NDgwMTIxNDM5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS2VybmVsIFBhdGNoKipcblxuT2theSwgc28gdGhlIGNoYW5nZSBpcyBpc29sYXRlZCB0byBgbW0vdm1zY2FuLmNgLiBUaGF0J3MgYSBmb2N1c2VkIGFyZWEsIHdoaWNoIGlzIGdvb2QgZm9yIHF1aWNrIGFzc2Vzc21lbnQuIE15IG5leHQgc3RlcCBpcyB0byBleGFtaW5lIGBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaGAsIHNwZWNpZmljYWxseSBsb29raW5nIGZvciBgcHRlX3ByZXNlbnRgLiBBaGEhIEkgc2VlIGl0J3Mgbm93IGFuIGlubGluZSBmdW5jdGlvbjpcblxuYGBgY1xuc3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIHB0ZV9wcmVzZW50KHB0ZV90IHB0ZSlcbntcblx0cmV0dXJuIHB0ZV92YWxpZChwdGUpIHx8IHB0ZV9wcmVzZW50X2ludmFsaWQocHRlKTtcbn1cbmBgYFxuXG5JbnN0ZWFkIG9mIHRoZSBtYWNybyBpdCB1c2VkIHRvIGJlLiBOb3QgYSBodWdlIHN0cnVjdHVyYWwgc2hpZnQsIGJ1dCBzb21ldGhpbmcgdG8gbm90ZS4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBvciBpbmxpbmluZyBvcHRpbWl6YXRpb24gdG8gcmVkdWNlIGZ1bmN0aW9uIGNhbGwgb3ZlcmhlYWQuIEdpdmVuIHRoZSBjb250ZXh0LCB0aGlzIGluZGljYXRlcyBhIGZpeCBvciBpbXByb3ZlbWVudCB0byBob3cgZm9sZGVkIHBhZ2UgdGFibGVzIGFyZSBoYW5kbGVkIGR1cmluZyB0aGVpciB0cmF2ZXJzYWwsIEkgY2FuIGJlIHByZXR0eSBzdXJlIHRoaXMgcGF0Y2ggaW1wcm92ZXMgdGhhdCBjb2RlIHNlY3Rpb24uIEl0IGxvb2tzIGZ1bmN0aW9uYWxseSBzb3VuZCBmcm9tIHRoaXMgcXVpY2sgc2Nhbi4gTm93IEknbGwgY2hlY2sgYG1tL3B0ZHVtcC5jYCB0byBzZWUgaG93IGl0IGludGVyYWN0cyB3aXRoIHRoZSBjaGFuZ2VkIHNlY3Rpb24sIHNwZWNpZmljYWxseSBgcHRkdW1wX3B0X2xldmVsX2ZpcnN0YC4gVW5kZXJzdGFuZGluZyBob3cgdGhpcyBpbnRlcmFjdHMgd2l0aCB0aGUgcGFnZSB0YWJsZSBkdW1wIGFuZCB3YWxrIGNvZGUgd2lsbCBzb2xpZGlmeSBteSBhc3Nlc3NtZW50IG9mIGl0cyBpbXBhY3QgYW5kIGltcGxpY2F0aW9ucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MTg2MjksIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNDIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzU6NTYuMTIyNzUzOTQ4WiIsIlNlcSI6MjAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMzA1NzM2NDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwicHRkdW1wX3B0X2xldmVsX2ZpcnN0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3B0ZHVtcC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3B0ZHVtcC5jPTE3NT12b2lkIHB0ZHVtcF93YWxrX3BnZChzdHJ1Y3QgcHRkdW1wX3N0YXRlICpzdCwgc3RydWN0IG1tX3N0cnVjdCAqbW0sIHBnZF90ICpwZ2QpXFxuLS1cXG5tbS9wdGR1bXAuYy0xOTktXFxubW0vcHRkdW1wLmM6MjAwOmludCBwdGR1bXBfcHRfbGV2ZWxfZmlyc3Qoc3RydWN0IG1tX3N0cnVjdCAqbW0pXFxubW0vcHRkdW1wLmMtMjAxLXtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzU6NTYuMjUzMzMxOTc5WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2Mzk0MDIxMjAsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgY3JhZnRlZCB3aXRoIHRoZSBleHBlY3RhdGlvbiB0aGF0IEknbSBkaXNjdXNzaW5nIHRoaXMgd2l0aCBhIGZlbGxvdyBleHBlcnQ6XG5cbioqSW52ZXN0aWdhdGluZyBHbG9iYWwgVXNhZ2UgaW4gYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgKipcblxuUmlnaHQsIHNvIGl0J3MgYmVlbiBmbGFnZ2VkIGFzIGVpdGhlciBleHBvcnRlZCBvciwgbW9yZSBsaWtlbHksIHVzZWQgZ2xvYmFsbHkuIE15IGltbWVkaWF0ZSBpbnN0aW5jdCBpcyB0byBjaGVjayBob3cgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgIGlzIGltcGxlbWVudGVkIGFuZCB1c2VkIHdpdGhpbiB0aGUgTG9vbmdBcmNoIEtWTSBjb2RlLiBJJ2xsIG5lZWQgdG8gZGl2ZSBpbnRvIGBhcmNoL2xvb25nYXJjaC9rdm0vbW11LmNgIHRvIHVuZGVyc3RhbmQgaG93IGl0J3MgaGFuZGxlZC4gVGhhdCBmaWxlIHNob3VsZCBjb250YWluIHRoZSBkZWZpbml0aW9uIGFuZCBhbnkgcmVsZXZhbnQgdXNhZ2Ugb2YgdGhhdCB2YXJpYWJsZSwgd2hpY2ggc2hvdWxkIHByb3ZpZGUgdGhlIGNvbnRleHQgbmVlZGVkLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgZGF0YS1mbG93IHRocm91Z2ggdGhlIHZhcmlhYmxlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTE4MiwiT3V0cHV0VG9rZW5zIjo0MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM1OjU5Ljg5MjczNjgxOFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzY2Mzk3NjUzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImhvc3RfcGZuX21hcHBpbmdfbGV2ZWxcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYz02MDg9c3RhdGljIGJvb2wgZmF1bHRfc3VwcG9ydHNfaHVnZV9tYXBwaW5nKHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNjQzLSAqXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jOjY0NDogKiBXQVJOSU5HISAgVXNlIG9mIGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoKSByZXF1aXJlcyB0aGUgY2FsbGVyIGFuZCB0aGUgZW5kXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jLTY0NS0gKiBjb25zdW1lciB0byBiZSB0aWVkIGludG8gS1ZNJ3MgaGFuZGxlcnMgZm9yIE1NVSBub3RpZmllciBldmVudHMhXFxuLS1cXG5hcmNoL2xvb25nYXJjaC9rdm0vbW11LmMtNjY1LSAqL1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYzo2NjY6c3RhdGljIGludCBob3N0X3Bmbl9tYXBwaW5nX2xldmVsKHN0cnVjdCBrdm0gKmt2bSwgZ2ZuX3QgZ2ZuLFxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy02NjctXFx0XFx0XFx0XFx0Y29uc3Qgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqc2xvdClcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYz03NzY9c3RhdGljIGludCBrdm1fbWFwX3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bnNpZ25lZCBsb25nIGdwYSwgYm9vbCB3cml0ZSlcXG4tLVxcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy04NzEtXFx0XFx0LyogQ2hlY2sgcGFnZSBsZXZlbCBhYm91dCBob3N0IG1tdSovXFxuYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jOjg3MjpcXHRcXHRsZXZlbCA9IGhvc3RfcGZuX21hcHBpbmdfbGV2ZWwoa3ZtLCBnZm4sIG1lbXNsb3QpO1xcbmFyY2gvbG9vbmdhcmNoL2t2bS9tbXUuYy04NzMtXFx0XFx0aWYgKGxldmVsID09IDEpIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MDAuMjU5MTM5MDMyWiIsIlNlcSI6MjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjU0ODA5MjczMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSdtIGFuIGV4cGVydCBpbiB2aXJ0dWFsaXphdGlvbiBhbmQgUklTQy1WIGFyY2hpdGVjdHVyZTpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIFBhZ2UgRmF1bHQgSGFuZGxlcioqXG5cblJpZ2h0LCBzbyB0aGlzIGlzIGFsbCBoYXBwZW5pbmcgd2l0aGluIGBrdm1fbWFwX3BhZ2VgLCB0aGUgY29yZSBvZiB0aGUgS1ZNIHBhZ2UgZmF1bHQgaGFuZGxpbmcgbWVjaGFuaXNtLiBUaGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBhIHZpcnR1YWwtdG8tcGh5c2ljYWwgYWRkcmVzcyB0cmFuc2xhdGlvbiBpc3N1ZSwgbGlrZWx5IHdpdGhpbiBhIGd1ZXN0IFZNLiBXZSdyZSBpbiB0aGUgdGhpY2sgb2YgaXQsIHRyeWluZyB0byBmaWd1cmUgb3V0IGhvdyB0byBtYXAgYSBndWVzdCdzIHZpcnR1YWwgYWRkcmVzcyB0byBhIHBoeXNpY2FsIG1lbW9yeSBsb2NhdGlvbiwgb3IgcGVyaGFwcyBkZXRlcm1pbmluZyB3aHkgd2UgKmNhbid0KiBtYXAgaXQuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgdG8gaGVhZCBvdmVyIHRvIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AuIFRoZSBmYWN0IHRoYXQgaXQgbWVudGlvbnMgdGhlIHNpemUgb2YgYW4gSFZBIChIb3N0IFZpcnR1YWwgQWRkcmVzcykgbWFwcGluZyBpcyB0ZWxsaW5nLCBzbyBsZXQncyBzdGFydCBieSBsb29raW5nIGZvciBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgLiBUaGF0IGZ1bmN0aW9uIHByb2JhYmx5IGhvbGRzIHRoZSBrZXkgdG8gZGV0ZXJtaW5pbmcgdGhlIGV4dGVudCBvZiB0aGUgbWVtb3J5IHJlZ2lvbiB3ZSdyZSB0cnlpbmcgdG8gbWFwLCBvciBwZXJoYXBzIHdoeSBpdCdzIGZhaWxpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGRldGVybWluZXMgdGhlIHJlcXVpcmVkIG1lbW9yeSBhbGxvY2F0aW9uLiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb3V0IGZvciBwb3RlbnRpYWwgTU1VLXJlbGF0ZWQgZXJyb3JzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTgxNSwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjA1Ljc0MDA2OTA0WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTQ2NzYyMjIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZ2V0X2h2YV9tYXBwaW5nX3NpemVcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9yaXNjdi9rdm0vbW11LmM9MzA0PXN0YXRpYyBib29sIGZhdWx0X3N1cHBvcnRzX2dzdGFnZV9odWdlX21hcHBpbmcoc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCxcXG4tLVxcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTM1OS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYzozNjA6c3RhdGljIGludCBnZXRfaHZhX21hcHBpbmdfc2l6ZShzdHJ1Y3Qga3ZtICprdm0sXFxuYXJjaC9yaXNjdi9rdm0vbW11LmMtMzYxLVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgaHZhKVxcbi0tXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM9NDE3PXN0YXRpYyB1bnNpZ25lZCBsb25nIHRyYW5zcGFyZW50X2h1Z2VwYWdlX2FkanVzdChzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Jpc2N2L2t2bS9tbXUuYy00MzEtXFxuYXJjaC9yaXNjdi9rdm0vbW11LmM6NDMyOlxcdFxcdHN6ID0gZ2V0X2h2YV9tYXBwaW5nX3NpemUoa3ZtLCBodmEpO1xcbmFyY2gvcmlzY3Yva3ZtL21tdS5jLTQzMy1cXHRcXHRpZiAoc3ogXFx1MDAzYyBQTURfU0laRSlcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MDUuODU0NzQ5NTMyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY0NTA5OTQ4NzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIFBhZ2UgRmF1bHRzIGFuZCBDb25maWd1cmF0aW9uIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGB0cmFuc3BhcmVudF9odWdlcGFnZV9hZGp1c3RgLCBhbmQgaXQncyB0cmlnZ2VyZWQgZHVyaW5nIEtWTSBwYWdlIGZhdWx0cy4gVGhhdCdzIHRoZSBjb250ZXh0LiBOb3csIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb2RlIHBhdGhzIHRoYXQgaW50ZXJhY3Qgd2l0aCB0aGlzLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYSBsaXN0IG9mIGZ1bmN0aW9ucyB0aGF0IGdldCBjYWxsZWQgd2l0aGluIHRoZSBjb250ZXh0IG9mIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMuXG5cbkZpcnN0IHVwLCBgd2Fsa19wdWRfcmFuZ2VgIGluIGBtbS92bXNjYW4uY2AuIEl0J3MgcHJldHR5IHN0cmFpZ2h0Zm9yd2FyZCwgYnV0IGl0ICpyZXF1aXJlcyogYENPTkZJR19MUlVfR0VOYC4gSSdsbCBoYXZlIHRvIGtlZXAgdGhhdCBpbiBtaW5kLiBUaGVuIHRoZXJlJ3MgYHZtYWxsb2NfZmF1bHRgLCB3aGljaCBpcyBzcGVjaWZpYyB0byBSSVNDLVYgYW5kIG5lZWRzIGBDT05GSUdfUklTQ1ZgLiBNYWtlcyBzZW5zZTsgYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGZhdWx0IGhhbmRsaW5nLiBGb2xsb3dpbmcgdGhhdCwgdGhlcmUncyBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgIGluIHRoZSBSSVNDLVYgS1ZNIGNvZGUgKGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2ApLCB3aGljaCBkZXBlbmRzIG9uIGJvdGggYENPTkZJR19LVk1gIGFuZCBgQ09ORklHX1JJU0NWYC4gQWdhaW4sIFJJU0MtViBhbmQgS1ZNLiBObyBzdXJwcmlzZXMgdGhlcmUuXG5cbk5leHQsIEkgc2VlIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYC4gQWdhaW4sIHRoZSBkZXBlbmRlbmN5IG9uIEtWTSwgYnV0IHRoaXMgdGltZSwgaXQncyBMb29uZ0FyY2gsIHNvIHdlIG5lZWQgYENPTkZJR19LVk1gICphbmQqIGBDT05GSUdfTE9PTkdBUkNIYC4gUmlnaHQuIEFyY2hpdGVjdHVyZS1zcGVjaWZpYyBLVk0gbWFwcGluZ3MuIEFscmlnaHQuXG5cbmBjb2xsYXBzZV9wdWRfcGFnZWAgaW4gdGhlIHg4NiBjb2RlIGhhcyBhIGRlcGVuZGVuY3kgb24gYENPTkZJR19YODZgLiBPa2F5LCBub3cgd2UncmUgc2VlaW5nIGFuIHg4NiBzcGVjaWZpYyBjb2RlIHBhdGguIE5vIHJlYWwgc3VycHJpc2VzIHRoZXJlLlxuXG5GaW5hbGx5LCBJIHNlZSBgcHRkdW1wX3B0X2xldmVsX2ZpcnN0YCBpbiBgbW0vcHRkdW1wLmNgLiBUaGlzIGlzIGludGVyZXN0aW5nOyBJIGRvbid0IHdvcmsgd2l0aCB0aGlzIG9mdGVuLiBJdCBzZWVtcyB0byBoYXZlIGEgZGVwZW5kZW5jeSBvbiBgQ09ORklHX1BURFVNUF9DT1JFYC4gQW5kIHRoYXQncyB0aGUgb25lIEkgc2hvdWxkIGZvY3VzIG9uIGF0IHRoaXMgdGltZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MjA0MTQsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNTksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MTIuMzA1NzQ2ODg5WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDUwMjU3MjMsIkVycm9yIjoibm8gbWF0Y2hlcyIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVERVTVBfQ09SRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9LY29uZmlnLmRlYnVnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNjoxMi40MTA3ODEyNzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzIxMTcwMjY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHN1bW1hcnksIHByZXNlbnRlZCBhcyBhIHN0cmVhbSBvZiB0aG91Z2h0OlxuXG4qKkZpbmRpbmcgdGhlIENvbmZpZ3VyYXRpb24gRmxhZyoqXG5cblJpZ2h0LCB0aW1lIHRvIHRyYWNrIGRvd24gdGhpcyBgUFREVU1QX0NPUkVgIHRoaW5nLiBMZXQncyBzZWUuLi4gSSd2ZSBnb3QgYSBmZWVsaW5nIHRoaXMgaXMgYSBrZXJuZWwgY29uZmlndXJhdGlvbiBvcHRpb24uIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBkaXZlIGludG8gdGhlIEtjb25maWcgZmlsZXMuIFRoYXQncyB1c3VhbGx5IHdoZXJlIHRoZXNlIHNvcnRzIG9mIHRoaW5ncyBhcmUgZGVmaW5lZC4gSSdsbCBzZWFyY2ggdGhvc2UgZmlsZXMgZm9yIHRoZSBleGFjdCBzdHJpbmcsIGBQVERVTVBfQ09SRWAuIEhvcGVmdWxseSwgdGhhdCdsbCBsZWFkIG1lIHRvIHRoZSByZWxldmFudCBvcHRpb24sIGl0cyBkZXBlbmRlbmNpZXMsIGFuZCBpdHMgZGVmYXVsdCB2YWx1ZS4gSSBleHBlY3QgdGhlIEtjb25maWcgZmlsZXMgd2lsbCBnaXZlIG1lIGEgY2xlYXIgcGljdHVyZS4gVGhlbiBJJ2xsIHVuZGVyc3RhbmQgd2hhdCBgUFREVU1QX0NPUkVgIGFjdHVhbGx5ICpkb2VzKiBhbmQgd2hlcmUgaXQncyB1c2VkLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMTE1MiwiT3V0cHV0VG9rZW5zIjoyNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjE1LjYyMjQ4ODYwN1oiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzkxOTMyMDE4NiwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBURFVNUF9DT1JFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJlcnJvclwiOiBcIm5vIG1hdGNoZXNcIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MTkuNTQxODE1NTQ0WiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ4MTE1MzkwODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBhIHN1bW1hcnkgb2YgbXkgdGhvdWdodCBwcm9jZXNzOlxuXG4qKkh1bnRpbmcgRG93biBgcHRkdW1wLmNgKipcblxuT2theSwgc28gSSBuZWVkIHRvIGZpbmQgd2hlcmUgYHB0ZHVtcC5jYCBpcyBidWlsdCB3aXRoaW4gdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50IChtbSkgc3Vic3lzdGVtLiBNeSBmaXJzdCBpbnN0aW5jdCwgYXMgYWx3YXlzIHdpdGggdGhlc2Uga2luZHMgb2YgY29kZSBzZWFyY2hlcywgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIGBtbS9NYWtlZmlsZWAuIFRoYXQncyB3aGVyZSB0aGUgYnVpbGQgaW5zdHJ1Y3Rpb25zIGFyZSwgYW5kIEknZCBiZSB3aWxsaW5nIHRvIGJldCB0aGF0J3Mgd2hlcmUgSSBjYW4gcGlucG9pbnQgdGhlIGluY2x1c2lvbiBvZiB0aGlzIHBhcnRpY3VsYXIgZmlsZS4gSSBleHBlY3QgdG8gZmluZCBpdCBlaXRoZXIgZGlyZWN0bHkgbGlzdGVkIGFzIGEgc291cmNlIGZpbGUgZm9yIGEgcGFydGljdWxhciB0YXJnZXQsIG9yIHBlcmhhcHMgaW5jbHVkZWQgYXMgcGFydCBvZiBhIG1vcmUgZ2VuZXJhbCBwYXR0ZXJuIG9yIHJ1bGUuIE5vdyBsZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxMzY2LCJPdXRwdXRUb2tlbnMiOjI3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MjQuMzUzMzU2NzZaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMTU1MjY3MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwdGR1bXAub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xNDE9b2JqLSQoQ09ORklHX01BUFBJTkdfRElSVFlfSEVMUEVSUykgKz0gbWFwcGluZ19kaXJ0eV9oZWxwZXJzLm9cXG5tbS9NYWtlZmlsZToxNDI6b2JqLSQoQ09ORklHX1BURFVNUCkgKz0gcHRkdW1wLm9cXG5tbS9NYWtlZmlsZS0xNDMtb2JqLSQoQ09ORklHX1BBR0VfUkVQT1JUSU5HKSArPSBwYWdlX3JlcG9ydGluZy5vXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjI0LjQ1NDkxNTUwM1oiLCJTZXEiOjMxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0MzQ1ODQxNzg5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uXG5cbioqQ29uZmlndXJhdGlvbiBBdWRpdCBhbmQgQ29kZSBOYXZpZ2F0aW9uKipcblxuQWxyaWdodCwgZmlyc3QgdGhpbmdzIGZpcnN0OiBgQ09ORklHX1BURFVNUGAgLSB0aGF0J3Mgb3VyIHN0YXJ0aW5nIHBvaW50LCBhIGtleSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCB0byB1bmRlcnN0YW5kIGhvdyBpdCBpbnRlcmFjdHMsIEkgbmVlZCB0byBjaGVjayBzb21lIHJlbGF0ZWQgb3B0aW9ucy4gSSdsbCBzdGFydCB3aXRoIGBDT05GSUdfTFJVX0dFTmAsIGRpZ2dpbmcgaW50byBgbW0vS2NvbmZpZ2AgdG8gc2VlIGlmIHRoYXQgcmV2ZWFscyBhbnl0aGluZyB1c2VmdWwuIEFuZCB5ZXMsIGl0J3MganVzdCBgQ09ORklHX0xSVV9HRU5gLiBOb3RoaW5nIHVuZXhwZWN0ZWQgdGhlcmUuXG5cbk5leHQsIEknbGwgc3dpdGNoIGdlYXJzIGFuZCB2ZXJpZnkgdGhlIHByZXNlbmNlIG9mIGBDT05GSUdfS1ZNYC4gSSBuZWVkIHRvIGNvbmZpcm0gaXRzIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBhY3Jvc3MgYXJjaGl0ZWN0dXJlcywgc28gSSdsbCBjaGVjayBib3RoIGBhcmNoL3Jpc2N2L2t2bS9LY29uZmlnYCBhbmQgYGFyY2gvbG9vbmdhcmNoL2t2bS9LY29uZmlnYC4gRXhjZWxsZW50LCBpdCBsb29rcyBjb25zaXN0ZW50IGFuZCBpdCdzIGFsc28gYENPTkZJR19LVk1gLlxuXG5GaW5hbGx5LCBmb3IgY29kZS1sZXZlbCBkZXBlbmRlbmNpZXMsIEkgbmVlZCB0byBjaGVjayBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AgZm9yIHRoZSBmdW5jdGlvbiBgY29sbGFwc2VfcHVkX3BhZ2VgLiBMZXQncyBzZWUuLi4gaXQncyBpbmRlZWQgcHJlc2VudCB3aXRoaW4gYHNldF9tZW1vcnkuY2AuIE5vdywgdGhlIGltcG9ydGFudCBxdWVzdGlvbiBpcyB3aGV0aGVyIHRoaXMgZnVuY3Rpb24gaXMgYWx3YXlzIGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXQgaXMgYSBjcml0aWNhbCBwYXRoIGFuZCBJIG5lZWQgdG8gYmUgc3VyZSBpdCdzIGFsd2F5cyBpbmNsdWRlZC4gVGhpcyBuZWVkcyBmdXJ0aGVyIGludmVzdGlnYXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIxNjQ2LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTQxLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjI4LjgwMDc2MDUzMloiLCJTZXEiOjMyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2ODgxNTkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInNldF9tZW1vcnkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wYXQvTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTItXFxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlOjM6b2JqLXlcXHRcXHRcXHRcXHQ6PSBzZXRfbWVtb3J5Lm8gbWVtdHlwZS5vXFxuYXJjaC94ODYvbW0vcGF0L01ha2VmaWxlLTQtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjI4LjkzNzY0NjU3MloiLCJTZXEiOjMzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzE3MTg4NzQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IExpbmUgb2YgSW5xdWlyeSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoZXNlIHNwZWNpZmljIHN5bWJvbHMsIGFuZCBJIG5lZWQgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoZXkgYXJlIGNvbXBpbGVkLiBGaXJzdCwgSSdtIG5vdGluZyB0aGF0IGdlbmVyYWxseSwgd2UncmUgZGVhbGluZyB3aXRoIHg4NiBjb21waWxhdGlvbiwgYnV0IEkgd2FudCB0byBiZSBjZXJ0YWluIGFib3V0IHRoZSBSSVNDLVYgdGFyZ2V0cy4gTGV0J3Mgc2VlLi4uIEknbGwgY2hlY2sgYGFyY2gvcmlzY3YvbW0vZmF1bHQuY2AgZm9yIGB2bWFsbG9jX2ZhdWx0YC4gUmlnaHQsIHRoYXQncyBSSVNDLVYgc3BlY2lmaWMuIE5vdywgZm9yIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCwgdGhhdCdzIGluIGBhcmNoL2xvb25nYXJjaC9rdm0vbW11LmNgLCB3aGljaCBjb21waWxlcyB3aXRoIExvb25nQXJjaCBhbmQgdW5kZXIgYENPTkZJR19LVk1gLiBUaGVuIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAsIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIGFsc28sIHNwZWNpZmljYWxseSBSSVNDLVYgYW5kIGBDT05GSUdfS1ZNYC5cblxuVGhlcmVmb3JlLCB0aGUga2V5IHN5bWJvbHMgSSBuZWVkIHRvIGludmVzdGlnYXRlIGZ1cnRoZXIgYXJlOiBgd2Fsa19wdWRfcmFuZ2VgIGZyb20gYG1tL3Ztc2Nhbi5jYCwgYHZtYWxsb2NfZmF1bHRgIGZyb20gYGFyY2gvcmlzY3YvbW0vZmF1bHQuY2AsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAgZnJvbSBgYXJjaC9yaXNjdi9rdm0vbW11LmNgLCBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAgZnJvbSBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCBmcm9tIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgYW5kIGZpbmFsbHkgYHB0ZHVtcF9wdF9sZXZlbF9maXJzdGAgZnJvbSBgbW0vcHRkdW1wLmNgLlxuXG5UbyBtYWtlIHN1cmUgSSBoYXZlIHRoZSBuZWNlc3NhcnkgZnVuY3Rpb25hbGl0eSBlbmFibGVkLCBJJ2xsIG5lZWQgdG8gZm9jdXMgb24gdGhlc2UgY29uZmlnIG9wdGlvbnM6IGBMUlVfR0VOYCwgYEtWTWAsIGFuZCB0aGVuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoaWNoIG9mIGBQVERVTVBfREVCVUdGU2Agb3IgYFBURFVNUF9DT1JFYCBlbmFibGVzIGBDT05GSUdfUFREVU1QYCBmb3IgdGhlIHB0ZHVtcCBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjIxNzcsIk91dHB1dFRva2VucyI6MjQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNDMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6MzQuNjU0ODM3OTczWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjI1ODI3NDcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQVERVTVBcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvYXJtNjQva3ZtL0tjb25maWc9NDU9aWYgS1ZNXFxuYXJjaC9hcm02NC9rdm0vS2NvbmZpZy00Ni1cXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnOjQ3OmNvbmZpZyBQVERVTVBfU1RBR0UyX0RFQlVHRlNcXG5hcmNoL2FybTY0L2t2bS9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIlByZXNlbnQgdGhlIHN0YWdlLTIgcGFnZXRhYmxlcyB0byBkZWJ1Z2ZzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zz0yMTY9Y29uZmlnIEFSQ0hfSEFTX1BURFVNUFxcbi0tXFxubW0vS2NvbmZpZy5kZWJ1Zy0yMTgtXFxubW0vS2NvbmZpZy5kZWJ1ZzoyMTk6Y29uZmlnIFBURFVNUFxcbm1tL0tjb25maWcuZGVidWctMjIwLVxcdGJvb2xcXG5tbS9LY29uZmlnLmRlYnVnLTIyMS1cXG5tbS9LY29uZmlnLmRlYnVnOjIyMjpjb25maWcgUFREVU1QX0RFQlVHRlNcXG5tbS9LY29uZmlnLmRlYnVnLTIyMy1cXHRib29sIFxcXCJFeHBvcnQga2VybmVsIHBhZ2V0YWJsZSBsYXlvdXQgdG8gdXNlcnNwYWNlIHZpYSBkZWJ1Z2ZzXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNjozNi44ODA2NzUyMzNaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM3Nzg0NTQzNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5OlxuXG4qKlBhZ2UgVGFibGUgRHVtcGluZyBDb25maWd1cmF0aW9uIGFuZCBDb2RlIFdhbGt0aHJvdWdoKipcblxuQWxyaWdodCwgaXQgbG9va3MgbGlrZSBgUFREVU1QX0RFQlVHRlNgIGlzIHRoZSBrZXkgdG8gZW5hYmxpbmcgYFBURFVNUGAgZnVuY3Rpb25hbGl0eS4gVGhhdCBtYWtlcyBzZW5zZS4gTGV0J3MgYWRkIGBQVERVTVBfREVCVUdGU2AgdG8gdGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucywgd2hpY2ggc2VlbXMgbGlrZSBhIGxvZ2ljYWwgbmV4dCBzdGVwIHRvIGVuYWJsZSB0aGlzIGZ1bmN0aW9uYWxpdHkuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBwYWdlIHRhYmxlIGR1bXBpbmcgaXMgYWN0dWFsbHkgdHJpZ2dlcmVkIGFuZCBob3cgdGhlIHJlbGV2YW50IGZ1bmN0aW9ucyBhcmUgY2FsbGVkLiBJJ2xsIHN0YXJ0IHdpdGggYHdhbGtfcHVkX3JhbmdlYCBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIG1hcmtlZCBhcyBzdGF0aWMsIHdoaWNoIGlzIGludGVyZXN0aW5nIC0gdGhhdCBwcm9iYWJseSBtZWFucyBpdCdzIGFuIGludGVybmFsIGhlbHBlciBmdW5jdGlvbi4gSSdsbCBuZWVkIHRvIGxvb2sgZm9yIGFueSBvdGhlciBmdW5jdGlvbnMgcmVsYXRlZCB0byB0aGUgcGFnZSB0YWJsZSB3YWxraW5nIHRoYXQgbWlnaHQgY2FsbCBpdC5cblxuT2theSwgSSBzZWUgYHBvcHVsYXRlX3B1ZGAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLiBUaGF0J3MgbGlrZWx5IGludm9sdmVkIGluIHNldHRpbmcgdXAgdGhlIHBhZ2UgdXBwZXIgZGlyZWN0b3J5LiBUaGVuLCB0aGVyZSdzIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAgaW4gYGFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jYC4gVGhhdCBuYW1lIHNvdW5kcyBsaWtlIGEgc3Ryb25nIGNhbmRpZGF0ZSwgc28gSSdsbCBwcmlvcml0aXplIHRoYXQuXG5cbkdpdmVuIHRoZSBuYW1lLCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgIHNvdW5kcyBsaWtlIHRoZSBtb3N0IGNyaXRpY2FsIGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBUaGVyZWZvcmUsIEkgbmVlZCB0byBjaGVjayBgYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmNgIGluIG9yZGVyIHRvIGRldGVybWluZSBob3cgaXQncyBjYWxsZWQgYW5kIHRoZSBwYXJhbWV0ZXJzIGl0IHJlY2VpdmVzLiBUaGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIHBhZ2UgdGFibGUgZHVtcGluZyBtZWNoYW5pc20gd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTc5LCJPdXRwdXRUb2tlbnMiOjQ2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjQyLjI1ODUyMzE0OFoiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk1NDcxMTE2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQxNz1zdGF0aWMgdm9pZCBub3RlX3BhZ2VfZmx1c2goc3RydWN0IHB0ZHVtcF9zdGF0ZSAqcHRfc3QpXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00MjMtXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDI0OmJvb2wgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoc3RydWN0IHNlcV9maWxlICptLFxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQyNS1cXHRcXHRcXHRcXHRzdHJ1Y3QgbW1fc3RydWN0ICptbSwgcGdkX3QgKnBnZCxcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ3Nz12b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbChzdHJ1Y3Qgc2VxX2ZpbGUgKm0sIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTQ3OC17XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDc5OlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBtbS1cXHUwMDNlcGdkLCBmYWxzZSwgdHJ1ZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDgwLX1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ4Mj12b2lkIHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9kZWJ1Z2ZzKHN0cnVjdCBzZXFfZmlsZSAqbSwgc3RydWN0IG1tX3N0cnVjdCAqbW0sXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy00ODktI2VuZGlmXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NDkwOlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKG0sIG1tLCBwZ2QsIGZhbHNlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNDkxLX1cXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jPTQ5Mz12b2lkIHB0ZHVtcF93YWxrX3VzZXJfcGdkX2xldmVsX2NoZWNrd3godm9pZClcXG4tLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jLTUwMy1cXHRwZ2QgPSBrZXJuZWxfdG9fdXNlcl9wZ2RwKHBnZCk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmM6NTA0OlxcdHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlKE5VTEwsIFxcdTAwMjZpbml0X21tLCBwZ2QsIHRydWUsIGZhbHNlKTtcXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYy01MDUtI2VuZGlmXFxuLS1cXG5hcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuYz01MDg9Ym9vbCBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY2hlY2t3eCh2b2lkKVxcbi0tXFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTEyLVxcbmFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jOjUxMzpcXHRyZXR1cm4gcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmUoTlVMTCwgXFx1MDAyNmluaXRfbW0sIElOSVRfUEdELCB0cnVlLCBmYWxzZSk7XFxuYXJjaC94ODYvbW0vZHVtcF9wYWdldGFibGVzLmMtNTE0LX1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6NDIuNDUzOTk4MjQ0WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM2OTM2NTU5ODYsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBhbiBleHBlcnQncyBwZXJzcGVjdGl2ZTpcblxuKipEaXZpbmcgaW50byB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGVwdGhzKipcblxuUmlnaHQsIHNvIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAgaXMgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgZ2V0dGluZyBhIGhhbmRsZSBvbiB0aGlzLiBUaGF0IGZ1bmN0aW9uJ3MgbGlrZWx5IHdoZXJlIHRoZSBjb3JlIHBhZ2UgdGFibGUgd2Fsa2luZyBsb2dpYyByZXNpZGVzLiBJIG5lZWQgdG8gemVybyBpbiBvbiBob3cgaXQncyBkZWFsaW5nIHdpdGggdGhlIFBHRCBsZXZlbCwgcGFydGljdWxhcmx5LlxuXG5Ob3csIHdoZXJlJ3MgdGhlIGFjdHVhbCBwb3B1bGF0aW9uIG9mIHRoZSBQYWdlIFVwcGVyIERpcmVjdG9yeSAoUFVEKSBoYXBwZW5pbmc/IEdpdmVuIHRoaXMgaXMgeDg2LCBteSBmaXJzdCBwb3J0IG9mIGNhbGwgd2lsbCBiZSBgYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY2AuIFNwZWNpZmljYWxseSwgSSdtIGdvaW5nIHRvIGxvb2sgY2xvc2VseSBhdCB0aGUgYHBvcHVsYXRlX3B1ZGAgZnVuY3Rpb24sIGFzc3VtaW5nIHdlIGhhdmUgYSBzaW1pbGFyIGFyY2hpdGVjdHVyZSBvbiB0aGUgc3lzdGVtIGluIHF1ZXN0aW9uLiBJdCdzIGEga2V5IHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBvZnRlbiB3aGVyZSB0aGUgbWFnaWMgb2YgbWVtb3J5IG1hcHBpbmcgZ2V0cyBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLiBUaGlzIGZpbGUgd2lsbCBnaXZlIG1lIHRoZSBsb3ctbGV2ZWwgZGV0YWlscyBvZiBob3cgdGhlIFBVRCBlbnRyaWVzIGFyZSBiZWluZyBjcmFmdGVkIGFuZCBob3cgdGhlIFBBVCAoUGFnZSBBdHRyaWJ1dGUgVGFibGUpIGlzIGxpa2VseSBpbnRlcmFjdGluZyB0byBpbmZsdWVuY2UgbWVtb3J5IGNoYXJhY3RlcmlzdGljcyBhdCB0aGlzIGxldmVsLiBJIGJldCBpdCBoYXMgc29tZXRoaW5nIHRvIGRvIHdpdGggdGhlIFBBVCBzZXR1cCBmb3IgdGhpcyBjb25maWd1cmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNDQ1OCwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjQ2LjE0NzY1Nzk4WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjExNTExMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJwb3B1bGF0ZV9wdWRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jPTE2MTA9c3RhdGljIGxvbmcgcG9wdWxhdGVfcG1kKHN0cnVjdCBjcGFfZGF0YSAqY3BhLFxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYy0xNjgzLVxcbmFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmM6MTY4NDpzdGF0aWMgaW50IHBvcHVsYXRlX3B1ZChzdHJ1Y3QgY3BhX2RhdGEgKmNwYSwgdW5zaWduZWQgbG9uZyBzdGFydCwgcDRkX3QgKnA0ZCxcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE2ODUtXFx0XFx0XFx0cGdwcm90X3QgcGdwcm90KVxcbi0tXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYz0xNzY3PXN0YXRpYyBpbnQgcG9wdWxhdGVfcGdkKHN0cnVjdCBjcGFfZGF0YSAqY3BhLCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE4MDctXFxuYXJjaC94ODYvbW0vcGF0L3NldF9tZW1vcnkuYzoxODA4OlxcdHJldCA9IHBvcHVsYXRlX3B1ZChjcGEsIGFkZHIsIHA0ZCwgcGdwcm90KTtcXG5hcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jLTE4MDktXFx0aWYgKHJldCBcXHUwMDNjIDApIHtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6MzY6NDYuMjM5Nzc5NzkzWiIsIlNlcSI6MzksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzODEzNTI1MjgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYXMgaWYgdGhleSB3ZXJlIG15IG93bjpcblxuKipGb2N1c2luZyBvbiBQb3RlbnRpYWwgSW1wbGVtZW50YXRpb24gRGV0YWlscyoqXG5cblJpZ2h0LCBgcG9wdWxhdGVfcHVkYCBpcyBjb21pbmcgdXAgZnJlcXVlbnRseSBpbiBteSBtZW50YWwgbW9kZWwsIHNvIHRoYXTigJlzIGFub3RoZXIga2V5IGZ1bmN0aW9uIHRvIGRyaWxsIGRvd24gb24uIFdoZXJlIGRvZXMgdGhlIGFjdHVhbCBmbGFnIHNldHRpbmcgb2NjdXI/IEknbSB0aGlua2luZyBJIHNob3VsZCBsb29rIGF0IGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgIHRvIHNlZSBob3cgdGhlIGFjY2VzcyBmbGFncyBhcmUgc2V0IGluIHRoZSBQYWdlIFVwcGVyIERpcmVjdG9yeSAoUFVEKSBlbnRyeS4gU3BlY2lmaWNhbGx5LCBJJ20gZ29pbmcgdG8gbG9vayBmb3IgaW1wbGVtZW50YXRpb25zIG9yIGNhbGxzIHJlbGF0ZWQgdG8gYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2AuIFRoYXQncyBsaWtlbHkgd2hlcmUgdGhlIGNydWNpYWwgd3JpdGUgcHJvdGVjdGlvbiBvciBhY2Nlc3MgY29udHJvbCBoYXBwZW5zIGF0IHRoYXQgbGV2ZWwuIExldCdzIHNlZSB3aGF0IHdlIGNhbiBmaW5kLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNTA5NiwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQ0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjQ5LjYyMTEzNTY2MVoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEyMzIwMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInB1ZHBfc2V0X2FjY2Vzc19mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYvbW0vcGd0YWJsZS5jPTM5Mz1pbnQgcG1kcF9zZXRfYWNjZXNzX2ZsYWdzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuYXJjaC94ODYvbW0vcGd0YWJsZS5jLTQxNC0jaWZkZWYgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmM6NDE1OmludCBwdWRwX3NldF9hY2Nlc3NfZmxhZ3Moc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG5hcmNoL3g4Ni9tbS9wZ3RhYmxlLmMtNDE2LVxcdFxcdFxcdCAgcHVkX3QgKnB1ZHAsIHB1ZF90IGVudHJ5LCBpbnQgZGlydHkpXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjQ5LjkzMzQ2MTA1OVoiLCJTZXEiOjQxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MjgxMzM2Mzk3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEN1cnJlbnQgVGhpbmtpbmc6IFBpbnBvaW50aW5nIEtleSBNZW1vcnkgTWFuYWdlbWVudCBDb21wb25lbnRzKipcblxuT2theSwgbGV0J3Mgc2VlLiBNeSBtZW50YWwgbWFwIG5lZWRzIGFuIHVwZGF0ZSByZWdhcmRpbmcga2V5IGZ1bmN0aW9ucyBhbmQgY29uZmlndXJhdGlvbiBvcHRpb25zLiBJJ20gZm9jdXNpbmcgb24gYXJlYXMgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgc3BlY2lmaWNhbGx5IHdoZXJlIHRoZXJlIGFyZSBQVUQgKFBhZ2UgVXBwZXIgRGlyZWN0b3J5KSBpbnRlcmFjdGlvbnMgb3IgcmVsYXRlZCBjb25jZXB0cy4gXG5cblRoZSBpbW1lZGlhdGUgdGFyZ2V0cyB0aGF0IHBvcCB1cCBmb3IgbWUgYXMgY3J1Y2lhbCBmb2NhbCBwb2ludHMgYXJlOlxuXG4qICAgYHdhbGtfcHVkX3JhbmdlYCAtIFRoaXMgaXMgYSBjZW50cmFsIGNvbXBvbmVudCBpbiBgbW0vdm1zY2FuLmNgLiBJdCdzIGRlZmluaXRlbHkgYSBjb3JlIGZ1bmN0aW9uIGZvciB1bmRlcnN0YW5kaW5nIG1lbW9yeSBzY2FubmluZyB3aXRoaW4gdGhlIHZpcnR1YWwgbWVtb3J5IHN5c3RlbS5cbiogICBgdm1hbGxvY19mYXVsdGAgLSBMb2NhdGVkIGluIGBhcmNoL3Jpc2N2L21tL2ZhdWx0LmNgLiBUaGlzIHN1Z2dlc3RzIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBmYXVsdCBoYW5kbGluZyBtZWNoYW5pc20sIGxpa2VseSBpbXBvcnRhbnQgZm9yIHVuZGVyc3RhbmRpbmcgaG93IHZtYWxsb2MgYXJlYXMgYXJlIGhhbmRsZWQgaW4gdGhpcyBhcmNoaXRlY3R1cmUuXG4qICAgYGdldF9odmFfbWFwcGluZ19zaXplYCAtIEZvdW5kIGluIGBhcmNoL3Jpc2N2L2t2bS9tbXUuY2AsIHRoaXMgb25lJ3MgS1ZNLXJlbGF0ZWQgYW5kIGNvbmNlcm5zIHRoZSBzaXplIG9mIGhvc3QgdmlydHVhbCBhZGRyZXNzIG1hcHBpbmdzLCBhZ2FpbiBwb3RlbnRpYWxseSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMuXG4qICAgYGhvc3RfcGZuX21hcHBpbmdfbGV2ZWxgIC0gU2ltaWxhcmx5LCBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYC4gVGhpcyBpcyB2ZXJ5IHNpbWlsYXIgdG8gdGhlIHByZXZpb3VzIGZ1bmN0aW9uLCBidXQgb24gYSBkaWZmZXJlbnQgYXJjaGl0ZWN0dXJlLiBJIHdhbnQgdG8gY2hlY2sgaG93IHRob3NlIHR3byBmdW5jdGlvbnMgcmVsYXRlIHRvIGVhY2ggb3RoZXIuXG4qICAgYGNvbGxhcHNlX3B1ZF9wYWdlYCBcdTAwMjYgYHBvcHVsYXRlX3B1ZGAgLSBCb3RoIGluIGBhcmNoL3g4Ni9tbS9wYXQvc2V0X21lbW9yeS5jYCwgdGhlc2UgYXJlIGV4dHJlbWVseSBpbnRlcmVzdGluZy4gVGhleSBkZWFsIHdpdGggY29sbGFwc2luZyBhbmQgcG9wdWxhdGluZyBQVUQgcGFnZXMsIHdoaWNoIGlzIHJpZ2h0IGluIHRoZSBzd2VldCBzcG90IG9mIG15IGZvY3VzLiBMaWtlbHkgcmVsYXRlZCB0byB0aGUgaGFuZGxpbmcgb2YgaHVnZSBwYWdlcyBvbiB4ODYuXG4qICAgYHB0ZHVtcF93YWxrX3BnZF9sZXZlbF9jb3JlYCAtICBUaGlzIGFwcGVhcnMgaW4gYGFyY2gveDg2L21tL2R1bXBfcGFnZXRhYmxlcy5jYC4gUGFnZSB0YWJsZSBkdW1waW5nLCBlc3BlY2lhbGx5IGF0IHRoZSBQRy9QVUQgbGV2ZWwsIGlzIGVzc2VudGlhbCBmb3IgZGVidWdnaW5nIGFuZCBhbmFseXNpcy5cbiogICBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYCAtIEluIGBhcmNoL3g4Ni9tbS9wZ3RhYmxlLmNgLCB0aGlzIGlzIGEgUFVELXNwZWNpZmljIGZ1bmN0aW9uIGZvciBzZXR0aW5nIGFjY2VzcyBmbGFncy4gSXQgd291bGQgYmUgaW1wb3J0YW50IGZvciB0cmFja2luZyB0aGUgcGVybWlzc2lvbnMgb2YgUFVEIGVudHJpZXMuXG5cbkkgYWxzbyBuZWVkIHRvIGNoZWNrIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYXNzb2NpYXRlZCB3aXRoIHRoZXNlIGNvbXBvbmVudHMgdG8gdW5kZXJzdGFuZCB3aGF0IGNvbmRpdGlvbnMgYnJpbmcgdGhlbSBpbnRvIHBsYXk6XG5cbiogICBgTFJVX0dFTmAgLSBUaGlzIGxpa2VseSByZWxhdGVzIHRvIHRoZSBMUlUgKExlYXN0IFJlY2VudGx5IFVzZWQpIG1lY2hhbmlzbSBmb3IgcGFnZSByZWNsYW1hdGlvbi5cbiogICBgS1ZNYCAtIFRoaXMgbWVhbnMgdGhlc2UgYXJlIHJlbGV2YW50IHdoZW4gdGhlIEtlcm5lbCBWaXJ0dWFsIE1hY2hpbmUgaXMgdXNlZC5cbiogICBgUFREVU1QX0RFQlVHRlNgIC0gRGVidWdmcyBpbnRlcmZhY2UgZm9yIHBhZ2UgdGFibGUgZHVtcGluZy5cbiogICBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIC0gVHJhbnNwYXJlbnQgSHVnZSBQYWdlcy4gVGhpcyBpcyBjcnVjaWFsIGFzIGl0IGhhcyBhIGRpcmVjdCBpbmZsdWVuY2Ugb24gdGhlIHBhZ2UgdGFibGUgc3RydWN0dXJlLlxuXG5MZXQgbWUgYWxzbyB2ZXJpZnkgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGRvZXMgaW5kZWVkIGVuYWJsZSBgQ09ORklHX0hBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURgLiBUaGF0J3MgYSByZWFzb25hYmxlIGFzc3VtcHRpb24sIGJ1dCBJIG5lZWQgdG8gY29uZmlybSB0aGF0IHJlbGF0aW9uc2hpcC4gVGhpcyB3aWxsIGdpdmUgbWUgYSB2ZXJ5IHNoYXJwIHBpY3R1cmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NTEwLCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzA2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM2OjU4LjIxNDgwMTY4NloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEzMzk1ODQzNywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9LY29uZmlnPTEwODY9Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbi0tXFxuYXJjaC9LY29uZmlnLTEwODgtXFxuYXJjaC9LY29uZmlnOjEwODk6Y29uZmlnIEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRV9QVURcXG5hcmNoL0tjb25maWctMTA5MC1cXHRib29sXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM3OjAwLjM0ODc2Nzg5M1oiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNDQ3OTQzNTUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aG9zZSB0aG91Z2h0cyBmcm9tIGEgZmlyc3QtcGVyc29uLCBleHBlcnQgcGVyc3BlY3RpdmUsIGFpbWluZyBmb3IgYSBmdWxzb21lIHJlbmRlcmluZzpcblxuKipJbnZlc3RpZ2F0aW5nIEFyY2hpdGVjdHVyZS1TcGVjaWZpYyBTZWxlY3Rpb24qKlxuXG5BbHJpZ2h0LCBJJ20gdGhpbmtpbmcgYWJvdXQgaG93IHRoaXMgcGFydGljdWxhciBjb21wb25lbnQgaXMgY2hvc2VuIHdpdGhpbiBhIHN5c3RlbS4gTXkgaW5pdGlhbCBpbnN0aW5jdCBpcyB0aGF0IHRoZSBzZWxlY3Rpb24gcHJvY2VzcyBpcywgaW4gZmFjdCwgZHJpdmVuIGJ5IHRoZSBzeXN0ZW0ncyBhcmNoaXRlY3R1cmUgaXRzZWxmLiBTbywgSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFzc3VtcHRpb24uIEl0IHNlZW1zIGxvZ2ljYWwsIGJ1dCBsZXQncyBub3QgYXNzdW1lIGFueXRoaW5nLlxuXG5NeSBuZXh0IHN0ZXAgaXMgdG8gZHJpbGwgZG93biBpbnRvIGEgY29uY3JldGUgZXhhbXBsZS4gSSBuZWVkIHRvIHNwZWNpZmljYWxseSBjaGVjayB3aGV0aGVyIHRoZSB4ODYgYXJjaGl0ZWN0dXJlIGlzIGEgdHJpZ2dlciBmb3IgdGhlIHNlbGVjdGlvbiBwcm9jZXNzLiBJIG5lZWQgdG8gY29uZmlybSB3aGV0aGVyIHg4NiBzeXN0ZW1zIHdpbGwgc2VsZWN0IHRoaXMgY29tcG9uZW50LiBJcyB4ODYgYSByZWxpYWJsZSBpbmRpY2F0b3I/IEFyZSB0aGVyZSBleGNlcHRpb25zPyBJIG5lZWQgdG8gYW5hbHl6ZSBob3cgdGhhdCBhcmNoaXRlY3R1cmUgaW50ZXJhY3RzIHdpdGggYW5kIHNlbGVjdHMgdGhlIGNvbXBvbmVudCBpbiBxdWVzdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6MjY1OTksIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNzowMy43OTY3MTU0ODZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE1MDcwMjk4MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFX1BVRFwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9LY29uZmlnXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L0tjb25maWc9NTg9Y29uZmlnIFg4Nlxcbi0tXFxuYXJjaC94ODYvS2NvbmZpZy0yMTAtXFx0c2VsZWN0IEhBVkVfQVJDSF9UUkFOU1BBUkVOVF9IVUdFUEFHRVxcbmFyY2gveDg2L0tjb25maWc6MjExOlxcdHNlbGVjdCBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VfUFVEIGlmIFg4Nl82NFxcbmFyY2gveDg2L0tjb25maWctMjEyLVxcdHNlbGVjdCBIQVZFX0FSQ0hfVVNFUkZBVUxURkRfV1AgICAgICAgICBpZiBYODZfNjQgXFx1MDAyNlxcdTAwMjYgVVNFUkZBVUxURkRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMjNUMTc6Mzc6MDMuOTQ3NDIyOTI1WiIsIlNlcSI6NDUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY1NTg5OTcyODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTXkgQ3VycmVudCBBbmFseXNpcyBvZiBSZWxldmFudCBLZXJuZWwgQ29uZmlndXJhdGlvbnMgYW5kIFN5bWJvbHMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGNvbmZpcm1lZCB0aG9zZSBjb25maWd1cmF0aW9ucyBhcmUgaW5kZWVkIHJlbGV2YW50OiBgTFJVX0dFTmAsIGBLVk1gLCBgUFREVU1QX0RFQlVHRlNgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gU2VlbXMgb2J2aW91cywgYnV0IGdvb2QgdG8gY2hlY2suXG5cbmBMUlVfR0VOYCBkaXJlY3RseSB0aWVzIGludG8gTUdMUlUsIHNvIHRoYXQncyBzcG90IG9uLiBgS1ZNYCBtYWtlcyBzZW5zZSwgYW5kIHNvIGRvZXMgYFBURFVNUF9ERUJVR0ZTYC5cblxuTm93LCB0aGUgc3ltYm9sIHJlZmluZW1lbnQg4oCTIEkgbmVlZCB0byBrZWVwIHRoZSBmb2N1cyBsaXN0IG1hbmFnZWFibGUuIEkndmUgbmFycm93ZWQgaXQgZG93biB0bzogYHdhbGtfcHVkX3JhbmdlYCwgYHZtYWxsb2NfZmF1bHRgLCBgZ2V0X2h2YV9tYXBwaW5nX3NpemVgLCBgaG9zdF9wZm5fbWFwcGluZ19sZXZlbGAsIGBjb2xsYXBzZV9wdWRfcGFnZWAsIGBwb3B1bGF0ZV9wdWRgLCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgLCBhbmQgYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2AuIEVpZ2h0IHN5bWJvbHMsIHRoYXQgc2hvdWxkIGJlIGEgcmVhc29uYWJsZSBzdGFydGluZyBwb2ludC5cblxuSSBqdXN0IGRvdWJsZS1jaGVja2VkIGB3YWxrX3B1ZF9yYW5nZWAgaW4gYG1tL3Ztc2Nhbi5jYC4gSXQncyBzdGF0aWMsIHdoaWNoIHJhaXNlZCBhIG1vbWVudGFyeSBmbGFnLiBIb3dldmVyLCBzeXprYWxsZXIgKmNhbiogc3RpbGwgdGFyZ2V0IGl0IGlmIGl0J3MgaW4gdGhlIGtlcm5lbCBpbWFnZSwgYW5kIHRoZSBmb2N1cyBzeW1ib2xzIGFyZSBmb3IgcHJpb3JpdGl6YXRpb24uIEkgd2FzIHRoaW5raW5nIG9mIHN5c2NhbGxzLCBidXQgdGhpcyBpcyBhYm91dCBkaXJlY3RpbmcgZnV6emluZyBjb3ZlcmFnZSBtb3JlIGVmZmljaWVudGx5LlxuXG5UaGVuIEkgY2hlY2tlZCBgdm1hbGxvY19mYXVsdGAuIEFoLCBzdGF0aWMgaW5saW5lLiBUaGF0J3MgYSBwb3RlbnRpYWwgaXNzdWUg4oCTIGlmIGl0J3Mgc3RhdGljIGlubGluZSwgdGhlIHN5bWJvbCBtaWdodCBub3QgYmUgaW4gdGhlIHN5bWJvbCB0YWJsZSBhdCBhbGwuIEkgbmVlZCB0byBpbnZlc3RpZ2F0ZSB3aGVyZSBpdCdzIGRlZmluZWQuIExldCBtZSBjaGVjayBgYXJjaC9yaXNjdi9tbS9mYXVsdC5jYCB0byBzZWUgaWYgaXQgaXMgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI2OTY4LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzU5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM3OjEwLjUwNjQyMzg1NloiLCJTZXEiOjQ2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTM2MjMzODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZtYWxsb2NfZmF1bHRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9yaXNjdi9tbS9mYXVsdC5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcmlzY3YvbW0vZmF1bHQuYz0xNjA9YmFkX2FyZWEoc3RydWN0IHB0X3JlZ3MgKnJlZ3MsIHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBpbnQgY29kZSxcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0xNjctXFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjE2ODpzdGF0aWMgaW5saW5lIHZvaWQgdm1hbGxvY19mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncywgaW50IGNvZGUsIHVuc2lnbmVkIGxvbmcgYWRkcilcXG5hcmNoL3Jpc2N2L21tL2ZhdWx0LmMtMTY5LXtcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYz0yOTI9dm9pZCBoYW5kbGVfcGFnZV9mYXVsdChzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4tLVxcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zMjYtXFx0ICAgIHVubGlrZWx5KGFkZHIgXFx1MDAzZT0gVk1BTExPQ19TVEFSVCBcXHUwMDI2XFx1MDAyNiBhZGRyIFxcdTAwM2MgVk1BTExPQ19FTkQpKSB7XFxuYXJjaC9yaXNjdi9tbS9mYXVsdC5jOjMyNzpcXHRcXHR2bWFsbG9jX2ZhdWx0KHJlZ3MsIGNvZGUsIGFkZHIpO1xcbmFyY2gvcmlzY3YvbW0vZmF1bHQuYy0zMjgtXFx0XFx0cmV0dXJuO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNzoxMC42NDI2NjIwNjZaIiwiU2VxIjo0NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzY5MTA1MjQ3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGb2N1c2luZyBvbiBoYW5kbGVfcGFnZV9mYXVsdCBmb3IgUklTQy1WIEFuYWx5c2lzKipcblxuT2theSwgc28gd2UncmUgZGVhbGluZyB3aXRoIGEgYHN0YXRpYyBpbmxpbmVgIGZ1bmN0aW9uIGhlcmUuIFRoYXQgbWVhbnMgdGhlIGNvbXBpbGVyJ3MgZ29pbmcgdG8gZm9sZCBpdCBkaXJlY3RseSBpbnRvIGBoYW5kbGVfcGFnZV9mYXVsdGAuIFNvLCBmb3IgbXkgUklTQy1WIGFuYWx5c2lzLCBgaGFuZGxlX3BhZ2VfZmF1bHRgIGJlY29tZXMgdGhlIGNydWNpYWwgc3ltYm9sLCB0aGUgY2VudHJhbCBwb2ludCBvZiBpbnRlcmVzdC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGJlaGF2aW9yIGFuZCBob3cgdGhpcyBpbmxpbmVkIGZ1bmN0aW9uIGludGVyYWN0cyB3aXRoIGl0LlxuXG5Ob3csIGxldCdzIHBpdm90IHRvIGNoZWNraW5nIGB3YWxrX3B1ZF9yYW5nZWAg4oCTIEknbGwgZmluZCBpdCBpbiBgbW0vdm1zY2FuLmNgLiBJdCBzaG91bGQgcHJvdmlkZSBzb21lIGluc2lnaHQgaW50byB0aGUgY29yZSB3b3JraW5ncywgY29uc2lkZXJpbmcgYGhhbmRsZV9wYWdlX2ZhdWx0YCBpcyBnb2luZyB0byBiZSBpbmxpbmVkIHdpdGggYHdhbGtfcHVkX3JhbmdlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjc5NTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo2MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNzoxNC4zMzM3MTgxNTJaIiwiU2VxIjo0OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwMDM2MjUyMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ3YWxrX3B1ZF9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS92bXNjYW4uY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS92bXNjYW4uYz0zNjM2PXN0YXRpYyB2b2lkIHdhbGtfcG1kX3JhbmdlKHB1ZF90ICpwdWQsIHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vdm1zY2FuLmMtMzcwOC1cXG5tbS92bXNjYW4uYzozNzA5OnN0YXRpYyBpbnQgd2Fsa19wdWRfcmFuZ2UocDRkX3QgKnA0ZCwgdW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQsXFxubW0vdm1zY2FuLmMtMzcxMC1cXHRcXHRcXHQgIHN0cnVjdCBtbV93YWxrICphcmdzKVxcbi0tXFxubW0vdm1zY2FuLmM9Mzc1MT1zdGF0aWMgdm9pZCB3YWxrX21tKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCBzdHJ1Y3QgbHJ1X2dlbl9tbV93YWxrICp3YWxrKVxcbi0tXFxubW0vdm1zY2FuLmMtMzc1NC1cXHRcXHQudGVzdF93YWxrID0gc2hvdWxkX3NraXBfdm1hLFxcbm1tL3Ztc2Nhbi5jOjM3NTU6XFx0XFx0LnA0ZF9lbnRyeSA9IHdhbGtfcHVkX3JhbmdlLFxcbm1tL3Ztc2Nhbi5jLTM3NTYtXFx0XFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTIzVDE3OjM3OjE0LjQzNDA4NjQ0NVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoxMDkyODI2NTUxOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiBQb3RlbnRpYWwgRnV6emluZyBUYXJnZXRzKipcblxuT2theSwgc28gSSdtIHRoaW5raW5nIGFib3V0IHRoaXMgcGF0Y2ggYW5kIHdoZXJlIGl0IHRvdWNoZXMgdGhlIGtlcm5lbC4gVGhlIGdvYWwgaXMgdG8gaWRlbnRpZnkgZnVuY3Rpb25zIHRoYXQgYXJlIGxpa2VseSB0byBiZW5lZml0IGZyb20gZnV6emluZyB0byBlbnN1cmUgdGhlIGNoYW5nZXMgZG9uJ3QgaW50cm9kdWNlIHJlZ3Jlc3Npb25zIGluIHBhZ2UgdGFibGUgdHJhdmVyc2FsLiBTaW5jZSBpdCBtb2RpZmllcyBwYWdlIHRhYmxlIGZvbGRpbmcgYWNyb3NzIHZhcmlvdXMgYXJjaGl0ZWN0dXJlcywgSSdtIGZvY3VzaW5nIG9uIHRoZSBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGFzcGVjdC5cblxuRmlyc3QsIEkgbmVlZCB0byBzZWUgd2hhdCBzeW1ib2xzIGFyZSBpbiBwbGF5LiBJIHN0YXJ0ZWQgYnkgY2hlY2tpbmcgdGhlIHR5cGUgb2Ygc2V2ZXJhbCBmdW5jdGlvbnMgdGhhdCBzZWVtIHJlbGV2YW50OiBgc3RhdGljIGludGAgaXMgZGVmaW5pdGVseSBhIHNpZ24gdGhhdCB0aGV5J2xsIGJlIGluIHRoZSBzeW1ib2wgdGFibGUsIHNvIHRob3NlIGFyZSBnb29kIGNhbmRpZGF0ZXMuIEkgbG9va2VkIGF0IGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAgaW4gYGFyY2gvcmlzY3Yva3ZtL21tdS5jYCwgYW5kIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCBpbiBgYXJjaC9sb29uZ2FyY2gva3ZtL21tdS5jYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCBhbmQgYHBvcHVsYXRlX3B1ZGAgaW4gYGFyY2gveDg2L21tL3BhdC9zZXRfbWVtb3J5LmNgLCBhbmQgYHB1ZHBfc2V0X2FjY2Vzc19mbGFnc2AgaW4gYGFyY2gveDg2L21tL3BndGFibGUuY2AuICBJIGFsc28gY2hlY2tlZCBgcHRkdW1wX3dhbGtfcGdkX2xldmVsX2NvcmVgIGluIGBhcmNoL3g4Ni9tbS9kdW1wX3BhZ2V0YWJsZXMuY2Agd2hpY2ggdHVybmVkIG91dCB0byBiZSBhIGBib29sYCwgd2hpY2ggZG9lc24ndCBjaGFuZ2UgdGhpbmdzLlxuXG5Jbml0aWFsbHksIHRoaXMgZ2F2ZSBtZSBhIGxpc3Q6IGB3YWxrX3B1ZF9yYW5nZWAsIGBoYW5kbGVfcGFnZV9mYXVsdGAsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAsIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCwgYHBvcHVsYXRlX3B1ZGAsIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYC5cblxuVGhlbiBJIHJlbWVtYmVyZWQgYSBjcml0aWNhbCBndWlkZWxpbmU6IGF2b2lkIGhvdC1wYXRoIGZ1bmN0aW9ucy4gYGhhbmRsZV9wYWdlX2ZhdWx0YCBpcyBkZWZpbml0ZWx5IGEgaG90IHBhdGgsIHNvIGl0J3Mgb2ZmIHRoZSBsaXN0LiBSZW1vdmluZyB0aGF0LCBJJ20gbGVmdCB3aXRoIHRoZXNlIGZvY3VzIHN5bWJvbHM6IGB3YWxrX3B1ZF9yYW5nZWAsIGBnZXRfaHZhX21hcHBpbmdfc2l6ZWAsIGBob3N0X3Bmbl9tYXBwaW5nX2xldmVsYCwgYGNvbGxhcHNlX3B1ZF9wYWdlYCwgYHBvcHVsYXRlX3B1ZGAsIGBwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZWAsIGFuZCBgcHVkcF9zZXRfYWNjZXNzX2ZsYWdzYC4gVGhpcyBzZWVtcyBsaWtlIGEgc29saWQgbGlzdCB0byBzdGFydCB3aXRoLlxuXG5JJ20gYWxzbyBrZWVwaW5nIGluIG1pbmQgdGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zOiBgTFJVX0dFTmAsIGBLVk1gLCBgUFREVU1QX0RFQlVHRlNgLCBhbmQgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCwgd2hpY2ggd2lsbCBpbmZsdWVuY2UgaG93IEkgc2V0IHVwIHRoZSBmdXp6aW5nIGVudmlyb25tZW50LlxuXG5UaGUgcmVhc29uaW5nIGlzIHRoYXQgdGhpcyBwYXRjaCBpcyB0b3VjaGluZyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IOKAkyBob3cgd2Ugd2FsayBhbmQgYWNjZXNzIGZvbGRlZCBwYWdlIHRhYmxlcy4gSXQgaW1wYWN0cyBLVk0sIE1HTFJVLCBQQVQsIGFuZCBwYWdlIHRhYmxlIGR1bXBpbmcuIFRoZXNlIGFyZSBmdW5jdGlvbmFsIGNoYW5nZXMsIGFuZCBmdXp6aW5nIGlzIHRoZSByaWdodCBhcHByb2FjaCB0byBlbnN1cmUgdGhlcmUgYXJlbid0IGFueSByZWdyZXNzaW9ucyBpbiBwYWdlIHRhYmxlIHRyYXZlcnNhbCBvciBhY2Nlc3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4NDY2LCJPdXRwdXRUb2tlbnMiOjIzNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY1MCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0yM1QxNzozNzoyNS4zNjIzNTQ4NTNaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMjY2MjE4MDEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIktWTVwiLFxuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2Fsa19wdWRfcmFuZ2VcIixcbiAgICBcImdldF9odmFfbWFwcGluZ19zaXplXCIsXG4gICAgXCJob3N0X3Bmbl9tYXBwaW5nX2xldmVsXCIsXG4gICAgXCJjb2xsYXBzZV9wdWRfcGFnZVwiLFxuICAgIFwicG9wdWxhdGVfcHVkXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZVwiLFxuICAgIFwicHVkcF9zZXRfYWNjZXNzX2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBmb2xkaW5nIG1hY3JvcyBhbmQgZnVuY3Rpb25zIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChBUk0sIEFSTTY0LCBMb29uZ0FyY2gsIE1JUFMsIE9wZW5SSVNDLCBSSVNDLVYsIHg4NikgYW5kIGdlbmVyaWMgaGVhZGVycy4gSXQgZml4ZXMgaG93IGZvbGRlZCBwYWdlIHRhYmxlcyBhcmUgd2Fsa2VkIGFuZCBhY2Nlc3NlZCwgd2hpY2ggaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gVGhlIGNoYW5nZXMgYWZmZWN0IEtWTSBwYWdlIGZhdWx0IGhhbmRsZXJzLCBNR0xSVSBwYWdlIHRhYmxlIHdhbGtlcnMsIFBBVCBtZW1vcnkgc2V0dGluZywgYW5kIHBhZ2UgdGFibGUgZHVtcGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHBhZ2UgdGFibGUgdHJhdmVyc2FsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIkxSVV9HRU5cIixcbiAgICBcIktWTVwiLFxuICAgIFwiUFREVU1QX0RFQlVHRlNcIixcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwid2Fsa19wdWRfcmFuZ2VcIixcbiAgICBcImdldF9odmFfbWFwcGluZ19zaXplXCIsXG4gICAgXCJob3N0X3Bmbl9tYXBwaW5nX2xldmVsXCIsXG4gICAgXCJjb2xsYXBzZV9wdWRfcGFnZVwiLFxuICAgIFwicG9wdWxhdGVfcHVkXCIsXG4gICAgXCJwdGR1bXBfd2Fsa19wZ2RfbGV2ZWxfY29yZVwiLFxuICAgIFwicHVkcF9zZXRfYWNjZXNzX2ZsYWdzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgcGFnZSB0YWJsZSBmb2xkaW5nIG1hY3JvcyBhbmQgZnVuY3Rpb25zIGFjcm9zcyBtdWx0aXBsZSBhcmNoaXRlY3R1cmVzIChBUk0sIEFSTTY0LCBMb29uZ0FyY2gsIE1JUFMsIE9wZW5SSVNDLCBSSVNDLVYsIHg4NikgYW5kIGdlbmVyaWMgaGVhZGVycy4gSXQgZml4ZXMgaG93IGZvbGRlZCBwYWdlIHRhYmxlcyBhcmUgd2Fsa2VkIGFuZCBhY2Nlc3NlZCwgd2hpY2ggaXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBsb2dpYy4gVGhlIGNoYW5nZXMgYWZmZWN0IEtWTSBwYWdlIGZhdWx0IGhhbmRsZXJzLCBNR0xSVSBwYWdlIHRhYmxlIHdhbGtlcnMsIFBBVCBtZW1vcnkgc2V0dGluZywgYW5kIHBhZ2UgdGFibGUgZHVtcGluZy4gVGhlc2UgYXJlIGZ1bmN0aW9uYWwgY2hhbmdlcyB0aGF0IHNob3VsZCBiZSBmdXp6ZWQgdG8gZW5zdXJlIG5vIHJlZ3Jlc3Npb25zIGluIHBhZ2UgdGFibGUgdHJhdmVyc2FsLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+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-workflowfvpr8[1] Phase: Succeeded StartedAt: 2026-07-23 17:37:36 +0000 UTC FinishedAt: 2026-07-23 17:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-23 17:37:36 +0000 UTC FinishedAt: 2026-07-23 17:37:36 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2] Phase: Succeeded StartedAt: 2026-07-23 17:37:36 +0000 UTC FinishedAt: 2026-07-23 22:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 17:37:36 +0000 UTC FinishedAt: 2026-07-23 22:02:51 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 17:37:36 +0000 UTC FinishedAt: 2026-07-23 17:37:47 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 17:37:36 +0000 UTC FinishedAt: 2026-07-23 17:37:42 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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-workflowfvpr8/series-workflowfvpr8-convert-artifact-2107832712/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 17:37:47 +0000 UTC FinishedAt: 2026-07-23 18:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 17:37:47 +0000 UTC FinishedAt: 2026-07-23 18:10:56 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Base,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*140515ca-c6a6-4c2f-8364-5483e3db5aee,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-workflowfvpr8/series-workflowfvpr8-convert-artifact-2107832712/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": "d44f004f-9f90-4472-adc6-6c4d225a3d2b", "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-workflowfvpr8/series-workflowfvpr8-build-action-571266046/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 17:37:47 +0000 UTC FinishedAt: 2026-07-23 18:10:46 +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:*140515ca-c6a6-4c2f-8364-5483e3db5aee,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-workflowfvpr8/series-workflowfvpr8-convert-artifact-2107832712/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": "d44f004f-9f90-4472-adc6-6c4d225a3d2b", "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-workflowfvpr8/series-workflowfvpr8-build-action-571266046/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:10:56 +0000 UTC FinishedAt: 2026-07-23 18:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:10:56 +0000 UTC FinishedAt: 2026-07-23 18:10:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:10:56 +0000 UTC FinishedAt: 2026-07-23 18:11:16 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:10:56 +0000 UTC FinishedAt: 2026-07-23 18:11:04 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-workflowfvpr8/series-workflowfvpr8-convert-artifact-3349597551/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:11:16 +0000 UTC FinishedAt: 2026-07-23 18:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:11:16 +0000 UTC FinishedAt: 2026-07-23 18:13:20 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d44f004f-9f90-4472-adc6-6c4d225a3d2b,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-workflowfvpr8/series-workflowfvpr8-build-action-571266046/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-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:13:30 +0000 UTC FinishedAt: 2026-07-23 18:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:13:30 +0000 UTC FinishedAt: 2026-07-23 18:13:30 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:13:30 +0000 UTC FinishedAt: 2026-07-23 18:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:13:30 +0000 UTC FinishedAt: 2026-07-23 18:59:26 +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:*140515ca-c6a6-4c2f-8364-5483e3db5aee,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-workflowfvpr8/series-workflowfvpr8-convert-artifact-3349597551/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": "f493046f-65a0-4d20-89e5-b98dd4c52140", "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-workflowfvpr8/series-workflowfvpr8-build-action-348537091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:13:30 +0000 UTC FinishedAt: 2026-07-23 18:59:16 +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:*140515ca-c6a6-4c2f-8364-5483e3db5aee,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-workflowfvpr8/series-workflowfvpr8-convert-artifact-3349597551/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": "f493046f-65a0-4d20-89e5-b98dd4c52140", "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-workflowfvpr8/series-workflowfvpr8-build-action-348537091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:59:26 +0000 UTC FinishedAt: 2026-07-23 18:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:59:26 +0000 UTC FinishedAt: 2026-07-23 18:59:26 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:59:26 +0000 UTC FinishedAt: 2026-07-23 19:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 18:59:26 +0000 UTC FinishedAt: 2026-07-23 19:01:02 +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:*f493046f-65a0-4d20-89e5-b98dd4c52140,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-workflowfvpr8/series-workflowfvpr8-build-action-348537091/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-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 19:01:12 +0000 UTC FinishedAt: 2026-07-23 22:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 19:01:12 +0000 UTC FinishedAt: 2026-07-23 22:02:51 +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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"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:*d44f004f-9f90-4472-adc6-6c4d225a3d2b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f493046f-65a0-4d20-89e5-b98dd4c52140,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-workflowfvpr8/series-workflowfvpr8-build-action-571266046/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-workflowfvpr8/series-workflowfvpr8-build-action-348537091/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 19:01:12 +0000 UTC FinishedAt: 2026-07-23 19:01:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 19:01:12 +0000 UTC FinishedAt: 2026-07-23 19:01:22 +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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"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-workflowfvpr8/series-workflowfvpr8-convert-artifact-2174215208/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 19:01:12 +0000 UTC FinishedAt: 2026-07-23 19:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 19:01:12 +0000 UTC FinishedAt: 2026-07-23 19:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 19:01:12 +0000 UTC FinishedAt: 2026-07-23 19:01:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 19:01:32 +0000 UTC FinishedAt: 2026-07-23 22:02:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowfvpr8[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"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":["kvm"],"focus_symbols":["walk_pud_range","get_hva_mapping_size","host_pfn_mapping_level","collapse_pud_page","populate_pud","ptdump_walk_pgd_level_core","pudp_set_access_flags"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"8026da5cb0d39f7978af447eb5c967cbd36d1ac6","config_name":"upstream-apparmor-kasan.config","enable_configs":["LRU_GEN","KVM","PTDUMP_DEBUGFS","TRANSPARENT_HUGEPAGE"],"series_id":"1325a0dc-52be-4fee-bc99-6b94d740313a","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-07-23 19:01:32 +0000 UTC FinishedAt: 2026-07-23 22:02:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*d44f004f-9f90-4472-adc6-6c4d225a3d2b,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*f493046f-65a0-4d20-89e5-b98dd4c52140,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-workflowfvpr8/series-workflowfvpr8-build-action-571266046/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-workflowfvpr8/series-workflowfvpr8-build-action-348537091/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-workflowfvpr8/series-workflowfvpr8-convert-artifact-2174215208/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,}