Name: series-workflowzqh4z Phase: Succeeded StartedAt: 2026-06-25 23:17:45 +0000 UTC FinishedAt: 2026-06-26 03:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[0] Phase: Succeeded StartedAt: 2026-06-25 23:17:45 +0000 UTC FinishedAt: 2026-06-25 23:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[0].run-triage Phase: Succeeded StartedAt: 2026-06-25 23:17:45 +0000 UTC FinishedAt: 2026-06-25 23:43:58 +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": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEMCG" ], "series_id": "7ccd4154-adb9-445f-958d-3b2e577511fc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_slab_obj_exts", "alloc_slab_obj_exts_early" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW5maW5pdGUgcmVjdXJzaW9uL2RlYWRsb2NrIGR1cmluZyBzbGFiIHRlYXJkb3duIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGlzIGFsbG9jYXRlZCBmcm9tIGEgc3RyaWN0bHkgbGFyZ2VyIGttYWxsb2MgY2FjaGUuIFRoaXMgcHJldmVudHMgYSBjeWNsZSB3aGVyZSBhIHNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMzo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ4NGVhNGE0MzcxNTk3ZWE3MjMzMGIzNDRlMTVhZDEwZDdjYTQ4OWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAyMzo0MjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IDllYzc3NGRjNzAwOTY5Li40OGU1NGQzNDA4NjVhNSAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jXG5AQCAtMjEyNCwxNSAmIzQzOzIxMjQsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB9XG4gXG4gLypcbi0gKiBDYWxjdWxhdGUgdGhlIGFsbG9jYXRpb24gc2l6ZSBmb3Igc2xhYm9ial9leHQgYXJyYXkuXG4mIzQzOyAqIFNpemUgb2YgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGZvciBAc2xhYi5cbiAgKlxuLSAqIFdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQsIHRoZSBvYmpfZXh0cyBhcnJheVxuLSAqIGNvdWxkIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgY2FjaGUgaXQmIzM5O3MgYmVpbmcgYWxsb2NhdGVkIGZvci5cbi0gKiBUaGlzIHdvdWxkIHByZXZlbnQgdGhlIHNsYWIgZnJvbSBldmVyIGJlaW5nIGZyZWVkIGJlY2F1c2UgaXQgd291bGRcbi0gKiBhbHdheXMgY29udGFpbiBhdCBsZWFzdCBvbmUgYWxsb2NhdGVkIG9iamVjdCAoaXRzIG93biBvYmpfZXh0cyBhcnJheSkuXG4tICpcbi0gKiBUbyBhdm9pZCB0aGlzLCBpbmNyZWFzZSB0aGUgYWxsb2NhdGlvbiBzaXplIHdoZW4gd2UgZGV0ZWN0IHRoZSBhcnJheVxuLSAqIG1heSBjb21lIGZyb20gdGhlIHNhbWUgY2FjaGUsIGZvcmNpbmcgaXQgdG8gdXNlIGEgZGlmZmVyZW50IGNhY2hlLlxuJiM0MzsgKiBUaGUgYXJyYXkgaXMgaXRzZWxmIGttYWxsb2MoKSYjMzk7ZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxuJiM0MzsgKiBrbWFsbG9jIGNhY2hlIHRoYW4gQHMsIHRoZSBcJiMzNDtzbGFiIGhvbGRzIGFub3RoZXIgc2xhYiYjMzk7cyBhcnJheVwmIzM0OyByZWxhdGlvbiBjb3VsZFxuJiM0MzsgKiBmb3JtIGEgY3ljbGUgKHNlbGYsIG9yIGUuZy4ga21hbGxvYy01MTIgXHUwMDNjLVx1MDAzZSBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzXG4mIzQzOyAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXHUwMDNlIGtmcmVlKCkgLVx1MDAzZSBkaXNjYXJkX3NsYWIoKVxuJiM0MzsgKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYVxuJiM0MzsgKiBEQUcgKGFjeWNsaWMpLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgZ2ZwX3QgZ2ZwKVxuQEAgLTIxNDcsMTQgJiM0MzsyMTQ2LDkgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0cmV0dXJuIHN6O1xuIFxuIFx0b2JqX2V4dHNfY2FjaGUgPSBrbWFsbG9jX3NsYWIoc3osIE5VTEwsIGdmcCwgX19rbWFsbG9jX3Rva2VuKDApKTtcbi1cdC8qXG4tXHQgKiBXZSBjYW4mIzM5O3Qgc2ltcGx5IGNvbXBhcmUgcyB3aXRoIG9ial9leHRzX2NhY2hlLCBiZWNhdXNlIHBhcnRpdGlvbmVkIGttYWxsb2Ncbi1cdCAqIGNhY2hlcyBoYXZlIG11bHRpcGxlIGNhY2hlcyBwZXIgc2l6ZSwgc2VsZWN0ZWQgYnkgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZS5cbi1cdCAqIFNpbmNlIGNhbGxlciBhZGRyZXNzIG9yIHR5cGUgbWF5IGRpZmZlciBiZXR3ZWVuIGttYWxsb2Nfc2xhYigpIGFuZCBhY3R1YWxcbi1cdCAqIGFsbG9jYXRpb24sIGJ1bXAgc2l6ZSB3aGVuIHNpemVzIGFyZSBlcXVhbC5cbi1cdCAqL1xuLVx0aWYgKHMtXHUwMDNlb2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUpXG4tXHRcdHJldHVybiBvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSAmIzQzOyAxO1xuJiM0MztcdC8qIGNvbXBhcmUgb2JqZWN0X3NpemUsIG5vdCB0aGUgY2FjaGUgcG9pbnRlciAocGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpICovXG4mIzQzO1x0aWYgKG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplIFx1MDAzYz0gcy1cdTAwM2VvYmplY3Rfc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBzLVx1MDAzZW9iamVjdF9zaXplICYjNDM7IDE7XG4gXG4gXHRyZXR1cm4gc3o7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW5maW5pdGUgcmVjdXJzaW9uL2RlYWRsb2NrIGR1cmluZyBzbGFiIHRlYXJkb3duIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGlzIGFsbG9jYXRlZCBmcm9tIGEgc3RyaWN0bHkgbGFyZ2VyIGttYWxsb2MgY2FjaGUuIFRoaXMgcHJldmVudHMgYSBjeWNsZSB3aGVyZSBhIHNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDg0ZWE0YTQzNzE1OTdlYTcyMzMwYjM0NGUxNWFkMTBkN2NhNDg5ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDIzOjQyOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IDllYzc3NGRjNzAwOTY5Li40OGU1NGQzNDA4NjVhNSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuYwpAQCAtMjEyNCwxNSAmIzQzOzIxMjQsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYikKIH0KIAogLyoKLSAqIENhbGN1bGF0ZSB0aGUgYWxsb2NhdGlvbiBzaXplIGZvciBzbGFib2JqX2V4dCBhcnJheS4KJiM0MzsgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuCiAgKgotICogV2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZW5hYmxlZCwgdGhlIG9ial9leHRzIGFycmF5Ci0gKiBjb3VsZCBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGNhY2hlIGl0JiMzOTtzIGJlaW5nIGFsbG9jYXRlZCBmb3IuCi0gKiBUaGlzIHdvdWxkIHByZXZlbnQgdGhlIHNsYWIgZnJvbSBldmVyIGJlaW5nIGZyZWVkIGJlY2F1c2UgaXQgd291bGQKLSAqIGFsd2F5cyBjb250YWluIGF0IGxlYXN0IG9uZSBhbGxvY2F0ZWQgb2JqZWN0IChpdHMgb3duIG9ial9leHRzIGFycmF5KS4KLSAqCi0gKiBUbyBhdm9pZCB0aGlzLCBpbmNyZWFzZSB0aGUgYWxsb2NhdGlvbiBzaXplIHdoZW4gd2UgZGV0ZWN0IHRoZSBhcnJheQotICogbWF5IGNvbWUgZnJvbSB0aGUgc2FtZSBjYWNoZSwgZm9yY2luZyBpdCB0byB1c2UgYSBkaWZmZXJlbnQgY2FjaGUuCiYjNDM7ICogVGhlIGFycmF5IGlzIGl0c2VsZiBrbWFsbG9jKCkmIzM5O2QuIElmIGl0IGNhbWUgZnJvbSB0aGUgc2FtZSBvciBhIHNtYWxsZXIKJiM0MzsgKiBrbWFsbG9jIGNhY2hlIHRoYW4gQHMsIHRoZSAmIzM0O3NsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5JiMzNDsgcmVsYXRpb24gY291bGQKJiM0MzsgKiBmb3JtIGEgY3ljbGUgKHNlbGYsIG9yIGUuZy4ga21hbGxvYy01MTIgJmx0Oy0mZ3Q7IGttYWxsb2MtMWspIHRoYXQgcGlucyB0aGUgc2xhYnMKJiM0MzsgKiBmb3JldmVyIGFuZCByZWN1cnNlcyB2aWEgZnJlZV9zbGFiX29ial9leHRzKCkgLSZndDsga2ZyZWUoKSAtJmd0OyBkaXNjYXJkX3NsYWIoKQomIzQzOyAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhCiYjNDM7ICogREFHIChhY3ljbGljKS4KICAqLwogc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAkJCQkJIHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApCkBAIC0yMTQ3LDE0ICYjNDM7MjE0Niw5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCXJldHVybiBzejsKIAogCW9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7Ci0JLyoKLQkgKiBXZSBjYW4mIzM5O3Qgc2ltcGx5IGNvbXBhcmUgcyB3aXRoIG9ial9leHRzX2NhY2hlLCBiZWNhdXNlIHBhcnRpdGlvbmVkIGttYWxsb2MKLQkgKiBjYWNoZXMgaGF2ZSBtdWx0aXBsZSBjYWNoZXMgcGVyIHNpemUsIHNlbGVjdGVkIGJ5IGNhbGxlciBhZGRyZXNzIG9yIHR5cGUuCi0JICogU2luY2UgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZSBtYXkgZGlmZmVyIGJldHdlZW4ga21hbGxvY19zbGFiKCkgYW5kIGFjdHVhbAotCSAqIGFsbG9jYXRpb24sIGJ1bXAgc2l6ZSB3aGVuIHNpemVzIGFyZSBlcXVhbC4KLQkgKi8KLQlpZiAocy0mZ3Q7b2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtJmd0O29iamVjdF9zaXplKQotCQlyZXR1cm4gb2JqX2V4dHNfY2FjaGUtJmd0O29iamVjdF9zaXplICYjNDM7IDE7CiYjNDM7CS8qIGNvbXBhcmUgb2JqZWN0X3NpemUsIG5vdCB0aGUgY2FjaGUgcG9pbnRlciAocGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpICovCiYjNDM7CWlmIChvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemUgJmx0Oz0gcy0mZ3Q7b2JqZWN0X3NpemUpCiYjNDM7CQlyZXR1cm4gcy0mZ3Q7b2JqZWN0X3NpemUgJiM0MzsgMTsKIAogCXJldHVybiBzejsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG1tL3NsdWIuY2AuIEl0JiMzOTtzIGZvY3VzZWQgb24gbW9kaWZ5aW5nIHRoZSBgb2JqX2V4dHNfYWxsb2Nfc2l6ZSgpYCBmdW5jdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhY3R1YWxseSBxdWl0ZSBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlLiBQcmV2aW91c2x5LCB0aGUgbG9naWMgY29tcGFyZWQgYHMtJmd0O29iamVjdF9zaXplYCBkaXJlY3RseSB3aXRoIGBvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemVgLiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhpcyB3aXRoIGEgY2hlY2sgdG8gc2VlIGlmIGBvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgcy0mZ3Q7b2JqZWN0X3NpemVgLiBUaGVuLCBpdCBqdXN0IHJldHVybnMgYHMtJmd0O29iamVjdF9zaXplICYjNDM7IDFgLiBUaGlzIHN1YnRsZSBjaGFuZ2UgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIHByb2ZpbGUgbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIFNMVUIuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGF0IHdlIGFyZSBjb21wYXJpbmcgdGhlIHNpemVzLCBub3QgdGhlIGNhY2hlIHBvaW50ZXJzICh0byBhY2NvdW50IGZvciBwYXJ0aXRpb25lZCBrbWFsbG9jIGNhY2hlcykuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHRoYXQgY2FsbHMgYG9ial9leHRzX2FsbG9jX3NpemVgLiBUaGlzIHByb2JhYmx5IGNoYW5nZXMgdGhlIHVwcGVyIGJvdW5kcyBvZiBhbGxvY2F0ZWQgc2l6ZSwgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB3aWxsIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIHNsdWIgYWxsb2NhdG9yIGFuZCBpdHMgcHJvZmlsaW5nIGxvZ2ljLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBjaGVja2luZyB0aGUgY29kZSBvZiB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqX2V4dHNfYWxsb2Nfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEyMT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTM1LSAqL1xubW0vc2x1Yi5jOjIxMzY6c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMTM3LVx0XHRcdFx0XHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcbi0tXG5tbS9zbHViLmM9MjE1Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIxNzEtXG5tbS9zbHViLmM6MjE3MjpcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xubW0vc2x1Yi5jLTIxNzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgT2JqZWN0IEV4dGVuc2lvbiBBbGxvY2F0aW9uKioKCk9rYXksIHNvIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBvYmplY3QgZXh0ZW5zaW9ucy4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJlbGllcyBvbiBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgdG8gZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgYW1vdW50IG9mIG1lbW9yeS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgZGVzaWduOyBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zIGFuZCBhbGwgdGhhdC4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoYXQmIzM5O3MgY2FsbGluZyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaW4gdGhlIGZpcnN0IHBsYWNlPyogVGhlIGFsbG9jYXRpb24gZnVuY3Rpb24mIzM5O3MgY2FsbGVycyBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVzZS1jYXNlIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBvYmplY3QgZXh0ZW5zaW9ucyBhcmUgY3JlYXRlZCBhbmQgbWFuYWdlZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uLCB0aGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBzdGFydCBkaWdnaW5nIGluIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEzNj1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0yMTU1LVxubW0vc2x1Yi5jOjIxNTY6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxNTctXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIyMzA9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjY5LSAqL1xubW0vc2x1Yi5jOjIyNzA6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtMjI3MS17XG4tLVxubW0vc2x1Yi5jPTIzMjE9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjMyNC1cbm1tL3NsdWIuYzoyMzI1OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMyNi1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzMzE9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMzM0LVxubW0vc2x1Yi5jOjIzMzU6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMzNi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTIzNDU9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yMzQ4LVx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFx1MDAyNlx1MDAyNlxubW0vc2x1Yi5jOjIzNDk6XHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG5tbS9zbHViLmMtMjM1MC1cdFx0cHJfd2Fybl9vbmNlKFwmIzM0OyVzLCAlczogRmFpbGVkIHRvIGNyZWF0ZSBzbGFiIGV4dGVuc2lvbiB2ZWN0b3IhXFxuXCYjMzQ7LFxuLS1cbm1tL3NsdWIuYz0zMzUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcbi0tXG5tbS9zbHViLmMtMzM1OC1cdFx0XHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcbm1tL3NsdWIuYzozMzU5Olx0XHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcbm1tL3NsdWIuYy0zMzYwLVx0XHRcdFx0ICAgIGFsbG9jX2ZsYWdzIHwgU0xBQl9BTExPQ19ORVdfU0xBQik7XG4tLVxubW0vc2x1Yi5jPTMzODE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMzQzMS1cdCAqL1xubW0vc2x1Yi5jOjM0MzI6XHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xubW0vc2x1Yi5jLTM0MzMtXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlbHZpbmcgaW50byBTbGFiIE9iamVjdCBFeHRlbnNpb25zKioKClJpZ2h0LCBzbyB0aGlzIG5ldyBmZWF0dXJlIEkmIzM5O20gbG9va2luZyBhdCwgaXQmIzM5O3MgZGVmaW5pdGVseSB0aWVkIHRvIGBzbGFiX29ial9leHRzYC4gSW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcg4oCTIHRoYXQmIzM5O3MgdGhlIHVzdWFsIHRlcnJpdG9yeSBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgdGhlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHByZWNpc2VseSB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBmbGlwcGluZyB0aGUgc3dpdGNoIG9uIGBzbGFiX29ial9leHRzYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIFVuZGVyc3RhbmRpbmcgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMgaXMgY3J1Y2lhbCBmb3IgcmVhbGx5IGdyYXNwaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBmZWF0dXJlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsYWJfb2JqX2V4dHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTc2MT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X29yaWdfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy03ODktICovXG5tbS9zbHViLmM6NzkwOnN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3NsYWJfb2JqX2V4dHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtNzkxLXtcbi0tXG5tbS9zbHViLmM9ODI4PXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtODMzLVxubW0vc2x1Yi5jOjgzNDpcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbm1tL3NsdWIuYy04MzUtXHRpZiAoIW9ial9leHRzKVxuLS1cbm1tL3NsdWIuYy04NDItI2Vsc2Vcbm1tL3NsdWIuYzo4NDM6c3RhdGljIGlubGluZSBib29sIG5lZWRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy04NDQte1xuLS1cbm1tL3NsdWIuYz0yMDY1PXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcbi0tXG5tbS9zbHViLmMtMjA3MC1cdG9ial9zbGFiID0gdmlydF90b19zbGFiKG9iaik7XG5tbS9zbHViLmM6MjA3MTpcdHNsYWJfZXh0cyA9IHNsYWJfb2JqX2V4dHMob2JqX3NsYWIpO1xubW0vc2x1Yi5jLTIwNzItXHRpZiAoc2xhYl9leHRzKSB7XG5tbS9zbHViLmM6MjA3MzpcdFx0Z2V0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcbm1tL3NsdWIuYy0yMDc0LVx0XHR1bnNpZ25lZCBpbnQgb2ZmcyA9IG9ial90b19pbmRleChvYmpfc2xhYi1cdTAwM2VzbGFiX2NhY2hlLFxuLS1cbm1tL3NsdWIuYy0yMDc5LVx0XHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShcdTAwMjZleHQtXHUwMDNlcmVmKSkpIHtcbm1tL3NsdWIuYzoyMDgwOlx0XHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG5tbS9zbHViLmMtMjA4MS1cdFx0XHRyZXR1cm47XG4tLVxubW0vc2x1Yi5jLTIwODYtXHRcdHNldF9jb2RldGFnX2VtcHR5KFx1MDAyNmV4dC1cdTAwM2VyZWYpO1xubW0vc2x1Yi5jOjIwODc6XHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG5tbS9zbHViLmMtMjA4OC1cdH1cbi0tXG5tbS9zbHViLmM9MjExNj1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tLVxubW0vc2x1Yi5jLTIxMjAtXG5tbS9zbHViLmM6MjEyMTpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxubW0vc2x1Yi5jLTIxMjIte1xuLS1cbm1tL3NsdWIuYy0yMTMxLSAqIGZvcm0gYSBjeWNsZSAoc2VsZiwgb3IgZS5nLiBrbWFsbG9jLTUxMiBcdTAwM2MtXHUwMDNlIGttYWxsb2MtMWspIHRoYXQgcGlucyB0aGUgc2xhYnNcbm1tL3NsdWIuYzoyMTMyOiAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXHUwMDNlIGtmcmVlKCkgLVx1MDAzZSBkaXNjYXJkX3NsYWIoKVxubW0vc2x1Yi5jLTIxMzMtICogYXQgdGVhcmRvd24uIEZvcmNlIGl0IGludG8gYSBzdHJpY3RseSBsYXJnZXIgY2FjaGUgdG8ga2VlcCB0aGF0IHJlbGF0aW9uIGFcbi0tXG5tbS9zbHViLmM9MjEzNj1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0yMTU1LVxubW0vc2x1Yi5jOjIxNTY6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxNTctXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTIxODMtXHRcdGlmICghbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzbGFiKSBcdTAwMjZcdTAwMjZcbm1tL3NsdWIuYzoyMTg0Olx0XHQgICAgc2xhYl9vYmpfZXh0cyhzbGFiKSlcbm1tL3NsdWIuYy0yMTg1LVx0XHRcdHJldHVybiAwO1xuLS1cbm1tL3NsdWIuYy0yMjI5LVxubW0vc2x1Yi5jOjIyMzA6c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxubW0vc2x1Yi5jLTIyMzEte1xuLS1cbm1tL3NsdWIuYy0yMjMzLVxubW0vc2x1Yi5jOjIyMzQ6XHRvYmpfZXh0cyA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKilzbGFiX29ial9leHRzKHNsYWIpO1xubW0vc2x1Yi5jLTIyMzUtXHRpZiAoIW9ial9leHRzKSB7XG4tLVxubW0vc2x1Yi5jLTIyNjktICovXG5tbS9zbHViLmM6MjI3MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMjcxLXtcbi0tXG5tbS9zbHViLmMtMjI3Ny1cbm1tL3NsdWIuYzoyMjc4Olx0aWYgKCFuZWVkX3NsYWJfb2JqX2V4dHMocykpXG5tbS9zbHViLmMtMjI3OS1cdFx0cmV0dXJuO1xuLS1cbm1tL3NsdWIuYy0yMjg1LVxubW0vc2x1Yi5jOjIyODY6XHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbm1tL3NsdWIuYy0yMjg3LVx0XHRtZW1zZXQoYWRkciwgMCwgb2JqX2V4dHNfc2l6ZV9pbl9zbGFiKHNsYWIpKTtcbm1tL3NsdWIuYzoyMjg4Olx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjI4OS1cbi0tXG5tbS9zbHViLmMtMjMwMC1cbm1tL3NsdWIuYzoyMzAxOlx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjMwMi1cdFx0Zm9yX2VhY2hfb2JqZWN0KGFkZHIsIHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgc2xhYi1cdTAwM2VvYmplY3RzKVxuLS1cbm1tL3NsdWIuYy0yMzA0LVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XG5tbS9zbHViLmM6MjMwNTpcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xubW0vc2x1Yi5jLTIzMDYtXG4tLVxubW0vc2x1Yi5jPTIzMTc9c3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKVxuLS1cbm1tL3NsdWIuYy0yMzIwLVxubW0vc2x1Yi5jOjIzMjE6c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMzIyLXtcbi0tXG5tbS9zbHViLmMtMjMyNC1cbm1tL3NsdWIuYzoyMzI1OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMyNi1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTIzMzAtXG5tbS9zbHViLmM6MjMzMTpzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG5tbS9zbHViLmMtMjMzMi17XG4tLVxubW0vc2x1Yi5jLTIzMzQtXG5tbS9zbHViLmM6MjMzNTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzM2LVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmM9MjM0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbm1tL3NsdWIuYzoyMzQ1OnByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbm1tL3NsdWIuYy0yMzQ2LVx0XHRcdCAgIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIHZvaWQgKnApXG5tbS9zbHViLmMtMjM0Ny17XG5tbS9zbHViLmM6MjM0ODpcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcdTAwMjZcdTAwMjZcbm1tL3NsdWIuYzoyMzQ5Olx0ICAgIGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xubW0vc2x1Yi5jLTIzNTAtXHRcdHByX3dhcm5fb25jZShcJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwmIzM0Oyxcbi0tXG5tbS9zbHViLmMtMjM1NC1cbm1tL3NsdWIuYzoyMzU1Olx0cmV0dXJuIHNsYWJfb2JqX2V4dHMoc2xhYik7XG5tbS9zbHViLmMtMjM1Ni19XG4tLVxubW0vc2x1Yi5jPTIzNjE9X19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMjM3Ny1cdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqZWN0KTtcbm1tL3NsdWIuYzoyMzc4Olx0b2JqX2V4dHMgPSBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzLCBzbGFiLCBmbGFncywgYWxsb2NfZmxhZ3MsIG9iamVjdCk7XG5tbS9zbHViLmMtMjM3OS1cdC8qXG4tLVxubW0vc2x1Yi5jLTIzODYtXG5tbS9zbHViLmM6MjM4NzpcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xubW0vc2x1Yi5jLTIzODgtXHRcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9ial9pZHgpO1xubW0vc2x1Yi5jLTIzODktXHRcdGFsbG9jX3RhZ19hZGQoXHUwMDI2b2JqX2V4dC1cdTAwM2VyZWYsIGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnLCBzLVx1MDAzZXNpemUpO1xubW0vc2x1Yi5jOjIzOTA6XHRcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbm1tL3NsdWIuYy0yMzkxLVx0fSBlbHNlIHtcbi0tXG5tbS9zbHViLmM9MjQwNj1fX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmMtMjQxNS1cbm1tL3NsdWIuYzoyNDE2Olx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xubW0vc2x1Yi5jLTI0MTctXHRpZiAoIW9ial9leHRzKVxuLS1cbm1tL3NsdWIuYy0yNDE5LVxubW0vc2x1Yi5jOjI0MjA6XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjQyMS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iamVjdHM7IGkmIzQzOyYjNDM7KSB7XG4tLVxubW0vc2x1Yi5jLTI0MjUtXHR9XG5tbS9zbHViLmM6MjQyNjpcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbm1tL3NsdWIuYy0yNDI3LX1cbi0tXG5tbS9zbHViLmM9MjQ4ND12b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXG4tLVxubW0vc2x1Yi5jLTI0OTEtXG5tbS9zbHViLmM6MjQ5MjpcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbm1tL3NsdWIuYy0yNDkzLVx0aWYgKGxpa2VseSghb2JqX2V4dHMpKVxuLS1cbm1tL3NsdWIuYy0yNDk1LVxubW0vc2x1Yi5jOjI0OTY6XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjQ5Ny1cdF9fbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cywgb2JqX2V4dHMpO1xubW0vc2x1Yi5jOjI0OTg6XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjQ5OS19XG4tLVxubW0vc2x1Yi5jPTI1MDI9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuLS1cbm1tL3NsdWIuYy0yNTM4LVx0ICogSWdub3JlIEtNQUxMT0NfTk9STUFMIGNhY2hlIHRvIGF2b2lkIHBvc3NpYmxlIGNpcmN1bGFyIGRlcGVuZGVuY3lcbm1tL3NsdWIuYzoyNTM5Olx0ICogb2Ygc2xhYl9vYmpfZXh0cyBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGFuZCB0aHVzIHRoZSBzbGFiXG5tbS9zbHViLmMtMjU0MC1cdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXG4tLVxubW0vc2x1Yi5jLTI1NDUtXHQvKiBJZ25vcmUgYWxyZWFkeSBjaGFyZ2VkIG9iamVjdHMuICovXG5tbS9zbHViLmM6MjU0NjpcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbm1tL3NsdWIuYy0yNTQ3LVx0aWYgKG9ial9leHRzKSB7XG5tbS9zbHViLmM6MjU0ODpcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xubW0vc2x1Yi5jLTI1NDktXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwKTtcbi0tXG5tbS9zbHViLmMtMjU1MS1cdFx0aWYgKHVubGlrZWx5KG9ial9leHQtXHUwMDNlb2JqY2cpKSB7XG5tbS9zbHViLmM6MjU1MjpcdFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjU1My1cdFx0XHRyZXR1cm4gdHJ1ZTtcbm1tL3NsdWIuYy0yNTU0LVx0XHR9XG5tbS9zbHViLmM6MjU1NTpcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xubW0vc2x1Yi5jLTI1NTYtXHR9XG4tLVxubW0vc2x1Yi5jPTMzNTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzU3LVx0XHRcdChzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0FDQ09VTlQpIFx1MDAyNlx1MDAyNlxubW0vc2x1Yi5jOjMzNTg6XHRcdFx0IXNsYWJfb2JqX2V4dHMoc2xhYikpXG5tbS9zbHViLmM6MzM1OTpcdFx0YWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBnZnAsXG5tbS9zbHViLmMtMzM2MC1cdFx0XHRcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xuLS1cbm1tL3NsdWIuYz0zMzY2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1bmFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzczLVx0ICovXG5tbS9zbHViLmM6MzM3NDpcdGZyZWVfc2xhYl9vYmpfZXh0cyhzbGFiLCBhbGxvd19zcGluKTtcbm1tL3NsdWIuYy0zMzc1LVxuLS1cbm1tL3NsdWIuYz0zMzgxPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM0MjYtXHRzZXR1cF9zbGFiX2RlYnVnKHMsIHNsYWIsIHN0YXJ0KTtcbm1tL3NsdWIuYzozNDI3Olx0aW5pdF9zbGFiX29ial9leHRzKHNsYWIpO1xubW0vc2x1Yi5jLTM0MjgtXHQvKlxuLS1cbm1tL3NsdWIuYy0zNDMxLVx0ICovXG5tbS9zbHViLmM6MzQzMjpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQzMy1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpcyBjb21pbmcgZnJvbS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGVpdGhlciBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIG9yIHBlcmhhcHMgYENPTkZJR19NRU1DR2AgaW5mbHVlbmNpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIGdldCBzb21lIGNvbmNyZXRlIGV2aWRlbmNlLCBzbyBJJiMzOTtsbCBqdW1wIHJpZ2h0IGludG8gdGhlIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgbW0vc2x1Yi5jYCBmaWxlIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJiMzOTtsbCB6ZXJvIGluIG9uIGxpbmUgMjEzNi4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY3JpdGljYWwgY29kZSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uIHBhdGggdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHdoYXQmIzM5O3MgZ29pbmcgb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGNvZGUgYmxvY2sgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTAwOlx0XHQgKiBJZiB2ZWN0b3IgcHJldmlvdXNseSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlbiB3ZSBoYXZlIGxpdmVcbjIxMDE6XHRcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcbjIxMDI6XHRcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cbjIxMDM6XHRcdCAqL1xuMjEwNDpcdFx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xuMjEwNTpcdFx0XHR1bnNpZ25lZCBpbnQgaTtcbjIxMDY6XHRcbjIxMDc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSYjNDM7JiM0MzspXG4yMTA4Olx0XHRcdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2dmVjW2ldLnJlZik7XG4yMTA5Olx0XHR9XG4yMTEwOlx0fVxuMjExMTpcdFxuMjExMjpcdCNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG4yMTEzOlx0XG4yMTE0Olx0c3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxuMjExNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiBmYWxzZTsgfVxuMjExNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbjIxMTc6XHRcdFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XG4yMTE4Olx0XG4yMTE5Olx0I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG4yMTIwOlx0XG4yMTIxOlx0c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbjIxMjI6XHR7XG4yMTIzOlx0XHRzbGFiLVx1MDAzZW9ial9leHRzID0gMDtcbjIxMjQ6XHR9XG4yMTI1Olx0XG4yMTI2Olx0LypcbjIxMjc6XHQgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuXG4yMTI4Olx0ICpcbjIxMjk6XHQgKiBUaGUgYXJyYXkgaXMgaXRzZWxmIGttYWxsb2MoKSYjMzk7ZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxuMjEzMDpcdCAqIGttYWxsb2MgY2FjaGUgdGhhbiBAcywgdGhlIFwmIzM0O3NsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5XCYjMzQ7IHJlbGF0aW9uIGNvdWxkXG4yMTMxOlx0ICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFx1MDAzYy1cdTAwM2Uga21hbGxvYy0xaykgdGhhdCBwaW5zIHRoZSBzbGFic1xuMjEzMjpcdCAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXHUwMDNlIGtmcmVlKCkgLVx1MDAzZSBkaXNjYXJkX3NsYWIoKVxuMjEzMzpcdCAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXG4yMTM0Olx0ICogREFHIChhY3ljbGljKS5cbjIxMzU6XHQgKi9cbjIxMzY6XHRzdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuMjEzNzpcdFx0XHRcdFx0XHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcbjIxMzg6XHR7XG4yMTM5Olx0XHRzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItXHUwMDNlb2JqZWN0cztcbjIxNDA6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpvYmpfZXh0c19jYWNoZTtcbjIxNDE6XHRcbjIxNDI6XHRcdGlmIChzeiBcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSlcbjIxNDM6XHRcdFx0cmV0dXJuIHN6O1xuMjE0NDpcdFxuMjE0NTpcdFx0aWYgKCFpc19rbWFsbG9jX25vcm1hbChzKSlcbjIxNDY6XHRcdFx0cmV0dXJuIHN6O1xuMjE0NzpcdFxuMjE0ODpcdFx0b2JqX2V4dHNfY2FjaGUgPSBrbWFsbG9jX3NsYWIoc3osIE5VTEwsIGdmcCwgX19rbWFsbG9jX3Rva2VuKDApKTtcbjIxNDk6XHRcdC8qIGNvbXBhcmUgb2JqZWN0X3NpemUsIG5vdCB0aGUgY2FjaGUgcG9pbnRlciAocGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpICovXG4yMTUwOlx0XHRpZiAob2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgXHUwMDNjPSBzLVx1MDAzZW9iamVjdF9zaXplKVxuMjE1MTpcdFx0XHRyZXR1cm4gcy1cdTAwM2VvYmplY3Rfc2l6ZSAmIzQzOyAxO1xuMjE1MjpcdFxuMjE1MzpcdFx0cmV0dXJuIHN6O1xuMjE1NDpcdH1cbjIxNTU6XHRcbjIxNTY6XHRpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4yMTU3Olx0XHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4yMTU4Olx0e1xuMjE1OTpcdFx0Y29uc3QgYm9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpO1xuMjE2MDpcdFx0dW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpO1xuMjE2MTpcdFx0Ym9vbCBuZXdfc2xhYiA9IGFsbG9jX2ZsYWdzIFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xuMjE2MjpcdFx0dW5zaWduZWQgbG9uZyBuZXdfZXh0cztcbjIxNjM6XHRcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XG4yMTY0Olx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcbjIxNjU6XHRcdHNpemVfdCBzejtcbjIxNjY6XHRcbjIxNjc6XHRcdGdmcCBcdTAwMjY9IH5PQkpDR1NfQ0xFQVJfTUFTSztcbjIxNjg6XHRcdC8qIFByZXZlbnQgcmVjdXJzaXZlIGV4dGVuc2lvbiB2ZWN0b3IgYWxsb2NhdGlvbiAqL1xuMjE2OTpcdFx0YWxsb2NfZmxhZ3MgfD0gU0xBQl9BTExPQ19OT19SRUNVUlNFO1xuMjE3MDpcdFx0YWxsb2NfZmxhZ3MgXHUwMDI2PSB+U0xBQl9BTExPQ19ORVdfU0xBQjtcbjIxNzE6XHRcbjIxNzI6XHRcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xuMjE3MzpcdFxuMjE3NDpcdFx0LyogVGhpcyB3aWxsIHVzZSBrbWFsbG9jX25vbG9jaygpIGlmIGFsbG9jX2ZsYWdzIHNheSBzbyAqL1xuMjE3NTpcdFx0dmVjID0ga21hbGxvY19mbGFncyhzeiwgZ2ZwIHwgX19HRlBfWkVSTywgYWxsb2NfZmxhZ3MsIHNsYWJfbmlkKHNsYWIpKTtcbjIxNzY6XHRcbjIxNzc6XHRcdGlmICghdmVjKSB7XG4yMTc4Olx0XHRcdC8qXG4yMTc5Olx0XHRcdCAqIFRyeSB0byBtYXJrIHZlY3RvcnMgd2hpY2ggZmFpbGVkIHRvIGFsbG9jYXRlLlxuMjE4MDpcdFx0XHQgKiBJZiB0aGlzIG9wZXJhdGlvbiBmYWlscywgdGhlcmUgbWF5IGJlIGEgcmFjaW5nIHByb2Nlc3NcbjIxODE6XHRcdFx0ICogdGhhdCBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhlIGFsbG9jYXRpb24uXG4yMTgyOlx0XHRcdCAqL1xuMjE4MzpcdFx0XHRpZiAoIW1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc2xhYikgXHUwMDI2XHUwMDI2XG4yMTg0Olx0XHRcdCAgICBzbGFiX29ial9leHRzKHNsYWIpKVxuMjE4NTpcdFx0XHRcdHJldHVybiAwO1xuMjE4NjpcdFxuMjE4NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIxODg6XHRcdH1cbjIxODk6XHRcbjIxOTA6XHRcdFZNX1dBUk5fT05fT05DRSh2aXJ0X3RvX3NsYWIodmVjKSAhPSBOVUxMIFx1MDAyNlx1MDAyNlxuMjE5MTpcdFx0XHRcdHZpcnRfdG9fc2xhYih2ZWMpLVx1MDAzZXNsYWJfY2FjaGUgPT0gcyk7XG4yMTkyOlx0XG4yMTkzOlx0XHRuZXdfZXh0cyA9ICh1bnNpZ25lZCBsb25nKXZlYztcbjIxOTQ6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4yMTk1Olx0XHRuZXdfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XG4yMTk2Olx0I2VuZGlmXG4yMTk3Olx0cmV0cnk6XG4yMTk4Olx0XHRvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLVx1MDAzZW9ial9leHRzKTtcbjIxOTk6XHRcdGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhvbGRfZXh0cywgdmVjLCBvYmplY3RzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcxOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBQcm9maWxpbmcgYW5kIENvbnRyb2wgR3JvdXAgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBwcm9maWxpbmcgbG9naWMgaXMgdGllZCBpbiwgb3IgaWYgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZnVuY3Rpb25hbGl0eS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGVyZSB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZC4gTXkgZmlyc3QgbGluZSBvZiBhdHRhY2sgaXMgdG8gZm9jdXMgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRob3NlIGAjaWZkZWZgIGJsb2Nrcywgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgdXNlIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2Agb3IgYENPTkZJR19NRU1DR2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoZXNlIHNvcnRzIG9mIGZlYXR1cmVzLiBBbmQgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQvZGlzYWJsZWQgYnkgdGhlIHJlc3BlY3RpdmUgY29uZmlndXJhdGlvbnMuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGhvdyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgYmVpbmcgdXNlZC4gV2hlcmUgaXMgaXQgY2FsbGVkPyBJcyBpdCB3aXRoaW4gdGhvc2UgYCNpZmRlZmAgYmxvY2tzPyBJcyB0aGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQ/IFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBpbmRpY2F0aW9uIG9mIGhvdyB0aGUgY29kZSBmbG93IGNoYW5nZXMgd2hlbiBwcm9maWxpbmcgb3IgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFyZSBlbmFibGVkLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGF0IG9uZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MTkyPWVudW0gc2xhYl9mbGFncyB7XG4tLVxubW0vc2x1Yi5jLTIwMy1cbm1tL3NsdWIuYzoyMDQ6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmM6MjA1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR19PTlxubW0vc2x1Yi5jLTIwNi1ERUZJTkVfU1RBVElDX0tFWV9UUlVFKHNsdWJfZGVidWdfZW5hYmxlZCk7XG4tLVxubW0vc2x1Yi5jPTIwOD1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzbHViX2RlYnVnX2VuYWJsZWQpO1xuLS1cbm1tL3NsdWIuYy0yMTEtXG5tbS9zbHViLmM6MjEyOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTIxMy1zdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xuLS1cbm1tL3NsdWIuYz0yMzM9c3RydWN0IHNsYWJfb2JqX2l0ZXIge1xuLS1cbm1tL3NsdWIuYy0yMzUtXHR2b2lkICpzdGFydDtcbm1tL3NsdWIuYzoyMzY6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vc2x1Yi5jLTIzNy1cdHVuc2lnbmVkIGxvbmcgZnJlZWxpc3RfY291bnQ7XG4tLVxubW0vc2x1Yi5jPTI0OD12b2lkICpmaXh1cF9yZWRfbGVmdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqcClcbi0tXG5tbS9zbHViLmMtMzExLVxubW0vc2x1Yi5jOjMxMjojaWZkZWYgc3lzdGVtX2hhc19mcmVlbGlzdF9hYmFcbm1tL3NsdWIuYy0zMTMtI2RlZmluZSBfX0NNUFhDSEdfRE9VQkxFXHRfX1NMQUJfRkxBR19CSVQoX1NMQUJfQ01QWENIR19ET1VCTEUpXG4tLVxubW0vc2x1Yi5jPTMyMj1zdHJ1Y3QgdHJhY2sge1xubW0vc2x1Yi5jLTMyMy1cdHVuc2lnbmVkIGxvbmcgYWRkcjtcdC8qIENhbGxlZCBmcm9tIGFkZHJlc3MgKi9cbm1tL3NsdWIuYzozMjQ6I2lmZGVmIENPTkZJR19TVEFDS0RFUE9UXG5tbS9zbHViLmMtMzI1LVx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuLS1cbm1tL3NsdWIuYz0zMzI9ZW51bSB0cmFja19pdGVtIHsgVFJBQ0tfQUxMT0MsIFRSQUNLX0ZSRUUgfTtcbm1tL3NsdWIuYy0zMzMtXG5tbS9zbHViLmM6MzM0OiNpZmRlZiBTTEFCX1NVUFBPUlRTX1NZU0ZTXG5tbS9zbHViLmMtMzM1LXN0YXRpYyBpbnQgc3lzZnNfc2xhYl9hZGQoc3RydWN0IGttZW1fY2FjaGUgKik7XG4tLVxubW0vc2x1Yi5jPTM1MT1lbnVtIHN0YXRfaXRlbSB7XG4tLVxubW0vc2x1Yi5jLTM4MC1cbm1tL3NsdWIuYzozODE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtMzgyLXN0cnVjdCBrbWVtX2NhY2hlX3N0YXRzIHtcbi0tXG5tbS9zbHViLmM9Mzg3PXN0YXRpYyBpbmxpbmUgdm9pZCBzdGF0KGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSlcbm1tL3NsdWIuYy0zODgte1xubW0vc2x1Yi5jOjM4OTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy0zOTAtXHQvKlxuLS1cbm1tL3NsdWIuYz0zOTk9dm9pZCBzdGF0X2FkZChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2ksIGludCB2KVxubW0vc2x1Yi5jLTQwMC17XG5tbS9zbHViLmM6NDAxOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTQwMi1cdHJhd19jcHVfYWRkKHMtXHUwMDNlY3B1X3N0YXRzLVx1MDAzZXN0YXRbc2ldLCB2KTtcbi0tXG5tbS9zbHViLmM9NDQzPXN0cnVjdCBrbWVtX2NhY2hlX25vZGUge1xuLS1cbm1tL3NsdWIuYy00NDYtXHRzdHJ1Y3QgbGlzdF9oZWFkIHBhcnRpYWw7XG5tbS9zbHViLmM6NDQ3OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTQ0OC1cdGF0b21pY19sb25nX3QgbnJfc2xhYnM7XG4tLVxubW0vc2x1Yi5jPTUxNz1zdGF0aWMgaW5saW5lIGZyZWVwdHJfdCBmcmVlbGlzdF9wdHJfZW5jb2RlKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy01MjEtXG5tbS9zbHViLmM6NTIyOiNpZmRlZiBDT05GSUdfU0xBQl9GUkVFTElTVF9IQVJERU5FRFxubW0vc2x1Yi5jLTUyMy1cdGVuY29kZWQgPSAodW5zaWduZWQgbG9uZylwdHIgXiBzLVx1MDAzZXJhbmRvbSBeIHN3YWIocHRyX2FkZHIpO1xuLS1cbm1tL3NsdWIuYz01MzA9c3RhdGljIGlubGluZSB2b2lkICpmcmVlbGlzdF9wdHJfZGVjb2RlKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy01MzQtXG5tbS9zbHViLmM6NTM1OiNpZmRlZiBDT05GSUdfU0xBQl9GUkVFTElTVF9IQVJERU5FRFxubW0vc2x1Yi5jLTUzNi1cdGRlY29kZWQgPSAodm9pZCAqKShwdHIudiBeIHMtXHUwMDNlcmFuZG9tIF4gc3dhYihwdHJfYWRkcikpO1xuLS1cbm1tL3NsdWIuYz01NTQ9c3RhdGljIGlubGluZSB2b2lkIHNldF9mcmVlcG9pbnRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCB2b2lkICpmcClcbi0tXG5tbS9zbHViLmMtNTU3LVxubW0vc2x1Yi5jOjU1ODojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcbm1tL3NsdWIuYy01NTktXHRCVUdfT04ob2JqZWN0ID09IGZwKTsgLyogbmFpdmUgZGV0ZWN0aW9uIG9mIGRvdWJsZSBmcmVlIG9yIGNvcnJ1cHRpb24gKi9cbi0tXG5tbS9zbHViLmM9NjUwPV9fdXBkYXRlX2ZyZWVsaXN0X2Zhc3Qoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyAqb2xkLFxuLS1cbm1tL3NsdWIuYy02NTIte1xubW0vc2x1Yi5jOjY1MzojaWZkZWYgc3lzdGVtX2hhc19mcmVlbGlzdF9hYmFcbm1tL3NsdWIuYy02NTQtXHRyZXR1cm4gdHJ5X2NtcHhjaGdfZnJlZWxpc3QoXHUwMDI2c2xhYi1cdTAwM2VmcmVlbGlzdF9jb3VudGVycyxcbi0tXG5tbS9zbHViLmM9Njg4PXN0YXRpYyBpbmxpbmUgYm9vbCBfX3NsYWJfdXBkYXRlX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtNzA2LVxubW0vc2x1Yi5jOjcwNzojaWZkZWYgU0xVQl9ERUJVR19DTVBYQ0hHXG5tbS9zbHViLmMtNzA4LVx0cHJfaW5mbyhcJiMzNDslcyAlczogY21weGNoZyBkb3VibGUgcmVkbyBcJiMzNDssIG4sIHMtXHUwMDNlbmFtZSk7XG4tLVxubW0vc2x1Yi5jPTcxND1zdGF0aWMgaW5saW5lIGJvb2wgc2xhYl91cGRhdGVfZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy03MzMtXG5tbS9zbHViLmM6NzM0OiNpZmRlZiBTTFVCX0RFQlVHX0NNUFhDSEdcbm1tL3NsdWIuYy03MzUtXHRwcl9pbmZvKFwmIzM0OyVzICVzOiBjbXB4Y2hnIGRvdWJsZSByZWRvIFwmIzM0Oywgbiwgcy1cdTAwM2VuYW1lKTtcbi0tXG5tbS9zbHViLmM9NzYxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfb3JpZ19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpXG4tLVxubW0vc2x1Yi5jLTc3Ni1cbm1tL3NsdWIuYzo3Nzc6I2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFRcbm1tL3NsdWIuYy03NzgtXG4tLVxubW0vc2x1Yi5jPTkwNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy05MTAtXG5tbS9zbHViLmM6OTExOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTkxMi1cbi0tXG5tbS9zbHViLmM9MTAzMz1zdGF0aWMgc3RydWN0IHRyYWNrICpnZXRfdHJhY2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCxcbi0tXG5tbS9zbHViLmMtMTA0Mi1cbm1tL3NsdWIuYzoxMDQzOiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxubW0vc2x1Yi5jLTEwNDQtc3RhdGljIG5vaW5saW5lIGRlcG90X3N0YWNrX2hhbmRsZV90IHNldF90cmFja19wcmVwYXJlKGdmcF90IGdmcF9mbGFncylcbi0tXG5tbS9zbHViLmM9MTA2Mj1zdGF0aWMgdm9pZCBzZXRfdHJhY2tfdXBkYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsXG4tLVxubW0vc2x1Yi5jLTEwNjctXG5tbS9zbHViLmM6MTA2ODojaWZkZWYgQ09ORklHX1NUQUNLREVQT1Rcbm1tL3NsdWIuYy0xMDY5LVx0cC1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4tLVxubW0vc2x1Yi5jPTEwOTY9c3RhdGljIHZvaWQgcHJpbnRfdHJhY2soY29uc3QgY2hhciAqcywgc3RydWN0IHRyYWNrICp0LCB1bnNpZ25lZCBsb25nIHByX3RpbWUpXG4tLVxubW0vc2x1Yi5jLTExMDQtXHQgICAgICAgcywgKHZvaWQgKil0LVx1MDAzZWFkZHIsIHByX3RpbWUgLSB0LVx1MDAzZXdoZW4sIHQtXHUwMDNlY3B1LCB0LVx1MDAzZXBpZCk7XG5tbS9zbHViLmM6MTEwNTojaWZkZWYgQ09ORklHX1NUQUNLREVQT1Rcbm1tL3NsdWIuYy0xMTA2LVx0aGFuZGxlID0gUkVBRF9PTkNFKHQtXHUwMDNlaGFuZGxlKTtcbi0tXG5tbS9zbHViLmM9MTI5Nj1zdGF0aWMgdm9pZCByZXN0b3JlX2J5dGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICptZXNzYWdlLCB1OCBkYXRhLFxuLS1cbm1tL3NsdWIuYy0xMzAyLVxubW0vc2x1Yi5jOjEzMDM6I2lmZGVmIENPTkZJR19LTVNBTlxubW0vc2x1Yi5jLTEzMDQtI2RlZmluZSBwYWRfY2hlY2tfYXR0cmlidXRlcyBub2lubGluZSBfX25vX2ttc2FuX2NoZWNrc1xuLS1cbm1tL3NsdWIuYz0yMDQ1PXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUsXG4tLVxubW0vc2x1Yi5jLTIwNjAtXG5tbS9zbHViLmM6MjA2MTojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxubW0vc2x1Yi5jLTIwNjItXG5tbS9zbHViLmM6MjA2MzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbm1tL3NsdWIuYy0yMDY0LVxuLS1cbm1tL3NsdWIuYz0yMTU2PWludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjE5My1cdG5ld19leHRzID0gKHVuc2lnbmVkIGxvbmcpdmVjO1xubW0vc2x1Yi5jOjIxOTQ6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIxOTUtXHRuZXdfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XG4tLVxubW0vc2x1Yi5jPTIyNzA9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIyODktXG5tbS9zbHViLmM6MjI5MDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtMjI5MS1cdFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xuLS1cbm1tL3NsdWIuYy0yMzA2LVxubW0vc2x1Yi5jOjIzMDc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIzMDgtXHRcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcbi0tXG5tbS9zbHViLmM9MjMzNT1zdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjM0MS1cbm1tL3NsdWIuYzoyMzQyOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vc2x1Yi5jLTIzNDMtXG4tLVxubW0vc2x1Yi5jPTI0NDY9YWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuLS1cbm1tL3NsdWIuYy0yNDUzLVxubW0vc2x1Yi5jOjI0NTQ6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTI0NTUtXG4tLVxubW0vc2x1Yi5jPTI1NzY9c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTI1ODEtXG5tbS9zbHViLmM6MjU4MjojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXG5tbS9zbHViLmMtMjU4My1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpO1xuLS1cbm1tL3NsdWIuYz0yNjE4PWJvb2wgc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKngsIGJvb2wgaW5pdCxcbi0tXG5tbS9zbHViLmMtMjY0Ni1cbm1tL3NsdWIuYzoyNjQ3OiNpZmRlZiBDT05GSUdfU0xVQl9SQ1VfREVCVUdcbm1tL3NsdWIuYy0yNjQ4LVx0aWYgKHN0aWxsX2FjY2Vzc2libGUpIHtcbi0tXG5tbS9zbHViLmM9MzI3ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICphbGxvY19zbGFiX3BhZ2UoZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy0zMzAwLVxubW0vc2x1Yi5jOjMzMDE6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vc2x1Yi5jLTMzMDItLyogUHJlLWluaXRpYWxpemUgdGhlIHJhbmRvbSBzZXF1ZW5jZSBjYWNoZSAqL1xuLS1cbm1tL3NsdWIuYz0zNTY5PXN0YXRpYyB2b2lkICphbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0zNTc1LVxubW0vc2x1Yi5jOjM1NzY6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtMzU3Ny1cdGlmIChzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykge1xuLS1cbm1tL3NsdWIuYz0zNjAzPXN0YXRpYyBpbmxpbmUgdm9pZCAqbmV4dF9zbGFiX29iaihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMzYwNS17XG5tbS9zbHViLmM6MzYwNjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXG5tbS9zbHViLmMtMzYwNy1cdGlmIChpdGVyLVx1MDAzZXJhbmRvbSkge1xuLS1cbm1tL3NsdWIuYz0zNjUzPXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2l0ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0zNjU5LVxubW0vc2x1Yi5jOjM2NjA6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vc2x1Yi5jLTM2NjEtXHRpdGVyLVx1MDAzZXJhbmRvbSA9IChzbGFiLVx1MDAzZW9iamVjdHMgXHUwMDNlPSAyIFx1MDAyNlx1MDAyNiBzLVx1MDAzZXJhbmRvbV9zZXEpO1xuLS1cbm1tL3NsdWIuYz0zODg1PXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zODg3LXtcbm1tL3NsdWIuYzozODg4OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTM4ODktXHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0O1xuLS1cbm1tL3NsdWIuYz00MTY2PXN0YXRpYyBpbnQgc2x1Yl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm1tL3NsdWIuYy00MTc4LVxubW0vc2x1Yi5jOjQxNzk6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNDE4MC1zdGF0aWMgaW50IGNvdW50X2ZyZWUoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTQyNTA9c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuLS1cbm1tL3NsdWIuYy00MjY0LVxubW0vc2x1Yi5jOjQyNjU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNDI2Ni0jZGVmaW5lIE1BWF9QQVJUSUFMX1RPX1NDQU4gMTAwMDBcbi0tXG5tbS9zbHViLmM9NDUyMz1zdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5tbS9zbHViLmMtNDUyNy1cbm1tL3NsdWIuYzo0NTI4OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTQ1MjktXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZzdHJpY3RfbnVtYSkgXHUwMDI2XHUwMDI2XG4tLVxubW0vc2x1Yi5jPTQ3NTA9dm9pZCAqYWxsb2NfZnJvbV9wY3Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBpbnQgbm9kZSlcbi0tXG5tbS9zbHViLmMtNDc1NS1cbm1tL3NsdWIuYzo0NzU2OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTQ3NTctXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZzdHJpY3RfbnVtYSkgXHUwMDI2XHUwMDI2XG4tLVxubW0vc2x1Yi5jPTYxNDg9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGNhbl9mcmVlX3RvX3BjcyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtNjE1Ny1cbm1tL3NsdWIuYzo2MTU4OiNpZmRlZiBDT05GSUdfSEFWRV9NRU1PUllMRVNTX05PREVTXG5tbS9zbHViLmMtNjE1OS1cdC8qXG4tLVxubW0vc2x1Yi5jPTYzOTM9dm9pZCBzbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpvYmplY3QsXG4tLVxubW0vc2x1Yi5jLTY0MDgtXG5tbS9zbHViLmM6NjQwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtNjQxMC0vKiBEbyBub3QgaW5saW5lIHRoZSByYXJlIG1lbWNnIGNoYXJnaW5nIGZhaWxlZCBwYXRoIGludG8gdGhlIGFsbG9jYXRpb24gcGF0aCAqL1xuLS1cbm1tL3NsdWIuYz02NDI0PXZvaWQgc2xhYl9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpoZWFkLFxuLS1cbm1tL3NsdWIuYy02NDM4LVxubW0vc2x1Yi5jOjY0Mzk6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xubW0vc2x1Yi5jLTY0NDAtc3RhdGljIHZvaWQgc2xhYl9mcmVlX2FmdGVyX3JjdV9kZWJ1ZyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxuLS1cbm1tL3NsdWIuYy02NDY3LVxubW0vc2x1Yi5jOjY0Njg6I2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5tbS9zbHViLmMtNjQ2OS12b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vc2x1Yi5jPTY1MzA9c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtNjUzMy1cbm1tL3NsdWIuYzo2NTM0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTY1MzUtXHQvKlxuLS1cbm1tL3NsdWIuYz02NTU5PXN0YXRpYyBzaXplX3QgX19rc2l6ZShjb25zdCB2b2lkICpvYmplY3QpXG4tLVxubW0vc2x1Yi5jLTY1NzYtXG5tbS9zbHViLmM6NjU3NzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy02NTc4LVx0c2tpcF9vcmlnX3NpemVfY2hlY2soc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBvYmplY3QpO1xuLS1cbm1tL3NsdWIuYz03MTc3PV9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbi0tXG5tbS9zbHViLmMtNzI1MC1cbm1tL3NsdWIuYzo3MjUxOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTcyNTItc3RhdGljIHVuc2lnbmVkIGludFxuLS1cbm1tL3NsdWIuYz03NTk0PWluaXRfa21lbV9jYWNoZV9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXG4tLVxubW0vc2x1Yi5jLTc1OTgtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXBhcnRpYWwpO1xubW0vc2x1Yi5jOjc1OTk6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzYwMC1cdGF0b21pY19sb25nX3NldChcdTAwMjZuLVx1MDAzZW5yX3NsYWJzLCAwKTtcbi0tXG5tbS9zbHViLmMtNzYwNS1cbm1tL3NsdWIuYzo3NjA2OiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTc2MDctc3RhdGljIGlubGluZSBpbnQgYWxsb2Nfa21lbV9jYWNoZV9zdGF0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmM9NzY3NT1zdGF0aWMgdm9pZCBlYXJseV9rbWVtX2NhY2hlX25vZGVfYWxsb2MoaW50IG5vZGUpXG4tLVxubW0vc2x1Yi5jLTc2OTgtXG5tbS9zbHViLmM6NzY5OTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy03NzAwLVx0aW5pdF9vYmplY3Qoa21lbV9jYWNoZV9ub2RlLCBuLCBTTFVCX1JFRF9BQ1RJVkUpO1xuLS1cbm1tL3NsdWIuYz03NzM3PXZvaWQgX19rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTc3NDAtXHRwY3NfZGVzdHJveShzKTtcbm1tL3NsdWIuYzo3NzQxOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTc3NDItXHRmcmVlX3BlcmNwdShzLVx1MDAzZWNwdV9zdGF0cyk7XG4tLVxubW0vc2x1Yi5jPTc4Mzc9c3RhdGljIGludCBjYWxjdWxhdGVfc2l6ZXMoc3RydWN0IGttZW1fY2FjaGVfYXJncyAqYXJncywgc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTc4NTAtXG5tbS9zbHViLmM6Nzg1MTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy03ODUyLVx0Lypcbi0tXG5tbS9zbHViLmMtNzkxMy1cbm1tL3NsdWIuYzo3OTE0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTc5MTUtXHRpZiAoZmxhZ3MgXHUwMDI2IFNMQUJfU1RPUkVfVVNFUikge1xuLS1cbm1tL3NsdWIuYy03OTI4LVx0a2FzYW5fY2FjaGVfY3JlYXRlKHMsIFx1MDAyNnNpemUsIFx1MDAyNnMtXHUwMDNlZmxhZ3MpO1xubW0vc2x1Yi5jOjc5Mjk6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzkzMC1cdGlmIChmbGFncyBcdTAwMjYgU0xBQl9SRURfWk9ORSkge1xuLS1cbm1tL3NsdWIuYz03OTkzPXN0YXRpYyB2b2lkIGxpc3Rfc2xhYl9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy03OTk0LXtcbm1tL3NsdWIuYzo3OTk1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTc5OTYtXHR2b2lkICphZGRyID0gc2xhYl9hZGRyZXNzKHNsYWIpO1xuLS1cbm1tL3NsdWIuYz04MDYwPWludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTgwODYtXG5tbS9zbHViLmM6ODA4NzojaWZkZWYgQ09ORklHX1BSSU5US1xubW0vc2x1Yi5jLTgwODgtdm9pZCBfX2ttZW1fb2JqX2luZm8oc3RydWN0IGttZW1fb2JqX2luZm8gKmtwcCwgdm9pZCAqb2JqZWN0LCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtODEwMi1cdG9ianAwID0ga2FzYW5fcmVzZXRfdGFnKG9iamVjdCk7XG5tbS9zbHViLmM6ODEwMzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy04MTA0LVx0b2JqcCA9IHJlc3RvcmVfcmVkX2xlZnQocywgb2JqcDApO1xuLS1cbm1tL3NsdWIuYy04MTE1LVx0XHRyZXR1cm47XG5tbS9zbHViLmM6ODExNjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy04MTE3LVx0b2JqcCA9IGZpeHVwX3JlZF9sZWZ0KHMsIG9ianApO1xuLS1cbm1tL3NsdWIuYy04MTE5LVx0a3BwLVx1MDAzZWtwX3JldCA9ICh2b2lkICopdHJhY2twLVx1MDAzZWFkZHI7XG5tbS9zbHViLmM6ODEyMDojaWZkZWYgQ09ORklHX1NUQUNLREVQT1Rcbm1tL3NsdWIuYy04MTIxLVx0e1xuLS1cbm1tL3NsdWIuYz04MTkzPWNvcmVfcGFyYW0oc2x1Yl9taW5fb2JqZWN0cywgc2x1Yl9taW5fb2JqZWN0cywgdWludCwgMCk7XG5tbS9zbHViLmMtODE5NC1cbm1tL3NsdWIuYzo4MTk1OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTgxOTYtc3RhdGljIGludCBfX2luaXQgc2V0dXBfc2xhYl9zdHJpY3RfbnVtYShjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL3NsdWIuYz04MjEyPV9fY29yZV9wYXJhbV9jYihzbGFiX3N0cmljdF9udW1hLCBcdTAwMjZwYXJhbV9vcHNfc2xhYl9zdHJpY3RfbnVtYSwgTlVMTCwgMCk7XG4tLVxubW0vc2x1Yi5jLTgyMTUtXG5tbS9zbHViLmM6ODIxNjojaWZkZWYgQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZXG5tbS9zbHViLmMtODIxNy0vKlxuLS1cbm1tL3NsdWIuYz04NDYxPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqIF9faW5pdCBib290c3RyYXAoc3RydWN0IGttZW1fY2FjaGUgKnN0YXRpY19jYWNoZSlcbi0tXG5tbS9zbHViLmMtODQ3NC1cbm1tL3NsdWIuYzo4NDc1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTg0NzYtXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2bi1cdTAwM2VmdWxsLCBzbGFiX2xpc3QpXG4tLVxubW0vc2x1Yi5jPTg2MTM9dm9pZCBfX2luaXQga21lbV9jYWNoZV9pbml0X2xhdGUodm9pZClcbi0tXG5tbS9zbHViLmMtODYxNy1cdFdBUk5fT04oIWZsdXNod3EpO1xubW0vc2x1Yi5jOjg2MTg6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vc2x1Yi5jLTg2MTktXHRwcmFuZG9tX2luaXRfb25jZShcdTAwMjZzbGFiX3JuZF9zdGF0ZSk7XG4tLVxubW0vc2x1Yi5jPTg2MjM9aW50IGRvX2ttZW1fY2FjaGVfY3JlYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbm1tL3NsdWIuYy04NjMyLVx0cy1cdTAwM2VmbGFncyA9IGttZW1fY2FjaGVfZmxhZ3MoZmxhZ3MsIHMtXHUwMDNlbmFtZSk7XG5tbS9zbHViLmM6ODYzMzojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcbm1tL3NsdWIuYy04NjM0LVx0cy1cdTAwM2VyYW5kb20gPSBnZXRfcmFuZG9tX2xvbmcoKTtcbi0tXG5tbS9zbHViLmMtODYzNy1cdHMtXHUwMDNlY3RvciA9IGFyZ3MtXHUwMDNlY3Rvcjtcbm1tL3NsdWIuYzo4NjM4OiNpZmRlZiBDT05GSUdfSEFSREVORURfVVNFUkNPUFlcbm1tL3NsdWIuYy04NjM5LVx0cy1cdTAwM2V1c2Vyb2Zmc2V0ID0gYXJncy1cdTAwM2V1c2Vyb2Zmc2V0O1xuLS1cbm1tL3NsdWIuYy04NjU3LVxubW0vc2x1Yi5jOjg2NTg6I2lmZGVmIHN5c3RlbV9oYXNfZnJlZWxpc3RfYWJhXG5tbS9zbHViLmMtODY1OS1cdGlmIChzeXN0ZW1faGFzX2ZyZWVsaXN0X2FiYSgpIFx1MDAyNlx1MDAyNiAhKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfTk9fQ01QWENIRykpIHtcbi0tXG5tbS9zbHViLmMtODY3Ny1cbm1tL3NsdWIuYzo4Njc4OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTg2NzktXHRzLVx1MDAzZXJlbW90ZV9ub2RlX2RlZnJhZ19yYXRpbyA9IDEwMDA7XG4tLVxubW0vc2x1Yi5jLTg2OTAtXG5tbS9zbHViLmM6ODY5MTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy04NjkyLVx0aWYgKCFhbGxvY19rbWVtX2NhY2hlX3N0YXRzKHMpKVxuLS1cbm1tL3NsdWIuYy04NzIxLVxubW0vc2x1Yi5jOjg3MjI6I2lmZGVmIFNMQUJfU1VQUE9SVFNfU1lTRlNcbm1tL3NsdWIuYy04NzIzLXN0YXRpYyBpbnQgY291bnRfaW51c2Uoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTg3Mjg9c3RhdGljIGludCBjb3VudF90b3RhbChzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtODczMy1cbm1tL3NsdWIuYzo4NzM0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTg3MzUtc3RhdGljIHZvaWQgdmFsaWRhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jPTg4MTY9RVhQT1JUX1NZTUJPTCh2YWxpZGF0ZV9zbGFiX2NhY2hlKTtcbm1tL3NsdWIuYy04ODE3LVxubW0vc2x1Yi5jOjg4MTg6I2lmZGVmIENPTkZJR19ERUJVR19GU1xubW0vc2x1Yi5jLTg4MTktLypcbi0tXG5tbS9zbHViLmM9ODg3ND1zdGF0aWMgaW50IGFkZF9sb2NhdGlvbihzdHJ1Y3QgbG9jX3RyYWNrICp0LCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtODg4NC1cbm1tL3NsdWIuYzo4ODg1OiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxubW0vc2x1Yi5jLTg4ODYtXHRoYW5kbGUgPSBSRUFEX09OQ0UodHJhY2stXHUwMDNlaGFuZGxlKTtcbi0tXG5tbS9zbHViLmM9ODk2Nj1zdGF0aWMgdm9pZCBwcm9jZXNzX3NsYWIoc3RydWN0IGxvY190cmFjayAqdCwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTg5ODQtXG5tbS9zbHViLmM6ODk4NTojaWZkZWYgU0xBQl9TVVBQT1JUU19TWVNGU1xubW0vc2x1Yi5jLTg5ODYtZW51bSBzbGFiX3N0YXRfdHlwZSB7XG4tLVxubW0vc2x1Yi5jPTkwMDA9c3RhdGljIHNzaXplX3Qgc2hvd19zbGFiX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTkwMjMtXG5tbS9zbHViLmM6OTAyNDojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy05MDI1LVx0aWYgKGZsYWdzIFx1MDAyNiBTT19BTEwpIHtcbi0tXG5tbS9zbHViLmMtOTA1Ny1cdGxlbiAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWYsIGxlbiwgXCYjMzQ7JWx1XCYjMzQ7LCB0b3RhbCk7XG5tbS9zbHViLmM6OTA1ODojaWZkZWYgQ09ORklHX05VTUFcbm1tL3NsdWIuYy05MDU5LVx0Zm9yIChub2RlID0gMDsgbm9kZSBcdTAwM2MgbnJfbm9kZV9pZHM7IG5vZGUmIzQzOyYjNDM7KSB7XG4tLVxubW0vc2x1Yi5jPTkyMTE9U0xBQl9BVFRSX1JPKGh3Y2FjaGVfYWxpZ24pO1xubW0vc2x1Yi5jLTkyMTItXG5tbS9zbHViLmM6OTIxMzojaWZkZWYgQ09ORklHX1pPTkVfRE1BXG5tbS9zbHViLmMtOTIxNC1zdGF0aWMgc3NpemVfdCBjYWNoZV9kbWFfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVxuLS1cbm1tL3NsdWIuYz05MjE4PVNMQUJfQVRUUl9STyhjYWNoZV9kbWEpO1xuLS1cbm1tL3NsdWIuYy05MjIwLVxubW0vc2x1Yi5jOjkyMjE6I2lmZGVmIENPTkZJR19IQVJERU5FRF9VU0VSQ09QWVxubW0vc2x1Yi5jLTkyMjItc3RhdGljIHNzaXplX3QgdXNlcnNpemVfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVxuLS1cbm1tL3NsdWIuYz05MjMzPVNMQUJfQVRUUl9STyhkZXN0cm95X2J5X3JjdSk7XG5tbS9zbHViLmMtOTIzNC1cbm1tL3NsdWIuYzo5MjM1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTkyMzYtc3RhdGljIHNzaXplX3Qgc2xhYnNfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVxuLS1cbm1tL3NsdWIuYz05MzA0PVNMQUJfQVRUUih2YWxpZGF0ZSk7XG4tLVxubW0vc2x1Yi5jLTkzMDctXG5tbS9zbHViLmM6OTMwODojaWZkZWYgQ09ORklHX0ZBSUxTTEFCXG5tbS9zbHViLmMtOTMwOS1zdGF0aWMgc3NpemVfdCBmYWlsc2xhYl9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpXG4tLVxubW0vc2x1Yi5jPTkzNDQ9U0xBQl9BVFRSKHNocmluayk7XG5tbS9zbHViLmMtOTM0NS1cbm1tL3NsdWIuYzo5MzQ2OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTkzNDctc3RhdGljIHNzaXplX3QgcmVtb3RlX25vZGVfZGVmcmFnX3JhdGlvX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1Zilcbi0tXG5tbS9zbHViLmM9OTM2OD1TTEFCX0FUVFIocmVtb3RlX25vZGVfZGVmcmFnX3JhdGlvKTtcbi0tXG5tbS9zbHViLmMtOTM3MC1cbm1tL3NsdWIuYzo5MzcxOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTkzNzItc3RhdGljIGludCBzaG93X3N0YXQoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZiwgZW51bSBzdGF0X2l0ZW0gc2kpXG4tLVxubW0vc2x1Yi5jLTkzOTAtXG5tbS9zbHViLmM6OTM5MTojaWZkZWYgQ09ORklHX1NNUFxubW0vc2x1Yi5jLTkzOTItXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuLS1cbm1tL3NsdWIuYz05NDUyPVNUQVRfQVRUUihTSEVBRl9SRVRVUk5fU0xPVywgc2hlYWZfcmV0dXJuX3Nsb3cpO1xuLS1cbm1tL3NsdWIuYy05NDU0LVxubW0vc2x1Yi5jOjk0NTU6I2lmZGVmIENPTkZJR19LRkVOQ0Vcbm1tL3NsdWIuYy05NDU2LXN0YXRpYyBzc2l6ZV90IHNraXBfa2ZlbmNlX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1Zilcbi0tXG5tbS9zbHViLmM9OTQ3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0ge1xuLS1cbm1tL3NsdWIuYy05NDk2LVx0XHUwMDI2c2xhYnNfY3B1X3BhcnRpYWxfYXR0ci5hdHRyLFxubW0vc2x1Yi5jOjk0OTc6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtOTQ5OC1cdFx1MDAyNnRvdGFsX29iamVjdHNfYXR0ci5hdHRyLFxuLS1cbm1tL3NsdWIuYy05NTA3LSNlbmRpZlxubW0vc2x1Yi5jOjk1MDg6I2lmZGVmIENPTkZJR19aT05FX0RNQVxubW0vc2x1Yi5jLTk1MDktXHRcdTAwMjZjYWNoZV9kbWFfYXR0ci5hdHRyLFxubW0vc2x1Yi5jLTk1MTAtI2VuZGlmXG5tbS9zbHViLmM6OTUxMTojaWZkZWYgQ09ORklHX05VTUFcbm1tL3NsdWIuYy05NTEyLVx0XHUwMDI2cmVtb3RlX25vZGVfZGVmcmFnX3JhdGlvX2F0dHIuYXR0cixcbm1tL3NsdWIuYy05NTEzLSNlbmRpZlxubW0vc2x1Yi5jOjk1MTQ6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtOTUxNS1cdFx1MDAyNmFsbG9jX2Zhc3RwYXRoX2F0dHIuYXR0cixcbi0tXG5tbS9zbHViLmMtOTU0MS0jZW5kaWZcbm1tL3NsdWIuYzo5NTQyOiNpZmRlZiBDT05GSUdfRkFJTFNMQUJcbm1tL3NsdWIuYy05NTQzLVx0XHUwMDI2ZmFpbHNsYWJfYXR0ci5hdHRyLFxubW0vc2x1Yi5jLTk1NDQtI2VuZGlmXG5tbS9zbHViLmM6OTU0NTojaWZkZWYgQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZXG5tbS9zbHViLmMtOTU0Ni1cdFx1MDAyNnVzZXJzaXplX2F0dHIuYXR0cixcbm1tL3NsdWIuYy05NTQ3LSNlbmRpZlxubW0vc2x1Yi5jOjk1NDg6I2lmZGVmIENPTkZJR19LRkVOQ0Vcbm1tL3NsdWIuYy05NTQ5LVx0XHUwMDI2c2tpcF9rZmVuY2VfYXR0ci5hdHRyLFxuLS1cbm1tL3NsdWIuYz05NzkzPXN0YXRpYyBpbnQgc2xhYl9kZWJ1Z2ZzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubW0vc2x1Yi5jLTk4MzQtXG5tbS9zbHViLmM6OTgzNTojaWZkZWYgQ09ORklHX1NUQUNLREVQT1Rcbm1tL3NsdWIuYy05ODM2LVx0XHR7XG4tLVxubW0vc2x1Yi5jPTk5OTg9X19pbml0Y2FsbChzbGFiX2RlYnVnZnNfaW5pdCk7XG4tLVxubW0vc2x1Yi5jLTEwMDAyLSAqL1xubW0vc2x1Yi5jOjEwMDAzOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTEwMDA0LXZvaWQgZ2V0X3NsYWJpbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYmluZm8gKnNpbmZvKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggZGlzc2VjdGluZyB0aGlzIHBpZWNlIG9mIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGluIGBtbS9zbHViLmNgKioKCkFscmlnaHQsIHRoZSBjb2RlIEkmIzM5O20gZm9jdXNpbmcgb24gaXMgaW5zaWRlIGBtbS9zbHViLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgZnVuY3Rpb25zLiBUaW1lIHRvIG5hdmlnYXRlIHRvIGl0cyBkZWZpbml0aW9uLiBJJiMzOTt2ZSBnb3QgbXkgdHJ1c3R5IGVkaXRvciBvcGVuLCBhbmQgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGxpbmUgMjE1Ni4gUmlnaHQsIGZvdW5kIGl0LiBOb3csIGdpdmVuIHRoZSBudWFuY2VzIG9mIGtlcm5lbCBjb2RlLCBteSBuZXh0IG1vdmUgaXMgY3J1Y2lhbDogSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMsIHRoZSBgI2lmZGVmYCBibG9ja3MsIHRoYXQgc3Vycm91bmQgdGhpcyBmdW5jdGlvbi4gVGhpcyB3aWxsIHRlbGwgbWUgKndoZW4qIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBzY2VuYXJpb3MgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBhY3RpdmUuIFRoaXMgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZSBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGl0IGNhbiBoYXZlIG9uIHN5c3RlbSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDUwOlx0ICogVGhlIGFsbG9jYXRlZCBvYmpjZyBwb2ludGVycyBhcnJheSBvciBzaGVhZiBpcyBub3QgYWNjb3VudGVkIGRpcmVjdGx5LlxuMjA1MTpcdCAqIE1vcmVvdmVyLCBpdCBzaG91bGQgbm90IGNvbWUgZnJvbSBETUEgYnVmZmVyIGFuZCBpcyBub3QgcmVhZGlseVxuMjA1MjpcdCAqIHJlY2xhaW1hYmxlLiBOb2RlIHJlc3RyaWN0aW9uIGZvciB0aGUgcGFyZW50IGFsbG9jYXRpb24gYWxzbyBzaG91bGRcbjIwNTM6XHQgKiBub3QgYXBwbHkgdG8gdGhlIHNsYWImIzM5O3MgaW50ZXJuYWwgb2JqZWN0cywgYXMgd2VsbCBhcyBfX0dGUF9DT01QIHVzZWRcbjIwNTQ6XHQgKiBmb3IgbmV3IHNsYWIgYWxsb2NhdGlvbnMuXG4yMDU1Olx0ICogU28gdGhvc2UgR0ZQIGJpdHMgc2hvdWxkIGJlIG1hc2tlZCBvZmYuXG4yMDU2Olx0ICovXG4yMDU3Olx0I2RlZmluZSBPQkpDR1NfQ0xFQVJfTUFTS1x0KF9fR0ZQX0RNQSB8IF9fR0ZQX1JFQ0xBSU1BQkxFIHwgXFxcbjIwNTg6XHRcdFx0XHRcdF9fR0ZQX0FDQ09VTlQgfCBfX0dGUF9OT0ZBSUwgfCBcXFxuMjA1OTpcdFx0XHRcdFx0X19HRlBfVEhJU05PREUgfCBfX0dGUF9DT01QKVxuMjA2MDpcdFxuMjA2MTpcdCNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXG4yMDYyOlx0XG4yMDYzOlx0I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG4yMDY0Olx0XG4yMDY1Olx0c3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKVxuMjA2NjpcdHtcbjIwNjc6XHRcdHN0cnVjdCBzbGFiICpvYmpfc2xhYjtcbjIwNjg6XHRcdHVuc2lnbmVkIGxvbmcgc2xhYl9leHRzO1xuMjA2OTpcdFxuMjA3MDpcdFx0b2JqX3NsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcbjIwNzE6XHRcdHNsYWJfZXh0cyA9IHNsYWJfb2JqX2V4dHMob2JqX3NsYWIpO1xuMjA3MjpcdFx0aWYgKHNsYWJfZXh0cykge1xuMjA3MzpcdFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xuMjA3NDpcdFx0XHR1bnNpZ25lZCBpbnQgb2ZmcyA9IG9ial90b19pbmRleChvYmpfc2xhYi1cdTAwM2VzbGFiX2NhY2hlLFxuMjA3NTpcdFx0XHRcdFx0XHRcdCBvYmpfc2xhYiwgb2JqKTtcbjIwNzY6XHRcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQgPSBzbGFiX29ial9leHQob2JqX3NsYWIsXG4yMDc3Olx0XHRcdFx0XHRcdFx0ICAgICAgIHNsYWJfZXh0cywgb2Zmcyk7XG4yMDc4Olx0XG4yMDc5Olx0XHRcdGlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KFx1MDAyNmV4dC1cdTAwM2VyZWYpKSkge1xuMjA4MDpcdFx0XHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4yMDgxOlx0XHRcdFx0cmV0dXJuO1xuMjA4MjpcdFx0XHR9XG4yMDgzOlx0XG4yMDg0Olx0XHRcdC8qIGNvZGV0YWcgc2hvdWxkIGJlIE5VTEwgaGVyZSAqL1xuMjA4NTpcdFx0XHRXQVJOX09OKGV4dC1cdTAwM2VyZWYuY3QpO1xuMjA4NjpcdFx0XHRzZXRfY29kZXRhZ19lbXB0eShcdTAwMjZleHQtXHUwMDNlcmVmKTtcbjIwODc6XHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcbjIwODg6XHRcdH1cbjIwODk6XHR9XG4yMDkwOlx0XG4yMDkxOlx0c3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpXG4yMDkyOlx0e1xuMjA5MzpcdFx0cmV0dXJuIGNtcHhjaGcoXHUwMDI2c2xhYi1cdTAwM2VvYmpfZXh0cywgMCwgT0JKRVhUU19BTExPQ19GQUlMKSA9PSAwO1xuMjA5NDpcdH1cbjIwOTU6XHRcbjIwOTY6XHRzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4yMDk3Olx0XHRcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKVxuMjA5ODpcdHtcbjIwOTk6XHRcdC8qXG4yMTAwOlx0XHQgKiBJZiB2ZWN0b3IgcHJldmlvdXNseSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlbiB3ZSBoYXZlIGxpdmVcbjIxMDE6XHRcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcbjIxMDI6XHRcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cbjIxMDM6XHRcdCAqL1xuMjEwNDpcdFx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xuMjEwNTpcdFx0XHR1bnNpZ25lZCBpbnQgaTtcbjIxMDY6XHRcbjIxMDc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSYjNDM7JiM0MzspXG4yMTA4Olx0XHRcdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2dmVjW2ldLnJlZik7XG4yMTA5Olx0XHR9XG4yMTEwOlx0fVxuMjExMTpcdFxuMjExMjpcdCNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG4yMTEzOlx0XG4yMTE0Olx0c3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxuMjExNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiBmYWxzZTsgfVxuMjExNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbjIxMTc6XHRcdFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XG4yMTE4Olx0XG4yMTE5Olx0I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG4yMTIwOlx0XG4yMTIxOlx0c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbjIxMjI6XHR7XG4yMTIzOlx0XHRzbGFiLVx1MDAzZW9ial9leHRzID0gMDtcbjIxMjQ6XHR9XG4yMTI1Olx0XG4yMTI2Olx0LypcbjIxMjc6XHQgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuXG4yMTI4Olx0ICpcbjIxMjk6XHQgKiBUaGUgYXJyYXkgaXMgaXRzZWxmIGttYWxsb2MoKSYjMzk7ZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxuMjEzMDpcdCAqIGttYWxsb2MgY2FjaGUgdGhhbiBAcywgdGhlIFwmIzM0O3NsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5XCYjMzQ7IHJlbGF0aW9uIGNvdWxkXG4yMTMxOlx0ICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFx1MDAzYy1cdTAwM2Uga21hbGxvYy0xaykgdGhhdCBwaW5zIHRoZSBzbGFic1xuMjEzMjpcdCAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXHUwMDNlIGtmcmVlKCkgLVx1MDAzZSBkaXNjYXJkX3NsYWIoKVxuMjEzMzpcdCAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXG4yMTM0Olx0ICogREFHIChhY3ljbGljKS5cbjIxMzU6XHQgKi9cbjIxMzY6XHRzdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuMjEzNzpcdFx0XHRcdFx0XHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcbjIxMzg6XHR7XG4yMTM5Olx0XHRzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItXHUwMDNlb2JqZWN0cztcbjIxNDA6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpvYmpfZXh0c19jYWNoZTtcbjIxNDE6XHRcbjIxNDI6XHRcdGlmIChzeiBcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSlcbjIxNDM6XHRcdFx0cmV0dXJuIHN6O1xuMjE0NDpcdFxuMjE0NTpcdFx0aWYgKCFpc19rbWFsbG9jX25vcm1hbChzKSlcbjIxNDY6XHRcdFx0cmV0dXJuIHN6O1xuMjE0NzpcdFxuMjE0ODpcdFx0b2JqX2V4dHNfY2FjaGUgPSBrbWFsbG9jX3NsYWIoc3osIE5VTEwsIGdmcCwgX19rbWFsbG9jX3Rva2VuKDApKTtcbjIxNDk6XHRcdC8qIGNvbXBhcmUgb2JqZWN0X3NpemUsIG5vdCB0aGUgY2FjaGUgcG9pbnRlciAocGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTc1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEFjdGl2YXRpb24gb2YgQ09ORklHX1NMQUJfT0JKX0VYVCoqCgpBbHJpZ2h0LCBJIHNlZSB0aGUgY29kZSBJJiMzOTttIGRlYWxpbmcgd2l0aCBpcyB1bmRlciBgQ09ORklHX1NMQUJfT0JKX0VYVGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCB3aGF0IGFjdHVhbGx5ICplbmFibGVzKiB0aGF0IHRoaW5nPyYjMzQ7IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBkZWZpbml0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzdGFydCB3aXRoIHRoZSBtb3N0IHJlbGV2YW50IG9uZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMsIHNlZSB3aGF0IHRyaWdnZXJzIHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGZsYWcuIFdoYXQgYXJlIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhpcyBlbmFibGVkPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcz8gV2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/IFRoaXMgcmVxdWlyZXMgYSBmb2N1c2VkIGh1bnQgZm9yIHRoZSBkZXBlbmRlbmNpZXMgdGhhdCBnb3Zlcm4gaXRzIGFjdGl2YXRpb24uIFRpbWUgdG8gc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNMQUJfT0JKX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTAzMz1jb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4tLVxuaW5pdC9LY29uZmlnLTEwNDAtXG5pbml0L0tjb25maWc6MTA0MTpjb25maWcgU0xBQl9PQkpfRVhUXG5pbml0L0tjb25maWctMTA0Mi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0OTAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBTTEFCX09CSl9FWFRgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHRzIHRoYXQgYXJlIGFjdHVhbGx5IHVzaW5nIGBTTEFCX09CSl9FWFRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZsYWcgaXMgZ2V0dGluZyBzZXQsIHJlYWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aHkuIEkga25vdyBpdCYjMzk7cyBhIGtleSBiaXQgZm9yIG1hbmFnaW5nIG9iamVjdCBleHRlbnNpb25zIHdpdGhpbiB0aGUgU0xBQiBhbGxvY2F0b3IsIGJ1dCB0aGUgc3BlY2lmaWMgdXNhZ2Ugd2lsbCBkaWN0YXRlIHRoZSBmaW5lciBwb2ludHMgb2YgaXRzIGJlaGF2aW9yLCBhbmQgdGhhdCBpcyB3aGF0IEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZi4gSXMgaXQgcHJpbWFyaWx5IGZvciB0cmFja2luZyBtZXRhZGF0YSwgbWFuYWdpbmcgbGlmZWN5Y2xlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBncmVwIHRocm91Z2ggdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBpcyB0aGUgYmVzdCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIG91dHB1dCBvZiB0aGUgZ3JlcCBjb21tYW5kIGFuZCBuYXJyb3cgaXQgdG8gcmVsZXZhbnQgc2VjdGlvbnMgb2YgY29kZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGVhY2ggdXNhZ2Ugc2l0ZSB0byByZWNvbnN0cnVjdCB0aGUgY29udHJvbCBmbG93IGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBkaWZmZXJlbnQgY29tcG9uZW50cyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgSSBhbSBrZWVwaW5nIGluIG1pbmQgYW55IHBvdGVudGlhbCBzZWN1cml0eSByYW1pZmljYXRpb25zIG9mIHRoaXMgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFNMQUJfT0JKX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3Mz1jb25maWcgTUVNQ0dcbi0tXG5pbml0L0tjb25maWctMTA3Ni1cdHNlbGVjdCBFVkVOVEZEXG5pbml0L0tjb25maWc6MTA3NzpcdHNlbGVjdCBTTEFCX09CSl9FWFRcbmluaXQvS2NvbmZpZy0xMDc4LVx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4tLVxubGliL0tjb25maWcuZGVidWc9MTA1MT1jb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTEwNTgtXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbmxpYi9LY29uZmlnLmRlYnVnOjEwNTk6XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDYwLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTbGFiIE9iamVjdCBFeHRlbnNpb24gQ3ljbGUgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBjeWNsZSBpbiB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYHNsYWJvYmpfZXh0YCBhcnJheS4gVGhpcyBjb21lcyBpbnRvIHBsYXkgd2hlbiBlaXRoZXIgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBhcmUgZW5hYmxlZCwgd2hpY2gsIGluIHR1cm4sIGVuYWJsZXMgYENPTkZJR19TTEFCX09CSl9FWFRgLgoKVGhlIHByb2JsZW0gYm9pbHMgZG93biB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBga21hbGxvYy01MTJgIGFuZCBga21hbGxvYy0xa2DigJRhIGNsYXNzaWMgZGVhZGxvY2sgc2l0dWF0aW9uLiBJdCBoYXBwZW5zIHdoZW4gdGhlIHNpemUgb2YgYG9ial9leHRzX2NhY2hlLSZndDtvYmplY3Rfc2l6ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBzLSZndDtvYmplY3Rfc2l6ZWAuIFRoZSBmaXggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KClRoZSBwcmV2aW91cyBjb2RlIGNvbXBhcmVkIHRoZSBvYmplY3Qgc2l6ZXMsIHRoZSBmaXggcmV2ZXJzZXMgdGhlIGNvbXBhcmlzb246IGZyb20gYGlmIChzLSZndDtvYmplY3Rfc2l6ZSA9PSBvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemUpIHJldHVybiBvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemUgJiM0MzsgMTtgIHRvIGBpZiAob2JqX2V4dHNfY2FjaGUtJmd0O29iamVjdF9zaXplICZsdDs9IHMtJmd0O29iamVjdF9zaXplKSByZXR1cm4gcy0mZ3Q7b2JqZWN0X3NpemUgJiM0MzsgMTtgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgc2xhYiB0ZWFyZG93biBwcm9jZXNzIGZyb20gZ2V0dGluZyBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLgoKVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZ2l2ZW4gdGhhdCBga21hbGxvY2AgYW5kIGBzbGFiYCBhcmUgY29yZSBrZXJuZWwgZmVhdHVyZXMgdXNlZCBhY3Jvc3MgdGhlIGJvYXJkLCBldmVuIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBNRU1DR2Agb3IgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBJIHRoaW5rIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBwcm9iYWJseSBhIGdvb2QgY29uZmlnIHRvIGNoZWNrLCBzaW5jZSBpdCYjMzk7cyBtb3JlIHNwZWNpZmljLiBZZXMsIHRoYXQgaXMgcmlnaHQuIGBNRU1DR2AgaXMgZ29vZCwgdG9vLgoKSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgYG9ial9leHRzX2FsbG9jX3NpemVgIGFuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgdG8gc2VlIGlmIHRob3NlIHdvdWxkIGJlIGdvb2QgZm9jdXMgc3ltYm9scy4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGxvb2tzIGludGVyZXN0aW5nLCBpdCBpcyBjYWxsZWQgZnJvbSBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgLCBhbmQgdGhhdCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYC4gVGhpcyBpcyBhIGhvdCBwYXRoIGZvciBzbGFiIGFsbG9jYXRpb24sIGJ1dCBpdCBpcyBjYWxsZWQgb25jZSBwZXIgc2xhYi4gU28gbWF5YmUgYGFsbG9jX3NsYWJfb2JqX2V4dHNgICppcyogYSBnb29kIGZvY3VzIHN5bWJvbC4KCkxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZC4gYG9ial9leHRzX2FsbG9jX3NpemVgIGlzIHN0YXRpYyBpbmxpbmUsIHNvIHRoYXQgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGEgc3ltYm9sLiBOb3csIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBub3Qgc3RhdGljLiBJcyBpdCBleHBvcnRlZCwgb3IgZ2xvYmFsPyBJIHNob3VsZCBjaGVjayBpdCBpbiBgbW0vc2x1Yi5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIxNTUtXG5tbS9zbHViLmM6MjE1NjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjE1Ny1cdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjIzMD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIyNjktICovXG5tbS9zbHViLmM6MjI3MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMjcxLXtcbi0tXG5tbS9zbHViLmM9MjMyMT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMzI0LVxubW0vc2x1Yi5jOjIzMjU6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzI2LVx0XHRcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjMzMT1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIzMzQtXG5tbS9zbHViLmM6MjMzNTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzM2LVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmM9MjM0NT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTIzNDgtXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG5tbS9zbHViLmM6MjM0OTpcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbm1tL3NsdWIuYy0yMzUwLVx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cJiMzNDssXG4tLVxubW0vc2x1Yi5jPTMzNTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzU4LVx0XHRcdCFzbGFiX29ial9leHRzKHNsYWIpKVxubW0vc2x1Yi5jOjMzNTk6XHRcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxubW0vc2x1Yi5jLTMzNjAtXHRcdFx0XHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcbi0tXG5tbS9zbHViLmM9MzM4MT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zNDMxLVx0ICovXG5tbS9zbHViLmM6MzQzMjpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQzMy1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDoKCioqSW52ZXN0aWdhdGluZyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIHNlZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgZGVmaW5lZCwgYW5kIGl0JiMzOTtzIGhhbmdpbmcgb3V0IGF0IGxpbmUgMjE1Ni4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBhIGBzdGF0aWNgIGZ1bmN0aW9uIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyB0aGF0IGltcGxpZXMgaXRzIHNjb3BlIGlzIGJyb2FkZXIgdGhhbiBqdXN0IHRoaXMgZmlsZSwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgZWxzZXdoZXJlLiBOb3cgaG9sZCBvbi4uLiBJIGNvdWxkIHN3ZWFyIEkmIzM5O3ZlIHNlZW4gdGhhdCBuYW1lIGJlZm9yZS4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gTGluZSAyMzI1Li4uIEFoYSEgVGhlcmUgKmlzKiBhbm90aGVyIGRlZmluaXRpb24gb2YgaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGVzZSB0d28gZGVmaW5pdGlvbnM7IGFyZSB0aGV5IHRoZSBzYW1lLCBhcmUgdGhleSBkaWZmZXJlbnQ/IElzIHRoaXMgc29tZSBzb3J0IG9mIG92ZXJsb2FkaW5nPyBBIGZvcndhcmQgZGVjbGFyYXRpb24/IE9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBpbnRvIGxpbmUgMjMyNSBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMTA6XHRcdFx0c2xhYi1cdTAwM2VvYmpfZXh0cyA9IG9ial9leHRzO1xuMjMxMTpcdFx0XHRzbGFiX3NldF9zdHJpZGUoc2xhYiwgcy1cdTAwM2VzaXplKTtcbjIzMTI6XHRcdH1cbjIzMTM6XHR9XG4yMzE0Olx0XG4yMzE1Olx0I2Vsc2UgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xuMjMxNjpcdFxuMjMxNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcbjIzMTg6XHR7XG4yMzE5Olx0fVxuMjMyMDpcdFxuMjMyMTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4yMzIyOlx0e1xuMjMyMzpcdH1cbjIzMjQ6XHRcbjIzMjU6XHRzdGF0aWMgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuMjMyNjpcdFx0XHRcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbjIzMjc6XHR7XG4yMzI4Olx0XHRyZXR1cm4gMDtcbjIzMjk6XHR9XG4yMzMwOlx0XG4yMzMxOlx0c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuMjMzMjpcdHtcbjIzMzM6XHR9XG4yMzM0Olx0XG4yMzM1Olx0c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4yMzM2Olx0XHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxuMjMzNzpcdHtcbjIzMzg6XHR9XG4yMzM5Olx0XG4yMzQwOlx0I2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbjIzNDE6XHRcbjIzNDI6XHQjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbjIzNDM6XHRcbjIzNDQ6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbjIzNDU6XHRwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4yMzQ2Olx0XHRcdFx0ICAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgdm9pZCAqcClcbjIzNDc6XHR7XG4yMzQ4Olx0XHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG4yMzQ5Olx0XHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG4yMzUwOlx0XHRcdHByX3dhcm5fb25jZShcJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwmIzM0OyxcbjIzNTE6XHRcdFx0XHQgICAgIF9fZnVuY19fLCBzLVx1MDAzZW5hbWUpO1xuMjM1MjpcdFx0XHRyZXR1cm4gMDtcbjIzNTM6XHRcdH1cbjIzNTQ6XHRcbjIzNTU6XHRcdHJldHVybiBzbGFiX29ial9leHRzKHNsYWIpO1xuMjM1NjpcdH1cbjIzNTc6XHRcbjIzNTg6XHRcbjIzNTk6XHQvKiBTaG91bGQgYmUgY2FsbGVkIG9ubHkgaWYgbWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNsYWIgT2JqZWN0IEV4dGVuc2lvbnMqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgZGVhbC4gTGluZSAyMzI1IGlzIGp1c3QgdGhlIHBsYWNlaG9sZGVyLCB0aGUgYmFzaWMgaW1wbGVtZW50YXRpb24sIGlmIHdlICpkb24mIzM5O3QqIGhhdmUgYENPTkZJR19TTEFCX09CSl9FWFRgIGRlZmluZWQuIFRoYXQgbWVhbnMgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGxpa2VseSB0aGUga2V5IGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSAqcmVhbCogYWN0aW9uIGlzLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGFuZCBgTUVNQ0dgLiBJIHdvbmRlciBpZiBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYnkgaXRzZWxmIGlzIGVub3VnaCB0byB0cmlnZ2VyIHRoZSBiZWhhdmlvdXIgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBMZXQgbWUgY2hlY2suLi4gQWgsIHllcywgaXQgbG9va3MgbGlrZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZG9lcywgaW4gZmFjdCwgc2VsZWN0IGBTTEFCX09CSl9FWFRgLiBQZXJmZWN0LgoKV2FpdCBhIHNlY29uZC4uLiBXaGVyZSBpcyBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVmaW5lZD8gQWgsIGl0JiMzOTtzIGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIE9rYXksIG5vdyBJIGp1c3QgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBhICp2YWxpZCogY29uZmlndXJhdGlvbiBvcHRpb24uIEp1c3QgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGNoYXNpbmcgYSBwaGFudG9tLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTEwNDc9Y29uZmlnIENPREVfVEFHR0lOR1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTEwNTAtXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDUxOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUyLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTA2NC1cbmxpYi9LY29uZmlnLmRlYnVnOjEwNjU6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY2LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY5LVxubGliL0tjb25maWcuZGVidWc6MTA3MDpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubGliL0tjb25maWcuZGVidWctMTA3MS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDUzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBDb25maWcgVmFsaWRpdHkqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGEgZGVmaW5lZCBhbmQgYWNjZXB0YWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIGBNRU1DR2AuIEkgbmVlZCB0byBlbnN1cmUgYm90aCBvZiB0aGVzZSBhcmUgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgdGhlIGN1cnJlbnQgYnVpbGQgb3IgZW52aXJvbm1lbnQuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBjb250ZXh0LCB0aGF0IEkmIzM5O20gd29ya2luZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uLCBsaWtlbHkgbG9va2luZyB0byBlbmFibGUgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gR290dGEgbWFrZSBzdXJlIGJvdGggc2V0dGluZ3MgYXJlIHJlY29nbml6ZWQgYW5kIGRvbiYjMzk7dCBjb25mbGljdCB3aXRoIGFueSBvdGhlciBlbmFibGVkIG9wdGlvbnMgb3IgdGhlIHRhcmdldCBwbGF0Zm9ybS4gVGltZSB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBNRU1DR2AgaXMgYWxzbyBhIHZhbGlkIHN5bWJvbCBvciBvcHRpb24gaW4gdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Mi1cbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzQtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODEtXG5pbml0L0tjb25maWc6MTA4Mjpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODMtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwODgtXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDkwLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk1LVxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTA5Ny1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg5OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENvbmZpZ3VyYXRpb24gYW5kIFNsYWIgT2JqZWN0IEV4dGVuc2lvbnMqKgoKT2theSwgc28gSSBzZWUgYE1FTUNHYCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgY29uZmlndXJhdGlvbi4gV2UmIzM5O2xsIGluY2x1ZGUgaXQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1DR2AgYXJlIGxpc3RlZCBhcyBvdXIgYEVuYWJsZUNvbmZpZ3NgLiBBbHRob3VnaCwgSSBrbm93IGBNRU1DR2AgaXMgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0LCBpdCBkb2VzbiYjMzk7dCBodXJ0IHRvIGV4cGxpY2l0bHkgbGlzdCBpdC4gQmV0dGVyIHRvIGJlIGNsZWFyLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgcmVhY2hhYmxlLiBZZXMsIG9mIGNvdXJzZSwgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBzbGFiIGFsbG9jYXRpb24sIGJ1dCBvbmx5IHdoZW4gYFNMQUJfT0JKX0VYVGAgaXMgZW5hYmxlZC4gRXhjZWxsZW50LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGN5Y2xlIHRoYXQgd2FzIG9jY3VycmluZyBpbiB0aGUgc2xhYm9ial9leHQgYXJyYXkgYWxsb2NhdGlvbi4gR29vZCBjYXRjaC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucyB3ZSBzaG91bGQgY29uc2lkZXIgaGVyZT8gV2VsbCwgYG9ial9leHRzX2FsbG9jX3NpemVgIGlzIHN0YXRpYyBpbmxpbmUsIHNvIHRoYXQgZG9lc24mIzM5O3QgZGVtYW5kIHNpZ25pZmljYW50IGF0dGVudGlvbiwgYnV0IGBhbGxvY19zbGFiX29ial9leHRzYCBpcyB0aGUgbWFpbiBvbmUgdG8gZm9jdXMgb24uIEFuZCwgdGhlcmUmIzM5O3MgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgLi4uIGxldCYjMzk7cyBnaXZlIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCBhIGxvb2sgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjIzMD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIyNjktICovXG5tbS9zbHViLmM6MjI3MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMjcxLXtcbi0tXG5tbS9zbHViLmM9MjMzMT1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIzMzQtXG5tbS9zbHViLmM6MjMzNTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzM2LVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmM9MzM4MT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zNDMxLVx0ICovXG5tbS9zbHViLmM6MzQzMjpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQzMy1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzE4CgkJCQkJCQlvdXRwdXQ6IDE0MAoJCQkJCQkJdGhvdWdodHM6IDc0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdCB3aXRoIHN5emthbGxlci4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhcm91bmQgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGFuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AuIEkgc2VlIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGlzIGNhbGxlZCBieSBgYWxsb2NhdGVfc2xhYmAsIGFuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgY2FsbGVkIGJ5IGBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9va2AgYW5kIGBhY2NvdW50X3NsYWJgLiBUaG9zZSBhcmUgZ29vZCBlbnRyeSBwb2ludHMgdG8gZm9jdXMgdGhlIGZ1enplciBvbiwgZGVmaW5pdGVseS4gV2hpbGUgbG9va2luZyBhdCB0aG9zZSwgYGZyZWVfc2xhYl9vYmpfZXh0c2AgbG9va3MgcmVsZXZhbnQgYXMgd2VsbCwgc28gSSYjMzk7bGwgYWRkIHRob3NlIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0OiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGFuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBpbmZpbml0ZSByZWN1cnNpb24gZHVyaW5nIHNsYWIgdGVhcmRvd24sIHNwZWNpZmljYWxseSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4gSXQgbW9kaWZpZXMgYG9ial9leHRzX2FsbG9jX3NpemVgIHRvIHByZXZlbnQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gc2xhYnMgd2hlbiBhbGxvY2F0aW5nIHRoZSBgc2xhYm9ial9leHRgIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNMVUIgYWxsb2NhdG9yLCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBtYWtlcyBpdCB3b3J0aCBmdXp6aW5nLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZSBkZXRhaWxzIGFib3V0IHRoZXNlIGZ1bmN0aW9ucy4gIGBhbGxvY19zbGFiX29ial9leHRzYCBpc24mIzM5O3Qgc3RhdGljIGluIGBtbS9zbHViLmNgIGFuZCBpc24mIzM5O3QgZXhwb3J0ZWQsIGJ1dCB0aGF0IHNob3VsZG4mIzM5O3QgbWF0dGVyIHNpbmNlIHN5emthbGxlciBndWlkZXMgZnV6emluZyB0b3dhcmQgdGhlc2UgZnVuY3Rpb25zLCBhcyBsb25nIGFzIGl0JiMzOTtzIHJlYWNoYWJsZS4gYG9ial9leHRzX2FsbG9jX3NpemVgIGlzIGBzdGF0aWMgaW5saW5lYCBzbyBpdCB3b24mIzM5O3QgYmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYnV0IHRoZSBpbXBvcnRhbnQgZnVuY3Rpb24sIGBhbGxvY19zbGFiX29ial9leHRzYCwgd2lsbCBiZS4gIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSBwcm9ibGVtIGZvciBmdXp6aW5nIGJ1dCBpdCYjMzk7cyBub3QgbWFya2VkIGlubGluZSwgYW5kIHRoZXJlJiMzOTtzIGEgbm9uLWlubGluZSB2ZXJzaW9uIHNvIHRoaXMgc2hvdWxkIGJlIGFjY2Vzc2libGUgdG8gdGhlIGZ1enplci4gVGhpcyB3aWxsIHdvcmsuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIGBTTEFCX09CSl9FWFRgIHNlZW1zIHRvIGJlIHRoZSBrZXksIGFuZCBpdCYjMzk7cyBzZWxlY3RlZCBieSBlaXRoZXIgYE1FTUNHYCBvciBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFNvLCBlbmFibGluZyBlaXRoZXIgb2YgdGhvc2Ugd2lsbCBnZXQgdXMgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGluY2x1ZGUgYm90aC4gSSB3aWxsIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBhbmQgdGFyZ2V0IGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoaXMgYW5hbHlzaXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBwbGFuIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzX2Vhcmx5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvbi9kZWFkbG9jayBkdXJpbmcgc2xhYiB0ZWFyZG93biBieSBlbnN1cmluZyB0aGF0IHRoZSBzbGFib2JqX2V4dCBhcnJheSBpcyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBrbWFsbG9jIGNhY2hlLiBUaGlzIHByZXZlbnRzIGEgY3ljbGUgd2hlcmUgYSBzbGFiIGhvbGRzIGFub3RoZXIgc2xhYiYjMzk7cyBhcnJheS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFNMVUIgYWxsb2NhdG9yIGFuZCBpcyByZWFjaGFibGUgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgb3IgbWVtb3J5IGNncm91cHMgYXJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW5maW5pdGUgcmVjdXJzaW9uL2RlYWRsb2NrIGR1cmluZyBzbGFiIHRlYXJkb3duIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGlzIGFsbG9jYXRlZCBmcm9tIGEgc3RyaWN0bHkgbGFyZ2VyIGttYWxsb2MgY2FjaGUuIFRoaXMgcHJldmVudHMgYSBjeWNsZSB3aGVyZSBhIHNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQyOjM5LjcwNDc4MjkxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjQ3ODUwMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvbi9kZWFkbG9jayBkdXJpbmcgc2xhYiB0ZWFyZG93biBieSBlbnN1cmluZyB0aGF0IHRoZSBzbGFib2JqX2V4dCBhcnJheSBpcyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBrbWFsbG9jIGNhY2hlLiBUaGlzIHByZXZlbnRzIGEgY3ljbGUgd2hlcmUgYSBzbGFiIGhvbGRzIGFub3RoZXIgc2xhYidzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDI6MzkuNzA0Nzg4Njc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI4ODEyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ODRlYTRhNDM3MTU5N2VhNzIzMzBiMzQ0ZTE1YWQxMGQ3Y2E0ODllXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVuIDI1IDIzOjQyOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xcbmluZGV4IDllYzc3NGRjNzAwOTY5Li40OGU1NGQzNDA4NjVhNSAxMDA2NDRcXG4tLS0gYS9tbS9zbHViLmNcXG4rKysgYi9tbS9zbHViLmNcXG5AQCAtMjEyNCwxNSArMjEyNCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBDYWxjdWxhdGUgdGhlIGFsbG9jYXRpb24gc2l6ZSBmb3Igc2xhYm9ial9leHQgYXJyYXkuXFxuKyAqIFNpemUgb2YgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGZvciBAc2xhYi5cXG4gICpcXG4tICogV2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZW5hYmxlZCwgdGhlIG9ial9leHRzIGFycmF5XFxuLSAqIGNvdWxkIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgY2FjaGUgaXQncyBiZWluZyBhbGxvY2F0ZWQgZm9yLlxcbi0gKiBUaGlzIHdvdWxkIHByZXZlbnQgdGhlIHNsYWIgZnJvbSBldmVyIGJlaW5nIGZyZWVkIGJlY2F1c2UgaXQgd291bGRcXG4tICogYWx3YXlzIGNvbnRhaW4gYXQgbGVhc3Qgb25lIGFsbG9jYXRlZCBvYmplY3QgKGl0cyBvd24gb2JqX2V4dHMgYXJyYXkpLlxcbi0gKlxcbi0gKiBUbyBhdm9pZCB0aGlzLCBpbmNyZWFzZSB0aGUgYWxsb2NhdGlvbiBzaXplIHdoZW4gd2UgZGV0ZWN0IHRoZSBhcnJheVxcbi0gKiBtYXkgY29tZSBmcm9tIHRoZSBzYW1lIGNhY2hlLCBmb3JjaW5nIGl0IHRvIHVzZSBhIGRpZmZlcmVudCBjYWNoZS5cXG4rICogVGhlIGFycmF5IGlzIGl0c2VsZiBrbWFsbG9jKCknZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxcbisgKiBrbWFsbG9jIGNhY2hlIHRoYW4gQHMsIHRoZSBcXFwic2xhYiBob2xkcyBhbm90aGVyIHNsYWIncyBhcnJheVxcXCIgcmVsYXRpb24gY291bGRcXG4rICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFxcdTAwM2MtXFx1MDAzZSBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzXFxuKyAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXFx1MDAzZSBrZnJlZSgpIC1cXHUwMDNlIGRpc2NhcmRfc2xhYigpXFxuKyAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXFxuKyAqIERBRyAoYWN5Y2xpYykuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbiBcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcXG5AQCAtMjE0NywxNCArMjE0Niw5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdFxcdHJldHVybiBzejtcXG4gXFxuIFxcdG9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7XFxuLVxcdC8qXFxuLVxcdCAqIFdlIGNhbid0IHNpbXBseSBjb21wYXJlIHMgd2l0aCBvYmpfZXh0c19jYWNoZSwgYmVjYXVzZSBwYXJ0aXRpb25lZCBrbWFsbG9jXFxuLVxcdCAqIGNhY2hlcyBoYXZlIG11bHRpcGxlIGNhY2hlcyBwZXIgc2l6ZSwgc2VsZWN0ZWQgYnkgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZS5cXG4tXFx0ICogU2luY2UgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZSBtYXkgZGlmZmVyIGJldHdlZW4ga21hbGxvY19zbGFiKCkgYW5kIGFjdHVhbFxcbi1cXHQgKiBhbGxvY2F0aW9uLCBidW1wIHNpemUgd2hlbiBzaXplcyBhcmUgZXF1YWwuXFxuLVxcdCAqL1xcbi1cXHRpZiAocy1cXHUwMDNlb2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtXFx1MDAzZW9iamVjdF9zaXplKVxcbi1cXHRcXHRyZXR1cm4gb2JqX2V4dHNfY2FjaGUtXFx1MDAzZW9iamVjdF9zaXplICsgMTtcXG4rXFx0LyogY29tcGFyZSBvYmplY3Rfc2l6ZSwgbm90IHRoZSBjYWNoZSBwb2ludGVyIChwYXJ0aXRpb25lZCBrbWFsbG9jIGNhY2hlcykgKi9cXG4rXFx0aWYgKG9ial9leHRzX2NhY2hlLVxcdTAwM2VvYmplY3Rfc2l6ZSBcXHUwMDNjPSBzLVxcdTAwM2VvYmplY3Rfc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIHMtXFx1MDAzZW9iamVjdF9zaXplICsgMTtcXG4gXFxuIFxcdHJldHVybiBzejtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo0MC4xOTg0MDIyMjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzU0MjE3MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvbi9kZWFkbG9jayBkdXJpbmcgc2xhYiB0ZWFyZG93biBieSBlbnN1cmluZyB0aGF0IHRoZSBzbGFib2JqX2V4dCBhcnJheSBpcyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBrbWFsbG9jIGNhY2hlLiBUaGlzIHByZXZlbnRzIGEgY3ljbGUgd2hlcmUgYSBzbGFiIGhvbGRzIGFub3RoZXIgc2xhYidzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ODRlYTRhNDM3MTU5N2VhNzIzMzBiMzQ0ZTE1YWQxMGQ3Y2E0ODllXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdW4gMjUgMjM6NDI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IDllYzc3NGRjNzAwOTY5Li40OGU1NGQzNDA4NjVhNSAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtMjEyNCwxNSArMjEyNCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuIH1cbiBcbiAvKlxuLSAqIENhbGN1bGF0ZSB0aGUgYWxsb2NhdGlvbiBzaXplIGZvciBzbGFib2JqX2V4dCBhcnJheS5cbisgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuXG4gICpcbi0gKiBXaGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBlbmFibGVkLCB0aGUgb2JqX2V4dHMgYXJyYXlcbi0gKiBjb3VsZCBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGNhY2hlIGl0J3MgYmVpbmcgYWxsb2NhdGVkIGZvci5cbi0gKiBUaGlzIHdvdWxkIHByZXZlbnQgdGhlIHNsYWIgZnJvbSBldmVyIGJlaW5nIGZyZWVkIGJlY2F1c2UgaXQgd291bGRcbi0gKiBhbHdheXMgY29udGFpbiBhdCBsZWFzdCBvbmUgYWxsb2NhdGVkIG9iamVjdCAoaXRzIG93biBvYmpfZXh0cyBhcnJheSkuXG4tICpcbi0gKiBUbyBhdm9pZCB0aGlzLCBpbmNyZWFzZSB0aGUgYWxsb2NhdGlvbiBzaXplIHdoZW4gd2UgZGV0ZWN0IHRoZSBhcnJheVxuLSAqIG1heSBjb21lIGZyb20gdGhlIHNhbWUgY2FjaGUsIGZvcmNpbmcgaXQgdG8gdXNlIGEgZGlmZmVyZW50IGNhY2hlLlxuKyAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJ2QuIElmIGl0IGNhbWUgZnJvbSB0aGUgc2FtZSBvciBhIHNtYWxsZXJcbisgKiBrbWFsbG9jIGNhY2hlIHRoYW4gQHMsIHRoZSBcInNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJ3MgYXJyYXlcIiByZWxhdGlvbiBjb3VsZFxuKyAqIGZvcm0gYSBjeWNsZSAoc2VsZiwgb3IgZS5nLiBrbWFsbG9jLTUxMiBcdTAwM2MtXHUwMDNlIGttYWxsb2MtMWspIHRoYXQgcGlucyB0aGUgc2xhYnNcbisgKiBmb3JldmVyIGFuZCByZWN1cnNlcyB2aWEgZnJlZV9zbGFiX29ial9leHRzKCkgLVx1MDAzZSBrZnJlZSgpIC1cdTAwM2UgZGlzY2FyZF9zbGFiKClcbisgKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYVxuKyAqIERBRyAoYWN5Y2xpYykuXG4gICovXG4gc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRcdFx0IHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApXG5AQCAtMjE0NywxNCArMjE0Niw5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdHJldHVybiBzejtcbiBcbiBcdG9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7XG4tXHQvKlxuLVx0ICogV2UgY2FuJ3Qgc2ltcGx5IGNvbXBhcmUgcyB3aXRoIG9ial9leHRzX2NhY2hlLCBiZWNhdXNlIHBhcnRpdGlvbmVkIGttYWxsb2Ncbi1cdCAqIGNhY2hlcyBoYXZlIG11bHRpcGxlIGNhY2hlcyBwZXIgc2l6ZSwgc2VsZWN0ZWQgYnkgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZS5cbi1cdCAqIFNpbmNlIGNhbGxlciBhZGRyZXNzIG9yIHR5cGUgbWF5IGRpZmZlciBiZXR3ZWVuIGttYWxsb2Nfc2xhYigpIGFuZCBhY3R1YWxcbi1cdCAqIGFsbG9jYXRpb24sIGJ1bXAgc2l6ZSB3aGVuIHNpemVzIGFyZSBlcXVhbC5cbi1cdCAqL1xuLVx0aWYgKHMtXHUwMDNlb2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUpXG4tXHRcdHJldHVybiBvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSArIDE7XG4rXHQvKiBjb21wYXJlIG9iamVjdF9zaXplLCBub3QgdGhlIGNhY2hlIHBvaW50ZXIgKHBhcnRpdGlvbmVkIGttYWxsb2MgY2FjaGVzKSAqL1xuK1x0aWYgKG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplIFx1MDAzYz0gcy1cdTAwM2VvYmplY3Rfc2l6ZSlcbitcdFx0cmV0dXJuIHMtXHUwMDNlb2JqZWN0X3NpemUgKyAxO1xuIFxuIFx0cmV0dXJuIHN6O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQyOjQwLjE5ODQwNDE3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDYzOTgzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTFVCIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vc2x1Yi5jYC4gSXQncyBmb2N1c2VkIG9uIG1vZGlmeWluZyB0aGUgYG9ial9leHRzX2FsbG9jX3NpemUoKWAgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYWN0dWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcgZnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZS4gUHJldmlvdXNseSwgdGhlIGxvZ2ljIGNvbXBhcmVkIGBzLVx1MDAzZW9iamVjdF9zaXplYCBkaXJlY3RseSB3aXRoIGBvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZWAuIFRoZSBwYXRjaCByZXBsYWNlcyB0aGlzIHdpdGggYSBjaGVjayB0byBzZWUgaWYgYG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHMtXHUwMDNlb2JqZWN0X3NpemVgLiBUaGVuLCBpdCBqdXN0IHJldHVybnMgYHMtXHUwMDNlb2JqZWN0X3NpemUgKyAxYC4gVGhpcyBzdWJ0bGUgY2hhbmdlIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyB3ZSBwcm9maWxlIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBTTFVCLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCB3ZSBhcmUgY29tcGFyaW5nIHRoZSBzaXplcywgbm90IHRoZSBjYWNoZSBwb2ludGVycyAodG8gYWNjb3VudCBmb3IgcGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0cyB0aGF0IGNhbGxzIGBvYmpfZXh0c19hbGxvY19zaXplYC4gVGhpcyBwcm9iYWJseSBjaGFuZ2VzIHRoZSB1cHBlciBib3VuZHMgb2YgYWxsb2NhdGVkIHNpemUsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgd2lsbCBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBzbHViIGFsbG9jYXRvciBhbmQgaXRzIHByb2ZpbGluZyBsb2dpYy4gTGV0J3Mgc3RhcnQgd2l0aCBjaGVja2luZyB0aGUgY29kZSBvZiB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo0NC4xNDQ4MDQ2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQxNDg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmpfZXh0c19hbGxvY19zaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjEyMT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIxMzUtICovXFxubW0vc2x1Yi5jOjIxMzY6c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjEzNy1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcXG4tLVxcbm1tL3NsdWIuYz0yMTU2PWludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0yMTcxLVxcbm1tL3NsdWIuYzoyMTcyOlxcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xcbm1tL3NsdWIuYy0yMTczLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo0NC4yMDIyMjc2NzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgyMjUwMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIE9iamVjdCBFeHRlbnNpb24gQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBvYmplY3QgZXh0ZW5zaW9ucy4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJlbGllcyBvbiBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgdG8gZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgYW1vdW50IG9mIG1lbW9yeS4gVGhhdCdzIGEgcmVhc29uYWJsZSBkZXNpZ247IHNlcGFyYXRpb24gb2YgY29uY2VybnMgYW5kIGFsbCB0aGF0LiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2hhdCdzIGNhbGxpbmcgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGluIHRoZSBmaXJzdCBwbGFjZT8qIFRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uJ3MgY2FsbGVycyBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVzZS1jYXNlIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBvYmplY3QgZXh0ZW5zaW9ucyBhcmUgY3JlYXRlZCBhbmQgbWFuYWdlZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uLCB0aGF0J3Mgd2hlcmUgSSB3aWxsIHN0YXJ0IGRpZ2dpbmcgaW4gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQyOjQ3LjI4NDQ4MDA0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY1MDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjEzNj1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIxNTUtXFxubW0vc2x1Yi5jOjIxNTY6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMTU3LVxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIyMzA9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIyNjktICovXFxubW0vc2x1Yi5jOjIyNzA6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIyNzEte1xcbi0tXFxubW0vc2x1Yi5jPTIzMjE9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMzI0LVxcbm1tL3NsdWIuYzoyMzI1OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMjYtXFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIzMzE9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzQtXFxubW0vc2x1Yi5jOjIzMzU6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMzYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jPTIzNDU9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTIzNDgtXFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFxcdTAwMjZcXHUwMDI2XFxubW0vc2x1Yi5jOjIzNDk6XFx0ICAgIGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xcbm1tL3NsdWIuYy0yMzUwLVxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXFxcblxcXCIsXFxuLS1cXG5tbS9zbHViLmM9MzM1Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9zbHViLmMtMzM1OC1cXHRcXHRcXHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG5tbS9zbHViLmM6MzM1OTpcXHRcXHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcXG5tbS9zbHViLmMtMzM2MC1cXHRcXHRcXHRcXHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcXG4tLVxcbm1tL3NsdWIuYz0zMzgxPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtMzQzMS1cXHQgKi9cXG5tbS9zbHViLmM6MzQzMjpcXHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xcbm1tL3NsdWIuYy0zNDMzLVxcdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQyOjQ3LjM0MDE0MTcwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTMyMzI2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVsdmluZyBpbnRvIFNsYWIgT2JqZWN0IEV4dGVuc2lvbnMqKlxuXG5SaWdodCwgc28gdGhpcyBuZXcgZmVhdHVyZSBJJ20gbG9va2luZyBhdCwgaXQncyBkZWZpbml0ZWx5IHRpZWQgdG8gYHNsYWJfb2JqX2V4dHNgLiBJbW1lZGlhdGVseSBJJ20gdGhpbmtpbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIOKAkyB0aGF0J3MgdGhlIHVzdWFsIHRlcnJpdG9yeSBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgdGhlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHByZWNpc2VseSB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBmbGlwcGluZyB0aGUgc3dpdGNoIG9uIGBzbGFiX29ial9leHRzYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gVW5kZXJzdGFuZGluZyB0aGUgZW5hYmxpbmcgY29uZGl0aW9ucyBpcyBjcnVjaWFsIGZvciByZWFsbHkgZ3Jhc3BpbmcgdGhlIGltcGFjdCBvZiB0aGlzIGZlYXR1cmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo1MC4wMzMzNzcxNTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4ODE5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2xhYl9vYmpfZXh0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTc2MT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X29yaWdfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTc4OS0gKi9cXG5tbS9zbHViLmM6NzkwOnN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3NsYWJfb2JqX2V4dHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTc5MS17XFxuLS1cXG5tbS9zbHViLmM9ODI4PXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy04MzMtXFxubW0vc2x1Yi5jOjgzNDpcXHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XFxubW0vc2x1Yi5jLTgzNS1cXHRpZiAoIW9ial9leHRzKVxcbi0tXFxubW0vc2x1Yi5jLTg0Mi0jZWxzZVxcbm1tL3NsdWIuYzo4NDM6c3RhdGljIGlubGluZSBib29sIG5lZWRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODQ0LXtcXG4tLVxcbm1tL3NsdWIuYz0yMDY1PXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcXG4tLVxcbm1tL3NsdWIuYy0yMDcwLVxcdG9ial9zbGFiID0gdmlydF90b19zbGFiKG9iaik7XFxubW0vc2x1Yi5jOjIwNzE6XFx0c2xhYl9leHRzID0gc2xhYl9vYmpfZXh0cyhvYmpfc2xhYik7XFxubW0vc2x1Yi5jLTIwNzItXFx0aWYgKHNsYWJfZXh0cykge1xcbm1tL3NsdWIuYzoyMDczOlxcdFxcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxubW0vc2x1Yi5jLTIwNzQtXFx0XFx0dW5zaWduZWQgaW50IG9mZnMgPSBvYmpfdG9faW5kZXgob2JqX3NsYWItXFx1MDAzZXNsYWJfY2FjaGUsXFxuLS1cXG5tbS9zbHViLmMtMjA3OS1cXHRcXHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShcXHUwMDI2ZXh0LVxcdTAwM2VyZWYpKSkge1xcbm1tL3NsdWIuYzoyMDgwOlxcdFxcdFxcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxubW0vc2x1Yi5jLTIwODEtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vc2x1Yi5jLTIwODYtXFx0XFx0c2V0X2NvZGV0YWdfZW1wdHkoXFx1MDAyNmV4dC1cXHUwMDNlcmVmKTtcXG5tbS9zbHViLmM6MjA4NzpcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xcbm1tL3NsdWIuYy0yMDg4LVxcdH1cXG4tLVxcbm1tL3NsdWIuYz0yMTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4tLVxcbm1tL3NsdWIuYy0yMTIwLVxcbm1tL3NsdWIuYzoyMTIxOnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIxMjIte1xcbi0tXFxubW0vc2x1Yi5jLTIxMzEtICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFxcdTAwM2MtXFx1MDAzZSBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzXFxubW0vc2x1Yi5jOjIxMzI6ICogZm9yZXZlciBhbmQgcmVjdXJzZXMgdmlhIGZyZWVfc2xhYl9vYmpfZXh0cygpIC1cXHUwMDNlIGtmcmVlKCkgLVxcdTAwM2UgZGlzY2FyZF9zbGFiKClcXG5tbS9zbHViLmMtMjEzMy0gKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYVxcbi0tXFxubW0vc2x1Yi5jPTIxMzY9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0yMTU1LVxcbm1tL3NsdWIuYzoyMTU2OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjE1Ny1cXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsdWIuYy0yMTgzLVxcdFxcdGlmICghbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3NsdWIuYzoyMTg0OlxcdFxcdCAgICBzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYy0yMTg1LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vc2x1Yi5jLTIyMjktXFxubW0vc2x1Yi5jOjIyMzA6c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbm1tL3NsdWIuYy0yMjMxLXtcXG4tLVxcbm1tL3NsdWIuYy0yMjMzLVxcbm1tL3NsdWIuYzoyMjM0OlxcdG9ial9leHRzID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKXNsYWJfb2JqX2V4dHMoc2xhYik7XFxubW0vc2x1Yi5jLTIyMzUtXFx0aWYgKCFvYmpfZXh0cykge1xcbi0tXFxubW0vc2x1Yi5jLTIyNjktICovXFxubW0vc2x1Yi5jOjIyNzA6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIyNzEte1xcbi0tXFxubW0vc2x1Yi5jLTIyNzctXFxubW0vc2x1Yi5jOjIyNzg6XFx0aWYgKCFuZWVkX3NsYWJfb2JqX2V4dHMocykpXFxubW0vc2x1Yi5jLTIyNzktXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vc2x1Yi5jLTIyODUtXFxubW0vc2x1Yi5jOjIyODY6XFx0XFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yMjg3LVxcdFxcdG1lbXNldChhZGRyLCAwLCBvYmpfZXh0c19zaXplX2luX3NsYWIoc2xhYikpO1xcbm1tL3NsdWIuYzoyMjg4OlxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5tbS9zbHViLmMtMjI4OS1cXG4tLVxcbm1tL3NsdWIuYy0yMzAwLVxcbm1tL3NsdWIuYzoyMzAxOlxcdFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5tbS9zbHViLmMtMjMwMi1cXHRcXHRmb3JfZWFjaF9vYmplY3QoYWRkciwgcywgc2xhYl9hZGRyZXNzKHNsYWIpLCBzbGFiLVxcdTAwM2VvYmplY3RzKVxcbi0tXFxubW0vc2x1Yi5jLTIzMDQtXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcXG5tbS9zbHViLmM6MjMwNTpcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxubW0vc2x1Yi5jLTIzMDYtXFxuLS1cXG5tbS9zbHViLmM9MjMxNz1zdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopXFxuLS1cXG5tbS9zbHViLmMtMjMyMC1cXG5tbS9zbHViLmM6MjMyMTpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbm1tL3NsdWIuYy0yMzIyLXtcXG4tLVxcbm1tL3NsdWIuYy0yMzI0LVxcbm1tL3NsdWIuYzoyMzI1OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMjYtXFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzAtXFxubW0vc2x1Yi5jOjIzMzE6c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbm1tL3NsdWIuYy0yMzMyLXtcXG4tLVxcbm1tL3NsdWIuYy0yMzM0LVxcbm1tL3NsdWIuYzoyMzM1OnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMzM2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz0yMzQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbm1tL3NsdWIuYzoyMzQ1OnByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9zbHViLmMtMjM0Ni1cXHRcXHRcXHQgICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCB2b2lkICpwKVxcbm1tL3NsdWIuYy0yMzQ3LXtcXG5tbS9zbHViLmM6MjM0ODpcXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjM0OTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzNTAtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYy0yMzU0LVxcbm1tL3NsdWIuYzoyMzU1OlxcdHJldHVybiBzbGFiX29ial9leHRzKHNsYWIpO1xcbm1tL3NsdWIuYy0yMzU2LX1cXG4tLVxcbm1tL3NsdWIuYz0yMzYxPV9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtMjM3Ny1cXHRzbGFiID0gdmlydF90b19zbGFiKG9iamVjdCk7XFxubW0vc2x1Yi5jOjIzNzg6XFx0b2JqX2V4dHMgPSBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzLCBzbGFiLCBmbGFncywgYWxsb2NfZmxhZ3MsIG9iamVjdCk7XFxubW0vc2x1Yi5jLTIzNzktXFx0LypcXG4tLVxcbm1tL3NsdWIuYy0yMzg2LVxcbm1tL3NsdWIuYzoyMzg3OlxcdFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5tbS9zbHViLmMtMjM4OC1cXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfaWR4KTtcXG5tbS9zbHViLmMtMjM4OS1cXHRcXHRhbGxvY190YWdfYWRkKFxcdTAwMjZvYmpfZXh0LVxcdTAwM2VyZWYsIGN1cnJlbnQtXFx1MDAzZWFsbG9jX3RhZywgcy1cXHUwMDNlc2l6ZSk7XFxubW0vc2x1Yi5jOjIzOTA6XFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yMzkxLVxcdH0gZWxzZSB7XFxuLS1cXG5tbS9zbHViLmM9MjQwNj1fX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG4tLVxcbm1tL3NsdWIuYy0yNDE1LVxcbm1tL3NsdWIuYzoyNDE2OlxcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG5tbS9zbHViLmMtMjQxNy1cXHRpZiAoIW9ial9leHRzKVxcbi0tXFxubW0vc2x1Yi5jLTI0MTktXFxubW0vc2x1Yi5jOjI0MjA6XFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yNDIxLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmplY3RzOyBpKyspIHtcXG4tLVxcbm1tL3NsdWIuYy0yNDI1LVxcdH1cXG5tbS9zbHViLmM6MjQyNjpcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxubW0vc2x1Yi5jLTI0MjctfVxcbi0tXFxubW0vc2x1Yi5jPTI0ODQ9dm9pZCBtZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbi0tXFxubW0vc2x1Yi5jLTI0OTEtXFxubW0vc2x1Yi5jOjI0OTI6XFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xcbm1tL3NsdWIuYy0yNDkzLVxcdGlmIChsaWtlbHkoIW9ial9leHRzKSlcXG4tLVxcbm1tL3NsdWIuYy0yNDk1LVxcbm1tL3NsdWIuYzoyNDk2OlxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5tbS9zbHViLmMtMjQ5Ny1cXHRfX21lbWNnX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMsIG9ial9leHRzKTtcXG5tbS9zbHViLmM6MjQ5ODpcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxubW0vc2x1Yi5jLTI0OTktfVxcbi0tXFxubW0vc2x1Yi5jPTI1MDI9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI1MzgtXFx0ICogSWdub3JlIEtNQUxMT0NfTk9STUFMIGNhY2hlIHRvIGF2b2lkIHBvc3NpYmxlIGNpcmN1bGFyIGRlcGVuZGVuY3lcXG5tbS9zbHViLmM6MjUzOTpcXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcXG5tbS9zbHViLmMtMjU0MC1cXHQgKiBiZWNvbWluZyBlZmZlY3RpdmVseSB1bmZyZWVhYmxlLlxcbi0tXFxubW0vc2x1Yi5jLTI1NDUtXFx0LyogSWdub3JlIGFscmVhZHkgY2hhcmdlZCBvYmplY3RzLiAqL1xcbm1tL3NsdWIuYzoyNTQ2OlxcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG5tbS9zbHViLmMtMjU0Ny1cXHRpZiAob2JqX2V4dHMpIHtcXG5tbS9zbHViLmM6MjU0ODpcXHRcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxubW0vc2x1Yi5jLTI1NDktXFx0XFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHApO1xcbi0tXFxubW0vc2x1Yi5jLTI1NTEtXFx0XFx0aWYgKHVubGlrZWx5KG9ial9leHQtXFx1MDAzZW9iamNnKSkge1xcbm1tL3NsdWIuYzoyNTUyOlxcdFxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5tbS9zbHViLmMtMjU1My1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9zbHViLmMtMjU1NC1cXHRcXHR9XFxubW0vc2x1Yi5jOjI1NTU6XFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yNTU2LVxcdH1cXG4tLVxcbm1tL3NsdWIuYz0zMzUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzU3LVxcdFxcdFxcdChzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfQUNDT1VOVCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MzM1ODpcXHRcXHRcXHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG5tbS9zbHViLmM6MzM1OTpcXHRcXHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcXG5tbS9zbHViLmMtMzM2MC1cXHRcXHRcXHRcXHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcXG4tLVxcbm1tL3NsdWIuYz0zMzY2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1bmFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxcbi0tXFxubW0vc2x1Yi5jLTMzNzMtXFx0ICovXFxubW0vc2x1Yi5jOjMzNzQ6XFx0ZnJlZV9zbGFiX29ial9leHRzKHNsYWIsIGFsbG93X3NwaW4pO1xcbm1tL3NsdWIuYy0zMzc1LVxcbi0tXFxubW0vc2x1Yi5jPTMzODE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDI2LVxcdHNldHVwX3NsYWJfZGVidWcocywgc2xhYiwgc3RhcnQpO1xcbm1tL3NsdWIuYzozNDI3OlxcdGluaXRfc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG5tbS9zbHViLmMtMzQyOC1cXHQvKlxcbi0tXFxubW0vc2x1Yi5jLTM0MzEtXFx0ICovXFxubW0vc2x1Yi5jOjM0MzI6XFx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcXG5tbS9zbHViLmMtMzQzMy1cXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo1MC4wODkyNjQ2ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMyNjM1ODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgaXMgY29taW5nIGZyb20uIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGVpdGhlciBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIG9yIHBlcmhhcHMgYENPTkZJR19NRU1DR2AgaW5mbHVlbmNpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIGdldCBzb21lIGNvbmNyZXRlIGV2aWRlbmNlLCBzbyBJJ2xsIGp1bXAgcmlnaHQgaW50byB0aGUga2VybmVsIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGBtbS9zbHViLmNgIGZpbGUgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEknbGwgemVybyBpbiBvbiBsaW5lIDIxMzYuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY3JpdGljYWwgY29kZSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uIHBhdGggdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHdoYXQncyBnb2luZyBvbi4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBjb2RlIGJsb2NrIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo1My4xMjE5MDI2NTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEwMDpcXHRcXHQgKiBJZiB2ZWN0b3IgcHJldmlvdXNseSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlbiB3ZSBoYXZlIGxpdmVcXG4yMTAxOlxcdFxcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcXG4yMTAyOlxcdFxcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cXG4yMTAzOlxcdFxcdCAqL1xcbjIxMDQ6XFx0XFx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xcbjIxMDU6XFx0XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuMjEwNjpcXHRcXG4yMTA3OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmplY3RzOyBpKyspXFxuMjEwODpcXHRcXHRcXHRcXHRzZXRfY29kZXRhZ19lbXB0eShcXHUwMDI2dmVjW2ldLnJlZik7XFxuMjEwOTpcXHRcXHR9XFxuMjExMDpcXHR9XFxuMjExMTpcXHRcXG4yMTEyOlxcdCNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxuMjExMzpcXHRcXG4yMTE0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iaikge31cXG4yMTE1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiBmYWxzZTsgfVxcbjIxMTY6XFx0c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbjIxMTc6XFx0XFx0XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKSB7fVxcbjIxMTg6XFx0XFxuMjExOTpcXHQjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cXG4yMTIwOlxcdFxcbjIxMjE6XFx0c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4yMTIyOlxcdHtcXG4yMTIzOlxcdFxcdHNsYWItXFx1MDAzZW9ial9leHRzID0gMDtcXG4yMTI0OlxcdH1cXG4yMTI1OlxcdFxcbjIxMjY6XFx0LypcXG4yMTI3OlxcdCAqIFNpemUgb2YgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGZvciBAc2xhYi5cXG4yMTI4OlxcdCAqXFxuMjEyOTpcXHQgKiBUaGUgYXJyYXkgaXMgaXRzZWxmIGttYWxsb2MoKSdkLiBJZiBpdCBjYW1lIGZyb20gdGhlIHNhbWUgb3IgYSBzbWFsbGVyXFxuMjEzMDpcXHQgKiBrbWFsbG9jIGNhY2hlIHRoYW4gQHMsIHRoZSBcXFwic2xhYiBob2xkcyBhbm90aGVyIHNsYWIncyBhcnJheVxcXCIgcmVsYXRpb24gY291bGRcXG4yMTMxOlxcdCAqIGZvcm0gYSBjeWNsZSAoc2VsZiwgb3IgZS5nLiBrbWFsbG9jLTUxMiBcXHUwMDNjLVxcdTAwM2Uga21hbGxvYy0xaykgdGhhdCBwaW5zIHRoZSBzbGFic1xcbjIxMzI6XFx0ICogZm9yZXZlciBhbmQgcmVjdXJzZXMgdmlhIGZyZWVfc2xhYl9vYmpfZXh0cygpIC1cXHUwMDNlIGtmcmVlKCkgLVxcdTAwM2UgZGlzY2FyZF9zbGFiKClcXG4yMTMzOlxcdCAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXFxuMjEzNDpcXHQgKiBEQUcgKGFjeWNsaWMpLlxcbjIxMzU6XFx0ICovXFxuMjEzNjpcXHRzdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbjIxMzc6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApXFxuMjEzODpcXHR7XFxuMjEzOTpcXHRcXHRzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItXFx1MDAzZW9iamVjdHM7XFxuMjE0MDpcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqb2JqX2V4dHNfY2FjaGU7XFxuMjE0MTpcXHRcXG4yMTQyOlxcdFxcdGlmIChzeiBcXHUwMDNlIEtNQUxMT0NfTUFYX0NBQ0hFX1NJWkUpXFxuMjE0MzpcXHRcXHRcXHRyZXR1cm4gc3o7XFxuMjE0NDpcXHRcXG4yMTQ1OlxcdFxcdGlmICghaXNfa21hbGxvY19ub3JtYWwocykpXFxuMjE0NjpcXHRcXHRcXHRyZXR1cm4gc3o7XFxuMjE0NzpcXHRcXG4yMTQ4OlxcdFxcdG9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7XFxuMjE0OTpcXHRcXHQvKiBjb21wYXJlIG9iamVjdF9zaXplLCBub3QgdGhlIGNhY2hlIHBvaW50ZXIgKHBhcnRpdGlvbmVkIGttYWxsb2MgY2FjaGVzKSAqL1xcbjIxNTA6XFx0XFx0aWYgKG9ial9leHRzX2NhY2hlLVxcdTAwM2VvYmplY3Rfc2l6ZSBcXHUwMDNjPSBzLVxcdTAwM2VvYmplY3Rfc2l6ZSlcXG4yMTUxOlxcdFxcdFxcdHJldHVybiBzLVxcdTAwM2VvYmplY3Rfc2l6ZSArIDE7XFxuMjE1MjpcXHRcXG4yMTUzOlxcdFxcdHJldHVybiBzejtcXG4yMTU0OlxcdH1cXG4yMTU1OlxcdFxcbjIxNTY6XFx0aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbjIxNTc6XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuMjE1ODpcXHR7XFxuMjE1OTpcXHRcXHRjb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XFxuMjE2MDpcXHRcXHR1bnNpZ25lZCBpbnQgb2JqZWN0cyA9IG9ianNfcGVyX3NsYWIocywgc2xhYik7XFxuMjE2MTpcXHRcXHRib29sIG5ld19zbGFiID0gYWxsb2NfZmxhZ3MgXFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xcbjIxNjI6XFx0XFx0dW5zaWduZWQgbG9uZyBuZXdfZXh0cztcXG4yMTYzOlxcdFxcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XFxuMjE2NDpcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcXG4yMTY1OlxcdFxcdHNpemVfdCBzejtcXG4yMTY2OlxcdFxcbjIxNjc6XFx0XFx0Z2ZwIFxcdTAwMjY9IH5PQkpDR1NfQ0xFQVJfTUFTSztcXG4yMTY4OlxcdFxcdC8qIFByZXZlbnQgcmVjdXJzaXZlIGV4dGVuc2lvbiB2ZWN0b3IgYWxsb2NhdGlvbiAqL1xcbjIxNjk6XFx0XFx0YWxsb2NfZmxhZ3MgfD0gU0xBQl9BTExPQ19OT19SRUNVUlNFO1xcbjIxNzA6XFx0XFx0YWxsb2NfZmxhZ3MgXFx1MDAyNj0gflNMQUJfQUxMT0NfTkVXX1NMQUI7XFxuMjE3MTpcXHRcXG4yMTcyOlxcdFxcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xcbjIxNzM6XFx0XFxuMjE3NDpcXHRcXHQvKiBUaGlzIHdpbGwgdXNlIGttYWxsb2Nfbm9sb2NrKCkgaWYgYWxsb2NfZmxhZ3Mgc2F5IHNvICovXFxuMjE3NTpcXHRcXHR2ZWMgPSBrbWFsbG9jX2ZsYWdzKHN6LCBnZnAgfCBfX0dGUF9aRVJPLCBhbGxvY19mbGFncywgc2xhYl9uaWQoc2xhYikpO1xcbjIxNzY6XFx0XFxuMjE3NzpcXHRcXHRpZiAoIXZlYykge1xcbjIxNzg6XFx0XFx0XFx0LypcXG4yMTc5OlxcdFxcdFxcdCAqIFRyeSB0byBtYXJrIHZlY3RvcnMgd2hpY2ggZmFpbGVkIHRvIGFsbG9jYXRlLlxcbjIxODA6XFx0XFx0XFx0ICogSWYgdGhpcyBvcGVyYXRpb24gZmFpbHMsIHRoZXJlIG1heSBiZSBhIHJhY2luZyBwcm9jZXNzXFxuMjE4MTpcXHRcXHRcXHQgKiB0aGF0IGhhcyBhbHJlYWR5IGNvbXBsZXRlZCB0aGUgYWxsb2NhdGlvbi5cXG4yMTgyOlxcdFxcdFxcdCAqL1xcbjIxODM6XFx0XFx0XFx0aWYgKCFtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIpIFxcdTAwMjZcXHUwMDI2XFxuMjE4NDpcXHRcXHRcXHQgICAgc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG4yMTg1OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjIxODY6XFx0XFxuMjE4NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMTg4OlxcdFxcdH1cXG4yMTg5OlxcdFxcbjIxOTA6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHZpcnRfdG9fc2xhYih2ZWMpICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG4yMTkxOlxcdFxcdFxcdFxcdHZpcnRfdG9fc2xhYih2ZWMpLVxcdTAwM2VzbGFiX2NhY2hlID09IHMpO1xcbjIxOTI6XFx0XFxuMjE5MzpcXHRcXHRuZXdfZXh0cyA9ICh1bnNpZ25lZCBsb25nKXZlYztcXG4yMTk0OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4yMTk1OlxcdFxcdG5ld19leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcXG4yMTk2OlxcdCNlbmRpZlxcbjIxOTc6XFx0cmV0cnk6XFxuMjE5ODpcXHRcXHRvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLVxcdTAwM2VvYmpfZXh0cyk7XFxuMjE5OTpcXHRcXHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Mob2xkX2V4dHMsIHZlYywgb2JqZWN0cyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQyOjUzLjEyMjIxODAzMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI3MDEyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIGFuZCBDb250cm9sIEdyb3VwIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHByb2ZpbGluZyBsb2dpYyBpcyB0aWVkIGluLCBvciBpZiBpdCdzIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGZ1bmN0aW9uYWxpdHkuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hlcmUgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IGZpcnN0IGxpbmUgb2YgYXR0YWNrIGlzIHRvIGZvY3VzIG9uIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRob3NlIGAjaWZkZWZgIGJsb2Nrcywgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgdXNlIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2Agb3IgYENPTkZJR19NRU1DR2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoZXNlIHNvcnRzIG9mIGZlYXR1cmVzLiBBbmQgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC9kaXNhYmxlZCBieSB0aGUgcmVzcGVjdGl2ZSBjb25maWd1cmF0aW9ucy5cblxuTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGhvdyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgYmVpbmcgdXNlZC4gV2hlcmUgaXMgaXQgY2FsbGVkPyBJcyBpdCB3aXRoaW4gdGhvc2UgYCNpZmRlZmAgYmxvY2tzPyBJcyB0aGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZD8gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNsZWFyZXN0IGluZGljYXRpb24gb2YgaG93IHRoZSBjb2RlIGZsb3cgY2hhbmdlcyB3aGVuIHByb2ZpbGluZyBvciBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIGVuYWJsZWQuIEknbGwgZm9jdXMgb24gdGhhdCBvbmUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzE5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo1Ni40NDkyMzI0OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDI5MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTE5Mj1lbnVtIHNsYWJfZmxhZ3Mge1xcbi0tXFxubW0vc2x1Yi5jLTIwMy1cXG5tbS9zbHViLmM6MjA0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYzoyMDU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHX09OXFxubW0vc2x1Yi5jLTIwNi1ERUZJTkVfU1RBVElDX0tFWV9UUlVFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxuLS1cXG5tbS9zbHViLmM9MjA4PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxuLS1cXG5tbS9zbHViLmMtMjExLVxcbm1tL3NsdWIuYzoyMTI6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTIxMy1zdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xcbi0tXFxubW0vc2x1Yi5jPTIzMz1zdHJ1Y3Qgc2xhYl9vYmpfaXRlciB7XFxuLS1cXG5tbS9zbHViLmMtMjM1LVxcdHZvaWQgKnN0YXJ0O1xcbm1tL3NsdWIuYzoyMzY6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0yMzctXFx0dW5zaWduZWQgbG9uZyBmcmVlbGlzdF9jb3VudDtcXG4tLVxcbm1tL3NsdWIuYz0yNDg9dm9pZCAqZml4dXBfcmVkX2xlZnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKnApXFxuLS1cXG5tbS9zbHViLmMtMzExLVxcbm1tL3NsdWIuYzozMTI6I2lmZGVmIHN5c3RlbV9oYXNfZnJlZWxpc3RfYWJhXFxubW0vc2x1Yi5jLTMxMy0jZGVmaW5lIF9fQ01QWENIR19ET1VCTEVcXHRfX1NMQUJfRkxBR19CSVQoX1NMQUJfQ01QWENIR19ET1VCTEUpXFxuLS1cXG5tbS9zbHViLmM9MzIyPXN0cnVjdCB0cmFjayB7XFxubW0vc2x1Yi5jLTMyMy1cXHR1bnNpZ25lZCBsb25nIGFkZHI7XFx0LyogQ2FsbGVkIGZyb20gYWRkcmVzcyAqL1xcbm1tL3NsdWIuYzozMjQ6I2lmZGVmIENPTkZJR19TVEFDS0RFUE9UXFxubW0vc2x1Yi5jLTMyNS1cXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuLS1cXG5tbS9zbHViLmM9MzMyPWVudW0gdHJhY2tfaXRlbSB7IFRSQUNLX0FMTE9DLCBUUkFDS19GUkVFIH07XFxubW0vc2x1Yi5jLTMzMy1cXG5tbS9zbHViLmM6MzM0OiNpZmRlZiBTTEFCX1NVUFBPUlRTX1NZU0ZTXFxubW0vc2x1Yi5jLTMzNS1zdGF0aWMgaW50IHN5c2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICopO1xcbi0tXFxubW0vc2x1Yi5jPTM1MT1lbnVtIHN0YXRfaXRlbSB7XFxuLS1cXG5tbS9zbHViLmMtMzgwLVxcbm1tL3NsdWIuYzozODE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTM4Mi1zdHJ1Y3Qga21lbV9jYWNoZV9zdGF0cyB7XFxuLS1cXG5tbS9zbHViLmM9Mzg3PXN0YXRpYyBpbmxpbmUgdm9pZCBzdGF0KGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSlcXG5tbS9zbHViLmMtMzg4LXtcXG5tbS9zbHViLmM6Mzg5OiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy0zOTAtXFx0LypcXG4tLVxcbm1tL3NsdWIuYz0zOTk9dm9pZCBzdGF0X2FkZChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2ksIGludCB2KVxcbm1tL3NsdWIuYy00MDAte1xcbm1tL3NsdWIuYzo0MDE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTQwMi1cXHRyYXdfY3B1X2FkZChzLVxcdTAwM2VjcHVfc3RhdHMtXFx1MDAzZXN0YXRbc2ldLCB2KTtcXG4tLVxcbm1tL3NsdWIuYz00NDM9c3RydWN0IGttZW1fY2FjaGVfbm9kZSB7XFxuLS1cXG5tbS9zbHViLmMtNDQ2LVxcdHN0cnVjdCBsaXN0X2hlYWQgcGFydGlhbDtcXG5tbS9zbHViLmM6NDQ3OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00NDgtXFx0YXRvbWljX2xvbmdfdCBucl9zbGFicztcXG4tLVxcbm1tL3NsdWIuYz01MTc9c3RhdGljIGlubGluZSBmcmVlcHRyX3QgZnJlZWxpc3RfcHRyX2VuY29kZShjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy01MjEtXFxubW0vc2x1Yi5jOjUyMjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcXG5tbS9zbHViLmMtNTIzLVxcdGVuY29kZWQgPSAodW5zaWduZWQgbG9uZylwdHIgXiBzLVxcdTAwM2VyYW5kb20gXiBzd2FiKHB0cl9hZGRyKTtcXG4tLVxcbm1tL3NsdWIuYz01MzA9c3RhdGljIGlubGluZSB2b2lkICpmcmVlbGlzdF9wdHJfZGVjb2RlKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTUzNC1cXG5tbS9zbHViLmM6NTM1OiNpZmRlZiBDT05GSUdfU0xBQl9GUkVFTElTVF9IQVJERU5FRFxcbm1tL3NsdWIuYy01MzYtXFx0ZGVjb2RlZCA9ICh2b2lkICopKHB0ci52IF4gcy1cXHUwMDNlcmFuZG9tIF4gc3dhYihwdHJfYWRkcikpO1xcbi0tXFxubW0vc2x1Yi5jPTU1ND1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZyZWVwb2ludGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIHZvaWQgKmZwKVxcbi0tXFxubW0vc2x1Yi5jLTU1Ny1cXG5tbS9zbHViLmM6NTU4OiNpZmRlZiBDT05GSUdfU0xBQl9GUkVFTElTVF9IQVJERU5FRFxcbm1tL3NsdWIuYy01NTktXFx0QlVHX09OKG9iamVjdCA9PSBmcCk7IC8qIG5haXZlIGRldGVjdGlvbiBvZiBkb3VibGUgZnJlZSBvciBjb3JydXB0aW9uICovXFxuLS1cXG5tbS9zbHViLmM9NjUwPV9fdXBkYXRlX2ZyZWVsaXN0X2Zhc3Qoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyAqb2xkLFxcbi0tXFxubW0vc2x1Yi5jLTY1Mi17XFxubW0vc2x1Yi5jOjY1MzojaWZkZWYgc3lzdGVtX2hhc19mcmVlbGlzdF9hYmFcXG5tbS9zbHViLmMtNjU0LVxcdHJldHVybiB0cnlfY21weGNoZ19mcmVlbGlzdChcXHUwMDI2c2xhYi1cXHUwMDNlZnJlZWxpc3RfY291bnRlcnMsXFxuLS1cXG5tbS9zbHViLmM9Njg4PXN0YXRpYyBpbmxpbmUgYm9vbCBfX3NsYWJfdXBkYXRlX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy03MDYtXFxubW0vc2x1Yi5jOjcwNzojaWZkZWYgU0xVQl9ERUJVR19DTVBYQ0hHXFxubW0vc2x1Yi5jLTcwOC1cXHRwcl9pbmZvKFxcXCIlcyAlczogY21weGNoZyBkb3VibGUgcmVkbyBcXFwiLCBuLCBzLVxcdTAwM2VuYW1lKTtcXG4tLVxcbm1tL3NsdWIuYz03MTQ9c3RhdGljIGlubGluZSBib29sIHNsYWJfdXBkYXRlX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy03MzMtXFxubW0vc2x1Yi5jOjczNDojaWZkZWYgU0xVQl9ERUJVR19DTVBYQ0hHXFxubW0vc2x1Yi5jLTczNS1cXHRwcl9pbmZvKFxcXCIlcyAlczogY21weGNoZyBkb3VibGUgcmVkbyBcXFwiLCBuLCBzLVxcdTAwM2VuYW1lKTtcXG4tLVxcbm1tL3NsdWIuYz03NjE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9vcmlnX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcXG4tLVxcbm1tL3NsdWIuYy03NzYtXFxubW0vc2x1Yi5jOjc3NzojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxcbm1tL3NsdWIuYy03NzgtXFxuLS1cXG5tbS9zbHViLmM9OTA1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtOTEwLVxcbm1tL3NsdWIuYzo5MTE6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTkxMi1cXG4tLVxcbm1tL3NsdWIuYz0xMDMzPXN0YXRpYyBzdHJ1Y3QgdHJhY2sgKmdldF90cmFjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LFxcbi0tXFxubW0vc2x1Yi5jLTEwNDItXFxubW0vc2x1Yi5jOjEwNDM6I2lmZGVmIENPTkZJR19TVEFDS0RFUE9UXFxubW0vc2x1Yi5jLTEwNDQtc3RhdGljIG5vaW5saW5lIGRlcG90X3N0YWNrX2hhbmRsZV90IHNldF90cmFja19wcmVwYXJlKGdmcF90IGdmcF9mbGFncylcXG4tLVxcbm1tL3NsdWIuYz0xMDYyPXN0YXRpYyB2b2lkIHNldF90cmFja191cGRhdGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCxcXG4tLVxcbm1tL3NsdWIuYy0xMDY3LVxcbm1tL3NsdWIuYzoxMDY4OiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxcbm1tL3NsdWIuYy0xMDY5LVxcdHAtXFx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcXG4tLVxcbm1tL3NsdWIuYz0xMDk2PXN0YXRpYyB2b2lkIHByaW50X3RyYWNrKGNvbnN0IGNoYXIgKnMsIHN0cnVjdCB0cmFjayAqdCwgdW5zaWduZWQgbG9uZyBwcl90aW1lKVxcbi0tXFxubW0vc2x1Yi5jLTExMDQtXFx0ICAgICAgIHMsICh2b2lkICopdC1cXHUwMDNlYWRkciwgcHJfdGltZSAtIHQtXFx1MDAzZXdoZW4sIHQtXFx1MDAzZWNwdSwgdC1cXHUwMDNlcGlkKTtcXG5tbS9zbHViLmM6MTEwNTojaWZkZWYgQ09ORklHX1NUQUNLREVQT1RcXG5tbS9zbHViLmMtMTEwNi1cXHRoYW5kbGUgPSBSRUFEX09OQ0UodC1cXHUwMDNlaGFuZGxlKTtcXG4tLVxcbm1tL3NsdWIuYz0xMjk2PXN0YXRpYyB2b2lkIHJlc3RvcmVfYnl0ZXMoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHU4IGRhdGEsXFxuLS1cXG5tbS9zbHViLmMtMTMwMi1cXG5tbS9zbHViLmM6MTMwMzojaWZkZWYgQ09ORklHX0tNU0FOXFxubW0vc2x1Yi5jLTEzMDQtI2RlZmluZSBwYWRfY2hlY2tfYXR0cmlidXRlcyBub2lubGluZSBfX25vX2ttc2FuX2NoZWNrc1xcbi0tXFxubW0vc2x1Yi5jPTIwNDU9c3RhdGljIGlubGluZSB2b2lkIGRlY19zbGFic19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSxcXG4tLVxcbm1tL3NsdWIuYy0yMDYwLVxcbm1tL3NsdWIuYzoyMDYxOiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxubW0vc2x1Yi5jLTIwNjItXFxubW0vc2x1Yi5jOjIwNjM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vc2x1Yi5jLTIwNjQtXFxuLS1cXG5tbS9zbHViLmM9MjE1Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE5My1cXHRuZXdfZXh0cyA9ICh1bnNpZ25lZCBsb25nKXZlYztcXG5tbS9zbHViLmM6MjE5NDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2x1Yi5jLTIxOTUtXFx0bmV3X2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xcbi0tXFxubW0vc2x1Yi5jPTIyNzA9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjI4OS1cXG5tbS9zbHViLmM6MjI5MDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2x1Yi5jLTIyOTEtXFx0XFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xcbi0tXFxubW0vc2x1Yi5jLTIzMDYtXFxubW0vc2x1Yi5jOjIzMDc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsdWIuYy0yMzA4LVxcdFxcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcXG4tLVxcbm1tL3NsdWIuYz0yMzM1PXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIzNDEtXFxubW0vc2x1Yi5jOjIzNDI6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2x1Yi5jLTIzNDMtXFxuLS1cXG5tbS9zbHViLmM9MjQ0Nj1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmMtMjQ1My1cXG5tbS9zbHViLmM6MjQ1NDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2x1Yi5jLTI0NTUtXFxuLS1cXG5tbS9zbHViLmM9MjU3Nj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG4tLVxcbm1tL3NsdWIuYy0yNTgxLVxcbm1tL3NsdWIuYzoyNTgyOiNpZmRlZiBDT05GSUdfU0xVQl9SQ1VfREVCVUdcXG5tbS9zbHViLmMtMjU4My1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpO1xcbi0tXFxubW0vc2x1Yi5jPTI2MTg9Ym9vbCBzbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCwgYm9vbCBpbml0LFxcbi0tXFxubW0vc2x1Yi5jLTI2NDYtXFxubW0vc2x1Yi5jOjI2NDc6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xcbm1tL3NsdWIuYy0yNjQ4LVxcdGlmIChzdGlsbF9hY2Nlc3NpYmxlKSB7XFxuLS1cXG5tbS9zbHViLmM9MzI3ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICphbGxvY19zbGFiX3BhZ2UoZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxcbi0tXFxubW0vc2x1Yi5jLTMzMDAtXFxubW0vc2x1Yi5jOjMzMDE6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0zMzAyLS8qIFByZS1pbml0aWFsaXplIHRoZSByYW5kb20gc2VxdWVuY2UgY2FjaGUgKi9cXG4tLVxcbm1tL3NsdWIuYz0zNTY5PXN0YXRpYyB2b2lkICphbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTM1NzUtXFxubW0vc2x1Yi5jOjM1NzY6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTM1NzctXFx0aWYgKHMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0xBQl9DT05TSVNURU5DWV9DSEVDS1MpIHtcXG4tLVxcbm1tL3NsdWIuYz0zNjAzPXN0YXRpYyBpbmxpbmUgdm9pZCAqbmV4dF9zbGFiX29iaihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0zNjA1LXtcXG5tbS9zbHViLmM6MzYwNjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXFxubW0vc2x1Yi5jLTM2MDctXFx0aWYgKGl0ZXItXFx1MDAzZXJhbmRvbSkge1xcbi0tXFxubW0vc2x1Yi5jPTM2NTM9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfaXRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMzY1OS1cXG5tbS9zbHViLmM6MzY2MDojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXFxubW0vc2x1Yi5jLTM2NjEtXFx0aXRlci1cXHUwMDNlcmFuZG9tID0gKHNsYWItXFx1MDAzZW9iamVjdHMgXFx1MDAzZT0gMiBcXHUwMDI2XFx1MDAyNiBzLVxcdTAwM2VyYW5kb21fc2VxKTtcXG4tLVxcbm1tL3NsdWIuYz0zODg1PXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM4ODcte1xcbm1tL3NsdWIuYzozODg4OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYy0zODg5LVxcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3Q7XFxuLS1cXG5tbS9zbHViLmM9NDE2Nj1zdGF0aWMgaW50IHNsdWJfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbm1tL3NsdWIuYy00MTc4LVxcbm1tL3NsdWIuYzo0MTc5OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00MTgwLXN0YXRpYyBpbnQgY291bnRfZnJlZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz00MjUwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcXG4tLVxcbm1tL3NsdWIuYy00MjY0LVxcbm1tL3NsdWIuYzo0MjY1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00MjY2LSNkZWZpbmUgTUFYX1BBUlRJQUxfVE9fU0NBTiAxMDAwMFxcbi0tXFxubW0vc2x1Yi5jPTQ1MjM9c3RhdGljIHZvaWQgKl9fc2xhYl9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNDUyNy1cXG5tbS9zbHViLmM6NDUyODojaWZkZWYgQ09ORklHX05VTUFcXG5tbS9zbHViLmMtNDUyOS1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2c3RyaWN0X251bWEpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9zbHViLmM9NDc1MD12b2lkICphbGxvY19mcm9tX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubW0vc2x1Yi5jLTQ3NTUtXFxubW0vc2x1Yi5jOjQ3NTY6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTQ3NTctXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnN0cmljdF9udW1hKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vc2x1Yi5jPTYxNDg9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGNhbl9mcmVlX3RvX3BjcyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy02MTU3LVxcbm1tL3NsdWIuYzo2MTU4OiNpZmRlZiBDT05GSUdfSEFWRV9NRU1PUllMRVNTX05PREVTXFxubW0vc2x1Yi5jLTYxNTktXFx0LypcXG4tLVxcbm1tL3NsdWIuYz02MzkzPXZvaWQgc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqb2JqZWN0LFxcbi0tXFxubW0vc2x1Yi5jLTY0MDgtXFxubW0vc2x1Yi5jOjY0MDk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsdWIuYy02NDEwLS8qIERvIG5vdCBpbmxpbmUgdGhlIHJhcmUgbWVtY2cgY2hhcmdpbmcgZmFpbGVkIHBhdGggaW50byB0aGUgYWxsb2NhdGlvbiBwYXRoICovXFxuLS1cXG5tbS9zbHViLmM9NjQyND12b2lkIHNsYWJfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqaGVhZCxcXG4tLVxcbm1tL3NsdWIuYy02NDM4LVxcbm1tL3NsdWIuYzo2NDM5OiNpZmRlZiBDT05GSUdfU0xVQl9SQ1VfREVCVUdcXG5tbS9zbHViLmMtNjQ0MC1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXFxuLS1cXG5tbS9zbHViLmMtNjQ2Ny1cXG5tbS9zbHViLmM6NjQ2ODojaWZkZWYgQ09ORklHX0tBU0FOX0dFTkVSSUNcXG5tbS9zbHViLmMtNjQ2OS12b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9zbHViLmM9NjUzMD1zdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX2tzaXplKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTY1MzMtXFxubW0vc2x1Yi5jOjY1MzQ6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTY1MzUtXFx0LypcXG4tLVxcbm1tL3NsdWIuYz02NTU5PXN0YXRpYyBzaXplX3QgX19rc2l6ZShjb25zdCB2b2lkICpvYmplY3QpXFxuLS1cXG5tbS9zbHViLmMtNjU3Ni1cXG5tbS9zbHViLmM6NjU3NzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNjU3OC1cXHRza2lwX29yaWdfc2l6ZV9jaGVjayhzbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBvYmplY3QpO1xcbi0tXFxubW0vc2x1Yi5jPTcxNzc9X19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbi0tXFxubW0vc2x1Yi5jLTcyNTAtXFxubW0vc2x1Yi5jOjcyNTE6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTcyNTItc3RhdGljIHVuc2lnbmVkIGludFxcbi0tXFxubW0vc2x1Yi5jPTc1OTQ9aW5pdF9rbWVtX2NhY2hlX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbilcXG4tLVxcbm1tL3NsdWIuYy03NTk4LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuLVxcdTAwM2VwYXJ0aWFsKTtcXG5tbS9zbHViLmM6NzU5OTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNzYwMC1cXHRhdG9taWNfbG9uZ19zZXQoXFx1MDAyNm4tXFx1MDAzZW5yX3NsYWJzLCAwKTtcXG4tLVxcbm1tL3NsdWIuYy03NjA1LVxcbm1tL3NsdWIuYzo3NjA2OiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy03NjA3LXN0YXRpYyBpbmxpbmUgaW50IGFsbG9jX2ttZW1fY2FjaGVfc3RhdHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmM9NzY3NT1zdGF0aWMgdm9pZCBlYXJseV9rbWVtX2NhY2hlX25vZGVfYWxsb2MoaW50IG5vZGUpXFxuLS1cXG5tbS9zbHViLmMtNzY5OC1cXG5tbS9zbHViLmM6NzY5OTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNzcwMC1cXHRpbml0X29iamVjdChrbWVtX2NhY2hlX25vZGUsIG4sIFNMVUJfUkVEX0FDVElWRSk7XFxuLS1cXG5tbS9zbHViLmM9NzczNz12b2lkIF9fa21lbV9jYWNoZV9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTc3NDAtXFx0cGNzX2Rlc3Ryb3kocyk7XFxubW0vc2x1Yi5jOjc3NDE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTc3NDItXFx0ZnJlZV9wZXJjcHUocy1cXHUwMDNlY3B1X3N0YXRzKTtcXG4tLVxcbm1tL3NsdWIuYz03ODM3PXN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTc4NTAtXFxubW0vc2x1Yi5jOjc4NTE6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTc4NTItXFx0LypcXG4tLVxcbm1tL3NsdWIuYy03OTEzLVxcbm1tL3NsdWIuYzo3OTE0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03OTE1LVxcdGlmIChmbGFncyBcXHUwMDI2IFNMQUJfU1RPUkVfVVNFUikge1xcbi0tXFxubW0vc2x1Yi5jLTc5MjgtXFx0a2FzYW5fY2FjaGVfY3JlYXRlKHMsIFxcdTAwMjZzaXplLCBcXHUwMDI2cy1cXHUwMDNlZmxhZ3MpO1xcbm1tL3NsdWIuYzo3OTI5OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03OTMwLVxcdGlmIChmbGFncyBcXHUwMDI2IFNMQUJfUkVEX1pPTkUpIHtcXG4tLVxcbm1tL3NsdWIuYz03OTkzPXN0YXRpYyB2b2lkIGxpc3Rfc2xhYl9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtNzk5NC17XFxubW0vc2x1Yi5jOjc5OTU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTc5OTYtXFx0dm9pZCAqYWRkciA9IHNsYWJfYWRkcmVzcyhzbGFiKTtcXG4tLVxcbm1tL3NsdWIuYz04MDYwPWludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtODA4Ni1cXG5tbS9zbHViLmM6ODA4NzojaWZkZWYgQ09ORklHX1BSSU5US1xcbm1tL3NsdWIuYy04MDg4LXZvaWQgX19rbWVtX29ial9pbmZvKHN0cnVjdCBrbWVtX29ial9pbmZvICprcHAsIHZvaWQgKm9iamVjdCwgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtODEwMi1cXHRvYmpwMCA9IGthc2FuX3Jlc2V0X3RhZyhvYmplY3QpO1xcbm1tL3NsdWIuYzo4MTAzOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy04MTA0LVxcdG9ianAgPSByZXN0b3JlX3JlZF9sZWZ0KHMsIG9ianAwKTtcXG4tLVxcbm1tL3NsdWIuYy04MTE1LVxcdFxcdHJldHVybjtcXG5tbS9zbHViLmM6ODExNjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtODExNy1cXHRvYmpwID0gZml4dXBfcmVkX2xlZnQocywgb2JqcCk7XFxuLS1cXG5tbS9zbHViLmMtODExOS1cXHRrcHAtXFx1MDAzZWtwX3JldCA9ICh2b2lkICopdHJhY2twLVxcdTAwM2VhZGRyO1xcbm1tL3NsdWIuYzo4MTIwOiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxcbm1tL3NsdWIuYy04MTIxLVxcdHtcXG4tLVxcbm1tL3NsdWIuYz04MTkzPWNvcmVfcGFyYW0oc2x1Yl9taW5fb2JqZWN0cywgc2x1Yl9taW5fb2JqZWN0cywgdWludCwgMCk7XFxubW0vc2x1Yi5jLTgxOTQtXFxubW0vc2x1Yi5jOjgxOTU6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTgxOTYtc3RhdGljIGludCBfX2luaXQgc2V0dXBfc2xhYl9zdHJpY3RfbnVtYShjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vc2x1Yi5jPTgyMTI9X19jb3JlX3BhcmFtX2NiKHNsYWJfc3RyaWN0X251bWEsIFxcdTAwMjZwYXJhbV9vcHNfc2xhYl9zdHJpY3RfbnVtYSwgTlVMTCwgMCk7XFxuLS1cXG5tbS9zbHViLmMtODIxNS1cXG5tbS9zbHViLmM6ODIxNjojaWZkZWYgQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZXFxubW0vc2x1Yi5jLTgyMTctLypcXG4tLVxcbm1tL3NsdWIuYz04NDYxPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqIF9faW5pdCBib290c3RyYXAoc3RydWN0IGttZW1fY2FjaGUgKnN0YXRpY19jYWNoZSlcXG4tLVxcbm1tL3NsdWIuYy04NDc0LVxcbm1tL3NsdWIuYzo4NDc1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy04NDc2LVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXFx1MDAyNm4tXFx1MDAzZWZ1bGwsIHNsYWJfbGlzdClcXG4tLVxcbm1tL3NsdWIuYz04NjEzPXZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9zbHViLmMtODYxNy1cXHRXQVJOX09OKCFmbHVzaHdxKTtcXG5tbS9zbHViLmM6ODYxODojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXFxubW0vc2x1Yi5jLTg2MTktXFx0cHJhbmRvbV9pbml0X29uY2UoXFx1MDAyNnNsYWJfcm5kX3N0YXRlKTtcXG4tLVxcbm1tL3NsdWIuYz04NjIzPWludCBkb19rbWVtX2NhY2hlX2NyZWF0ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbm1tL3NsdWIuYy04NjMyLVxcdHMtXFx1MDAzZWZsYWdzID0ga21lbV9jYWNoZV9mbGFncyhmbGFncywgcy1cXHUwMDNlbmFtZSk7XFxubW0vc2x1Yi5jOjg2MzM6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXFxubW0vc2x1Yi5jLTg2MzQtXFx0cy1cXHUwMDNlcmFuZG9tID0gZ2V0X3JhbmRvbV9sb25nKCk7XFxuLS1cXG5tbS9zbHViLmMtODYzNy1cXHRzLVxcdTAwM2VjdG9yID0gYXJncy1cXHUwMDNlY3RvcjtcXG5tbS9zbHViLmM6ODYzODojaWZkZWYgQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZXFxubW0vc2x1Yi5jLTg2MzktXFx0cy1cXHUwMDNldXNlcm9mZnNldCA9IGFyZ3MtXFx1MDAzZXVzZXJvZmZzZXQ7XFxuLS1cXG5tbS9zbHViLmMtODY1Ny1cXG5tbS9zbHViLmM6ODY1ODojaWZkZWYgc3lzdGVtX2hhc19mcmVlbGlzdF9hYmFcXG5tbS9zbHViLmMtODY1OS1cXHRpZiAoc3lzdGVtX2hhc19mcmVlbGlzdF9hYmEoKSBcXHUwMDI2XFx1MDAyNiAhKHMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0xBQl9OT19DTVBYQ0hHKSkge1xcbi0tXFxubW0vc2x1Yi5jLTg2NzctXFxubW0vc2x1Yi5jOjg2Nzg6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTg2NzktXFx0cy1cXHUwMDNlcmVtb3RlX25vZGVfZGVmcmFnX3JhdGlvID0gMTAwMDtcXG4tLVxcbm1tL3NsdWIuYy04NjkwLVxcbm1tL3NsdWIuYzo4NjkxOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy04NjkyLVxcdGlmICghYWxsb2Nfa21lbV9jYWNoZV9zdGF0cyhzKSlcXG4tLVxcbm1tL3NsdWIuYy04NzIxLVxcbm1tL3NsdWIuYzo4NzIyOiNpZmRlZiBTTEFCX1NVUFBPUlRTX1NZU0ZTXFxubW0vc2x1Yi5jLTg3MjMtc3RhdGljIGludCBjb3VudF9pbnVzZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz04NzI4PXN0YXRpYyBpbnQgY291bnRfdG90YWwoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtODczMy1cXG5tbS9zbHViLmM6ODczNDojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtODczNS1zdGF0aWMgdm9pZCB2YWxpZGF0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYz04ODE2PUVYUE9SVF9TWU1CT0wodmFsaWRhdGVfc2xhYl9jYWNoZSk7XFxubW0vc2x1Yi5jLTg4MTctXFxubW0vc2x1Yi5jOjg4MTg6I2lmZGVmIENPTkZJR19ERUJVR19GU1xcbm1tL3NsdWIuYy04ODE5LS8qXFxuLS1cXG5tbS9zbHViLmM9ODg3ND1zdGF0aWMgaW50IGFkZF9sb2NhdGlvbihzdHJ1Y3QgbG9jX3RyYWNrICp0LCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy04ODg0LVxcbm1tL3NsdWIuYzo4ODg1OiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxcbm1tL3NsdWIuYy04ODg2LVxcdGhhbmRsZSA9IFJFQURfT05DRSh0cmFjay1cXHUwMDNlaGFuZGxlKTtcXG4tLVxcbm1tL3NsdWIuYz04OTY2PXN0YXRpYyB2b2lkIHByb2Nlc3Nfc2xhYihzdHJ1Y3QgbG9jX3RyYWNrICp0LCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy04OTg0LVxcbm1tL3NsdWIuYzo4OTg1OiNpZmRlZiBTTEFCX1NVUFBPUlRTX1NZU0ZTXFxubW0vc2x1Yi5jLTg5ODYtZW51bSBzbGFiX3N0YXRfdHlwZSB7XFxuLS1cXG5tbS9zbHViLmM9OTAwMD1zdGF0aWMgc3NpemVfdCBzaG93X3NsYWJfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy05MDIzLVxcbm1tL3NsdWIuYzo5MDI0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy05MDI1LVxcdGlmIChmbGFncyBcXHUwMDI2IFNPX0FMTCkge1xcbi0tXFxubW0vc2x1Yi5jLTkwNTctXFx0bGVuICs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBsZW4sIFxcXCIlbHVcXFwiLCB0b3RhbCk7XFxubW0vc2x1Yi5jOjkwNTg6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTkwNTktXFx0Zm9yIChub2RlID0gMDsgbm9kZSBcXHUwMDNjIG5yX25vZGVfaWRzOyBub2RlKyspIHtcXG4tLVxcbm1tL3NsdWIuYz05MjExPVNMQUJfQVRUUl9STyhod2NhY2hlX2FsaWduKTtcXG5tbS9zbHViLmMtOTIxMi1cXG5tbS9zbHViLmM6OTIxMzojaWZkZWYgQ09ORklHX1pPTkVfRE1BXFxubW0vc2x1Yi5jLTkyMTQtc3RhdGljIHNzaXplX3QgY2FjaGVfZG1hX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZilcXG4tLVxcbm1tL3NsdWIuYz05MjE4PVNMQUJfQVRUUl9STyhjYWNoZV9kbWEpO1xcbi0tXFxubW0vc2x1Yi5jLTkyMjAtXFxubW0vc2x1Yi5jOjkyMjE6I2lmZGVmIENPTkZJR19IQVJERU5FRF9VU0VSQ09QWVxcbm1tL3NsdWIuYy05MjIyLXN0YXRpYyBzc2l6ZV90IHVzZXJzaXplX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZilcXG4tLVxcbm1tL3NsdWIuYz05MjMzPVNMQUJfQVRUUl9STyhkZXN0cm95X2J5X3JjdSk7XFxubW0vc2x1Yi5jLTkyMzQtXFxubW0vc2x1Yi5jOjkyMzU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTkyMzYtc3RhdGljIHNzaXplX3Qgc2xhYnNfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVxcbi0tXFxubW0vc2x1Yi5jPTkzMDQ9U0xBQl9BVFRSKHZhbGlkYXRlKTtcXG4tLVxcbm1tL3NsdWIuYy05MzA3LVxcbm1tL3NsdWIuYzo5MzA4OiNpZmRlZiBDT05GSUdfRkFJTFNMQUJcXG5tbS9zbHViLmMtOTMwOS1zdGF0aWMgc3NpemVfdCBmYWlsc2xhYl9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpXFxuLS1cXG5tbS9zbHViLmM9OTM0ND1TTEFCX0FUVFIoc2hyaW5rKTtcXG5tbS9zbHViLmMtOTM0NS1cXG5tbS9zbHViLmM6OTM0NjojaWZkZWYgQ09ORklHX05VTUFcXG5tbS9zbHViLmMtOTM0Ny1zdGF0aWMgc3NpemVfdCByZW1vdGVfbm9kZV9kZWZyYWdfcmF0aW9fc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVxcbi0tXFxubW0vc2x1Yi5jPTkzNjg9U0xBQl9BVFRSKHJlbW90ZV9ub2RlX2RlZnJhZ19yYXRpbyk7XFxuLS1cXG5tbS9zbHViLmMtOTM3MC1cXG5tbS9zbHViLmM6OTM3MTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtOTM3Mi1zdGF0aWMgaW50IHNob3dfc3RhdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmLCBlbnVtIHN0YXRfaXRlbSBzaSlcXG4tLVxcbm1tL3NsdWIuYy05MzkwLVxcbm1tL3NsdWIuYzo5MzkxOiNpZmRlZiBDT05GSUdfU01QXFxubW0vc2x1Yi5jLTkzOTItXFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcXG4tLVxcbm1tL3NsdWIuYz05NDUyPVNUQVRfQVRUUihTSEVBRl9SRVRVUk5fU0xPVywgc2hlYWZfcmV0dXJuX3Nsb3cpO1xcbi0tXFxubW0vc2x1Yi5jLTk0NTQtXFxubW0vc2x1Yi5jOjk0NTU6I2lmZGVmIENPTkZJR19LRkVOQ0VcXG5tbS9zbHViLmMtOTQ1Ni1zdGF0aWMgc3NpemVfdCBza2lwX2tmZW5jZV9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpXFxuLS1cXG5tbS9zbHViLmM9OTQ3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0ge1xcbi0tXFxubW0vc2x1Yi5jLTk0OTYtXFx0XFx1MDAyNnNsYWJzX2NwdV9wYXJ0aWFsX2F0dHIuYXR0cixcXG5tbS9zbHViLmM6OTQ5NzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtOTQ5OC1cXHRcXHUwMDI2dG90YWxfb2JqZWN0c19hdHRyLmF0dHIsXFxuLS1cXG5tbS9zbHViLmMtOTUwNy0jZW5kaWZcXG5tbS9zbHViLmM6OTUwODojaWZkZWYgQ09ORklHX1pPTkVfRE1BXFxubW0vc2x1Yi5jLTk1MDktXFx0XFx1MDAyNmNhY2hlX2RtYV9hdHRyLmF0dHIsXFxubW0vc2x1Yi5jLTk1MTAtI2VuZGlmXFxubW0vc2x1Yi5jOjk1MTE6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTk1MTItXFx0XFx1MDAyNnJlbW90ZV9ub2RlX2RlZnJhZ19yYXRpb19hdHRyLmF0dHIsXFxubW0vc2x1Yi5jLTk1MTMtI2VuZGlmXFxubW0vc2x1Yi5jOjk1MTQ6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTk1MTUtXFx0XFx1MDAyNmFsbG9jX2Zhc3RwYXRoX2F0dHIuYXR0cixcXG4tLVxcbm1tL3NsdWIuYy05NTQxLSNlbmRpZlxcbm1tL3NsdWIuYzo5NTQyOiNpZmRlZiBDT05GSUdfRkFJTFNMQUJcXG5tbS9zbHViLmMtOTU0My1cXHRcXHUwMDI2ZmFpbHNsYWJfYXR0ci5hdHRyLFxcbm1tL3NsdWIuYy05NTQ0LSNlbmRpZlxcbm1tL3NsdWIuYzo5NTQ1OiNpZmRlZiBDT05GSUdfSEFSREVORURfVVNFUkNPUFlcXG5tbS9zbHViLmMtOTU0Ni1cXHRcXHUwMDI2dXNlcnNpemVfYXR0ci5hdHRyLFxcbm1tL3NsdWIuYy05NTQ3LSNlbmRpZlxcbm1tL3NsdWIuYzo5NTQ4OiNpZmRlZiBDT05GSUdfS0ZFTkNFXFxubW0vc2x1Yi5jLTk1NDktXFx0XFx1MDAyNnNraXBfa2ZlbmNlX2F0dHIuYXR0cixcXG4tLVxcbm1tL3NsdWIuYz05NzkzPXN0YXRpYyBpbnQgc2xhYl9kZWJ1Z2ZzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5tbS9zbHViLmMtOTgzNC1cXG5tbS9zbHViLmM6OTgzNTojaWZkZWYgQ09ORklHX1NUQUNLREVQT1RcXG5tbS9zbHViLmMtOTgzNi1cXHRcXHR7XFxuLS1cXG5tbS9zbHViLmM9OTk5OD1fX2luaXRjYWxsKHNsYWJfZGVidWdmc19pbml0KTtcXG4tLVxcbm1tL3NsdWIuYy0xMDAwMi0gKi9cXG5tbS9zbHViLmM6MTAwMDM6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTEwMDA0LXZvaWQgZ2V0X3NsYWJpbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYmluZm8gKnNpbmZvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo1Ni41MDY2NjczOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg3NzU0NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggZGlzc2VjdGluZyB0aGlzIHBpZWNlIG9mIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaW4gYG1tL3NsdWIuY2AqKlxuXG5BbHJpZ2h0LCB0aGUgY29kZSBJJ20gZm9jdXNpbmcgb24gaXMgaW5zaWRlIGBtbS9zbHViLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgZnVuY3Rpb25zLiBUaW1lIHRvIG5hdmlnYXRlIHRvIGl0cyBkZWZpbml0aW9uLiBJJ3ZlIGdvdCBteSB0cnVzdHkgZWRpdG9yIG9wZW4sIGFuZCBJJ20gaGVhZGluZyBzdHJhaWdodCB0byBsaW5lIDIxNTYuIFJpZ2h0LCBmb3VuZCBpdC4gTm93LCBnaXZlbiB0aGUgbnVhbmNlcyBvZiBrZXJuZWwgY29kZSwgbXkgbmV4dCBtb3ZlIGlzIGNydWNpYWw6IEkgbmVlZCB0byBleGFtaW5lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzLCB0aGUgYCNpZmRlZmAgYmxvY2tzLCB0aGF0IHN1cnJvdW5kIHRoaXMgZnVuY3Rpb24uIFRoaXMgd2lsbCB0ZWxsIG1lICp3aGVuKiB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgc2NlbmFyaW9zIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgYWN0aXZlLiBUaGlzIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSBmdW5jdGlvbidzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZSBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGl0IGNhbiBoYXZlIG9uIHN5c3RlbSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0MzowMC4xOTQ0MjQ2ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA1MDpcXHQgKiBUaGUgYWxsb2NhdGVkIG9iamNnIHBvaW50ZXJzIGFycmF5IG9yIHNoZWFmIGlzIG5vdCBhY2NvdW50ZWQgZGlyZWN0bHkuXFxuMjA1MTpcXHQgKiBNb3Jlb3ZlciwgaXQgc2hvdWxkIG5vdCBjb21lIGZyb20gRE1BIGJ1ZmZlciBhbmQgaXMgbm90IHJlYWRpbHlcXG4yMDUyOlxcdCAqIHJlY2xhaW1hYmxlLiBOb2RlIHJlc3RyaWN0aW9uIGZvciB0aGUgcGFyZW50IGFsbG9jYXRpb24gYWxzbyBzaG91bGRcXG4yMDUzOlxcdCAqIG5vdCBhcHBseSB0byB0aGUgc2xhYidzIGludGVybmFsIG9iamVjdHMsIGFzIHdlbGwgYXMgX19HRlBfQ09NUCB1c2VkXFxuMjA1NDpcXHQgKiBmb3IgbmV3IHNsYWIgYWxsb2NhdGlvbnMuXFxuMjA1NTpcXHQgKiBTbyB0aG9zZSBHRlAgYml0cyBzaG91bGQgYmUgbWFza2VkIG9mZi5cXG4yMDU2OlxcdCAqL1xcbjIwNTc6XFx0I2RlZmluZSBPQkpDR1NfQ0xFQVJfTUFTS1xcdChfX0dGUF9ETUEgfCBfX0dGUF9SRUNMQUlNQUJMRSB8IFxcXFxcXG4yMDU4OlxcdFxcdFxcdFxcdFxcdF9fR0ZQX0FDQ09VTlQgfCBfX0dGUF9OT0ZBSUwgfCBcXFxcXFxuMjA1OTpcXHRcXHRcXHRcXHRcXHRfX0dGUF9USElTTk9ERSB8IF9fR0ZQX0NPTVApXFxuMjA2MDpcXHRcXG4yMDYxOlxcdCNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxuMjA2MjpcXHRcXG4yMDYzOlxcdCNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbjIwNjQ6XFx0XFxuMjA2NTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopXFxuMjA2NjpcXHR7XFxuMjA2NzpcXHRcXHRzdHJ1Y3Qgc2xhYiAqb2JqX3NsYWI7XFxuMjA2ODpcXHRcXHR1bnNpZ25lZCBsb25nIHNsYWJfZXh0cztcXG4yMDY5OlxcdFxcbjIwNzA6XFx0XFx0b2JqX3NsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcXG4yMDcxOlxcdFxcdHNsYWJfZXh0cyA9IHNsYWJfb2JqX2V4dHMob2JqX3NsYWIpO1xcbjIwNzI6XFx0XFx0aWYgKHNsYWJfZXh0cykge1xcbjIwNzM6XFx0XFx0XFx0Z2V0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcXG4yMDc0OlxcdFxcdFxcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVxcdTAwM2VzbGFiX2NhY2hlLFxcbjIwNzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG9ial9zbGFiLCBvYmopO1xcbjIwNzY6XFx0XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQgPSBzbGFiX29ial9leHQob2JqX3NsYWIsXFxuMjA3NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcXG4yMDc4OlxcdFxcbjIwNzk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkoXFx1MDAyNmV4dC1cXHUwMDNlcmVmKSkpIHtcXG4yMDgwOlxcdFxcdFxcdFxcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxuMjA4MTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjA4MjpcXHRcXHRcXHR9XFxuMjA4MzpcXHRcXG4yMDg0OlxcdFxcdFxcdC8qIGNvZGV0YWcgc2hvdWxkIGJlIE5VTEwgaGVyZSAqL1xcbjIwODU6XFx0XFx0XFx0V0FSTl9PTihleHQtXFx1MDAzZXJlZi5jdCk7XFxuMjA4NjpcXHRcXHRcXHRzZXRfY29kZXRhZ19lbXB0eShcXHUwMDI2ZXh0LVxcdTAwM2VyZWYpO1xcbjIwODc6XFx0XFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcXG4yMDg4OlxcdFxcdH1cXG4yMDg5OlxcdH1cXG4yMDkwOlxcdFxcbjIwOTE6XFx0c3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpXFxuMjA5MjpcXHR7XFxuMjA5MzpcXHRcXHRyZXR1cm4gY21weGNoZyhcXHUwMDI2c2xhYi1cXHUwMDNlb2JqX2V4dHMsIDAsIE9CSkVYVFNfQUxMT0NfRkFJTCkgPT0gMDtcXG4yMDk0OlxcdH1cXG4yMDk1OlxcdFxcbjIwOTY6XFx0c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbjIwOTc6XFx0XFx0XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKVxcbjIwOTg6XFx0e1xcbjIwOTk6XFx0XFx0LypcXG4yMTAwOlxcdFxcdCAqIElmIHZlY3RvciBwcmV2aW91c2x5IGZhaWxlZCB0byBhbGxvY2F0ZSB0aGVuIHdlIGhhdmUgbGl2ZVxcbjIxMDE6XFx0XFx0ICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpc1xcbjIxMDI6XFx0XFx0ICogdmVjdG9yIGFzIGVtcHR5IHRvIGF2b2lkIHdhcm5pbmdzIGxhdGVyIG9uLlxcbjIxMDM6XFx0XFx0ICovXFxuMjEwNDpcXHRcXHRpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7XFxuMjEwNTpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4yMTA2OlxcdFxcbjIxMDc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iamVjdHM7IGkrKylcXG4yMTA4OlxcdFxcdFxcdFxcdHNldF9jb2RldGFnX2VtcHR5KFxcdTAwMjZ2ZWNbaV0ucmVmKTtcXG4yMTA5OlxcdFxcdH1cXG4yMTEwOlxcdH1cXG4yMTExOlxcdFxcbjIxMTI6XFx0I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cXG4yMTEzOlxcdFxcbjIxMTQ6XFx0c3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxcbjIxMTU6XFx0c3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIGZhbHNlOyB9XFxuMjExNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuMjExNzpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XFxuMjExODpcXHRcXG4yMTE5OlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbjIxMjA6XFx0XFxuMjEyMTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbjIxMjI6XFx0e1xcbjIxMjM6XFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHMgPSAwO1xcbjIxMjQ6XFx0fVxcbjIxMjU6XFx0XFxuMjEyNjpcXHQvKlxcbjIxMjc6XFx0ICogU2l6ZSBvZiB0aGUgc2xhYm9ial9leHQgYXJyYXkgZm9yIEBzbGFiLlxcbjIxMjg6XFx0ICpcXG4yMTI5OlxcdCAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJ2QuIElmIGl0IGNhbWUgZnJvbSB0aGUgc2FtZSBvciBhIHNtYWxsZXJcXG4yMTMwOlxcdCAqIGttYWxsb2MgY2FjaGUgdGhhbiBAcywgdGhlIFxcXCJzbGFiIGhvbGRzIGFub3RoZXIgc2xhYidzIGFycmF5XFxcIiByZWxhdGlvbiBjb3VsZFxcbjIxMzE6XFx0ICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFxcdTAwM2MtXFx1MDAzZSBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzXFxuMjEzMjpcXHQgKiBmb3JldmVyIGFuZCByZWN1cnNlcyB2aWEgZnJlZV9zbGFiX29ial9leHRzKCkgLVxcdTAwM2Uga2ZyZWUoKSAtXFx1MDAzZSBkaXNjYXJkX3NsYWIoKVxcbjIxMzM6XFx0ICogYXQgdGVhcmRvd24uIEZvcmNlIGl0IGludG8gYSBzdHJpY3RseSBsYXJnZXIgY2FjaGUgdG8ga2VlcCB0aGF0IHJlbGF0aW9uIGFcXG4yMTM0OlxcdCAqIERBRyAoYWN5Y2xpYykuXFxuMjEzNTpcXHQgKi9cXG4yMTM2OlxcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuMjEzNzpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcXG4yMTM4OlxcdHtcXG4yMTM5OlxcdFxcdHNpemVfdCBzeiA9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4yMTQwOlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpvYmpfZXh0c19jYWNoZTtcXG4yMTQxOlxcdFxcbjIxNDI6XFx0XFx0aWYgKHN6IFxcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSlcXG4yMTQzOlxcdFxcdFxcdHJldHVybiBzejtcXG4yMTQ0OlxcdFxcbjIxNDU6XFx0XFx0aWYgKCFpc19rbWFsbG9jX25vcm1hbChzKSlcXG4yMTQ2OlxcdFxcdFxcdHJldHVybiBzejtcXG4yMTQ3OlxcdFxcbjIxNDg6XFx0XFx0b2JqX2V4dHNfY2FjaGUgPSBrbWFsbG9jX3NsYWIoc3osIE5VTEwsIGdmcCwgX19rbWFsbG9jX3Rva2VuKDApKTtcXG4yMTQ5OlxcdFxcdC8qIGNvbXBhcmUgb2JqZWN0X3NpemUsIG5vdCB0aGUgY2FjaGUgcG9pbnRlciAocGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjAwLjE5NDk2MDM0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIxMjQ5NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBBY3RpdmF0aW9uIG9mIENPTkZJR19TTEFCX09CSl9FWFQqKlxuXG5BbHJpZ2h0LCBJIHNlZSB0aGUgY29kZSBJJ20gZGVhbGluZyB3aXRoIGlzIHVuZGVyIGBDT05GSUdfU0xBQl9PQkpfRVhUYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCdzIHRoZSBrZXkuIE5vdywgd2hhdCBhY3R1YWxseSAqZW5hYmxlcyogdGhhdCB0aGluZz9cIiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZGVmaW5pdGlvbi4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzdGFydCB3aXRoIHRoZSBtb3N0IHJlbGV2YW50IG9uZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMsIHNlZSB3aGF0IHRyaWdnZXJzIHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGZsYWcuIFdoYXQgYXJlIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhpcyBlbmFibGVkPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcz8gV2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/IFRoaXMgcmVxdWlyZXMgYSBmb2N1c2VkIGh1bnQgZm9yIHRoZSBkZXBlbmRlbmNpZXMgdGhhdCBnb3Zlcm4gaXRzIGFjdGl2YXRpb24uIFRpbWUgdG8gc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjAzLjIxNjIxMTg1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MDgxODk2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0xBQl9PQkpfRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTAzMz1jb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuLS1cXG5pbml0L0tjb25maWctMTA0MC1cXG5pbml0L0tjb25maWc6MTA0MTpjb25maWcgU0xBQl9PQkpfRVhUXFxuaW5pdC9LY29uZmlnLTEwNDItXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0MzowNS4xNzcwMzcxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTcxMjEwMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBTTEFCX09CSl9FWFRgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSBjb250ZXh0cyB0aGF0IGFyZSBhY3R1YWxseSB1c2luZyBgU0xBQl9PQkpfRVhUYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmbGFnIGlzIGdldHRpbmcgc2V0LCByZWFkLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgd2h5LiBJIGtub3cgaXQncyBhIGtleSBiaXQgZm9yIG1hbmFnaW5nIG9iamVjdCBleHRlbnNpb25zIHdpdGhpbiB0aGUgU0xBQiBhbGxvY2F0b3IsIGJ1dCB0aGUgc3BlY2lmaWMgdXNhZ2Ugd2lsbCBkaWN0YXRlIHRoZSBmaW5lciBwb2ludHMgb2YgaXRzIGJlaGF2aW9yLCBhbmQgdGhhdCBpcyB3aGF0IEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZi4gSXMgaXQgcHJpbWFyaWx5IGZvciB0cmFja2luZyBtZXRhZGF0YSwgbWFuYWdpbmcgbGlmZWN5Y2xlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBncmVwIHRocm91Z2ggdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBpcyB0aGUgYmVzdCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIG91dHB1dCBvZiB0aGUgZ3JlcCBjb21tYW5kIGFuZCBuYXJyb3cgaXQgdG8gcmVsZXZhbnQgc2VjdGlvbnMgb2YgY29kZS4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGFuYWx5emUgZWFjaCB1c2FnZSBzaXRlIHRvIHJlY29uc3RydWN0IHRoZSBjb250cm9sIGZsb3cgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIGRpZmZlcmVudCBjb21wb25lbnRzIG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIGtlZXBpbmcgaW4gbWluZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBmbGFnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ5MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjA4LjE0ODI1MDk4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMjE2Mzg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgU0xBQl9PQkpfRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3Mz1jb25maWcgTUVNQ0dcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDc2LVxcdHNlbGVjdCBFVkVOVEZEXFxuaW5pdC9LY29uZmlnOjEwNzc6XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbmluaXQvS2NvbmZpZy0xMDc4LVxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbi0tXFxubGliL0tjb25maWcuZGVidWc9MTA1MT1jb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbi0tXFxubGliL0tjb25maWcuZGVidWctMTA1OC1cXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDU5OlxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDYwLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDM6MTAuMjUwNDI2Nzg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MjY5NzcwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2xhYiBPYmplY3QgRXh0ZW5zaW9uIEN5Y2xlIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIGEgY3ljbGUgaW4gdGhlIGFsbG9jYXRpb24gb2YgdGhlIGBzbGFib2JqX2V4dGAgYXJyYXkuIFRoaXMgY29tZXMgaW50byBwbGF5IHdoZW4gZWl0aGVyIGBDT05GSUdfTUVNQ0dgIG9yIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGVuYWJsZWQsIHdoaWNoLCBpbiB0dXJuLCBlbmFibGVzIGBDT05GSUdfU0xBQl9PQkpfRVhUYC5cblxuVGhlIHByb2JsZW0gYm9pbHMgZG93biB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBga21hbGxvYy01MTJgIGFuZCBga21hbGxvYy0xa2DigJRhIGNsYXNzaWMgZGVhZGxvY2sgc2l0dWF0aW9uLiBJdCBoYXBwZW5zIHdoZW4gdGhlIHNpemUgb2YgYG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHMtXHUwMDNlb2JqZWN0X3NpemVgLiBUaGUgZml4IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZSBwcmV2aW91cyBjb2RlIGNvbXBhcmVkIHRoZSBvYmplY3Qgc2l6ZXMsIHRoZSBmaXggcmV2ZXJzZXMgdGhlIGNvbXBhcmlzb246IGZyb20gYGlmIChzLVx1MDAzZW9iamVjdF9zaXplID09IG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplKSByZXR1cm4gb2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgKyAxO2AgdG8gYGlmIChvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSBcdTAwM2M9IHMtXHUwMDNlb2JqZWN0X3NpemUpIHJldHVybiBzLVx1MDAzZW9iamVjdF9zaXplICsgMTtgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgc2xhYiB0ZWFyZG93biBwcm9jZXNzIGZyb20gZ2V0dGluZyBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBnaXZlbiB0aGF0IGBrbWFsbG9jYCBhbmQgYHNsYWJgIGFyZSBjb3JlIGtlcm5lbCBmZWF0dXJlcyB1c2VkIGFjcm9zcyB0aGUgYm9hcmQsIGV2ZW4gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgcmVsZXZhbnQgY29uZmlncyBhcmUgYE1FTUNHYCBvciBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIEkgdGhpbmsgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHByb2JhYmx5IGEgZ29vZCBjb25maWcgdG8gY2hlY2ssIHNpbmNlIGl0J3MgbW9yZSBzcGVjaWZpYy4gWWVzLCB0aGF0IGlzIHJpZ2h0LiBgTUVNQ0dgIGlzIGdvb2QsIHRvby5cblxuSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgYG9ial9leHRzX2FsbG9jX3NpemVgIGFuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgdG8gc2VlIGlmIHRob3NlIHdvdWxkIGJlIGdvb2QgZm9jdXMgc3ltYm9scy4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGxvb2tzIGludGVyZXN0aW5nLCBpdCBpcyBjYWxsZWQgZnJvbSBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgLCBhbmQgdGhhdCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYC4gVGhpcyBpcyBhIGhvdCBwYXRoIGZvciBzbGFiIGFsbG9jYXRpb24sIGJ1dCBpdCBpcyBjYWxsZWQgb25jZSBwZXIgc2xhYi4gU28gbWF5YmUgYGFsbG9jX3NsYWJfb2JqX2V4dHNgICppcyogYSBnb29kIGZvY3VzIHN5bWJvbC5cblxuTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQuIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0IGlzbid0IGdvaW5nIHRvIGJlIGEgc3ltYm9sLiBOb3csIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBub3Qgc3RhdGljLiBJcyBpdCBleHBvcnRlZCwgb3IgZ2xvYmFsPyBJIHNob3VsZCBjaGVjayBpdCBpbiBgbW0vc2x1Yi5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0MzoxNy43Nzc0MDg1ODVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTQ5MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE1NS1cXG5tbS9zbHViLmM6MjE1NjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNTctXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjIzMD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI2OS0gKi9cXG5tbS9zbHViLmM6MjI3MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI3MS17XFxuLS1cXG5tbS9zbHViLmM9MjMyMT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMjQtXFxubW0vc2x1Yi5jOjIzMjU6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMyNi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMzMT1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjMzNC1cXG5tbS9zbHViLmM6MjMzNTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMzNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MjM0NT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjM0OC1cXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjM0OTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzNTAtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYz0zMzUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzU4LVxcdFxcdFxcdCFzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYzozMzU5OlxcdFxcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxcbm1tL3NsdWIuYy0zMzYwLVxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xcbi0tXFxubW0vc2x1Yi5jPTMzODE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDMxLVxcdCAqL1xcbm1tL3NsdWIuYzozNDMyOlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0MzMtXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDM6MTcuODM0MzY0Mjg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTc5OTMxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0OlxuXG4qKkludmVzdGlnYXRpbmcgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgZGVmaW5lZCwgYW5kIGl0J3MgaGFuZ2luZyBvdXQgYXQgbGluZSAyMTU2LiBUaGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogYSBgc3RhdGljYCBmdW5jdGlvbiBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgdGhhdCBpbXBsaWVzIGl0cyBzY29wZSBpcyBicm9hZGVyIHRoYW4ganVzdCB0aGlzIGZpbGUsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGVsc2V3aGVyZS4gTm93IGhvbGQgb24uLi4gSSBjb3VsZCBzd2VhciBJJ3ZlIHNlZW4gdGhhdCBuYW1lIGJlZm9yZS4gTGV0J3MgZG91YmxlLWNoZWNrLiBMaW5lIDIzMjUuLi4gQWhhISBUaGVyZSAqaXMqIGFub3RoZXIgZGVmaW5pdGlvbiBvZiBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlc2UgdHdvIGRlZmluaXRpb25zOyBhcmUgdGhleSB0aGUgc2FtZSwgYXJlIHRoZXkgZGlmZmVyZW50PyBJcyB0aGlzIHNvbWUgc29ydCBvZiBvdmVybG9hZGluZz8gQSBmb3J3YXJkIGRlY2xhcmF0aW9uPyBPciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgaW50byBsaW5lIDIzMjUgYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDM6MjEuNjMyMzYxMjcyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zbHViLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMxMDpcXHRcXHRcXHRzbGFiLVxcdTAwM2VvYmpfZXh0cyA9IG9ial9leHRzO1xcbjIzMTE6XFx0XFx0XFx0c2xhYl9zZXRfc3RyaWRlKHNsYWIsIHMtXFx1MDAzZXNpemUpO1xcbjIzMTI6XFx0XFx0fVxcbjIzMTM6XFx0fVxcbjIzMTQ6XFx0XFxuMjMxNTpcXHQjZWxzZSAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXFxuMjMxNjpcXHRcXG4yMzE3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcXG4yMzE4OlxcdHtcXG4yMzE5OlxcdH1cXG4yMzIwOlxcdFxcbjIzMjE6XFx0c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4yMzIyOlxcdHtcXG4yMzIzOlxcdH1cXG4yMzI0OlxcdFxcbjIzMjU6XFx0c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4yMzI2OlxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4yMzI3OlxcdHtcXG4yMzI4OlxcdFxcdHJldHVybiAwO1xcbjIzMjk6XFx0fVxcbjIzMzA6XFx0XFxuMjMzMTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuMjMzMjpcXHR7XFxuMjMzMzpcXHR9XFxuMjMzNDpcXHRcXG4yMzM1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbjIzMzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxcbjIzMzc6XFx0e1xcbjIzMzg6XFx0fVxcbjIzMzk6XFx0XFxuMjM0MDpcXHQjZW5kaWYgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xcbjIzNDE6XFx0XFxuMjM0MjpcXHQjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4yMzQzOlxcdFxcbjIzNDQ6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXFxuMjM0NTpcXHRwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuMjM0NjpcXHRcXHRcXHRcXHQgICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCB2b2lkICpwKVxcbjIzNDc6XFx0e1xcbjIzNDg6XFx0XFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFxcdTAwMjZcXHUwMDI2XFxuMjM0OTpcXHRcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxuMjM1MDpcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcIiVzLCAlczogRmFpbGVkIHRvIGNyZWF0ZSBzbGFiIGV4dGVuc2lvbiB2ZWN0b3IhXFxcXG5cXFwiLFxcbjIzNTE6XFx0XFx0XFx0XFx0ICAgICBfX2Z1bmNfXywgcy1cXHUwMDNlbmFtZSk7XFxuMjM1MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMzUzOlxcdFxcdH1cXG4yMzU0OlxcdFxcbjIzNTU6XFx0XFx0cmV0dXJuIHNsYWJfb2JqX2V4dHMoc2xhYik7XFxuMjM1NjpcXHR9XFxuMjM1NzpcXHRcXG4yMzU4OlxcdFxcbjIzNTk6XFx0LyogU2hvdWxkIGJlIGNhbGxlZCBvbmx5IGlmIG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjIxLjYzMjY4OTI1MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTU5MTMwMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTbGFiIE9iamVjdCBFeHRlbnNpb25zKipcblxuT2theSwgaGVyZSdzIHRoZSBkZWFsLiBMaW5lIDIzMjUgaXMganVzdCB0aGUgcGxhY2Vob2xkZXIsIHRoZSBiYXNpYyBpbXBsZW1lbnRhdGlvbiwgaWYgd2UgKmRvbid0KiBoYXZlIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBkZWZpbmVkLiBUaGF0IG1lYW5zIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBsaWtlbHkgdGhlIGtleSBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhhdCdzIHdoZXJlIHRoZSAqcmVhbCogYWN0aW9uIGlzLlxuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1DR2AuIEkgd29uZGVyIGlmIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBieSBpdHNlbGYgaXMgZW5vdWdoIHRvIHRyaWdnZXIgdGhlIGJlaGF2aW91ciBJJ20gaW50ZXJlc3RlZCBpbi4gTGV0IG1lIGNoZWNrLi4uIEFoLCB5ZXMsIGl0IGxvb2tzIGxpa2UgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGRvZXMsIGluIGZhY3QsIHNlbGVjdCBgU0xBQl9PQkpfRVhUYC4gUGVyZmVjdC5cblxuV2FpdCBhIHNlY29uZC4uLiBXaGVyZSBpcyBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVmaW5lZD8gQWgsIGl0J3MgaW4gYGxpYi9LY29uZmlnLmRlYnVnYC4gT2theSwgbm93IEkganVzdCBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGEgKnZhbGlkKiBjb25maWd1cmF0aW9uIG9wdGlvbi4gSnVzdCBhIHF1aWNrIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSdtIG5vdCBjaGFzaW5nIGEgcGhhbnRvbS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgyNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjI1LjU5MTgyMjQ5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTQ0MDMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MTA0Nz1jb25maWcgQ09ERV9UQUdHSU5HXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUwLVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNTE6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUyLVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY0LVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNjU6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubGliL0tjb25maWcuZGVidWctMTA2Ni1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY5LVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNzA6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDcxLVxcdGJvb2wgXFxcIk1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDM6MjcuNDYzMjY4MTgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTUxMjg2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgQ29uZmlnIFZhbGlkaXR5KipcblxuQWxyaWdodCwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgYSBkZWZpbmVkIGFuZCBhY2NlcHRhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgYE1FTUNHYC4gSSBuZWVkIHRvIGVuc3VyZSBib3RoIG9mIHRoZXNlIGFyZSBwcm9wZXJseSBjb25maWd1cmVkIGZvciB0aGUgY3VycmVudCBidWlsZCBvciBlbnZpcm9ubWVudC4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgY29udGV4dCwgdGhhdCBJJ20gd29ya2luZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uLCBsaWtlbHkgbG9va2luZyB0byBlbmFibGUgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gR290dGEgbWFrZSBzdXJlIGJvdGggc2V0dGluZ3MgYXJlIHJlY29nbml6ZWQgYW5kIGRvbid0IGNvbmZsaWN0IHdpdGggYW55IG90aGVyIGVuYWJsZWQgb3B0aW9ucyBvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLiBUaW1lIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYE1FTUNHYCBpcyBhbHNvIGEgdmFsaWQgc3ltYm9sIG9yIG9wdGlvbiBpbiB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NTMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0MzozMC41NzgzOTkxMDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzU4MDAwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDcyLVxcbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc0LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODEtXFxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4My1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA4OC1cXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5MC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5NS1cXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTA5Ny1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0MzozMi4zNTQyMDY2MzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3MjIyNjgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbmZpZ3VyYXRpb24gYW5kIFNsYWIgT2JqZWN0IEV4dGVuc2lvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgYSB2YWxpZCBjb25maWd1cmF0aW9uLiBXZSdsbCBpbmNsdWRlIGl0LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1DR2AgYXJlIGxpc3RlZCBhcyBvdXIgYEVuYWJsZUNvbmZpZ3NgLiBBbHRob3VnaCwgSSBrbm93IGBNRU1DR2AgaXMgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0LCBpdCBkb2Vzbid0IGh1cnQgdG8gZXhwbGljaXRseSBsaXN0IGl0LiBCZXR0ZXIgdG8gYmUgY2xlYXIuXG5cbkFscmlnaHQsIG5vdyBsZXQncyBtYWtlIHN1cmUgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgcmVhY2hhYmxlLiBZZXMsIG9mIGNvdXJzZSwgaXQncyBjYWxsZWQgZHVyaW5nIHNsYWIgYWxsb2NhdGlvbiwgYnV0IG9ubHkgd2hlbiBgU0xBQl9PQkpfRVhUYCBpcyBlbmFibGVkLiBFeGNlbGxlbnQuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgY3ljbGUgdGhhdCB3YXMgb2NjdXJyaW5nIGluIHRoZSBzbGFib2JqX2V4dCBhcnJheSBhbGxvY2F0aW9uLiBHb29kIGNhdGNoLlxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgd2Ugc2hvdWxkIGNvbnNpZGVyIGhlcmU/IFdlbGwsIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0IGRvZXNuJ3QgZGVtYW5kIHNpZ25pZmljYW50IGF0dGVudGlvbiwgYnV0IGBhbGxvY19zbGFiX29ial9leHRzYCBpcyB0aGUgbWFpbiBvbmUgdG8gZm9jdXMgb24uIEFuZCwgdGhlcmUncyBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAuLi4gbGV0J3MgZ2l2ZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAgYSBsb29rIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODk4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjM2LjgyNjQzNjI5NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5NzM3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIyMzA9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIyNjktICovXFxubW0vc2x1Yi5jOjIyNzA6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIyNzEte1xcbi0tXFxubW0vc2x1Yi5jPTIzMzE9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzQtXFxubW0vc2x1Yi5jOjIzMzU6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMzYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jPTMzODE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDMxLVxcdCAqL1xcbm1tL3NsdWIuYzozNDMyOlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0MzMtXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDM6MzYuODgyNDE1NjQzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5OTMwMDYzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgZmlndXJpbmcgb3V0IHRoZSBiZXN0IHdheSB0byBmdXp6IGl0IHdpdGggc3l6a2FsbGVyLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFyb3VuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAgYW5kIGBhbGxvY19zbGFiX29ial9leHRzYC4gSSBzZWUgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAgaXMgY2FsbGVkIGJ5IGBhbGxvY2F0ZV9zbGFiYCwgYW5kIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBjYWxsZWQgYnkgYHByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rYCBhbmQgYGFjY291bnRfc2xhYmAuIFRob3NlIGFyZSBnb29kIGVudHJ5IHBvaW50cyB0byBmb2N1cyB0aGUgZnV6emVyIG9uLCBkZWZpbml0ZWx5LiBXaGlsZSBsb29raW5nIGF0IHRob3NlLCBgZnJlZV9zbGFiX29ial9leHRzYCBsb29rcyByZWxldmFudCBhcyB3ZWxsLCBzbyBJJ2xsIGFkZCB0aG9zZSB0byB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdDogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBhbmQgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBpbmZpbml0ZSByZWN1cnNpb24gZHVyaW5nIHNsYWIgdGVhcmRvd24sIHNwZWNpZmljYWxseSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4gSXQgbW9kaWZpZXMgYG9ial9leHRzX2FsbG9jX3NpemVgIHRvIHByZXZlbnQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gc2xhYnMgd2hlbiBhbGxvY2F0aW5nIHRoZSBgc2xhYm9ial9leHRgIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNMVUIgYWxsb2NhdG9yLCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGlzIG1ha2VzIGl0IHdvcnRoIGZ1enppbmcuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIHNvbWUgZGV0YWlscyBhYm91dCB0aGVzZSBmdW5jdGlvbnMuICBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXNuJ3Qgc3RhdGljIGluIGBtbS9zbHViLmNgIGFuZCBpc24ndCBleHBvcnRlZCwgYnV0IHRoYXQgc2hvdWxkbid0IG1hdHRlciBzaW5jZSBzeXprYWxsZXIgZ3VpZGVzIGZ1enppbmcgdG93YXJkIHRoZXNlIGZ1bmN0aW9ucywgYXMgbG9uZyBhcyBpdCdzIHJlYWNoYWJsZS4gYG9ial9leHRzX2FsbG9jX3NpemVgIGlzIGBzdGF0aWMgaW5saW5lYCBzbyBpdCB3b24ndCBiZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCBidXQgdGhlIGltcG9ydGFudCBmdW5jdGlvbiwgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCB3aWxsIGJlLiAgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHByb2JsZW0gZm9yIGZ1enppbmcgYnV0IGl0J3Mgbm90IG1hcmtlZCBpbmxpbmUsIGFuZCB0aGVyZSdzIGEgbm9uLWlubGluZSB2ZXJzaW9uIHNvIHRoaXMgc2hvdWxkIGJlIGFjY2Vzc2libGUgdG8gdGhlIGZ1enplci4gVGhpcyB3aWxsIHdvcmsuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gYFNMQUJfT0JKX0VYVGAgc2VlbXMgdG8gYmUgdGhlIGtleSwgYW5kIGl0J3Mgc2VsZWN0ZWQgYnkgZWl0aGVyIGBNRU1DR2Agb3IgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBTbywgZW5hYmxpbmcgZWl0aGVyIG9mIHRob3NlIHdpbGwgZ2V0IHVzIHRoZSByaWdodCBjb25maWd1cmF0aW9uLiBJJ2xsIGluY2x1ZGUgYm90aC4gSSB3aWxsIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBhbmQgdGFyZ2V0IGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoaXMgYW5hbHlzaXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBwbGFuIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzE4LCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mzo0Ni44NzU0MjUyMjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzE4OTQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW5maW5pdGUgcmVjdXJzaW9uL2RlYWRsb2NrIGR1cmluZyBzbGFiIHRlYXJkb3duIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGlzIGFsbG9jYXRlZCBmcm9tIGEgc3RyaWN0bHkgbGFyZ2VyIGttYWxsb2MgY2FjaGUuIFRoaXMgcHJldmVudHMgYSBjeWNsZSB3aGVyZSBhIHNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJ3MgYXJyYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBTTFVCIGFsbG9jYXRvciBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIG9yIG1lbW9yeSBjZ3JvdXBzIGFyZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvbi9kZWFkbG9jayBkdXJpbmcgc2xhYiB0ZWFyZG93biBieSBlbnN1cmluZyB0aGF0IHRoZSBzbGFib2JqX2V4dCBhcnJheSBpcyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBrbWFsbG9jIGNhY2hlLiBUaGlzIHByZXZlbnRzIGEgY3ljbGUgd2hlcmUgYSBzbGFiIGhvbGRzIGFub3RoZXIgc2xhYidzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqh4z[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-25 23:17:45 +0000 UTC FinishedAt: 2026-06-25 23:43:48 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEMCG" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "840ef6c78e6a2f694b578ecb9063241c992aaa9e", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "MEM_ALLOC_PROFILING", "MEMCG" ], "series_id": "7ccd4154-adb9-445f-958d-3b2e577511fc" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "alloc_slab_obj_exts", "alloc_slab_obj_exts_early" ], "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+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQyPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW5maW5pdGUgcmVjdXJzaW9uL2RlYWRsb2NrIGR1cmluZyBzbGFiIHRlYXJkb3duIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGlzIGFsbG9jYXRlZCBmcm9tIGEgc3RyaWN0bHkgbGFyZ2VyIGttYWxsb2MgY2FjaGUuIFRoaXMgcHJldmVudHMgYSBjeWNsZSB3aGVyZSBhIHNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMzo0MjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDQ4NGVhNGE0MzcxNTk3ZWE3MjMzMGIzNDRlMTVhZDEwZDdjYTQ4OWVcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVGh1IEp1biAyNSAyMzo0MjozOCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IDllYzc3NGRjNzAwOTY5Li40OGU1NGQzNDA4NjVhNSAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2x1Yi5jXG5AQCAtMjEyNCwxNSAmIzQzOzIxMjQsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbiB9XG4gXG4gLypcbi0gKiBDYWxjdWxhdGUgdGhlIGFsbG9jYXRpb24gc2l6ZSBmb3Igc2xhYm9ial9leHQgYXJyYXkuXG4mIzQzOyAqIFNpemUgb2YgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGZvciBAc2xhYi5cbiAgKlxuLSAqIFdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGlzIGVuYWJsZWQsIHRoZSBvYmpfZXh0cyBhcnJheVxuLSAqIGNvdWxkIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgY2FjaGUgaXQmIzM5O3MgYmVpbmcgYWxsb2NhdGVkIGZvci5cbi0gKiBUaGlzIHdvdWxkIHByZXZlbnQgdGhlIHNsYWIgZnJvbSBldmVyIGJlaW5nIGZyZWVkIGJlY2F1c2UgaXQgd291bGRcbi0gKiBhbHdheXMgY29udGFpbiBhdCBsZWFzdCBvbmUgYWxsb2NhdGVkIG9iamVjdCAoaXRzIG93biBvYmpfZXh0cyBhcnJheSkuXG4tICpcbi0gKiBUbyBhdm9pZCB0aGlzLCBpbmNyZWFzZSB0aGUgYWxsb2NhdGlvbiBzaXplIHdoZW4gd2UgZGV0ZWN0IHRoZSBhcnJheVxuLSAqIG1heSBjb21lIGZyb20gdGhlIHNhbWUgY2FjaGUsIGZvcmNpbmcgaXQgdG8gdXNlIGEgZGlmZmVyZW50IGNhY2hlLlxuJiM0MzsgKiBUaGUgYXJyYXkgaXMgaXRzZWxmIGttYWxsb2MoKSYjMzk7ZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxuJiM0MzsgKiBrbWFsbG9jIGNhY2hlIHRoYW4gQHMsIHRoZSBcJiMzNDtzbGFiIGhvbGRzIGFub3RoZXIgc2xhYiYjMzk7cyBhcnJheVwmIzM0OyByZWxhdGlvbiBjb3VsZFxuJiM0MzsgKiBmb3JtIGEgY3ljbGUgKHNlbGYsIG9yIGUuZy4ga21hbGxvYy01MTIgXHUwMDNjLVx1MDAzZSBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzXG4mIzQzOyAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXHUwMDNlIGtmcmVlKCkgLVx1MDAzZSBkaXNjYXJkX3NsYWIoKVxuJiM0MzsgKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYVxuJiM0MzsgKiBEQUcgKGFjeWNsaWMpLlxuICAqL1xuIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdFx0XHRcdCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgZ2ZwX3QgZ2ZwKVxuQEAgLTIxNDcsMTQgJiM0MzsyMTQ2LDkgQEAgc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0cmV0dXJuIHN6O1xuIFxuIFx0b2JqX2V4dHNfY2FjaGUgPSBrbWFsbG9jX3NsYWIoc3osIE5VTEwsIGdmcCwgX19rbWFsbG9jX3Rva2VuKDApKTtcbi1cdC8qXG4tXHQgKiBXZSBjYW4mIzM5O3Qgc2ltcGx5IGNvbXBhcmUgcyB3aXRoIG9ial9leHRzX2NhY2hlLCBiZWNhdXNlIHBhcnRpdGlvbmVkIGttYWxsb2Ncbi1cdCAqIGNhY2hlcyBoYXZlIG11bHRpcGxlIGNhY2hlcyBwZXIgc2l6ZSwgc2VsZWN0ZWQgYnkgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZS5cbi1cdCAqIFNpbmNlIGNhbGxlciBhZGRyZXNzIG9yIHR5cGUgbWF5IGRpZmZlciBiZXR3ZWVuIGttYWxsb2Nfc2xhYigpIGFuZCBhY3R1YWxcbi1cdCAqIGFsbG9jYXRpb24sIGJ1bXAgc2l6ZSB3aGVuIHNpemVzIGFyZSBlcXVhbC5cbi1cdCAqL1xuLVx0aWYgKHMtXHUwMDNlb2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUpXG4tXHRcdHJldHVybiBvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSAmIzQzOyAxO1xuJiM0MztcdC8qIGNvbXBhcmUgb2JqZWN0X3NpemUsIG5vdCB0aGUgY2FjaGUgcG9pbnRlciAocGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpICovXG4mIzQzO1x0aWYgKG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplIFx1MDAzYz0gcy1cdTAwM2VvYmplY3Rfc2l6ZSlcbiYjNDM7XHRcdHJldHVybiBzLVx1MDAzZW9iamVjdF9zaXplICYjNDM7IDE7XG4gXG4gXHRyZXR1cm4gc3o7XG4gfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQyPC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW5maW5pdGUgcmVjdXJzaW9uL2RlYWRsb2NrIGR1cmluZyBzbGFiIHRlYXJkb3duIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGlzIGFsbG9jYXRlZCBmcm9tIGEgc3RyaWN0bHkgbGFyZ2VyIGttYWxsb2MgY2FjaGUuIFRoaXMgcHJldmVudHMgYSBjeWNsZSB3aGVyZSBhIHNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLApldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXQKICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LAogICBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNDg0ZWE0YTQzNzE1OTdlYTcyMzMwYjM0NGUxNWFkMTBkN2NhNDg5ZQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBUaHUgSnVuIDI1IDIzOjQyOjM4IDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vc2x1Yi5jIGIvbW0vc2x1Yi5jCmluZGV4IDllYzc3NGRjNzAwOTY5Li40OGU1NGQzNDA4NjVhNSAxMDA2NDQKLS0tIGEvbW0vc2x1Yi5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL3NsdWIuYwpAQCAtMjEyNCwxNSAmIzQzOzIxMjQsMTQgQEAgc3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYikKIH0KIAogLyoKLSAqIENhbGN1bGF0ZSB0aGUgYWxsb2NhdGlvbiBzaXplIGZvciBzbGFib2JqX2V4dCBhcnJheS4KJiM0MzsgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuCiAgKgotICogV2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZW5hYmxlZCwgdGhlIG9ial9leHRzIGFycmF5Ci0gKiBjb3VsZCBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGNhY2hlIGl0JiMzOTtzIGJlaW5nIGFsbG9jYXRlZCBmb3IuCi0gKiBUaGlzIHdvdWxkIHByZXZlbnQgdGhlIHNsYWIgZnJvbSBldmVyIGJlaW5nIGZyZWVkIGJlY2F1c2UgaXQgd291bGQKLSAqIGFsd2F5cyBjb250YWluIGF0IGxlYXN0IG9uZSBhbGxvY2F0ZWQgb2JqZWN0IChpdHMgb3duIG9ial9leHRzIGFycmF5KS4KLSAqCi0gKiBUbyBhdm9pZCB0aGlzLCBpbmNyZWFzZSB0aGUgYWxsb2NhdGlvbiBzaXplIHdoZW4gd2UgZGV0ZWN0IHRoZSBhcnJheQotICogbWF5IGNvbWUgZnJvbSB0aGUgc2FtZSBjYWNoZSwgZm9yY2luZyBpdCB0byB1c2UgYSBkaWZmZXJlbnQgY2FjaGUuCiYjNDM7ICogVGhlIGFycmF5IGlzIGl0c2VsZiBrbWFsbG9jKCkmIzM5O2QuIElmIGl0IGNhbWUgZnJvbSB0aGUgc2FtZSBvciBhIHNtYWxsZXIKJiM0MzsgKiBrbWFsbG9jIGNhY2hlIHRoYW4gQHMsIHRoZSAmIzM0O3NsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5JiMzNDsgcmVsYXRpb24gY291bGQKJiM0MzsgKiBmb3JtIGEgY3ljbGUgKHNlbGYsIG9yIGUuZy4ga21hbGxvYy01MTIgJmx0Oy0mZ3Q7IGttYWxsb2MtMWspIHRoYXQgcGlucyB0aGUgc2xhYnMKJiM0MzsgKiBmb3JldmVyIGFuZCByZWN1cnNlcyB2aWEgZnJlZV9zbGFiX29ial9leHRzKCkgLSZndDsga2ZyZWUoKSAtJmd0OyBkaXNjYXJkX3NsYWIoKQomIzQzOyAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhCiYjNDM7ICogREFHIChhY3ljbGljKS4KICAqLwogc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywKIAkJCQkJIHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApCkBAIC0yMTQ3LDE0ICYjNDM7MjE0Niw5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsCiAJCXJldHVybiBzejsKIAogCW9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7Ci0JLyoKLQkgKiBXZSBjYW4mIzM5O3Qgc2ltcGx5IGNvbXBhcmUgcyB3aXRoIG9ial9leHRzX2NhY2hlLCBiZWNhdXNlIHBhcnRpdGlvbmVkIGttYWxsb2MKLQkgKiBjYWNoZXMgaGF2ZSBtdWx0aXBsZSBjYWNoZXMgcGVyIHNpemUsIHNlbGVjdGVkIGJ5IGNhbGxlciBhZGRyZXNzIG9yIHR5cGUuCi0JICogU2luY2UgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZSBtYXkgZGlmZmVyIGJldHdlZW4ga21hbGxvY19zbGFiKCkgYW5kIGFjdHVhbAotCSAqIGFsbG9jYXRpb24sIGJ1bXAgc2l6ZSB3aGVuIHNpemVzIGFyZSBlcXVhbC4KLQkgKi8KLQlpZiAocy0mZ3Q7b2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtJmd0O29iamVjdF9zaXplKQotCQlyZXR1cm4gb2JqX2V4dHNfY2FjaGUtJmd0O29iamVjdF9zaXplICYjNDM7IDE7CiYjNDM7CS8qIGNvbXBhcmUgb2JqZWN0X3NpemUsIG5vdCB0aGUgY2FjaGUgcG9pbnRlciAocGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpICovCiYjNDM7CWlmIChvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemUgJmx0Oz0gcy0mZ3Q7b2JqZWN0X3NpemUpCiYjNDM7CQlyZXR1cm4gcy0mZ3Q7b2JqZWN0X3NpemUgJiM0MzsgMTsKIAogCXJldHVybiBzejsKIH0KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMxNAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDE3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFNMVUIgTWVtb3J5IEFsbG9jYXRpb24gUGF0Y2gqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggaW4gYG1tL3NsdWIuY2AuIEl0JiMzOTtzIGZvY3VzZWQgb24gbW9kaWZ5aW5nIHRoZSBgb2JqX2V4dHNfYWxsb2Nfc2l6ZSgpYCBmdW5jdGlvbi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBpcyBhY3R1YWxseSBxdWl0ZSBpbnRlcmVzdGluZyBmcm9tIGEgcGVyZm9ybWFuY2UgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHBlcnNwZWN0aXZlLiBQcmV2aW91c2x5LCB0aGUgbG9naWMgY29tcGFyZWQgYHMtJmd0O29iamVjdF9zaXplYCBkaXJlY3RseSB3aXRoIGBvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemVgLiBUaGUgcGF0Y2ggcmVwbGFjZXMgdGhpcyB3aXRoIGEgY2hlY2sgdG8gc2VlIGlmIGBvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemVgIGlzIGxlc3MgdGhhbiBvciBlcXVhbCB0byBgcy0mZ3Q7b2JqZWN0X3NpemVgLiBUaGVuLCBpdCBqdXN0IHJldHVybnMgYHMtJmd0O29iamVjdF9zaXplICYjNDM7IDFgLiBUaGlzIHN1YnRsZSBjaGFuZ2UgaGFzIGltcGxpY2F0aW9ucyBmb3IgaG93IHdlIHByb2ZpbGUgbWVtb3J5IGFsbG9jYXRpb24gd2l0aGluIFNMVUIuIFRoZSBjb21tZW50IGNsYXJpZmllcyB0aGF0IHdlIGFyZSBjb21wYXJpbmcgdGhlIHNpemVzLCBub3QgdGhlIGNhY2hlIHBvaW50ZXJzICh0byBhY2NvdW50IGZvciBwYXJ0aXRpb25lZCBrbWFsbG9jIGNhY2hlcykuIEkgbmVlZCB0byBkaWcgZGVlcGVyIGludG8gdGhlIGNvbnRleHRzIHRoYXQgY2FsbHMgYG9ial9leHRzX2FsbG9jX3NpemVgLiBUaGlzIHByb2JhYmx5IGNoYW5nZXMgdGhlIHVwcGVyIGJvdW5kcyBvZiBhbGxvY2F0ZWQgc2l6ZSwgc28gSSBuZWVkIHRvIGNoZWNrIGhvdyBpdCB3aWxsIGNoYW5nZSB0aGUgYmVoYXZpb3Igb2YgdGhlIHNsdWIgYWxsb2NhdG9yIGFuZCBpdHMgcHJvZmlsaW5nIGxvZ2ljLiBMZXQmIzM5O3Mgc3RhcnQgd2l0aCBjaGVja2luZyB0aGUgY29kZSBvZiB0aGUgZnVuY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7b2JqX2V4dHNfYWxsb2Nfc2l6ZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEyMT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMTM1LSAqL1xubW0vc2x1Yi5jOjIxMzY6c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMTM3LVx0XHRcdFx0XHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcbi0tXG5tbS9zbHViLmM9MjE1Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIxNzEtXG5tbS9zbHViLmM6MjE3MjpcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xubW0vc2x1Yi5jLTIxNzMtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjk4MAoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDM4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGlzIGNvZGU6CgoqKkFuYWx5emluZyB0aGUgT2JqZWN0IEV4dGVuc2lvbiBBbGxvY2F0aW9uKioKCk9rYXksIHNvIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBvYmplY3QgZXh0ZW5zaW9ucy4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJlbGllcyBvbiBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgdG8gZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgYW1vdW50IG9mIG1lbW9yeS4gVGhhdCYjMzk7cyBhIHJlYXNvbmFibGUgZGVzaWduOyBzZXBhcmF0aW9uIG9mIGNvbmNlcm5zIGFuZCBhbGwgdGhhdC4gQnV0IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIHBpY3R1cmUuIE15IGltbWVkaWF0ZSBxdWVzdGlvbiBpczogKndoYXQmIzM5O3MgY2FsbGluZyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaW4gdGhlIGZpcnN0IHBsYWNlPyogVGhlIGFsbG9jYXRpb24gZnVuY3Rpb24mIzM5O3MgY2FsbGVycyBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVzZS1jYXNlIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBvYmplY3QgZXh0ZW5zaW9ucyBhcmUgY3JlYXRlZCBhbmQgbWFuYWdlZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uLCB0aGF0JiMzOTtzIHdoZXJlIEkgd2lsbCBzdGFydCBkaWdnaW5nIGluIGZ1cnRoZXIuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjEzNj1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0yMTU1LVxubW0vc2x1Yi5jOjIxNTY6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxNTctXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIyMzA9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMjY5LSAqL1xubW0vc2x1Yi5jOjIyNzA6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG5tbS9zbHViLmMtMjI3MS17XG4tLVxubW0vc2x1Yi5jPTIzMjE9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtMjMyNC1cbm1tL3NsdWIuYzoyMzI1OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMyNi1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jPTIzMzE9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuLS1cbm1tL3NsdWIuYy0yMzM0LVxubW0vc2x1Yi5jOjIzMzU6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMzNi1cdFx0XHRcdFx0XHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTIzNDU9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0yMzQ4LVx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFx1MDAyNlx1MDAyNlxubW0vc2x1Yi5jOjIzNDk6XHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG5tbS9zbHViLmMtMjM1MC1cdFx0cHJfd2Fybl9vbmNlKFwmIzM0OyVzLCAlczogRmFpbGVkIHRvIGNyZWF0ZSBzbGFiIGV4dGVuc2lvbiB2ZWN0b3IhXFxuXCYjMzQ7LFxuLS1cbm1tL3NsdWIuYz0zMzUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcbi0tXG5tbS9zbHViLmMtMzM1OC1cdFx0XHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcbm1tL3NsdWIuYzozMzU5Olx0XHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcbm1tL3NsdWIuYy0zMzYwLVx0XHRcdFx0ICAgIGFsbG9jX2ZsYWdzIHwgU0xBQl9BTExPQ19ORVdfU0xBQik7XG4tLVxubW0vc2x1Yi5jPTMzODE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMzQzMS1cdCAqL1xubW0vc2x1Yi5jOjM0MzI6XHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xubW0vc2x1Yi5jLTM0MzMtXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQyPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQwMzkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzNwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlbHZpbmcgaW50byBTbGFiIE9iamVjdCBFeHRlbnNpb25zKioKClJpZ2h0LCBzbyB0aGlzIG5ldyBmZWF0dXJlIEkmIzM5O20gbG9va2luZyBhdCwgaXQmIzM5O3MgZGVmaW5pdGVseSB0aWVkIHRvIGBzbGFiX29ial9leHRzYC4gSW1tZWRpYXRlbHkgSSYjMzk7bSB0aGlua2luZyBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcg4oCTIHRoYXQmIzM5O3MgdGhlIHVzdWFsIHRlcnJpdG9yeSBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgdGhlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHByZWNpc2VseSB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBmbGlwcGluZyB0aGUgc3dpdGNoIG9uIGBzbGFiX29ial9leHRzYC4gVGhhdCYjMzk7cyB3aGVyZSBJIG5lZWQgdG8gc3RhcnQuIFVuZGVyc3RhbmRpbmcgdGhlIGVuYWJsaW5nIGNvbmRpdGlvbnMgaXMgY3J1Y2lhbCBmb3IgcmVhbGx5IGdyYXNwaW5nIHRoZSBpbXBhY3Qgb2YgdGhpcyBmZWF0dXJlLiBUaW1lIHRvIGRpZyBpbnRvIHRoZSBidWlsZCBjb25maWd1cmF0aW9ucy4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3NsYWJfb2JqX2V4dHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jPTc2MT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X29yaWdfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxuLS1cbm1tL3NsdWIuYy03ODktICovXG5tbS9zbHViLmM6NzkwOnN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3NsYWJfb2JqX2V4dHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXG5tbS9zbHViLmMtNzkxLXtcbi0tXG5tbS9zbHViLmM9ODI4PXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtODMzLVxubW0vc2x1Yi5jOjgzNDpcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbm1tL3NsdWIuYy04MzUtXHRpZiAoIW9ial9leHRzKVxuLS1cbm1tL3NsdWIuYy04NDItI2Vsc2Vcbm1tL3NsdWIuYzo4NDM6c3RhdGljIGlubGluZSBib29sIG5lZWRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbm1tL3NsdWIuYy04NDQte1xuLS1cbm1tL3NsdWIuYz0yMDY1PXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcbi0tXG5tbS9zbHViLmMtMjA3MC1cdG9ial9zbGFiID0gdmlydF90b19zbGFiKG9iaik7XG5tbS9zbHViLmM6MjA3MTpcdHNsYWJfZXh0cyA9IHNsYWJfb2JqX2V4dHMob2JqX3NsYWIpO1xubW0vc2x1Yi5jLTIwNzItXHRpZiAoc2xhYl9leHRzKSB7XG5tbS9zbHViLmM6MjA3MzpcdFx0Z2V0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcbm1tL3NsdWIuYy0yMDc0LVx0XHR1bnNpZ25lZCBpbnQgb2ZmcyA9IG9ial90b19pbmRleChvYmpfc2xhYi1cdTAwM2VzbGFiX2NhY2hlLFxuLS1cbm1tL3NsdWIuYy0yMDc5LVx0XHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShcdTAwMjZleHQtXHUwMDNlcmVmKSkpIHtcbm1tL3NsdWIuYzoyMDgwOlx0XHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG5tbS9zbHViLmMtMjA4MS1cdFx0XHRyZXR1cm47XG4tLVxubW0vc2x1Yi5jLTIwODYtXHRcdHNldF9jb2RldGFnX2VtcHR5KFx1MDAyNmV4dC1cdTAwM2VyZWYpO1xubW0vc2x1Yi5jOjIwODc6XHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG5tbS9zbHViLmMtMjA4OC1cdH1cbi0tXG5tbS9zbHViLmM9MjExNj1zdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4tLVxubW0vc2x1Yi5jLTIxMjAtXG5tbS9zbHViLmM6MjEyMTpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxubW0vc2x1Yi5jLTIxMjIte1xuLS1cbm1tL3NsdWIuYy0yMTMxLSAqIGZvcm0gYSBjeWNsZSAoc2VsZiwgb3IgZS5nLiBrbWFsbG9jLTUxMiBcdTAwM2MtXHUwMDNlIGttYWxsb2MtMWspIHRoYXQgcGlucyB0aGUgc2xhYnNcbm1tL3NsdWIuYzoyMTMyOiAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXHUwMDNlIGtmcmVlKCkgLVx1MDAzZSBkaXNjYXJkX3NsYWIoKVxubW0vc2x1Yi5jLTIxMzMtICogYXQgdGVhcmRvd24uIEZvcmNlIGl0IGludG8gYSBzdHJpY3RseSBsYXJnZXIgY2FjaGUgdG8ga2VlcCB0aGF0IHJlbGF0aW9uIGFcbi0tXG5tbS9zbHViLmM9MjEzNj1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0yMTU1LVxubW0vc2x1Yi5jOjIxNTY6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxubW0vc2x1Yi5jLTIxNTctXHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTIxODMtXHRcdGlmICghbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzbGFiKSBcdTAwMjZcdTAwMjZcbm1tL3NsdWIuYzoyMTg0Olx0XHQgICAgc2xhYl9vYmpfZXh0cyhzbGFiKSlcbm1tL3NsdWIuYy0yMTg1LVx0XHRcdHJldHVybiAwO1xuLS1cbm1tL3NsdWIuYy0yMjI5LVxubW0vc2x1Yi5jOjIyMzA6c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxubW0vc2x1Yi5jLTIyMzEte1xuLS1cbm1tL3NsdWIuYy0yMjMzLVxubW0vc2x1Yi5jOjIyMzQ6XHRvYmpfZXh0cyA9IChzdHJ1Y3Qgc2xhYm9ial9leHQgKilzbGFiX29ial9leHRzKHNsYWIpO1xubW0vc2x1Yi5jLTIyMzUtXHRpZiAoIW9ial9leHRzKSB7XG4tLVxubW0vc2x1Yi5jLTIyNjktICovXG5tbS9zbHViLmM6MjI3MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMjcxLXtcbi0tXG5tbS9zbHViLmMtMjI3Ny1cbm1tL3NsdWIuYzoyMjc4Olx0aWYgKCFuZWVkX3NsYWJfb2JqX2V4dHMocykpXG5tbS9zbHViLmMtMjI3OS1cdFx0cmV0dXJuO1xuLS1cbm1tL3NsdWIuYy0yMjg1LVxubW0vc2x1Yi5jOjIyODY6XHRcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbm1tL3NsdWIuYy0yMjg3LVx0XHRtZW1zZXQoYWRkciwgMCwgb2JqX2V4dHNfc2l6ZV9pbl9zbGFiKHNsYWIpKTtcbm1tL3NsdWIuYzoyMjg4Olx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjI4OS1cbi0tXG5tbS9zbHViLmMtMjMwMC1cbm1tL3NsdWIuYzoyMzAxOlx0XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjMwMi1cdFx0Zm9yX2VhY2hfb2JqZWN0KGFkZHIsIHMsIHNsYWJfYWRkcmVzcyhzbGFiKSwgc2xhYi1cdTAwM2VvYmplY3RzKVxuLS1cbm1tL3NsdWIuYy0yMzA0LVx0XHRcdCAgICAgICBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSk7XG5tbS9zbHViLmM6MjMwNTpcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xubW0vc2x1Yi5jLTIzMDYtXG4tLVxubW0vc2x1Yi5jPTIzMTc9c3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKVxuLS1cbm1tL3NsdWIuYy0yMzIwLVxubW0vc2x1Yi5jOjIzMjE6c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMzIyLXtcbi0tXG5tbS9zbHViLmMtMjMyNC1cbm1tL3NsdWIuYzoyMzI1OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjMyNi1cdFx0XHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTIzMzAtXG5tbS9zbHViLmM6MjMzMTpzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG5tbS9zbHViLmMtMjMzMi17XG4tLVxubW0vc2x1Yi5jLTIzMzQtXG5tbS9zbHViLmM6MjMzNTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzM2LVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmM9MjM0ND1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbm1tL3NsdWIuYzoyMzQ1OnByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbm1tL3NsdWIuYy0yMzQ2LVx0XHRcdCAgIGdmcF90IGZsYWdzLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIHZvaWQgKnApXG5tbS9zbHViLmMtMjM0Ny17XG5tbS9zbHViLmM6MjM0ODpcdGlmICghc2xhYl9vYmpfZXh0cyhzbGFiKSBcdTAwMjZcdTAwMjZcbm1tL3NsdWIuYzoyMzQ5Olx0ICAgIGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xubW0vc2x1Yi5jLTIzNTAtXHRcdHByX3dhcm5fb25jZShcJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwmIzM0Oyxcbi0tXG5tbS9zbHViLmMtMjM1NC1cbm1tL3NsdWIuYzoyMzU1Olx0cmV0dXJuIHNsYWJfb2JqX2V4dHMoc2xhYik7XG5tbS9zbHViLmMtMjM1Ni19XG4tLVxubW0vc2x1Yi5jPTIzNjE9X19hbGxvY190YWdnaW5nX3NsYWJfYWxsb2NfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCBnZnBfdCBmbGFncyxcbi0tXG5tbS9zbHViLmMtMjM3Ny1cdHNsYWIgPSB2aXJ0X3RvX3NsYWIob2JqZWN0KTtcbm1tL3NsdWIuYzoyMzc4Olx0b2JqX2V4dHMgPSBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzLCBzbGFiLCBmbGFncywgYWxsb2NfZmxhZ3MsIG9iamVjdCk7XG5tbS9zbHViLmMtMjM3OS1cdC8qXG4tLVxubW0vc2x1Yi5jLTIzODYtXG5tbS9zbHViLmM6MjM4NzpcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xubW0vc2x1Yi5jLTIzODgtXHRcdG9ial9leHQgPSBzbGFiX29ial9leHQoc2xhYiwgb2JqX2V4dHMsIG9ial9pZHgpO1xubW0vc2x1Yi5jLTIzODktXHRcdGFsbG9jX3RhZ19hZGQoXHUwMDI2b2JqX2V4dC1cdTAwM2VyZWYsIGN1cnJlbnQtXHUwMDNlYWxsb2NfdGFnLCBzLVx1MDAzZXNpemUpO1xubW0vc2x1Yi5jOjIzOTA6XHRcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbm1tL3NsdWIuYy0yMzkxLVx0fSBlbHNlIHtcbi0tXG5tbS9zbHViLmM9MjQwNj1fX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcbi0tXG5tbS9zbHViLmMtMjQxNS1cbm1tL3NsdWIuYzoyNDE2Olx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xubW0vc2x1Yi5jLTI0MTctXHRpZiAoIW9ial9leHRzKVxuLS1cbm1tL3NsdWIuYy0yNDE5LVxubW0vc2x1Yi5jOjI0MjA6XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjQyMS1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG9iamVjdHM7IGkmIzQzOyYjNDM7KSB7XG4tLVxubW0vc2x1Yi5jLTI0MjUtXHR9XG5tbS9zbHViLmM6MjQyNjpcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcbm1tL3NsdWIuYy0yNDI3LX1cbi0tXG5tbS9zbHViLmM9MjQ4ND12b2lkIG1lbWNnX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXG4tLVxubW0vc2x1Yi5jLTI0OTEtXG5tbS9zbHViLmM6MjQ5MjpcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbm1tL3NsdWIuYy0yNDkzLVx0aWYgKGxpa2VseSghb2JqX2V4dHMpKVxuLS1cbm1tL3NsdWIuYy0yNDk1LVxubW0vc2x1Yi5jOjI0OTY6XHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjQ5Ny1cdF9fbWVtY2dfc2xhYl9mcmVlX2hvb2socywgc2xhYiwgcCwgb2JqZWN0cywgb2JqX2V4dHMpO1xubW0vc2x1Yi5jOjI0OTg6XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjQ5OS19XG4tLVxubW0vc2x1Yi5jPTI1MDI9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxuLS1cbm1tL3NsdWIuYy0yNTM4LVx0ICogSWdub3JlIEtNQUxMT0NfTk9STUFMIGNhY2hlIHRvIGF2b2lkIHBvc3NpYmxlIGNpcmN1bGFyIGRlcGVuZGVuY3lcbm1tL3NsdWIuYzoyNTM5Olx0ICogb2Ygc2xhYl9vYmpfZXh0cyBiZWluZyBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGFuZCB0aHVzIHRoZSBzbGFiXG5tbS9zbHViLmMtMjU0MC1cdCAqIGJlY29taW5nIGVmZmVjdGl2ZWx5IHVuZnJlZWFibGUuXG4tLVxubW0vc2x1Yi5jLTI1NDUtXHQvKiBJZ25vcmUgYWxyZWFkeSBjaGFyZ2VkIG9iamVjdHMuICovXG5tbS9zbHViLmM6MjU0NjpcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcbm1tL3NsdWIuYy0yNTQ3LVx0aWYgKG9ial9leHRzKSB7XG5tbS9zbHViLmM6MjU0ODpcdFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xubW0vc2x1Yi5jLTI1NDktXHRcdG9mZiA9IG9ial90b19pbmRleChzLCBzbGFiLCBwKTtcbi0tXG5tbS9zbHViLmMtMjU1MS1cdFx0aWYgKHVubGlrZWx5KG9ial9leHQtXHUwMDNlb2JqY2cpKSB7XG5tbS9zbHViLmM6MjU1MjpcdFx0XHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XG5tbS9zbHViLmMtMjU1My1cdFx0XHRyZXR1cm4gdHJ1ZTtcbm1tL3NsdWIuYy0yNTU0LVx0XHR9XG5tbS9zbHViLmM6MjU1NTpcdFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xubW0vc2x1Yi5jLTI1NTYtXHR9XG4tLVxubW0vc2x1Yi5jPTMzNTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzU3LVx0XHRcdChzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0FDQ09VTlQpIFx1MDAyNlx1MDAyNlxubW0vc2x1Yi5jOjMzNTg6XHRcdFx0IXNsYWJfb2JqX2V4dHMoc2xhYikpXG5tbS9zbHViLmM6MzM1OTpcdFx0YWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBnZnAsXG5tbS9zbHViLmMtMzM2MC1cdFx0XHRcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xuLS1cbm1tL3NsdWIuYz0zMzY2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1bmFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzczLVx0ICovXG5tbS9zbHViLmM6MzM3NDpcdGZyZWVfc2xhYl9vYmpfZXh0cyhzbGFiLCBhbGxvd19zcGluKTtcbm1tL3NsdWIuYy0zMzc1LVxuLS1cbm1tL3NsdWIuYz0zMzgxPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXG4tLVxubW0vc2x1Yi5jLTM0MjYtXHRzZXR1cF9zbGFiX2RlYnVnKHMsIHNsYWIsIHN0YXJ0KTtcbm1tL3NsdWIuYzozNDI3Olx0aW5pdF9zbGFiX29ial9leHRzKHNsYWIpO1xubW0vc2x1Yi5jLTM0MjgtXHQvKlxuLS1cbm1tL3NsdWIuYy0zNDMxLVx0ICovXG5tbS9zbHViLmM6MzQzMjpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQzMy1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzg0OQoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDQzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhpcyBtZW1vcnkgYWxsb2NhdGlvbiBiZWhhdmlvciBpcyBjb21pbmcgZnJvbS4gTXkgZ3V0IGZlZWxpbmcgaXMgdGhhdCB3ZSYjMzk7cmUgZGVhbGluZyB3aXRoIGVpdGhlciBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIG9yIHBlcmhhcHMgYENPTkZJR19NRU1DR2AgaW5mbHVlbmNpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIGdldCBzb21lIGNvbmNyZXRlIGV2aWRlbmNlLCBzbyBJJiMzOTtsbCBqdW1wIHJpZ2h0IGludG8gdGhlIGtlcm5lbCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBgbW0vc2x1Yi5jYCBmaWxlIHNob3VsZCBiZSBhIGdvb2Qgc3RhcnRpbmcgcG9pbnQsIGFuZCBJJiMzOTtsbCB6ZXJvIGluIG9uIGxpbmUgMjEzNi4gVGhhdCYjMzk7cyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY3JpdGljYWwgY29kZSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uIHBhdGggdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHdoYXQmIzM5O3MgZ29pbmcgb24uIExldCYjMzk7cyBzZWUgd2hhdCB0aGF0IGNvZGUgYmxvY2sgcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMTAwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMTAwOlx0XHQgKiBJZiB2ZWN0b3IgcHJldmlvdXNseSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlbiB3ZSBoYXZlIGxpdmVcbjIxMDE6XHRcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcbjIxMDI6XHRcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cbjIxMDM6XHRcdCAqL1xuMjEwNDpcdFx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xuMjEwNTpcdFx0XHR1bnNpZ25lZCBpbnQgaTtcbjIxMDY6XHRcbjIxMDc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSYjNDM7JiM0MzspXG4yMTA4Olx0XHRcdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2dmVjW2ldLnJlZik7XG4yMTA5Olx0XHR9XG4yMTEwOlx0fVxuMjExMTpcdFxuMjExMjpcdCNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG4yMTEzOlx0XG4yMTE0Olx0c3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxuMjExNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiBmYWxzZTsgfVxuMjExNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbjIxMTc6XHRcdFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XG4yMTE4Olx0XG4yMTE5Olx0I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG4yMTIwOlx0XG4yMTIxOlx0c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbjIxMjI6XHR7XG4yMTIzOlx0XHRzbGFiLVx1MDAzZW9ial9leHRzID0gMDtcbjIxMjQ6XHR9XG4yMTI1Olx0XG4yMTI2Olx0LypcbjIxMjc6XHQgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuXG4yMTI4Olx0ICpcbjIxMjk6XHQgKiBUaGUgYXJyYXkgaXMgaXRzZWxmIGttYWxsb2MoKSYjMzk7ZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxuMjEzMDpcdCAqIGttYWxsb2MgY2FjaGUgdGhhbiBAcywgdGhlIFwmIzM0O3NsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5XCYjMzQ7IHJlbGF0aW9uIGNvdWxkXG4yMTMxOlx0ICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFx1MDAzYy1cdTAwM2Uga21hbGxvYy0xaykgdGhhdCBwaW5zIHRoZSBzbGFic1xuMjEzMjpcdCAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXHUwMDNlIGtmcmVlKCkgLVx1MDAzZSBkaXNjYXJkX3NsYWIoKVxuMjEzMzpcdCAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXG4yMTM0Olx0ICogREFHIChhY3ljbGljKS5cbjIxMzU6XHQgKi9cbjIxMzY6XHRzdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuMjEzNzpcdFx0XHRcdFx0XHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcbjIxMzg6XHR7XG4yMTM5Olx0XHRzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItXHUwMDNlb2JqZWN0cztcbjIxNDA6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpvYmpfZXh0c19jYWNoZTtcbjIxNDE6XHRcbjIxNDI6XHRcdGlmIChzeiBcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSlcbjIxNDM6XHRcdFx0cmV0dXJuIHN6O1xuMjE0NDpcdFxuMjE0NTpcdFx0aWYgKCFpc19rbWFsbG9jX25vcm1hbChzKSlcbjIxNDY6XHRcdFx0cmV0dXJuIHN6O1xuMjE0NzpcdFxuMjE0ODpcdFx0b2JqX2V4dHNfY2FjaGUgPSBrbWFsbG9jX3NsYWIoc3osIE5VTEwsIGdmcCwgX19rbWFsbG9jX3Rva2VuKDApKTtcbjIxNDk6XHRcdC8qIGNvbXBhcmUgb2JqZWN0X3NpemUsIG5vdCB0aGUgY2FjaGUgcG9pbnRlciAocGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpICovXG4yMTUwOlx0XHRpZiAob2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgXHUwMDNjPSBzLVx1MDAzZW9iamVjdF9zaXplKVxuMjE1MTpcdFx0XHRyZXR1cm4gcy1cdTAwM2VvYmplY3Rfc2l6ZSAmIzQzOyAxO1xuMjE1MjpcdFxuMjE1MzpcdFx0cmV0dXJuIHN6O1xuMjE1NDpcdH1cbjIxNTU6XHRcbjIxNTY6XHRpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4yMTU3Olx0XHRcdFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXG4yMTU4Olx0e1xuMjE1OTpcdFx0Y29uc3QgYm9vbCBhbGxvd19zcGluID0gYWxsb2NfZmxhZ3NfYWxsb3dfc3Bpbm5pbmcoYWxsb2NfZmxhZ3MpO1xuMjE2MDpcdFx0dW5zaWduZWQgaW50IG9iamVjdHMgPSBvYmpzX3Blcl9zbGFiKHMsIHNsYWIpO1xuMjE2MTpcdFx0Ym9vbCBuZXdfc2xhYiA9IGFsbG9jX2ZsYWdzIFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xuMjE2MjpcdFx0dW5zaWduZWQgbG9uZyBuZXdfZXh0cztcbjIxNjM6XHRcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XG4yMTY0Olx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcbjIxNjU6XHRcdHNpemVfdCBzejtcbjIxNjY6XHRcbjIxNjc6XHRcdGdmcCBcdTAwMjY9IH5PQkpDR1NfQ0xFQVJfTUFTSztcbjIxNjg6XHRcdC8qIFByZXZlbnQgcmVjdXJzaXZlIGV4dGVuc2lvbiB2ZWN0b3IgYWxsb2NhdGlvbiAqL1xuMjE2OTpcdFx0YWxsb2NfZmxhZ3MgfD0gU0xBQl9BTExPQ19OT19SRUNVUlNFO1xuMjE3MDpcdFx0YWxsb2NfZmxhZ3MgXHUwMDI2PSB+U0xBQl9BTExPQ19ORVdfU0xBQjtcbjIxNzE6XHRcbjIxNzI6XHRcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xuMjE3MzpcdFxuMjE3NDpcdFx0LyogVGhpcyB3aWxsIHVzZSBrbWFsbG9jX25vbG9jaygpIGlmIGFsbG9jX2ZsYWdzIHNheSBzbyAqL1xuMjE3NTpcdFx0dmVjID0ga21hbGxvY19mbGFncyhzeiwgZ2ZwIHwgX19HRlBfWkVSTywgYWxsb2NfZmxhZ3MsIHNsYWJfbmlkKHNsYWIpKTtcbjIxNzY6XHRcbjIxNzc6XHRcdGlmICghdmVjKSB7XG4yMTc4Olx0XHRcdC8qXG4yMTc5Olx0XHRcdCAqIFRyeSB0byBtYXJrIHZlY3RvcnMgd2hpY2ggZmFpbGVkIHRvIGFsbG9jYXRlLlxuMjE4MDpcdFx0XHQgKiBJZiB0aGlzIG9wZXJhdGlvbiBmYWlscywgdGhlcmUgbWF5IGJlIGEgcmFjaW5nIHByb2Nlc3NcbjIxODE6XHRcdFx0ICogdGhhdCBoYXMgYWxyZWFkeSBjb21wbGV0ZWQgdGhlIGFsbG9jYXRpb24uXG4yMTgyOlx0XHRcdCAqL1xuMjE4MzpcdFx0XHRpZiAoIW1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc2xhYikgXHUwMDI2XHUwMDI2XG4yMTg0Olx0XHRcdCAgICBzbGFiX29ial9leHRzKHNsYWIpKVxuMjE4NTpcdFx0XHRcdHJldHVybiAwO1xuMjE4NjpcdFxuMjE4NzpcdFx0XHRyZXR1cm4gLUVOT01FTTtcbjIxODg6XHRcdH1cbjIxODk6XHRcbjIxOTA6XHRcdFZNX1dBUk5fT05fT05DRSh2aXJ0X3RvX3NsYWIodmVjKSAhPSBOVUxMIFx1MDAyNlx1MDAyNlxuMjE5MTpcdFx0XHRcdHZpcnRfdG9fc2xhYih2ZWMpLVx1MDAzZXNsYWJfY2FjaGUgPT0gcyk7XG4yMTkyOlx0XG4yMTkzOlx0XHRuZXdfZXh0cyA9ICh1bnNpZ25lZCBsb25nKXZlYztcbjIxOTQ6XHQjaWZkZWYgQ09ORklHX01FTUNHXG4yMTk1Olx0XHRuZXdfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XG4yMTk2Olx0I2VuZGlmXG4yMTk3Olx0cmV0cnk6XG4yMTk4Olx0XHRvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLVx1MDAzZW9ial9leHRzKTtcbjIxOTk6XHRcdGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyhvbGRfZXh0cywgdmVjLCBvYmplY3RzKTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDI8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTcxOQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDQ1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGFuYWx5emluZyB0aGF0IGNvZGU6CgoqKkFuYWx5emluZyBNZW1vcnkgQWxsb2NhdGlvbiBQcm9maWxpbmcgYW5kIENvbnRyb2wgR3JvdXAgSW50ZWdyYXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGNvZGUgYW5kIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBwcm9maWxpbmcgbG9naWMgaXMgdGllZCBpbiwgb3IgaWYgaXQmIzM5O3MgcmVsYXRlZCB0byB0aGUgbWVtb3J5IGNvbnRyb2wgZ3JvdXAgZnVuY3Rpb25hbGl0eS4gVGhlIGltbWVkaWF0ZSBxdWVzdGlvbiBpcyB3aGVyZSB0aGVzZSBmZWF0dXJlcyBhcmUgY29uZGl0aW9uYWxseSBjb21waWxlZC4gTXkgZmlyc3QgbGluZSBvZiBhdHRhY2sgaXMgdG8gZm9jdXMgb24gdGhlIHByZXByb2Nlc3NvciBkaXJlY3RpdmVzLiBJJiMzOTttIGdvaW5nIHRvIGxvb2sgZm9yIHRob3NlIGAjaWZkZWZgIGJsb2Nrcywgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgdXNlIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2Agb3IgYENPTkZJR19NRU1DR2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoZXNlIHNvcnRzIG9mIGZlYXR1cmVzLiBBbmQgSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZXJlIHRoZSBmZWF0dXJlIGlzIGVuYWJsZWQvZGlzYWJsZWQgYnkgdGhlIHJlc3BlY3RpdmUgY29uZmlndXJhdGlvbnMuCgpMZXQmIzM5O3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGhvdyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgYmVpbmcgdXNlZC4gV2hlcmUgaXMgaXQgY2FsbGVkPyBJcyBpdCB3aXRoaW4gdGhvc2UgYCNpZmRlZmAgYmxvY2tzPyBJcyB0aGlzIHRoZSBmdW5jdGlvbiB0aGF0JiMzOTtzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQ/IFRoYXQgd2lsbCBnaXZlIG1lIHRoZSBjbGVhcmVzdCBpbmRpY2F0aW9uIG9mIGhvdyB0aGUgY29kZSBmbG93IGNoYW5nZXMgd2hlbiBwcm9maWxpbmcgb3IgbWVtb3J5IGNvbnRyb2wgZ3JvdXBzIGFyZSBlbmFibGVkLiBJJiMzOTtsbCBmb2N1cyBvbiB0aGF0IG9uZSBub3cuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQyPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0OyNpZmRlZiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MTkyPWVudW0gc2xhYl9mbGFncyB7XG4tLVxubW0vc2x1Yi5jLTIwMy1cbm1tL3NsdWIuYzoyMDQ6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmM6MjA1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR19PTlxubW0vc2x1Yi5jLTIwNi1ERUZJTkVfU1RBVElDX0tFWV9UUlVFKHNsdWJfZGVidWdfZW5hYmxlZCk7XG4tLVxubW0vc2x1Yi5jPTIwOD1ERUZJTkVfU1RBVElDX0tFWV9GQUxTRShzbHViX2RlYnVnX2VuYWJsZWQpO1xuLS1cbm1tL3NsdWIuYy0yMTEtXG5tbS9zbHViLmM6MjEyOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTIxMy1zdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xuLS1cbm1tL3NsdWIuYz0yMzM9c3RydWN0IHNsYWJfb2JqX2l0ZXIge1xuLS1cbm1tL3NsdWIuYy0yMzUtXHR2b2lkICpzdGFydDtcbm1tL3NsdWIuYzoyMzY6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vc2x1Yi5jLTIzNy1cdHVuc2lnbmVkIGxvbmcgZnJlZWxpc3RfY291bnQ7XG4tLVxubW0vc2x1Yi5jPTI0OD12b2lkICpmaXh1cF9yZWRfbGVmdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqcClcbi0tXG5tbS9zbHViLmMtMzExLVxubW0vc2x1Yi5jOjMxMjojaWZkZWYgc3lzdGVtX2hhc19mcmVlbGlzdF9hYmFcbm1tL3NsdWIuYy0zMTMtI2RlZmluZSBfX0NNUFhDSEdfRE9VQkxFXHRfX1NMQUJfRkxBR19CSVQoX1NMQUJfQ01QWENIR19ET1VCTEUpXG4tLVxubW0vc2x1Yi5jPTMyMj1zdHJ1Y3QgdHJhY2sge1xubW0vc2x1Yi5jLTMyMy1cdHVuc2lnbmVkIGxvbmcgYWRkcjtcdC8qIENhbGxlZCBmcm9tIGFkZHJlc3MgKi9cbm1tL3NsdWIuYzozMjQ6I2lmZGVmIENPTkZJR19TVEFDS0RFUE9UXG5tbS9zbHViLmMtMzI1LVx0ZGVwb3Rfc3RhY2tfaGFuZGxlX3QgaGFuZGxlO1xuLS1cbm1tL3NsdWIuYz0zMzI9ZW51bSB0cmFja19pdGVtIHsgVFJBQ0tfQUxMT0MsIFRSQUNLX0ZSRUUgfTtcbm1tL3NsdWIuYy0zMzMtXG5tbS9zbHViLmM6MzM0OiNpZmRlZiBTTEFCX1NVUFBPUlRTX1NZU0ZTXG5tbS9zbHViLmMtMzM1LXN0YXRpYyBpbnQgc3lzZnNfc2xhYl9hZGQoc3RydWN0IGttZW1fY2FjaGUgKik7XG4tLVxubW0vc2x1Yi5jPTM1MT1lbnVtIHN0YXRfaXRlbSB7XG4tLVxubW0vc2x1Yi5jLTM4MC1cbm1tL3NsdWIuYzozODE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtMzgyLXN0cnVjdCBrbWVtX2NhY2hlX3N0YXRzIHtcbi0tXG5tbS9zbHViLmM9Mzg3PXN0YXRpYyBpbmxpbmUgdm9pZCBzdGF0KGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSlcbm1tL3NsdWIuYy0zODgte1xubW0vc2x1Yi5jOjM4OTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy0zOTAtXHQvKlxuLS1cbm1tL3NsdWIuYz0zOTk9dm9pZCBzdGF0X2FkZChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2ksIGludCB2KVxubW0vc2x1Yi5jLTQwMC17XG5tbS9zbHViLmM6NDAxOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTQwMi1cdHJhd19jcHVfYWRkKHMtXHUwMDNlY3B1X3N0YXRzLVx1MDAzZXN0YXRbc2ldLCB2KTtcbi0tXG5tbS9zbHViLmM9NDQzPXN0cnVjdCBrbWVtX2NhY2hlX25vZGUge1xuLS1cbm1tL3NsdWIuYy00NDYtXHRzdHJ1Y3QgbGlzdF9oZWFkIHBhcnRpYWw7XG5tbS9zbHViLmM6NDQ3OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTQ0OC1cdGF0b21pY19sb25nX3QgbnJfc2xhYnM7XG4tLVxubW0vc2x1Yi5jPTUxNz1zdGF0aWMgaW5saW5lIGZyZWVwdHJfdCBmcmVlbGlzdF9wdHJfZW5jb2RlKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy01MjEtXG5tbS9zbHViLmM6NTIyOiNpZmRlZiBDT05GSUdfU0xBQl9GUkVFTElTVF9IQVJERU5FRFxubW0vc2x1Yi5jLTUyMy1cdGVuY29kZWQgPSAodW5zaWduZWQgbG9uZylwdHIgXiBzLVx1MDAzZXJhbmRvbSBeIHN3YWIocHRyX2FkZHIpO1xuLS1cbm1tL3NsdWIuYz01MzA9c3RhdGljIGlubGluZSB2b2lkICpmcmVlbGlzdF9wdHJfZGVjb2RlKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy01MzQtXG5tbS9zbHViLmM6NTM1OiNpZmRlZiBDT05GSUdfU0xBQl9GUkVFTElTVF9IQVJERU5FRFxubW0vc2x1Yi5jLTUzNi1cdGRlY29kZWQgPSAodm9pZCAqKShwdHIudiBeIHMtXHUwMDNlcmFuZG9tIF4gc3dhYihwdHJfYWRkcikpO1xuLS1cbm1tL3NsdWIuYz01NTQ9c3RhdGljIGlubGluZSB2b2lkIHNldF9mcmVlcG9pbnRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LCB2b2lkICpmcClcbi0tXG5tbS9zbHViLmMtNTU3LVxubW0vc2x1Yi5jOjU1ODojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcbm1tL3NsdWIuYy01NTktXHRCVUdfT04ob2JqZWN0ID09IGZwKTsgLyogbmFpdmUgZGV0ZWN0aW9uIG9mIGRvdWJsZSBmcmVlIG9yIGNvcnJ1cHRpb24gKi9cbi0tXG5tbS9zbHViLmM9NjUwPV9fdXBkYXRlX2ZyZWVsaXN0X2Zhc3Qoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyAqb2xkLFxuLS1cbm1tL3NsdWIuYy02NTIte1xubW0vc2x1Yi5jOjY1MzojaWZkZWYgc3lzdGVtX2hhc19mcmVlbGlzdF9hYmFcbm1tL3NsdWIuYy02NTQtXHRyZXR1cm4gdHJ5X2NtcHhjaGdfZnJlZWxpc3QoXHUwMDI2c2xhYi1cdTAwM2VmcmVlbGlzdF9jb3VudGVycyxcbi0tXG5tbS9zbHViLmM9Njg4PXN0YXRpYyBpbmxpbmUgYm9vbCBfX3NsYWJfdXBkYXRlX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcbi0tXG5tbS9zbHViLmMtNzA2LVxubW0vc2x1Yi5jOjcwNzojaWZkZWYgU0xVQl9ERUJVR19DTVBYQ0hHXG5tbS9zbHViLmMtNzA4LVx0cHJfaW5mbyhcJiMzNDslcyAlczogY21weGNoZyBkb3VibGUgcmVkbyBcJiMzNDssIG4sIHMtXHUwMDNlbmFtZSk7XG4tLVxubW0vc2x1Yi5jPTcxND1zdGF0aWMgaW5saW5lIGJvb2wgc2xhYl91cGRhdGVfZnJlZWxpc3Qoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy03MzMtXG5tbS9zbHViLmM6NzM0OiNpZmRlZiBTTFVCX0RFQlVHX0NNUFhDSEdcbm1tL3NsdWIuYy03MzUtXHRwcl9pbmZvKFwmIzM0OyVzICVzOiBjbXB4Y2hnIGRvdWJsZSByZWRvIFwmIzM0Oywgbiwgcy1cdTAwM2VuYW1lKTtcbi0tXG5tbS9zbHViLmM9NzYxPXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBnZXRfb3JpZ19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QpXG4tLVxubW0vc2x1Yi5jLTc3Ni1cbm1tL3NsdWIuYzo3Nzc6I2lmZGVmIENPTkZJR19TTEFCX09CSl9FWFRcbm1tL3NsdWIuYy03NzgtXG4tLVxubW0vc2x1Yi5jPTkwNT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGludCBvYmpfZXh0c19vZmZzZXRfaW5fb2JqZWN0KHN0cnVjdCBrbWVtX2NhY2hlICpzKVxuLS1cbm1tL3NsdWIuYy05MTAtXG5tbS9zbHViLmM6OTExOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTkxMi1cbi0tXG5tbS9zbHViLmM9MTAzMz1zdGF0aWMgc3RydWN0IHRyYWNrICpnZXRfdHJhY2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCxcbi0tXG5tbS9zbHViLmMtMTA0Mi1cbm1tL3NsdWIuYzoxMDQzOiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxubW0vc2x1Yi5jLTEwNDQtc3RhdGljIG5vaW5saW5lIGRlcG90X3N0YWNrX2hhbmRsZV90IHNldF90cmFja19wcmVwYXJlKGdmcF90IGdmcF9mbGFncylcbi0tXG5tbS9zbHViLmM9MTA2Mj1zdGF0aWMgdm9pZCBzZXRfdHJhY2tfdXBkYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsXG4tLVxubW0vc2x1Yi5jLTEwNjctXG5tbS9zbHViLmM6MTA2ODojaWZkZWYgQ09ORklHX1NUQUNLREVQT1Rcbm1tL3NsdWIuYy0xMDY5LVx0cC1cdTAwM2VoYW5kbGUgPSBoYW5kbGU7XG4tLVxubW0vc2x1Yi5jPTEwOTY9c3RhdGljIHZvaWQgcHJpbnRfdHJhY2soY29uc3QgY2hhciAqcywgc3RydWN0IHRyYWNrICp0LCB1bnNpZ25lZCBsb25nIHByX3RpbWUpXG4tLVxubW0vc2x1Yi5jLTExMDQtXHQgICAgICAgcywgKHZvaWQgKil0LVx1MDAzZWFkZHIsIHByX3RpbWUgLSB0LVx1MDAzZXdoZW4sIHQtXHUwMDNlY3B1LCB0LVx1MDAzZXBpZCk7XG5tbS9zbHViLmM6MTEwNTojaWZkZWYgQ09ORklHX1NUQUNLREVQT1Rcbm1tL3NsdWIuYy0xMTA2LVx0aGFuZGxlID0gUkVBRF9PTkNFKHQtXHUwMDNlaGFuZGxlKTtcbi0tXG5tbS9zbHViLmM9MTI5Nj1zdGF0aWMgdm9pZCByZXN0b3JlX2J5dGVzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICptZXNzYWdlLCB1OCBkYXRhLFxuLS1cbm1tL3NsdWIuYy0xMzAyLVxubW0vc2x1Yi5jOjEzMDM6I2lmZGVmIENPTkZJR19LTVNBTlxubW0vc2x1Yi5jLTEzMDQtI2RlZmluZSBwYWRfY2hlY2tfYXR0cmlidXRlcyBub2lubGluZSBfX25vX2ttc2FuX2NoZWNrc1xuLS1cbm1tL3NsdWIuYz0yMDQ1PXN0YXRpYyBpbmxpbmUgdm9pZCBkZWNfc2xhYnNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgaW50IG5vZGUsXG4tLVxubW0vc2x1Yi5jLTIwNjAtXG5tbS9zbHViLmM6MjA2MTojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxubW0vc2x1Yi5jLTIwNjItXG5tbS9zbHViLmM6MjA2MzojaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcbm1tL3NsdWIuYy0yMDY0LVxuLS1cbm1tL3NsdWIuYz0yMTU2PWludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjE5My1cdG5ld19leHRzID0gKHVuc2lnbmVkIGxvbmcpdmVjO1xubW0vc2x1Yi5jOjIxOTQ6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIxOTUtXHRuZXdfZXh0cyB8PSBNRU1DR19EQVRBX09CSkVYVFM7XG4tLVxubW0vc2x1Yi5jPTIyNzA9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jLTIyODktXG5tbS9zbHViLmM6MjI5MDojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtMjI5MS1cdFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xuLS1cbm1tL3NsdWIuYy0yMzA2LVxubW0vc2x1Yi5jOjIzMDc6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTIzMDgtXHRcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcbi0tXG5tbS9zbHViLmM9MjMzNT1zdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMjM0MS1cbm1tL3NsdWIuYzoyMzQyOiNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR1xubW0vc2x1Yi5jLTIzNDMtXG4tLVxubW0vc2x1Yi5jPTI0NDY9YWxsb2NfdGFnZ2luZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxuLS1cbm1tL3NsdWIuYy0yNDUzLVxubW0vc2x1Yi5jOjI0NTQ6I2lmZGVmIENPTkZJR19NRU1DR1xubW0vc2x1Yi5jLTI0NTUtXG4tLVxubW0vc2x1Yi5jPTI1NzY9c3RhdGljIGlubGluZSBib29sIG1lbWNnX3NsYWJfcG9zdF9jaGFyZ2Uodm9pZCAqcCwgZ2ZwX3QgZmxhZ3MpXG4tLVxubW0vc2x1Yi5jLTI1ODEtXG5tbS9zbHViLmM6MjU4MjojaWZkZWYgQ09ORklHX1NMVUJfUkNVX0RFQlVHXG5tbS9zbHViLmMtMjU4My1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpO1xuLS1cbm1tL3NsdWIuYz0yNjE4PWJvb2wgc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKngsIGJvb2wgaW5pdCxcbi0tXG5tbS9zbHViLmMtMjY0Ni1cbm1tL3NsdWIuYzoyNjQ3OiNpZmRlZiBDT05GSUdfU0xVQl9SQ1VfREVCVUdcbm1tL3NsdWIuYy0yNjQ4LVx0aWYgKHN0aWxsX2FjY2Vzc2libGUpIHtcbi0tXG5tbS9zbHViLmM9MzI3ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICphbGxvY19zbGFiX3BhZ2UoZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxuLS1cbm1tL3NsdWIuYy0zMzAwLVxubW0vc2x1Yi5jOjMzMDE6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vc2x1Yi5jLTMzMDItLyogUHJlLWluaXRpYWxpemUgdGhlIHJhbmRvbSBzZXF1ZW5jZSBjYWNoZSAqL1xuLS1cbm1tL3NsdWIuYz0zNTY5PXN0YXRpYyB2b2lkICphbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuLS1cbm1tL3NsdWIuYy0zNTc1LVxubW0vc2x1Yi5jOjM1NzY6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtMzU3Ny1cdGlmIChzLVx1MDAzZWZsYWdzIFx1MDAyNiBTTEFCX0NPTlNJU1RFTkNZX0NIRUNLUykge1xuLS1cbm1tL3NsdWIuYz0zNjAzPXN0YXRpYyBpbmxpbmUgdm9pZCAqbmV4dF9zbGFiX29iaihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtMzYwNS17XG5tbS9zbHViLmM6MzYwNjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXG5tbS9zbHViLmMtMzYwNy1cdGlmIChpdGVyLVx1MDAzZXJhbmRvbSkge1xuLS1cbm1tL3NsdWIuYz0zNjUzPXN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2l0ZXIoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxuLS1cbm1tL3NsdWIuYy0zNjU5LVxubW0vc2x1Yi5jOjM2NjA6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vc2x1Yi5jLTM2NjEtXHRpdGVyLVx1MDAzZXJhbmRvbSA9IChzbGFiLVx1MDAzZW9iamVjdHMgXHUwMDNlPSAyIFx1MDAyNlx1MDAyNiBzLVx1MDAzZXJhbmRvbV9zZXEpO1xuLS1cbm1tL3NsdWIuYz0zODg1PXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zODg3LXtcbm1tL3NsdWIuYzozODg4OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTM4ODktXHRzdHJ1Y3Qgem9uZWxpc3QgKnpvbmVsaXN0O1xuLS1cbm1tL3NsdWIuYz00MTY2PXN0YXRpYyBpbnQgc2x1Yl9jcHVfZGVhZCh1bnNpZ25lZCBpbnQgY3B1KVxuLS1cbm1tL3NsdWIuYy00MTc4LVxubW0vc2x1Yi5jOjQxNzk6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNDE4MC1zdGF0aWMgaW50IGNvdW50X2ZyZWUoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTQyNTA9c3RhdGljIHVuc2lnbmVkIGxvbmcgY291bnRfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZV9ub2RlICpuLFxuLS1cbm1tL3NsdWIuYy00MjY0LVxubW0vc2x1Yi5jOjQyNjU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNDI2Ni0jZGVmaW5lIE1BWF9QQVJUSUFMX1RPX1NDQU4gMTAwMDBcbi0tXG5tbS9zbHViLmM9NDUyMz1zdGF0aWMgdm9pZCAqX19zbGFiX2FsbG9jX25vZGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcGZsYWdzLCBpbnQgbm9kZSxcbi0tXG5tbS9zbHViLmMtNDUyNy1cbm1tL3NsdWIuYzo0NTI4OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTQ1MjktXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZzdHJpY3RfbnVtYSkgXHUwMDI2XHUwMDI2XG4tLVxubW0vc2x1Yi5jPTQ3NTA9dm9pZCAqYWxsb2NfZnJvbV9wY3Moc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCBpbnQgbm9kZSlcbi0tXG5tbS9zbHViLmMtNDc1NS1cbm1tL3NsdWIuYzo0NzU2OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTQ3NTctXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZzdHJpY3RfbnVtYSkgXHUwMDI2XHUwMDI2XG4tLVxubW0vc2x1Yi5jPTYxNDg9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGNhbl9mcmVlX3RvX3BjcyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtNjE1Ny1cbm1tL3NsdWIuYzo2MTU4OiNpZmRlZiBDT05GSUdfSEFWRV9NRU1PUllMRVNTX05PREVTXG5tbS9zbHViLmMtNjE1OS1cdC8qXG4tLVxubW0vc2x1Yi5jPTYzOTM9dm9pZCBzbGFiX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpvYmplY3QsXG4tLVxubW0vc2x1Yi5jLTY0MDgtXG5tbS9zbHViLmM6NjQwOTojaWZkZWYgQ09ORklHX01FTUNHXG5tbS9zbHViLmMtNjQxMC0vKiBEbyBub3QgaW5saW5lIHRoZSByYXJlIG1lbWNnIGNoYXJnaW5nIGZhaWxlZCBwYXRoIGludG8gdGhlIGFsbG9jYXRpb24gcGF0aCAqL1xuLS1cbm1tL3NsdWIuYz02NDI0PXZvaWQgc2xhYl9mcmVlX2J1bGsoc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICpoZWFkLFxuLS1cbm1tL3NsdWIuYy02NDM4LVxubW0vc2x1Yi5jOjY0Mzk6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xubW0vc2x1Yi5jLTY0NDAtc3RhdGljIHZvaWQgc2xhYl9mcmVlX2FmdGVyX3JjdV9kZWJ1ZyhzdHJ1Y3QgcmN1X2hlYWQgKnJjdV9oZWFkKVxuLS1cbm1tL3NsdWIuYy02NDY3LVxubW0vc2x1Yi5jOjY0Njg6I2lmZGVmIENPTkZJR19LQVNBTl9HRU5FUklDXG5tbS9zbHViLmMtNjQ2OS12b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXG4tLVxubW0vc2x1Yi5jPTY1MzA9c3RhdGljIGlubGluZSBzaXplX3Qgc2xhYl9rc2l6ZShzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtNjUzMy1cbm1tL3NsdWIuYzo2NTM0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTY1MzUtXHQvKlxuLS1cbm1tL3NsdWIuYz02NTU5PXN0YXRpYyBzaXplX3QgX19rc2l6ZShjb25zdCB2b2lkICpvYmplY3QpXG4tLVxubW0vc2x1Yi5jLTY1NzYtXG5tbS9zbHViLmM6NjU3NzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy02NTc4LVx0c2tpcF9vcmlnX3NpemVfY2hlY2soc2xhYi1cdTAwM2VzbGFiX2NhY2hlLCBvYmplY3QpO1xuLS1cbm1tL3NsdWIuYz03MTc3PV9fcmVmaWxsX29iamVjdHNfbm9kZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqKnAsIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IG1pbixcbi0tXG5tbS9zbHViLmMtNzI1MC1cbm1tL3NsdWIuYzo3MjUxOiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTcyNTItc3RhdGljIHVuc2lnbmVkIGludFxuLS1cbm1tL3NsdWIuYz03NTk0PWluaXRfa21lbV9jYWNoZV9ub2RlKHN0cnVjdCBrbWVtX2NhY2hlX25vZGUgKm4pXG4tLVxubW0vc2x1Yi5jLTc1OTgtXHRJTklUX0xJU1RfSEVBRChcdTAwMjZuLVx1MDAzZXBhcnRpYWwpO1xubW0vc2x1Yi5jOjc1OTk6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzYwMC1cdGF0b21pY19sb25nX3NldChcdTAwMjZuLVx1MDAzZW5yX3NsYWJzLCAwKTtcbi0tXG5tbS9zbHViLmMtNzYwNS1cbm1tL3NsdWIuYzo3NjA2OiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTc2MDctc3RhdGljIGlubGluZSBpbnQgYWxsb2Nfa21lbV9jYWNoZV9zdGF0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcbi0tXG5tbS9zbHViLmM9NzY3NT1zdGF0aWMgdm9pZCBlYXJseV9rbWVtX2NhY2hlX25vZGVfYWxsb2MoaW50IG5vZGUpXG4tLVxubW0vc2x1Yi5jLTc2OTgtXG5tbS9zbHViLmM6NzY5OTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy03NzAwLVx0aW5pdF9vYmplY3Qoa21lbV9jYWNoZV9ub2RlLCBuLCBTTFVCX1JFRF9BQ1RJVkUpO1xuLS1cbm1tL3NsdWIuYz03NzM3PXZvaWQgX19rbWVtX2NhY2hlX3JlbGVhc2Uoc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTc3NDAtXHRwY3NfZGVzdHJveShzKTtcbm1tL3NsdWIuYzo3NzQxOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTc3NDItXHRmcmVlX3BlcmNwdShzLVx1MDAzZWNwdV9zdGF0cyk7XG4tLVxubW0vc2x1Yi5jPTc4Mzc9c3RhdGljIGludCBjYWxjdWxhdGVfc2l6ZXMoc3RydWN0IGttZW1fY2FjaGVfYXJncyAqYXJncywgc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTc4NTAtXG5tbS9zbHViLmM6Nzg1MTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy03ODUyLVx0Lypcbi0tXG5tbS9zbHViLmMtNzkxMy1cbm1tL3NsdWIuYzo3OTE0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTc5MTUtXHRpZiAoZmxhZ3MgXHUwMDI2IFNMQUJfU1RPUkVfVVNFUikge1xuLS1cbm1tL3NsdWIuYy03OTI4LVx0a2FzYW5fY2FjaGVfY3JlYXRlKHMsIFx1MDAyNnNpemUsIFx1MDAyNnMtXHUwMDNlZmxhZ3MpO1xubW0vc2x1Yi5jOjc5Mjk6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtNzkzMC1cdGlmIChmbGFncyBcdTAwMjYgU0xBQl9SRURfWk9ORSkge1xuLS1cbm1tL3NsdWIuYz03OTkzPXN0YXRpYyB2b2lkIGxpc3Rfc2xhYl9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy03OTk0LXtcbm1tL3NsdWIuYzo3OTk1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTc5OTYtXHR2b2lkICphZGRyID0gc2xhYl9hZGRyZXNzKHNsYWIpO1xuLS1cbm1tL3NsdWIuYz04MDYwPWludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXG4tLVxubW0vc2x1Yi5jLTgwODYtXG5tbS9zbHViLmM6ODA4NzojaWZkZWYgQ09ORklHX1BSSU5US1xubW0vc2x1Yi5jLTgwODgtdm9pZCBfX2ttZW1fb2JqX2luZm8oc3RydWN0IGttZW1fb2JqX2luZm8gKmtwcCwgdm9pZCAqb2JqZWN0LCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtODEwMi1cdG9ianAwID0ga2FzYW5fcmVzZXRfdGFnKG9iamVjdCk7XG5tbS9zbHViLmM6ODEwMzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy04MTA0LVx0b2JqcCA9IHJlc3RvcmVfcmVkX2xlZnQocywgb2JqcDApO1xuLS1cbm1tL3NsdWIuYy04MTE1LVx0XHRyZXR1cm47XG5tbS9zbHViLmM6ODExNjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy04MTE3LVx0b2JqcCA9IGZpeHVwX3JlZF9sZWZ0KHMsIG9ianApO1xuLS1cbm1tL3NsdWIuYy04MTE5LVx0a3BwLVx1MDAzZWtwX3JldCA9ICh2b2lkICopdHJhY2twLVx1MDAzZWFkZHI7XG5tbS9zbHViLmM6ODEyMDojaWZkZWYgQ09ORklHX1NUQUNLREVQT1Rcbm1tL3NsdWIuYy04MTIxLVx0e1xuLS1cbm1tL3NsdWIuYz04MTkzPWNvcmVfcGFyYW0oc2x1Yl9taW5fb2JqZWN0cywgc2x1Yl9taW5fb2JqZWN0cywgdWludCwgMCk7XG5tbS9zbHViLmMtODE5NC1cbm1tL3NsdWIuYzo4MTk1OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTgxOTYtc3RhdGljIGludCBfX2luaXQgc2V0dXBfc2xhYl9zdHJpY3RfbnVtYShjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxuLS1cbm1tL3NsdWIuYz04MjEyPV9fY29yZV9wYXJhbV9jYihzbGFiX3N0cmljdF9udW1hLCBcdTAwMjZwYXJhbV9vcHNfc2xhYl9zdHJpY3RfbnVtYSwgTlVMTCwgMCk7XG4tLVxubW0vc2x1Yi5jLTgyMTUtXG5tbS9zbHViLmM6ODIxNjojaWZkZWYgQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZXG5tbS9zbHViLmMtODIxNy0vKlxuLS1cbm1tL3NsdWIuYz04NDYxPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqIF9faW5pdCBib290c3RyYXAoc3RydWN0IGttZW1fY2FjaGUgKnN0YXRpY19jYWNoZSlcbi0tXG5tbS9zbHViLmMtODQ3NC1cbm1tL3NsdWIuYzo4NDc1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTg0NzYtXHRcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXHUwMDI2bi1cdTAwM2VmdWxsLCBzbGFiX2xpc3QpXG4tLVxubW0vc2x1Yi5jPTg2MTM9dm9pZCBfX2luaXQga21lbV9jYWNoZV9pbml0X2xhdGUodm9pZClcbi0tXG5tbS9zbHViLmMtODYxNy1cdFdBUk5fT04oIWZsdXNod3EpO1xubW0vc2x1Yi5jOjg2MTg6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxubW0vc2x1Yi5jLTg2MTktXHRwcmFuZG9tX2luaXRfb25jZShcdTAwMjZzbGFiX3JuZF9zdGF0ZSk7XG4tLVxubW0vc2x1Yi5jPTg2MjM9aW50IGRvX2ttZW1fY2FjaGVfY3JlYXRlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjb25zdCBjaGFyICpuYW1lLFxuLS1cbm1tL3NsdWIuYy04NjMyLVx0cy1cdTAwM2VmbGFncyA9IGttZW1fY2FjaGVfZmxhZ3MoZmxhZ3MsIHMtXHUwMDNlbmFtZSk7XG5tbS9zbHViLmM6ODYzMzojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcbm1tL3NsdWIuYy04NjM0LVx0cy1cdTAwM2VyYW5kb20gPSBnZXRfcmFuZG9tX2xvbmcoKTtcbi0tXG5tbS9zbHViLmMtODYzNy1cdHMtXHUwMDNlY3RvciA9IGFyZ3MtXHUwMDNlY3Rvcjtcbm1tL3NsdWIuYzo4NjM4OiNpZmRlZiBDT05GSUdfSEFSREVORURfVVNFUkNPUFlcbm1tL3NsdWIuYy04NjM5LVx0cy1cdTAwM2V1c2Vyb2Zmc2V0ID0gYXJncy1cdTAwM2V1c2Vyb2Zmc2V0O1xuLS1cbm1tL3NsdWIuYy04NjU3LVxubW0vc2x1Yi5jOjg2NTg6I2lmZGVmIHN5c3RlbV9oYXNfZnJlZWxpc3RfYWJhXG5tbS9zbHViLmMtODY1OS1cdGlmIChzeXN0ZW1faGFzX2ZyZWVsaXN0X2FiYSgpIFx1MDAyNlx1MDAyNiAhKHMtXHUwMDNlZmxhZ3MgXHUwMDI2IFNMQUJfTk9fQ01QWENIRykpIHtcbi0tXG5tbS9zbHViLmMtODY3Ny1cbm1tL3NsdWIuYzo4Njc4OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTg2NzktXHRzLVx1MDAzZXJlbW90ZV9ub2RlX2RlZnJhZ19yYXRpbyA9IDEwMDA7XG4tLVxubW0vc2x1Yi5jLTg2OTAtXG5tbS9zbHViLmM6ODY5MTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcbm1tL3NsdWIuYy04NjkyLVx0aWYgKCFhbGxvY19rbWVtX2NhY2hlX3N0YXRzKHMpKVxuLS1cbm1tL3NsdWIuYy04NzIxLVxubW0vc2x1Yi5jOjg3MjI6I2lmZGVmIFNMQUJfU1VQUE9SVFNfU1lTRlNcbm1tL3NsdWIuYy04NzIzLXN0YXRpYyBpbnQgY291bnRfaW51c2Uoc3RydWN0IHNsYWIgKnNsYWIpXG4tLVxubW0vc2x1Yi5jPTg3Mjg9c3RhdGljIGludCBjb3VudF90b3RhbChzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmMtODczMy1cbm1tL3NsdWIuYzo4NzM0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTg3MzUtc3RhdGljIHZvaWQgdmFsaWRhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jPTg4MTY9RVhQT1JUX1NZTUJPTCh2YWxpZGF0ZV9zbGFiX2NhY2hlKTtcbm1tL3NsdWIuYy04ODE3LVxubW0vc2x1Yi5jOjg4MTg6I2lmZGVmIENPTkZJR19ERUJVR19GU1xubW0vc2x1Yi5jLTg4MTktLypcbi0tXG5tbS9zbHViLmM9ODg3ND1zdGF0aWMgaW50IGFkZF9sb2NhdGlvbihzdHJ1Y3QgbG9jX3RyYWNrICp0LCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbi0tXG5tbS9zbHViLmMtODg4NC1cbm1tL3NsdWIuYzo4ODg1OiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxubW0vc2x1Yi5jLTg4ODYtXHRoYW5kbGUgPSBSRUFEX09OQ0UodHJhY2stXHUwMDNlaGFuZGxlKTtcbi0tXG5tbS9zbHViLmM9ODk2Nj1zdGF0aWMgdm9pZCBwcm9jZXNzX3NsYWIoc3RydWN0IGxvY190cmFjayAqdCwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTg5ODQtXG5tbS9zbHViLmM6ODk4NTojaWZkZWYgU0xBQl9TVVBQT1JUU19TWVNGU1xubW0vc2x1Yi5jLTg5ODYtZW51bSBzbGFiX3N0YXRfdHlwZSB7XG4tLVxubW0vc2x1Yi5jPTkwMDA9c3RhdGljIHNzaXplX3Qgc2hvd19zbGFiX29iamVjdHMoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTkwMjMtXG5tbS9zbHViLmM6OTAyNDojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcbm1tL3NsdWIuYy05MDI1LVx0aWYgKGZsYWdzIFx1MDAyNiBTT19BTEwpIHtcbi0tXG5tbS9zbHViLmMtOTA1Ny1cdGxlbiAmIzQzOz0gc3lzZnNfZW1pdF9hdChidWYsIGxlbiwgXCYjMzQ7JWx1XCYjMzQ7LCB0b3RhbCk7XG5tbS9zbHViLmM6OTA1ODojaWZkZWYgQ09ORklHX05VTUFcbm1tL3NsdWIuYy05MDU5LVx0Zm9yIChub2RlID0gMDsgbm9kZSBcdTAwM2MgbnJfbm9kZV9pZHM7IG5vZGUmIzQzOyYjNDM7KSB7XG4tLVxubW0vc2x1Yi5jPTkyMTE9U0xBQl9BVFRSX1JPKGh3Y2FjaGVfYWxpZ24pO1xubW0vc2x1Yi5jLTkyMTItXG5tbS9zbHViLmM6OTIxMzojaWZkZWYgQ09ORklHX1pPTkVfRE1BXG5tbS9zbHViLmMtOTIxNC1zdGF0aWMgc3NpemVfdCBjYWNoZV9kbWFfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVxuLS1cbm1tL3NsdWIuYz05MjE4PVNMQUJfQVRUUl9STyhjYWNoZV9kbWEpO1xuLS1cbm1tL3NsdWIuYy05MjIwLVxubW0vc2x1Yi5jOjkyMjE6I2lmZGVmIENPTkZJR19IQVJERU5FRF9VU0VSQ09QWVxubW0vc2x1Yi5jLTkyMjItc3RhdGljIHNzaXplX3QgdXNlcnNpemVfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVxuLS1cbm1tL3NsdWIuYz05MjMzPVNMQUJfQVRUUl9STyhkZXN0cm95X2J5X3JjdSk7XG5tbS9zbHViLmMtOTIzNC1cbm1tL3NsdWIuYzo5MjM1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTkyMzYtc3RhdGljIHNzaXplX3Qgc2xhYnNfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVxuLS1cbm1tL3NsdWIuYz05MzA0PVNMQUJfQVRUUih2YWxpZGF0ZSk7XG4tLVxubW0vc2x1Yi5jLTkzMDctXG5tbS9zbHViLmM6OTMwODojaWZkZWYgQ09ORklHX0ZBSUxTTEFCXG5tbS9zbHViLmMtOTMwOS1zdGF0aWMgc3NpemVfdCBmYWlsc2xhYl9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpXG4tLVxubW0vc2x1Yi5jPTkzNDQ9U0xBQl9BVFRSKHNocmluayk7XG5tbS9zbHViLmMtOTM0NS1cbm1tL3NsdWIuYzo5MzQ2OiNpZmRlZiBDT05GSUdfTlVNQVxubW0vc2x1Yi5jLTkzNDctc3RhdGljIHNzaXplX3QgcmVtb3RlX25vZGVfZGVmcmFnX3JhdGlvX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1Zilcbi0tXG5tbS9zbHViLmM9OTM2OD1TTEFCX0FUVFIocmVtb3RlX25vZGVfZGVmcmFnX3JhdGlvKTtcbi0tXG5tbS9zbHViLmMtOTM3MC1cbm1tL3NsdWIuYzo5MzcxOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xubW0vc2x1Yi5jLTkzNzItc3RhdGljIGludCBzaG93X3N0YXQoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZiwgZW51bSBzdGF0X2l0ZW0gc2kpXG4tLVxubW0vc2x1Yi5jLTkzOTAtXG5tbS9zbHViLmM6OTM5MTojaWZkZWYgQ09ORklHX1NNUFxubW0vc2x1Yi5jLTkzOTItXHRmb3JfZWFjaF9vbmxpbmVfY3B1KGNwdSkge1xuLS1cbm1tL3NsdWIuYz05NDUyPVNUQVRfQVRUUihTSEVBRl9SRVRVUk5fU0xPVywgc2hlYWZfcmV0dXJuX3Nsb3cpO1xuLS1cbm1tL3NsdWIuYy05NDU0LVxubW0vc2x1Yi5jOjk0NTU6I2lmZGVmIENPTkZJR19LRkVOQ0Vcbm1tL3NsdWIuYy05NDU2LXN0YXRpYyBzc2l6ZV90IHNraXBfa2ZlbmNlX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1Zilcbi0tXG5tbS9zbHViLmM9OTQ3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0ge1xuLS1cbm1tL3NsdWIuYy05NDk2LVx0XHUwMDI2c2xhYnNfY3B1X3BhcnRpYWxfYXR0ci5hdHRyLFxubW0vc2x1Yi5jOjk0OTc6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXG5tbS9zbHViLmMtOTQ5OC1cdFx1MDAyNnRvdGFsX29iamVjdHNfYXR0ci5hdHRyLFxuLS1cbm1tL3NsdWIuYy05NTA3LSNlbmRpZlxubW0vc2x1Yi5jOjk1MDg6I2lmZGVmIENPTkZJR19aT05FX0RNQVxubW0vc2x1Yi5jLTk1MDktXHRcdTAwMjZjYWNoZV9kbWFfYXR0ci5hdHRyLFxubW0vc2x1Yi5jLTk1MTAtI2VuZGlmXG5tbS9zbHViLmM6OTUxMTojaWZkZWYgQ09ORklHX05VTUFcbm1tL3NsdWIuYy05NTEyLVx0XHUwMDI2cmVtb3RlX25vZGVfZGVmcmFnX3JhdGlvX2F0dHIuYXR0cixcbm1tL3NsdWIuYy05NTEzLSNlbmRpZlxubW0vc2x1Yi5jOjk1MTQ6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXG5tbS9zbHViLmMtOTUxNS1cdFx1MDAyNmFsbG9jX2Zhc3RwYXRoX2F0dHIuYXR0cixcbi0tXG5tbS9zbHViLmMtOTU0MS0jZW5kaWZcbm1tL3NsdWIuYzo5NTQyOiNpZmRlZiBDT05GSUdfRkFJTFNMQUJcbm1tL3NsdWIuYy05NTQzLVx0XHUwMDI2ZmFpbHNsYWJfYXR0ci5hdHRyLFxubW0vc2x1Yi5jLTk1NDQtI2VuZGlmXG5tbS9zbHViLmM6OTU0NTojaWZkZWYgQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZXG5tbS9zbHViLmMtOTU0Ni1cdFx1MDAyNnVzZXJzaXplX2F0dHIuYXR0cixcbm1tL3NsdWIuYy05NTQ3LSNlbmRpZlxubW0vc2x1Yi5jOjk1NDg6I2lmZGVmIENPTkZJR19LRkVOQ0Vcbm1tL3NsdWIuYy05NTQ5LVx0XHUwMDI2c2tpcF9rZmVuY2VfYXR0ci5hdHRyLFxuLS1cbm1tL3NsdWIuYz05NzkzPXN0YXRpYyBpbnQgc2xhYl9kZWJ1Z2ZzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXG4tLVxubW0vc2x1Yi5jLTk4MzQtXG5tbS9zbHViLmM6OTgzNTojaWZkZWYgQ09ORklHX1NUQUNLREVQT1Rcbm1tL3NsdWIuYy05ODM2LVx0XHR7XG4tLVxubW0vc2x1Yi5jPTk5OTg9X19pbml0Y2FsbChzbGFiX2RlYnVnZnNfaW5pdCk7XG4tLVxubW0vc2x1Yi5jLTEwMDAyLSAqL1xubW0vc2x1Yi5jOjEwMDAzOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xubW0vc2x1Yi5jLTEwMDA0LXZvaWQgZ2V0X3NsYWJpbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYmluZm8gKnNpbmZvKVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMzo0MjwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxODIyNgoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDU0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgaG93IEkmIzM5O2QgYXBwcm9hY2ggZGlzc2VjdGluZyB0aGlzIHBpZWNlIG9mIGNvZGUuCgoqKkludmVzdGlnYXRpbmcgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGluIGBtbS9zbHViLmNgKioKCkFscmlnaHQsIHRoZSBjb2RlIEkmIzM5O20gZm9jdXNpbmcgb24gaXMgaW5zaWRlIGBtbS9zbHViLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgZnVuY3Rpb25zLiBUaW1lIHRvIG5hdmlnYXRlIHRvIGl0cyBkZWZpbml0aW9uLiBJJiMzOTt2ZSBnb3QgbXkgdHJ1c3R5IGVkaXRvciBvcGVuLCBhbmQgSSYjMzk7bSBoZWFkaW5nIHN0cmFpZ2h0IHRvIGxpbmUgMjE1Ni4gUmlnaHQsIGZvdW5kIGl0LiBOb3csIGdpdmVuIHRoZSBudWFuY2VzIG9mIGtlcm5lbCBjb2RlLCBteSBuZXh0IG1vdmUgaXMgY3J1Y2lhbDogSSBuZWVkIHRvIGV4YW1pbmUgdGhlIGNvbmRpdGlvbmFsIGNvbXBpbGF0aW9uIGRpcmVjdGl2ZXMsIHRoZSBgI2lmZGVmYCBibG9ja3MsIHRoYXQgc3Vycm91bmQgdGhpcyBmdW5jdGlvbi4gVGhpcyB3aWxsIHRlbGwgbWUgKndoZW4qIHRoaXMgZnVuY3Rpb24gaXMgYWN0dWFsbHkgY29tcGlsZWQgaW50byB0aGUga2VybmVsLiBJdOKAmXMgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgYW5kIHRoZSBzY2VuYXJpb3MgaW4gd2hpY2ggdGhpcyBmdW5jdGlvbiBpcyBhY3RpdmUuIFRoaXMgd2lsbCBoZWxwIGNsYXJpZnkgdGhlIGZ1bmN0aW9uJiMzOTtzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZSBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGl0IGNhbiBoYXZlIG9uIHN5c3RlbSBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyMDUwOlx0ICogVGhlIGFsbG9jYXRlZCBvYmpjZyBwb2ludGVycyBhcnJheSBvciBzaGVhZiBpcyBub3QgYWNjb3VudGVkIGRpcmVjdGx5LlxuMjA1MTpcdCAqIE1vcmVvdmVyLCBpdCBzaG91bGQgbm90IGNvbWUgZnJvbSBETUEgYnVmZmVyIGFuZCBpcyBub3QgcmVhZGlseVxuMjA1MjpcdCAqIHJlY2xhaW1hYmxlLiBOb2RlIHJlc3RyaWN0aW9uIGZvciB0aGUgcGFyZW50IGFsbG9jYXRpb24gYWxzbyBzaG91bGRcbjIwNTM6XHQgKiBub3QgYXBwbHkgdG8gdGhlIHNsYWImIzM5O3MgaW50ZXJuYWwgb2JqZWN0cywgYXMgd2VsbCBhcyBfX0dGUF9DT01QIHVzZWRcbjIwNTQ6XHQgKiBmb3IgbmV3IHNsYWIgYWxsb2NhdGlvbnMuXG4yMDU1Olx0ICogU28gdGhvc2UgR0ZQIGJpdHMgc2hvdWxkIGJlIG1hc2tlZCBvZmYuXG4yMDU2Olx0ICovXG4yMDU3Olx0I2RlZmluZSBPQkpDR1NfQ0xFQVJfTUFTS1x0KF9fR0ZQX0RNQSB8IF9fR0ZQX1JFQ0xBSU1BQkxFIHwgXFxcbjIwNTg6XHRcdFx0XHRcdF9fR0ZQX0FDQ09VTlQgfCBfX0dGUF9OT0ZBSUwgfCBcXFxuMjA1OTpcdFx0XHRcdFx0X19HRlBfVEhJU05PREUgfCBfX0dGUF9DT01QKVxuMjA2MDpcdFxuMjA2MTpcdCNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXG4yMDYyOlx0XG4yMDYzOlx0I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXG4yMDY0Olx0XG4yMDY1Olx0c3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKVxuMjA2NjpcdHtcbjIwNjc6XHRcdHN0cnVjdCBzbGFiICpvYmpfc2xhYjtcbjIwNjg6XHRcdHVuc2lnbmVkIGxvbmcgc2xhYl9leHRzO1xuMjA2OTpcdFxuMjA3MDpcdFx0b2JqX3NsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcbjIwNzE6XHRcdHNsYWJfZXh0cyA9IHNsYWJfb2JqX2V4dHMob2JqX3NsYWIpO1xuMjA3MjpcdFx0aWYgKHNsYWJfZXh0cykge1xuMjA3MzpcdFx0XHRnZXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xuMjA3NDpcdFx0XHR1bnNpZ25lZCBpbnQgb2ZmcyA9IG9ial90b19pbmRleChvYmpfc2xhYi1cdTAwM2VzbGFiX2NhY2hlLFxuMjA3NTpcdFx0XHRcdFx0XHRcdCBvYmpfc2xhYiwgb2JqKTtcbjIwNzY6XHRcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQgPSBzbGFiX29ial9leHQob2JqX3NsYWIsXG4yMDc3Olx0XHRcdFx0XHRcdFx0ICAgICAgIHNsYWJfZXh0cywgb2Zmcyk7XG4yMDc4Olx0XG4yMDc5Olx0XHRcdGlmICh1bmxpa2VseShpc19jb2RldGFnX2VtcHR5KFx1MDAyNmV4dC1cdTAwM2VyZWYpKSkge1xuMjA4MDpcdFx0XHRcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XG4yMDgxOlx0XHRcdFx0cmV0dXJuO1xuMjA4MjpcdFx0XHR9XG4yMDgzOlx0XG4yMDg0Olx0XHRcdC8qIGNvZGV0YWcgc2hvdWxkIGJlIE5VTEwgaGVyZSAqL1xuMjA4NTpcdFx0XHRXQVJOX09OKGV4dC1cdTAwM2VyZWYuY3QpO1xuMjA4NjpcdFx0XHRzZXRfY29kZXRhZ19lbXB0eShcdTAwMjZleHQtXHUwMDNlcmVmKTtcbjIwODc6XHRcdFx0cHV0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcbjIwODg6XHRcdH1cbjIwODk6XHR9XG4yMDkwOlx0XG4yMDkxOlx0c3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpXG4yMDkyOlx0e1xuMjA5MzpcdFx0cmV0dXJuIGNtcHhjaGcoXHUwMDI2c2xhYi1cdTAwM2VvYmpfZXh0cywgMCwgT0JKRVhUU19BTExPQ19GQUlMKSA9PSAwO1xuMjA5NDpcdH1cbjIwOTU6XHRcbjIwOTY6XHRzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXG4yMDk3Olx0XHRcdFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKVxuMjA5ODpcdHtcbjIwOTk6XHRcdC8qXG4yMTAwOlx0XHQgKiBJZiB2ZWN0b3IgcHJldmlvdXNseSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlbiB3ZSBoYXZlIGxpdmVcbjIxMDE6XHRcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcbjIxMDI6XHRcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cbjIxMDM6XHRcdCAqL1xuMjEwNDpcdFx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xuMjEwNTpcdFx0XHR1bnNpZ25lZCBpbnQgaTtcbjIxMDY6XHRcbjIxMDc6XHRcdFx0Zm9yIChpID0gMDsgaSBcdTAwM2Mgb2JqZWN0czsgaSYjNDM7JiM0MzspXG4yMTA4Olx0XHRcdFx0c2V0X2NvZGV0YWdfZW1wdHkoXHUwMDI2dmVjW2ldLnJlZik7XG4yMTA5Olx0XHR9XG4yMTEwOlx0fVxuMjExMTpcdFxuMjExMjpcdCNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG4yMTEzOlx0XG4yMTE0Olx0c3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxuMjExNTpcdHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiBmYWxzZTsgfVxuMjExNjpcdHN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcbjIxMTc6XHRcdFx0XHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XG4yMTE4Olx0XG4yMTE5Olx0I2VuZGlmIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXG4yMTIwOlx0XG4yMTIxOlx0c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcbjIxMjI6XHR7XG4yMTIzOlx0XHRzbGFiLVx1MDAzZW9ial9leHRzID0gMDtcbjIxMjQ6XHR9XG4yMTI1Olx0XG4yMTI2Olx0LypcbjIxMjc6XHQgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuXG4yMTI4Olx0ICpcbjIxMjk6XHQgKiBUaGUgYXJyYXkgaXMgaXRzZWxmIGttYWxsb2MoKSYjMzk7ZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxuMjEzMDpcdCAqIGttYWxsb2MgY2FjaGUgdGhhbiBAcywgdGhlIFwmIzM0O3NsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5XCYjMzQ7IHJlbGF0aW9uIGNvdWxkXG4yMTMxOlx0ICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFx1MDAzYy1cdTAwM2Uga21hbGxvYy0xaykgdGhhdCBwaW5zIHRoZSBzbGFic1xuMjEzMjpcdCAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXHUwMDNlIGtmcmVlKCkgLVx1MDAzZSBkaXNjYXJkX3NsYWIoKVxuMjEzMzpcdCAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXG4yMTM0Olx0ICogREFHIChhY3ljbGljKS5cbjIxMzU6XHQgKi9cbjIxMzY6XHRzdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuMjEzNzpcdFx0XHRcdFx0XHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcbjIxMzg6XHR7XG4yMTM5Olx0XHRzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItXHUwMDNlb2JqZWN0cztcbjIxNDA6XHRcdHN0cnVjdCBrbWVtX2NhY2hlICpvYmpfZXh0c19jYWNoZTtcbjIxNDE6XHRcbjIxNDI6XHRcdGlmIChzeiBcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSlcbjIxNDM6XHRcdFx0cmV0dXJuIHN6O1xuMjE0NDpcdFxuMjE0NTpcdFx0aWYgKCFpc19rbWFsbG9jX25vcm1hbChzKSlcbjIxNDY6XHRcdFx0cmV0dXJuIHN6O1xuMjE0NzpcdFxuMjE0ODpcdFx0b2JqX2V4dHNfY2FjaGUgPSBrbWFsbG9jX3NsYWIoc3osIE5VTEwsIGdmcCwgX19rbWFsbG9jX3Rva2VuKDApKTtcbjIxNDk6XHRcdC8qIGNvbXBhcmUgb2JqZWN0X3NpemUsIG5vdCB0aGUgY2FjaGUgcG9pbnRlciAocGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwMTc1CgkJCQkJCQlvdXRwdXQ6IDI3CgkJCQkJCQl0aG91Z2h0czogMzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkludmVzdGlnYXRpbmcgdGhlIEFjdGl2YXRpb24gb2YgQ09ORklHX1NMQUJfT0JKX0VYVCoqCgpBbHJpZ2h0LCBJIHNlZSB0aGUgY29kZSBJJiMzOTttIGRlYWxpbmcgd2l0aCBpcyB1bmRlciBgQ09ORklHX1NMQUJfT0JKX0VYVGAuIE15IGltbWVkaWF0ZSB0aG91Z2h0IGlzLCAmIzM0O09rYXksIHRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCB3aGF0IGFjdHVhbGx5ICplbmFibGVzKiB0aGF0IHRoaW5nPyYjMzQ7IEkgbmVlZCB0byB0cmFjZSBiYWNrIGZyb20gdGhhdCBkZWZpbml0aW9uLiBJJiMzOTttIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzdGFydCB3aXRoIHRoZSBtb3N0IHJlbGV2YW50IG9uZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMsIHNlZSB3aGF0IHRyaWdnZXJzIHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGZsYWcuIFdoYXQgYXJlIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhpcyBlbmFibGVkPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcz8gV2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/IFRoaXMgcmVxdWlyZXMgYSBmb2N1c2VkIGh1bnQgZm9yIHRoZSBkZXBlbmRlbmNpZXMgdGhhdCBnb3Zlcm4gaXRzIGFjdGl2YXRpb24uIFRpbWUgdG8gc3RhcnQgZGlnZ2luZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFNMQUJfT0JKX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTAzMz1jb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXG4tLVxuaW5pdC9LY29uZmlnLTEwNDAtXG5pbml0L0tjb25maWc6MTA0MTpjb25maWcgU0xBQl9PQkpfRVhUXG5pbml0L0tjb25maWctMTA0Mi1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0OTAKCQkJCQkJCW91dHB1dDogMjcKCQkJCQkJCXRob3VnaHRzOiAxNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoYXQgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipJbnZlc3RpZ2F0aW5nIGBTTEFCX09CSl9FWFRgIFVzYWdlKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGNvZGUgYW5kIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHRzIHRoYXQgYXJlIGFjdHVhbGx5IHVzaW5nIGBTTEFCX09CSl9FWFRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGVyZSB0aGlzIGZsYWcgaXMgZ2V0dGluZyBzZXQsIHJlYWQsIGFuZCBtb3N0IGltcG9ydGFudGx5LCB3aHkuIEkga25vdyBpdCYjMzk7cyBhIGtleSBiaXQgZm9yIG1hbmFnaW5nIG9iamVjdCBleHRlbnNpb25zIHdpdGhpbiB0aGUgU0xBQiBhbGxvY2F0b3IsIGJ1dCB0aGUgc3BlY2lmaWMgdXNhZ2Ugd2lsbCBkaWN0YXRlIHRoZSBmaW5lciBwb2ludHMgb2YgaXRzIGJlaGF2aW9yLCBhbmQgdGhhdCBpcyB3aGF0IEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZi4gSXMgaXQgcHJpbWFyaWx5IGZvciB0cmFja2luZyBtZXRhZGF0YSwgbWFuYWdpbmcgbGlmZWN5Y2xlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBncmVwIHRocm91Z2ggdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBpcyB0aGUgYmVzdCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIG91dHB1dCBvZiB0aGUgZ3JlcCBjb21tYW5kIGFuZCBuYXJyb3cgaXQgdG8gcmVsZXZhbnQgc2VjdGlvbnMgb2YgY29kZS4gRnJvbSB0aGVyZSwgSSYjMzk7bGwgbmVlZCB0byBhbmFseXplIGVhY2ggdXNhZ2Ugc2l0ZSB0byByZWNvbnN0cnVjdCB0aGUgY29udHJvbCBmbG93IGFuZCB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBvZiBkaWZmZXJlbnQgY29tcG9uZW50cyBvZiB0aGUgc3lzdGVtLiBJIGFsc28gd2FudCB0byBtYWtlIHN1cmUgSSBhbSBrZWVwaW5nIGluIG1pbmQgYW55IHBvdGVudGlhbCBzZWN1cml0eSByYW1pZmljYXRpb25zIG9mIHRoaXMgZmxhZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c2VsZWN0IFNMQUJfT0JKX0VYVCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA3Mz1jb25maWcgTUVNQ0dcbi0tXG5pbml0L0tjb25maWctMTA3Ni1cdHNlbGVjdCBFVkVOVEZEXG5pbml0L0tjb25maWc6MTA3NzpcdHNlbGVjdCBTTEFCX09CSl9FWFRcbmluaXQvS2NvbmZpZy0xMDc4LVx0c2VsZWN0IFZNX0VWRU5UX0NPVU5URVJTXG4tLVxubGliL0tjb25maWcuZGVidWc9MTA1MT1jb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTEwNTgtXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cbmxpYi9LY29uZmlnLmRlYnVnOjEwNTk6XHRzZWxlY3QgU0xBQl9PQkpfRVhUXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDYwLVx0aGVscFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyMDkxNwoJCQkJCQkJb3V0cHV0OiAzNAoJCQkJCQkJdGhvdWdodHM6IDUyMgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBTbGFiIE9iamVjdCBFeHRlbnNpb24gQ3ljbGUgRml4KioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIGFuZCBpdCYjMzk7cyBkZWFsaW5nIHdpdGggYSBjeWNsZSBpbiB0aGUgYWxsb2NhdGlvbiBvZiB0aGUgYHNsYWJvYmpfZXh0YCBhcnJheS4gVGhpcyBjb21lcyBpbnRvIHBsYXkgd2hlbiBlaXRoZXIgYENPTkZJR19NRU1DR2Agb3IgYENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HYCBhcmUgZW5hYmxlZCwgd2hpY2gsIGluIHR1cm4sIGVuYWJsZXMgYENPTkZJR19TTEFCX09CSl9FWFRgLgoKVGhlIHByb2JsZW0gYm9pbHMgZG93biB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBga21hbGxvYy01MTJgIGFuZCBga21hbGxvYy0xa2DigJRhIGNsYXNzaWMgZGVhZGxvY2sgc2l0dWF0aW9uLiBJdCBoYXBwZW5zIHdoZW4gdGhlIHNpemUgb2YgYG9ial9leHRzX2NhY2hlLSZndDtvYmplY3Rfc2l6ZWAgaXMgbGVzcyB0aGFuIG9yIGVxdWFsIHRvIGBzLSZndDtvYmplY3Rfc2l6ZWAuIFRoZSBmaXggaXMgYSBmdW5jdGlvbmFsIGNoYW5nZS4KClRoZSBwcmV2aW91cyBjb2RlIGNvbXBhcmVkIHRoZSBvYmplY3Qgc2l6ZXMsIHRoZSBmaXggcmV2ZXJzZXMgdGhlIGNvbXBhcmlzb246IGZyb20gYGlmIChzLSZndDtvYmplY3Rfc2l6ZSA9PSBvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemUpIHJldHVybiBvYmpfZXh0c19jYWNoZS0mZ3Q7b2JqZWN0X3NpemUgJiM0MzsgMTtgIHRvIGBpZiAob2JqX2V4dHNfY2FjaGUtJmd0O29iamVjdF9zaXplICZsdDs9IHMtJmd0O29iamVjdF9zaXplKSByZXR1cm4gcy0mZ3Q7b2JqZWN0X3NpemUgJiM0MzsgMTtgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgc2xhYiB0ZWFyZG93biBwcm9jZXNzIGZyb20gZ2V0dGluZyBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLgoKVGhpcyBpcyBkZWZpbml0ZWx5IHJlYWNoYWJsZSwgZ2l2ZW4gdGhhdCBga21hbGxvY2AgYW5kIGBzbGFiYCBhcmUgY29yZSBrZXJuZWwgZmVhdHVyZXMgdXNlZCBhY3Jvc3MgdGhlIGJvYXJkLCBldmVuIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhlIHJlbGV2YW50IGNvbmZpZ3MgYXJlIGBNRU1DR2Agb3IgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBJIHRoaW5rIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBwcm9iYWJseSBhIGdvb2QgY29uZmlnIHRvIGNoZWNrLCBzaW5jZSBpdCYjMzk7cyBtb3JlIHNwZWNpZmljLiBZZXMsIHRoYXQgaXMgcmlnaHQuIGBNRU1DR2AgaXMgZ29vZCwgdG9vLgoKSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgYG9ial9leHRzX2FsbG9jX3NpemVgIGFuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgdG8gc2VlIGlmIHRob3NlIHdvdWxkIGJlIGdvb2QgZm9jdXMgc3ltYm9scy4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGxvb2tzIGludGVyZXN0aW5nLCBpdCBpcyBjYWxsZWQgZnJvbSBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgLCBhbmQgdGhhdCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYC4gVGhpcyBpcyBhIGhvdCBwYXRoIGZvciBzbGFiIGFsbG9jYXRpb24sIGJ1dCBpdCBpcyBjYWxsZWQgb25jZSBwZXIgc2xhYi4gU28gbWF5YmUgYGFsbG9jX3NsYWJfb2JqX2V4dHNgICppcyogYSBnb29kIGZvY3VzIHN5bWJvbC4KCkxldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGZ1bmN0aW9ucyBpbnZvbHZlZC4gYG9ial9leHRzX2FsbG9jX3NpemVgIGlzIHN0YXRpYyBpbmxpbmUsIHNvIHRoYXQgaXNuJiMzOTt0IGdvaW5nIHRvIGJlIGEgc3ltYm9sLiBOb3csIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBub3Qgc3RhdGljLiBJcyBpdCBleHBvcnRlZCwgb3IgZ2xvYmFsPyBJIHNob3VsZCBjaGVjayBpdCBpbiBgbW0vc2x1Yi5jYCB0byBiZSBzdXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMzo0MzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vc2x1Yi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4tLVxubW0vc2x1Yi5jLTIxNTUtXG5tbS9zbHViLmM6MjE1NjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXG5tbS9zbHViLmMtMjE1Ny1cdFx0XHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjIzMD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIyNjktICovXG5tbS9zbHViLmM6MjI3MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMjcxLXtcbi0tXG5tbS9zbHViLmM9MjMyMT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuLS1cbm1tL3NsdWIuYy0yMzI0LVxubW0vc2x1Yi5jOjIzMjU6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzI2LVx0XHRcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbi0tXG5tbS9zbHViLmM9MjMzMT1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIzMzQtXG5tbS9zbHViLmM6MjMzNTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzM2LVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmM9MjM0NT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4tLVxubW0vc2x1Yi5jLTIzNDgtXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG5tbS9zbHViLmM6MjM0OTpcdCAgICBhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGZsYWdzLCBhbGxvY19mbGFncykpIHtcbm1tL3NsdWIuYy0yMzUwLVx0XHRwcl93YXJuX29uY2UoXCYjMzQ7JXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXG5cJiMzNDssXG4tLVxubW0vc2x1Yi5jPTMzNTI9c3RhdGljIF9fYWx3YXlzX2lubGluZSB2b2lkIGFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxuLS1cbm1tL3NsdWIuYy0zMzU4LVx0XHRcdCFzbGFiX29ial9leHRzKHNsYWIpKVxubW0vc2x1Yi5jOjMzNTk6XHRcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxubW0vc2x1Yi5jLTMzNjAtXHRcdFx0XHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcbi0tXG5tbS9zbHViLmM9MzM4MT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zNDMxLVx0ICovXG5tbS9zbHViLmM6MzQzMjpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQzMy1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIyODM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYW5hbHlzaXMgb2YgdGhlIHByb3ZpZGVkIGNvZGUgc25pcHBldDoKCioqSW52ZXN0aWdhdGluZyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIHNlZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgZGVmaW5lZCwgYW5kIGl0JiMzOTtzIGhhbmdpbmcgb3V0IGF0IGxpbmUgMjE1Ni4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyAqbm90KiBhIGBzdGF0aWNgIGZ1bmN0aW9uIGlzIGltbWVkaWF0ZWx5IGludGVyZXN0aW5nOyB0aGF0IGltcGxpZXMgaXRzIHNjb3BlIGlzIGJyb2FkZXIgdGhhbiBqdXN0IHRoaXMgZmlsZSwgd2hpY2ggaXMgc29tZXRoaW5nIEkgbmVlZCB0byBrZWVwIGluIG1pbmQgZm9yIHBvdGVudGlhbCBpbnRlcmFjdGlvbnMgZWxzZXdoZXJlLiBOb3cgaG9sZCBvbi4uLiBJIGNvdWxkIHN3ZWFyIEkmIzM5O3ZlIHNlZW4gdGhhdCBuYW1lIGJlZm9yZS4gTGV0JiMzOTtzIGRvdWJsZS1jaGVjay4gTGluZSAyMzI1Li4uIEFoYSEgVGhlcmUgKmlzKiBhbm90aGVyIGRlZmluaXRpb24gb2YgaXQuIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQmIzM5O3MgZ29pbmcgb24gd2l0aCB0aGVzZSB0d28gZGVmaW5pdGlvbnM7IGFyZSB0aGV5IHRoZSBzYW1lLCBhcmUgdGhleSBkaWZmZXJlbnQ/IElzIHRoaXMgc29tZSBzb3J0IG9mIG92ZXJsb2FkaW5nPyBBIGZvcndhcmQgZGVjbGFyYXRpb24/IE9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyBUaW1lIHRvIGRpZyBpbnRvIGxpbmUgMjMyNSBhbmQgZ2V0IHRvIHRoZSBib3R0b20gb2YgdGhpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9zbHViLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMzEwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIzMTA6XHRcdFx0c2xhYi1cdTAwM2VvYmpfZXh0cyA9IG9ial9leHRzO1xuMjMxMTpcdFx0XHRzbGFiX3NldF9zdHJpZGUoc2xhYiwgcy1cdTAwM2VzaXplKTtcbjIzMTI6XHRcdH1cbjIzMTM6XHR9XG4yMzE0Olx0XG4yMzE1Olx0I2Vsc2UgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xuMjMxNjpcdFxuMjMxNzpcdHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcbjIzMTg6XHR7XG4yMzE5Olx0fVxuMjMyMDpcdFxuMjMyMTpcdHN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXG4yMzIyOlx0e1xuMjMyMzpcdH1cbjIzMjQ6XHRcbjIzMjU6XHRzdGF0aWMgaW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxuMjMyNjpcdFx0XHRcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcbjIzMjc6XHR7XG4yMzI4Olx0XHRyZXR1cm4gMDtcbjIzMjk6XHR9XG4yMzMwOlx0XG4yMzMxOlx0c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxuMjMzMjpcdHtcbjIzMzM6XHR9XG4yMzM0Olx0XG4yMzM1Olx0c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4yMzM2Olx0XHRcdFx0XHRcdFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxuMjMzNzpcdHtcbjIzMzg6XHR9XG4yMzM5Olx0XG4yMzQwOlx0I2VuZGlmIC8qIENPTkZJR19TTEFCX09CSl9FWFQgKi9cbjIzNDE6XHRcbjIzNDI6XHQjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcbjIzNDM6XHRcbjIzNDQ6XHRzdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmdcbjIzNDU6XHRwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXG4yMzQ2Olx0XHRcdFx0ICAgZ2ZwX3QgZmxhZ3MsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncywgdm9pZCAqcClcbjIzNDc6XHR7XG4yMzQ4Olx0XHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXHUwMDI2XHUwMDI2XG4yMzQ5Olx0XHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XG4yMzUwOlx0XHRcdHByX3dhcm5fb25jZShcJiMzNDslcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcblwmIzM0OyxcbjIzNTE6XHRcdFx0XHQgICAgIF9fZnVuY19fLCBzLVx1MDAzZW5hbWUpO1xuMjM1MjpcdFx0XHRyZXR1cm4gMDtcbjIzNTM6XHRcdH1cbjIzNTQ6XHRcbjIzNTU6XHRcdHJldHVybiBzbGFiX29ial9leHRzKHNsYWIpO1xuMjM1NjpcdH1cbjIzNTc6XHRcbjIzNTg6XHRcbjIzNTk6XHQvKiBTaG91bGQgYmUgY2FsbGVkIG9ubHkgaWYgbWVtX2FsbG9jX3Byb2ZpbGluZ19lbmFibGVkKCkgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjM4MjYKCQkJCQkJCW91dHB1dDogMjgKCQkJCQkJCXRob3VnaHRzOiAxNDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFNsYWIgT2JqZWN0IEV4dGVuc2lvbnMqKgoKT2theSwgaGVyZSYjMzk7cyB0aGUgZGVhbC4gTGluZSAyMzI1IGlzIGp1c3QgdGhlIHBsYWNlaG9sZGVyLCB0aGUgYmFzaWMgaW1wbGVtZW50YXRpb24sIGlmIHdlICpkb24mIzM5O3QqIGhhdmUgYENPTkZJR19TTEFCX09CSl9FWFRgIGRlZmluZWQuIFRoYXQgbWVhbnMgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGlzIGxpa2VseSB0aGUga2V5IGZ1bmN0aW9uIEkgbmVlZCB0byB1bmRlcnN0YW5kLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSAqcmVhbCogYWN0aW9uIGlzLgoKVGhlIHJlbGV2YW50IGNvbmZpZ3VyYXRpb25zIHNlZW0gdG8gYmUgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGFuZCBgTUVNQ0dgLiBJIHdvbmRlciBpZiBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYnkgaXRzZWxmIGlzIGVub3VnaCB0byB0cmlnZ2VyIHRoZSBiZWhhdmlvdXIgSSYjMzk7bSBpbnRlcmVzdGVkIGluLiBMZXQgbWUgY2hlY2suLi4gQWgsIHllcywgaXQgbG9va3MgbGlrZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZG9lcywgaW4gZmFjdCwgc2VsZWN0IGBTTEFCX09CSl9FWFRgLiBQZXJmZWN0LgoKV2FpdCBhIHNlY29uZC4uLiBXaGVyZSBpcyBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVmaW5lZD8gQWgsIGl0JiMzOTtzIGluIGBsaWIvS2NvbmZpZy5kZWJ1Z2AuIE9rYXksIG5vdyBJIGp1c3QgbmVlZCB0byBxdWlja2x5IHZlcmlmeSB0aGF0IGBNRU1fQUxMT0NfUFJPRklMSU5HYCBpcyBhICp2YWxpZCogY29uZmlndXJhdGlvbiBvcHRpb24uIEp1c3QgYSBxdWljayBkb3VibGUtY2hlY2sgdG8gbWFrZSBzdXJlIEkmIzM5O20gbm90IGNoYXNpbmcgYSBwaGFudG9tLi4uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2xpYi9LY29uZmlnLmRlYnVnPTEwNDc9Y29uZmlnIENPREVfVEFHR0lOR1xuLS1cbmxpYi9LY29uZmlnLmRlYnVnLTEwNTAtXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDUxOmNvbmZpZyBNRU1fQUxMT0NfUFJPRklMSU5HXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUyLVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nXCYjMzQ7XG4tLVxubGliL0tjb25maWcuZGVidWctMTA2NC1cbmxpYi9LY29uZmlnLmRlYnVnOjEwNjU6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY2LVx0Ym9vbCBcJiMzNDtFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcJiMzNDtcbi0tXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY5LVxubGliL0tjb25maWcuZGVidWc6MTA3MDpjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xubGliL0tjb25maWcuZGVidWctMTA3MS1cdGJvb2wgXCYjMzQ7TWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsZXIgZGVidWdnaW5nXCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI0NDUzCgkJCQkJCQlvdXRwdXQ6IDIzCgkJCQkJCQl0aG91Z2h0czogMzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIHByZXNlbnRlZCBpbiB0aGUgZmlyc3QgcGVyc29uOgoKKipDaGVja2luZyBDb25maWcgVmFsaWRpdHkqKgoKQWxyaWdodCwgc28gSSYjMzk7dmUgY29uZmlybWVkIHRoYXQgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGEgZGVmaW5lZCBhbmQgYWNjZXB0YWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbi4gTm93LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gcXVpY2tseSB2ZXJpZnkgdGhlIHZhbGlkaXR5IG9mIGBNRU1DR2AuIEkgbmVlZCB0byBlbnN1cmUgYm90aCBvZiB0aGVzZSBhcmUgcHJvcGVybHkgY29uZmlndXJlZCBmb3IgdGhlIGN1cnJlbnQgYnVpbGQgb3IgZW52aXJvbm1lbnQuIEkmIzM5O20gYXNzdW1pbmcsIGdpdmVuIHRoZSBjb250ZXh0LCB0aGF0IEkmIzM5O20gd29ya2luZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uLCBsaWtlbHkgbG9va2luZyB0byBlbmFibGUgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gR290dGEgbWFrZSBzdXJlIGJvdGggc2V0dGluZ3MgYXJlIHJlY29nbml6ZWQgYW5kIGRvbiYjMzk7dCBjb25mbGljdCB3aXRoIGFueSBvdGhlciBlbmFibGVkIG9wdGlvbnMgb3IgdGhlIHRhcmdldCBwbGF0Zm9ybS4gVGltZSB0byBxdWlja2x5IGRvdWJsZS1jaGVjayB0aGF0IGBNRU1DR2AgaXMgYWxzbyBhIHZhbGlkIHN5bWJvbCBvciBvcHRpb24gaW4gdGhpcyBzcGVjaWZpYyBjb25maWd1cmF0aW9uIGNvbnRleHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBNRU1DRyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcbi0tXG5pbml0L0tjb25maWctMTA3Mi1cbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xuaW5pdC9LY29uZmlnLTEwNzQtXHRib29sIFwmIzM0O01lbW9yeSBjb250cm9sbGVyXCYjMzQ7XG4tLVxuaW5pdC9LY29uZmlnLTEwODEtXG5pbml0L0tjb25maWc6MTA4Mjpjb25maWcgTUVNQ0dfTk1JX1VOU0FGRVxuaW5pdC9LY29uZmlnLTEwODMtXHRib29sXG4tLVxuaW5pdC9LY29uZmlnLTEwODgtXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcbmluaXQvS2NvbmZpZy0xMDkwLVx0Ym9vbFxuLS1cbmluaXQvS2NvbmZpZy0xMDk1LVxuaW5pdC9LY29uZmlnOjEwOTY6Y29uZmlnIE1FTUNHX1YxXG5pbml0L0tjb25maWctMTA5Ny1cdGJvb2wgXCYjMzQ7TGVnYWN5IGNncm91cCB2MSBtZW1vcnkgY29udHJvbGxlclwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yNSAyMzo0MzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNDg5OAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDE4OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgTWVtb3J5IENvbmZpZ3VyYXRpb24gYW5kIFNsYWIgT2JqZWN0IEV4dGVuc2lvbnMqKgoKT2theSwgc28gSSBzZWUgYE1FTUNHYCBpcyBkZWZpbml0ZWx5IGEgdmFsaWQgY29uZmlndXJhdGlvbi4gV2UmIzM5O2xsIGluY2x1ZGUgaXQuIExldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1DR2AgYXJlIGxpc3RlZCBhcyBvdXIgYEVuYWJsZUNvbmZpZ3NgLiBBbHRob3VnaCwgSSBrbm93IGBNRU1DR2AgaXMgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0LCBpdCBkb2VzbiYjMzk7dCBodXJ0IHRvIGV4cGxpY2l0bHkgbGlzdCBpdC4gQmV0dGVyIHRvIGJlIGNsZWFyLgoKQWxyaWdodCwgbm93IGxldCYjMzk7cyBtYWtlIHN1cmUgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgcmVhY2hhYmxlLiBZZXMsIG9mIGNvdXJzZSwgaXQmIzM5O3MgY2FsbGVkIGR1cmluZyBzbGFiIGFsbG9jYXRpb24sIGJ1dCBvbmx5IHdoZW4gYFNMQUJfT0JKX0VYVGAgaXMgZW5hYmxlZC4gRXhjZWxsZW50LiBUaGlzIHBhdGNoIGFkZHJlc3NlcyBhIGN5Y2xlIHRoYXQgd2FzIG9jY3VycmluZyBpbiB0aGUgc2xhYm9ial9leHQgYXJyYXkgYWxsb2NhdGlvbi4gR29vZCBjYXRjaC4KCkFyZSB0aGVyZSBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucyB3ZSBzaG91bGQgY29uc2lkZXIgaGVyZT8gV2VsbCwgYG9ial9leHRzX2FsbG9jX3NpemVgIGlzIHN0YXRpYyBpbmxpbmUsIHNvIHRoYXQgZG9lc24mIzM5O3QgZGVtYW5kIHNpZ25pZmljYW50IGF0dGVudGlvbiwgYnV0IGBhbGxvY19zbGFiX29ial9leHRzYCBpcyB0aGUgbWFpbiBvbmUgdG8gZm9jdXMgb24uIEFuZCwgdGhlcmUmIzM5O3MgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgLi4uIGxldCYjMzk7cyBnaXZlIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCBhIGxvb2sgYXMgd2VsbC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjUgMjM6NDM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL3NsdWIuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9zbHViLmM9MjIzMD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIyNjktICovXG5tbS9zbHViLmM6MjI3MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcbm1tL3NsdWIuYy0yMjcxLXtcbi0tXG5tbS9zbHViLmM9MjMzMT1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXG4tLVxubW0vc2x1Yi5jLTIzMzQtXG5tbS9zbHViLmM6MjMzNTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbm1tL3NsdWIuYy0yMzM2LVx0XHRcdFx0XHRcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcbi0tXG5tbS9zbHViLmM9MzM4MT1zdGF0aWMgc3RydWN0IHNsYWIgKmFsbG9jYXRlX3NsYWIoc3RydWN0IGttZW1fY2FjaGUgKnMsIGdmcF90IGZsYWdzLFxuLS1cbm1tL3NsdWIuYy0zNDMxLVx0ICovXG5tbS9zbHViLmM6MzQzMjpcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XG5tbS9zbHViLmMtMzQzMy1cdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI1NzE4CgkJCQkJCQlvdXRwdXQ6IDE0MAoJCQkJCQkJdGhvdWdodHM6IDc0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBLZXJuZWwgTWVtb3J5IE1hbmFnZW1lbnQgUGF0Y2ggZm9yIEZ1enppbmcqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGZpZ3VyaW5nIG91dCB0aGUgYmVzdCB3YXkgdG8gZnV6eiBpdCB3aXRoIHN5emthbGxlci4gVGhlIGNvcmUgb2YgdGhpcyBwYXRjaCBzZWVtcyB0byBiZSBhcm91bmQgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGFuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AuIEkgc2VlIHRoYXQgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGlzIGNhbGxlZCBieSBgYWxsb2NhdGVfc2xhYmAsIGFuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgY2FsbGVkIGJ5IGBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9va2AgYW5kIGBhY2NvdW50X3NsYWJgLiBUaG9zZSBhcmUgZ29vZCBlbnRyeSBwb2ludHMgdG8gZm9jdXMgdGhlIGZ1enplciBvbiwgZGVmaW5pdGVseS4gV2hpbGUgbG9va2luZyBhdCB0aG9zZSwgYGZyZWVfc2xhYl9vYmpfZXh0c2AgbG9va3MgcmVsZXZhbnQgYXMgd2VsbCwgc28gSSYjMzk7bGwgYWRkIHRob3NlIHRvIHRoZSBgRm9jdXNTeW1ib2xzYCBsaXN0OiBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AsIGFuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAuCgpUaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBpbmZpbml0ZSByZWN1cnNpb24gZHVyaW5nIHNsYWIgdGVhcmRvd24sIHNwZWNpZmljYWxseSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4gSXQgbW9kaWZpZXMgYG9ial9leHRzX2FsbG9jX3NpemVgIHRvIHByZXZlbnQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gc2xhYnMgd2hlbiBhbGxvY2F0aW5nIHRoZSBgc2xhYm9ial9leHRgIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNMVUIgYWxsb2NhdG9yLCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCwgYW5kIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cy4gVGhpcyBtYWtlcyBpdCB3b3J0aCBmdXp6aW5nLgoKTm93LCBJIG5lZWQgdG8gY2hlY2sgc29tZSBkZXRhaWxzIGFib3V0IHRoZXNlIGZ1bmN0aW9ucy4gIGBhbGxvY19zbGFiX29ial9leHRzYCBpc24mIzM5O3Qgc3RhdGljIGluIGBtbS9zbHViLmNgIGFuZCBpc24mIzM5O3QgZXhwb3J0ZWQsIGJ1dCB0aGF0IHNob3VsZG4mIzM5O3QgbWF0dGVyIHNpbmNlIHN5emthbGxlciBndWlkZXMgZnV6emluZyB0b3dhcmQgdGhlc2UgZnVuY3Rpb25zLCBhcyBsb25nIGFzIGl0JiMzOTtzIHJlYWNoYWJsZS4gYG9ial9leHRzX2FsbG9jX3NpemVgIGlzIGBzdGF0aWMgaW5saW5lYCBzbyBpdCB3b24mIzM5O3QgYmUgaW4gdGhlIHN5bWJvbCB0YWJsZSwgYnV0IHRoZSBpbXBvcnRhbnQgZnVuY3Rpb24sIGBhbGxvY19zbGFiX29ial9leHRzYCwgd2lsbCBiZS4gIGBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5YCBpcyBzdGF0aWMsIHdoaWNoIGlzIHVzdWFsbHkgYSBwcm9ibGVtIGZvciBmdXp6aW5nIGJ1dCBpdCYjMzk7cyBub3QgbWFya2VkIGlubGluZSwgYW5kIHRoZXJlJiMzOTtzIGEgbm9uLWlubGluZSB2ZXJzaW9uIHNvIHRoaXMgc2hvdWxkIGJlIGFjY2Vzc2libGUgdG8gdGhlIGZ1enplci4gVGhpcyB3aWxsIHdvcmsuCgpMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBuZWNlc3NhcnkgY29uZmlndXJhdGlvbnMuIGBTTEFCX09CSl9FWFRgIHNlZW1zIHRvIGJlIHRoZSBrZXksIGFuZCBpdCYjMzk7cyBzZWxlY3RlZCBieSBlaXRoZXIgYE1FTUNHYCBvciBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIFNvLCBlbmFibGluZyBlaXRoZXIgb2YgdGhvc2Ugd2lsbCBnZXQgdXMgdGhlIHJpZ2h0IGNvbmZpZ3VyYXRpb24uIEkmIzM5O2xsIGluY2x1ZGUgYm90aC4gSSB3aWxsIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBhbmQgdGFyZ2V0IGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoaXMgYW5hbHlzaXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBwbGFuIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI1IDIzOjQzPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtNRU1fQUxMT0NfUFJPRklMSU5HJiMzNDssCiAgICAmIzM0O01FTUNHJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7YWxsb2Nfc2xhYl9vYmpfZXh0cyYjMzQ7LAogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzX2Vhcmx5JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvbi9kZWFkbG9jayBkdXJpbmcgc2xhYiB0ZWFyZG93biBieSBlbnN1cmluZyB0aGF0IHRoZSBzbGFib2JqX2V4dCBhcnJheSBpcyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBrbWFsbG9jIGNhY2hlLiBUaGlzIHByZXZlbnRzIGEgY3ljbGUgd2hlcmUgYSBzbGFiIGhvbGRzIGFub3RoZXIgc2xhYiYjMzk7cyBhcnJheS4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBjb3JlIFNMVUIgYWxsb2NhdG9yIGFuZCBpcyByZWFjaGFibGUgd2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgb3IgbWVtb3J5IGNncm91cHMgYXJlIGVuYWJsZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O01FTV9BTExPQ19QUk9GSUxJTkcmIzM0OywKICAgICYjMzQ7TUVNQ0cmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDthbGxvY19zbGFiX29ial9leHRzJiMzNDssCiAgICAmIzM0O2FsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW5maW5pdGUgcmVjdXJzaW9uL2RlYWRsb2NrIGR1cmluZyBzbGFiIHRlYXJkb3duIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGlzIGFsbG9jYXRlZCBmcm9tIGEgc3RyaWN0bHkgbGFyZ2VyIGttYWxsb2MgY2FjaGUuIFRoaXMgcHJldmVudHMgYSBjeWNsZSB3aGVyZSBhIHNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJiMzOTtzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQyOjM5LjcwNDc4MjkxN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY3MjQ3ODUwMDgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvbi9kZWFkbG9jayBkdXJpbmcgc2xhYiB0ZWFyZG93biBieSBlbnN1cmluZyB0aGF0IHRoZSBzbGFib2JqX2V4dCBhcnJheSBpcyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBrbWFsbG9jIGNhY2hlLiBUaGlzIHByZXZlbnRzIGEgY3ljbGUgd2hlcmUgYSBzbGFiIGhvbGRzIGFub3RoZXIgc2xhYidzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDI6MzkuNzA0Nzg4Njc3WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0OTI4ODEyMzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIlBhdGNoRGlmZlwiOiBcImNvbW1pdCA0ODRlYTRhNDM3MTU5N2VhNzIzMzBiMzQ0ZTE1YWQxMGQ3Y2E0ODllXFxuQXV0aG9yOiBzeXotY2x1c3RlciBcXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cXHUwMDNlXFxuRGF0ZTogICBUaHUgSnVuIDI1IDIzOjQyOjM4IDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL3NsdWIuYyBiL21tL3NsdWIuY1xcbmluZGV4IDllYzc3NGRjNzAwOTY5Li40OGU1NGQzNDA4NjVhNSAxMDA2NDRcXG4tLS0gYS9tbS9zbHViLmNcXG4rKysgYi9tbS9zbHViLmNcXG5AQCAtMjEyNCwxNSArMjEyNCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbiB9XFxuIFxcbiAvKlxcbi0gKiBDYWxjdWxhdGUgdGhlIGFsbG9jYXRpb24gc2l6ZSBmb3Igc2xhYm9ial9leHQgYXJyYXkuXFxuKyAqIFNpemUgb2YgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGZvciBAc2xhYi5cXG4gICpcXG4tICogV2hlbiBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmcgaXMgZW5hYmxlZCwgdGhlIG9ial9leHRzIGFycmF5XFxuLSAqIGNvdWxkIGJlIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgY2FjaGUgaXQncyBiZWluZyBhbGxvY2F0ZWQgZm9yLlxcbi0gKiBUaGlzIHdvdWxkIHByZXZlbnQgdGhlIHNsYWIgZnJvbSBldmVyIGJlaW5nIGZyZWVkIGJlY2F1c2UgaXQgd291bGRcXG4tICogYWx3YXlzIGNvbnRhaW4gYXQgbGVhc3Qgb25lIGFsbG9jYXRlZCBvYmplY3QgKGl0cyBvd24gb2JqX2V4dHMgYXJyYXkpLlxcbi0gKlxcbi0gKiBUbyBhdm9pZCB0aGlzLCBpbmNyZWFzZSB0aGUgYWxsb2NhdGlvbiBzaXplIHdoZW4gd2UgZGV0ZWN0IHRoZSBhcnJheVxcbi0gKiBtYXkgY29tZSBmcm9tIHRoZSBzYW1lIGNhY2hlLCBmb3JjaW5nIGl0IHRvIHVzZSBhIGRpZmZlcmVudCBjYWNoZS5cXG4rICogVGhlIGFycmF5IGlzIGl0c2VsZiBrbWFsbG9jKCknZC4gSWYgaXQgY2FtZSBmcm9tIHRoZSBzYW1lIG9yIGEgc21hbGxlclxcbisgKiBrbWFsbG9jIGNhY2hlIHRoYW4gQHMsIHRoZSBcXFwic2xhYiBob2xkcyBhbm90aGVyIHNsYWIncyBhcnJheVxcXCIgcmVsYXRpb24gY291bGRcXG4rICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFxcdTAwM2MtXFx1MDAzZSBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzXFxuKyAqIGZvcmV2ZXIgYW5kIHJlY3Vyc2VzIHZpYSBmcmVlX3NsYWJfb2JqX2V4dHMoKSAtXFx1MDAzZSBrZnJlZSgpIC1cXHUwMDNlIGRpc2NhcmRfc2xhYigpXFxuKyAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXFxuKyAqIERBRyAoYWN5Y2xpYykuXFxuICAqL1xcbiBzdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbiBcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcXG5AQCAtMjE0NywxNCArMjE0Niw5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuIFxcdFxcdHJldHVybiBzejtcXG4gXFxuIFxcdG9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7XFxuLVxcdC8qXFxuLVxcdCAqIFdlIGNhbid0IHNpbXBseSBjb21wYXJlIHMgd2l0aCBvYmpfZXh0c19jYWNoZSwgYmVjYXVzZSBwYXJ0aXRpb25lZCBrbWFsbG9jXFxuLVxcdCAqIGNhY2hlcyBoYXZlIG11bHRpcGxlIGNhY2hlcyBwZXIgc2l6ZSwgc2VsZWN0ZWQgYnkgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZS5cXG4tXFx0ICogU2luY2UgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZSBtYXkgZGlmZmVyIGJldHdlZW4ga21hbGxvY19zbGFiKCkgYW5kIGFjdHVhbFxcbi1cXHQgKiBhbGxvY2F0aW9uLCBidW1wIHNpemUgd2hlbiBzaXplcyBhcmUgZXF1YWwuXFxuLVxcdCAqL1xcbi1cXHRpZiAocy1cXHUwMDNlb2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtXFx1MDAzZW9iamVjdF9zaXplKVxcbi1cXHRcXHRyZXR1cm4gb2JqX2V4dHNfY2FjaGUtXFx1MDAzZW9iamVjdF9zaXplICsgMTtcXG4rXFx0LyogY29tcGFyZSBvYmplY3Rfc2l6ZSwgbm90IHRoZSBjYWNoZSBwb2ludGVyIChwYXJ0aXRpb25lZCBrbWFsbG9jIGNhY2hlcykgKi9cXG4rXFx0aWYgKG9ial9leHRzX2NhY2hlLVxcdTAwM2VvYmplY3Rfc2l6ZSBcXHUwMDNjPSBzLVxcdTAwM2VvYmplY3Rfc2l6ZSlcXG4rXFx0XFx0cmV0dXJuIHMtXFx1MDAzZW9iamVjdF9zaXplICsgMTtcXG4gXFxuIFxcdHJldHVybiBzejtcXG4gfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo0MC4xOTg0MDIyMjVaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjY2NzU0MjE3MzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvbi9kZWFkbG9jayBkdXJpbmcgc2xhYiB0ZWFyZG93biBieSBlbnN1cmluZyB0aGF0IHRoZSBzbGFib2JqX2V4dCBhcnJheSBpcyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBrbWFsbG9jIGNhY2hlLiBUaGlzIHByZXZlbnRzIGEgY3ljbGUgd2hlcmUgYSBzbGFiIGhvbGRzIGFub3RoZXIgc2xhYidzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdFxuICAgc3BlY2lmaWNhbGx5IGNvdmVyIHRoZSBtb2RpZmllZCBjb2RlLiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3Mgb3V0cHV0IGFycmF5LFxuICAgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA0ODRlYTRhNDM3MTU5N2VhNzIzMzBiMzQ0ZTE1YWQxMGQ3Y2E0ODllXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFRodSBKdW4gMjUgMjM6NDI6MzggMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9zbHViLmMgYi9tbS9zbHViLmNcbmluZGV4IDllYzc3NGRjNzAwOTY5Li40OGU1NGQzNDA4NjVhNSAxMDA2NDRcbi0tLSBhL21tL3NsdWIuY1xuKysrIGIvbW0vc2x1Yi5jXG5AQCAtMjEyNCwxNSArMjEyNCwxNCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxuIH1cbiBcbiAvKlxuLSAqIENhbGN1bGF0ZSB0aGUgYWxsb2NhdGlvbiBzaXplIGZvciBzbGFib2JqX2V4dCBhcnJheS5cbisgKiBTaXplIG9mIHRoZSBzbGFib2JqX2V4dCBhcnJheSBmb3IgQHNsYWIuXG4gICpcbi0gKiBXaGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBpcyBlbmFibGVkLCB0aGUgb2JqX2V4dHMgYXJyYXlcbi0gKiBjb3VsZCBiZSBhbGxvY2F0ZWQgZnJvbSB0aGUgc2FtZSBzbGFiIGNhY2hlIGl0J3MgYmVpbmcgYWxsb2NhdGVkIGZvci5cbi0gKiBUaGlzIHdvdWxkIHByZXZlbnQgdGhlIHNsYWIgZnJvbSBldmVyIGJlaW5nIGZyZWVkIGJlY2F1c2UgaXQgd291bGRcbi0gKiBhbHdheXMgY29udGFpbiBhdCBsZWFzdCBvbmUgYWxsb2NhdGVkIG9iamVjdCAoaXRzIG93biBvYmpfZXh0cyBhcnJheSkuXG4tICpcbi0gKiBUbyBhdm9pZCB0aGlzLCBpbmNyZWFzZSB0aGUgYWxsb2NhdGlvbiBzaXplIHdoZW4gd2UgZGV0ZWN0IHRoZSBhcnJheVxuLSAqIG1heSBjb21lIGZyb20gdGhlIHNhbWUgY2FjaGUsIGZvcmNpbmcgaXQgdG8gdXNlIGEgZGlmZmVyZW50IGNhY2hlLlxuKyAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJ2QuIElmIGl0IGNhbWUgZnJvbSB0aGUgc2FtZSBvciBhIHNtYWxsZXJcbisgKiBrbWFsbG9jIGNhY2hlIHRoYW4gQHMsIHRoZSBcInNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJ3MgYXJyYXlcIiByZWxhdGlvbiBjb3VsZFxuKyAqIGZvcm0gYSBjeWNsZSAoc2VsZiwgb3IgZS5nLiBrbWFsbG9jLTUxMiBcdTAwM2MtXHUwMDNlIGttYWxsb2MtMWspIHRoYXQgcGlucyB0aGUgc2xhYnNcbisgKiBmb3JldmVyIGFuZCByZWN1cnNlcyB2aWEgZnJlZV9zbGFiX29ial9leHRzKCkgLVx1MDAzZSBrZnJlZSgpIC1cdTAwM2UgZGlzY2FyZF9zbGFiKClcbisgKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYVxuKyAqIERBRyAoYWN5Y2xpYykuXG4gICovXG4gc3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcbiBcdFx0XHRcdFx0IHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApXG5AQCAtMjE0NywxNCArMjE0Niw5IEBAIHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXG4gXHRcdHJldHVybiBzejtcbiBcbiBcdG9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7XG4tXHQvKlxuLVx0ICogV2UgY2FuJ3Qgc2ltcGx5IGNvbXBhcmUgcyB3aXRoIG9ial9leHRzX2NhY2hlLCBiZWNhdXNlIHBhcnRpdGlvbmVkIGttYWxsb2Ncbi1cdCAqIGNhY2hlcyBoYXZlIG11bHRpcGxlIGNhY2hlcyBwZXIgc2l6ZSwgc2VsZWN0ZWQgYnkgY2FsbGVyIGFkZHJlc3Mgb3IgdHlwZS5cbi1cdCAqIFNpbmNlIGNhbGxlciBhZGRyZXNzIG9yIHR5cGUgbWF5IGRpZmZlciBiZXR3ZWVuIGttYWxsb2Nfc2xhYigpIGFuZCBhY3R1YWxcbi1cdCAqIGFsbG9jYXRpb24sIGJ1bXAgc2l6ZSB3aGVuIHNpemVzIGFyZSBlcXVhbC5cbi1cdCAqL1xuLVx0aWYgKHMtXHUwMDNlb2JqZWN0X3NpemUgPT0gb2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUpXG4tXHRcdHJldHVybiBvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSArIDE7XG4rXHQvKiBjb21wYXJlIG9iamVjdF9zaXplLCBub3QgdGhlIGNhY2hlIHBvaW50ZXIgKHBhcnRpdGlvbmVkIGttYWxsb2MgY2FjaGVzKSAqL1xuK1x0aWYgKG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplIFx1MDAzYz0gcy1cdTAwM2VvYmplY3Rfc2l6ZSlcbitcdFx0cmV0dXJuIHMtXHUwMDNlb2JqZWN0X3NpemUgKyAxO1xuIFxuIFx0cmV0dXJuIHN6O1xuIH1cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQyOjQwLjE5ODQwNDE3NVoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5NDYzOTgzMTUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBTTFVCIE1lbW9yeSBBbGxvY2F0aW9uIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBpbiBgbW0vc2x1Yi5jYC4gSXQncyBmb2N1c2VkIG9uIG1vZGlmeWluZyB0aGUgYG9ial9leHRzX2FsbG9jX3NpemUoKWAgZnVuY3Rpb24uIFRoZSBjb3JlIG9mIHRoZSBjaGFuZ2UgaXMgYWN0dWFsbHkgcXVpdGUgaW50ZXJlc3RpbmcgZnJvbSBhIHBlcmZvcm1hbmNlIGFuZCBtZW1vcnkgbWFuYWdlbWVudCBwZXJzcGVjdGl2ZS4gUHJldmlvdXNseSwgdGhlIGxvZ2ljIGNvbXBhcmVkIGBzLVx1MDAzZW9iamVjdF9zaXplYCBkaXJlY3RseSB3aXRoIGBvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZWAuIFRoZSBwYXRjaCByZXBsYWNlcyB0aGlzIHdpdGggYSBjaGVjayB0byBzZWUgaWYgYG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHMtXHUwMDNlb2JqZWN0X3NpemVgLiBUaGVuLCBpdCBqdXN0IHJldHVybnMgYHMtXHUwMDNlb2JqZWN0X3NpemUgKyAxYC4gVGhpcyBzdWJ0bGUgY2hhbmdlIGhhcyBpbXBsaWNhdGlvbnMgZm9yIGhvdyB3ZSBwcm9maWxlIG1lbW9yeSBhbGxvY2F0aW9uIHdpdGhpbiBTTFVCLiBUaGUgY29tbWVudCBjbGFyaWZpZXMgdGhhdCB3ZSBhcmUgY29tcGFyaW5nIHRoZSBzaXplcywgbm90IHRoZSBjYWNoZSBwb2ludGVycyAodG8gYWNjb3VudCBmb3IgcGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpLiBJIG5lZWQgdG8gZGlnIGRlZXBlciBpbnRvIHRoZSBjb250ZXh0cyB0aGF0IGNhbGxzIGBvYmpfZXh0c19hbGxvY19zaXplYC4gVGhpcyBwcm9iYWJseSBjaGFuZ2VzIHRoZSB1cHBlciBib3VuZHMgb2YgYWxsb2NhdGVkIHNpemUsIHNvIEkgbmVlZCB0byBjaGVjayBob3cgaXQgd2lsbCBjaGFuZ2UgdGhlIGJlaGF2aW9yIG9mIHRoZSBzbHViIGFsbG9jYXRvciBhbmQgaXRzIHByb2ZpbGluZyBsb2dpYy4gTGV0J3Mgc3RhcnQgd2l0aCBjaGVja2luZyB0aGUgY29kZSBvZiB0aGUgZnVuY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIzMTQsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNzIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo0NC4xNDQ4MDQ2OVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NzQxNDg5OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJvYmpfZXh0c19hbGxvY19zaXplXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjEyMT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIxMzUtICovXFxubW0vc2x1Yi5jOjIxMzY6c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjEzNy1cXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcXG4tLVxcbm1tL3NsdWIuYz0yMTU2PWludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0yMTcxLVxcbm1tL3NsdWIuYzoyMTcyOlxcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xcbm1tL3NsdWIuYy0yMTczLVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo0NC4yMDIyMjc2NzhaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDgyMjUwMjU1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIE9iamVjdCBFeHRlbnNpb24gQWxsb2NhdGlvbioqXG5cbk9rYXksIHNvIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyByZXNwb25zaWJsZSBmb3IgYWxsb2NhdGluZyBvYmplY3QgZXh0ZW5zaW9ucy4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhhdCB0aGlzIGZ1bmN0aW9uIHJlbGllcyBvbiBgb2JqX2V4dHNfYWxsb2Nfc2l6ZWAgdG8gZGV0ZXJtaW5lIHRoZSBuZWNlc3NhcnkgYW1vdW50IG9mIG1lbW9yeS4gVGhhdCdzIGEgcmVhc29uYWJsZSBkZXNpZ247IHNlcGFyYXRpb24gb2YgY29uY2VybnMgYW5kIGFsbCB0aGF0LiBCdXQgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bGwgcGljdHVyZS4gTXkgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzOiAqd2hhdCdzIGNhbGxpbmcgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGluIHRoZSBmaXJzdCBwbGFjZT8qIFRoZSBhbGxvY2F0aW9uIGZ1bmN0aW9uJ3MgY2FsbGVycyBhcmUga2V5IHRvIHVuZGVyc3RhbmRpbmcgdGhlIHVzZS1jYXNlIGFuZCB0aGUgY29udGV4dCBpbiB3aGljaCB0aGVzZSBvYmplY3QgZXh0ZW5zaW9ucyBhcmUgY3JlYXRlZCBhbmQgbWFuYWdlZC4gSSBuZWVkIHRvIHRyYWNlIGJhY2sgZnJvbSB0aGF0IGZ1bmN0aW9uLCB0aGF0J3Mgd2hlcmUgSSB3aWxsIHN0YXJ0IGRpZ2dpbmcgaW4gZnVydGhlci5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjk4MCwiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQyOjQ3LjI4NDQ4MDA0M1oiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NTY1MDcwOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL3NsdWIuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9zbHViLmM9MjEzNj1zdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIxNTUtXFxubW0vc2x1Yi5jOjIxNTY6aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMTU3LVxcdFxcdFxcdGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIyMzA9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIyNjktICovXFxubW0vc2x1Yi5jOjIyNzA6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIyNzEte1xcbi0tXFxubW0vc2x1Yi5jPTIzMjE9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy0yMzI0LVxcbm1tL3NsdWIuYzoyMzI1OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMjYtXFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jPTIzMzE9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzQtXFxubW0vc2x1Yi5jOjIzMzU6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMzYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jPTIzNDU9cHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLFxcbi0tXFxubW0vc2x1Yi5jLTIzNDgtXFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFxcdTAwMjZcXHUwMDI2XFxubW0vc2x1Yi5jOjIzNDk6XFx0ICAgIGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKSkge1xcbm1tL3NsdWIuYy0yMzUwLVxcdFxcdHByX3dhcm5fb25jZShcXFwiJXMsICVzOiBGYWlsZWQgdG8gY3JlYXRlIHNsYWIgZXh0ZW5zaW9uIHZlY3RvciFcXFxcblxcXCIsXFxuLS1cXG5tbS9zbHViLmM9MzM1Mj1zdGF0aWMgX19hbHdheXNfaW5saW5lIHZvaWQgYWNjb3VudF9zbGFiKHN0cnVjdCBzbGFiICpzbGFiLCBpbnQgb3JkZXIsXFxuLS1cXG5tbS9zbHViLmMtMzM1OC1cXHRcXHRcXHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG5tbS9zbHViLmM6MzM1OTpcXHRcXHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcXG5tbS9zbHViLmMtMzM2MC1cXHRcXHRcXHRcXHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcXG4tLVxcbm1tL3NsdWIuYz0zMzgxPXN0YXRpYyBzdHJ1Y3Qgc2xhYiAqYWxsb2NhdGVfc2xhYihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtMzQzMS1cXHQgKi9cXG5tbS9zbHViLmM6MzQzMjpcXHRhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHMsIHNsYWIpO1xcbm1tL3NsdWIuYy0zNDMzLVxcdGFjY291bnRfc2xhYihzbGFiLCBvb19vcmRlcihvbyksIHMsIGZsYWdzLCBhbGxvY19mbGFncyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQyOjQ3LjM0MDE0MTcwMloiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI2OTMyMzI2ODUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgcHJlc2VudGVkIGFzIGEgcGVyc29uYWwgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6XG5cbioqRGVsdmluZyBpbnRvIFNsYWIgT2JqZWN0IEV4dGVuc2lvbnMqKlxuXG5SaWdodCwgc28gdGhpcyBuZXcgZmVhdHVyZSBJJ20gbG9va2luZyBhdCwgaXQncyBkZWZpbml0ZWx5IHRpZWQgdG8gYHNsYWJfb2JqX2V4dHNgLiBJbW1lZGlhdGVseSBJJ20gdGhpbmtpbmcgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIOKAkyB0aGF0J3MgdGhlIHVzdWFsIHRlcnJpdG9yeSBmb3IgdGhpcyBraW5kIG9mIHRoaW5nLiBNeSBmaXJzdCBzdGVwIGlzIHRvIHRyYWNlIGJhY2sgdGhlIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHByZWNpc2VseSB3aGF0IGNvbmZpZyBvcHRpb25zIGFyZSBmbGlwcGluZyB0aGUgc3dpdGNoIG9uIGBzbGFiX29ial9leHRzYC4gVGhhdCdzIHdoZXJlIEkgbmVlZCB0byBzdGFydC4gVW5kZXJzdGFuZGluZyB0aGUgZW5hYmxpbmcgY29uZGl0aW9ucyBpcyBjcnVjaWFsIGZvciByZWFsbHkgZ3Jhc3BpbmcgdGhlIGltcGFjdCBvZiB0aGlzIGZlYXR1cmUuIFRpbWUgdG8gZGlnIGludG8gdGhlIGJ1aWxkIGNvbmZpZ3VyYXRpb25zLi4uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQwMzksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo1MC4wMzMzNzcxNTdaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU4ODE5MzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic2xhYl9vYmpfZXh0c1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTc2MT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgZ2V0X29yaWdfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0KVxcbi0tXFxubW0vc2x1Yi5jLTc4OS0gKi9cXG5tbS9zbHViLmM6NzkwOnN0YXRpYyBpbmxpbmUgYm9vbCBuZWVkX3NsYWJfb2JqX2V4dHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxubW0vc2x1Yi5jLTc5MS17XFxuLS1cXG5tbS9zbHViLmM9ODI4PXN0YXRpYyBpbmxpbmUgYm9vbCBvYmpfZXh0c19pbl9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy04MzMtXFxubW0vc2x1Yi5jOjgzNDpcXHRvYmpfZXh0cyA9IHNsYWJfb2JqX2V4dHMoc2xhYik7XFxubW0vc2x1Yi5jLTgzNS1cXHRpZiAoIW9ial9leHRzKVxcbi0tXFxubW0vc2x1Yi5jLTg0Mi0jZWxzZVxcbm1tL3NsdWIuYzo4NDM6c3RhdGljIGlubGluZSBib29sIG5lZWRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcylcXG5tbS9zbHViLmMtODQ0LXtcXG4tLVxcbm1tL3NsdWIuYz0yMDY1PXN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcXG4tLVxcbm1tL3NsdWIuYy0yMDcwLVxcdG9ial9zbGFiID0gdmlydF90b19zbGFiKG9iaik7XFxubW0vc2x1Yi5jOjIwNzE6XFx0c2xhYl9leHRzID0gc2xhYl9vYmpfZXh0cyhvYmpfc2xhYik7XFxubW0vc2x1Yi5jLTIwNzItXFx0aWYgKHNsYWJfZXh0cykge1xcbm1tL3NsdWIuYzoyMDczOlxcdFxcdGdldF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxubW0vc2x1Yi5jLTIwNzQtXFx0XFx0dW5zaWduZWQgaW50IG9mZnMgPSBvYmpfdG9faW5kZXgob2JqX3NsYWItXFx1MDAzZXNsYWJfY2FjaGUsXFxuLS1cXG5tbS9zbHViLmMtMjA3OS1cXHRcXHRpZiAodW5saWtlbHkoaXNfY29kZXRhZ19lbXB0eShcXHUwMDI2ZXh0LVxcdTAwM2VyZWYpKSkge1xcbm1tL3NsdWIuYzoyMDgwOlxcdFxcdFxcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxubW0vc2x1Yi5jLTIwODEtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vc2x1Yi5jLTIwODYtXFx0XFx0c2V0X2NvZGV0YWdfZW1wdHkoXFx1MDAyNmV4dC1cXHUwMDNlcmVmKTtcXG5tbS9zbHViLmM6MjA4NzpcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhzbGFiX2V4dHMpO1xcbm1tL3NsdWIuYy0yMDg4LVxcdH1cXG4tLVxcbm1tL3NsdWIuYz0yMTE2PXN0YXRpYyBpbmxpbmUgdm9pZCBoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2ModW5zaWduZWQgbG9uZyBvYmpfZXh0cyxcXG4tLVxcbm1tL3NsdWIuYy0yMTIwLVxcbm1tL3NsdWIuYzoyMTIxOnN0YXRpYyBpbmxpbmUgdm9pZCBpbml0X3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIxMjIte1xcbi0tXFxubW0vc2x1Yi5jLTIxMzEtICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFxcdTAwM2MtXFx1MDAzZSBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzXFxubW0vc2x1Yi5jOjIxMzI6ICogZm9yZXZlciBhbmQgcmVjdXJzZXMgdmlhIGZyZWVfc2xhYl9vYmpfZXh0cygpIC1cXHUwMDNlIGtmcmVlKCkgLVxcdTAwM2UgZGlzY2FyZF9zbGFiKClcXG5tbS9zbHViLmMtMjEzMy0gKiBhdCB0ZWFyZG93bi4gRm9yY2UgaXQgaW50byBhIHN0cmljdGx5IGxhcmdlciBjYWNoZSB0byBrZWVwIHRoYXQgcmVsYXRpb24gYVxcbi0tXFxubW0vc2x1Yi5jPTIxMzY9c3RhdGljIGlubGluZSBzaXplX3Qgb2JqX2V4dHNfYWxsb2Nfc2l6ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0yMTU1LVxcbm1tL3NsdWIuYzoyMTU2OmludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjE1Ny1cXHRcXHRcXHRnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4tLVxcbm1tL3NsdWIuYy0yMTgzLVxcdFxcdGlmICghbWFya19mYWlsZWRfb2JqZXh0c19hbGxvYyhzbGFiKSBcXHUwMDI2XFx1MDAyNlxcbm1tL3NsdWIuYzoyMTg0OlxcdFxcdCAgICBzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYy0yMTg1LVxcdFxcdFxcdHJldHVybiAwO1xcbi0tXFxubW0vc2x1Yi5jLTIyMjktXFxubW0vc2x1Yi5jOjIyMzA6c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbm1tL3NsdWIuYy0yMjMxLXtcXG4tLVxcbm1tL3NsdWIuYy0yMjMzLVxcbm1tL3NsdWIuYzoyMjM0OlxcdG9ial9leHRzID0gKHN0cnVjdCBzbGFib2JqX2V4dCAqKXNsYWJfb2JqX2V4dHMoc2xhYik7XFxubW0vc2x1Yi5jLTIyMzUtXFx0aWYgKCFvYmpfZXh0cykge1xcbi0tXFxubW0vc2x1Yi5jLTIyNjktICovXFxubW0vc2x1Yi5jOjIyNzA6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIyNzEte1xcbi0tXFxubW0vc2x1Yi5jLTIyNzctXFxubW0vc2x1Yi5jOjIyNzg6XFx0aWYgKCFuZWVkX3NsYWJfb2JqX2V4dHMocykpXFxubW0vc2x1Yi5jLTIyNzktXFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vc2x1Yi5jLTIyODUtXFxubW0vc2x1Yi5jOjIyODY6XFx0XFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yMjg3LVxcdFxcdG1lbXNldChhZGRyLCAwLCBvYmpfZXh0c19zaXplX2luX3NsYWIoc2xhYikpO1xcbm1tL3NsdWIuYzoyMjg4OlxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5tbS9zbHViLmMtMjI4OS1cXG4tLVxcbm1tL3NsdWIuYy0yMzAwLVxcbm1tL3NsdWIuYzoyMzAxOlxcdFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5tbS9zbHViLmMtMjMwMi1cXHRcXHRmb3JfZWFjaF9vYmplY3QoYWRkciwgcywgc2xhYl9hZGRyZXNzKHNsYWIpLCBzbGFiLVxcdTAwM2VvYmplY3RzKVxcbi0tXFxubW0vc2x1Yi5jLTIzMDQtXFx0XFx0XFx0ICAgICAgIHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpKTtcXG5tbS9zbHViLmM6MjMwNTpcXHRcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxubW0vc2x1Yi5jLTIzMDYtXFxuLS1cXG5tbS9zbHViLmM9MjMxNz1zdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopXFxuLS1cXG5tbS9zbHViLmMtMjMyMC1cXG5tbS9zbHViLmM6MjMyMTpzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbm1tL3NsdWIuYy0yMzIyLXtcXG4tLVxcbm1tL3NsdWIuYy0yMzI0LVxcbm1tL3NsdWIuYzoyMzI1OnN0YXRpYyBpbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMjYtXFx0XFx0XFx0ICAgICAgIGdmcF90IGdmcCwgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzAtXFxubW0vc2x1Yi5jOjIzMzE6c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbm1tL3NsdWIuYy0yMzMyLXtcXG4tLVxcbm1tL3NsdWIuYy0yMzM0LVxcbm1tL3NsdWIuYzoyMzM1OnN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbm1tL3NsdWIuYy0yMzM2LVxcdFxcdFxcdFxcdFxcdFxcdCAgICAgICBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz0yMzQ0PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZ1xcbm1tL3NsdWIuYzoyMzQ1OnByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG5tbS9zbHViLmMtMjM0Ni1cXHRcXHRcXHQgICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCB2b2lkICpwKVxcbm1tL3NsdWIuYy0yMzQ3LXtcXG5tbS9zbHViLmM6MjM0ODpcXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjM0OTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzNTAtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYy0yMzU0LVxcbm1tL3NsdWIuYzoyMzU1OlxcdHJldHVybiBzbGFiX29ial9leHRzKHNsYWIpO1xcbm1tL3NsdWIuYy0yMzU2LX1cXG4tLVxcbm1tL3NsdWIuYz0yMzYxPV9fYWxsb2NfdGFnZ2luZ19zbGFiX2FsbG9jX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCwgZ2ZwX3QgZmxhZ3MsXFxuLS1cXG5tbS9zbHViLmMtMjM3Ny1cXHRzbGFiID0gdmlydF90b19zbGFiKG9iamVjdCk7XFxubW0vc2x1Yi5jOjIzNzg6XFx0b2JqX2V4dHMgPSBwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzLCBzbGFiLCBmbGFncywgYWxsb2NfZmxhZ3MsIG9iamVjdCk7XFxubW0vc2x1Yi5jLTIzNzktXFx0LypcXG4tLVxcbm1tL3NsdWIuYy0yMzg2LVxcbm1tL3NsdWIuYzoyMzg3OlxcdFxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5tbS9zbHViLmMtMjM4OC1cXHRcXHRvYmpfZXh0ID0gc2xhYl9vYmpfZXh0KHNsYWIsIG9ial9leHRzLCBvYmpfaWR4KTtcXG5tbS9zbHViLmMtMjM4OS1cXHRcXHRhbGxvY190YWdfYWRkKFxcdTAwMjZvYmpfZXh0LVxcdTAwM2VyZWYsIGN1cnJlbnQtXFx1MDAzZWFsbG9jX3RhZywgcy1cXHUwMDNlc2l6ZSk7XFxubW0vc2x1Yi5jOjIzOTA6XFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yMzkxLVxcdH0gZWxzZSB7XFxuLS1cXG5tbS9zbHViLmM9MjQwNj1fX2FsbG9jX3RhZ2dpbmdfc2xhYl9mcmVlX2hvb2soc3RydWN0IGttZW1fY2FjaGUgKnMsIHN0cnVjdCBzbGFiICpzbGFiLCB2b2lkICoqcCxcXG4tLVxcbm1tL3NsdWIuYy0yNDE1LVxcbm1tL3NsdWIuYzoyNDE2OlxcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG5tbS9zbHViLmMtMjQxNy1cXHRpZiAoIW9ial9leHRzKVxcbi0tXFxubW0vc2x1Yi5jLTI0MTktXFxubW0vc2x1Yi5jOjI0MjA6XFx0Z2V0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yNDIxLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmplY3RzOyBpKyspIHtcXG4tLVxcbm1tL3NsdWIuYy0yNDI1LVxcdH1cXG5tbS9zbHViLmM6MjQyNjpcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxubW0vc2x1Yi5jLTI0MjctfVxcbi0tXFxubW0vc2x1Yi5jPTI0ODQ9dm9pZCBtZW1jZ19zbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsIHZvaWQgKipwLFxcbi0tXFxubW0vc2x1Yi5jLTI0OTEtXFxubW0vc2x1Yi5jOjI0OTI6XFx0b2JqX2V4dHMgPSBzbGFiX29ial9leHRzKHNsYWIpO1xcbm1tL3NsdWIuYy0yNDkzLVxcdGlmIChsaWtlbHkoIW9ial9leHRzKSlcXG4tLVxcbm1tL3NsdWIuYy0yNDk1LVxcbm1tL3NsdWIuYzoyNDk2OlxcdGdldF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5tbS9zbHViLmMtMjQ5Ny1cXHRfX21lbWNnX3NsYWJfZnJlZV9ob29rKHMsIHNsYWIsIHAsIG9iamVjdHMsIG9ial9leHRzKTtcXG5tbS9zbHViLmM6MjQ5ODpcXHRwdXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxubW0vc2x1Yi5jLTI0OTktfVxcbi0tXFxubW0vc2x1Yi5jPTI1MDI9Ym9vbCBtZW1jZ19zbGFiX3Bvc3RfY2hhcmdlKHZvaWQgKnAsIGdmcF90IGZsYWdzKVxcbi0tXFxubW0vc2x1Yi5jLTI1MzgtXFx0ICogSWdub3JlIEtNQUxMT0NfTk9STUFMIGNhY2hlIHRvIGF2b2lkIHBvc3NpYmxlIGNpcmN1bGFyIGRlcGVuZGVuY3lcXG5tbS9zbHViLmM6MjUzOTpcXHQgKiBvZiBzbGFiX29ial9leHRzIGJlaW5nIGFsbG9jYXRlZCBmcm9tIHRoZSBzYW1lIHNsYWIgYW5kIHRodXMgdGhlIHNsYWJcXG5tbS9zbHViLmMtMjU0MC1cXHQgKiBiZWNvbWluZyBlZmZlY3RpdmVseSB1bmZyZWVhYmxlLlxcbi0tXFxubW0vc2x1Yi5jLTI1NDUtXFx0LyogSWdub3JlIGFscmVhZHkgY2hhcmdlZCBvYmplY3RzLiAqL1xcbm1tL3NsdWIuYzoyNTQ2OlxcdG9ial9leHRzID0gc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG5tbS9zbHViLmMtMjU0Ny1cXHRpZiAob2JqX2V4dHMpIHtcXG5tbS9zbHViLmM6MjU0ODpcXHRcXHRnZXRfc2xhYl9vYmpfZXh0cyhvYmpfZXh0cyk7XFxubW0vc2x1Yi5jLTI1NDktXFx0XFx0b2ZmID0gb2JqX3RvX2luZGV4KHMsIHNsYWIsIHApO1xcbi0tXFxubW0vc2x1Yi5jLTI1NTEtXFx0XFx0aWYgKHVubGlrZWx5KG9ial9leHQtXFx1MDAzZW9iamNnKSkge1xcbm1tL3NsdWIuYzoyNTUyOlxcdFxcdFxcdHB1dF9zbGFiX29ial9leHRzKG9ial9leHRzKTtcXG5tbS9zbHViLmMtMjU1My1cXHRcXHRcXHRyZXR1cm4gdHJ1ZTtcXG5tbS9zbHViLmMtMjU1NC1cXHRcXHR9XFxubW0vc2x1Yi5jOjI1NTU6XFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMob2JqX2V4dHMpO1xcbm1tL3NsdWIuYy0yNTU2LVxcdH1cXG4tLVxcbm1tL3NsdWIuYz0zMzUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzU3LVxcdFxcdFxcdChzLVxcdTAwM2VmbGFncyBcXHUwMDI2IFNMQUJfQUNDT1VOVCkgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MzM1ODpcXHRcXHRcXHQhc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG5tbS9zbHViLmM6MzM1OTpcXHRcXHRhbGxvY19zbGFiX29ial9leHRzKHNsYWIsIHMsIGdmcCxcXG5tbS9zbHViLmMtMzM2MC1cXHRcXHRcXHRcXHQgICAgYWxsb2NfZmxhZ3MgfCBTTEFCX0FMTE9DX05FV19TTEFCKTtcXG4tLVxcbm1tL3NsdWIuYz0zMzY2PXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCB1bmFjY291bnRfc2xhYihzdHJ1Y3Qgc2xhYiAqc2xhYiwgaW50IG9yZGVyLFxcbi0tXFxubW0vc2x1Yi5jLTMzNzMtXFx0ICovXFxubW0vc2x1Yi5jOjMzNzQ6XFx0ZnJlZV9zbGFiX29ial9leHRzKHNsYWIsIGFsbG93X3NwaW4pO1xcbm1tL3NsdWIuYy0zMzc1LVxcbi0tXFxubW0vc2x1Yi5jPTMzODE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDI2LVxcdHNldHVwX3NsYWJfZGVidWcocywgc2xhYiwgc3RhcnQpO1xcbm1tL3NsdWIuYzozNDI3OlxcdGluaXRfc2xhYl9vYmpfZXh0cyhzbGFiKTtcXG5tbS9zbHViLmMtMzQyOC1cXHQvKlxcbi0tXFxubW0vc2x1Yi5jLTM0MzEtXFx0ICovXFxubW0vc2x1Yi5jOjM0MzI6XFx0YWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzLCBzbGFiKTtcXG5tbS9zbHViLmMtMzQzMy1cXHRhY2NvdW50X3NsYWIoc2xhYiwgb29fb3JkZXIob28pLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo1MC4wODkyNjQ2ODZaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDMyNjM1ODg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkludmVzdGlnYXRpbmcgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nKipcblxuT2theSwgc28gSSdtIHRyeWluZyB0byBmaWd1cmUgb3V0IHdoZXJlIHRoaXMgbWVtb3J5IGFsbG9jYXRpb24gYmVoYXZpb3IgaXMgY29taW5nIGZyb20uIE15IGd1dCBmZWVsaW5nIGlzIHRoYXQgd2UncmUgZGVhbGluZyB3aXRoIGVpdGhlciBgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdgIG9yIHBlcmhhcHMgYENPTkZJR19NRU1DR2AgaW5mbHVlbmNpbmcgdGhlIGFsbG9jYXRpb24gcHJvY2Vzcy4gSSBuZWVkIHRvIGdldCBzb21lIGNvbmNyZXRlIGV2aWRlbmNlLCBzbyBJJ2xsIGp1bXAgcmlnaHQgaW50byB0aGUga2VybmVsIGNvZGUuIFNwZWNpZmljYWxseSwgdGhlIGBtbS9zbHViLmNgIGZpbGUgc2hvdWxkIGJlIGEgZ29vZCBzdGFydGluZyBwb2ludCwgYW5kIEknbGwgemVybyBpbiBvbiBsaW5lIDIxMzYuIFRoYXQncyB3aGVyZSBJIGV4cGVjdCB0byBmaW5kIHNvbWUgY3JpdGljYWwgY29kZSByZWxhdGVkIHRvIHRoZSBhbGxvY2F0aW9uIHBhdGggdGhhdCBtaWdodCBzaGVkIGxpZ2h0IG9uIHdoYXQncyBnb2luZyBvbi4gTGV0J3Mgc2VlIHdoYXQgdGhhdCBjb2RlIGJsb2NrIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc4NDksIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo1My4xMjE5MDI2NTJaIiwiU2VxIjoxMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MzEzMTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMTAwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjEwMDpcXHRcXHQgKiBJZiB2ZWN0b3IgcHJldmlvdXNseSBmYWlsZWQgdG8gYWxsb2NhdGUgdGhlbiB3ZSBoYXZlIGxpdmVcXG4yMTAxOlxcdFxcdCAqIG9iamVjdHMgd2l0aCBubyB0YWcgcmVmZXJlbmNlLiBNYXJrIGFsbCByZWZlcmVuY2VzIGluIHRoaXNcXG4yMTAyOlxcdFxcdCAqIHZlY3RvciBhcyBlbXB0eSB0byBhdm9pZCB3YXJuaW5ncyBsYXRlciBvbi5cXG4yMTAzOlxcdFxcdCAqL1xcbjIxMDQ6XFx0XFx0aWYgKG9ial9leHRzID09IE9CSkVYVFNfQUxMT0NfRkFJTCkge1xcbjIxMDU6XFx0XFx0XFx0dW5zaWduZWQgaW50IGk7XFxuMjEwNjpcXHRcXG4yMTA3OlxcdFxcdFxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBvYmplY3RzOyBpKyspXFxuMjEwODpcXHRcXHRcXHRcXHRzZXRfY29kZXRhZ19lbXB0eShcXHUwMDI2dmVjW2ldLnJlZik7XFxuMjEwOTpcXHRcXHR9XFxuMjExMDpcXHR9XFxuMjExMTpcXHRcXG4yMTEyOlxcdCNlbHNlIC8qIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHICovXFxuMjExMzpcXHRcXG4yMTE0OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iaikge31cXG4yMTE1OlxcdHN0YXRpYyBpbmxpbmUgYm9vbCBtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHN0cnVjdCBzbGFiICpzbGFiKSB7IHJldHVybiBmYWxzZTsgfVxcbjIxMTY6XFx0c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbjIxMTc6XFx0XFx0XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKSB7fVxcbjIxMTg6XFx0XFxuMjExOTpcXHQjZW5kaWYgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cXG4yMTIwOlxcdFxcbjIxMjE6XFx0c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4yMTIyOlxcdHtcXG4yMTIzOlxcdFxcdHNsYWItXFx1MDAzZW9ial9leHRzID0gMDtcXG4yMTI0OlxcdH1cXG4yMTI1OlxcdFxcbjIxMjY6XFx0LypcXG4yMTI3OlxcdCAqIFNpemUgb2YgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGZvciBAc2xhYi5cXG4yMTI4OlxcdCAqXFxuMjEyOTpcXHQgKiBUaGUgYXJyYXkgaXMgaXRzZWxmIGttYWxsb2MoKSdkLiBJZiBpdCBjYW1lIGZyb20gdGhlIHNhbWUgb3IgYSBzbWFsbGVyXFxuMjEzMDpcXHQgKiBrbWFsbG9jIGNhY2hlIHRoYW4gQHMsIHRoZSBcXFwic2xhYiBob2xkcyBhbm90aGVyIHNsYWIncyBhcnJheVxcXCIgcmVsYXRpb24gY291bGRcXG4yMTMxOlxcdCAqIGZvcm0gYSBjeWNsZSAoc2VsZiwgb3IgZS5nLiBrbWFsbG9jLTUxMiBcXHUwMDNjLVxcdTAwM2Uga21hbGxvYy0xaykgdGhhdCBwaW5zIHRoZSBzbGFic1xcbjIxMzI6XFx0ICogZm9yZXZlciBhbmQgcmVjdXJzZXMgdmlhIGZyZWVfc2xhYl9vYmpfZXh0cygpIC1cXHUwMDNlIGtmcmVlKCkgLVxcdTAwM2UgZGlzY2FyZF9zbGFiKClcXG4yMTMzOlxcdCAqIGF0IHRlYXJkb3duLiBGb3JjZSBpdCBpbnRvIGEgc3RyaWN0bHkgbGFyZ2VyIGNhY2hlIHRvIGtlZXAgdGhhdCByZWxhdGlvbiBhXFxuMjEzNDpcXHQgKiBEQUcgKGFjeWNsaWMpLlxcbjIxMzU6XFx0ICovXFxuMjEzNjpcXHRzdGF0aWMgaW5saW5lIHNpemVfdCBvYmpfZXh0c19hbGxvY19zaXplKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbjIxMzc6XFx0XFx0XFx0XFx0XFx0XFx0IHN0cnVjdCBzbGFiICpzbGFiLCBnZnBfdCBnZnApXFxuMjEzODpcXHR7XFxuMjEzOTpcXHRcXHRzaXplX3Qgc3ogPSBzaXplb2Yoc3RydWN0IHNsYWJvYmpfZXh0KSAqIHNsYWItXFx1MDAzZW9iamVjdHM7XFxuMjE0MDpcXHRcXHRzdHJ1Y3Qga21lbV9jYWNoZSAqb2JqX2V4dHNfY2FjaGU7XFxuMjE0MTpcXHRcXG4yMTQyOlxcdFxcdGlmIChzeiBcXHUwMDNlIEtNQUxMT0NfTUFYX0NBQ0hFX1NJWkUpXFxuMjE0MzpcXHRcXHRcXHRyZXR1cm4gc3o7XFxuMjE0NDpcXHRcXG4yMTQ1OlxcdFxcdGlmICghaXNfa21hbGxvY19ub3JtYWwocykpXFxuMjE0NjpcXHRcXHRcXHRyZXR1cm4gc3o7XFxuMjE0NzpcXHRcXG4yMTQ4OlxcdFxcdG9ial9leHRzX2NhY2hlID0ga21hbGxvY19zbGFiKHN6LCBOVUxMLCBnZnAsIF9fa21hbGxvY190b2tlbigwKSk7XFxuMjE0OTpcXHRcXHQvKiBjb21wYXJlIG9iamVjdF9zaXplLCBub3QgdGhlIGNhY2hlIHBvaW50ZXIgKHBhcnRpdGlvbmVkIGttYWxsb2MgY2FjaGVzKSAqL1xcbjIxNTA6XFx0XFx0aWYgKG9ial9leHRzX2NhY2hlLVxcdTAwM2VvYmplY3Rfc2l6ZSBcXHUwMDNjPSBzLVxcdTAwM2VvYmplY3Rfc2l6ZSlcXG4yMTUxOlxcdFxcdFxcdHJldHVybiBzLVxcdTAwM2VvYmplY3Rfc2l6ZSArIDE7XFxuMjE1MjpcXHRcXG4yMTUzOlxcdFxcdHJldHVybiBzejtcXG4yMTU0OlxcdH1cXG4yMTU1OlxcdFxcbjIxNTY6XFx0aW50IGFsbG9jX3NsYWJfb2JqX2V4dHMoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbjIxNTc6XFx0XFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuMjE1ODpcXHR7XFxuMjE1OTpcXHRcXHRjb25zdCBib29sIGFsbG93X3NwaW4gPSBhbGxvY19mbGFnc19hbGxvd19zcGlubmluZyhhbGxvY19mbGFncyk7XFxuMjE2MDpcXHRcXHR1bnNpZ25lZCBpbnQgb2JqZWN0cyA9IG9ianNfcGVyX3NsYWIocywgc2xhYik7XFxuMjE2MTpcXHRcXHRib29sIG5ld19zbGFiID0gYWxsb2NfZmxhZ3MgXFx1MDAyNiBTTEFCX0FMTE9DX05FV19TTEFCO1xcbjIxNjI6XFx0XFx0dW5zaWduZWQgbG9uZyBuZXdfZXh0cztcXG4yMTYzOlxcdFxcdHVuc2lnbmVkIGxvbmcgb2xkX2V4dHM7XFxuMjE2NDpcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYztcXG4yMTY1OlxcdFxcdHNpemVfdCBzejtcXG4yMTY2OlxcdFxcbjIxNjc6XFx0XFx0Z2ZwIFxcdTAwMjY9IH5PQkpDR1NfQ0xFQVJfTUFTSztcXG4yMTY4OlxcdFxcdC8qIFByZXZlbnQgcmVjdXJzaXZlIGV4dGVuc2lvbiB2ZWN0b3IgYWxsb2NhdGlvbiAqL1xcbjIxNjk6XFx0XFx0YWxsb2NfZmxhZ3MgfD0gU0xBQl9BTExPQ19OT19SRUNVUlNFO1xcbjIxNzA6XFx0XFx0YWxsb2NfZmxhZ3MgXFx1MDAyNj0gflNMQUJfQUxMT0NfTkVXX1NMQUI7XFxuMjE3MTpcXHRcXG4yMTcyOlxcdFxcdHN6ID0gb2JqX2V4dHNfYWxsb2Nfc2l6ZShzLCBzbGFiLCBnZnApO1xcbjIxNzM6XFx0XFxuMjE3NDpcXHRcXHQvKiBUaGlzIHdpbGwgdXNlIGttYWxsb2Nfbm9sb2NrKCkgaWYgYWxsb2NfZmxhZ3Mgc2F5IHNvICovXFxuMjE3NTpcXHRcXHR2ZWMgPSBrbWFsbG9jX2ZsYWdzKHN6LCBnZnAgfCBfX0dGUF9aRVJPLCBhbGxvY19mbGFncywgc2xhYl9uaWQoc2xhYikpO1xcbjIxNzY6XFx0XFxuMjE3NzpcXHRcXHRpZiAoIXZlYykge1xcbjIxNzg6XFx0XFx0XFx0LypcXG4yMTc5OlxcdFxcdFxcdCAqIFRyeSB0byBtYXJrIHZlY3RvcnMgd2hpY2ggZmFpbGVkIHRvIGFsbG9jYXRlLlxcbjIxODA6XFx0XFx0XFx0ICogSWYgdGhpcyBvcGVyYXRpb24gZmFpbHMsIHRoZXJlIG1heSBiZSBhIHJhY2luZyBwcm9jZXNzXFxuMjE4MTpcXHRcXHRcXHQgKiB0aGF0IGhhcyBhbHJlYWR5IGNvbXBsZXRlZCB0aGUgYWxsb2NhdGlvbi5cXG4yMTgyOlxcdFxcdFxcdCAqL1xcbjIxODM6XFx0XFx0XFx0aWYgKCFtYXJrX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHNsYWIpIFxcdTAwMjZcXHUwMDI2XFxuMjE4NDpcXHRcXHRcXHQgICAgc2xhYl9vYmpfZXh0cyhzbGFiKSlcXG4yMTg1OlxcdFxcdFxcdFxcdHJldHVybiAwO1xcbjIxODY6XFx0XFxuMjE4NzpcXHRcXHRcXHRyZXR1cm4gLUVOT01FTTtcXG4yMTg4OlxcdFxcdH1cXG4yMTg5OlxcdFxcbjIxOTA6XFx0XFx0Vk1fV0FSTl9PTl9PTkNFKHZpcnRfdG9fc2xhYih2ZWMpICE9IE5VTEwgXFx1MDAyNlxcdTAwMjZcXG4yMTkxOlxcdFxcdFxcdFxcdHZpcnRfdG9fc2xhYih2ZWMpLVxcdTAwM2VzbGFiX2NhY2hlID09IHMpO1xcbjIxOTI6XFx0XFxuMjE5MzpcXHRcXHRuZXdfZXh0cyA9ICh1bnNpZ25lZCBsb25nKXZlYztcXG4yMTk0OlxcdCNpZmRlZiBDT05GSUdfTUVNQ0dcXG4yMTk1OlxcdFxcdG5ld19leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcXG4yMTk2OlxcdCNlbmRpZlxcbjIxOTc6XFx0cmV0cnk6XFxuMjE5ODpcXHRcXHRvbGRfZXh0cyA9IFJFQURfT05DRShzbGFiLVxcdTAwM2VvYmpfZXh0cyk7XFxuMjE5OTpcXHRcXHRoYW5kbGVfZmFpbGVkX29iamV4dHNfYWxsb2Mob2xkX2V4dHMsIHZlYywgb2JqZWN0cyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQyOjUzLjEyMjIxODAzMloiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI3MDEyMTU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoYXQgY29kZTpcblxuKipBbmFseXppbmcgTWVtb3J5IEFsbG9jYXRpb24gUHJvZmlsaW5nIGFuZCBDb250cm9sIEdyb3VwIEludGVncmF0aW9uKipcblxuT2theSwgc28gSSdtIGRpdmluZyBpbnRvIHRoaXMgY29kZSBhbmQgdHJ5aW5nIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIHByb2ZpbGluZyBsb2dpYyBpcyB0aWVkIGluLCBvciBpZiBpdCdzIHJlbGF0ZWQgdG8gdGhlIG1lbW9yeSBjb250cm9sIGdyb3VwIGZ1bmN0aW9uYWxpdHkuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMgd2hlcmUgdGhlc2UgZmVhdHVyZXMgYXJlIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQuIE15IGZpcnN0IGxpbmUgb2YgYXR0YWNrIGlzIHRvIGZvY3VzIG9uIHRoZSBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlcy4gSSdtIGdvaW5nIHRvIGxvb2sgZm9yIHRob3NlIGAjaWZkZWZgIGJsb2Nrcywgc3BlY2lmaWNhbGx5IHRob3NlIHRoYXQgdXNlIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2Agb3IgYENPTkZJR19NRU1DR2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMgZm9yIHRoZXNlIHNvcnRzIG9mIGZlYXR1cmVzLiBBbmQgSSdsbCBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hlcmUgdGhlIGZlYXR1cmUgaXMgZW5hYmxlZC9kaXNhYmxlZCBieSB0aGUgcmVzcGVjdGl2ZSBjb25maWd1cmF0aW9ucy5cblxuTGV0J3Mgc3RhcnQgYnkgbG9va2luZyBjbG9zZWx5IGF0IGhvdyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgYmVpbmcgdXNlZC4gV2hlcmUgaXMgaXQgY2FsbGVkPyBJcyBpdCB3aXRoaW4gdGhvc2UgYCNpZmRlZmAgYmxvY2tzPyBJcyB0aGlzIHRoZSBmdW5jdGlvbiB0aGF0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZD8gVGhhdCB3aWxsIGdpdmUgbWUgdGhlIGNsZWFyZXN0IGluZGljYXRpb24gb2YgaG93IHRoZSBjb2RlIGZsb3cgY2hhbmdlcyB3aGVuIHByb2ZpbGluZyBvciBtZW1vcnkgY29udHJvbCBncm91cHMgYXJlIGVuYWJsZWQuIEknbGwgZm9jdXMgb24gdGhhdCBvbmUgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NzE5LCJPdXRwdXRUb2tlbnMiOjI4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDUsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo1Ni40NDkyMzI0OTJaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU3NDI5MjU5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIiNpZmRlZlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTE5Mj1lbnVtIHNsYWJfZmxhZ3Mge1xcbi0tXFxubW0vc2x1Yi5jLTIwMy1cXG5tbS9zbHViLmM6MjA0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYzoyMDU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHX09OXFxubW0vc2x1Yi5jLTIwNi1ERUZJTkVfU1RBVElDX0tFWV9UUlVFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxuLS1cXG5tbS9zbHViLmM9MjA4PURFRklORV9TVEFUSUNfS0VZX0ZBTFNFKHNsdWJfZGVidWdfZW5hYmxlZCk7XFxuLS1cXG5tbS9zbHViLmMtMjExLVxcbm1tL3NsdWIuYzoyMTI6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTIxMy1zdGF0aWMgREVGSU5FX1NUQVRJQ19LRVlfRkFMU0Uoc3RyaWN0X251bWEpO1xcbi0tXFxubW0vc2x1Yi5jPTIzMz1zdHJ1Y3Qgc2xhYl9vYmpfaXRlciB7XFxuLS1cXG5tbS9zbHViLmMtMjM1LVxcdHZvaWQgKnN0YXJ0O1xcbm1tL3NsdWIuYzoyMzY6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0yMzctXFx0dW5zaWduZWQgbG9uZyBmcmVlbGlzdF9jb3VudDtcXG4tLVxcbm1tL3NsdWIuYz0yNDg9dm9pZCAqZml4dXBfcmVkX2xlZnQoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKnApXFxuLS1cXG5tbS9zbHViLmMtMzExLVxcbm1tL3NsdWIuYzozMTI6I2lmZGVmIHN5c3RlbV9oYXNfZnJlZWxpc3RfYWJhXFxubW0vc2x1Yi5jLTMxMy0jZGVmaW5lIF9fQ01QWENIR19ET1VCTEVcXHRfX1NMQUJfRkxBR19CSVQoX1NMQUJfQ01QWENIR19ET1VCTEUpXFxuLS1cXG5tbS9zbHViLmM9MzIyPXN0cnVjdCB0cmFjayB7XFxubW0vc2x1Yi5jLTMyMy1cXHR1bnNpZ25lZCBsb25nIGFkZHI7XFx0LyogQ2FsbGVkIGZyb20gYWRkcmVzcyAqL1xcbm1tL3NsdWIuYzozMjQ6I2lmZGVmIENPTkZJR19TVEFDS0RFUE9UXFxubW0vc2x1Yi5jLTMyNS1cXHRkZXBvdF9zdGFja19oYW5kbGVfdCBoYW5kbGU7XFxuLS1cXG5tbS9zbHViLmM9MzMyPWVudW0gdHJhY2tfaXRlbSB7IFRSQUNLX0FMTE9DLCBUUkFDS19GUkVFIH07XFxubW0vc2x1Yi5jLTMzMy1cXG5tbS9zbHViLmM6MzM0OiNpZmRlZiBTTEFCX1NVUFBPUlRTX1NZU0ZTXFxubW0vc2x1Yi5jLTMzNS1zdGF0aWMgaW50IHN5c2ZzX3NsYWJfYWRkKHN0cnVjdCBrbWVtX2NhY2hlICopO1xcbi0tXFxubW0vc2x1Yi5jPTM1MT1lbnVtIHN0YXRfaXRlbSB7XFxuLS1cXG5tbS9zbHViLmMtMzgwLVxcbm1tL3NsdWIuYzozODE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTM4Mi1zdHJ1Y3Qga21lbV9jYWNoZV9zdGF0cyB7XFxuLS1cXG5tbS9zbHViLmM9Mzg3PXN0YXRpYyBpbmxpbmUgdm9pZCBzdGF0KGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLCBlbnVtIHN0YXRfaXRlbSBzaSlcXG5tbS9zbHViLmMtMzg4LXtcXG5tbS9zbHViLmM6Mzg5OiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy0zOTAtXFx0LypcXG4tLVxcbm1tL3NsdWIuYz0zOTk9dm9pZCBzdGF0X2FkZChjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZW51bSBzdGF0X2l0ZW0gc2ksIGludCB2KVxcbm1tL3NsdWIuYy00MDAte1xcbm1tL3NsdWIuYzo0MDE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTQwMi1cXHRyYXdfY3B1X2FkZChzLVxcdTAwM2VjcHVfc3RhdHMtXFx1MDAzZXN0YXRbc2ldLCB2KTtcXG4tLVxcbm1tL3NsdWIuYz00NDM9c3RydWN0IGttZW1fY2FjaGVfbm9kZSB7XFxuLS1cXG5tbS9zbHViLmMtNDQ2LVxcdHN0cnVjdCBsaXN0X2hlYWQgcGFydGlhbDtcXG5tbS9zbHViLmM6NDQ3OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00NDgtXFx0YXRvbWljX2xvbmdfdCBucl9zbGFicztcXG4tLVxcbm1tL3NsdWIuYz01MTc9c3RhdGljIGlubGluZSBmcmVlcHRyX3QgZnJlZWxpc3RfcHRyX2VuY29kZShjb25zdCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy01MjEtXFxubW0vc2x1Yi5jOjUyMjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfSEFSREVORURcXG5tbS9zbHViLmMtNTIzLVxcdGVuY29kZWQgPSAodW5zaWduZWQgbG9uZylwdHIgXiBzLVxcdTAwM2VyYW5kb20gXiBzd2FiKHB0cl9hZGRyKTtcXG4tLVxcbm1tL3NsdWIuYz01MzA9c3RhdGljIGlubGluZSB2b2lkICpmcmVlbGlzdF9wdHJfZGVjb2RlKGNvbnN0IHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTUzNC1cXG5tbS9zbHViLmM6NTM1OiNpZmRlZiBDT05GSUdfU0xBQl9GUkVFTElTVF9IQVJERU5FRFxcbm1tL3NsdWIuYy01MzYtXFx0ZGVjb2RlZCA9ICh2b2lkICopKHB0ci52IF4gcy1cXHUwMDNlcmFuZG9tIF4gc3dhYihwdHJfYWRkcikpO1xcbi0tXFxubW0vc2x1Yi5jPTU1ND1zdGF0aWMgaW5saW5lIHZvaWQgc2V0X2ZyZWVwb2ludGVyKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICpvYmplY3QsIHZvaWQgKmZwKVxcbi0tXFxubW0vc2x1Yi5jLTU1Ny1cXG5tbS9zbHViLmM6NTU4OiNpZmRlZiBDT05GSUdfU0xBQl9GUkVFTElTVF9IQVJERU5FRFxcbm1tL3NsdWIuYy01NTktXFx0QlVHX09OKG9iamVjdCA9PSBmcCk7IC8qIG5haXZlIGRldGVjdGlvbiBvZiBkb3VibGUgZnJlZSBvciBjb3JydXB0aW9uICovXFxuLS1cXG5tbS9zbHViLmM9NjUwPV9fdXBkYXRlX2ZyZWVsaXN0X2Zhc3Qoc3RydWN0IHNsYWIgKnNsYWIsIHN0cnVjdCBmcmVlbGlzdF9jb3VudGVycyAqb2xkLFxcbi0tXFxubW0vc2x1Yi5jLTY1Mi17XFxubW0vc2x1Yi5jOjY1MzojaWZkZWYgc3lzdGVtX2hhc19mcmVlbGlzdF9hYmFcXG5tbS9zbHViLmMtNjU0LVxcdHJldHVybiB0cnlfY21weGNoZ19mcmVlbGlzdChcXHUwMDI2c2xhYi1cXHUwMDNlZnJlZWxpc3RfY291bnRlcnMsXFxuLS1cXG5tbS9zbHViLmM9Njg4PXN0YXRpYyBpbmxpbmUgYm9vbCBfX3NsYWJfdXBkYXRlX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy03MDYtXFxubW0vc2x1Yi5jOjcwNzojaWZkZWYgU0xVQl9ERUJVR19DTVBYQ0hHXFxubW0vc2x1Yi5jLTcwOC1cXHRwcl9pbmZvKFxcXCIlcyAlczogY21weGNoZyBkb3VibGUgcmVkbyBcXFwiLCBuLCBzLVxcdTAwM2VuYW1lKTtcXG4tLVxcbm1tL3NsdWIuYz03MTQ9c3RhdGljIGlubGluZSBib29sIHNsYWJfdXBkYXRlX2ZyZWVsaXN0KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYy03MzMtXFxubW0vc2x1Yi5jOjczNDojaWZkZWYgU0xVQl9ERUJVR19DTVBYQ0hHXFxubW0vc2x1Yi5jLTczNS1cXHRwcl9pbmZvKFxcXCIlcyAlczogY21weGNoZyBkb3VibGUgcmVkbyBcXFwiLCBuLCBzLVxcdTAwM2VuYW1lKTtcXG4tLVxcbm1tL3NsdWIuYz03NjE9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIGdldF9vcmlnX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdClcXG4tLVxcbm1tL3NsdWIuYy03NzYtXFxubW0vc2x1Yi5jOjc3NzojaWZkZWYgQ09ORklHX1NMQUJfT0JKX0VYVFxcbm1tL3NsdWIuYy03NzgtXFxuLS1cXG5tbS9zbHViLmM9OTA1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgaW50IG9ial9leHRzX29mZnNldF9pbl9vYmplY3Qoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtOTEwLVxcbm1tL3NsdWIuYzo5MTE6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTkxMi1cXG4tLVxcbm1tL3NsdWIuYz0xMDMzPXN0YXRpYyBzdHJ1Y3QgdHJhY2sgKmdldF90cmFjayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqb2JqZWN0LFxcbi0tXFxubW0vc2x1Yi5jLTEwNDItXFxubW0vc2x1Yi5jOjEwNDM6I2lmZGVmIENPTkZJR19TVEFDS0RFUE9UXFxubW0vc2x1Yi5jLTEwNDQtc3RhdGljIG5vaW5saW5lIGRlcG90X3N0YWNrX2hhbmRsZV90IHNldF90cmFja19wcmVwYXJlKGdmcF90IGdmcF9mbGFncylcXG4tLVxcbm1tL3NsdWIuYz0xMDYyPXN0YXRpYyB2b2lkIHNldF90cmFja191cGRhdGUoc3RydWN0IGttZW1fY2FjaGUgKnMsIHZvaWQgKm9iamVjdCxcXG4tLVxcbm1tL3NsdWIuYy0xMDY3LVxcbm1tL3NsdWIuYzoxMDY4OiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxcbm1tL3NsdWIuYy0xMDY5LVxcdHAtXFx1MDAzZWhhbmRsZSA9IGhhbmRsZTtcXG4tLVxcbm1tL3NsdWIuYz0xMDk2PXN0YXRpYyB2b2lkIHByaW50X3RyYWNrKGNvbnN0IGNoYXIgKnMsIHN0cnVjdCB0cmFjayAqdCwgdW5zaWduZWQgbG9uZyBwcl90aW1lKVxcbi0tXFxubW0vc2x1Yi5jLTExMDQtXFx0ICAgICAgIHMsICh2b2lkICopdC1cXHUwMDNlYWRkciwgcHJfdGltZSAtIHQtXFx1MDAzZXdoZW4sIHQtXFx1MDAzZWNwdSwgdC1cXHUwMDNlcGlkKTtcXG5tbS9zbHViLmM6MTEwNTojaWZkZWYgQ09ORklHX1NUQUNLREVQT1RcXG5tbS9zbHViLmMtMTEwNi1cXHRoYW5kbGUgPSBSRUFEX09OQ0UodC1cXHUwMDNlaGFuZGxlKTtcXG4tLVxcbm1tL3NsdWIuYz0xMjk2PXN0YXRpYyB2b2lkIHJlc3RvcmVfYnl0ZXMoc3RydWN0IGttZW1fY2FjaGUgKnMsIGNvbnN0IGNoYXIgKm1lc3NhZ2UsIHU4IGRhdGEsXFxuLS1cXG5tbS9zbHViLmMtMTMwMi1cXG5tbS9zbHViLmM6MTMwMzojaWZkZWYgQ09ORklHX0tNU0FOXFxubW0vc2x1Yi5jLTEzMDQtI2RlZmluZSBwYWRfY2hlY2tfYXR0cmlidXRlcyBub2lubGluZSBfX25vX2ttc2FuX2NoZWNrc1xcbi0tXFxubW0vc2x1Yi5jPTIwNDU9c3RhdGljIGlubGluZSB2b2lkIGRlY19zbGFic19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBpbnQgbm9kZSxcXG4tLVxcbm1tL3NsdWIuYy0yMDYwLVxcbm1tL3NsdWIuYzoyMDYxOiNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxubW0vc2x1Yi5jLTIwNjItXFxubW0vc2x1Yi5jOjIwNjM6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HX0RFQlVHXFxubW0vc2x1Yi5jLTIwNjQtXFxuLS1cXG5tbS9zbHViLmM9MjE1Nj1pbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE5My1cXHRuZXdfZXh0cyA9ICh1bnNpZ25lZCBsb25nKXZlYztcXG5tbS9zbHViLmM6MjE5NDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2x1Yi5jLTIxOTUtXFx0bmV3X2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xcbi0tXFxubW0vc2x1Yi5jPTIyNzA9c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtMjI4OS1cXG5tbS9zbHViLmM6MjI5MDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2x1Yi5jLTIyOTEtXFx0XFx0b2JqX2V4dHMgfD0gTUVNQ0dfREFUQV9PQkpFWFRTO1xcbi0tXFxubW0vc2x1Yi5jLTIzMDYtXFxubW0vc2x1Yi5jOjIzMDc6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsdWIuYy0yMzA4LVxcdFxcdG9ial9leHRzIHw9IE1FTUNHX0RBVEFfT0JKRVhUUztcXG4tLVxcbm1tL3NsdWIuYz0yMzM1PXN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTIzNDEtXFxubW0vc2x1Yi5jOjIzNDI6I2lmZGVmIENPTkZJR19NRU1fQUxMT0NfUFJPRklMSU5HXFxubW0vc2x1Yi5jLTIzNDMtXFxuLS1cXG5tbS9zbHViLmM9MjQ0Nj1hbGxvY190YWdnaW5nX3NsYWJfZnJlZV9ob29rKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqKnAsXFxuLS1cXG5tbS9zbHViLmMtMjQ1My1cXG5tbS9zbHViLmM6MjQ1NDojaWZkZWYgQ09ORklHX01FTUNHXFxubW0vc2x1Yi5jLTI0NTUtXFxuLS1cXG5tbS9zbHViLmM9MjU3Nj1zdGF0aWMgaW5saW5lIGJvb2wgbWVtY2dfc2xhYl9wb3N0X2NoYXJnZSh2b2lkICpwLCBnZnBfdCBmbGFncylcXG4tLVxcbm1tL3NsdWIuYy0yNTgxLVxcbm1tL3NsdWIuYzoyNTgyOiNpZmRlZiBDT05GSUdfU0xVQl9SQ1VfREVCVUdcXG5tbS9zbHViLmMtMjU4My1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpO1xcbi0tXFxubW0vc2x1Yi5jPTI2MTg9Ym9vbCBzbGFiX2ZyZWVfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgdm9pZCAqeCwgYm9vbCBpbml0LFxcbi0tXFxubW0vc2x1Yi5jLTI2NDYtXFxubW0vc2x1Yi5jOjI2NDc6I2lmZGVmIENPTkZJR19TTFVCX1JDVV9ERUJVR1xcbm1tL3NsdWIuYy0yNjQ4LVxcdGlmIChzdGlsbF9hY2Nlc3NpYmxlKSB7XFxuLS1cXG5tbS9zbHViLmM9MzI3ND1zdGF0aWMgaW5saW5lIHN0cnVjdCBzbGFiICphbGxvY19zbGFiX3BhZ2UoZ2ZwX3QgZmxhZ3MsIGludCBub2RlLFxcbi0tXFxubW0vc2x1Yi5jLTMzMDAtXFxubW0vc2x1Yi5jOjMzMDE6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX1JBTkRPTVxcbm1tL3NsdWIuYy0zMzAyLS8qIFByZS1pbml0aWFsaXplIHRoZSByYW5kb20gc2VxdWVuY2UgY2FjaGUgKi9cXG4tLVxcbm1tL3NsdWIuYz0zNTY5PXN0YXRpYyB2b2lkICphbGxvY19zaW5nbGVfZnJvbV9wYXJ0aWFsKHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbi0tXFxubW0vc2x1Yi5jLTM1NzUtXFxubW0vc2x1Yi5jOjM1NzY6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTM1NzctXFx0aWYgKHMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0xBQl9DT05TSVNURU5DWV9DSEVDS1MpIHtcXG4tLVxcbm1tL3NsdWIuYz0zNjAzPXN0YXRpYyBpbmxpbmUgdm9pZCAqbmV4dF9zbGFiX29iaihzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy0zNjA1LXtcXG5tbS9zbHViLmM6MzYwNjojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXFxubW0vc2x1Yi5jLTM2MDctXFx0aWYgKGl0ZXItXFx1MDAzZXJhbmRvbSkge1xcbi0tXFxubW0vc2x1Yi5jPTM2NTM9c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfaXRlcihzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMzY1OS1cXG5tbS9zbHViLmM6MzY2MDojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXFxubW0vc2x1Yi5jLTM2NjEtXFx0aXRlci1cXHUwMDNlcmFuZG9tID0gKHNsYWItXFx1MDAzZW9iamVjdHMgXFx1MDAzZT0gMiBcXHUwMDI2XFx1MDAyNiBzLVxcdTAwM2VyYW5kb21fc2VxKTtcXG4tLVxcbm1tL3NsdWIuYz0zODg1PXN0YXRpYyB2b2lkICpnZXRfZnJvbV9hbnlfcGFydGlhbChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwX2ZsYWdzLFxcbi0tXFxubW0vc2x1Yi5jLTM4ODcte1xcbm1tL3NsdWIuYzozODg4OiNpZmRlZiBDT05GSUdfTlVNQVxcbm1tL3NsdWIuYy0zODg5LVxcdHN0cnVjdCB6b25lbGlzdCAqem9uZWxpc3Q7XFxuLS1cXG5tbS9zbHViLmM9NDE2Nj1zdGF0aWMgaW50IHNsdWJfY3B1X2RlYWQodW5zaWduZWQgaW50IGNwdSlcXG4tLVxcbm1tL3NsdWIuYy00MTc4LVxcbm1tL3NsdWIuYzo0MTc5OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00MTgwLXN0YXRpYyBpbnQgY291bnRfZnJlZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz00MjUwPXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvdW50X3BhcnRpYWwoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbixcXG4tLVxcbm1tL3NsdWIuYy00MjY0LVxcbm1tL3NsdWIuYzo0MjY1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy00MjY2LSNkZWZpbmUgTUFYX1BBUlRJQUxfVE9fU0NBTiAxMDAwMFxcbi0tXFxubW0vc2x1Yi5jPTQ1MjM9c3RhdGljIHZvaWQgKl9fc2xhYl9hbGxvY19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBnZnBmbGFncywgaW50IG5vZGUsXFxuLS1cXG5tbS9zbHViLmMtNDUyNy1cXG5tbS9zbHViLmM6NDUyODojaWZkZWYgQ09ORklHX05VTUFcXG5tbS9zbHViLmMtNDUyOS1cXHRpZiAoc3RhdGljX2JyYW5jaF91bmxpa2VseShcXHUwMDI2c3RyaWN0X251bWEpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9zbHViLmM9NDc1MD12b2lkICphbGxvY19mcm9tX3BjcyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MsIGludCBub2RlKVxcbi0tXFxubW0vc2x1Yi5jLTQ3NTUtXFxubW0vc2x1Yi5jOjQ3NTY6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTQ3NTctXFx0aWYgKHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNnN0cmljdF9udW1hKSBcXHUwMDI2XFx1MDAyNlxcbi0tXFxubW0vc2x1Yi5jPTYxNDg9c3RhdGljIF9fYWx3YXlzX2lubGluZSBib29sIGNhbl9mcmVlX3RvX3BjcyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYy02MTU3LVxcbm1tL3NsdWIuYzo2MTU4OiNpZmRlZiBDT05GSUdfSEFWRV9NRU1PUllMRVNTX05PREVTXFxubW0vc2x1Yi5jLTYxNTktXFx0LypcXG4tLVxcbm1tL3NsdWIuYz02MzkzPXZvaWQgc2xhYl9mcmVlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqb2JqZWN0LFxcbi0tXFxubW0vc2x1Yi5jLTY0MDgtXFxubW0vc2x1Yi5jOjY0MDk6I2lmZGVmIENPTkZJR19NRU1DR1xcbm1tL3NsdWIuYy02NDEwLS8qIERvIG5vdCBpbmxpbmUgdGhlIHJhcmUgbWVtY2cgY2hhcmdpbmcgZmFpbGVkIHBhdGggaW50byB0aGUgYWxsb2NhdGlvbiBwYXRoICovXFxuLS1cXG5tbS9zbHViLmM9NjQyND12b2lkIHNsYWJfZnJlZV9idWxrKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYiwgdm9pZCAqaGVhZCxcXG4tLVxcbm1tL3NsdWIuYy02NDM4LVxcbm1tL3NsdWIuYzo2NDM5OiNpZmRlZiBDT05GSUdfU0xVQl9SQ1VfREVCVUdcXG5tbS9zbHViLmMtNjQ0MC1zdGF0aWMgdm9pZCBzbGFiX2ZyZWVfYWZ0ZXJfcmN1X2RlYnVnKHN0cnVjdCByY3VfaGVhZCAqcmN1X2hlYWQpXFxuLS1cXG5tbS9zbHViLmMtNjQ2Ny1cXG5tbS9zbHViLmM6NjQ2ODojaWZkZWYgQ09ORklHX0tBU0FOX0dFTkVSSUNcXG5tbS9zbHViLmMtNjQ2OS12b2lkIF9fX2NhY2hlX2ZyZWUoc3RydWN0IGttZW1fY2FjaGUgKmNhY2hlLCB2b2lkICp4LCB1bnNpZ25lZCBsb25nIGFkZHIpXFxuLS1cXG5tbS9zbHViLmM9NjUzMD1zdGF0aWMgaW5saW5lIHNpemVfdCBzbGFiX2tzaXplKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTY1MzMtXFxubW0vc2x1Yi5jOjY1MzQ6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTY1MzUtXFx0LypcXG4tLVxcbm1tL3NsdWIuYz02NTU5PXN0YXRpYyBzaXplX3QgX19rc2l6ZShjb25zdCB2b2lkICpvYmplY3QpXFxuLS1cXG5tbS9zbHViLmMtNjU3Ni1cXG5tbS9zbHViLmM6NjU3NzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNjU3OC1cXHRza2lwX29yaWdfc2l6ZV9jaGVjayhzbGFiLVxcdTAwM2VzbGFiX2NhY2hlLCBvYmplY3QpO1xcbi0tXFxubW0vc2x1Yi5jPTcxNzc9X19yZWZpbGxfb2JqZWN0c19ub2RlKHN0cnVjdCBrbWVtX2NhY2hlICpzLCB2b2lkICoqcCwgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgbWluLFxcbi0tXFxubW0vc2x1Yi5jLTcyNTAtXFxubW0vc2x1Yi5jOjcyNTE6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTcyNTItc3RhdGljIHVuc2lnbmVkIGludFxcbi0tXFxubW0vc2x1Yi5jPTc1OTQ9aW5pdF9rbWVtX2NhY2hlX25vZGUoc3RydWN0IGttZW1fY2FjaGVfbm9kZSAqbilcXG4tLVxcbm1tL3NsdWIuYy03NTk4LVxcdElOSVRfTElTVF9IRUFEKFxcdTAwMjZuLVxcdTAwM2VwYXJ0aWFsKTtcXG5tbS9zbHViLmM6NzU5OTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNzYwMC1cXHRhdG9taWNfbG9uZ19zZXQoXFx1MDAyNm4tXFx1MDAzZW5yX3NsYWJzLCAwKTtcXG4tLVxcbm1tL3NsdWIuYy03NjA1LVxcbm1tL3NsdWIuYzo3NjA2OiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy03NjA3LXN0YXRpYyBpbmxpbmUgaW50IGFsbG9jX2ttZW1fY2FjaGVfc3RhdHMoc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmM9NzY3NT1zdGF0aWMgdm9pZCBlYXJseV9rbWVtX2NhY2hlX25vZGVfYWxsb2MoaW50IG5vZGUpXFxuLS1cXG5tbS9zbHViLmMtNzY5OC1cXG5tbS9zbHViLmM6NzY5OTojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtNzcwMC1cXHRpbml0X29iamVjdChrbWVtX2NhY2hlX25vZGUsIG4sIFNMVUJfUkVEX0FDVElWRSk7XFxuLS1cXG5tbS9zbHViLmM9NzczNz12b2lkIF9fa21lbV9jYWNoZV9yZWxlYXNlKHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTc3NDAtXFx0cGNzX2Rlc3Ryb3kocyk7XFxubW0vc2x1Yi5jOjc3NDE6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTc3NDItXFx0ZnJlZV9wZXJjcHUocy1cXHUwMDNlY3B1X3N0YXRzKTtcXG4tLVxcbm1tL3NsdWIuYz03ODM3PXN0YXRpYyBpbnQgY2FsY3VsYXRlX3NpemVzKHN0cnVjdCBrbWVtX2NhY2hlX2FyZ3MgKmFyZ3MsIHN0cnVjdCBrbWVtX2NhY2hlICpzKVxcbi0tXFxubW0vc2x1Yi5jLTc4NTAtXFxubW0vc2x1Yi5jOjc4NTE6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTc4NTItXFx0LypcXG4tLVxcbm1tL3NsdWIuYy03OTEzLVxcbm1tL3NsdWIuYzo3OTE0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03OTE1LVxcdGlmIChmbGFncyBcXHUwMDI2IFNMQUJfU1RPUkVfVVNFUikge1xcbi0tXFxubW0vc2x1Yi5jLTc5MjgtXFx0a2FzYW5fY2FjaGVfY3JlYXRlKHMsIFxcdTAwMjZzaXplLCBcXHUwMDI2cy1cXHUwMDNlZmxhZ3MpO1xcbm1tL3NsdWIuYzo3OTI5OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy03OTMwLVxcdGlmIChmbGFncyBcXHUwMDI2IFNMQUJfUkVEX1pPTkUpIHtcXG4tLVxcbm1tL3NsdWIuYz03OTkzPXN0YXRpYyB2b2lkIGxpc3Rfc2xhYl9vYmplY3RzKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtNzk5NC17XFxubW0vc2x1Yi5jOjc5OTU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTc5OTYtXFx0dm9pZCAqYWRkciA9IHNsYWJfYWRkcmVzcyhzbGFiKTtcXG4tLVxcbm1tL3NsdWIuYz04MDYwPWludCBfX2ttZW1fY2FjaGVfc2h1dGRvd24oc3RydWN0IGttZW1fY2FjaGUgKnMpXFxuLS1cXG5tbS9zbHViLmMtODA4Ni1cXG5tbS9zbHViLmM6ODA4NzojaWZkZWYgQ09ORklHX1BSSU5US1xcbm1tL3NsdWIuYy04MDg4LXZvaWQgX19rbWVtX29ial9pbmZvKHN0cnVjdCBrbWVtX29ial9pbmZvICprcHAsIHZvaWQgKm9iamVjdCwgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtODEwMi1cXHRvYmpwMCA9IGthc2FuX3Jlc2V0X3RhZyhvYmplY3QpO1xcbm1tL3NsdWIuYzo4MTAzOiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy04MTA0LVxcdG9ianAgPSByZXN0b3JlX3JlZF9sZWZ0KHMsIG9ianAwKTtcXG4tLVxcbm1tL3NsdWIuYy04MTE1LVxcdFxcdHJldHVybjtcXG5tbS9zbHViLmM6ODExNjojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtODExNy1cXHRvYmpwID0gZml4dXBfcmVkX2xlZnQocywgb2JqcCk7XFxuLS1cXG5tbS9zbHViLmMtODExOS1cXHRrcHAtXFx1MDAzZWtwX3JldCA9ICh2b2lkICopdHJhY2twLVxcdTAwM2VhZGRyO1xcbm1tL3NsdWIuYzo4MTIwOiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxcbm1tL3NsdWIuYy04MTIxLVxcdHtcXG4tLVxcbm1tL3NsdWIuYz04MTkzPWNvcmVfcGFyYW0oc2x1Yl9taW5fb2JqZWN0cywgc2x1Yl9taW5fb2JqZWN0cywgdWludCwgMCk7XFxubW0vc2x1Yi5jLTgxOTQtXFxubW0vc2x1Yi5jOjgxOTU6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTgxOTYtc3RhdGljIGludCBfX2luaXQgc2V0dXBfc2xhYl9zdHJpY3RfbnVtYShjb25zdCBjaGFyICpzdHIsIGNvbnN0IHN0cnVjdCBrZXJuZWxfcGFyYW0gKmtwKVxcbi0tXFxubW0vc2x1Yi5jPTgyMTI9X19jb3JlX3BhcmFtX2NiKHNsYWJfc3RyaWN0X251bWEsIFxcdTAwMjZwYXJhbV9vcHNfc2xhYl9zdHJpY3RfbnVtYSwgTlVMTCwgMCk7XFxuLS1cXG5tbS9zbHViLmMtODIxNS1cXG5tbS9zbHViLmM6ODIxNjojaWZkZWYgQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZXFxubW0vc2x1Yi5jLTgyMTctLypcXG4tLVxcbm1tL3NsdWIuYz04NDYxPXN0YXRpYyBzdHJ1Y3Qga21lbV9jYWNoZSAqIF9faW5pdCBib290c3RyYXAoc3RydWN0IGttZW1fY2FjaGUgKnN0YXRpY19jYWNoZSlcXG4tLVxcbm1tL3NsdWIuYy04NDc0LVxcbm1tL3NsdWIuYzo4NDc1OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy04NDc2LVxcdFxcdGxpc3RfZm9yX2VhY2hfZW50cnkocCwgXFx1MDAyNm4tXFx1MDAzZWZ1bGwsIHNsYWJfbGlzdClcXG4tLVxcbm1tL3NsdWIuYz04NjEzPXZvaWQgX19pbml0IGttZW1fY2FjaGVfaW5pdF9sYXRlKHZvaWQpXFxuLS1cXG5tbS9zbHViLmMtODYxNy1cXHRXQVJOX09OKCFmbHVzaHdxKTtcXG5tbS9zbHViLmM6ODYxODojaWZkZWYgQ09ORklHX1NMQUJfRlJFRUxJU1RfUkFORE9NXFxubW0vc2x1Yi5jLTg2MTktXFx0cHJhbmRvbV9pbml0X29uY2UoXFx1MDAyNnNsYWJfcm5kX3N0YXRlKTtcXG4tLVxcbm1tL3NsdWIuYz04NjIzPWludCBkb19rbWVtX2NhY2hlX2NyZWF0ZShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY29uc3QgY2hhciAqbmFtZSxcXG4tLVxcbm1tL3NsdWIuYy04NjMyLVxcdHMtXFx1MDAzZWZsYWdzID0ga21lbV9jYWNoZV9mbGFncyhmbGFncywgcy1cXHUwMDNlbmFtZSk7XFxubW0vc2x1Yi5jOjg2MzM6I2lmZGVmIENPTkZJR19TTEFCX0ZSRUVMSVNUX0hBUkRFTkVEXFxubW0vc2x1Yi5jLTg2MzQtXFx0cy1cXHUwMDNlcmFuZG9tID0gZ2V0X3JhbmRvbV9sb25nKCk7XFxuLS1cXG5tbS9zbHViLmMtODYzNy1cXHRzLVxcdTAwM2VjdG9yID0gYXJncy1cXHUwMDNlY3RvcjtcXG5tbS9zbHViLmM6ODYzODojaWZkZWYgQ09ORklHX0hBUkRFTkVEX1VTRVJDT1BZXFxubW0vc2x1Yi5jLTg2MzktXFx0cy1cXHUwMDNldXNlcm9mZnNldCA9IGFyZ3MtXFx1MDAzZXVzZXJvZmZzZXQ7XFxuLS1cXG5tbS9zbHViLmMtODY1Ny1cXG5tbS9zbHViLmM6ODY1ODojaWZkZWYgc3lzdGVtX2hhc19mcmVlbGlzdF9hYmFcXG5tbS9zbHViLmMtODY1OS1cXHRpZiAoc3lzdGVtX2hhc19mcmVlbGlzdF9hYmEoKSBcXHUwMDI2XFx1MDAyNiAhKHMtXFx1MDAzZWZsYWdzIFxcdTAwMjYgU0xBQl9OT19DTVBYQ0hHKSkge1xcbi0tXFxubW0vc2x1Yi5jLTg2NzctXFxubW0vc2x1Yi5jOjg2Nzg6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTg2NzktXFx0cy1cXHUwMDNlcmVtb3RlX25vZGVfZGVmcmFnX3JhdGlvID0gMTAwMDtcXG4tLVxcbm1tL3NsdWIuYy04NjkwLVxcbm1tL3NsdWIuYzo4NjkxOiNpZmRlZiBDT05GSUdfU0xVQl9TVEFUU1xcbm1tL3NsdWIuYy04NjkyLVxcdGlmICghYWxsb2Nfa21lbV9jYWNoZV9zdGF0cyhzKSlcXG4tLVxcbm1tL3NsdWIuYy04NzIxLVxcbm1tL3NsdWIuYzo4NzIyOiNpZmRlZiBTTEFCX1NVUFBPUlRTX1NZU0ZTXFxubW0vc2x1Yi5jLTg3MjMtc3RhdGljIGludCBjb3VudF9pbnVzZShzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4tLVxcbm1tL3NsdWIuYz04NzI4PXN0YXRpYyBpbnQgY291bnRfdG90YWwoc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmMtODczMy1cXG5tbS9zbHViLmM6ODczNDojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtODczNS1zdGF0aWMgdm9pZCB2YWxpZGF0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYixcXG4tLVxcbm1tL3NsdWIuYz04ODE2PUVYUE9SVF9TWU1CT0wodmFsaWRhdGVfc2xhYl9jYWNoZSk7XFxubW0vc2x1Yi5jLTg4MTctXFxubW0vc2x1Yi5jOjg4MTg6I2lmZGVmIENPTkZJR19ERUJVR19GU1xcbm1tL3NsdWIuYy04ODE5LS8qXFxuLS1cXG5tbS9zbHViLmM9ODg3ND1zdGF0aWMgaW50IGFkZF9sb2NhdGlvbihzdHJ1Y3QgbG9jX3RyYWNrICp0LCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy04ODg0LVxcbm1tL3NsdWIuYzo4ODg1OiNpZmRlZiBDT05GSUdfU1RBQ0tERVBPVFxcbm1tL3NsdWIuYy04ODg2LVxcdGhhbmRsZSA9IFJFQURfT05DRSh0cmFjay1cXHUwMDNlaGFuZGxlKTtcXG4tLVxcbm1tL3NsdWIuYz04OTY2PXN0YXRpYyB2b2lkIHByb2Nlc3Nfc2xhYihzdHJ1Y3QgbG9jX3RyYWNrICp0LCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy04OTg0LVxcbm1tL3NsdWIuYzo4OTg1OiNpZmRlZiBTTEFCX1NVUFBPUlRTX1NZU0ZTXFxubW0vc2x1Yi5jLTg5ODYtZW51bSBzbGFiX3N0YXRfdHlwZSB7XFxuLS1cXG5tbS9zbHViLmM9OTAwMD1zdGF0aWMgc3NpemVfdCBzaG93X3NsYWJfb2JqZWN0cyhzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4tLVxcbm1tL3NsdWIuYy05MDIzLVxcbm1tL3NsdWIuYzo5MDI0OiNpZmRlZiBDT05GSUdfU0xVQl9ERUJVR1xcbm1tL3NsdWIuYy05MDI1LVxcdGlmIChmbGFncyBcXHUwMDI2IFNPX0FMTCkge1xcbi0tXFxubW0vc2x1Yi5jLTkwNTctXFx0bGVuICs9IHN5c2ZzX2VtaXRfYXQoYnVmLCBsZW4sIFxcXCIlbHVcXFwiLCB0b3RhbCk7XFxubW0vc2x1Yi5jOjkwNTg6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTkwNTktXFx0Zm9yIChub2RlID0gMDsgbm9kZSBcXHUwMDNjIG5yX25vZGVfaWRzOyBub2RlKyspIHtcXG4tLVxcbm1tL3NsdWIuYz05MjExPVNMQUJfQVRUUl9STyhod2NhY2hlX2FsaWduKTtcXG5tbS9zbHViLmMtOTIxMi1cXG5tbS9zbHViLmM6OTIxMzojaWZkZWYgQ09ORklHX1pPTkVfRE1BXFxubW0vc2x1Yi5jLTkyMTQtc3RhdGljIHNzaXplX3QgY2FjaGVfZG1hX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZilcXG4tLVxcbm1tL3NsdWIuYz05MjE4PVNMQUJfQVRUUl9STyhjYWNoZV9kbWEpO1xcbi0tXFxubW0vc2x1Yi5jLTkyMjAtXFxubW0vc2x1Yi5jOjkyMjE6I2lmZGVmIENPTkZJR19IQVJERU5FRF9VU0VSQ09QWVxcbm1tL3NsdWIuYy05MjIyLXN0YXRpYyBzc2l6ZV90IHVzZXJzaXplX3Nob3coc3RydWN0IGttZW1fY2FjaGUgKnMsIGNoYXIgKmJ1ZilcXG4tLVxcbm1tL3NsdWIuYz05MjMzPVNMQUJfQVRUUl9STyhkZXN0cm95X2J5X3JjdSk7XFxubW0vc2x1Yi5jLTkyMzQtXFxubW0vc2x1Yi5jOjkyMzU6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTkyMzYtc3RhdGljIHNzaXplX3Qgc2xhYnNfc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVxcbi0tXFxubW0vc2x1Yi5jPTkzMDQ9U0xBQl9BVFRSKHZhbGlkYXRlKTtcXG4tLVxcbm1tL3NsdWIuYy05MzA3LVxcbm1tL3NsdWIuYzo5MzA4OiNpZmRlZiBDT05GSUdfRkFJTFNMQUJcXG5tbS9zbHViLmMtOTMwOS1zdGF0aWMgc3NpemVfdCBmYWlsc2xhYl9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpXFxuLS1cXG5tbS9zbHViLmM9OTM0ND1TTEFCX0FUVFIoc2hyaW5rKTtcXG5tbS9zbHViLmMtOTM0NS1cXG5tbS9zbHViLmM6OTM0NjojaWZkZWYgQ09ORklHX05VTUFcXG5tbS9zbHViLmMtOTM0Ny1zdGF0aWMgc3NpemVfdCByZW1vdGVfbm9kZV9kZWZyYWdfcmF0aW9fc2hvdyhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmKVxcbi0tXFxubW0vc2x1Yi5jPTkzNjg9U0xBQl9BVFRSKHJlbW90ZV9ub2RlX2RlZnJhZ19yYXRpbyk7XFxuLS1cXG5tbS9zbHViLmMtOTM3MC1cXG5tbS9zbHViLmM6OTM3MTojaWZkZWYgQ09ORklHX1NMVUJfU1RBVFNcXG5tbS9zbHViLmMtOTM3Mi1zdGF0aWMgaW50IHNob3dfc3RhdChzdHJ1Y3Qga21lbV9jYWNoZSAqcywgY2hhciAqYnVmLCBlbnVtIHN0YXRfaXRlbSBzaSlcXG4tLVxcbm1tL3NsdWIuYy05MzkwLVxcbm1tL3NsdWIuYzo5MzkxOiNpZmRlZiBDT05GSUdfU01QXFxubW0vc2x1Yi5jLTkzOTItXFx0Zm9yX2VhY2hfb25saW5lX2NwdShjcHUpIHtcXG4tLVxcbm1tL3NsdWIuYz05NDUyPVNUQVRfQVRUUihTSEVBRl9SRVRVUk5fU0xPVywgc2hlYWZfcmV0dXJuX3Nsb3cpO1xcbi0tXFxubW0vc2x1Yi5jLTk0NTQtXFxubW0vc2x1Yi5jOjk0NTU6I2lmZGVmIENPTkZJR19LRkVOQ0VcXG5tbS9zbHViLmMtOTQ1Ni1zdGF0aWMgc3NpemVfdCBza2lwX2tmZW5jZV9zaG93KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBjaGFyICpidWYpXFxuLS1cXG5tbS9zbHViLmM9OTQ3OD1zdGF0aWMgY29uc3Qgc3RydWN0IGF0dHJpYnV0ZSAqY29uc3Qgc2xhYl9hdHRyc1tdID0ge1xcbi0tXFxubW0vc2x1Yi5jLTk0OTYtXFx0XFx1MDAyNnNsYWJzX2NwdV9wYXJ0aWFsX2F0dHIuYXR0cixcXG5tbS9zbHViLmM6OTQ5NzojaWZkZWYgQ09ORklHX1NMVUJfREVCVUdcXG5tbS9zbHViLmMtOTQ5OC1cXHRcXHUwMDI2dG90YWxfb2JqZWN0c19hdHRyLmF0dHIsXFxuLS1cXG5tbS9zbHViLmMtOTUwNy0jZW5kaWZcXG5tbS9zbHViLmM6OTUwODojaWZkZWYgQ09ORklHX1pPTkVfRE1BXFxubW0vc2x1Yi5jLTk1MDktXFx0XFx1MDAyNmNhY2hlX2RtYV9hdHRyLmF0dHIsXFxubW0vc2x1Yi5jLTk1MTAtI2VuZGlmXFxubW0vc2x1Yi5jOjk1MTE6I2lmZGVmIENPTkZJR19OVU1BXFxubW0vc2x1Yi5jLTk1MTItXFx0XFx1MDAyNnJlbW90ZV9ub2RlX2RlZnJhZ19yYXRpb19hdHRyLmF0dHIsXFxubW0vc2x1Yi5jLTk1MTMtI2VuZGlmXFxubW0vc2x1Yi5jOjk1MTQ6I2lmZGVmIENPTkZJR19TTFVCX1NUQVRTXFxubW0vc2x1Yi5jLTk1MTUtXFx0XFx1MDAyNmFsbG9jX2Zhc3RwYXRoX2F0dHIuYXR0cixcXG4tLVxcbm1tL3NsdWIuYy05NTQxLSNlbmRpZlxcbm1tL3NsdWIuYzo5NTQyOiNpZmRlZiBDT05GSUdfRkFJTFNMQUJcXG5tbS9zbHViLmMtOTU0My1cXHRcXHUwMDI2ZmFpbHNsYWJfYXR0ci5hdHRyLFxcbm1tL3NsdWIuYy05NTQ0LSNlbmRpZlxcbm1tL3NsdWIuYzo5NTQ1OiNpZmRlZiBDT05GSUdfSEFSREVORURfVVNFUkNPUFlcXG5tbS9zbHViLmMtOTU0Ni1cXHRcXHUwMDI2dXNlcnNpemVfYXR0ci5hdHRyLFxcbm1tL3NsdWIuYy05NTQ3LSNlbmRpZlxcbm1tL3NsdWIuYzo5NTQ4OiNpZmRlZiBDT05GSUdfS0ZFTkNFXFxubW0vc2x1Yi5jLTk1NDktXFx0XFx1MDAyNnNraXBfa2ZlbmNlX2F0dHIuYXR0cixcXG4tLVxcbm1tL3NsdWIuYz05NzkzPXN0YXRpYyBpbnQgc2xhYl9kZWJ1Z2ZzX3Nob3coc3RydWN0IHNlcV9maWxlICpzZXEsIHZvaWQgKnYpXFxuLS1cXG5tbS9zbHViLmMtOTgzNC1cXG5tbS9zbHViLmM6OTgzNTojaWZkZWYgQ09ORklHX1NUQUNLREVQT1RcXG5tbS9zbHViLmMtOTgzNi1cXHRcXHR7XFxuLS1cXG5tbS9zbHViLmM9OTk5OD1fX2luaXRjYWxsKHNsYWJfZGVidWdmc19pbml0KTtcXG4tLVxcbm1tL3NsdWIuYy0xMDAwMi0gKi9cXG5tbS9zbHViLmM6MTAwMDM6I2lmZGVmIENPTkZJR19TTFVCX0RFQlVHXFxubW0vc2x1Yi5jLTEwMDA0LXZvaWQgZ2V0X3NsYWJpbmZvKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYmluZm8gKnNpbmZvKVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mjo1Ni41MDY2NjczOFoiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjg3NzU0NjQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIGhvdyBJJ2QgYXBwcm9hY2ggZGlzc2VjdGluZyB0aGlzIHBpZWNlIG9mIGNvZGUuXG5cbioqSW52ZXN0aWdhdGluZyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaW4gYG1tL3NsdWIuY2AqKlxuXG5BbHJpZ2h0LCB0aGUgY29kZSBJJ20gZm9jdXNpbmcgb24gaXMgaW5zaWRlIGBtbS9zbHViLmNgLiBNeSBpbW1lZGlhdGUgZ29hbCBpcyB0byB1bmRlcnN0YW5kIGhvdyBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgZnVuY3Rpb25zLiBUaW1lIHRvIG5hdmlnYXRlIHRvIGl0cyBkZWZpbml0aW9uLiBJJ3ZlIGdvdCBteSB0cnVzdHkgZWRpdG9yIG9wZW4sIGFuZCBJJ20gaGVhZGluZyBzdHJhaWdodCB0byBsaW5lIDIxNTYuIFJpZ2h0LCBmb3VuZCBpdC4gTm93LCBnaXZlbiB0aGUgbnVhbmNlcyBvZiBrZXJuZWwgY29kZSwgbXkgbmV4dCBtb3ZlIGlzIGNydWNpYWw6IEkgbmVlZCB0byBleGFtaW5lIHRoZSBjb25kaXRpb25hbCBjb21waWxhdGlvbiBkaXJlY3RpdmVzLCB0aGUgYCNpZmRlZmAgYmxvY2tzLCB0aGF0IHN1cnJvdW5kIHRoaXMgZnVuY3Rpb24uIFRoaXMgd2lsbCB0ZWxsIG1lICp3aGVuKiB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5IGNvbXBpbGVkIGludG8gdGhlIGtlcm5lbC4gSXTigJlzIGVzc2VudGlhbCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IGFuZCB0aGUgc2NlbmFyaW9zIGluIHdoaWNoIHRoaXMgZnVuY3Rpb24gaXMgYWN0aXZlLiBUaGlzIHdpbGwgaGVscCBjbGFyaWZ5IHRoZSBmdW5jdGlvbidzIHB1cnBvc2Ugd2l0aGluIHRoZSBicm9hZGVyIG1lbW9yeSBtYW5hZ2VtZW50IGxhbmRzY2FwZSBhbmQgZW5zdXJlIEkgdW5kZXJzdGFuZCB0aGUgaW1wYWN0IGl0IGNhbiBoYXZlIG9uIHN5c3RlbSBiZWhhdmlvci5cblxuXG4iLCJJbnB1dFRva2VucyI6MTgyMjYsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo1NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0MzowMC4xOTQ0MjQ2ODFaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTMzOTEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL3NsdWIuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAyMDUwLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjA1MDpcXHQgKiBUaGUgYWxsb2NhdGVkIG9iamNnIHBvaW50ZXJzIGFycmF5IG9yIHNoZWFmIGlzIG5vdCBhY2NvdW50ZWQgZGlyZWN0bHkuXFxuMjA1MTpcXHQgKiBNb3Jlb3ZlciwgaXQgc2hvdWxkIG5vdCBjb21lIGZyb20gRE1BIGJ1ZmZlciBhbmQgaXMgbm90IHJlYWRpbHlcXG4yMDUyOlxcdCAqIHJlY2xhaW1hYmxlLiBOb2RlIHJlc3RyaWN0aW9uIGZvciB0aGUgcGFyZW50IGFsbG9jYXRpb24gYWxzbyBzaG91bGRcXG4yMDUzOlxcdCAqIG5vdCBhcHBseSB0byB0aGUgc2xhYidzIGludGVybmFsIG9iamVjdHMsIGFzIHdlbGwgYXMgX19HRlBfQ09NUCB1c2VkXFxuMjA1NDpcXHQgKiBmb3IgbmV3IHNsYWIgYWxsb2NhdGlvbnMuXFxuMjA1NTpcXHQgKiBTbyB0aG9zZSBHRlAgYml0cyBzaG91bGQgYmUgbWFza2VkIG9mZi5cXG4yMDU2OlxcdCAqL1xcbjIwNTc6XFx0I2RlZmluZSBPQkpDR1NfQ0xFQVJfTUFTS1xcdChfX0dGUF9ETUEgfCBfX0dGUF9SRUNMQUlNQUJMRSB8IFxcXFxcXG4yMDU4OlxcdFxcdFxcdFxcdFxcdF9fR0ZQX0FDQ09VTlQgfCBfX0dGUF9OT0ZBSUwgfCBcXFxcXFxuMjA1OTpcXHRcXHRcXHRcXHRcXHRfX0dGUF9USElTTk9ERSB8IF9fR0ZQX0NPTVApXFxuMjA2MDpcXHRcXG4yMDYxOlxcdCNpZmRlZiBDT05GSUdfU0xBQl9PQkpfRVhUXFxuMjA2MjpcXHRcXG4yMDYzOlxcdCNpZmRlZiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVR1xcbjIwNjQ6XFx0XFxuMjA2NTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgbWFya19vYmpfY29kZXRhZ19lbXB0eShjb25zdCB2b2lkICpvYmopXFxuMjA2NjpcXHR7XFxuMjA2NzpcXHRcXHRzdHJ1Y3Qgc2xhYiAqb2JqX3NsYWI7XFxuMjA2ODpcXHRcXHR1bnNpZ25lZCBsb25nIHNsYWJfZXh0cztcXG4yMDY5OlxcdFxcbjIwNzA6XFx0XFx0b2JqX3NsYWIgPSB2aXJ0X3RvX3NsYWIob2JqKTtcXG4yMDcxOlxcdFxcdHNsYWJfZXh0cyA9IHNsYWJfb2JqX2V4dHMob2JqX3NsYWIpO1xcbjIwNzI6XFx0XFx0aWYgKHNsYWJfZXh0cykge1xcbjIwNzM6XFx0XFx0XFx0Z2V0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcXG4yMDc0OlxcdFxcdFxcdHVuc2lnbmVkIGludCBvZmZzID0gb2JqX3RvX2luZGV4KG9ial9zbGFiLVxcdTAwM2VzbGFiX2NhY2hlLFxcbjIwNzU6XFx0XFx0XFx0XFx0XFx0XFx0XFx0IG9ial9zbGFiLCBvYmopO1xcbjIwNzY6XFx0XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICpleHQgPSBzbGFiX29ial9leHQob2JqX3NsYWIsXFxuMjA3NzpcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc2xhYl9leHRzLCBvZmZzKTtcXG4yMDc4OlxcdFxcbjIwNzk6XFx0XFx0XFx0aWYgKHVubGlrZWx5KGlzX2NvZGV0YWdfZW1wdHkoXFx1MDAyNmV4dC1cXHUwMDNlcmVmKSkpIHtcXG4yMDgwOlxcdFxcdFxcdFxcdHB1dF9zbGFiX29ial9leHRzKHNsYWJfZXh0cyk7XFxuMjA4MTpcXHRcXHRcXHRcXHRyZXR1cm47XFxuMjA4MjpcXHRcXHRcXHR9XFxuMjA4MzpcXHRcXG4yMDg0OlxcdFxcdFxcdC8qIGNvZGV0YWcgc2hvdWxkIGJlIE5VTEwgaGVyZSAqL1xcbjIwODU6XFx0XFx0XFx0V0FSTl9PTihleHQtXFx1MDAzZXJlZi5jdCk7XFxuMjA4NjpcXHRcXHRcXHRzZXRfY29kZXRhZ19lbXB0eShcXHUwMDI2ZXh0LVxcdTAwM2VyZWYpO1xcbjIwODc6XFx0XFx0XFx0cHV0X3NsYWJfb2JqX2V4dHMoc2xhYl9leHRzKTtcXG4yMDg4OlxcdFxcdH1cXG4yMDg5OlxcdH1cXG4yMDkwOlxcdFxcbjIwOTE6XFx0c3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpXFxuMjA5MjpcXHR7XFxuMjA5MzpcXHRcXHRyZXR1cm4gY21weGNoZyhcXHUwMDI2c2xhYi1cXHUwMDNlb2JqX2V4dHMsIDAsIE9CSkVYVFNfQUxMT0NfRkFJTCkgPT0gMDtcXG4yMDk0OlxcdH1cXG4yMDk1OlxcdFxcbjIwOTY6XFx0c3RhdGljIGlubGluZSB2b2lkIGhhbmRsZV9mYWlsZWRfb2JqZXh0c19hbGxvYyh1bnNpZ25lZCBsb25nIG9ial9leHRzLFxcbjIwOTc6XFx0XFx0XFx0XFx0c3RydWN0IHNsYWJvYmpfZXh0ICp2ZWMsIHVuc2lnbmVkIGludCBvYmplY3RzKVxcbjIwOTg6XFx0e1xcbjIwOTk6XFx0XFx0LypcXG4yMTAwOlxcdFxcdCAqIElmIHZlY3RvciBwcmV2aW91c2x5IGZhaWxlZCB0byBhbGxvY2F0ZSB0aGVuIHdlIGhhdmUgbGl2ZVxcbjIxMDE6XFx0XFx0ICogb2JqZWN0cyB3aXRoIG5vIHRhZyByZWZlcmVuY2UuIE1hcmsgYWxsIHJlZmVyZW5jZXMgaW4gdGhpc1xcbjIxMDI6XFx0XFx0ICogdmVjdG9yIGFzIGVtcHR5IHRvIGF2b2lkIHdhcm5pbmdzIGxhdGVyIG9uLlxcbjIxMDM6XFx0XFx0ICovXFxuMjEwNDpcXHRcXHRpZiAob2JqX2V4dHMgPT0gT0JKRVhUU19BTExPQ19GQUlMKSB7XFxuMjEwNTpcXHRcXHRcXHR1bnNpZ25lZCBpbnQgaTtcXG4yMTA2OlxcdFxcbjIxMDc6XFx0XFx0XFx0Zm9yIChpID0gMDsgaSBcXHUwMDNjIG9iamVjdHM7IGkrKylcXG4yMTA4OlxcdFxcdFxcdFxcdHNldF9jb2RldGFnX2VtcHR5KFxcdTAwMjZ2ZWNbaV0ucmVmKTtcXG4yMTA5OlxcdFxcdH1cXG4yMTEwOlxcdH1cXG4yMTExOlxcdFxcbjIxMTI6XFx0I2Vsc2UgLyogQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdfREVCVUcgKi9cXG4yMTEzOlxcdFxcbjIxMTQ6XFx0c3RhdGljIGlubGluZSB2b2lkIG1hcmtfb2JqX2NvZGV0YWdfZW1wdHkoY29uc3Qgdm9pZCAqb2JqKSB7fVxcbjIxMTU6XFx0c3RhdGljIGlubGluZSBib29sIG1hcmtfZmFpbGVkX29iamV4dHNfYWxsb2Moc3RydWN0IHNsYWIgKnNsYWIpIHsgcmV0dXJuIGZhbHNlOyB9XFxuMjExNjpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaGFuZGxlX2ZhaWxlZF9vYmpleHRzX2FsbG9jKHVuc2lnbmVkIGxvbmcgb2JqX2V4dHMsXFxuMjExNzpcXHRcXHRcXHRcXHRzdHJ1Y3Qgc2xhYm9ial9leHQgKnZlYywgdW5zaWduZWQgaW50IG9iamVjdHMpIHt9XFxuMjExODpcXHRcXG4yMTE5OlxcdCNlbmRpZiAvKiBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR19ERUJVRyAqL1xcbjIxMjA6XFx0XFxuMjEyMTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbjIxMjI6XFx0e1xcbjIxMjM6XFx0XFx0c2xhYi1cXHUwMDNlb2JqX2V4dHMgPSAwO1xcbjIxMjQ6XFx0fVxcbjIxMjU6XFx0XFxuMjEyNjpcXHQvKlxcbjIxMjc6XFx0ICogU2l6ZSBvZiB0aGUgc2xhYm9ial9leHQgYXJyYXkgZm9yIEBzbGFiLlxcbjIxMjg6XFx0ICpcXG4yMTI5OlxcdCAqIFRoZSBhcnJheSBpcyBpdHNlbGYga21hbGxvYygpJ2QuIElmIGl0IGNhbWUgZnJvbSB0aGUgc2FtZSBvciBhIHNtYWxsZXJcXG4yMTMwOlxcdCAqIGttYWxsb2MgY2FjaGUgdGhhbiBAcywgdGhlIFxcXCJzbGFiIGhvbGRzIGFub3RoZXIgc2xhYidzIGFycmF5XFxcIiByZWxhdGlvbiBjb3VsZFxcbjIxMzE6XFx0ICogZm9ybSBhIGN5Y2xlIChzZWxmLCBvciBlLmcuIGttYWxsb2MtNTEyIFxcdTAwM2MtXFx1MDAzZSBrbWFsbG9jLTFrKSB0aGF0IHBpbnMgdGhlIHNsYWJzXFxuMjEzMjpcXHQgKiBmb3JldmVyIGFuZCByZWN1cnNlcyB2aWEgZnJlZV9zbGFiX29ial9leHRzKCkgLVxcdTAwM2Uga2ZyZWUoKSAtXFx1MDAzZSBkaXNjYXJkX3NsYWIoKVxcbjIxMzM6XFx0ICogYXQgdGVhcmRvd24uIEZvcmNlIGl0IGludG8gYSBzdHJpY3RseSBsYXJnZXIgY2FjaGUgdG8ga2VlcCB0aGF0IHJlbGF0aW9uIGFcXG4yMTM0OlxcdCAqIERBRyAoYWN5Y2xpYykuXFxuMjEzNTpcXHQgKi9cXG4yMTM2OlxcdHN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuMjEzNzpcXHRcXHRcXHRcXHRcXHRcXHQgc3RydWN0IHNsYWIgKnNsYWIsIGdmcF90IGdmcClcXG4yMTM4OlxcdHtcXG4yMTM5OlxcdFxcdHNpemVfdCBzeiA9IHNpemVvZihzdHJ1Y3Qgc2xhYm9ial9leHQpICogc2xhYi1cXHUwMDNlb2JqZWN0cztcXG4yMTQwOlxcdFxcdHN0cnVjdCBrbWVtX2NhY2hlICpvYmpfZXh0c19jYWNoZTtcXG4yMTQxOlxcdFxcbjIxNDI6XFx0XFx0aWYgKHN6IFxcdTAwM2UgS01BTExPQ19NQVhfQ0FDSEVfU0laRSlcXG4yMTQzOlxcdFxcdFxcdHJldHVybiBzejtcXG4yMTQ0OlxcdFxcbjIxNDU6XFx0XFx0aWYgKCFpc19rbWFsbG9jX25vcm1hbChzKSlcXG4yMTQ2OlxcdFxcdFxcdHJldHVybiBzejtcXG4yMTQ3OlxcdFxcbjIxNDg6XFx0XFx0b2JqX2V4dHNfY2FjaGUgPSBrbWFsbG9jX3NsYWIoc3osIE5VTEwsIGdmcCwgX19rbWFsbG9jX3Rva2VuKDApKTtcXG4yMTQ5OlxcdFxcdC8qIGNvbXBhcmUgb2JqZWN0X3NpemUsIG5vdCB0aGUgY2FjaGUgcG9pbnRlciAocGFydGl0aW9uZWQga21hbGxvYyBjYWNoZXMpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjAwLjE5NDk2MDM0MVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMDIxMjQ5NTI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCdzIGludGVybmFsIG1vbm9sb2d1ZTpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBBY3RpdmF0aW9uIG9mIENPTkZJR19TTEFCX09CSl9FWFQqKlxuXG5BbHJpZ2h0LCBJIHNlZSB0aGUgY29kZSBJJ20gZGVhbGluZyB3aXRoIGlzIHVuZGVyIGBDT05GSUdfU0xBQl9PQkpfRVhUYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMsIFwiT2theSwgdGhhdCdzIHRoZSBrZXkuIE5vdywgd2hhdCBhY3R1YWxseSAqZW5hYmxlcyogdGhhdCB0aGluZz9cIiBJIG5lZWQgdG8gdHJhY2UgYmFjayBmcm9tIHRoYXQgZGVmaW5pdGlvbi4gSSdtIGdvaW5nIHRvIGhhdmUgdG8gZGl2ZSBpbnRvIHRoZSBLY29uZmlnIGZpbGVzLCBzdGFydCB3aXRoIHRoZSBtb3N0IHJlbGV2YW50IG9uZXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBkZXBlbmRlbmNpZXMgYW5kIHJlbGF0aW9uc2hpcHMsIHNlZSB3aGF0IHRyaWdnZXJzIHRoaXMgcGFydGljdWxhciBmZWF0dXJlIGZsYWcuIFdoYXQgYXJlIHRoZSBicm9hZGVyIGltcGxpY2F0aW9ucyBvZiBoYXZpbmcgdGhpcyBlbmFibGVkPyBEb2VzIGl0IGludGVyYWN0IHdpdGggb3RoZXIgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtcz8gV2hhdCBhcmUgdGhlIHBlcmZvcm1hbmNlIHRyYWRlLW9mZnM/IFRoaXMgcmVxdWlyZXMgYSBmb2N1c2VkIGh1bnQgZm9yIHRoZSBkZXBlbmRlbmNpZXMgdGhhdCBnb3Zlcm4gaXRzIGFjdGl2YXRpb24uIFRpbWUgdG8gc3RhcnQgZGlnZ2luZy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAxNzUsIk91dHB1dFRva2VucyI6MjcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjAzLjIxNjIxMTg1N1oiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTk2MDgxODk2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgU0xBQl9PQkpfRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTAzMz1jb25maWcgTlVNQV9CQUxBTkNJTkdfREVGQVVMVF9FTkFCTEVEXFxuLS1cXG5pbml0L0tjb25maWctMTA0MC1cXG5pbml0L0tjb25maWc6MTA0MTpjb25maWcgU0xBQl9PQkpfRVhUXFxuaW5pdC9LY29uZmlnLTEwNDItXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0MzowNS4xNzcwMzcxOVoiLCJTZXEiOjE3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyOTcxMjEwMTA5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBTTEFCX09CSl9FWFRgIFVzYWdlKipcblxuQWxyaWdodCwgbGV0J3MgZGl2ZSBpbnRvIHRoZSBjb2RlIGFuZCBmaWd1cmUgb3V0IHRoZSBjb250ZXh0cyB0aGF0IGFyZSBhY3R1YWxseSB1c2luZyBgU0xBQl9PQkpfRVhUYC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hlcmUgdGhpcyBmbGFnIGlzIGdldHRpbmcgc2V0LCByZWFkLCBhbmQgbW9zdCBpbXBvcnRhbnRseSwgd2h5LiBJIGtub3cgaXQncyBhIGtleSBiaXQgZm9yIG1hbmFnaW5nIG9iamVjdCBleHRlbnNpb25zIHdpdGhpbiB0aGUgU0xBQiBhbGxvY2F0b3IsIGJ1dCB0aGUgc3BlY2lmaWMgdXNhZ2Ugd2lsbCBkaWN0YXRlIHRoZSBmaW5lciBwb2ludHMgb2YgaXRzIGJlaGF2aW9yLCBhbmQgdGhhdCBpcyB3aGF0IEkgbmVlZCB0byByZWZyZXNoIG15IGtub3dsZWRnZSBvZi4gSXMgaXQgcHJpbWFyaWx5IGZvciB0cmFja2luZyBtZXRhZGF0YSwgbWFuYWdpbmcgbGlmZWN5Y2xlLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSBxdWljayBncmVwIHRocm91Z2ggdGhlIHJlbGV2YW50IHNvdXJjZSBmaWxlcyBpcyB0aGUgYmVzdCBmaXJzdCBzdGVwLiBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIHBvc3NpYmxlIGNvbXBpbGVyIG9wdGltaXphdGlvbnMgdGhhdCBtaWdodCBhZmZlY3QgdGhlIG91dHB1dCBvZiB0aGUgZ3JlcCBjb21tYW5kIGFuZCBuYXJyb3cgaXQgdG8gcmVsZXZhbnQgc2VjdGlvbnMgb2YgY29kZS4gRnJvbSB0aGVyZSwgSSdsbCBuZWVkIHRvIGFuYWx5emUgZWFjaCB1c2FnZSBzaXRlIHRvIHJlY29uc3RydWN0IHRoZSBjb250cm9sIGZsb3cgYW5kIHVuZGVyc3RhbmQgdGhlIGludGVyYWN0aW9uIG9mIGRpZmZlcmVudCBjb21wb25lbnRzIG9mIHRoZSBzeXN0ZW0uIEkgYWxzbyB3YW50IHRvIG1ha2Ugc3VyZSBJIGFtIGtlZXBpbmcgaW4gbWluZCBhbnkgcG90ZW50aWFsIHNlY3VyaXR5IHJhbWlmaWNhdGlvbnMgb2YgdGhpcyBmbGFnLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ5MCwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjA4LjE0ODI1MDk4OVoiLCJTZXEiOjE4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjEwMjE2Mzg1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzZWxlY3QgU0xBQl9PQkpfRVhUXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA3Mz1jb25maWcgTUVNQ0dcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDc2LVxcdHNlbGVjdCBFVkVOVEZEXFxuaW5pdC9LY29uZmlnOjEwNzc6XFx0c2VsZWN0IFNMQUJfT0JKX0VYVFxcbmluaXQvS2NvbmZpZy0xMDc4LVxcdHNlbGVjdCBWTV9FVkVOVF9DT1VOVEVSU1xcbi0tXFxubGliL0tjb25maWcuZGVidWc9MTA1MT1jb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1xcbi0tXFxubGliL0tjb25maWcuZGVidWctMTA1OC1cXHRzZWxlY3QgUEFHRV9FWFRFTlNJT05cXG5saWIvS2NvbmZpZy5kZWJ1ZzoxMDU5OlxcdHNlbGVjdCBTTEFCX09CSl9FWFRcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDYwLVxcdGhlbHBcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDM6MTAuMjUwNDI2Nzg3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjc1MjY5NzcwNTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgU2xhYiBPYmplY3QgRXh0ZW5zaW9uIEN5Y2xlIEZpeCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGl0J3MgZGVhbGluZyB3aXRoIGEgY3ljbGUgaW4gdGhlIGFsbG9jYXRpb24gb2YgdGhlIGBzbGFib2JqX2V4dGAgYXJyYXkuIFRoaXMgY29tZXMgaW50byBwbGF5IHdoZW4gZWl0aGVyIGBDT05GSUdfTUVNQ0dgIG9yIGBDT05GSUdfTUVNX0FMTE9DX1BST0ZJTElOR2AgYXJlIGVuYWJsZWQsIHdoaWNoLCBpbiB0dXJuLCBlbmFibGVzIGBDT05GSUdfU0xBQl9PQkpfRVhUYC5cblxuVGhlIHByb2JsZW0gYm9pbHMgZG93biB0byBhIGNpcmN1bGFyIGRlcGVuZGVuY3kgYmV0d2VlbiBga21hbGxvYy01MTJgIGFuZCBga21hbGxvYy0xa2DigJRhIGNsYXNzaWMgZGVhZGxvY2sgc2l0dWF0aW9uLiBJdCBoYXBwZW5zIHdoZW4gdGhlIHNpemUgb2YgYG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplYCBpcyBsZXNzIHRoYW4gb3IgZXF1YWwgdG8gYHMtXHUwMDNlb2JqZWN0X3NpemVgLiBUaGUgZml4IGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UuXG5cblRoZSBwcmV2aW91cyBjb2RlIGNvbXBhcmVkIHRoZSBvYmplY3Qgc2l6ZXMsIHRoZSBmaXggcmV2ZXJzZXMgdGhlIGNvbXBhcmlzb246IGZyb20gYGlmIChzLVx1MDAzZW9iamVjdF9zaXplID09IG9ial9leHRzX2NhY2hlLVx1MDAzZW9iamVjdF9zaXplKSByZXR1cm4gb2JqX2V4dHNfY2FjaGUtXHUwMDNlb2JqZWN0X3NpemUgKyAxO2AgdG8gYGlmIChvYmpfZXh0c19jYWNoZS1cdTAwM2VvYmplY3Rfc2l6ZSBcdTAwM2M9IHMtXHUwMDNlb2JqZWN0X3NpemUpIHJldHVybiBzLVx1MDAzZW9iamVjdF9zaXplICsgMTtgLiBUaGlzIGNoYW5nZSBwcmV2ZW50cyB0aGUgc2xhYiB0ZWFyZG93biBwcm9jZXNzIGZyb20gZ2V0dGluZyBzdHVjayBpbiBhbiBpbmZpbml0ZSBsb29wLlxuXG5UaGlzIGlzIGRlZmluaXRlbHkgcmVhY2hhYmxlLCBnaXZlbiB0aGF0IGBrbWFsbG9jYCBhbmQgYHNsYWJgIGFyZSBjb3JlIGtlcm5lbCBmZWF0dXJlcyB1c2VkIGFjcm9zcyB0aGUgYm9hcmQsIGV2ZW4gaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGUgcmVsZXZhbnQgY29uZmlncyBhcmUgYE1FTUNHYCBvciBgTUVNX0FMTE9DX1BST0ZJTElOR2AuIEkgdGhpbmsgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIHByb2JhYmx5IGEgZ29vZCBjb25maWcgdG8gY2hlY2ssIHNpbmNlIGl0J3MgbW9yZSBzcGVjaWZpYy4gWWVzLCB0aGF0IGlzIHJpZ2h0LiBgTUVNQ0dgIGlzIGdvb2QsIHRvby5cblxuSSBzaG91bGQgYWxzbyBjaGVjayBvdXQgYG9ial9leHRzX2FsbG9jX3NpemVgIGFuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgdG8gc2VlIGlmIHRob3NlIHdvdWxkIGJlIGdvb2QgZm9jdXMgc3ltYm9scy4gYGFsbG9jX3NsYWJfb2JqX2V4dHNgIGxvb2tzIGludGVyZXN0aW5nLCBpdCBpcyBjYWxsZWQgZnJvbSBgcHJlcGFyZV9zbGFiX29ial9leHRzX2hvb2tgLCBhbmQgdGhhdCBpbiB0dXJuIGlzIGNhbGxlZCBmcm9tIGBfX2FsbG9jX3RhZ2dpbmdfc2xhYl9hbGxvY19ob29rYC4gVGhpcyBpcyBhIGhvdCBwYXRoIGZvciBzbGFiIGFsbG9jYXRpb24sIGJ1dCBpdCBpcyBjYWxsZWQgb25jZSBwZXIgc2xhYi4gU28gbWF5YmUgYGFsbG9jX3NsYWJfb2JqX2V4dHNgICppcyogYSBnb29kIGZvY3VzIHN5bWJvbC5cblxuTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBvdGhlciBmdW5jdGlvbnMgaW52b2x2ZWQuIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0IGlzbid0IGdvaW5nIHRvIGJlIGEgc3ltYm9sLiBOb3csIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBub3Qgc3RhdGljLiBJcyBpdCBleHBvcnRlZCwgb3IgZ2xvYmFsPyBJIHNob3VsZCBjaGVjayBpdCBpbiBgbW0vc2x1Yi5jYCB0byBiZSBzdXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDkxNywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0MzoxNy43Nzc0MDg1ODVaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2OTQ5MTM5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImFsbG9jX3NsYWJfb2JqX2V4dHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vc2x1Yi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL3NsdWIuYz0yMTM2PXN0YXRpYyBpbmxpbmUgc2l6ZV90IG9ial9leHRzX2FsbG9jX3NpemUoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxuLS1cXG5tbS9zbHViLmMtMjE1NS1cXG5tbS9zbHViLmM6MjE1NjppbnQgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIxNTctXFx0XFx0XFx0Z2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjIzMD1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjI2OS0gKi9cXG5tbS9zbHViLmM6MjI3MDpzdGF0aWMgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLCBzdHJ1Y3Qgc2xhYiAqc2xhYilcXG5tbS9zbHViLmMtMjI3MS17XFxuLS1cXG5tbS9zbHViLmM9MjMyMT1zdGF0aWMgaW5saW5lIHZvaWQgaW5pdF9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jLTIzMjQtXFxubW0vc2x1Yi5jOjIzMjU6c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMyNi1cXHRcXHRcXHQgICAgICAgZ2ZwX3QgZ2ZwLCB1bnNpZ25lZCBpbnQgYWxsb2NfZmxhZ3MpXFxuLS1cXG5tbS9zbHViLmM9MjMzMT1zdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuLS1cXG5tbS9zbHViLmMtMjMzNC1cXG5tbS9zbHViLmM6MjMzNTpzdGF0aWMgaW5saW5lIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG5tbS9zbHViLmMtMjMzNi1cXHRcXHRcXHRcXHRcXHRcXHQgICAgICAgc3RydWN0IHNsYWIgKnNsYWIpXFxuLS1cXG5tbS9zbHViLmM9MjM0NT1wcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuLS1cXG5tbS9zbHViLmMtMjM0OC1cXHRpZiAoIXNsYWJfb2JqX2V4dHMoc2xhYikgXFx1MDAyNlxcdTAwMjZcXG5tbS9zbHViLmM6MjM0OTpcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxubW0vc2x1Yi5jLTIzNTAtXFx0XFx0cHJfd2Fybl9vbmNlKFxcXCIlcywgJXM6IEZhaWxlZCB0byBjcmVhdGUgc2xhYiBleHRlbnNpb24gdmVjdG9yIVxcXFxuXFxcIixcXG4tLVxcbm1tL3NsdWIuYz0zMzUyPXN0YXRpYyBfX2Fsd2F5c19pbmxpbmUgdm9pZCBhY2NvdW50X3NsYWIoc3RydWN0IHNsYWIgKnNsYWIsIGludCBvcmRlcixcXG4tLVxcbm1tL3NsdWIuYy0zMzU4LVxcdFxcdFxcdCFzbGFiX29ial9leHRzKHNsYWIpKVxcbm1tL3NsdWIuYzozMzU5OlxcdFxcdGFsbG9jX3NsYWJfb2JqX2V4dHMoc2xhYiwgcywgZ2ZwLFxcbm1tL3NsdWIuYy0zMzYwLVxcdFxcdFxcdFxcdCAgICBhbGxvY19mbGFncyB8IFNMQUJfQUxMT0NfTkVXX1NMQUIpO1xcbi0tXFxubW0vc2x1Yi5jPTMzODE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDMxLVxcdCAqL1xcbm1tL3NsdWIuYzozNDMyOlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0MzMtXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDM6MTcuODM0MzY0Mjg0WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM3OTc5OTMxOTgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgcHJvdmlkZWQgY29kZSBzbmlwcGV0OlxuXG4qKkludmVzdGlnYXRpbmcgYGFsbG9jX3NsYWJfb2JqX2V4dHNgIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJIHNlZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgZGVmaW5lZCwgYW5kIGl0J3MgaGFuZ2luZyBvdXQgYXQgbGluZSAyMTU2LiBUaGUgZmFjdCB0aGF0IGl0J3MgKm5vdCogYSBgc3RhdGljYCBmdW5jdGlvbiBpcyBpbW1lZGlhdGVseSBpbnRlcmVzdGluZzsgdGhhdCBpbXBsaWVzIGl0cyBzY29wZSBpcyBicm9hZGVyIHRoYW4ganVzdCB0aGlzIGZpbGUsIHdoaWNoIGlzIHNvbWV0aGluZyBJIG5lZWQgdG8ga2VlcCBpbiBtaW5kIGZvciBwb3RlbnRpYWwgaW50ZXJhY3Rpb25zIGVsc2V3aGVyZS4gTm93IGhvbGQgb24uLi4gSSBjb3VsZCBzd2VhciBJJ3ZlIHNlZW4gdGhhdCBuYW1lIGJlZm9yZS4gTGV0J3MgZG91YmxlLWNoZWNrLiBMaW5lIDIzMjUuLi4gQWhhISBUaGVyZSAqaXMqIGFub3RoZXIgZGVmaW5pdGlvbiBvZiBpdC4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCdzIGdvaW5nIG9uIHdpdGggdGhlc2UgdHdvIGRlZmluaXRpb25zOyBhcmUgdGhleSB0aGUgc2FtZSwgYXJlIHRoZXkgZGlmZmVyZW50PyBJcyB0aGlzIHNvbWUgc29ydCBvZiBvdmVybG9hZGluZz8gQSBmb3J3YXJkIGRlY2xhcmF0aW9uPyBPciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gVGltZSB0byBkaWcgaW50byBsaW5lIDIzMjUgYW5kIGdldCB0byB0aGUgYm90dG9tIG9mIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIyODM4LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDM6MjEuNjMyMzYxMjcyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMyNTQzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9zbHViLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjMxMCxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjMxMDpcXHRcXHRcXHRzbGFiLVxcdTAwM2VvYmpfZXh0cyA9IG9ial9leHRzO1xcbjIzMTE6XFx0XFx0XFx0c2xhYl9zZXRfc3RyaWRlKHNsYWIsIHMtXFx1MDAzZXNpemUpO1xcbjIzMTI6XFx0XFx0fVxcbjIzMTM6XFx0fVxcbjIzMTQ6XFx0XFxuMjMxNTpcXHQjZWxzZSAvKiBDT05GSUdfU0xBQl9PQkpfRVhUICovXFxuMjMxNjpcXHRcXG4yMzE3OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBtYXJrX29ial9jb2RldGFnX2VtcHR5KGNvbnN0IHZvaWQgKm9iailcXG4yMzE4OlxcdHtcXG4yMzE5OlxcdH1cXG4yMzIwOlxcdFxcbjIzMjE6XFx0c3RhdGljIGlubGluZSB2b2lkIGluaXRfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYilcXG4yMzIyOlxcdHtcXG4yMzIzOlxcdH1cXG4yMzI0OlxcdFxcbjIzMjU6XFx0c3RhdGljIGludCBhbGxvY19zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBzdHJ1Y3Qga21lbV9jYWNoZSAqcyxcXG4yMzI2OlxcdFxcdFxcdFxcdCAgICAgICBnZnBfdCBnZnAsIHVuc2lnbmVkIGludCBhbGxvY19mbGFncylcXG4yMzI3OlxcdHtcXG4yMzI4OlxcdFxcdHJldHVybiAwO1xcbjIzMjk6XFx0fVxcbjIzMzA6XFx0XFxuMjMzMTpcXHRzdGF0aWMgaW5saW5lIHZvaWQgZnJlZV9zbGFiX29ial9leHRzKHN0cnVjdCBzbGFiICpzbGFiLCBib29sIGFsbG93X3NwaW4pXFxuMjMzMjpcXHR7XFxuMjMzMzpcXHR9XFxuMjMzNDpcXHRcXG4yMzM1OlxcdHN0YXRpYyBpbmxpbmUgdm9pZCBhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5KHN0cnVjdCBrbWVtX2NhY2hlICpzLFxcbjIzMzY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxcbjIzMzc6XFx0e1xcbjIzMzg6XFx0fVxcbjIzMzk6XFx0XFxuMjM0MDpcXHQjZW5kaWYgLyogQ09ORklHX1NMQUJfT0JKX0VYVCAqL1xcbjIzNDE6XFx0XFxuMjM0MjpcXHQjaWZkZWYgQ09ORklHX01FTV9BTExPQ19QUk9GSUxJTkdcXG4yMzQzOlxcdFxcbjIzNDQ6XFx0c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nXFxuMjM0NTpcXHRwcmVwYXJlX3NsYWJfb2JqX2V4dHNfaG9vayhzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIsXFxuMjM0NjpcXHRcXHRcXHRcXHQgICBnZnBfdCBmbGFncywgdW5zaWduZWQgaW50IGFsbG9jX2ZsYWdzLCB2b2lkICpwKVxcbjIzNDc6XFx0e1xcbjIzNDg6XFx0XFx0aWYgKCFzbGFiX29ial9leHRzKHNsYWIpIFxcdTAwMjZcXHUwMDI2XFxuMjM0OTpcXHRcXHQgICAgYWxsb2Nfc2xhYl9vYmpfZXh0cyhzbGFiLCBzLCBmbGFncywgYWxsb2NfZmxhZ3MpKSB7XFxuMjM1MDpcXHRcXHRcXHRwcl93YXJuX29uY2UoXFxcIiVzLCAlczogRmFpbGVkIHRvIGNyZWF0ZSBzbGFiIGV4dGVuc2lvbiB2ZWN0b3IhXFxcXG5cXFwiLFxcbjIzNTE6XFx0XFx0XFx0XFx0ICAgICBfX2Z1bmNfXywgcy1cXHUwMDNlbmFtZSk7XFxuMjM1MjpcXHRcXHRcXHRyZXR1cm4gMDtcXG4yMzUzOlxcdFxcdH1cXG4yMzU0OlxcdFxcbjIzNTU6XFx0XFx0cmV0dXJuIHNsYWJfb2JqX2V4dHMoc2xhYik7XFxuMjM1NjpcXHR9XFxuMjM1NzpcXHRcXG4yMzU4OlxcdFxcbjIzNTk6XFx0LyogU2hvdWxkIGJlIGNhbGxlZCBvbmx5IGlmIG1lbV9hbGxvY19wcm9maWxpbmdfZW5hYmxlZCgpICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjIxLjYzMjY4OTI1MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTU5MTMwMjQ0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBTbGFiIE9iamVjdCBFeHRlbnNpb25zKipcblxuT2theSwgaGVyZSdzIHRoZSBkZWFsLiBMaW5lIDIzMjUgaXMganVzdCB0aGUgcGxhY2Vob2xkZXIsIHRoZSBiYXNpYyBpbXBsZW1lbnRhdGlvbiwgaWYgd2UgKmRvbid0KiBoYXZlIGBDT05GSUdfU0xBQl9PQkpfRVhUYCBkZWZpbmVkLiBUaGF0IG1lYW5zIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBsaWtlbHkgdGhlIGtleSBmdW5jdGlvbiBJIG5lZWQgdG8gdW5kZXJzdGFuZC4gVGhhdCdzIHdoZXJlIHRoZSAqcmVhbCogYWN0aW9uIGlzLlxuXG5UaGUgcmVsZXZhbnQgY29uZmlndXJhdGlvbnMgc2VlbSB0byBiZSBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1DR2AuIEkgd29uZGVyIGlmIGBNRU1fQUxMT0NfUFJPRklMSU5HYCBieSBpdHNlbGYgaXMgZW5vdWdoIHRvIHRyaWdnZXIgdGhlIGJlaGF2aW91ciBJJ20gaW50ZXJlc3RlZCBpbi4gTGV0IG1lIGNoZWNrLi4uIEFoLCB5ZXMsIGl0IGxvb2tzIGxpa2UgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGRvZXMsIGluIGZhY3QsIHNlbGVjdCBgU0xBQl9PQkpfRVhUYC4gUGVyZmVjdC5cblxuV2FpdCBhIHNlY29uZC4uLiBXaGVyZSBpcyBgTUVNX0FMTE9DX1BST0ZJTElOR2AgZGVmaW5lZD8gQWgsIGl0J3MgaW4gYGxpYi9LY29uZmlnLmRlYnVnYC4gT2theSwgbm93IEkganVzdCBuZWVkIHRvIHF1aWNrbHkgdmVyaWZ5IHRoYXQgYE1FTV9BTExPQ19QUk9GSUxJTkdgIGlzIGEgKnZhbGlkKiBjb25maWd1cmF0aW9uIG9wdGlvbi4gSnVzdCBhIHF1aWNrIGRvdWJsZS1jaGVjayB0byBtYWtlIHN1cmUgSSdtIG5vdCBjaGFzaW5nIGEgcGhhbnRvbS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzgyNiwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjI1LjU5MTgyMjQ5NloiLCJTZXEiOjI0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTg3MTQ0MDMyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibGliL0tjb25maWcuZGVidWc9MTA0Nz1jb25maWcgQ09ERV9UQUdHSU5HXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUwLVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNTE6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDUyLVxcdGJvb2wgXFxcIkVuYWJsZSBtZW1vcnkgYWxsb2NhdGlvbiBwcm9maWxpbmdcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY0LVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNjU6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfRU5BQkxFRF9CWV9ERUZBVUxUXFxubGliL0tjb25maWcuZGVidWctMTA2Ni1cXHRib29sIFxcXCJFbmFibGUgbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIGJ5IGRlZmF1bHRcXFwiXFxuLS1cXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDY5LVxcbmxpYi9LY29uZmlnLmRlYnVnOjEwNzA6Y29uZmlnIE1FTV9BTExPQ19QUk9GSUxJTkdfREVCVUdcXG5saWIvS2NvbmZpZy5kZWJ1Zy0xMDcxLVxcdGJvb2wgXFxcIk1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGVyIGRlYnVnZ2luZ1xcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDM6MjcuNDYzMjY4MTgxWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMxMTUxMjg2NzQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqQ2hlY2tpbmcgQ29uZmlnIFZhbGlkaXR5KipcblxuQWxyaWdodCwgc28gSSd2ZSBjb25maXJtZWQgdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgaXMgYSBkZWZpbmVkIGFuZCBhY2NlcHRhYmxlIGNvbmZpZ3VyYXRpb24gb3B0aW9uLiBOb3csIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBxdWlja2x5IHZlcmlmeSB0aGUgdmFsaWRpdHkgb2YgYE1FTUNHYC4gSSBuZWVkIHRvIGVuc3VyZSBib3RoIG9mIHRoZXNlIGFyZSBwcm9wZXJseSBjb25maWd1cmVkIGZvciB0aGUgY3VycmVudCBidWlsZCBvciBlbnZpcm9ubWVudC4gSSdtIGFzc3VtaW5nLCBnaXZlbiB0aGUgY29udGV4dCwgdGhhdCBJJ20gd29ya2luZyB3aXRoIGtlcm5lbCBjb25maWd1cmF0aW9uLCBsaWtlbHkgbG9va2luZyB0byBlbmFibGUgc29tZSBtZW1vcnkgbWFuYWdlbWVudCBmZWF0dXJlcy4gR290dGEgbWFrZSBzdXJlIGJvdGggc2V0dGluZ3MgYXJlIHJlY29nbml6ZWQgYW5kIGRvbid0IGNvbmZsaWN0IHdpdGggYW55IG90aGVyIGVuYWJsZWQgb3B0aW9ucyBvciB0aGUgdGFyZ2V0IHBsYXRmb3JtLiBUaW1lIHRvIHF1aWNrbHkgZG91YmxlLWNoZWNrIHRoYXQgYE1FTUNHYCBpcyBhbHNvIGEgdmFsaWQgc3ltYm9sIG9yIG9wdGlvbiBpbiB0aGlzIHNwZWNpZmljIGNvbmZpZ3VyYXRpb24gY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MjQ0NTMsIk91dHB1dFRva2VucyI6MjMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0MzozMC41NzgzOTkxMDVaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3NzU4MDAwNzgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIE1FTUNHXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIlwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTA2Mz1jb25maWcgQ0dST1VQX0ZBVk9SX0RZTk1PRFNcXG4tLVxcbmluaXQvS2NvbmZpZy0xMDcyLVxcbmluaXQvS2NvbmZpZzoxMDczOmNvbmZpZyBNRU1DR1xcbmluaXQvS2NvbmZpZy0xMDc0LVxcdGJvb2wgXFxcIk1lbW9yeSBjb250cm9sbGVyXFxcIlxcbi0tXFxuaW5pdC9LY29uZmlnLTEwODEtXFxuaW5pdC9LY29uZmlnOjEwODI6Y29uZmlnIE1FTUNHX05NSV9VTlNBRkVcXG5pbml0L0tjb25maWctMTA4My1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA4OC1cXG5pbml0L0tjb25maWc6MTA4OTpjb25maWcgTUVNQ0dfTk1JX1NBRkVUWV9SRVFVSVJFU19BVE9NSUNcXG5pbml0L0tjb25maWctMTA5MC1cXHRib29sXFxuLS1cXG5pbml0L0tjb25maWctMTA5NS1cXG5pbml0L0tjb25maWc6MTA5Njpjb25maWcgTUVNQ0dfVjFcXG5pbml0L0tjb25maWctMTA5Ny1cXHRib29sIFxcXCJMZWdhY3kgY2dyb3VwIHYxIG1lbW9yeSBjb250cm9sbGVyXFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0MzozMi4zNTQyMDY2MzJaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQ3MjIyNjgwMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgTWVtb3J5IENvbmZpZ3VyYXRpb24gYW5kIFNsYWIgT2JqZWN0IEV4dGVuc2lvbnMqKlxuXG5Pa2F5LCBzbyBJIHNlZSBgTUVNQ0dgIGlzIGRlZmluaXRlbHkgYSB2YWxpZCBjb25maWd1cmF0aW9uLiBXZSdsbCBpbmNsdWRlIGl0LiBMZXQncyBtYWtlIHN1cmUgdGhhdCBgTUVNX0FMTE9DX1BST0ZJTElOR2AgYW5kIGBNRU1DR2AgYXJlIGxpc3RlZCBhcyBvdXIgYEVuYWJsZUNvbmZpZ3NgLiBBbHRob3VnaCwgSSBrbm93IGBNRU1DR2AgaXMgb2Z0ZW4gZW5hYmxlZCBieSBkZWZhdWx0LCBpdCBkb2Vzbid0IGh1cnQgdG8gZXhwbGljaXRseSBsaXN0IGl0LiBCZXR0ZXIgdG8gYmUgY2xlYXIuXG5cbkFscmlnaHQsIG5vdyBsZXQncyBtYWtlIHN1cmUgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXMgcmVhY2hhYmxlLiBZZXMsIG9mIGNvdXJzZSwgaXQncyBjYWxsZWQgZHVyaW5nIHNsYWIgYWxsb2NhdGlvbiwgYnV0IG9ubHkgd2hlbiBgU0xBQl9PQkpfRVhUYCBpcyBlbmFibGVkLiBFeGNlbGxlbnQuIFRoaXMgcGF0Y2ggYWRkcmVzc2VzIGEgY3ljbGUgdGhhdCB3YXMgb2NjdXJyaW5nIGluIHRoZSBzbGFib2JqX2V4dCBhcnJheSBhbGxvY2F0aW9uLiBHb29kIGNhdGNoLlxuXG5BcmUgdGhlcmUgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgd2Ugc2hvdWxkIGNvbnNpZGVyIGhlcmU/IFdlbGwsIGBvYmpfZXh0c19hbGxvY19zaXplYCBpcyBzdGF0aWMgaW5saW5lLCBzbyB0aGF0IGRvZXNuJ3QgZGVtYW5kIHNpZ25pZmljYW50IGF0dGVudGlvbiwgYnV0IGBhbGxvY19zbGFiX29ial9leHRzYCBpcyB0aGUgbWFpbiBvbmUgdG8gZm9jdXMgb24uIEFuZCwgdGhlcmUncyBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAuLi4gbGV0J3MgZ2l2ZSBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAgYSBsb29rIGFzIHdlbGwuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI0ODk4LCJPdXRwdXRUb2tlbnMiOjM2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTg5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI1VDIzOjQzOjM2LjgyNjQzNjI5NVoiLCJTZXEiOjI4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTU5NzM3ODksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9zbHViLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vc2x1Yi5jPTIyMzA9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIyNjktICovXFxubW0vc2x1Yi5jOjIyNzA6c3RhdGljIHZvaWQgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseShzdHJ1Y3Qga21lbV9jYWNoZSAqcywgc3RydWN0IHNsYWIgKnNsYWIpXFxubW0vc2x1Yi5jLTIyNzEte1xcbi0tXFxubW0vc2x1Yi5jPTIzMzE9c3RhdGljIGlubGluZSB2b2lkIGZyZWVfc2xhYl9vYmpfZXh0cyhzdHJ1Y3Qgc2xhYiAqc2xhYiwgYm9vbCBhbGxvd19zcGluKVxcbi0tXFxubW0vc2x1Yi5jLTIzMzQtXFxubW0vc2x1Yi5jOjIzMzU6c3RhdGljIGlubGluZSB2b2lkIGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkoc3RydWN0IGttZW1fY2FjaGUgKnMsXFxubW0vc2x1Yi5jLTIzMzYtXFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIHN0cnVjdCBzbGFiICpzbGFiKVxcbi0tXFxubW0vc2x1Yi5jPTMzODE9c3RhdGljIHN0cnVjdCBzbGFiICphbGxvY2F0ZV9zbGFiKHN0cnVjdCBrbWVtX2NhY2hlICpzLCBnZnBfdCBmbGFncyxcXG4tLVxcbm1tL3NsdWIuYy0zNDMxLVxcdCAqL1xcbm1tL3NsdWIuYzozNDMyOlxcdGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHkocywgc2xhYik7XFxubW0vc2x1Yi5jLTM0MzMtXFx0YWNjb3VudF9zbGFiKHNsYWIsIG9vX29yZGVyKG9vKSwgcywgZmxhZ3MsIGFsbG9jX2ZsYWdzKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjVUMjM6NDM6MzYuODgyNDE1NjQzWiIsIlNlcSI6MjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjk5OTMwMDYzMzksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgS2VybmVsIE1lbW9yeSBNYW5hZ2VtZW50IFBhdGNoIGZvciBGdXp6aW5nKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgZmlndXJpbmcgb3V0IHRoZSBiZXN0IHdheSB0byBmdXp6IGl0IHdpdGggc3l6a2FsbGVyLiBUaGUgY29yZSBvZiB0aGlzIHBhdGNoIHNlZW1zIHRvIGJlIGFyb3VuZCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAgYW5kIGBhbGxvY19zbGFiX29ial9leHRzYC4gSSBzZWUgdGhhdCBgYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseWAgaXMgY2FsbGVkIGJ5IGBhbGxvY2F0ZV9zbGFiYCwgYW5kIGBhbGxvY19zbGFiX29ial9leHRzYCBpcyBjYWxsZWQgYnkgYHByZXBhcmVfc2xhYl9vYmpfZXh0c19ob29rYCBhbmQgYGFjY291bnRfc2xhYmAuIFRob3NlIGFyZSBnb29kIGVudHJ5IHBvaW50cyB0byBmb2N1cyB0aGUgZnV6emVyIG9uLCBkZWZpbml0ZWx5LiBXaGlsZSBsb29raW5nIGF0IHRob3NlLCBgZnJlZV9zbGFiX29ial9leHRzYCBsb29rcyByZWxldmFudCBhcyB3ZWxsLCBzbyBJJ2xsIGFkZCB0aG9zZSB0byB0aGUgYEZvY3VzU3ltYm9sc2AgbGlzdDogYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCBhbmQgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgLlxuXG5UaGUgcGF0Y2ggaXRzZWxmIGFkZHJlc3NlcyBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBpbmZpbml0ZSByZWN1cnNpb24gZHVyaW5nIHNsYWIgdGVhcmRvd24sIHNwZWNpZmljYWxseSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC4gSXQgbW9kaWZpZXMgYG9ial9leHRzX2FsbG9jX3NpemVgIHRvIHByZXZlbnQgYSBjaXJjdWxhciBkZXBlbmRlbmN5IGJldHdlZW4gc2xhYnMgd2hlbiBhbGxvY2F0aW5nIHRoZSBgc2xhYm9ial9leHRgIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIFNMVUIgYWxsb2NhdG9yLCBhIGNyaXRpY2FsIHBhcnQgb2YgdGhlIGtlcm5lbCdzIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgaXMgZGVmaW5pdGVseSByZWFjaGFibGUgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzLiBUaGlzIG1ha2VzIGl0IHdvcnRoIGZ1enppbmcuXG5cbk5vdywgSSBuZWVkIHRvIGNoZWNrIHNvbWUgZGV0YWlscyBhYm91dCB0aGVzZSBmdW5jdGlvbnMuICBgYWxsb2Nfc2xhYl9vYmpfZXh0c2AgaXNuJ3Qgc3RhdGljIGluIGBtbS9zbHViLmNgIGFuZCBpc24ndCBleHBvcnRlZCwgYnV0IHRoYXQgc2hvdWxkbid0IG1hdHRlciBzaW5jZSBzeXprYWxsZXIgZ3VpZGVzIGZ1enppbmcgdG93YXJkIHRoZXNlIGZ1bmN0aW9ucywgYXMgbG9uZyBhcyBpdCdzIHJlYWNoYWJsZS4gYG9ial9leHRzX2FsbG9jX3NpemVgIGlzIGBzdGF0aWMgaW5saW5lYCBzbyBpdCB3b24ndCBiZSBpbiB0aGUgc3ltYm9sIHRhYmxlLCBidXQgdGhlIGltcG9ydGFudCBmdW5jdGlvbiwgYGFsbG9jX3NsYWJfb2JqX2V4dHNgLCB3aWxsIGJlLiAgYGFsbG9jX3NsYWJfb2JqX2V4dHNfZWFybHlgIGlzIHN0YXRpYywgd2hpY2ggaXMgdXN1YWxseSBhIHByb2JsZW0gZm9yIGZ1enppbmcgYnV0IGl0J3Mgbm90IG1hcmtlZCBpbmxpbmUsIGFuZCB0aGVyZSdzIGEgbm9uLWlubGluZSB2ZXJzaW9uIHNvIHRoaXMgc2hvdWxkIGJlIGFjY2Vzc2libGUgdG8gdGhlIGZ1enplci4gVGhpcyB3aWxsIHdvcmsuXG5cbkxldCBtZSBkb3VibGUtY2hlY2sgdGhlIG5lY2Vzc2FyeSBjb25maWd1cmF0aW9ucy4gYFNMQUJfT0JKX0VYVGAgc2VlbXMgdG8gYmUgdGhlIGtleSwgYW5kIGl0J3Mgc2VsZWN0ZWQgYnkgZWl0aGVyIGBNRU1DR2Agb3IgYE1FTV9BTExPQ19QUk9GSUxJTkdgLiBTbywgZW5hYmxpbmcgZWl0aGVyIG9mIHRob3NlIHdpbGwgZ2V0IHVzIHRoZSByaWdodCBjb25maWd1cmF0aW9uLiBJJ2xsIGluY2x1ZGUgYm90aC4gSSB3aWxsIHVwZGF0ZSB0aGUgY29uZmlndXJhdGlvbiBhbmQgdGFyZ2V0IGluZm9ybWF0aW9uIGJhc2VkIG9uIHRoaXMgYW5hbHlzaXMuIFRoaXMgc2hvdWxkIGJlIGEgZ29vZCBwbGFuIGZvciBmdXp6aW5nIHRoaXMgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI1NzE4LCJPdXRwdXRUb2tlbnMiOjE0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNi0yNVQyMzo0Mzo0Ni44NzU0MjUyMjJaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NzE4OTQ2OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiTUVNX0FMTE9DX1BST0ZJTElOR1wiLFxuICAgIFwiTUVNQ0dcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzXCIsXG4gICAgXCJhbGxvY19zbGFiX29ial9leHRzX2Vhcmx5XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYSBwb3RlbnRpYWwgaW5maW5pdGUgcmVjdXJzaW9uL2RlYWRsb2NrIGR1cmluZyBzbGFiIHRlYXJkb3duIGJ5IGVuc3VyaW5nIHRoYXQgdGhlIHNsYWJvYmpfZXh0IGFycmF5IGlzIGFsbG9jYXRlZCBmcm9tIGEgc3RyaWN0bHkgbGFyZ2VyIGttYWxsb2MgY2FjaGUuIFRoaXMgcHJldmVudHMgYSBjeWNsZSB3aGVyZSBhIHNsYWIgaG9sZHMgYW5vdGhlciBzbGFiJ3MgYXJyYXkuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgY29yZSBTTFVCIGFsbG9jYXRvciBhbmQgaXMgcmVhY2hhYmxlIHdoZW4gbWVtb3J5IGFsbG9jYXRpb24gcHJvZmlsaW5nIG9yIG1lbW9yeSBjZ3JvdXBzIGFyZSBlbmFibGVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIk1FTV9BTExPQ19QUk9GSUxJTkdcIixcbiAgICBcIk1FTUNHXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c1wiLFxuICAgIFwiYWxsb2Nfc2xhYl9vYmpfZXh0c19lYXJseVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGEgcG90ZW50aWFsIGluZmluaXRlIHJlY3Vyc2lvbi9kZWFkbG9jayBkdXJpbmcgc2xhYiB0ZWFyZG93biBieSBlbnN1cmluZyB0aGF0IHRoZSBzbGFib2JqX2V4dCBhcnJheSBpcyBhbGxvY2F0ZWQgZnJvbSBhIHN0cmljdGx5IGxhcmdlciBrbWFsbG9jIGNhY2hlLiBUaGlzIHByZXZlbnRzIGEgY3ljbGUgd2hlcmUgYSBzbGFiIGhvbGRzIGFub3RoZXIgc2xhYidzIGFycmF5LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIGNvcmUgU0xVQiBhbGxvY2F0b3IgYW5kIGlzIHJlYWNoYWJsZSB3aGVuIG1lbW9yeSBhbGxvY2F0aW9uIHByb2ZpbGluZyBvciBtZW1vcnkgY2dyb3VwcyBhcmUgZW5hYmxlZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqh4z[1] Phase: Succeeded StartedAt: 2026-06-25 23:43:58 +0000 UTC FinishedAt: 2026-06-25 23:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-06-25 23:43:58 +0000 UTC FinishedAt: 2026-06-25 23:43:58 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2] Phase: Succeeded StartedAt: 2026-06-25 23:43:58 +0000 UTC FinishedAt: 2026-06-26 03:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-25 23:43:58 +0000 UTC FinishedAt: 2026-06-26 03:35:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-25 23:43:58 +0000 UTC FinishedAt: 2026-06-25 23:44:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-25 23:43:58 +0000 UTC FinishedAt: 2026-06-25 23:44:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowzqh4z/series-workflowzqh4z-convert-artifact-107891411/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-25 23:44:08 +0000 UTC FinishedAt: 2026-06-26 00:05:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-25 23:44:08 +0000 UTC FinishedAt: 2026-06-26 00:05:03 +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:*5a55b653-3731-419f-82c2-7b528d134dc6,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-workflowzqh4z/series-workflowzqh4z-convert-artifact-107891411/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": "1a7ec27c-0db3-4511-82b4-115da5abad00", "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-workflowzqh4z/series-workflowzqh4z-build-action-3596455425/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-25 23:44:08 +0000 UTC FinishedAt: 2026-06-26 00:04:53 +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:*5a55b653-3731-419f-82c2-7b528d134dc6,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-workflowzqh4z/series-workflowzqh4z-convert-artifact-107891411/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": "1a7ec27c-0db3-4511-82b4-115da5abad00", "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-workflowzqh4z/series-workflowzqh4z-build-action-3596455425/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:05:03 +0000 UTC FinishedAt: 2026-06-26 00:05:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:05:03 +0000 UTC FinishedAt: 2026-06-26 00:05:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:05:03 +0000 UTC FinishedAt: 2026-06-26 00:05:14 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:05:03 +0000 UTC FinishedAt: 2026-06-26 00:05:09 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-workflowzqh4z/series-workflowzqh4z-convert-artifact-1792700362/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:05:14 +0000 UTC FinishedAt: 2026-06-26 00:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:05:14 +0000 UTC FinishedAt: 2026-06-26 00:07:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1a7ec27c-0db3-4511-82b4-115da5abad00,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-workflowzqh4z/series-workflowzqh4z-build-action-3596455425/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-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:07:23 +0000 UTC FinishedAt: 2026-06-26 00:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:07:23 +0000 UTC FinishedAt: 2026-06-26 00:07:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:07:23 +0000 UTC FinishedAt: 2026-06-26 00:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:07:23 +0000 UTC FinishedAt: 2026-06-26 00:30:22 +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:*5a55b653-3731-419f-82c2-7b528d134dc6,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-workflowzqh4z/series-workflowzqh4z-convert-artifact-1792700362/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": "a711e33b-c8f8-454e-942b-e23e80bdfcbf", "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-workflowzqh4z/series-workflowzqh4z-build-action-2620576750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:07:23 +0000 UTC FinishedAt: 2026-06-26 00:30:12 +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:*5a55b653-3731-419f-82c2-7b528d134dc6,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-workflowzqh4z/series-workflowzqh4z-convert-artifact-1792700362/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": "a711e33b-c8f8-454e-942b-e23e80bdfcbf", "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-workflowzqh4z/series-workflowzqh4z-build-action-2620576750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:30:22 +0000 UTC FinishedAt: 2026-06-26 00:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:30:22 +0000 UTC FinishedAt: 2026-06-26 00:30:22 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:30:22 +0000 UTC FinishedAt: 2026-06-26 00:32:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:30:22 +0000 UTC FinishedAt: 2026-06-26 00:32:14 +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:*a711e33b-c8f8-454e-942b-e23e80bdfcbf,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-workflowzqh4z/series-workflowzqh4z-build-action-2620576750/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-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:32:24 +0000 UTC FinishedAt: 2026-06-26 03:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:32:24 +0000 UTC FinishedAt: 2026-06-26 03:35:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"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:*1a7ec27c-0db3-4511-82b4-115da5abad00,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a711e33b-c8f8-454e-942b-e23e80bdfcbf,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-workflowzqh4z/series-workflowzqh4z-build-action-3596455425/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-workflowzqh4z/series-workflowzqh4z-build-action-2620576750/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:32:24 +0000 UTC FinishedAt: 2026-06-26 00:32:34 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:32:24 +0000 UTC FinishedAt: 2026-06-26 00:32:30 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"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-workflowzqh4z/series-workflowzqh4z-convert-artifact-1628559967/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:32:24 +0000 UTC FinishedAt: 2026-06-26 00:32:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:32:24 +0000 UTC FinishedAt: 2026-06-26 00:32:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:32:24 +0000 UTC FinishedAt: 2026-06-26 00:32:24 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:32:34 +0000 UTC FinishedAt: 2026-06-26 03:35:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowzqh4z[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["alloc_slab_obj_exts","alloc_slab_obj_exts_early"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"840ef6c78e6a2f694b578ecb9063241c992aaa9e","config_name":"upstream-apparmor-kasan.config","enable_configs":["MEM_ALLOC_PROFILING","MEMCG"],"series_id":"7ccd4154-adb9-445f-958d-3b2e577511fc","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-06-26 00:32:34 +0000 UTC FinishedAt: 2026-06-26 03:35:40 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*1a7ec27c-0db3-4511-82b4-115da5abad00,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*a711e33b-c8f8-454e-942b-e23e80bdfcbf,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-workflowzqh4z/series-workflowzqh4z-build-action-3596455425/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-workflowzqh4z/series-workflowzqh4z-build-action-2620576750/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-workflowzqh4z/series-workflowzqh4z-convert-artifact-1628559967/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,}