Name: series-workflow6n7j9 Phase: Succeeded StartedAt: 2026-08-21 07:22:23 +0000 UTC FinishedAt: 2026-08-21 11:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[0] Phase: Succeeded StartedAt: 2026-08-21 07:22:23 +0000 UTC FinishedAt: 2026-08-21 07:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[0].run-triage Phase: Succeeded StartedAt: 2026-08-21 07:22:23 +0000 UTC FinishedAt: 2026-08-21 07:24:46 +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": "689c1f1f669abdff41a91aa13d6cb6e77759f0ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "689c1f1f669abdff41a91aa13d6cb6e77759f0ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "7bbfc76b-d0a2-4b8c-a977-7ef8afba72be" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__thp_vma_allowable_orders", "alloc_anon_folio", "hugepage_vma_revalidate" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7YWxsb2NfYW5vbl9mb2xpbyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV92bWFfcmV2YWxpZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIG1hcHBpbmdzIGZyb20gVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljaWVzIGFuZCBWTUEgZmxhZ3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgaW52YWxpZCBwYWdlIGFjY2Vzc2VzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGxvZ2ljIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBWTUFzIGZyb20gVEhQIGNvc3RzIHdoZW4gY2hlY2tpbmcgYWxsb3dhYmxlIG9yZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBodWdlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGNvbGxhcHNlZCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcCBhbmQgbWFkdmlzZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBiNWFkNzVhMDhiYzQ0NjNiMTRlMGJmNzY0ZjRjMTJlN2YxOGU4ZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNzoyMzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggNWQ5NGZhNGM3NGZkYi4uY2VjZjZiZDhmZjBiMSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xOTMsOSAmIzQzOzE5MywxMCBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHtcbiBcdFx0LypcbiBcdFx0ICogRW5mb3JjZSBUSFAgY29sbGFwc2UgcmVxdWlyZW1lbnRzIGFzIG5lY2Vzc2FyeS4gQW5vbnltb3VzIHZtYXNcbi1cdFx0ICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuXG4mIzQzO1x0XHQgKiB3ZXJlIGFscmVhZHkgaGFuZGxlZCBpbiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoKS4gU3BlY2lhbFxuJiM0MztcdFx0ICogbWFwcGluZ3MgaGF2ZSBubyBUSFAgY29zdHMgYW5kIGFyZSBleGVtcHQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIWZvcmNlZF9jb2xsYXBzZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICghZm9yY2VkX2NvbGxhcHNlIFx1MDAyNlx1MDAyNiAhdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRcdFx0ICAgICFodWdlcGFnZV9nbG9iYWxfYWx3YXlzKCkpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7LAogICAgJiMzNDthbGxvY19hbm9uX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBsb2dpYyBpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHRvIGV4ZW1wdCBzcGVjaWFsIGh1Z2UgVk1BcyBmcm9tIFRIUCBjb3N0cyB3aGVuIGNoZWNraW5nIGFsbG93YWJsZSBvcmRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGFuZCBjb2xsYXBzZWQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1tYXAgYW5kIG1hZHZpc2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjVhZDc1YTA4YmM0NDYzYjE0ZTBiZjc2NGY0YzEyZTdmMThlOGQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMDc6MjM6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCA1ZDk0ZmE0Yzc0ZmRiLi5jZWNmNmJkOGZmMGIxIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTE5Myw5ICYjNDM7MTkzLDEwIEBAIHVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHsKIAkJLyoKIAkJICogRW5mb3JjZSBUSFAgY29sbGFwc2UgcmVxdWlyZW1lbnRzIGFzIG5lY2Vzc2FyeS4gQW5vbnltb3VzIHZtYXMKLQkJICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuCiYjNDM7CQkgKiB3ZXJlIGFscmVhZHkgaGFuZGxlZCBpbiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoKS4gU3BlY2lhbAomIzQzOwkJICogbWFwcGluZ3MgaGF2ZSBubyBUSFAgY29zdHMgYW5kIGFyZSBleGVtcHQuCiAJCSAqLwotCQlpZiAoIWZvcmNlZF9jb2xsYXBzZSAmYW1wOyZhbXA7CiYjNDM7CQlpZiAoIWZvcmNlZF9jb2xsYXBzZSAmYW1wOyZhbXA7ICF2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkgJmFtcDsmYW1wOwogCQkgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzICZhbXA7IFZNX0hVR0VQQUdFKSAmYW1wOyZhbXA7CiAJCQkJCQkgICAgIWh1Z2VwYWdlX2dsb2JhbF9hbHdheXMoKSkpKQogCQkJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVEhQIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdlX21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGZ1bmN0aW9uLiBUaGlzIGlzIGluIHRoZSBoZWFydCBvZiBUSFAgbWFuYWdlbWVudCwgc28gaXQmIzM5O3Mgd29ydGggYSBjbG9zZSBsb29rLiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBwcmV0dHkgZm9jdXNlZDogaXQmIzM5O3MgYWRkaW5nIGEgY2hlY2sgZm9yIGB2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSlgIHRvIHRoZSBjb25kaXRpb25hbC4gIEVzc2VudGlhbGx5LCBpdCYjMzk7cyB0aWdodGVuaW5nIHVwIHRoZSBjcml0ZXJpYSBmb3IgYWxsb3dpbmcgVEhQIG9yZGVycy4gVGhlIG9yaWdpbmFsIGNvbmRpdGlvbiB3YXMgYCFmb3JjZWRfY29sbGFwc2VgLCBub3cgaXQmIzM5O3MgYCFmb3JjZWRfY29sbGFwc2UgJmFtcDsmYW1wOyAhdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpYC4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2UgZG9uJiMzOTt0IHdhbnQgdG8gYWxsb3cgaHVnZSBwYWdlIGFsbG9jYXRpb24gaW4gYSBWTUEgaWYgaXQmIzM5O3MgY29uc2lkZXJlZCAmIzM0O3NwZWNpYWwmIzM0OyBpbiBzb21lIHdheS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25zdGl0dXRlcyBhICYjMzQ7c3BlY2lhbCBodWdlIFZNQSYjMzQ7LiBXaGF0IHNjZW5hcmlvcyBpcyB0aGlzIGFpbWVkIGF0PyAgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgdm1hX2lzX3NwZWNpYWxfaHVnZWAgdG8gZ2V0IHRoZSBjb250ZXh0LiBEb2VzIHRoaXMgcmVsYXRlIHRvIHBlcnNpc3RlbnQgbWVtb3J5LCBkZXZpY2UgbWVtb3J5LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gIEFuZCB0aGVuLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYWRkaXRpb24gb2YgdGhpcyBjaGVjayBhbHRlcnMgdGhlIHN5c3RlbSBiZWhhdmlvciByZWdhcmRpbmcgVEhQIHVzYWdlIGluIHRoZXNlIHNwZWNpZmljIFZNQXMuIFVsdGltYXRlbHksIHdoYXQgYXJlIHRoZSB1c2UgY2FzZXMgYW5kIHRoZWlyIGV4cGVjdGVkIG91dGNvbWVzPyBUaGlzIGlzIGdvaW5nIHRvIHJlcXVpcmUgc29tZSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgcG9zc2libHkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBjb21taXQgbWVzc2FnZXMgZm9yIGNvbnRleHQuICBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoaXMgcmFiYml0IGhvbGUgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTE0PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXG5tbS9odWdlX21lbW9yeS5jOjEyMTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AuIE15IGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gaW1tZWRpYXRlbHkgcGxhY2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gaXRzIGxhcmdlciBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgKndoZW4qIGl0JiMzOTtzIGNhbGxlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksICp3aGF0KiBpdCYjMzk7cyB0cnlpbmcgdG8gYWNoaWV2ZSByZWdhcmRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgdmlydHVhbCBtZW1vcnkgYXJlYXMgKFZNQXMpLiBJIGtub3cgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBkZXRlcm1pbmluZyBpZiBhIFZNQSBpcyBzdWl0YWJsZSBmb3IgVEhQIGFsbG9jYXRpb24uCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBteXNlbGYgZm9yIGEgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbCBzaXRlczsgcHJvYmFibHkgdGhyb3VnaCBzb21lIGdyZXAtZnUgb3IgYSBxdWljayBJREUgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gS25vd2luZyB0aGUgY2FsbGVyIGZ1bmN0aW9ucyB3aWxsIHByb3ZpZGUgdml0YWwgY2x1ZXMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggaW5pdGlhbCBtYXBwaW5nLCBtaWdyYXRpb24sIG9yIHNvbWUgb3RoZXIgb3BlcmF0aW9uPyBUaGF0JiMzOTtzIGdvaW5nIHRvIGhlYXZpbHkgaW5mbHVlbmNlIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgZnVuY3Rpb24mIzM5O3MgbG9naWMuCgpJIGFudGljaXBhdGUgaXQmIzM5O3MgbG9va2luZyBhdCBmYWN0b3JzIGxpa2UgdGhlIFZNQSBmbGFncywgc2l6ZSwgcG90ZW50aWFsbHkgYWxpZ25tZW50LCBhbmQgbWF5YmUgZXZlbiB0aGUgbWVtb3J5IHBvbGljeS4gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHF1ZXN0aW9uczogSXMgaXQgY2hlY2tpbmcgZm9yIGNvbmZsaWN0aW5nIGZsYWdzLCBzdWNoIGFzIHRob3NlIHRoYXQgd291bGQgcHJldmVudCBUSFAgdXNhZ2UsIGxpa2UgaHVnZXBhZ2UtZGlzYWJsZWQgZmxhZ3M/IElzIGl0IGV4YW1pbmluZyB0aGUgVk1BJiMzOTtzIHNpemUgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGh1Z2VwYWdlIHNpemVzIG9uIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZT8gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBsaWtlbHkgcGVyZm9ybWluZyBzb21lIGJpdHdpc2Ugb3BlcmF0aW9ucyB0byBleHRyYWN0IHRoZSBjcnVjaWFsIGluZm9ybWF0aW9uIHRvIG1ha2UgYSBkZWNpc2lvbi4KCkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbnRlcnBsYXkgd2l0aCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gSXMgdGhpcyBmdW5jdGlvbiBqdXN0IHRoZSBmaXJzdCBzdGVwIGluIGEgbGFyZ2VyIHByb2Nlc3MsIG9yIGlzIGl0IGEgZ2F0ZWtlZXBlciB0aGF0IGRpcmVjdGx5IGRldGVybWluZXMgZWxpZ2liaWxpdHk/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBpbXBsaWNhdGlvbnMgb2YgdGhlIHJldHVybmVkIHZhbHVlLiBBcmUgdGhlcmUgYW55IGNvcm5lciBjYXNlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUg4oCTIHRoaW5ncyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgbWlzc2VkIGlmIHRoZSBjb2RlIGlzbuKAmXQgcmV2aWV3ZWQgd2l0aCBjYXJlPwoKRmluYWxseSwgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIG9yZGVyIGNoZWNrLiBQcm9iYWJseSBhIGNvbXBhcmlzb24gb2YgcmVxdWVzdGVkIHBhZ2VzIHdpdGggdGhlIHBhZ2Ugc2l6ZSDigJMgbGlrZWx5IHRoZSBsYXJnZXN0IHN1cHBvcnRlZCBwYWdlIHNpemUuIEFuZCwgSeKAmWxsIGJlIHdhdGNoaW5nIGZvciBhbnkgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMuIEkgZXhwZWN0IHRoZSBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIG1heSBiZSBzdWJ0bHkgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTctXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTg6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5OS1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MzE5PXVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0MS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjM0MjpcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQzLX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTExND1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxubW0vaHVnZV9tZW1vcnkuYzoxMjE6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIyLVx0XHRcdFx0XHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGUgbmFtZSByaW5ncyBhIGJlbGwsIEkga25vdyB0aGlzIGlzIGEgY29yZSBNZW1vcnkgTWFuYWdlbWVudCBmdW5jdGlvbi4gSSBjYW4gc2VlIHRoYXQgYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgY2FsbHMgaXQgZGlyZWN0bHkuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nLCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgY2hlY2sgaXMgYHZtYV9pc19zcGVjaWFsX2h1Z2VgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbml0aWFsIGNvbnRleHQgSSBuZWVkLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgc2V0dGluZyB1cCB0aGUgY29udGV4dCBmb3IgaHVnZSBwYWdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfaXNfc3BlY2lhbF9odWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTk1PXN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3RocF9lbmFibGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTEzLS8qIElmIHJldHVybnMgdHJ1ZSwgd2UgYXJlIHVuYWJsZSB0byBhY2Nlc3MgdGhlIFZNQSYjMzk7cyBmb2xpb3MuICovXG5tbS9odWdlX21lbW9yeS5jOjExNDpzdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vaHVnZV9tZW1vcnkuYy0xMTUte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTIxPXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzMtXHRcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9BTk9OO1xubW0vaHVnZV9tZW1vcnkuYzoxMzQ6XHRlbHNlIGlmICh2bWFfaXNfZGF4KHZtYSkgfHwgdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxubW0vaHVnZV9tZW1vcnkuYy0xMzUtXHRcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9TUEVDSUFMX0RBWDtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5OC1cdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjE5OTpcdFx0aWYgKCFmb3JjZWRfY29sbGFwc2UgXHUwMDI2XHUwMDI2ICF2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkgXHUwMDI2XHUwMDI2XG5tbS9odWdlX21lbW9yeS5jLTIwMC1cdFx0ICAgICghaHVnZXBhZ2VfZ2xvYmFsX2VuYWJsZWQoKSB8fCAoISh2bV9mbGFncyBcdTAwMjYgVk1fSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjk0MD1pbnQgemFwX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjk1Mi1cdHRsYl9yZW1vdmVfcHVkX3RsYl9lbnRyeSh0bGIsIHB1ZCwgYWRkcik7XG5tbS9odWdlX21lbW9yeS5jOjI5NTM6XHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKSB7XG5tbS9odWdlX21lbW9yeS5jLTI5NTQtXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDc0PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzEwMy1cdFx0XHR6YXBfZGVwb3NpdGVkX3RhYmxlKG1tLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzozMTA0Olx0XHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxubW0vaHVnZV9tZW1vcnkuYy0zMTA1LVx0XHRcdHJldHVybjtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ2MzY9c3RhdGljIGlubGluZSBib29sIHZtYV9ub3Rfc3VpdGFibGVfZm9yX3RocF9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2MzktXHRcdHJldHVybiB0cnVlO1xubW0vaHVnZV9tZW1vcnkuYzo0NjQwOlx0aWYgKHZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDY0MS1cdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqVEhQIFZNQSBPcmRlciBDaGFuZ2UgLSBGdXp6aW5nIFBvdGVudGlhbCoqCgpSaWdodCwgc28gdGhpcyBjaGFuZ2UgZm9jdXNlcyBvbiB0aGUgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbXBhY3RzIFRIUCBiZWhhdmlvciBmb3IgY2VydGFpbiwgJiMzNDtzcGVjaWFsJiMzNDsgaHVnZSBWTUFzLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IHNoaWZ0IOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29yZSBNZW1vcnkgTWFuYWdlbWVudCAoTU0pIGtlcm5lbCBjb2RlLiBHaXZlbiBpdHMgZGlyZWN0IGltcGFjdCBvbiBob3cgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBhcmUgaGFuZGxlZCBpbiBlZGdlIGNhc2VzLCBpdCYjMzk7cyBzY3JlYW1pbmcgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi4KCkxldCYjMzk7cyBxdWlja2x5IGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBgbW0vaHVnZV9tZW1vcnkuY2AgKHdoZXJlIHRoaXMgbGlrZWx5IHJlc2lkZXMpIGlzIGNvbXBpbGVkIGFzIHBhcnQgb2YgdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIChUSFApIHN1YnN5c3RlbS4gU28sIHRoaXMgY29kZSBwYXRoIHdpbGwgYmUgZW5hYmxlZCBvbmx5IHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX21lbW9yeS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgYSByZXF1aXJlbWVudCBoZXJlLiBCdXQgSSBjYW4mIzM5O3QganVzdCBzdG9wIHRoZXJlLiBBcmUgdGhlcmUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcgcmVsYXRlZCB0byB0aGlzIFRIUCBmdW5jdGlvbmFsaXR5PyBJIHJlbWVtYmVyIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgcmVsYXRlZCB0byBodWdlcGFnZXMsIHNvIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgYXNzb2NpYXRlZCBjb25maWdzLiBUaGlzIGFsc28gc3VnZ2VzdHMgd2hhdCBmdW5jdGlvbmFsaXR5IEkgc2hvdWxkIGJlIGludmVzdGlnYXRpbmcuCgpGb2N1c2luZyBpbiBvbiBmdW5jdGlvbnMgbm93Li4uIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSXQmIzM5O3MgaW50ZXJuYWwsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhIGNvcmUgY29tcG9uZW50IGFuZCBwb3NzaWJseSBhIGdvb2Qgc3BvdCB0byBpbnN0cnVtZW50IG9yIGFuYWx5emUuIEkgc2hvdWxkIHNlZSB3aGljaCBjYWxscyB0aGlzIGZ1bmN0aW9uLCB0byBnYWluIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTE0NTY9c3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xNDczLVx0c2VxX3ByaW50ZihtLCBcJiMzNDtUSFBlbGlnaWJsZTogICAgJTh1XFxuXCYjMzQ7LFxuZnMvcHJvYy90YXNrX21tdS5jOjE0NzQ6XHRcdCAgICEhdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCBUVkFfU01BUFMsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ3NS1cdFx0XHRcdFx0ICAgICAgVEhQX09SREVSU19BTEwpKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD05Nz1lbnVtIHR2YV90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDQtI2RlZmluZSB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcih2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcikgXFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjEwNTpcdCghIXRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBCSVQob3JkZXIpKSlcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwNi1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0yNzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5Ny1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI5ODp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk5LVx0XHRcdFx0XHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDMtLyoqXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozMDQ6ICogdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzIC0gZGV0ZXJtaW5lIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciB2bWFcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwNS0gKiBAdm1hOiAgdGhlIHZtIGFyZWEgdG8gY2hlY2tcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMTg9c3RhdGljIGlubGluZVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzE5OnVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzIwLVx0XHRcdFx0ICAgICAgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQxLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzQyOlx0cmV0dXJuIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIG9yZGVycyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDMtfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTU5OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjAzLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjA0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02MDUtXHRcdFx0XHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEyMC1cbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTUtXHRcdCAqIEVuZm9yY2UgVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cyBhcyBuZWNlc3NhcnkuIEFub255bW91cyB2bWFzXG5tbS9odWdlX21lbW9yeS5jOjE5NjpcdFx0ICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuIFNwZWNpYWxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk3LVx0XHQgKiBtYXBwaW5ncyBoYXZlIG5vIFRIUCBjb3N0cyBhbmQgYXJlIGV4ZW1wdC5cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTY2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTc2LVxubW0va2h1Z2VwYWdlZC5jOjU3NzpcdHJldHVybiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzLCBvcmRlcnMpO1xubW0va2h1Z2VwYWdlZC5jLTU3OC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTEwNDY9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTA2OS1cdFx0cmV0dXJuIFNDQU5fQUREUkVTU19SQU5HRTtcbm1tL2todWdlcGFnZWQuYzoxMDcwOlx0aWYgKCF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIHR5cGUsIEJJVChvcmRlcikpKVxubW0va2h1Z2VwYWdlZC5jLTEwNzEtXHRcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTA3NS1cdCAqXG5tbS9raHVnZXBhZ2VkLmM6MTA3NjpcdCAqIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyBtYXkgcmV0dXJuIHRydWUgZm9yIHF1YWxpZmllZCBmaWxlXG5tbS9raHVnZXBhZ2VkLmMtMTA3Ny1cdCAqIHZtYXMuXG4tLVxubW0vbWVtb3J5LmM9NDY2MT1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00NjkwLVx0ICovXG5tbS9tZW1vcnkuYzo0NjkxOlx0b3JkZXJzID0gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCBUVkFfUEFHRUZBVUxULFxubW0vbWVtb3J5LmMtNDY5Mi1cdFx0XHRcdFx0ICBCSVQoUE1EX09SREVSKSAtIDEpO1xuLS1cbm1tL21lbW9yeS5jPTUxNjE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01MTgzLVx0ICovXG5tbS9tZW1vcnkuYzo1MTg0Olx0b3JkZXJzID0gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCBUVkFfUEFHRUZBVUxULFxubW0vbWVtb3J5LmMtNTE4NS1cdFx0XHRcdFx0ICBCSVQoUE1EX09SREVSKSAtIDEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzI3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIEFjY2Vzc2liaWxpdHkgb2YgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGZ1bmN0aW9uLiBUaGUgY29kZSBzdWdnZXN0cyBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaXRzIHZpc2liaWxpdHkuIFNpbmNlIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBzdGF0aWMsIGl0JiMzOTtzIGVpdGhlciBleHBvcnRlZCBvciBhdCBsZWFzdCBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGl0JiMzOTtzIGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGJlY2F1c2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGF1dG9tYXRpY2FsbHkgYWNjZXNzaWJsZSBhY3Jvc3MgdHJhbnNsYXRpb24gdW5pdHMgaWYgaXQmIzM5O3MgdmlzaWJsZS4gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTc1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgZnVuY3Rpb24uIEl0JiMzOTtzIG5vdCBleHBvcnRlZCwgc28gaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhpcyBtb2R1bGUsIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IG5vdCBhIHNpbXBsZSBzdGF0aWMgdmFsdWUuIFRoYXQgbWVhbnMgc29tZXRoaW5nIGNhbGxzIGl0LCBhbmQgaXQmIzM5O3MgZG9pbmcgc29tZXRoaW5nIGR5bmFtaWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZHluYW1pYyBhc3BlY3QuCgpJIHNlZSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucyBjYWxsIGl0OiBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCwgYGh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlYCwgYHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzYCwgYGFsbG9jX2Fub25fZm9saW9gLCBhbmQgYHNob3dfc21hcGAuIFRoYXQgZ2l2ZXMgbWUgYSBmZXcgZGVjZW50IGVudHJ5IHBvaW50cyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHVzZWQgYW5kIHdoYXQgaW5wdXRzIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuCgpgYWxsb2NfYW5vbl9mb2xpb2Agc3RhbmRzIG91dCBhcyBhIHByb21pc2luZyBmb2N1cyBzeW1ib2wuIEkmIzM5O3ZlIHdvcmtlZCB3aXRoIHRoYXQgYXJlYSBiZWZvcmUuIEl0JiMzOTtzIG9mdGVuIGludm9sdmVkIGluIGluaXRpYWwgbWVtb3J5IGFsbG9jYXRpb24sIHNvIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGRldGVybWluaW5nIHRoZSBzaXplcyBpdCYjMzk7cyB3aWxsaW5nIHRvIHdvcmsgd2l0aC4gYGh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlYCBsb29rcyBsaWtlIGEgdXNlZnVsIHBvaW50IHRvbywgYXMgaXQgaGludHMgYXQgb25nb2luZyB2YWxpZGF0aW9uIG9mIGh1Z2VwYWdlIHNldHVwcy4gT2YgY291cnNlLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGl0c2VsZiBpcyBhbHNvIGFuIGludGVyZXN0aW5nIGVudHJ5IHBvaW50IHRvIHN0YXJ0IGZyb20uCgpOb3csIGxldCBtZSBjaGVjayB0aGUgYHZtYV9pc19zcGVjaWFsX2h1Z2VgIGZ1bmN0aW9uLiBJIHN1c3BlY3QgdGhhdCBtaWdodCBiZSByZWxhdGVkIGFuZCBjb3VsZCBwcm92aWRlIGluc2lnaHQgaW50byB3aGF0IHRyaWdnZXJzIHRoZSBhbGxvd2FibGUgb3JkZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfaXNfc3BlY2lhbF9odWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9OTU9c3RhdGljIGlubGluZSBib29sIGZpbGVfdGhwX2VuYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMTMtLyogSWYgcmV0dXJucyB0cnVlLCB3ZSBhcmUgdW5hYmxlIHRvIGFjY2VzcyB0aGUgVk1BJiMzOTtzIGZvbGlvcy4gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTE0OnN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdlX21lbW9yeS5jLTExNS17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMjE9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEzMy1cdFx0c3VwcG9ydGVkX29yZGVycyA9IFRIUF9PUkRFUlNfQUxMX0FOT047XG5tbS9odWdlX21lbW9yeS5jOjEzNDpcdGVsc2UgaWYgKHZtYV9pc19kYXgodm1hKSB8fCB2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpXG5tbS9odWdlX21lbW9yeS5jLTEzNS1cdFx0c3VwcG9ydGVkX29yZGVycyA9IFRIUF9PUkRFUlNfQUxMX1NQRUNJQUxfREFYO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTk4LVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTk5Olx0XHRpZiAoIWZvcmNlZF9jb2xsYXBzZSBcdTAwMjZcdTAwMjYgIXZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSBcdTAwMjZcdTAwMjZcbm1tL2h1Z2VfbWVtb3J5LmMtMjAwLVx0XHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yOTQwPWludCB6YXBfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yOTUyLVx0dGxiX3JlbW92ZV9wdWRfdGxiX2VudHJ5KHRsYiwgcHVkLCBhZGRyKTtcbm1tL2h1Z2VfbWVtb3J5LmM6Mjk1MzpcdGlmICh2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMjk1NC1cdFx0c3Bpbl91bmxvY2socHRsKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMwNzQ9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMTAzLVx0XHRcdHphcF9kZXBvc2l0ZWRfdGFibGUobW0sIHBtZCk7XG5tbS9odWdlX21lbW9yeS5jOjMxMDQ6XHRcdGlmICh2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpXG5tbS9odWdlX21lbW9yeS5jLTMxMDUtXHRcdFx0cmV0dXJuO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYzNj1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX25vdF9zdWl0YWJsZV9mb3JfdGhwX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDYzOS1cdFx0cmV0dXJuIHRydWU7XG5tbS9odWdlX21lbW9yeS5jOjQ2NDA6XHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxubW0vaHVnZV9tZW1vcnkuYy00NjQxLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE1MwoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiAyNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRIUCBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgbGllcyB3aXRoaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gTXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IGdvZXMgdGhlcmUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMsIHNvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMsIG9mIGNvdXJzZSwgdGhlIHJlbGV2YW50IGNvbmZpZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncywgYnV0IG15IGluaXRpYWwgYXNzZXNzbWVudCBzdWdnZXN0cyB0aGlzIGlzIHRoZSBwcmltYXJ5IG9uZS4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgb2Yga2V5IGZ1bmN0aW9ucyBmb3IgbXkgYW5hbHlzaXM6IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBhbGxvY19hbm9uX2ZvbGlvYCwgYW5kIGBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBwbGF5ZXJzIGluIHRoaXMgVEhQIGxvZ2ljIG1vZGlmaWNhdGlvbi4gVGhpcyBgdm1hX2lzX3NwZWNpYWxfaHVnZWAgY2hlY2ssIHV0aWxpemluZyBgdm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9QRk5NQVBgIGFuZCBgdm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9NSVhFRE1BUGAsIGl0IGlzIHN0YW5kYXJkIE1NIHN0dWZmLiBOb3RoaW5nIHBhcnRpY3VsYXJseSB1bnVzdWFsLCBqdXN0IHRoZSB0eXBpY2FsIGZsYWdzIHdlIGV4cGVjdCB0byBzZWUgaW4gYSBWTUEgc3RydWN0dXJlLgoKVGhlIGdpc3Qgb2YgaXQgaXMgdGhpczogYSBwYXRjaCB0aGF0IGNoYW5nZXMgdGhlIFRIUCBiZWhhdmlvciwgYW5kIHNwZWNpZmljYWxseSBpbiBob3cgc3BlY2lhbCBodWdlIFZNQXMgYXJlIGhhbmRsZWQuIEl0JiMzOTtzIGV4ZW1wdGluZyBjZXJ0YWluIFZNQXMgZnJvbSB0aGUgdXN1YWwgVEhQIGNvc3QgY29uc2lkZXJhdGlvbnMsIGFsbG93aW5nIGZvciBtb3JlIGFnZ3Jlc3NpdmUgaHVnZSBwYWdlIGFsbG9jYXRpb24gb3IgY29sbGFwc2luZyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIFRoZSBjaGFuZ2UgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBtb2RpZmljYXRpb24gYWZmZWN0cyBodWdlIHBhZ2UgYWxsb2NhdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIHVzZXJzIGNhbiBpbnRlcmFjdCB3aXRoIHRocm91Z2ggYG1tYXBgIGFuZCBgbWFkdmlzZWAuCgpTbywgaGVyZSYjMzk7cyBteSBxdWljayBldmFsdWF0aW9uLCBpbiBhIGZvcm1hdCB0aGF0JiMzOTtzIHVzZWZ1bDoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gdGhpcyBpcyBhIGNvcmUgTU0gY2hhbmdlLCB3aXRoIHVzZXItc3BhY2UgcmVhY2gsIHZlcnkgZnV6emFibGUuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgYWxsb2NfYW5vbl9mb2xpb2AsIGBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZWAgLSB0aGVzZSBhcmUgbXkgaW5pdGlhbCB0YXJnZXRzLgoqICAgKipFbmFibGVDb25maWdzOioqIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgLSB0aGlzIGlzIG9idmlvdXNseSBhIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50LgoqICAgKipSZWFzb25pbmc6KiogVGhlIG1vZGlmaWNhdGlvbiBleGVtcHRzIHNwZWNpYWwgaHVnZSBWTUFzIGZyb20gdGhlIG5vcm1hbCBUSFAgb3JkZXIgY2hlY2tzIHdpdGhpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGltcGFjdHMgaHVnZSBwYWdlIGFsbG9jYXRpb24gYW5kIGNvbGxhcHNlLCBhbmQgaXMgdXNlci1yZWFjaGFibGUgdGhyb3VnaCBgbW1hcGAgYW5kIGBtYWR2aXNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7YWxsb2NfYW5vbl9mb2xpbyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV92bWFfcmV2YWxpZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCkgbG9naWMgaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIFZNQXMgZnJvbSBUSFAgY29zdHMgd2hlbiBjaGVja2luZyBhbGxvd2FibGUgb3JkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGh1Z2UgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgY29sbGFwc2VkLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwIGFuZCBtYWR2aXNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzJiMzNDssCiAgICAmIzM0O2FsbG9jX2Fub25fZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGxvZ2ljIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBWTUFzIGZyb20gVEhQIGNvc3RzIHdoZW4gY2hlY2tpbmcgYWxsb3dhYmxlIG9yZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBodWdlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGNvbGxhcHNlZCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcCBhbmQgbWFkdmlzZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBtYXBwaW5ncyBmcm9tIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBwb2xpY2llcyBhbmQgVk1BIGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGludmFsaWQgcGFnZSBhY2Nlc3NlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiNWFkNzVhMDhiYzQ0NjNiMTRlMGJmNzY0ZjRjMTJlN2YxOGU4ZDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwNzoyMzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDVkOTRmYTRjNzRmZGIuLmNlY2Y2YmQ4ZmYwYjEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMTkzLDkgJiM0MzsxOTMsMTAgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSkgewogCQkvKgogCQkgKiBFbmZvcmNlIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMgYXMgbmVjZXNzYXJ5LiBBbm9ueW1vdXMgdm1hcwotCQkgKiB3ZXJlIGFscmVhZHkgaGFuZGxlZCBpbiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoKS4KJiM0MzsJCSAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLiBTcGVjaWFsCiYjNDM7CQkgKiBtYXBwaW5ncyBoYXZlIG5vIFRIUCBjb3N0cyBhbmQgYXJlIGV4ZW1wdC4KIAkJICovCi0JCWlmICghZm9yY2VkX2NvbGxhcHNlICZhbXA7JmFtcDsKJiM0MzsJCWlmICghZm9yY2VkX2NvbGxhcHNlICZhbXA7JmFtcDsgIXZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSAmYW1wOyZhbXA7CiAJCSAgICAoIWh1Z2VwYWdlX2dsb2JhbF9lbmFibGVkKCkgfHwgKCEodm1fZmxhZ3MgJmFtcDsgVk1fSFVHRVBBR0UpICZhbXA7JmFtcDsKIAkJCQkJCSAgICAhaHVnZXBhZ2VfZ2xvYmFsX2Fsd2F5cygpKSkpCiAJCQlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjIKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEhQIFZNQSBBbGxvd2FibGUgT3JkZXJzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggdG8gYG1tL2h1Z2VfbWVtb3J5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgZm9jdXNlZCBvbiB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBhbHRlcmF0aW9uIHdpdGhpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGAhdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpYCB0byB0aGUgY29uZGl0aW9uYWwgY2hlY2suIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhYm91dCB3aGV0aGVyIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYXJlIHBlcm1pdHRlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgd2hlbiBtYW5hZ2luZyBWaXJ0dWFsIE1lbW9yeSBBcmVhcyAoVk1BcykuCgpUaGUgb3JpZ2luYWwgY2hlY2ssIGFzIEkgdW5kZXJzdGFuZCBpdCwgcmVzdHJpY3RlZCBUSFAgdXNlIGlmIGBmb3JjZWRfY29sbGFwc2VgIHdhcyBmYWxzZSwgYW5kIGVpdGhlciBnbG9iYWwgaHVnZSBwYWdlcyB3ZXJlIGRpc2FibGVkIG9yIHRoZSBWTUEgZGlkbiYjMzk7dCBleHBsaWNpdGx5IHJlcXVlc3QgaHVnZSBwYWdlcy4gTm93LCB0aGlzIGB2bWFfaXNfc3BlY2lhbF9odWdlYCBjb25kaXRpb24gaXMgaW5zZXJ0ZWQuIFRoaXMgbW9kaWZpY2F0aW9uIGFsbG93cyBUSFAgdG8gYmUgY29uc2lkZXJlZCBmb3IgJiMzNDtzcGVjaWFsJiMzNDsgaHVnZSBtYXBwaW5ncyBldmVuIHdoZW4gdGhlIGJyb2FkZXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldCwgc28gbG9uZyBhcyBgZm9yY2VkX2NvbGxhcHNlYCBpcyBhbHNvIGZhbHNlLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQgYWZ0ZXIgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgY29kZSBhbmQgaXRzIGNvbnRleHQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgZGlyZWN0IGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBwYXRjaCBwcmltYXJpbHkgYWx0ZXJzIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhlIFRIUCBkZWNpc2lvbiBwcm9jZXNzLCBhZmZlY3RpbmcgcGFnZSBhbGxvY2F0aW9uIGFuZCBWTUEgZmxhZyBjaGVja3MuIFRoZXJlJiMzOTtzIG5vIGNyZWF0aW9uIG9mIG5ldyBtZW1vcnkgcmVnaW9ucyBvciBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgcGFnZSBmYXVsdHMsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBUaGVzZSwgSSYjMzk7bSBjb25maWRlbnQsIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gb3IgdGhlIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgc2FmZXR5IGNoZWNrcy4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLgoKTG9va2luZyBjbG9zZXIsIEkmIzM5O20gc2ltcGx5IHNlZWluZyBhIG1vZGlmaWNhdGlvbiBvZiBhIGNvbmRpdGlvbi4gSSYjMzk7bSBnb2luZyB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvZGUuIFRoZSBjaGFuZ2Ugc2ltcGx5IGFsdGVycyB0aGUgY29udHJvbCBmbG93IHdpdGhpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHRvIGFsbG93IFRIUCB3aXRoICYjMzQ7c3BlY2lhbCYjMzQ7IGh1Z2UgbWFwcGluZ3MuCgpTbywgaW4gZXNzZW5jZSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgVEhQIHBvbGljeSBkZWNpc2lvbi1tYWtpbmcgcHJvY2Vzcy4gVGhlIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggSSBjYW4gcmVhZGlseSBzZWUuIE5vIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIHRha2luZyBwbGFjZS4gVGhpcyBpcyBub3QgYSBLTVNBTiBpc3N1ZSwgc28gSSYjMzk7bGwgc2V0IE5lZWRzS01TQU4gdG8gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIG1hcHBpbmdzIGZyb20gVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljaWVzIGFuZCBWTUEgZmxhZ3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgaW52YWxpZCBwYWdlIGFjY2Vzc2VzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIG1hcHBpbmdzIGZyb20gVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljaWVzIGFuZCBWTUEgZmxhZ3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgaW52YWxpZCBwYWdlIGFjY2Vzc2VzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MjM6MzkuOTY2MjM2NzgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2MDg5NzY3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiLFxuICAgIFwiYWxsb2NfYW5vbl9mb2xpb1wiLFxuICAgIFwiaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIG1hcHBpbmdzIGZyb20gVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljaWVzIGFuZCBWTUEgZmxhZ3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgaW52YWxpZCBwYWdlIGFjY2Vzc2VzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCkgbG9naWMgaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIFZNQXMgZnJvbSBUSFAgY29zdHMgd2hlbiBjaGVja2luZyBhbGxvd2FibGUgb3JkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGh1Z2UgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgY29sbGFwc2VkLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwIGFuZCBtYWR2aXNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyMzozOS45NjYyNDI2ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTkzNjEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBiNWFkNzVhMDhiYzQ0NjNiMTRlMGJmNzY0ZjRjMTJlN2YxOGU4ZDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDc6MjM6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCA1ZDk0ZmE0Yzc0ZmRiLi5jZWNmNmJkOGZmMGIxIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTE5Myw5ICsxOTMsMTAgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogRW5mb3JjZSBUSFAgY29sbGFwc2UgcmVxdWlyZW1lbnRzIGFzIG5lY2Vzc2FyeS4gQW5vbnltb3VzIHZtYXNcXG4tXFx0XFx0ICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuXFxuK1xcdFxcdCAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLiBTcGVjaWFsXFxuK1xcdFxcdCAqIG1hcHBpbmdzIGhhdmUgbm8gVEhQIGNvc3RzIGFuZCBhcmUgZXhlbXB0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFmb3JjZWRfY29sbGFwc2UgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKCFmb3JjZWRfY29sbGFwc2UgXFx1MDAyNlxcdTAwMjYgIXZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAhaHVnZXBhZ2VfZ2xvYmFsX2Fsd2F5cygpKSkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyMzo0MC4zNzg5OTYxNDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NTUzNjY5NjE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gICAgXCJhbGxvY19hbm9uX2ZvbGlvXCIsXG4gICAgXCJodWdlcGFnZV92bWFfcmV2YWxpZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBsb2dpYyBpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHRvIGV4ZW1wdCBzcGVjaWFsIGh1Z2UgVk1BcyBmcm9tIFRIUCBjb3N0cyB3aGVuIGNoZWNraW5nIGFsbG93YWJsZSBvcmRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGFuZCBjb2xsYXBzZWQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1tYXAgYW5kIG1hZHZpc2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiNWFkNzVhMDhiYzQ0NjNiMTRlMGJmNzY0ZjRjMTJlN2YxOGU4ZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNzoyMzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA1ZDk0ZmE0Yzc0ZmRiLi5jZWNmNmJkOGZmMGIxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTE5Myw5ICsxOTMsMTAgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIEVuZm9yY2UgVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cyBhcyBuZWNlc3NhcnkuIEFub255bW91cyB2bWFzXG4tXHRcdCAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLlxuK1x0XHQgKiB3ZXJlIGFscmVhZHkgaGFuZGxlZCBpbiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoKS4gU3BlY2lhbFxuK1x0XHQgKiBtYXBwaW5ncyBoYXZlIG5vIFRIUCBjb3N0cyBhbmQgYXJlIGV4ZW1wdC5cbiBcdFx0ICovXG4tXHRcdGlmICghZm9yY2VkX2NvbGxhcHNlIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoIWZvcmNlZF9jb2xsYXBzZSBcdTAwMjZcdTAwMjYgIXZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICghaHVnZXBhZ2VfZ2xvYmFsX2VuYWJsZWQoKSB8fCAoISh2bV9mbGFncyBcdTAwMjYgVk1fSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0XHRcdCAgICAhaHVnZXBhZ2VfZ2xvYmFsX2Fsd2F5cygpKSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyMzo0MC4zNzg5OTc4NDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE5MjA2MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRIUCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL2h1Z2VfbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgZnVuY3Rpb24uIFRoaXMgaXMgaW4gdGhlIGhlYXJ0IG9mIFRIUCBtYW5hZ2VtZW50LCBzbyBpdCdzIHdvcnRoIGEgY2xvc2UgbG9vay4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgcHJldHR5IGZvY3VzZWQ6IGl0J3MgYWRkaW5nIGEgY2hlY2sgZm9yIGB2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSlgIHRvIHRoZSBjb25kaXRpb25hbC4gIEVzc2VudGlhbGx5LCBpdCdzIHRpZ2h0ZW5pbmcgdXAgdGhlIGNyaXRlcmlhIGZvciBhbGxvd2luZyBUSFAgb3JkZXJzLiBUaGUgb3JpZ2luYWwgY29uZGl0aW9uIHdhcyBgIWZvcmNlZF9jb2xsYXBzZWAsIG5vdyBpdCdzIGAhZm9yY2VkX2NvbGxhcHNlIFx1MDAyNlx1MDAyNiAhdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpYC4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBhbGxvdyBodWdlIHBhZ2UgYWxsb2NhdGlvbiBpbiBhIFZNQSBpZiBpdCdzIGNvbnNpZGVyZWQgXCJzcGVjaWFsXCIgaW4gc29tZSB3YXkuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25zdGl0dXRlcyBhIFwic3BlY2lhbCBodWdlIFZNQVwiLiBXaGF0IHNjZW5hcmlvcyBpcyB0aGlzIGFpbWVkIGF0PyAgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGB2bWFfaXNfc3BlY2lhbF9odWdlYCB0byBnZXQgdGhlIGNvbnRleHQuIERvZXMgdGhpcyByZWxhdGUgdG8gcGVyc2lzdGVudCBtZW1vcnksIGRldmljZSBtZW1vcnksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyAgQW5kIHRoZW4sIEkgbmVlZCB0byBzZWUgaG93IHRoZSBhZGRpdGlvbiBvZiB0aGlzIGNoZWNrIGFsdGVycyB0aGUgc3lzdGVtIGJlaGF2aW9yIHJlZ2FyZGluZyBUSFAgdXNhZ2UgaW4gdGhlc2Ugc3BlY2lmaWMgVk1Bcy4gVWx0aW1hdGVseSwgd2hhdCBhcmUgdGhlIHVzZSBjYXNlcyBhbmQgdGhlaXIgZXhwZWN0ZWQgb3V0Y29tZXM/IFRoaXMgaXMgZ29pbmcgdG8gcmVxdWlyZSBzb21lIGRlZXBlciBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBwb3NzaWJseSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIGNvbW1pdCBtZXNzYWdlcyBmb3IgY29udGV4dC4gIExldCdzIHNlZSB3aGVyZSB0aGlzIHJhYmJpdCBob2xlIGxlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MjM6NDUuNTk4MjA2OTI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDkxNzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjIzOjQ1LjY0NzcwNDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzcxNzM5NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGltbWVkaWF0ZWx5IHBsYWNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIGl0cyBsYXJnZXIgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsICp3aGVuKiBpdCdzIGNhbGxlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksICp3aGF0KiBpdCdzIHRyeWluZyB0byBhY2hpZXZlIHJlZ2FyZGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCB2aXJ0dWFsIG1lbW9yeSBhcmVhcyAoVk1BcykuIEkga25vdyB0aGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgbGlrZWx5IGludm9sdmVkIGluIGRldGVybWluaW5nIGlmIGEgVk1BIGlzIHN1aXRhYmxlIGZvciBUSFAgYWxsb2NhdGlvbi5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBteXNlbGYgZm9yIGEgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbCBzaXRlczsgcHJvYmFibHkgdGhyb3VnaCBzb21lIGdyZXAtZnUgb3IgYSBxdWljayBJREUgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gS25vd2luZyB0aGUgY2FsbGVyIGZ1bmN0aW9ucyB3aWxsIHByb3ZpZGUgdml0YWwgY2x1ZXMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggaW5pdGlhbCBtYXBwaW5nLCBtaWdyYXRpb24sIG9yIHNvbWUgb3RoZXIgb3BlcmF0aW9uPyBUaGF0J3MgZ29pbmcgdG8gaGVhdmlseSBpbmZsdWVuY2UgdGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBmdW5jdGlvbidzIGxvZ2ljLlxuXG5JIGFudGljaXBhdGUgaXQncyBsb29raW5nIGF0IGZhY3RvcnMgbGlrZSB0aGUgVk1BIGZsYWdzLCBzaXplLCBwb3RlbnRpYWxseSBhbGlnbm1lbnQsIGFuZCBtYXliZSBldmVuIHRoZSBtZW1vcnkgcG9saWN5LiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnM6IElzIGl0IGNoZWNraW5nIGZvciBjb25mbGljdGluZyBmbGFncywgc3VjaCBhcyB0aG9zZSB0aGF0IHdvdWxkIHByZXZlbnQgVEhQIHVzYWdlLCBsaWtlIGh1Z2VwYWdlLWRpc2FibGVkIGZsYWdzPyBJcyBpdCBleGFtaW5pbmcgdGhlIFZNQSdzIHNpemUgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGh1Z2VwYWdlIHNpemVzIG9uIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZT8gSSdtIGFzc3VtaW5nIGl0J3MgbGlrZWx5IHBlcmZvcm1pbmcgc29tZSBiaXR3aXNlIG9wZXJhdGlvbnMgdG8gZXh0cmFjdCB0aGUgY3J1Y2lhbCBpbmZvcm1hdGlvbiB0byBtYWtlIGEgZGVjaXNpb24uXG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbnRlcnBsYXkgd2l0aCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gSXMgdGhpcyBmdW5jdGlvbiBqdXN0IHRoZSBmaXJzdCBzdGVwIGluIGEgbGFyZ2VyIHByb2Nlc3MsIG9yIGlzIGl0IGEgZ2F0ZWtlZXBlciB0aGF0IGRpcmVjdGx5IGRldGVybWluZXMgZWxpZ2liaWxpdHk/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBpbXBsaWNhdGlvbnMgb2YgdGhlIHJldHVybmVkIHZhbHVlLiBBcmUgdGhlcmUgYW55IGNvcm5lciBjYXNlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUg4oCTIHRoaW5ncyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgbWlzc2VkIGlmIHRoZSBjb2RlIGlzbuKAmXQgcmV2aWV3ZWQgd2l0aCBjYXJlP1xuXG5GaW5hbGx5LCBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBvcmRlciBjaGVjay4gUHJvYmFibHkgYSBjb21wYXJpc29uIG9mIHJlcXVlc3RlZCBwYWdlcyB3aXRoIHRoZSBwYWdlIHNpemUg4oCTIGxpa2VseSB0aGUgbGFyZ2VzdCBzdXBwb3J0ZWQgcGFnZSBzaXplLiBBbmQsIEnigJlsbCBiZSB3YXRjaGluZyBmb3IgYW55IGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiBtYXkgYmUgc3VidGx5IGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MjM6NTIuNDE5NDQ3MzE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjkxMDM5OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTctXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mjk4OnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk5LVxcdFxcdFxcdFxcdFxcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MzE5PXVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQxLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjM0MjpcXHRyZXR1cm4gX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHlwZSwgb3JkZXJzKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDMtfVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjIzOjU0LjI4ODU2MTMyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDQ1MTA2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gVGhlIG5hbWUgcmluZ3MgYSBiZWxsLCBJIGtub3cgdGhpcyBpcyBhIGNvcmUgTWVtb3J5IE1hbmFnZW1lbnQgZnVuY3Rpb24uIEkgY2FuIHNlZSB0aGF0IGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGNhbGxzIGl0IGRpcmVjdGx5LiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0J3MgZG9pbmcsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ2xsIGNoZWNrIGlzIGB2bWFfaXNfc3BlY2lhbF9odWdlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5pdGlhbCBjb250ZXh0IEkgbmVlZC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgc2V0dGluZyB1cCB0aGUgY29udGV4dCBmb3IgaHVnZSBwYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjIzOjU3LjIzMzA3NTAxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDg1MDYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFfaXNfc3BlY2lhbF9odWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz05NT1zdGF0aWMgaW5saW5lIGJvb2wgZmlsZV90aHBfZW5hYmxlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTEzLS8qIElmIHJldHVybnMgdHJ1ZSwgd2UgYXJlIHVuYWJsZSB0byBhY2Nlc3MgdGhlIFZNQSdzIGZvbGlvcy4gKi9cXG5tbS9odWdlX21lbW9yeS5jOjExNDpzdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTE1LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTIxPXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEzMy1cXHRcXHRzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTjtcXG5tbS9odWdlX21lbW9yeS5jOjEzNDpcXHRlbHNlIGlmICh2bWFfaXNfZGF4KHZtYSkgfHwgdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1LVxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9TUEVDSUFMX0RBWDtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk4LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTk5OlxcdFxcdGlmICghZm9yY2VkX2NvbGxhcHNlIFxcdTAwMjZcXHUwMDI2ICF2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9odWdlX21lbW9yeS5jLTIwMC1cXHRcXHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI5NDA9aW50IHphcF9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjk1Mi1cXHR0bGJfcmVtb3ZlX3B1ZF90bGJfZW50cnkodGxiLCBwdWQsIGFkZHIpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjk1MzpcXHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0yOTU0LVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwNzQ9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxMDMtXFx0XFx0XFx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjMxMDQ6XFx0XFx0aWYgKHZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSlcXG5tbS9odWdlX21lbW9yeS5jLTMxMDUtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NjM2PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfbm90X3N1aXRhYmxlX2Zvcl90aHBfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2MzktXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vaHVnZV9tZW1vcnkuYzo0NjQwOlxcdGlmICh2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpXFxubW0vaHVnZV9tZW1vcnkuYy00NjQxLVxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyMzo1Ny4yODM5MzM4NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjMxOTY3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqVEhQIFZNQSBPcmRlciBDaGFuZ2UgLSBGdXp6aW5nIFBvdGVudGlhbCoqXG5cblJpZ2h0LCBzbyB0aGlzIGNoYW5nZSBmb2N1c2VzIG9uIHRoZSBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGltcGFjdHMgVEhQIGJlaGF2aW9yIGZvciBjZXJ0YWluLCBcInNwZWNpYWxcIiBodWdlIFZNQXMuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQg4oCTIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSB3aXRoaW4gdGhlIGNvcmUgTWVtb3J5IE1hbmFnZW1lbnQgKE1NKSBrZXJuZWwgY29kZS4gR2l2ZW4gaXRzIGRpcmVjdCBpbXBhY3Qgb24gaG93IFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgYXJlIGhhbmRsZWQgaW4gZWRnZSBjYXNlcywgaXQncyBzY3JlYW1pbmcgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi5cblxuTGV0J3MgcXVpY2tseSBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYG1tL2h1Z2VfbWVtb3J5LmNgICh3aGVyZSB0aGlzIGxpa2VseSByZXNpZGVzKSBpcyBjb21waWxlZCBhcyBwYXJ0IG9mIHRoZSBUcmFuc3BhcmVudCBIdWdlcGFnZSAoVEhQKSBzdWJzeXN0ZW0uIFNvLCB0aGlzIGNvZGUgcGF0aCB3aWxsIGJlIGVuYWJsZWQgb25seSB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjAxLjIwNzEzNTc2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MzgyNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9tZW1vcnkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyNDowMS4yNTU5ODI1MTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0OTUzMzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGhlcmUuIEJ1dCBJIGNhbid0IGp1c3Qgc3RvcCB0aGVyZS4gQXJlIHRoZXJlICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nIHJlbGF0ZWQgdG8gdGhpcyBUSFAgZnVuY3Rpb25hbGl0eT8gSSByZW1lbWJlciBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIHJlbGF0ZWQgdG8gaHVnZXBhZ2VzLCBzbyBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGFzc29jaWF0ZWQgY29uZmlncy4gVGhpcyBhbHNvIHN1Z2dlc3RzIHdoYXQgZnVuY3Rpb25hbGl0eSBJIHNob3VsZCBiZSBpbnZlc3RpZ2F0aW5nLlxuXG5Gb2N1c2luZyBpbiBvbiBmdW5jdGlvbnMgbm93Li4uIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSXQncyBpbnRlcm5hbCwgd2hpY2ggbWVhbnMgaXQncyBsaWtlbHkgYSBjb3JlIGNvbXBvbmVudCBhbmQgcG9zc2libHkgYSBnb29kIHNwb3QgdG8gaW5zdHJ1bWVudCBvciBhbmFseXplLiBJIHNob3VsZCBzZWUgd2hpY2ggY2FsbHMgdGhpcyBmdW5jdGlvbiwgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjA1LjUwNTUxOTMzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMDYxODExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0xNDU2PXN0YXRpYyBpbnQgc2hvd19zbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xNDczLVxcdHNlcV9wcmludGYobSwgXFxcIlRIUGVsaWdpYmxlOiAgICAlOHVcXFxcblxcXCIsXFxuZnMvcHJvYy90YXNrX21tdS5jOjE0NzQ6XFx0XFx0ICAgISF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCBUVkFfU01BUFMsXFxuZnMvcHJvYy90YXNrX21tdS5jLTE0NzUtXFx0XFx0XFx0XFx0XFx0ICAgICAgVEhQX09SREVSU19BTEwpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTk3PWVudW0gdHZhX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTA0LSNkZWZpbmUgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXIodm1hLCB2bV9mbGFncywgdHlwZSwgb3JkZXIpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMDU6XFx0KCEhdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIEJJVChvcmRlcikpKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTctXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mjk4OnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk5LVxcdFxcdFxcdFxcdFxcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzAzLS8qKlxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjMwNDogKiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMgLSBkZXRlcm1pbmUgaHVnZXBhZ2Ugb3JkZXJzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIHZtYVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwNS0gKiBAdm1hOiAgdGhlIHZtIGFyZWEgdG8gY2hlY2tcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTMxOD1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzE5OnVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMyMC1cXHRcXHRcXHRcXHQgICAgICAgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0MS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozNDI6XFx0cmV0dXJuIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIG9yZGVycyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTU5OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02MDMtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjA0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjA1LVxcdFxcdFxcdFxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTExND1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXFxubW0vaHVnZV9tZW1vcnkuYzoxMjE6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk1LVxcdFxcdCAqIEVuZm9yY2UgVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cyBhcyBuZWNlc3NhcnkuIEFub255bW91cyB2bWFzXFxubW0vaHVnZV9tZW1vcnkuYzoxOTY6XFx0XFx0ICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuIFNwZWNpYWxcXG5tbS9odWdlX21lbW9yeS5jLTE5Ny1cXHRcXHQgKiBtYXBwaW5ncyBoYXZlIG5vIFRIUCBjb3N0cyBhbmQgYXJlIGV4ZW1wdC5cXG4tLVxcbm1tL2todWdlcGFnZWQuYz01NjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU3Ni1cXG5tbS9raHVnZXBhZ2VkLmM6NTc3OlxcdHJldHVybiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzLCBvcmRlcnMpO1xcbm1tL2todWdlcGFnZWQuYy01NzgtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEwNDY9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDY5LVxcdFxcdHJldHVybiBTQ0FOX0FERFJFU1NfUkFOR0U7XFxubW0va2h1Z2VwYWdlZC5jOjEwNzA6XFx0aWYgKCF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCB0eXBlLCBCSVQob3JkZXIpKSlcXG5tbS9raHVnZXBhZ2VkLmMtMTA3MS1cXHRcXHRyZXR1cm4gU0NBTl9WTUFfQ0hFQ0s7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTA3NS1cXHQgKlxcbm1tL2todWdlcGFnZWQuYzoxMDc2OlxcdCAqIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyBtYXkgcmV0dXJuIHRydWUgZm9yIHF1YWxpZmllZCBmaWxlXFxubW0va2h1Z2VwYWdlZC5jLTEwNzctXFx0ICogdm1hcy5cXG4tLVxcbm1tL21lbW9yeS5jPTQ2NjE9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00NjkwLVxcdCAqL1xcbm1tL21lbW9yeS5jOjQ2OTE6XFx0b3JkZXJzID0gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX1BBR0VGQVVMVCxcXG5tbS9tZW1vcnkuYy00NjkyLVxcdFxcdFxcdFxcdFxcdCAgQklUKFBNRF9PUkRFUikgLSAxKTtcXG4tLVxcbm1tL21lbW9yeS5jPTUxNjE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTUxODMtXFx0ICovXFxubW0vbWVtb3J5LmM6NTE4NDpcXHRvcmRlcnMgPSB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCBUVkFfUEFHRUZBVUxULFxcbm1tL21lbW9yeS5jLTUxODUtXFx0XFx0XFx0XFx0XFx0ICBCSVQoUE1EX09SREVSKSAtIDEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyNDowNy41MzYxNDM1ODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNjkzNDYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgQWNjZXNzaWJpbGl0eSBvZiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGZ1bmN0aW9uLiBUaGUgY29kZSBzdWdnZXN0cyBpdCdzICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgdmlzaWJpbGl0eS4gU2luY2UgaXQncyBub3QgZGVjbGFyZWQgc3RhdGljLCBpdCdzIGVpdGhlciBleHBvcnRlZCBvciBhdCBsZWFzdCBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgaXQncyBleHBsaWNpdGx5IGV4cG9ydGVkLCBiZWNhdXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IGFjY2Vzc2libGUgYWNyb3NzIHRyYW5zbGF0aW9uIHVuaXRzIGlmIGl0J3MgdmlzaWJsZS4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjEwLjk0MzA4MjEyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMTkzNDQ2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyNDoxMy4zNjUwMjU2MThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MzM2OTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBmdW5jdGlvbi4gSXQncyBub3QgZXhwb3J0ZWQsIHNvIGl0J3MgaW50ZXJuYWwgdG8gdGhpcyBtb2R1bGUsIGJ1dCBpdCdzIGNsZWFybHkgbm90IGEgc2ltcGxlIHN0YXRpYyB2YWx1ZS4gVGhhdCBtZWFucyBzb21ldGhpbmcgY2FsbHMgaXQsIGFuZCBpdCdzIGRvaW5nIHNvbWV0aGluZyBkeW5hbWljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGR5bmFtaWMgYXNwZWN0LlxuXG5JIHNlZSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucyBjYWxsIGl0OiBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCwgYGh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlYCwgYHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzYCwgYGFsbG9jX2Fub25fZm9saW9gLCBhbmQgYHNob3dfc21hcGAuIFRoYXQgZ2l2ZXMgbWUgYSBmZXcgZGVjZW50IGVudHJ5IHBvaW50cyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHVzZWQgYW5kIHdoYXQgaW5wdXRzIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuXG5cbmBhbGxvY19hbm9uX2ZvbGlvYCBzdGFuZHMgb3V0IGFzIGEgcHJvbWlzaW5nIGZvY3VzIHN5bWJvbC4gSSd2ZSB3b3JrZWQgd2l0aCB0aGF0IGFyZWEgYmVmb3JlLiBJdCdzIG9mdGVuIGludm9sdmVkIGluIGluaXRpYWwgbWVtb3J5IGFsbG9jYXRpb24sIHNvIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGRldGVybWluaW5nIHRoZSBzaXplcyBpdCdzIHdpbGxpbmcgdG8gd29yayB3aXRoLiBgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGVgIGxvb2tzIGxpa2UgYSB1c2VmdWwgcG9pbnQgdG9vLCBhcyBpdCBoaW50cyBhdCBvbmdvaW5nIHZhbGlkYXRpb24gb2YgaHVnZXBhZ2Ugc2V0dXBzLiBPZiBjb3Vyc2UsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXRzZWxmIGlzIGFsc28gYW4gaW50ZXJlc3RpbmcgZW50cnkgcG9pbnQgdG8gc3RhcnQgZnJvbS5cblxuTm93LCBsZXQgbWUgY2hlY2sgdGhlIGB2bWFfaXNfc3BlY2lhbF9odWdlYCBmdW5jdGlvbi4gSSBzdXNwZWN0IHRoYXQgbWlnaHQgYmUgcmVsYXRlZCBhbmQgY291bGQgcHJvdmlkZSBpbnNpZ2h0IGludG8gd2hhdCB0cmlnZ2VycyB0aGUgYWxsb3dhYmxlIG9yZGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyNDoxNy4xNTgzOTgxNTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODA0MjQxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hX2lzX3NwZWNpYWxfaHVnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz05NT1zdGF0aWMgaW5saW5lIGJvb2wgZmlsZV90aHBfZW5hYmxlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTEzLS8qIElmIHJldHVybnMgdHJ1ZSwgd2UgYXJlIHVuYWJsZSB0byBhY2Nlc3MgdGhlIFZNQSdzIGZvbGlvcy4gKi9cXG5tbS9odWdlX21lbW9yeS5jOjExNDpzdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTE1LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTIxPXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEzMy1cXHRcXHRzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTjtcXG5tbS9odWdlX21lbW9yeS5jOjEzNDpcXHRlbHNlIGlmICh2bWFfaXNfZGF4KHZtYSkgfHwgdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1LVxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9TUEVDSUFMX0RBWDtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk4LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTk5OlxcdFxcdGlmICghZm9yY2VkX2NvbGxhcHNlIFxcdTAwMjZcXHUwMDI2ICF2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9odWdlX21lbW9yeS5jLTIwMC1cXHRcXHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI5NDA9aW50IHphcF9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjk1Mi1cXHR0bGJfcmVtb3ZlX3B1ZF90bGJfZW50cnkodGxiLCBwdWQsIGFkZHIpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjk1MzpcXHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0yOTU0LVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwNzQ9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxMDMtXFx0XFx0XFx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjMxMDQ6XFx0XFx0aWYgKHZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSlcXG5tbS9odWdlX21lbW9yeS5jLTMxMDUtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NjM2PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfbm90X3N1aXRhYmxlX2Zvcl90aHBfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2MzktXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vaHVnZV9tZW1vcnkuYzo0NjQwOlxcdGlmICh2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpXFxubW0vaHVnZV9tZW1vcnkuYy00NjQxLVxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyNDoxOC45Mzg4MjgxNDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg4MzQ5NjE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVEhQIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGxpZXMgd2l0aGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AuIE15IGF0dGVudGlvbiBpbW1lZGlhdGVseSBnb2VzIHRoZXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMsIHNvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMsIG9mIGNvdXJzZSwgdGhlIHJlbGV2YW50IGNvbmZpZy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzLCBidXQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIHByaW1hcnkgb25lLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgb2Yga2V5IGZ1bmN0aW9ucyBmb3IgbXkgYW5hbHlzaXM6IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBhbGxvY19hbm9uX2ZvbGlvYCwgYW5kIGBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBwbGF5ZXJzIGluIHRoaXMgVEhQIGxvZ2ljIG1vZGlmaWNhdGlvbi4gVGhpcyBgdm1hX2lzX3NwZWNpYWxfaHVnZWAgY2hlY2ssIHV0aWxpemluZyBgdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVBgIGFuZCBgdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NSVhFRE1BUGAsIGl0IGlzIHN0YW5kYXJkIE1NIHN0dWZmLiBOb3RoaW5nIHBhcnRpY3VsYXJseSB1bnVzdWFsLCBqdXN0IHRoZSB0eXBpY2FsIGZsYWdzIHdlIGV4cGVjdCB0byBzZWUgaW4gYSBWTUEgc3RydWN0dXJlLlxuXG5UaGUgZ2lzdCBvZiBpdCBpcyB0aGlzOiBhIHBhdGNoIHRoYXQgY2hhbmdlcyB0aGUgVEhQIGJlaGF2aW9yLCBhbmQgc3BlY2lmaWNhbGx5IGluIGhvdyBzcGVjaWFsIGh1Z2UgVk1BcyBhcmUgaGFuZGxlZC4gSXQncyBleGVtcHRpbmcgY2VydGFpbiBWTUFzIGZyb20gdGhlIHVzdWFsIFRIUCBjb3N0IGNvbnNpZGVyYXRpb25zLCBhbGxvd2luZyBmb3IgbW9yZSBhZ2dyZXNzaXZlIGh1Z2UgcGFnZSBhbGxvY2F0aW9uIG9yIGNvbGxhcHNpbmcgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGUgY2hhbmdlIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgbW9kaWZpY2F0aW9uIGFmZmVjdHMgaHVnZSBwYWdlIGFsbG9jYXRpb24sIHdoaWNoIGlzIHNvbWV0aGluZyB1c2VycyBjYW4gaW50ZXJhY3Qgd2l0aCB0aHJvdWdoIGBtbWFwYCBhbmQgYG1hZHZpc2VgLlxuXG5TbywgaGVyZSdzIG15IHF1aWNrIGV2YWx1YXRpb24sIGluIGEgZm9ybWF0IHRoYXQncyB1c2VmdWw6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gdGhpcyBpcyBhIGNvcmUgTU0gY2hhbmdlLCB3aXRoIHVzZXItc3BhY2UgcmVhY2gsIHZlcnkgZnV6emFibGUuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCwgYGFsbG9jX2Fub25fZm9saW9gLCBgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGVgIC0gdGhlc2UgYXJlIG15IGluaXRpYWwgdGFyZ2V0cy5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAtIHRoaXMgaXMgb2J2aW91c2x5IGEgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQuXG4qICAgKipSZWFzb25pbmc6KiogVGhlIG1vZGlmaWNhdGlvbiBleGVtcHRzIHNwZWNpYWwgaHVnZSBWTUFzIGZyb20gdGhlIG5vcm1hbCBUSFAgb3JkZXIgY2hlY2tzIHdpdGhpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGltcGFjdHMgaHVnZSBwYWdlIGFsbG9jYXRpb24gYW5kIGNvbGxhcHNlLCBhbmQgaXMgdXNlci1yZWFjaGFibGUgdGhyb3VnaCBgbW1hcGAgYW5kIGBtYWR2aXNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE1MywiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MjQ6MjUuODIyMzI2NTIyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMzNjA0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgICBcImFsbG9jX2Fub25fZm9saW9cIixcbiAgICBcImh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGxvZ2ljIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBWTUFzIGZyb20gVEhQIGNvc3RzIHdoZW4gY2hlY2tpbmcgYWxsb3dhYmxlIG9yZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBodWdlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGNvbGxhcHNlZCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcCBhbmQgbWFkdmlzZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gICAgXCJhbGxvY19hbm9uX2ZvbGlvXCIsXG4gICAgXCJodWdlcGFnZV92bWFfcmV2YWxpZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBsb2dpYyBpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHRvIGV4ZW1wdCBzcGVjaWFsIGh1Z2UgVk1BcyBmcm9tIFRIUCBjb3N0cyB3aGVuIGNoZWNraW5nIGFsbG93YWJsZSBvcmRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGFuZCBjb2xsYXBzZWQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1tYXAgYW5kIG1hZHZpc2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjI1LjkxNTY5NzgyMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY1OTUwNTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjI1LjkxNjM4MTc4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NjU4ODE1OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBtYXBwaW5ncyBmcm9tIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBwb2xpY2llcyBhbmQgVk1BIGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGludmFsaWQgcGFnZSBhY2Nlc3NlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGI1YWQ3NWEwOGJjNDQ2M2IxNGUwYmY3NjRmNGMxMmU3ZjE4ZThkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjIzOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDVkOTRmYTRjNzRmZGIuLmNlY2Y2YmQ4ZmYwYjEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTkzLDkgKzE5MywxMCBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHtcbiBcdFx0LypcbiBcdFx0ICogRW5mb3JjZSBUSFAgY29sbGFwc2UgcmVxdWlyZW1lbnRzIGFzIG5lY2Vzc2FyeS4gQW5vbnltb3VzIHZtYXNcbi1cdFx0ICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuXG4rXHRcdCAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLiBTcGVjaWFsXG4rXHRcdCAqIG1hcHBpbmdzIGhhdmUgbm8gVEhQIGNvc3RzIGFuZCBhcmUgZXhlbXB0LlxuIFx0XHQgKi9cbi1cdFx0aWYgKCFmb3JjZWRfY29sbGFwc2UgXHUwMDI2XHUwMDI2XG4rXHRcdGlmICghZm9yY2VkX2NvbGxhcHNlIFx1MDAyNlx1MDAyNiAhdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRcdFx0ICAgICFodWdlcGFnZV9nbG9iYWxfYWx3YXlzKCkpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjI1LjkxNjM4MjgxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjU4NzkwMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEhQIFZNQSBBbGxvd2FibGUgT3JkZXJzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHRvIGBtbS9odWdlX21lbW9yeS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGZvY3VzZWQgb24gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgYWx0ZXJhdGlvbiB3aXRoaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBgIXZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKWAgdG8gdGhlIGNvbmRpdGlvbmFsIGNoZWNrLiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCB3aGV0aGVyIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYXJlIHBlcm1pdHRlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgd2hlbiBtYW5hZ2luZyBWaXJ0dWFsIE1lbW9yeSBBcmVhcyAoVk1BcykuXG5cblRoZSBvcmlnaW5hbCBjaGVjaywgYXMgSSB1bmRlcnN0YW5kIGl0LCByZXN0cmljdGVkIFRIUCB1c2UgaWYgYGZvcmNlZF9jb2xsYXBzZWAgd2FzIGZhbHNlLCBhbmQgZWl0aGVyIGdsb2JhbCBodWdlIHBhZ2VzIHdlcmUgZGlzYWJsZWQgb3IgdGhlIFZNQSBkaWRuJ3QgZXhwbGljaXRseSByZXF1ZXN0IGh1Z2UgcGFnZXMuIE5vdywgdGhpcyBgdm1hX2lzX3NwZWNpYWxfaHVnZWAgY29uZGl0aW9uIGlzIGluc2VydGVkLiBUaGlzIG1vZGlmaWNhdGlvbiBhbGxvd3MgVEhQIHRvIGJlIGNvbnNpZGVyZWQgZm9yIFwic3BlY2lhbFwiIGh1Z2UgbWFwcGluZ3MgZXZlbiB3aGVuIHRoZSBicm9hZGVyIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQsIHNvIGxvbmcgYXMgYGZvcmNlZF9jb2xsYXBzZWAgaXMgYWxzbyBmYWxzZS5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQgYWZ0ZXIgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgY29kZSBhbmQgaXRzIGNvbnRleHQsIEkgZG9uJ3Qgc2VlIGFueSBkaXJlY3QgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGlzIHBhdGNoIHByaW1hcmlseSBhbHRlcnMgY29udHJvbCBmbG93IHdpdGhpbiB0aGUgVEhQIGRlY2lzaW9uIHByb2Nlc3MsIGFmZmVjdGluZyBwYWdlIGFsbG9jYXRpb24gYW5kIFZNQSBmbGFnIGNoZWNrcy4gVGhlcmUncyBubyBjcmVhdGlvbiBvZiBuZXcgbWVtb3J5IHJlZ2lvbnMgb3IgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHBhZ2UgZmF1bHRzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gVGhlc2UsIEknbSBjb25maWRlbnQsIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gb3IgdGhlIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgc2FmZXR5IGNoZWNrcy4gS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuXG5cbkxvb2tpbmcgY2xvc2VyLCBJJ20gc2ltcGx5IHNlZWluZyBhIG1vZGlmaWNhdGlvbiBvZiBhIGNvbmRpdGlvbi4gSSdtIGdvaW5nIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29kZS4gVGhlIGNoYW5nZSBzaW1wbHkgYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cgd2l0aGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gYWxsb3cgVEhQIHdpdGggXCJzcGVjaWFsXCIgaHVnZSBtYXBwaW5ncy5cblxuU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gdGhlIFRIUCBwb2xpY3kgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MuIFRoZSBjaGFuZ2Ugc29sZWx5IGFmZmVjdHMgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIEkgY2FuIHJlYWRpbHkgc2VlLiBObyBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSB0YWtpbmcgcGxhY2UuIFRoaXMgaXMgbm90IGEgS01TQU4gaXNzdWUsIHNvIEknbGwgc2V0IE5lZWRzS01TQU4gdG8gZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjIsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MjQ6MzQuNTc1MTc2NzQyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBtYXBwaW5ncyBmcm9tIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBwb2xpY2llcyBhbmQgVk1BIGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGludmFsaWQgcGFnZSBhY2Nlc3NlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHRvIGV4ZW1wdCBzcGVjaWFsIGh1Z2UgbWFwcGluZ3MgZnJvbSBUSFAgY29sbGFwc2UgcmVxdWlyZW1lbnRzLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgcG9saWNpZXMgYW5kIFZNQSBmbGFncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBpbnZhbGlkIHBhZ2UgYWNjZXNzZXMsIG1lbW9yeSBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow6n7j9[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-21 07:22:23 +0000 UTC FinishedAt: 2026-08-21 07:24:36 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "689c1f1f669abdff41a91aa13d6cb6e77759f0ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "mm-new", "tree_url": "https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git", "commit_hash": "689c1f1f669abdff41a91aa13d6cb6e77759f0ba", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE" ], "series_id": "7bbfc76b-d0a2-4b8c-a977-7ef8afba72be" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "__thp_vma_allowable_orders", "alloc_anon_folio", "hugepage_vma_revalidate" ], "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+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjIzPC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7YWxsb2NfYW5vbl9mb2xpbyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV92bWFfcmV2YWxpZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIG1hcHBpbmdzIGZyb20gVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljaWVzIGFuZCBWTUEgZmxhZ3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgaW52YWxpZCBwYWdlIGFjY2Vzc2VzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGxvZ2ljIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBWTUFzIGZyb20gVEhQIGNvc3RzIHdoZW4gY2hlY2tpbmcgYWxsb3dhYmxlIG9yZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBodWdlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGNvbGxhcHNlZCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcCBhbmQgbWFkdmlzZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyMzwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+cmVhZC1wYXRjaC1kaWZmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7UGF0Y2hEaWZmJiMzNDs6ICYjMzQ7Y29tbWl0IDBiNWFkNzVhMDhiYzQ0NjNiMTRlMGJmNzY0ZjRjMTJlN2YxOGU4ZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNzoyMzozOSAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuY1xuaW5kZXggNWQ5NGZhNGM3NGZkYi4uY2VjZjZiZDhmZjBiMSAxMDA2NDRcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmNcbkBAIC0xOTMsOSAmIzQzOzE5MywxMCBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHtcbiBcdFx0LypcbiBcdFx0ICogRW5mb3JjZSBUSFAgY29sbGFwc2UgcmVxdWlyZW1lbnRzIGFzIG5lY2Vzc2FyeS4gQW5vbnltb3VzIHZtYXNcbi1cdFx0ICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuXG4mIzQzO1x0XHQgKiB3ZXJlIGFscmVhZHkgaGFuZGxlZCBpbiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoKS4gU3BlY2lhbFxuJiM0MztcdFx0ICogbWFwcGluZ3MgaGF2ZSBubyBUSFAgY29zdHMgYW5kIGFyZSBleGVtcHQuXG4gXHRcdCAqL1xuLVx0XHRpZiAoIWZvcmNlZF9jb2xsYXBzZSBcdTAwMjZcdTAwMjZcbiYjNDM7XHRcdGlmICghZm9yY2VkX2NvbGxhcHNlIFx1MDAyNlx1MDAyNiAhdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRcdFx0ICAgICFodWdlcGFnZV9nbG9iYWxfYWx3YXlzKCkpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyMzwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyYjMzQ7LAogICAgJiMzNDthbGxvY19hbm9uX2ZvbGlvJiMzNDssCiAgICAmIzM0O2h1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBsb2dpYyBpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHRvIGV4ZW1wdCBzcGVjaWFsIGh1Z2UgVk1BcyBmcm9tIFRIUCBjb3N0cyB3aGVuIGNoZWNraW5nIGFsbG93YWJsZSBvcmRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGFuZCBjb2xsYXBzZWQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1tYXAgYW5kIG1hZHZpc2UuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuCi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuCi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSkKICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuCgpJZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoCnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLgoKV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086CjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuCiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLgogICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnMKICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIEFsc28gY2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzCiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncwogICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCAwYjVhZDc1YTA4YmM0NDYzYjE0ZTBiZjc2NGY0YzEyZTdmMThlOGQ2CkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIEZyaSBBdWcgMjEgMDc6MjM6MzkgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9tbS9odWdlX21lbW9yeS5jIGIvbW0vaHVnZV9tZW1vcnkuYwppbmRleCA1ZDk0ZmE0Yzc0ZmRiLi5jZWNmNmJkOGZmMGIxIDEwMDY0NAotLS0gYS9tbS9odWdlX21lbW9yeS5jCiYjNDM7JiM0MzsmIzQzOyBiL21tL2h1Z2VfbWVtb3J5LmMKQEAgLTE5Myw5ICYjNDM7MTkzLDEwIEBAIHVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCiAJaWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHsKIAkJLyoKIAkJICogRW5mb3JjZSBUSFAgY29sbGFwc2UgcmVxdWlyZW1lbnRzIGFzIG5lY2Vzc2FyeS4gQW5vbnltb3VzIHZtYXMKLQkJICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuCiYjNDM7CQkgKiB3ZXJlIGFscmVhZHkgaGFuZGxlZCBpbiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoKS4gU3BlY2lhbAomIzQzOwkJICogbWFwcGluZ3MgaGF2ZSBubyBUSFAgY29zdHMgYW5kIGFyZSBleGVtcHQuCiAJCSAqLwotCQlpZiAoIWZvcmNlZF9jb2xsYXBzZSAmYW1wOyZhbXA7CiYjNDM7CQlpZiAoIWZvcmNlZF9jb2xsYXBzZSAmYW1wOyZhbXA7ICF2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkgJmFtcDsmYW1wOwogCQkgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzICZhbXA7IFZNX0hVR0VQQUdFKSAmYW1wOyZhbXA7CiAJCQkJCQkgICAgIWh1Z2VwYWdlX2dsb2JhbF9hbHdheXMoKSkpKQogCQkJcmV0dXJuIDA7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjUKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgVEhQIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBhIHBhdGNoIHRoYXQgdHdlYWtzIGBtbS9odWdlX21lbW9yeS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGZ1bmN0aW9uLiBUaGlzIGlzIGluIHRoZSBoZWFydCBvZiBUSFAgbWFuYWdlbWVudCwgc28gaXQmIzM5O3Mgd29ydGggYSBjbG9zZSBsb29rLiBUaGUgY2hhbmdlIGl0c2VsZiBpcyBwcmV0dHkgZm9jdXNlZDogaXQmIzM5O3MgYWRkaW5nIGEgY2hlY2sgZm9yIGB2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSlgIHRvIHRoZSBjb25kaXRpb25hbC4gIEVzc2VudGlhbGx5LCBpdCYjMzk7cyB0aWdodGVuaW5nIHVwIHRoZSBjcml0ZXJpYSBmb3IgYWxsb3dpbmcgVEhQIG9yZGVycy4gVGhlIG9yaWdpbmFsIGNvbmRpdGlvbiB3YXMgYCFmb3JjZWRfY29sbGFwc2VgLCBub3cgaXQmIzM5O3MgYCFmb3JjZWRfY29sbGFwc2UgJmFtcDsmYW1wOyAhdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpYC4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2UgZG9uJiMzOTt0IHdhbnQgdG8gYWxsb3cgaHVnZSBwYWdlIGFsbG9jYXRpb24gaW4gYSBWTUEgaWYgaXQmIzM5O3MgY29uc2lkZXJlZCAmIzM0O3NwZWNpYWwmIzM0OyBpbiBzb21lIHdheS4KCk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25zdGl0dXRlcyBhICYjMzQ7c3BlY2lhbCBodWdlIFZNQSYjMzQ7LiBXaGF0IHNjZW5hcmlvcyBpcyB0aGlzIGFpbWVkIGF0PyAgSSYjMzk7bGwgbmVlZCB0byBkaWcgaW50byB0aGUgZGVmaW5pdGlvbiBvZiBgdm1hX2lzX3NwZWNpYWxfaHVnZWAgdG8gZ2V0IHRoZSBjb250ZXh0LiBEb2VzIHRoaXMgcmVsYXRlIHRvIHBlcnNpc3RlbnQgbWVtb3J5LCBkZXZpY2UgbWVtb3J5LCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gIEFuZCB0aGVuLCBJIG5lZWQgdG8gc2VlIGhvdyB0aGUgYWRkaXRpb24gb2YgdGhpcyBjaGVjayBhbHRlcnMgdGhlIHN5c3RlbSBiZWhhdmlvciByZWdhcmRpbmcgVEhQIHVzYWdlIGluIHRoZXNlIHNwZWNpZmljIFZNQXMuIFVsdGltYXRlbHksIHdoYXQgYXJlIHRoZSB1c2UgY2FzZXMgYW5kIHRoZWlyIGV4cGVjdGVkIG91dGNvbWVzPyBUaGlzIGlzIGdvaW5nIHRvIHJlcXVpcmUgc29tZSBkZWVwZXIgaW52ZXN0aWdhdGlvbiBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgcG9zc2libHkgcmVsZXZhbnQgZG9jdW1lbnRhdGlvbiBvciBjb21taXQgbWVzc2FnZXMgZm9yIGNvbnRleHQuICBMZXQmIzM5O3Mgc2VlIHdoZXJlIHRoaXMgcmFiYml0IGhvbGUgbGVhZHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9MTE0PXN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXG5tbS9odWdlX21lbW9yeS5jOjEyMTp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXHRcdFx0XHRcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjIzPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI2NjMKCQkJCQkJCW91dHB1dDogMzEKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIENvbnRleHQqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AuIE15IGZpcnN0IHN0ZXAsIGFzIGFsd2F5cywgaXMgdG8gaW1tZWRpYXRlbHkgcGxhY2UgdGhpcyBmdW5jdGlvbiB3aXRoaW4gaXRzIGxhcmdlciBjb250ZXh0LiBJIG5lZWQgdG8gdW5kZXJzdGFuZCAqd2h5KiB0aGlzIGZ1bmN0aW9uIGlzIGNhbGxlZCwgKndoZW4qIGl0JiMzOTtzIGNhbGxlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksICp3aGF0KiBpdCYjMzk7cyB0cnlpbmcgdG8gYWNoaWV2ZSByZWdhcmRpbmcgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyAoVEhQKSBhbmQgdmlydHVhbCBtZW1vcnkgYXJlYXMgKFZNQXMpLiBJIGtub3cgdGhhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIGxpa2VseSBpbnZvbHZlZCBpbiBkZXRlcm1pbmluZyBpZiBhIFZNQSBpcyBzdWl0YWJsZSBmb3IgVEhQIGFsbG9jYXRpb24uCgpJJiMzOTttIG1lbnRhbGx5IHByZXBhcmluZyBteXNlbGYgZm9yIGEgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbCBzaXRlczsgcHJvYmFibHkgdGhyb3VnaCBzb21lIGdyZXAtZnUgb3IgYSBxdWljayBJREUgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gS25vd2luZyB0aGUgY2FsbGVyIGZ1bmN0aW9ucyB3aWxsIHByb3ZpZGUgdml0YWwgY2x1ZXMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggaW5pdGlhbCBtYXBwaW5nLCBtaWdyYXRpb24sIG9yIHNvbWUgb3RoZXIgb3BlcmF0aW9uPyBUaGF0JiMzOTtzIGdvaW5nIHRvIGhlYXZpbHkgaW5mbHVlbmNlIHRoZSBpbnRlcnByZXRhdGlvbiBvZiB0aGUgZnVuY3Rpb24mIzM5O3MgbG9naWMuCgpJIGFudGljaXBhdGUgaXQmIzM5O3MgbG9va2luZyBhdCBmYWN0b3JzIGxpa2UgdGhlIFZNQSBmbGFncywgc2l6ZSwgcG90ZW50aWFsbHkgYWxpZ25tZW50LCBhbmQgbWF5YmUgZXZlbiB0aGUgbWVtb3J5IHBvbGljeS4gSSYjMzk7bSBhbHJlYWR5IGZvcm11bGF0aW5nIHF1ZXN0aW9uczogSXMgaXQgY2hlY2tpbmcgZm9yIGNvbmZsaWN0aW5nIGZsYWdzLCBzdWNoIGFzIHRob3NlIHRoYXQgd291bGQgcHJldmVudCBUSFAgdXNhZ2UsIGxpa2UgaHVnZXBhZ2UtZGlzYWJsZWQgZmxhZ3M/IElzIGl0IGV4YW1pbmluZyB0aGUgVk1BJiMzOTtzIHNpemUgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGh1Z2VwYWdlIHNpemVzIG9uIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZT8gSSYjMzk7bSBhc3N1bWluZyBpdCYjMzk7cyBsaWtlbHkgcGVyZm9ybWluZyBzb21lIGJpdHdpc2Ugb3BlcmF0aW9ucyB0byBleHRyYWN0IHRoZSBjcnVjaWFsIGluZm9ybWF0aW9uIHRvIG1ha2UgYSBkZWNpc2lvbi4KCkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbnRlcnBsYXkgd2l0aCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gSXMgdGhpcyBmdW5jdGlvbiBqdXN0IHRoZSBmaXJzdCBzdGVwIGluIGEgbGFyZ2VyIHByb2Nlc3MsIG9yIGlzIGl0IGEgZ2F0ZWtlZXBlciB0aGF0IGRpcmVjdGx5IGRldGVybWluZXMgZWxpZ2liaWxpdHk/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBpbXBsaWNhdGlvbnMgb2YgdGhlIHJldHVybmVkIHZhbHVlLiBBcmUgdGhlcmUgYW55IGNvcm5lciBjYXNlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUg4oCTIHRoaW5ncyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgbWlzc2VkIGlmIHRoZSBjb2RlIGlzbuKAmXQgcmV2aWV3ZWQgd2l0aCBjYXJlPwoKRmluYWxseSwgSSYjMzk7bSBleHBlY3Rpbmcgc29tZSBraW5kIG9mIG9yZGVyIGNoZWNrLiBQcm9iYWJseSBhIGNvbXBhcmlzb24gb2YgcmVxdWVzdGVkIHBhZ2VzIHdpdGggdGhlIHBhZ2Ugc2l6ZSDigJMgbGlrZWx5IHRoZSBsYXJnZXN0IHN1cHBvcnRlZCBwYWdlIHNpemUuIEFuZCwgSeKAmWxsIGJlIHdhdGNoaW5nIGZvciBhbnkgYXJjaGl0ZWN0dXJhbCBkZXBlbmRlbmNpZXMuIEkgZXhwZWN0IHRoZSBiZWhhdmlvciBvZiB0aGlzIGZ1bmN0aW9uIG1heSBiZSBzdWJ0bHkgZGlmZmVyZW50IGRlcGVuZGluZyBvbiB0aGUgdW5kZXJseWluZyBhcmNoaXRlY3R1cmUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjM8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5jbHVkZS9saW51eC9odWdlX21tLmg9Mjc1PXN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTctXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoyOTg6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5OS1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MzE5PXVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0MS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjM0MjpcdHJldHVybiBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcnMpO1xuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQzLX1cbi0tXG5tbS9odWdlX21lbW9yeS5jPTExND1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxubW0vaHVnZV9tZW1vcnkuYzoxMjE6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIyLVx0XHRcdFx0XHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyMzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNTQ5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb2RlKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGZ1bmN0aW9uLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGUgbmFtZSByaW5ncyBhIGJlbGwsIEkga25vdyB0aGlzIGlzIGEgY29yZSBNZW1vcnkgTWFuYWdlbWVudCBmdW5jdGlvbi4gSSBjYW4gc2VlIHRoYXQgYHRocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgY2FsbHMgaXQgZGlyZWN0bHkuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBOb3csIGxldCYjMzk7cyBkaXZlIGludG8gdGhlIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0JiMzOTtzIGRvaW5nLCBzbyB0aGUgZmlyc3QgdGhpbmcgSSYjMzk7bGwgY2hlY2sgaXMgYHZtYV9pc19zcGVjaWFsX2h1Z2VgLiBUaGF0IHNob3VsZCBnaXZlIG1lIHRoZSBpbml0aWFsIGNvbnRleHQgSSBuZWVkLiBJJiMzOTttIGFzc3VtaW5nIHRoYXQgaXQgaXMgc2V0dGluZyB1cCB0aGUgY29udGV4dCBmb3IgaHVnZSBwYWdlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyMzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfaXNfc3BlY2lhbF9odWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vaHVnZV9tZW1vcnkuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9odWdlX21lbW9yeS5jPTk1PXN0YXRpYyBpbmxpbmUgYm9vbCBmaWxlX3RocF9lbmFibGVkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTEzLS8qIElmIHJldHVybnMgdHJ1ZSwgd2UgYXJlIHVuYWJsZSB0byBhY2Nlc3MgdGhlIFZNQSYjMzk7cyBmb2xpb3MuICovXG5tbS9odWdlX21lbW9yeS5jOjExNDpzdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxubW0vaHVnZV9tZW1vcnkuYy0xMTUte1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9MTIxPXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMzMtXHRcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9BTk9OO1xubW0vaHVnZV9tZW1vcnkuYzoxMzQ6XHRlbHNlIGlmICh2bWFfaXNfZGF4KHZtYSkgfHwgdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxubW0vaHVnZV9tZW1vcnkuYy0xMzUtXHRcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9TUEVDSUFMX0RBWDtcbi0tXG5tbS9odWdlX21lbW9yeS5jLTE5OC1cdFx0ICovXG5tbS9odWdlX21lbW9yeS5jOjE5OTpcdFx0aWYgKCFmb3JjZWRfY29sbGFwc2UgXHUwMDI2XHUwMDI2ICF2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkgXHUwMDI2XHUwMDI2XG5tbS9odWdlX21lbW9yeS5jLTIwMC1cdFx0ICAgICghaHVnZXBhZ2VfZ2xvYmFsX2VuYWJsZWQoKSB8fCAoISh2bV9mbGFncyBcdTAwMjYgVk1fSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9Mjk0MD1pbnQgemFwX2h1Z2VfcHVkKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMjk1Mi1cdHRsYl9yZW1vdmVfcHVkX3RsYl9lbnRyeSh0bGIsIHB1ZCwgYWRkcik7XG5tbS9odWdlX21lbW9yeS5jOjI5NTM6XHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKSB7XG5tbS9odWdlX21lbW9yeS5jLTI5NTQtXHRcdHNwaW5fdW5sb2NrKHB0bCk7XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0zMDc0PXN0YXRpYyB2b2lkIF9fc3BsaXRfaHVnZV9wbWRfbG9ja2VkKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLCBwbWRfdCAqcG1kLFxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMzEwMy1cdFx0XHR6YXBfZGVwb3NpdGVkX3RhYmxlKG1tLCBwbWQpO1xubW0vaHVnZV9tZW1vcnkuYzozMTA0Olx0XHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxubW0vaHVnZV9tZW1vcnkuYy0zMTA1LVx0XHRcdHJldHVybjtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTQ2MzY9c3RhdGljIGlubGluZSBib29sIHZtYV9ub3Rfc3VpdGFibGVfZm9yX3RocF9zcGxpdChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTQ2MzktXHRcdHJldHVybiB0cnVlO1xubW0vaHVnZV9tZW1vcnkuYzo0NjQwOlx0aWYgKHZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSlcbm1tL2h1Z2VfbWVtb3J5LmMtNDY0MS1cdFx0cmV0dXJuIHRydWU7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjM8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDQ5MQoJCQkJCQkJb3V0cHV0OiAyOAoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGZyYW1lZCBmcm9tIG15IGV4cGVydCBwZXJzcGVjdGl2ZToKCioqVEhQIFZNQSBPcmRlciBDaGFuZ2UgLSBGdXp6aW5nIFBvdGVudGlhbCoqCgpSaWdodCwgc28gdGhpcyBjaGFuZ2UgZm9jdXNlcyBvbiB0aGUgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IGhvdyBpdCBpbXBhY3RzIFRIUCBiZWhhdmlvciBmb3IgY2VydGFpbiwgJiMzNDtzcGVjaWFsJiMzNDsgaHVnZSBWTUFzLiBUaGlzIGlzIGEgcHJldHR5IHNpZ25pZmljYW50IHNoaWZ0IOKAkyB3ZSYjMzk7cmUgdGFsa2luZyBhYm91dCBhIGZ1bmN0aW9uYWwgY2hhbmdlIGRpcmVjdGx5IHdpdGhpbiB0aGUgY29yZSBNZW1vcnkgTWFuYWdlbWVudCAoTU0pIGtlcm5lbCBjb2RlLiBHaXZlbiBpdHMgZGlyZWN0IGltcGFjdCBvbiBob3cgVHJhbnNwYXJlbnQgSHVnZSBQYWdlcyBhcmUgaGFuZGxlZCBpbiBlZGdlIGNhc2VzLCBpdCYjMzk7cyBzY3JlYW1pbmcgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi4KCkxldCYjMzk7cyBxdWlja2x5IGZpZ3VyZSBvdXQgdGhlIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzLiBCYXNlZCBvbiBteSB1bmRlcnN0YW5kaW5nLCBgbW0vaHVnZV9tZW1vcnkuY2AgKHdoZXJlIHRoaXMgbGlrZWx5IHJlc2lkZXMpIGlzIGNvbXBpbGVkIGFzIHBhcnQgb2YgdGhlIFRyYW5zcGFyZW50IEh1Z2VwYWdlIChUSFApIHN1YnN5c3RlbS4gU28sIHRoaXMgY29kZSBwYXRoIHdpbGwgYmUgZW5hYmxlZCBvbmx5IHdoZW4gYENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgc2V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtodWdlX21lbW9yeS5vJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTAwPW9iai0kKENPTkZJR19ERVZJQ0VfTUlHUkFUSU9OKSAmIzQzOz0gbWlncmF0ZV9kZXZpY2Uub1xubW0vTWFrZWZpbGU6MTAxOm9iai0kKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgJiM0Mzs9IGh1Z2VfbWVtb3J5Lm8ga2h1Z2VwYWdlZC5vXG5tbS9NYWtlZmlsZS0xMDItb2JqLSQoQ09ORklHX1BBR0VfQ09VTlRFUikgJiM0Mzs9IHBhZ2VfY291bnRlci5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDQ5MDEKCQkJCQkJCW91dHB1dDogMzAKCQkJCQkJCXRob3VnaHRzOiA5MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipJbnZlc3RpZ2F0aW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIHRoZSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgYSByZXF1aXJlbWVudCBoZXJlLiBCdXQgSSBjYW4mIzM5O3QganVzdCBzdG9wIHRoZXJlLiBBcmUgdGhlcmUgKm90aGVyKiBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSBzaG91bGQgYmUgY29uc2lkZXJpbmcgcmVsYXRlZCB0byB0aGlzIFRIUCBmdW5jdGlvbmFsaXR5PyBJIHJlbWVtYmVyIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgcmVsYXRlZCB0byBodWdlcGFnZXMsIHNvIEkgc2hvdWxkIHNlZSBpZiB0aGVyZSBhcmUgb3RoZXIgYXNzb2NpYXRlZCBjb25maWdzLiBUaGlzIGFsc28gc3VnZ2VzdHMgd2hhdCBmdW5jdGlvbmFsaXR5IEkgc2hvdWxkIGJlIGludmVzdGlnYXRpbmcuCgpGb2N1c2luZyBpbiBvbiBmdW5jdGlvbnMgbm93Li4uIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSXQmIzM5O3MgaW50ZXJuYWwsIHdoaWNoIG1lYW5zIGl0JiMzOTtzIGxpa2VseSBhIGNvcmUgY29tcG9uZW50IGFuZCBwb3NzaWJseSBhIGdvb2Qgc3BvdCB0byBpbnN0cnVtZW50IG9yIGFuYWx5emUuIEkgc2hvdWxkIHNlZSB3aGljaCBjYWxscyB0aGlzIGZ1bmN0aW9uLCB0byBnYWluIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHJvbGUgYW5kIGhvdyBpdCYjMzk7cyB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQmIzM5O3Mgc2VlIHdobyYjMzk7cyBjYWxsaW5nIGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7ZnMvcHJvYy90YXNrX21tdS5jPTE0NTY9c3RhdGljIGludCBzaG93X3NtYXAoc3RydWN0IHNlcV9maWxlICptLCB2b2lkICp2KVxuLS1cbmZzL3Byb2MvdGFza19tbXUuYy0xNDczLVx0c2VxX3ByaW50ZihtLCBcJiMzNDtUSFBlbGlnaWJsZTogICAgJTh1XFxuXCYjMzQ7LFxuZnMvcHJvYy90YXNrX21tdS5jOjE0NzQ6XHRcdCAgICEhdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCBUVkFfU01BUFMsXG5mcy9wcm9jL3Rhc2tfbW11LmMtMTQ3NS1cdFx0XHRcdFx0ICAgICAgVEhQX09SREVSU19BTEwpKTtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD05Nz1lbnVtIHR2YV90eXBlIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0xMDQtI2RlZmluZSB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcih2bWEsIHZtX2ZsYWdzLCB0eXBlLCBvcmRlcikgXFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjEwNTpcdCghIXRocF92bWFfYWxsb3dhYmxlX29yZGVycyh2bWEsIHZtX2ZsYWdzLCB0eXBlLCBCSVQob3JkZXIpKSlcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwNi1cbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0yNzU9c3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHRocF92bWFfc3VpdGFibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTI5Ny1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjI5ODp1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk5LVx0XHRcdFx0XHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zMDMtLyoqXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozMDQ6ICogdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzIC0gZGV0ZXJtaW5lIGh1Z2VwYWdlIG9yZGVycyB0aGF0IGFyZSBhbGxvd2VkIGZvciB2bWFcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwNS0gKiBAdm1hOiAgdGhlIHZtIGFyZWEgdG8gY2hlY2tcbi0tXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaD0zMTg9c3RhdGljIGlubGluZVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzE5OnVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzIwLVx0XHRcdFx0ICAgICAgIHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQxLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzQyOlx0cmV0dXJuIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIG9yZGVycyk7XG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDMtfVxuLS1cbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTU5OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjAzLVxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjA0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02MDUtXHRcdFx0XHRcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEyMC1cbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cdFx0XHRcdFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xOTUtXHRcdCAqIEVuZm9yY2UgVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cyBhcyBuZWNlc3NhcnkuIEFub255bW91cyB2bWFzXG5tbS9odWdlX21lbW9yeS5jOjE5NjpcdFx0ICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuIFNwZWNpYWxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk3LVx0XHQgKiBtYXBwaW5ncyBoYXZlIG5vIFRIUCBjb3N0cyBhbmQgYXJlIGV4ZW1wdC5cbi0tXG5tbS9raHVnZXBhZ2VkLmM9NTY2PXN0YXRpYyB1bnNpZ25lZCBsb25nIGNvbGxhcHNlX3Bvc3NpYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtNTc2LVxubW0va2h1Z2VwYWdlZC5jOjU3NzpcdHJldHVybiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzLCBvcmRlcnMpO1xubW0va2h1Z2VwYWdlZC5jLTU3OC19XG4tLVxubW0va2h1Z2VwYWdlZC5jPTEwNDY9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTA2OS1cdFx0cmV0dXJuIFNDQU5fQUREUkVTU19SQU5HRTtcbm1tL2todWdlcGFnZWQuYzoxMDcwOlx0aWYgKCF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bWEtXHUwMDNldm1fZmxhZ3MsIHR5cGUsIEJJVChvcmRlcikpKVxubW0va2h1Z2VwYWdlZC5jLTEwNzEtXHRcdHJldHVybiBTQ0FOX1ZNQV9DSEVDSztcbi0tXG5tbS9raHVnZXBhZ2VkLmMtMTA3NS1cdCAqXG5tbS9raHVnZXBhZ2VkLmM6MTA3NjpcdCAqIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyBtYXkgcmV0dXJuIHRydWUgZm9yIHF1YWxpZmllZCBmaWxlXG5tbS9raHVnZXBhZ2VkLmMtMTA3Ny1cdCAqIHZtYXMuXG4tLVxubW0vbWVtb3J5LmM9NDY2MT1zdGF0aWMgdW5zaWduZWQgbG9uZyB0aHBfc3dhcGluX3N1aXRhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy00NjkwLVx0ICovXG5tbS9tZW1vcnkuYzo0NjkxOlx0b3JkZXJzID0gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCBUVkFfUEFHRUZBVUxULFxubW0vbWVtb3J5LmMtNDY5Mi1cdFx0XHRcdFx0ICBCSVQoUE1EX09SREVSKSAtIDEpO1xuLS1cbm1tL21lbW9yeS5jPTUxNjE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcbi0tXG5tbS9tZW1vcnkuYy01MTgzLVx0ICovXG5tbS9tZW1vcnkuYzo1MTg0Olx0b3JkZXJzID0gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVx1MDAzZXZtX2ZsYWdzLCBUVkFfUEFHRUZBVUxULFxubW0vbWVtb3J5LmMtNTE4NS1cdFx0XHRcdFx0ICBCSVQoUE1EX09SREVSKSAtIDEpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NzI3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQ2hlY2tpbmcgdGhlIEFjY2Vzc2liaWxpdHkgb2YgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGZ1bmN0aW9uLiBUaGUgY29kZSBzdWdnZXN0cyBpdCYjMzk7cyAqbm90KiBhIHN0YXRpYyBmdW5jdGlvbiwgd2hpY2ggaW1tZWRpYXRlbHkgbWFrZXMgbWUgdGhpbmsgYWJvdXQgaXRzIHZpc2liaWxpdHkuIFNpbmNlIGl0JiMzOTtzIG5vdCBkZWNsYXJlZCBzdGF0aWMsIGl0JiMzOTtzIGVpdGhlciBleHBvcnRlZCBvciBhdCBsZWFzdCBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJiMzOTtsbCBxdWlja2x5IGNoZWNrIGlmIGl0JiMzOTtzIGV4cGxpY2l0bHkgZXhwb3J0ZWQsIGJlY2F1c2Ugbm9uLXN0YXRpYyBmdW5jdGlvbnMgYXJlIGF1dG9tYXRpY2FsbHkgYWNjZXNzaWJsZSBhY3Jvc3MgdHJhbnNsYXRpb24gdW5pdHMgaWYgaXQmIzM5O3MgdmlzaWJsZS4gVGhhdCYjMzk7cyB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaW4gdW5kZXJzdGFuZGluZyBob3cgdGhpcyBwYXJ0IG9mIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzeXN0ZW0gd29ya3MuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm5vIG1hdGNoZXM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7RVhQT1JUX1NZTUJPTC4qX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDsmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDtubyBtYXRjaGVzJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2OTc1CgkJCQkJCQlvdXRwdXQ6IDI4CgkJCQkJCQl0aG91Z2h0czogMTI5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGRpZ2dpbmcgaW50byB0aGlzIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgZnVuY3Rpb24uIEl0JiMzOTtzIG5vdCBleHBvcnRlZCwgc28gaXQmIzM5O3MgaW50ZXJuYWwgdG8gdGhpcyBtb2R1bGUsIGJ1dCBpdCYjMzk7cyBjbGVhcmx5IG5vdCBhIHNpbXBsZSBzdGF0aWMgdmFsdWUuIFRoYXQgbWVhbnMgc29tZXRoaW5nIGNhbGxzIGl0LCBhbmQgaXQmIzM5O3MgZG9pbmcgc29tZXRoaW5nIGR5bmFtaWMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoYXQgZHluYW1pYyBhc3BlY3QuCgpJIHNlZSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucyBjYWxsIGl0OiBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCwgYGh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlYCwgYHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzYCwgYGFsbG9jX2Fub25fZm9saW9gLCBhbmQgYHNob3dfc21hcGAuIFRoYXQgZ2l2ZXMgbWUgYSBmZXcgZGVjZW50IGVudHJ5IHBvaW50cyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHVzZWQgYW5kIHdoYXQgaW5wdXRzIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuCgpgYWxsb2NfYW5vbl9mb2xpb2Agc3RhbmRzIG91dCBhcyBhIHByb21pc2luZyBmb2N1cyBzeW1ib2wuIEkmIzM5O3ZlIHdvcmtlZCB3aXRoIHRoYXQgYXJlYSBiZWZvcmUuIEl0JiMzOTtzIG9mdGVuIGludm9sdmVkIGluIGluaXRpYWwgbWVtb3J5IGFsbG9jYXRpb24sIHNvIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGRldGVybWluaW5nIHRoZSBzaXplcyBpdCYjMzk7cyB3aWxsaW5nIHRvIHdvcmsgd2l0aC4gYGh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlYCBsb29rcyBsaWtlIGEgdXNlZnVsIHBvaW50IHRvbywgYXMgaXQgaGludHMgYXQgb25nb2luZyB2YWxpZGF0aW9uIG9mIGh1Z2VwYWdlIHNldHVwcy4gT2YgY291cnNlLCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGl0c2VsZiBpcyBhbHNvIGFuIGludGVyZXN0aW5nIGVudHJ5IHBvaW50IHRvIHN0YXJ0IGZyb20uCgpOb3csIGxldCBtZSBjaGVjayB0aGUgYHZtYV9pc19zcGVjaWFsX2h1Z2VgIGZ1bmN0aW9uLiBJIHN1c3BlY3QgdGhhdCBtaWdodCBiZSByZWxhdGVkIGFuZCBjb3VsZCBwcm92aWRlIGluc2lnaHQgaW50byB3aGF0IHRyaWdnZXJzIHRoZSBhbGxvd2FibGUgb3JkZXJzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2bWFfaXNfc3BlY2lhbF9odWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7JiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2h1Z2VfbWVtb3J5LmM9OTU9c3RhdGljIGlubGluZSBib29sIGZpbGVfdGhwX2VuYWJsZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0xMTMtLyogSWYgcmV0dXJucyB0cnVlLCB3ZSBhcmUgdW5hYmxlIHRvIGFjY2VzcyB0aGUgVk1BJiMzOTtzIGZvbGlvcy4gKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTE0OnN0YXRpYyBib29sIHZtYV9pc19zcGVjaWFsX2h1Z2UoY29uc3Qgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXG5tbS9odWdlX21lbW9yeS5jLTExNS17XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0xMjE9dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbi0tXG5tbS9odWdlX21lbW9yeS5jLTEzMy1cdFx0c3VwcG9ydGVkX29yZGVycyA9IFRIUF9PUkRFUlNfQUxMX0FOT047XG5tbS9odWdlX21lbW9yeS5jOjEzNDpcdGVsc2UgaWYgKHZtYV9pc19kYXgodm1hKSB8fCB2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpXG5tbS9odWdlX21lbW9yeS5jLTEzNS1cdFx0c3VwcG9ydGVkX29yZGVycyA9IFRIUF9PUkRFUlNfQUxMX1NQRUNJQUxfREFYO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtMTk4LVx0XHQgKi9cbm1tL2h1Z2VfbWVtb3J5LmM6MTk5Olx0XHRpZiAoIWZvcmNlZF9jb2xsYXBzZSBcdTAwMjZcdTAwMjYgIXZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSBcdTAwMjZcdTAwMjZcbm1tL2h1Z2VfbWVtb3J5LmMtMjAwLVx0XHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG4tLVxubW0vaHVnZV9tZW1vcnkuYz0yOTQwPWludCB6YXBfaHVnZV9wdWQoc3RydWN0IG1tdV9nYXRoZXIgKnRsYiwgc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0yOTUyLVx0dGxiX3JlbW92ZV9wdWRfdGxiX2VudHJ5KHRsYiwgcHVkLCBhZGRyKTtcbm1tL2h1Z2VfbWVtb3J5LmM6Mjk1MzpcdGlmICh2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpIHtcbm1tL2h1Z2VfbWVtb3J5LmMtMjk1NC1cdFx0c3Bpbl91bmxvY2socHRsKTtcbi0tXG5tbS9odWdlX21lbW9yeS5jPTMwNzQ9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXG4tLVxubW0vaHVnZV9tZW1vcnkuYy0zMTAzLVx0XHRcdHphcF9kZXBvc2l0ZWRfdGFibGUobW0sIHBtZCk7XG5tbS9odWdlX21lbW9yeS5jOjMxMDQ6XHRcdGlmICh2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpXG5tbS9odWdlX21lbW9yeS5jLTMxMDUtXHRcdFx0cmV0dXJuO1xuLS1cbm1tL2h1Z2VfbWVtb3J5LmM9NDYzNj1zdGF0aWMgaW5saW5lIGJvb2wgdm1hX25vdF9zdWl0YWJsZV9mb3JfdGhwX3NwbGl0KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxuLS1cbm1tL2h1Z2VfbWVtb3J5LmMtNDYzOS1cdFx0cmV0dXJuIHRydWU7XG5tbS9odWdlX21lbW9yeS5jOjQ2NDA6XHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxubW0vaHVnZV9tZW1vcnkuYy00NjQxLVx0XHRyZXR1cm4gdHJ1ZTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjQ8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODE1MwoJCQkJCQkJb3V0cHV0OiAxNDgKCQkJCQkJCXRob3VnaHRzOiAyNjcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQW5hbHlzaXMgb2YgdGhlIFRIUCBDaGFuZ2UqKgoKT2theSwgc28gdGhlIGNvcmUgb2YgdGhpcyBjaGFuZ2UgbGllcyB3aXRoaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gTXkgYXR0ZW50aW9uIGltbWVkaWF0ZWx5IGdvZXMgdGhlcmUuIFdlJiMzOTtyZSB0YWxraW5nIGFib3V0IFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMsIHNvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMsIG9mIGNvdXJzZSwgdGhlIHJlbGV2YW50IGNvbmZpZy4gTGV0JiMzOTtzIHNlZSBpZiB0aGVyZSBhcmUgYW55IG90aGVyIHJlbGF0ZWQgY29uZmlncywgYnV0IG15IGluaXRpYWwgYXNzZXNzbWVudCBzdWdnZXN0cyB0aGlzIGlzIHRoZSBwcmltYXJ5IG9uZS4KCkkmIzM5O20gbWFraW5nIGEgbWVudGFsIG5vdGUgb2Yga2V5IGZ1bmN0aW9ucyBmb3IgbXkgYW5hbHlzaXM6IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBhbGxvY19hbm9uX2ZvbGlvYCwgYW5kIGBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBwbGF5ZXJzIGluIHRoaXMgVEhQIGxvZ2ljIG1vZGlmaWNhdGlvbi4gVGhpcyBgdm1hX2lzX3NwZWNpYWxfaHVnZWAgY2hlY2ssIHV0aWxpemluZyBgdm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9QRk5NQVBgIGFuZCBgdm1hLSZndDt2bV9mbGFncyAmYW1wOyBWTV9NSVhFRE1BUGAsIGl0IGlzIHN0YW5kYXJkIE1NIHN0dWZmLiBOb3RoaW5nIHBhcnRpY3VsYXJseSB1bnVzdWFsLCBqdXN0IHRoZSB0eXBpY2FsIGZsYWdzIHdlIGV4cGVjdCB0byBzZWUgaW4gYSBWTUEgc3RydWN0dXJlLgoKVGhlIGdpc3Qgb2YgaXQgaXMgdGhpczogYSBwYXRjaCB0aGF0IGNoYW5nZXMgdGhlIFRIUCBiZWhhdmlvciwgYW5kIHNwZWNpZmljYWxseSBpbiBob3cgc3BlY2lhbCBodWdlIFZNQXMgYXJlIGhhbmRsZWQuIEl0JiMzOTtzIGV4ZW1wdGluZyBjZXJ0YWluIFZNQXMgZnJvbSB0aGUgdXN1YWwgVEhQIGNvc3QgY29uc2lkZXJhdGlvbnMsIGFsbG93aW5nIGZvciBtb3JlIGFnZ3Jlc3NpdmUgaHVnZSBwYWdlIGFsbG9jYXRpb24gb3IgY29sbGFwc2luZyB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMuIFRoZSBjaGFuZ2UgaXMgZGVmaW5pdGVseSBmdW5jdGlvbmFsLCBkaXJlY3RseSBpbXBhY3RpbmcgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbS4gVGhpcyBtb2RpZmljYXRpb24gYWZmZWN0cyBodWdlIHBhZ2UgYWxsb2NhdGlvbiwgd2hpY2ggaXMgc29tZXRoaW5nIHVzZXJzIGNhbiBpbnRlcmFjdCB3aXRoIHRocm91Z2ggYG1tYXBgIGFuZCBgbWFkdmlzZWAuCgpTbywgaGVyZSYjMzk7cyBteSBxdWljayBldmFsdWF0aW9uLCBpbiBhIGZvcm1hdCB0aGF0JiMzOTtzIHVzZWZ1bDoKCiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gdGhpcyBpcyBhIGNvcmUgTU0gY2hhbmdlLCB3aXRoIHVzZXItc3BhY2UgcmVhY2gsIHZlcnkgZnV6emFibGUuCiogICAqKkZvY3VzU3ltYm9sczoqKiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLCBgYWxsb2NfYW5vbl9mb2xpb2AsIGBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZWAgLSB0aGVzZSBhcmUgbXkgaW5pdGlhbCB0YXJnZXRzLgoqICAgKipFbmFibGVDb25maWdzOioqIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgLSB0aGlzIGlzIG9idmlvdXNseSBhIGNyaXRpY2FsIHN0YXJ0aW5nIHBvaW50LgoqICAgKipSZWFzb25pbmc6KiogVGhlIG1vZGlmaWNhdGlvbiBleGVtcHRzIHNwZWNpYWwgaHVnZSBWTUFzIGZyb20gdGhlIG5vcm1hbCBUSFAgb3JkZXIgY2hlY2tzIHdpdGhpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGltcGFjdHMgaHVnZSBwYWdlIGFsbG9jYXRpb24gYW5kIGNvbGxhcHNlLCBhbmQgaXMgdXNlci1yZWFjaGFibGUgdGhyb3VnaCBgbW1hcGAgYW5kIGBtYWR2aXNlYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjQ8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7X190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMmIzM0OywKICAgICYjMzQ7YWxsb2NfYW5vbl9mb2xpbyYjMzQ7LAogICAgJiMzNDtodWdlcGFnZV92bWFfcmV2YWxpZGF0ZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCkgbG9naWMgaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIFZNQXMgZnJvbSBUSFAgY29zdHMgd2hlbiBjaGVja2luZyBhbGxvd2FibGUgb3JkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGh1Z2UgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgY29sbGFwc2VkLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwIGFuZCBtYWR2aXNlLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O19fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzJiMzNDssCiAgICAmIzM0O2FsbG9jX2Fub25fZm9saW8mIzM0OywKICAgICYjMzQ7aHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGxvZ2ljIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBWTUFzIGZyb20gVEhQIGNvc3RzIHdoZW4gY2hlY2tpbmcgYWxsb3dhYmxlIG9yZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBodWdlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGNvbGxhcHNlZCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcCBhbmQgbWFkdmlzZS4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjEgMDc6MjQ8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yMSAwNzoyNDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBtYXBwaW5ncyBmcm9tIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBwb2xpY2llcyBhbmQgVk1BIGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGludmFsaWQgcGFnZSBhY2Nlc3NlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDBiNWFkNzVhMDhiYzQ0NjNiMTRlMGJmNzY0ZjRjMTJlN2YxOGU4ZDYKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgRnJpIEF1ZyAyMSAwNzoyMzozOSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jCmluZGV4IDVkOTRmYTRjNzRmZGIuLmNlY2Y2YmQ4ZmYwYjEgMTAwNjQ0Ci0tLSBhL21tL2h1Z2VfbWVtb3J5LmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vaHVnZV9tZW1vcnkuYwpAQCAtMTkzLDkgJiM0MzsxOTMsMTAgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlpZiAoIXZtYV9pc19hbm9ueW1vdXModm1hKSkgewogCQkvKgogCQkgKiBFbmZvcmNlIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMgYXMgbmVjZXNzYXJ5LiBBbm9ueW1vdXMgdm1hcwotCQkgKiB3ZXJlIGFscmVhZHkgaGFuZGxlZCBpbiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoKS4KJiM0MzsJCSAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLiBTcGVjaWFsCiYjNDM7CQkgKiBtYXBwaW5ncyBoYXZlIG5vIFRIUCBjb3N0cyBhbmQgYXJlIGV4ZW1wdC4KIAkJICovCi0JCWlmICghZm9yY2VkX2NvbGxhcHNlICZhbXA7JmFtcDsKJiM0MzsJCWlmICghZm9yY2VkX2NvbGxhcHNlICZhbXA7JmFtcDsgIXZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSAmYW1wOyZhbXA7CiAJCSAgICAoIWh1Z2VwYWdlX2dsb2JhbF9lbmFibGVkKCkgfHwgKCEodm1fZmxhZ3MgJmFtcDsgVk1fSFVHRVBBR0UpICZhbXA7JmFtcDsKIAkJCQkJCSAgICAhaHVnZXBhZ2VfZ2xvYmFsX2Fsd2F5cygpKSkpCiAJCQlyZXR1cm4gMDsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjI0PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNjIKCQkJCQkJCW91dHB1dDogMTU0CgkJCQkJCQl0aG91Z2h0czogNDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVEhQIFZNQSBBbGxvd2FibGUgT3JkZXJzIFBhdGNoKioKCk9rYXksIGxldCYjMzk7cyBicmVhayBkb3duIHRoaXMgcGF0Y2ggdG8gYG1tL2h1Z2VfbWVtb3J5LmNgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgZm9jdXNlZCBvbiB1bmRlcnN0YW5kaW5nIHRoZSBsb2dpYyBhbHRlcmF0aW9uIHdpdGhpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGUgY29yZSBjaGFuZ2UgaXMgdGhlIGFkZGl0aW9uIG9mIGAhdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpYCB0byB0aGUgY29uZGl0aW9uYWwgY2hlY2suIEVzc2VudGlhbGx5LCBpdCYjMzk7cyBhYm91dCB3aGV0aGVyIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYXJlIHBlcm1pdHRlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgd2hlbiBtYW5hZ2luZyBWaXJ0dWFsIE1lbW9yeSBBcmVhcyAoVk1BcykuCgpUaGUgb3JpZ2luYWwgY2hlY2ssIGFzIEkgdW5kZXJzdGFuZCBpdCwgcmVzdHJpY3RlZCBUSFAgdXNlIGlmIGBmb3JjZWRfY29sbGFwc2VgIHdhcyBmYWxzZSwgYW5kIGVpdGhlciBnbG9iYWwgaHVnZSBwYWdlcyB3ZXJlIGRpc2FibGVkIG9yIHRoZSBWTUEgZGlkbiYjMzk7dCBleHBsaWNpdGx5IHJlcXVlc3QgaHVnZSBwYWdlcy4gTm93LCB0aGlzIGB2bWFfaXNfc3BlY2lhbF9odWdlYCBjb25kaXRpb24gaXMgaW5zZXJ0ZWQuIFRoaXMgbW9kaWZpY2F0aW9uIGFsbG93cyBUSFAgdG8gYmUgY29uc2lkZXJlZCBmb3IgJiMzNDtzcGVjaWFsJiMzNDsgaHVnZSBtYXBwaW5ncyBldmVuIHdoZW4gdGhlIGJyb2FkZXIgY29uZGl0aW9ucyBhcmUgbm90IG1ldCwgc28gbG9uZyBhcyBgZm9yY2VkX2NvbGxhcHNlYCBpcyBhbHNvIGZhbHNlLgoKTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQgYWZ0ZXIgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgY29kZSBhbmQgaXRzIGNvbnRleHQsIEkgZG9uJiMzOTt0IHNlZSBhbnkgZGlyZWN0IGludHJvZHVjdGlvbiBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZS4gVGhpcyBwYXRjaCBwcmltYXJpbHkgYWx0ZXJzIGNvbnRyb2wgZmxvdyB3aXRoaW4gdGhlIFRIUCBkZWNpc2lvbiBwcm9jZXNzLCBhZmZlY3RpbmcgcGFnZSBhbGxvY2F0aW9uIGFuZCBWTUEgZmxhZyBjaGVja3MuIFRoZXJlJiMzOTtzIG5vIGNyZWF0aW9uIG9mIG5ldyBtZW1vcnkgcmVnaW9ucyBvciBkaXJlY3QgbWFuaXB1bGF0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgZGF0YSBzdHJ1Y3R1cmVzLiBBbnkgcG90ZW50aWFsIGlzc3VlcyB3b3VsZCBsaWtlbHkgbWFuaWZlc3QgYXMgcGFnZSBmYXVsdHMsIG1lbW9yeSBjb3JydXB0aW9uLCBvdXQtb2YtYm91bmRzIGFjY2Vzcywgb3IgdXNlLWFmdGVyLWZyZWUgc2NlbmFyaW9zLiBUaGVzZSwgSSYjMzk7bSBjb25maWRlbnQsIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gb3IgdGhlIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgc2FmZXR5IGNoZWNrcy4gS01TQU4gaXNuJiMzOTt0IG5lZWRlZCBoZXJlLgoKTG9va2luZyBjbG9zZXIsIEkmIzM5O20gc2ltcGx5IHNlZWluZyBhIG1vZGlmaWNhdGlvbiBvZiBhIGNvbmRpdGlvbi4gSSYjMzk7bSBnb2luZyB0byBjb25maXJtIG15IHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlbGV2YW50IGNvZGUuIFRoZSBjaGFuZ2Ugc2ltcGx5IGFsdGVycyB0aGUgY29udHJvbCBmbG93IHdpdGhpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHRvIGFsbG93IFRIUCB3aXRoICYjMzQ7c3BlY2lhbCYjMzQ7IGh1Z2UgbWFwcGluZ3MuCgpTbywgaW4gZXNzZW5jZSwgdGhpcyBpcyBhIG1vZGlmaWNhdGlvbiB0byB0aGUgVEhQIHBvbGljeSBkZWNpc2lvbi1tYWtpbmcgcHJvY2Vzcy4gVGhlIGNoYW5nZSBzb2xlbHkgYWZmZWN0cyBjb250cm9sIGZsb3cgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCwgd2hpY2ggSSBjYW4gcmVhZGlseSBzZWUuIE5vIGFsbG9jYXRpb25zIGFyZSBpbnRyb2R1Y2VkLCBhbmQgbm8gdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgYXJlIHRha2luZyBwbGFjZS4gVGhpcyBpcyBub3QgYSBLTVNBTiBpc3N1ZSwgc28gSSYjMzk7bGwgc2V0IE5lZWRzS01TQU4gdG8gZmFsc2UuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzIxIDA3OjI0PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIG1hcHBpbmdzIGZyb20gVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljaWVzIGFuZCBWTUEgZmxhZ3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgaW52YWxpZCBwYWdlIGFjY2Vzc2VzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIG1hcHBpbmdzIGZyb20gVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljaWVzIGFuZCBWTUEgZmxhZ3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgaW52YWxpZCBwYWdlIGFjY2Vzc2VzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MjM6MzkuOTY2MjM2NzgxWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTQ2MDg5NzY3ODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiVFJBTlNQQVJFTlRfSFVHRVBBR0VcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc1wiLFxuICAgIFwiYWxsb2NfYW5vbl9mb2xpb1wiLFxuICAgIFwiaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb25kaXRpb24gaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIG1hcHBpbmdzIGZyb20gVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cy4gVGhpcyBpcyBhIGxvZ2ljIGNoYW5nZSByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IHBvbGljaWVzIGFuZCBWTUEgZmxhZ3MuIEl0IGRvZXMgbm90IGludHJvZHVjZSBhbnkgbmV3IGRhdGEgc3RydWN0dXJlcywgYWxsb2NhdGlvbnMsIG9yIHVzZXItc3BhY2UgY29waWVzIHRoYXQgY291bGQgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBBbnkgcG90ZW50aWFsIGJ1Z3MgaW50cm9kdWNlZCBieSB0aGlzIGNoYW5nZSAoZS5nLiwgaW52YWxpZCBwYWdlIGFjY2Vzc2VzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3IgdXNlLWFmdGVyLWZyZWUpIHdvdWxkIGJlIGVmZmVjdGl2ZWx5IGNhdWdodCBieSBLQVNBTiBhbmQgc3RhbmRhcmQga2VybmVsIGRlYnVnZ2luZyB0b29scy4gVGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSByZWFkcyBvciBpbmZvLWxlYWtzIHRoYXQgd291bGQgcmVxdWlyZSBLTVNBTi5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29yZSBUcmFuc3BhcmVudCBIdWdlIFBhZ2UgKFRIUCkgbG9naWMgaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCB0byBleGVtcHQgc3BlY2lhbCBodWdlIFZNQXMgZnJvbSBUSFAgY29zdHMgd2hlbiBjaGVja2luZyBhbGxvd2FibGUgb3JkZXJzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN1YnN5c3RlbSB0aGF0IGFmZmVjdHMgaG93IGh1Z2UgcGFnZXMgYXJlIGFsbG9jYXRlZCBhbmQgY29sbGFwc2VkLCB3aGljaCBpcyByZWFjaGFibGUgZnJvbSB1c2VyIHNwYWNlIHZpYSBtbWFwIGFuZCBtYWR2aXNlLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyMzozOS45NjYyNDI2ODFaIiwiU2VxIjoxLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6InJlYWQtcGF0Y2gtZGlmZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTkzNjEwNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiUGF0Y2hEaWZmXCI6IFwiY29tbWl0IDBiNWFkNzVhMDhiYzQ0NjNiMTRlMGJmNzY0ZjRjMTJlN2YxOGU4ZDZcXG5BdXRob3I6IHN5ei1jbHVzdGVyIFxcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVxcdTAwM2VcXG5EYXRlOiAgIEZyaSBBdWcgMjEgMDc6MjM6MzkgMjAyNiArMDAwMFxcblxcbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcXG5cXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcXG5pbmRleCA1ZDk0ZmE0Yzc0ZmRiLi5jZWNmNmJkOGZmMGIxIDEwMDY0NFxcbi0tLSBhL21tL2h1Z2VfbWVtb3J5LmNcXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXFxuQEAgLTE5Myw5ICsxOTMsMTAgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4gXFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHtcXG4gXFx0XFx0LypcXG4gXFx0XFx0ICogRW5mb3JjZSBUSFAgY29sbGFwc2UgcmVxdWlyZW1lbnRzIGFzIG5lY2Vzc2FyeS4gQW5vbnltb3VzIHZtYXNcXG4tXFx0XFx0ICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuXFxuK1xcdFxcdCAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLiBTcGVjaWFsXFxuK1xcdFxcdCAqIG1hcHBpbmdzIGhhdmUgbm8gVEhQIGNvc3RzIGFuZCBhcmUgZXhlbXB0LlxcbiBcXHRcXHQgKi9cXG4tXFx0XFx0aWYgKCFmb3JjZWRfY29sbGFwc2UgXFx1MDAyNlxcdTAwMjZcXG4rXFx0XFx0aWYgKCFmb3JjZWRfY29sbGFwc2UgXFx1MDAyNlxcdTAwMjYgIXZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSBcXHUwMDI2XFx1MDAyNlxcbiBcXHRcXHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuIFxcdFxcdFxcdFxcdFxcdFxcdCAgICAhaHVnZXBhZ2VfZ2xvYmFsX2Fsd2F5cygpKSkpXFxuIFxcdFxcdFxcdHJldHVybiAwO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyMzo0MC4zNzg5OTYxNDhaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0NTUzNjY5NjE4NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gICAgXCJhbGxvY19hbm9uX2ZvbGlvXCIsXG4gICAgXCJodWdlcGFnZV92bWFfcmV2YWxpZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBsb2dpYyBpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHRvIGV4ZW1wdCBzcGVjaWFsIGh1Z2UgVk1BcyBmcm9tIFRIUCBjb3N0cyB3aGVuIGNoZWNraW5nIGFsbG93YWJsZSBvcmRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGFuZCBjb2xsYXBzZWQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1tYXAgYW5kIG1hZHZpc2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLlxuLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCxcbiAgaW9uaWMsIGFtZGdwdSkgdGhhdCByZXF1aXJlIHBoeXNpY2FsIFBDSWUgaGFyZHdhcmUgY2FyZHMgbm90IGVtdWxhdGVkIGluIHN0YW5kYXJkIFFFTVUuXG4tIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpXG4gIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zXG4gICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS5cbjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLlxuICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLlxuICAgQWxzbyBjaGVjayBcImRlcGVuZHMgb25cIiBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3NcbiAgIG5lZWRlZCBmb3IgS2J1aWxkIHRvIGNvbXBpbGUgdGhlIGNvZGUgc3RhdGljYWxseSBpbnRvIHZtbGludXguIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlnc1xuICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDBiNWFkNzVhMDhiYzQ0NjNiMTRlMGJmNzY0ZjRjMTJlN2YxOGU4ZDZcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgRnJpIEF1ZyAyMSAwNzoyMzozOSAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL2h1Z2VfbWVtb3J5LmMgYi9tbS9odWdlX21lbW9yeS5jXG5pbmRleCA1ZDk0ZmE0Yzc0ZmRiLi5jZWNmNmJkOGZmMGIxIDEwMDY0NFxuLS0tIGEvbW0vaHVnZV9tZW1vcnkuY1xuKysrIGIvbW0vaHVnZV9tZW1vcnkuY1xuQEAgLTE5Myw5ICsxOTMsMTAgQEAgdW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcbiBcdGlmICghdm1hX2lzX2Fub255bW91cyh2bWEpKSB7XG4gXHRcdC8qXG4gXHRcdCAqIEVuZm9yY2UgVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cyBhcyBuZWNlc3NhcnkuIEFub255bW91cyB2bWFzXG4tXHRcdCAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLlxuK1x0XHQgKiB3ZXJlIGFscmVhZHkgaGFuZGxlZCBpbiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoKS4gU3BlY2lhbFxuK1x0XHQgKiBtYXBwaW5ncyBoYXZlIG5vIFRIUCBjb3N0cyBhbmQgYXJlIGV4ZW1wdC5cbiBcdFx0ICovXG4tXHRcdGlmICghZm9yY2VkX2NvbGxhcHNlIFx1MDAyNlx1MDAyNlxuK1x0XHRpZiAoIWZvcmNlZF9jb2xsYXBzZSBcdTAwMjZcdTAwMjYgIXZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSBcdTAwMjZcdTAwMjZcbiBcdFx0ICAgICghaHVnZXBhZ2VfZ2xvYmFsX2VuYWJsZWQoKSB8fCAoISh2bV9mbGFncyBcdTAwMjYgVk1fSFVHRVBBR0UpIFx1MDAyNlx1MDAyNlxuIFx0XHRcdFx0XHRcdCAgICAhaHVnZXBhZ2VfZ2xvYmFsX2Fsd2F5cygpKSkpXG4gXHRcdFx0cmV0dXJuIDA7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyMzo0MC4zNzg5OTc4NDhaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MjE5MjA2MzE3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIFRIUCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCB0d2Vha3MgYG1tL2h1Z2VfbWVtb3J5LmNgLCBzcGVjaWZpY2FsbHkgdGhlIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgZnVuY3Rpb24uIFRoaXMgaXMgaW4gdGhlIGhlYXJ0IG9mIFRIUCBtYW5hZ2VtZW50LCBzbyBpdCdzIHdvcnRoIGEgY2xvc2UgbG9vay4gVGhlIGNoYW5nZSBpdHNlbGYgaXMgcHJldHR5IGZvY3VzZWQ6IGl0J3MgYWRkaW5nIGEgY2hlY2sgZm9yIGB2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSlgIHRvIHRoZSBjb25kaXRpb25hbC4gIEVzc2VudGlhbGx5LCBpdCdzIHRpZ2h0ZW5pbmcgdXAgdGhlIGNyaXRlcmlhIGZvciBhbGxvd2luZyBUSFAgb3JkZXJzLiBUaGUgb3JpZ2luYWwgY29uZGl0aW9uIHdhcyBgIWZvcmNlZF9jb2xsYXBzZWAsIG5vdyBpdCdzIGAhZm9yY2VkX2NvbGxhcHNlIFx1MDAyNlx1MDAyNiAhdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpYC4gVGhlIGltcGxpY2F0aW9uIGlzIHRoYXQgd2UgZG9uJ3Qgd2FudCB0byBhbGxvdyBodWdlIHBhZ2UgYWxsb2NhdGlvbiBpbiBhIFZNQSBpZiBpdCdzIGNvbnNpZGVyZWQgXCJzcGVjaWFsXCIgaW4gc29tZSB3YXkuXG5cbk5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBjb25zdGl0dXRlcyBhIFwic3BlY2lhbCBodWdlIFZNQVwiLiBXaGF0IHNjZW5hcmlvcyBpcyB0aGlzIGFpbWVkIGF0PyAgSSdsbCBuZWVkIHRvIGRpZyBpbnRvIHRoZSBkZWZpbml0aW9uIG9mIGB2bWFfaXNfc3BlY2lhbF9odWdlYCB0byBnZXQgdGhlIGNvbnRleHQuIERvZXMgdGhpcyByZWxhdGUgdG8gcGVyc2lzdGVudCBtZW1vcnksIGRldmljZSBtZW1vcnksIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5PyAgQW5kIHRoZW4sIEkgbmVlZCB0byBzZWUgaG93IHRoZSBhZGRpdGlvbiBvZiB0aGlzIGNoZWNrIGFsdGVycyB0aGUgc3lzdGVtIGJlaGF2aW9yIHJlZ2FyZGluZyBUSFAgdXNhZ2UgaW4gdGhlc2Ugc3BlY2lmaWMgVk1Bcy4gVWx0aW1hdGVseSwgd2hhdCBhcmUgdGhlIHVzZSBjYXNlcyBhbmQgdGhlaXIgZXhwZWN0ZWQgb3V0Y29tZXM/IFRoaXMgaXMgZ29pbmcgdG8gcmVxdWlyZSBzb21lIGRlZXBlciBpbnZlc3RpZ2F0aW9uIG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlIGFuZCBwb3NzaWJseSByZWxldmFudCBkb2N1bWVudGF0aW9uIG9yIGNvbW1pdCBtZXNzYWdlcyBmb3IgY29udGV4dC4gIExldCdzIHNlZSB3aGVyZSB0aGlzIHJhYmJpdCBob2xlIGxlYWRzLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDY1LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTI0LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MjM6NDUuNTk4MjA2OTI1WiIsIlNlcSI6NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5NDkxNzY1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjIzOjQ1LjY0NzcwNDZaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo2NzcxNzM5NzM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIENvbnRleHQqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBNeSBmaXJzdCBzdGVwLCBhcyBhbHdheXMsIGlzIHRvIGltbWVkaWF0ZWx5IHBsYWNlIHRoaXMgZnVuY3Rpb24gd2l0aGluIGl0cyBsYXJnZXIgY29udGV4dC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgKndoeSogdGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQsICp3aGVuKiBpdCdzIGNhbGxlZCwgYW5kIG1vc3QgaW1wb3J0YW50bHksICp3aGF0KiBpdCdzIHRyeWluZyB0byBhY2hpZXZlIHJlZ2FyZGluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIChUSFApIGFuZCB2aXJ0dWFsIG1lbW9yeSBhcmVhcyAoVk1BcykuIEkga25vdyB0aGF0IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXMgbGlrZWx5IGludm9sdmVkIGluIGRldGVybWluaW5nIGlmIGEgVk1BIGlzIHN1aXRhYmxlIGZvciBUSFAgYWxsb2NhdGlvbi5cblxuSSdtIG1lbnRhbGx5IHByZXBhcmluZyBteXNlbGYgZm9yIGEgZGl2ZSBpbnRvIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgY2FsbCBzaXRlczsgcHJvYmFibHkgdGhyb3VnaCBzb21lIGdyZXAtZnUgb3IgYSBxdWljayBJREUgc2VhcmNoIHdpdGhpbiB0aGUga2VybmVsIHNvdXJjZS4gS25vd2luZyB0aGUgY2FsbGVyIGZ1bmN0aW9ucyB3aWxsIHByb3ZpZGUgdml0YWwgY2x1ZXMuIEFyZSB3ZSBkZWFsaW5nIHdpdGggaW5pdGlhbCBtYXBwaW5nLCBtaWdyYXRpb24sIG9yIHNvbWUgb3RoZXIgb3BlcmF0aW9uPyBUaGF0J3MgZ29pbmcgdG8gaGVhdmlseSBpbmZsdWVuY2UgdGhlIGludGVycHJldGF0aW9uIG9mIHRoZSBmdW5jdGlvbidzIGxvZ2ljLlxuXG5JIGFudGljaXBhdGUgaXQncyBsb29raW5nIGF0IGZhY3RvcnMgbGlrZSB0aGUgVk1BIGZsYWdzLCBzaXplLCBwb3RlbnRpYWxseSBhbGlnbm1lbnQsIGFuZCBtYXliZSBldmVuIHRoZSBtZW1vcnkgcG9saWN5LiBJJ20gYWxyZWFkeSBmb3JtdWxhdGluZyBxdWVzdGlvbnM6IElzIGl0IGNoZWNraW5nIGZvciBjb25mbGljdGluZyBmbGFncywgc3VjaCBhcyB0aG9zZSB0aGF0IHdvdWxkIHByZXZlbnQgVEhQIHVzYWdlLCBsaWtlIGh1Z2VwYWdlLWRpc2FibGVkIGZsYWdzPyBJcyBpdCBleGFtaW5pbmcgdGhlIFZNQSdzIHNpemUgYWdhaW5zdCB0aGUgc3VwcG9ydGVkIGh1Z2VwYWdlIHNpemVzIG9uIHRoZSBjdXJyZW50IGFyY2hpdGVjdHVyZT8gSSdtIGFzc3VtaW5nIGl0J3MgbGlrZWx5IHBlcmZvcm1pbmcgc29tZSBiaXR3aXNlIG9wZXJhdGlvbnMgdG8gZXh0cmFjdCB0aGUgY3J1Y2lhbCBpbmZvcm1hdGlvbiB0byBtYWtlIGEgZGVjaXNpb24uXG5cbkZ1cnRoZXJtb3JlLCBJIGhhdmUgdG8gY29uc2lkZXIgdGhlIHBvdGVudGlhbCBpbnRlcnBsYXkgd2l0aCBvdGhlciByZWxhdGVkIGZ1bmN0aW9ucy4gSXMgdGhpcyBmdW5jdGlvbiBqdXN0IHRoZSBmaXJzdCBzdGVwIGluIGEgbGFyZ2VyIHByb2Nlc3MsIG9yIGlzIGl0IGEgZ2F0ZWtlZXBlciB0aGF0IGRpcmVjdGx5IGRldGVybWluZXMgZWxpZ2liaWxpdHk/IEkgbmVlZCB0byBsb29rIGZvciBhbnkgcG90ZW50aWFsIHNpZGUgZWZmZWN0cyBvciBpbXBsaWNhdGlvbnMgb2YgdGhlIHJldHVybmVkIHZhbHVlLiBBcmUgdGhlcmUgYW55IGNvcm5lciBjYXNlcyB0aGF0IG1pZ2h0IGJlIHJlbGV2YW50IGhlcmUg4oCTIHRoaW5ncyB0aGF0IGFyZSBsaWtlbHkgdG8gYmUgbWlzc2VkIGlmIHRoZSBjb2RlIGlzbuKAmXQgcmV2aWV3ZWQgd2l0aCBjYXJlP1xuXG5GaW5hbGx5LCBJJ20gZXhwZWN0aW5nIHNvbWUga2luZCBvZiBvcmRlciBjaGVjay4gUHJvYmFibHkgYSBjb21wYXJpc29uIG9mIHJlcXVlc3RlZCBwYWdlcyB3aXRoIHRoZSBwYWdlIHNpemUg4oCTIGxpa2VseSB0aGUgbGFyZ2VzdCBzdXBwb3J0ZWQgcGFnZSBzaXplLiBBbmQsIEnigJlsbCBiZSB3YXRjaGluZyBmb3IgYW55IGFyY2hpdGVjdHVyYWwgZGVwZW5kZW5jaWVzLiBJIGV4cGVjdCB0aGUgYmVoYXZpb3Igb2YgdGhpcyBmdW5jdGlvbiBtYXkgYmUgc3VidGx5IGRpZmZlcmVudCBkZXBlbmRpbmcgb24gdGhlIHVuZGVybHlpbmcgYXJjaGl0ZWN0dXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNjYzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MjM6NTIuNDE5NDQ3MzE2WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE4NjkxMDM5OTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTctXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mjk4OnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk5LVxcdFxcdFxcdFxcdFxcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg9MzE5PXVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQxLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjM0MjpcXHRyZXR1cm4gX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHlwZSwgb3JkZXJzKTtcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0zNDMtfVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz0xMTQ9c3RhdGljIGJvb2wgdm1hX2lzX3NwZWNpYWxfaHVnZShjb25zdCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTIwLVxcbm1tL2h1Z2VfbWVtb3J5LmM6MTIxOnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxubW0vaHVnZV9tZW1vcnkuYy0xMjItXFx0XFx0XFx0XFx0XFx0IHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjIzOjU0LjI4ODU2MTMyMVoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjI5NDQ1MTA2ODQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBNZW1vcnkgTWFuYWdlbWVudCBDb2RlKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gVGhlIG5hbWUgcmluZ3MgYSBiZWxsLCBJIGtub3cgdGhpcyBpcyBhIGNvcmUgTWVtb3J5IE1hbmFnZW1lbnQgZnVuY3Rpb24uIEkgY2FuIHNlZSB0aGF0IGB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGNhbGxzIGl0IGRpcmVjdGx5LiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gTm93LCBsZXQncyBkaXZlIGludG8gdGhlIGxvZ2ljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGl0J3MgZG9pbmcsIHNvIHRoZSBmaXJzdCB0aGluZyBJJ2xsIGNoZWNrIGlzIGB2bWFfaXNfc3BlY2lhbF9odWdlYC4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgaW5pdGlhbCBjb250ZXh0IEkgbmVlZC4gSSdtIGFzc3VtaW5nIHRoYXQgaXQgaXMgc2V0dGluZyB1cCB0aGUgY29udGV4dCBmb3IgaHVnZSBwYWdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzU0OSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjIzOjU3LjIzMzA3NTAxNVoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MDg1MDYyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ2bWFfaXNfc3BlY2lhbF9odWdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2h1Z2VfbWVtb3J5LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz05NT1zdGF0aWMgaW5saW5lIGJvb2wgZmlsZV90aHBfZW5hYmxlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTEzLS8qIElmIHJldHVybnMgdHJ1ZSwgd2UgYXJlIHVuYWJsZSB0byBhY2Nlc3MgdGhlIFZNQSdzIGZvbGlvcy4gKi9cXG5tbS9odWdlX21lbW9yeS5jOjExNDpzdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTE1LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTIxPXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEzMy1cXHRcXHRzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTjtcXG5tbS9odWdlX21lbW9yeS5jOjEzNDpcXHRlbHNlIGlmICh2bWFfaXNfZGF4KHZtYSkgfHwgdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1LVxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9TUEVDSUFMX0RBWDtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk4LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTk5OlxcdFxcdGlmICghZm9yY2VkX2NvbGxhcHNlIFxcdTAwMjZcXHUwMDI2ICF2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9odWdlX21lbW9yeS5jLTIwMC1cXHRcXHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI5NDA9aW50IHphcF9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjk1Mi1cXHR0bGJfcmVtb3ZlX3B1ZF90bGJfZW50cnkodGxiLCBwdWQsIGFkZHIpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjk1MzpcXHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0yOTU0LVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwNzQ9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxMDMtXFx0XFx0XFx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjMxMDQ6XFx0XFx0aWYgKHZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSlcXG5tbS9odWdlX21lbW9yeS5jLTMxMDUtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NjM2PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfbm90X3N1aXRhYmxlX2Zvcl90aHBfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2MzktXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vaHVnZV9tZW1vcnkuYzo0NjQwOlxcdGlmICh2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpXFxubW0vaHVnZV9tZW1vcnkuYy00NjQxLVxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyMzo1Ny4yODM5MzM4NFoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5MjMxOTY3NzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgZnJvbSBteSBleHBlcnQgcGVyc3BlY3RpdmU6XG5cbioqVEhQIFZNQSBPcmRlciBDaGFuZ2UgLSBGdXp6aW5nIFBvdGVudGlhbCoqXG5cblJpZ2h0LCBzbyB0aGlzIGNoYW5nZSBmb2N1c2VzIG9uIHRoZSBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGZ1bmN0aW9uLCBzcGVjaWZpY2FsbHkgaG93IGl0IGltcGFjdHMgVEhQIGJlaGF2aW9yIGZvciBjZXJ0YWluLCBcInNwZWNpYWxcIiBodWdlIFZNQXMuIFRoaXMgaXMgYSBwcmV0dHkgc2lnbmlmaWNhbnQgc2hpZnQg4oCTIHdlJ3JlIHRhbGtpbmcgYWJvdXQgYSBmdW5jdGlvbmFsIGNoYW5nZSBkaXJlY3RseSB3aXRoaW4gdGhlIGNvcmUgTWVtb3J5IE1hbmFnZW1lbnQgKE1NKSBrZXJuZWwgY29kZS4gR2l2ZW4gaXRzIGRpcmVjdCBpbXBhY3Qgb24gaG93IFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgYXJlIGhhbmRsZWQgaW4gZWRnZSBjYXNlcywgaXQncyBzY3JlYW1pbmcgZm9yIHNvbWUgc2VyaW91cyBmdXp6aW5nIGF0dGVudGlvbi5cblxuTGV0J3MgcXVpY2tseSBmaWd1cmUgb3V0IHRoZSBjb25maWd1cmF0aW9uIGRlcGVuZGVuY2llcy4gQmFzZWQgb24gbXkgdW5kZXJzdGFuZGluZywgYG1tL2h1Z2VfbWVtb3J5LmNgICh3aGVyZSB0aGlzIGxpa2VseSByZXNpZGVzKSBpcyBjb21waWxlZCBhcyBwYXJ0IG9mIHRoZSBUcmFuc3BhcmVudCBIdWdlcGFnZSAoVEhQKSBzdWJzeXN0ZW0uIFNvLCB0aGlzIGNvZGUgcGF0aCB3aWxsIGJlIGVuYWJsZWQgb25seSB3aGVuIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIHNldC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ5MSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjg4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjAxLjIwNzEzNTc2MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDg4MzgyNDUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV9tZW1vcnkub1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT0xMDA9b2JqLSQoQ09ORklHX0RFVklDRV9NSUdSQVRJT04pICs9IG1pZ3JhdGVfZGV2aWNlLm9cXG5tbS9NYWtlZmlsZToxMDE6b2JqLSQoQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFKSArPSBodWdlX21lbW9yeS5vIGtodWdlcGFnZWQub1xcbm1tL01ha2VmaWxlLTEwMi1vYmotJChDT05GSUdfUEFHRV9DT1VOVEVSKSArPSBwYWdlX2NvdW50ZXIub1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyNDowMS4yNTU5ODI1MTdaIiwiU2VxIjoxMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI0OTUzMzExOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBDb25maWd1cmF0aW9uKipcblxuT2theSwgc28gdGhlIGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgZGVmaW5pdGVseSBhIHJlcXVpcmVtZW50IGhlcmUuIEJ1dCBJIGNhbid0IGp1c3Qgc3RvcCB0aGVyZS4gQXJlIHRoZXJlICpvdGhlciogY29uZmlndXJhdGlvbiBvcHRpb25zIEkgc2hvdWxkIGJlIGNvbnNpZGVyaW5nIHJlbGF0ZWQgdG8gdGhpcyBUSFAgZnVuY3Rpb25hbGl0eT8gSSByZW1lbWJlciBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGlzIHJlbGF0ZWQgdG8gaHVnZXBhZ2VzLCBzbyBJIHNob3VsZCBzZWUgaWYgdGhlcmUgYXJlIG90aGVyIGFzc29jaWF0ZWQgY29uZmlncy4gVGhpcyBhbHNvIHN1Z2dlc3RzIHdoYXQgZnVuY3Rpb25hbGl0eSBJIHNob3VsZCBiZSBpbnZlc3RpZ2F0aW5nLlxuXG5Gb2N1c2luZyBpbiBvbiBmdW5jdGlvbnMgbm93Li4uIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgbG9va3MgbGlrZSBhIGdvb2QgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gSXQncyBpbnRlcm5hbCwgd2hpY2ggbWVhbnMgaXQncyBsaWtlbHkgYSBjb3JlIGNvbXBvbmVudCBhbmQgcG9zc2libHkgYSBnb29kIHNwb3QgdG8gaW5zdHJ1bWVudCBvciBhbmFseXplLiBJIHNob3VsZCBzZWUgd2hpY2ggY2FsbHMgdGhpcyBmdW5jdGlvbiwgdG8gZ2FpbiBhIGJldHRlciB1bmRlcnN0YW5kaW5nIG9mIGl0cyByb2xlIGFuZCBob3cgaXQncyB1c2VkIHdpdGhpbiB0aGUgc3lzdGVtLiBMZXQncyBzZWUgd2hvJ3MgY2FsbGluZyBgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NDkwMSwiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjkzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjA1LjUwNTUxOTMzNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjAzMDYxODExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJ0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImZzL3Byb2MvdGFza19tbXUuYz0xNDU2PXN0YXRpYyBpbnQgc2hvd19zbWFwKHN0cnVjdCBzZXFfZmlsZSAqbSwgdm9pZCAqdilcXG4tLVxcbmZzL3Byb2MvdGFza19tbXUuYy0xNDczLVxcdHNlcV9wcmludGYobSwgXFxcIlRIUGVsaWdpYmxlOiAgICAlOHVcXFxcblxcXCIsXFxuZnMvcHJvYy90YXNrX21tdS5jOjE0NzQ6XFx0XFx0ICAgISF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCBUVkFfU01BUFMsXFxuZnMvcHJvYy90YXNrX21tdS5jLTE0NzUtXFx0XFx0XFx0XFx0XFx0ICAgICAgVEhQX09SREVSU19BTEwpKTtcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTk3PWVudW0gdHZhX3R5cGUge1xcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMTA0LSNkZWZpbmUgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXIodm1hLCB2bV9mbGFncywgdHlwZSwgb3JkZXIpIFxcXFxcXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDoxMDU6XFx0KCEhdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIEJJVChvcmRlcikpKVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTEwNi1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTI3NT1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC0yOTctXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6Mjk4OnVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMjk5LVxcdFxcdFxcdFxcdFxcdCB2bV9mbGFnc190IHZtX2ZsYWdzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzAzLS8qKlxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oOjMwNDogKiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMgLSBkZXRlcm1pbmUgaHVnZXBhZ2Ugb3JkZXJzIHRoYXQgYXJlIGFsbG93ZWQgZm9yIHZtYVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMwNS0gKiBAdm1hOiAgdGhlIHZtIGFyZWEgdG8gY2hlY2tcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTMxOD1zdGF0aWMgaW5saW5lXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6MzE5OnVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTMyMC1cXHRcXHRcXHRcXHQgICAgICAgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oLTM0MS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaDozNDI6XFx0cmV0dXJuIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1fZmxhZ3MsIHR5cGUsIG9yZGVycyk7XFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtMzQzLX1cXG4tLVxcbmluY2x1ZGUvbGludXgvaHVnZV9tbS5oPTU5OD1zdGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgdGhwX3ZtYV9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2h1Z2VfbW0uaC02MDMtXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmg6NjA0OnN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuaW5jbHVkZS9saW51eC9odWdlX21tLmgtNjA1LVxcdFxcdFxcdFxcdFxcdHZtX2ZsYWdzX3Qgdm1fZmxhZ3MsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTExND1zdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbi0tXFxubW0vaHVnZV9tZW1vcnkuYy0xMjAtXFxubW0vaHVnZV9tZW1vcnkuYzoxMjE6dW5zaWduZWQgbG9uZyBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVycyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG5tbS9odWdlX21lbW9yeS5jLTEyMi1cXHRcXHRcXHRcXHRcXHQgdm1fZmxhZ3NfdCB2bV9mbGFncyxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk1LVxcdFxcdCAqIEVuZm9yY2UgVEhQIGNvbGxhcHNlIHJlcXVpcmVtZW50cyBhcyBuZWNlc3NhcnkuIEFub255bW91cyB2bWFzXFxubW0vaHVnZV9tZW1vcnkuYzoxOTY6XFx0XFx0ICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuIFNwZWNpYWxcXG5tbS9odWdlX21lbW9yeS5jLTE5Ny1cXHRcXHQgKiBtYXBwaW5ncyBoYXZlIG5vIFRIUCBjb3N0cyBhbmQgYXJlIGV4ZW1wdC5cXG4tLVxcbm1tL2todWdlcGFnZWQuYz01NjY9c3RhdGljIHVuc2lnbmVkIGxvbmcgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxcbi0tXFxubW0va2h1Z2VwYWdlZC5jLTU3Ni1cXG5tbS9raHVnZXBhZ2VkLmM6NTc3OlxcdHJldHVybiB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bV9mbGFncywgdHZhX2ZsYWdzLCBvcmRlcnMpO1xcbm1tL2todWdlcGFnZWQuYy01NzgtfVxcbi0tXFxubW0va2h1Z2VwYWdlZC5jPTEwNDY9c3RhdGljIGVudW0gc2Nhbl9yZXN1bHQgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGUoc3RydWN0IG1tX3N0cnVjdCAqbW0sIHVuc2lnbmVkIGxvbmcgYWRkcmVzcyxcXG4tLVxcbm1tL2todWdlcGFnZWQuYy0xMDY5LVxcdFxcdHJldHVybiBTQ0FOX0FERFJFU1NfUkFOR0U7XFxubW0va2h1Z2VwYWdlZC5jOjEwNzA6XFx0aWYgKCF0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCB0eXBlLCBCSVQob3JkZXIpKSlcXG5tbS9raHVnZXBhZ2VkLmMtMTA3MS1cXHRcXHRyZXR1cm4gU0NBTl9WTUFfQ0hFQ0s7XFxuLS1cXG5tbS9raHVnZXBhZ2VkLmMtMTA3NS1cXHQgKlxcbm1tL2todWdlcGFnZWQuYzoxMDc2OlxcdCAqIHRocF92bWFfYWxsb3dhYmxlX29yZGVycyBtYXkgcmV0dXJuIHRydWUgZm9yIHF1YWxpZmllZCBmaWxlXFxubW0va2h1Z2VwYWdlZC5jLTEwNzctXFx0ICogdm1hcy5cXG4tLVxcbm1tL21lbW9yeS5jPTQ2NjE9c3RhdGljIHVuc2lnbmVkIGxvbmcgdGhwX3N3YXBpbl9zdWl0YWJsZV9vcmRlcnMoc3RydWN0IHZtX2ZhdWx0ICp2bWYpXFxuLS1cXG5tbS9tZW1vcnkuYy00NjkwLVxcdCAqL1xcbm1tL21lbW9yeS5jOjQ2OTE6XFx0b3JkZXJzID0gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHZtYSwgdm1hLVxcdTAwM2V2bV9mbGFncywgVFZBX1BBR0VGQVVMVCxcXG5tbS9tZW1vcnkuYy00NjkyLVxcdFxcdFxcdFxcdFxcdCAgQklUKFBNRF9PUkRFUikgLSAxKTtcXG4tLVxcbm1tL21lbW9yeS5jPTUxNjE9c3RhdGljIHN0cnVjdCBmb2xpbyAqYWxsb2NfYW5vbl9mb2xpbyhzdHJ1Y3Qgdm1fZmF1bHQgKnZtZilcXG4tLVxcbm1tL21lbW9yeS5jLTUxODMtXFx0ICovXFxubW0vbWVtb3J5LmM6NTE4NDpcXHRvcmRlcnMgPSB0aHBfdm1hX2FsbG93YWJsZV9vcmRlcnModm1hLCB2bWEtXFx1MDAzZXZtX2ZsYWdzLCBUVkFfUEFHRUZBVUxULFxcbm1tL21lbW9yeS5jLTUxODUtXFx0XFx0XFx0XFx0XFx0ICBCSVQoUE1EX09SREVSKSAtIDEpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyNDowNy41MzYxNDM1ODRaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQwNjkzNDYwNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipDaGVja2luZyB0aGUgQWNjZXNzaWJpbGl0eSBvZiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIGZ1bmN0aW9uLiBUaGUgY29kZSBzdWdnZXN0cyBpdCdzICpub3QqIGEgc3RhdGljIGZ1bmN0aW9uLCB3aGljaCBpbW1lZGlhdGVseSBtYWtlcyBtZSB0aGluayBhYm91dCBpdHMgdmlzaWJpbGl0eS4gU2luY2UgaXQncyBub3QgZGVjbGFyZWQgc3RhdGljLCBpdCdzIGVpdGhlciBleHBvcnRlZCBvciBhdCBsZWFzdCBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgY29tcGlsYXRpb24gdW5pdC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0LiBJJ2xsIHF1aWNrbHkgY2hlY2sgaWYgaXQncyBleHBsaWNpdGx5IGV4cG9ydGVkLCBiZWNhdXNlIG5vbi1zdGF0aWMgZnVuY3Rpb25zIGFyZSBhdXRvbWF0aWNhbGx5IGFjY2Vzc2libGUgYWNyb3NzIHRyYW5zbGF0aW9uIHVuaXRzIGlmIGl0J3MgdmlzaWJsZS4gVGhhdCdzIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpbiB1bmRlcnN0YW5kaW5nIGhvdyB0aGlzIHBhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN5c3RlbSB3b3Jrcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjcyNywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjEwLjk0MzA4MjEyOVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQyMTkzNDQ2OCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiRVhQT1JUX1NZTUJPTC4qX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyNDoxMy4zNjUwMjU2MThaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mzc5MzM2OTYyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgRnVuY3Rpb24qKlxuXG5Pa2F5LCBzbyBJJ20gZGlnZ2luZyBpbnRvIHRoaXMgYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCBmdW5jdGlvbi4gSXQncyBub3QgZXhwb3J0ZWQsIHNvIGl0J3MgaW50ZXJuYWwgdG8gdGhpcyBtb2R1bGUsIGJ1dCBpdCdzIGNsZWFybHkgbm90IGEgc2ltcGxlIHN0YXRpYyB2YWx1ZS4gVGhhdCBtZWFucyBzb21ldGhpbmcgY2FsbHMgaXQsIGFuZCBpdCdzIGRvaW5nIHNvbWV0aGluZyBkeW5hbWljLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IGR5bmFtaWMgYXNwZWN0LlxuXG5JIHNlZSBzZXZlcmFsIG90aGVyIGZ1bmN0aW9ucyBjYWxsIGl0OiBgY29sbGFwc2VfcG9zc2libGVfb3JkZXJzYCwgYGh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlYCwgYHRocF9zd2FwaW5fc3VpdGFibGVfb3JkZXJzYCwgYGFsbG9jX2Fub25fZm9saW9gLCBhbmQgYHNob3dfc21hcGAuIFRoYXQgZ2l2ZXMgbWUgYSBmZXcgZGVjZW50IGVudHJ5IHBvaW50cyB0byB1bmRlcnN0YW5kIGhvdyB0aGlzIGlzIHVzZWQgYW5kIHdoYXQgaW5wdXRzIGluZmx1ZW5jZSBpdHMgYmVoYXZpb3IuXG5cbmBhbGxvY19hbm9uX2ZvbGlvYCBzdGFuZHMgb3V0IGFzIGEgcHJvbWlzaW5nIGZvY3VzIHN5bWJvbC4gSSd2ZSB3b3JrZWQgd2l0aCB0aGF0IGFyZWEgYmVmb3JlLiBJdCdzIG9mdGVuIGludm9sdmVkIGluIGluaXRpYWwgbWVtb3J5IGFsbG9jYXRpb24sIHNvIHRoaXMgZnVuY3Rpb24gaXMgbGlrZWx5IGRldGVybWluaW5nIHRoZSBzaXplcyBpdCdzIHdpbGxpbmcgdG8gd29yayB3aXRoLiBgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGVgIGxvb2tzIGxpa2UgYSB1c2VmdWwgcG9pbnQgdG9vLCBhcyBpdCBoaW50cyBhdCBvbmdvaW5nIHZhbGlkYXRpb24gb2YgaHVnZXBhZ2Ugc2V0dXBzLiBPZiBjb3Vyc2UsIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgaXRzZWxmIGlzIGFsc28gYW4gaW50ZXJlc3RpbmcgZW50cnkgcG9pbnQgdG8gc3RhcnQgZnJvbS5cblxuTm93LCBsZXQgbWUgY2hlY2sgdGhlIGB2bWFfaXNfc3BlY2lhbF9odWdlYCBmdW5jdGlvbi4gSSBzdXNwZWN0IHRoYXQgbWlnaHQgYmUgcmVsYXRlZCBhbmQgY291bGQgcHJvdmlkZSBpbnNpZ2h0IGludG8gd2hhdCB0cmlnZ2VycyB0aGUgYWxsb3dhYmxlIG9yZGVycy5cblxuXG4iLCJJbnB1dFRva2VucyI6Njk3NSwiT3V0cHV0VG9rZW5zIjoyOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyNDoxNy4xNTgzOTgxNTNaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE3ODA0MjQxNTUsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwidm1hX2lzX3NwZWNpYWxfaHVnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vaHVnZV9tZW1vcnkuYz05NT1zdGF0aWMgaW5saW5lIGJvb2wgZmlsZV90aHBfZW5hYmxlZChzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSlcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTEzLS8qIElmIHJldHVybnMgdHJ1ZSwgd2UgYXJlIHVuYWJsZSB0byBhY2Nlc3MgdGhlIFZNQSdzIGZvbGlvcy4gKi9cXG5tbS9odWdlX21lbW9yeS5jOjExNDpzdGF0aWMgYm9vbCB2bWFfaXNfc3BlY2lhbF9odWdlKGNvbnN0IHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTE1LXtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmM9MTIxPXVuc2lnbmVkIGxvbmcgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnMoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTEzMy1cXHRcXHRzdXBwb3J0ZWRfb3JkZXJzID0gVEhQX09SREVSU19BTExfQU5PTjtcXG5tbS9odWdlX21lbW9yeS5jOjEzNDpcXHRlbHNlIGlmICh2bWFfaXNfZGF4KHZtYSkgfHwgdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTM1LVxcdFxcdHN1cHBvcnRlZF9vcmRlcnMgPSBUSFBfT1JERVJTX0FMTF9TUEVDSUFMX0RBWDtcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMTk4LVxcdFxcdCAqL1xcbm1tL2h1Z2VfbWVtb3J5LmM6MTk5OlxcdFxcdGlmICghZm9yY2VkX2NvbGxhcHNlIFxcdTAwMjZcXHUwMDI2ICF2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkgXFx1MDAyNlxcdTAwMjZcXG5tbS9odWdlX21lbW9yeS5jLTIwMC1cXHRcXHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFxcdTAwMjYgVk1fSFVHRVBBR0UpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTI5NDA9aW50IHphcF9odWdlX3B1ZChzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLCBzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL2h1Z2VfbWVtb3J5LmMtMjk1Mi1cXHR0bGJfcmVtb3ZlX3B1ZF90bGJfZW50cnkodGxiLCBwdWQsIGFkZHIpO1xcbm1tL2h1Z2VfbWVtb3J5LmM6Mjk1MzpcXHRpZiAodm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpKSB7XFxubW0vaHVnZV9tZW1vcnkuYy0yOTU0LVxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuLS1cXG5tbS9odWdlX21lbW9yeS5jPTMwNzQ9c3RhdGljIHZvaWQgX19zcGxpdF9odWdlX3BtZF9sb2NrZWQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsIHBtZF90ICpwbWQsXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTMxMDMtXFx0XFx0XFx0emFwX2RlcG9zaXRlZF90YWJsZShtbSwgcG1kKTtcXG5tbS9odWdlX21lbW9yeS5jOjMxMDQ6XFx0XFx0aWYgKHZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKSlcXG5tbS9odWdlX21lbW9yeS5jLTMxMDUtXFx0XFx0XFx0cmV0dXJuO1xcbi0tXFxubW0vaHVnZV9tZW1vcnkuYz00NjM2PXN0YXRpYyBpbmxpbmUgYm9vbCB2bWFfbm90X3N1aXRhYmxlX2Zvcl90aHBfc3BsaXQoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEpXFxuLS1cXG5tbS9odWdlX21lbW9yeS5jLTQ2MzktXFx0XFx0cmV0dXJuIHRydWU7XFxubW0vaHVnZV9tZW1vcnkuYzo0NjQwOlxcdGlmICh2bWFfaXNfc3BlY2lhbF9odWdlKHZtYSkpXFxubW0vaHVnZV9tZW1vcnkuYy00NjQxLVxcdFxcdHJldHVybiB0cnVlO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yMVQwNzoyNDoxOC45Mzg4MjgxNDhaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Njg4MzQ5NjE5NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBbmFseXNpcyBvZiB0aGUgVEhQIENoYW5nZSoqXG5cbk9rYXksIHNvIHRoZSBjb3JlIG9mIHRoaXMgY2hhbmdlIGxpZXMgd2l0aGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AuIE15IGF0dGVudGlvbiBpbW1lZGlhdGVseSBnb2VzIHRoZXJlLiBXZSdyZSB0YWxraW5nIGFib3V0IFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMsIHNvIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMsIG9mIGNvdXJzZSwgdGhlIHJlbGV2YW50IGNvbmZpZy4gTGV0J3Mgc2VlIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgcmVsYXRlZCBjb25maWdzLCBidXQgbXkgaW5pdGlhbCBhc3Nlc3NtZW50IHN1Z2dlc3RzIHRoaXMgaXMgdGhlIHByaW1hcnkgb25lLlxuXG5JJ20gbWFraW5nIGEgbWVudGFsIG5vdGUgb2Yga2V5IGZ1bmN0aW9ucyBmb3IgbXkgYW5hbHlzaXM6IGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AsIGBhbGxvY19hbm9uX2ZvbGlvYCwgYW5kIGBodWdlcGFnZV92bWFfcmV2YWxpZGF0ZWAuIFRoZXNlIHNlZW0gbGlrZSB0aGUgcHJpbWFyeSBwbGF5ZXJzIGluIHRoaXMgVEhQIGxvZ2ljIG1vZGlmaWNhdGlvbi4gVGhpcyBgdm1hX2lzX3NwZWNpYWxfaHVnZWAgY2hlY2ssIHV0aWxpemluZyBgdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9QRk5NQVBgIGFuZCBgdm1hLVx1MDAzZXZtX2ZsYWdzIFx1MDAyNiBWTV9NSVhFRE1BUGAsIGl0IGlzIHN0YW5kYXJkIE1NIHN0dWZmLiBOb3RoaW5nIHBhcnRpY3VsYXJseSB1bnVzdWFsLCBqdXN0IHRoZSB0eXBpY2FsIGZsYWdzIHdlIGV4cGVjdCB0byBzZWUgaW4gYSBWTUEgc3RydWN0dXJlLlxuXG5UaGUgZ2lzdCBvZiBpdCBpcyB0aGlzOiBhIHBhdGNoIHRoYXQgY2hhbmdlcyB0aGUgVEhQIGJlaGF2aW9yLCBhbmQgc3BlY2lmaWNhbGx5IGluIGhvdyBzcGVjaWFsIGh1Z2UgVk1BcyBhcmUgaGFuZGxlZC4gSXQncyBleGVtcHRpbmcgY2VydGFpbiBWTUFzIGZyb20gdGhlIHVzdWFsIFRIUCBjb3N0IGNvbnNpZGVyYXRpb25zLCBhbGxvd2luZyBmb3IgbW9yZSBhZ2dyZXNzaXZlIGh1Z2UgcGFnZSBhbGxvY2F0aW9uIG9yIGNvbGxhcHNpbmcgdW5kZXIgY2VydGFpbiBjb25kaXRpb25zLiBUaGUgY2hhbmdlIGlzIGRlZmluaXRlbHkgZnVuY3Rpb25hbCwgZGlyZWN0bHkgaW1wYWN0aW5nIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0uIFRoaXMgbW9kaWZpY2F0aW9uIGFmZmVjdHMgaHVnZSBwYWdlIGFsbG9jYXRpb24sIHdoaWNoIGlzIHNvbWV0aGluZyB1c2VycyBjYW4gaW50ZXJhY3Qgd2l0aCB0aHJvdWdoIGBtbWFwYCBhbmQgYG1hZHZpc2VgLlxuXG5TbywgaGVyZSdzIG15IHF1aWNrIGV2YWx1YXRpb24sIGluIGEgZm9ybWF0IHRoYXQncyB1c2VmdWw6XG5cbiogICAqKldvcnRoRnV6emluZzoqKiBUcnVlIC0gdGhpcyBpcyBhIGNvcmUgTU0gY2hhbmdlLCB3aXRoIHVzZXItc3BhY2UgcmVhY2gsIHZlcnkgZnV6emFibGUuXG4qICAgKipGb2N1c1N5bWJvbHM6KiogYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYCwgYGFsbG9jX2Fub25fZm9saW9gLCBgaHVnZXBhZ2Vfdm1hX3JldmFsaWRhdGVgIC0gdGhlc2UgYXJlIG15IGluaXRpYWwgdGFyZ2V0cy5cbiogICAqKkVuYWJsZUNvbmZpZ3M6KiogYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCAtIHRoaXMgaXMgb2J2aW91c2x5IGEgY3JpdGljYWwgc3RhcnRpbmcgcG9pbnQuXG4qICAgKipSZWFzb25pbmc6KiogVGhlIG1vZGlmaWNhdGlvbiBleGVtcHRzIHNwZWNpYWwgaHVnZSBWTUFzIGZyb20gdGhlIG5vcm1hbCBUSFAgb3JkZXIgY2hlY2tzIHdpdGhpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgLiBUaGlzIGZ1bmN0aW9uYWwgY2hhbmdlIGluIG1lbW9yeSBtYW5hZ2VtZW50IGltcGFjdHMgaHVnZSBwYWdlIGFsbG9jYXRpb24gYW5kIGNvbGxhcHNlLCBhbmQgaXMgdXNlci1yZWFjaGFibGUgdGhyb3VnaCBgbW1hcGAgYW5kIGBtYWR2aXNlYC5cblxuXG4iLCJJbnB1dFRva2VucyI6ODE1MywiT3V0cHV0VG9rZW5zIjoxNDgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNjcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MjQ6MjUuODIyMzI2NTIyWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTMzNjA0MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwiX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNcIixcbiAgICBcImFsbG9jX2Fub25fZm9saW9cIixcbiAgICBcImh1Z2VwYWdlX3ZtYV9yZXZhbGlkYXRlXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvcmUgVHJhbnNwYXJlbnQgSHVnZSBQYWdlIChUSFApIGxvZ2ljIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBWTUFzIGZyb20gVEhQIGNvc3RzIHdoZW4gY2hlY2tpbmcgYWxsb3dhYmxlIG9yZGVycy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHRoZSBtZW1vcnkgbWFuYWdlbWVudCBzdWJzeXN0ZW0gdGhhdCBhZmZlY3RzIGhvdyBodWdlIHBhZ2VzIGFyZSBhbGxvY2F0ZWQgYW5kIGNvbGxhcHNlZCwgd2hpY2ggaXMgcmVhY2hhYmxlIGZyb20gdXNlciBzcGFjZSB2aWEgbW1hcCBhbmQgbWFkdmlzZS5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcIl9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzXCIsXG4gICAgXCJhbGxvY19hbm9uX2ZvbGlvXCIsXG4gICAgXCJodWdlcGFnZV92bWFfcmV2YWxpZGF0ZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBjb3JlIFRyYW5zcGFyZW50IEh1Z2UgUGFnZSAoVEhQKSBsb2dpYyBpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHRvIGV4ZW1wdCBzcGVjaWFsIGh1Z2UgVk1BcyBmcm9tIFRIUCBjb3N0cyB3aGVuIGNoZWNraW5nIGFsbG93YWJsZSBvcmRlcnMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgc3Vic3lzdGVtIHRoYXQgYWZmZWN0cyBob3cgaHVnZSBwYWdlcyBhcmUgYWxsb2NhdGVkIGFuZCBjb2xsYXBzZWQsIHdoaWNoIGlzIHJlYWNoYWJsZSBmcm9tIHVzZXIgc3BhY2UgdmlhIG1tYXAgYW5kIG1hZHZpc2UuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjI1LjkxNTY5NzgyMloiLCJTZXEiOjE5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODY1OTUwNTM0MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjI1LjkxNjM4MTc4MloiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo4NjU4ODE1OTMwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBtYXBwaW5ncyBmcm9tIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBwb2xpY2llcyBhbmQgVk1BIGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGludmFsaWQgcGFnZSBhY2Nlc3NlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5XG5lcnJvciBkZXRlY3RvcnMgKEtBU0FOIGFuZCBLTVNBTikuIFlvdXIgam9iIGlzIHRvIHJldmlldyB0aGUgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZFxuZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKVxuZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuXG5cbkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOlxuLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlXG4gIGEgY29tcHJlaGVuc2l2ZSBzdWl0ZSBvZiBkZWJ1Z2dpbmcgdG9vbHMgYW5kIHNhbml0aXplcnMsIGluY2x1ZGluZyBLQVNBTlxuICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQXG4gIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuXG4tIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpIGRldGVjdHMgcmVhZHMgb2YgVU5JTklUSUFMSVpFRCBtZW1vcnkgKHN0YWNrLCBoZWFwLFxuICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuXG5cblJ1bGU6IFRIRVJFIElTIE5PIFNFTlNFIElOIFJVTk5JTkcgQSBLTVNBTiBTRVNTSU9OIElGIEEgQlVHIENBTiBCRSBDQVVHSFQgQlkgS0FTQU4sXG5MT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLlxuQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWVxuc2V0IE5lZWRzS01TQU49dHJ1ZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGludHJvZHVjZSBvciBleHBvc2UgVU5JTklUSUFMSVpFRCBNRU1PUlkgcmlza3NcbnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uXG5cbkxvb2sgaG9saXN0aWNhbGx5IGF0IHRoZSBwYXRjaCBzZXJpZXMgYW5kIHN1cnJvdW5kaW5nIGNvZGUuIEV2ZW4gaWYgbm8gZGlyZWN0XG51bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZixcbmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5c1xudGhhdCBjaGFuZ2UgaG93IHRoZSByZXN0IG9mIHRoZSBjb2RlIG9wZXJhdGVzIG9uIGV4aXN0aW5nIGJ1ZmZlcnMgKGUuZy4gYWxsb3dpbmdcbnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbFxuZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLFxuY2FsbGVkIGZ1bmN0aW9ucywgYW5kIGNhbGxlcnMuXG5cblNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczpcbjEuIEtlcm5lbCBzdHJ1Y3R1cmVzIHNlbnQgdG8gdXNlciBzcGFjZSAodmlhIGNvcHlfdG9fdXNlciwgcHV0X3VzZXIsIG5ldGxpbmsgc2tiXG4gICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkc1xuICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC5cbjIuIENvbmRpdGlvbmFsIGxvZ2ljIG9yIGJyYW5jaGluZyB0aGF0IGRlcGVuZHMgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXNcbiAgIG9yIHN0cnVjdCBmaWVsZHMuXG4zLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzXG4gICBjb3VsZCBiZSByZWFkIGxhdGVyIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLlxuNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3NcbiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy5cblxuU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6XG4tIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyXG4gIGRlcmVmZXJlbmNlcywgbG9ja2luZyBkZWFkbG9ja3MsIG9yIHVzZS1hZnRlci1mcmVlIGJ1Z3MgKHRoZXNlIGFyZSBhbHJlYWR5IGNhdWdodFxuICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuXG4tIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkXG4gIG9yIGluaXRpYWxpemVkIChlLmcuIHVzaW5nID0gezB9LCBtZW1zZXQsIGt6YWxsb2MpIGJlZm9yZSBiZWluZyByZWFkIG9yIGNvcGllZC5cbi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLlxuXG5Vc2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlIGlmIG5lY2Vzc2FyeSwgdGhlbiBwcm92aWRlXG5kZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgMGI1YWQ3NWEwOGJjNDQ2M2IxNGUwYmY3NjRmNGMxMmU3ZjE4ZThkNlxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDIxIDA3OjIzOjM5IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vaHVnZV9tZW1vcnkuYyBiL21tL2h1Z2VfbWVtb3J5LmNcbmluZGV4IDVkOTRmYTRjNzRmZGIuLmNlY2Y2YmQ4ZmYwYjEgMTAwNjQ0XG4tLS0gYS9tbS9odWdlX21lbW9yeS5jXG4rKysgYi9tbS9odWdlX21lbW9yeS5jXG5AQCAtMTkzLDkgKzE5MywxMCBAQCB1bnNpZ25lZCBsb25nIF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLFxuIFx0aWYgKCF2bWFfaXNfYW5vbnltb3VzKHZtYSkpIHtcbiBcdFx0LypcbiBcdFx0ICogRW5mb3JjZSBUSFAgY29sbGFwc2UgcmVxdWlyZW1lbnRzIGFzIG5lY2Vzc2FyeS4gQW5vbnltb3VzIHZtYXNcbi1cdFx0ICogd2VyZSBhbHJlYWR5IGhhbmRsZWQgaW4gdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzKCkuXG4rXHRcdCAqIHdlcmUgYWxyZWFkeSBoYW5kbGVkIGluIHRocF92bWFfYWxsb3dhYmxlX29yZGVycygpLiBTcGVjaWFsXG4rXHRcdCAqIG1hcHBpbmdzIGhhdmUgbm8gVEhQIGNvc3RzIGFuZCBhcmUgZXhlbXB0LlxuIFx0XHQgKi9cbi1cdFx0aWYgKCFmb3JjZWRfY29sbGFwc2UgXHUwMDI2XHUwMDI2XG4rXHRcdGlmICghZm9yY2VkX2NvbGxhcHNlIFx1MDAyNlx1MDAyNiAhdm1hX2lzX3NwZWNpYWxfaHVnZSh2bWEpIFx1MDAyNlx1MDAyNlxuIFx0XHQgICAgKCFodWdlcGFnZV9nbG9iYWxfZW5hYmxlZCgpIHx8ICghKHZtX2ZsYWdzIFx1MDAyNiBWTV9IVUdFUEFHRSkgXHUwMDI2XHUwMDI2XG4gXHRcdFx0XHRcdFx0ICAgICFodWdlcGFnZV9nbG9iYWxfYWx3YXlzKCkpKSlcbiBcdFx0XHRyZXR1cm4gMDtcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTIxVDA3OjI0OjI1LjkxNjM4MjgxMloiLCJTZXEiOjIxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4NjU4NzkwMTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVEhQIFZNQSBBbGxvd2FibGUgT3JkZXJzIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgZG93biB0aGlzIHBhdGNoIHRvIGBtbS9odWdlX21lbW9yeS5jYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIGZvY3VzZWQgb24gdW5kZXJzdGFuZGluZyB0aGUgbG9naWMgYWx0ZXJhdGlvbiB3aXRoaW4gYF9fdGhwX3ZtYV9hbGxvd2FibGVfb3JkZXJzYC4gVGhlIGNvcmUgY2hhbmdlIGlzIHRoZSBhZGRpdGlvbiBvZiBgIXZtYV9pc19zcGVjaWFsX2h1Z2Uodm1hKWAgdG8gdGhlIGNvbmRpdGlvbmFsIGNoZWNrLiBFc3NlbnRpYWxseSwgaXQncyBhYm91dCB3aGV0aGVyIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgKFRIUCkgYXJlIHBlcm1pdHRlZCB1bmRlciBjZXJ0YWluIGNvbmRpdGlvbnMgd2hlbiBtYW5hZ2luZyBWaXJ0dWFsIE1lbW9yeSBBcmVhcyAoVk1BcykuXG5cblRoZSBvcmlnaW5hbCBjaGVjaywgYXMgSSB1bmRlcnN0YW5kIGl0LCByZXN0cmljdGVkIFRIUCB1c2UgaWYgYGZvcmNlZF9jb2xsYXBzZWAgd2FzIGZhbHNlLCBhbmQgZWl0aGVyIGdsb2JhbCBodWdlIHBhZ2VzIHdlcmUgZGlzYWJsZWQgb3IgdGhlIFZNQSBkaWRuJ3QgZXhwbGljaXRseSByZXF1ZXN0IGh1Z2UgcGFnZXMuIE5vdywgdGhpcyBgdm1hX2lzX3NwZWNpYWxfaHVnZWAgY29uZGl0aW9uIGlzIGluc2VydGVkLiBUaGlzIG1vZGlmaWNhdGlvbiBhbGxvd3MgVEhQIHRvIGJlIGNvbnNpZGVyZWQgZm9yIFwic3BlY2lhbFwiIGh1Z2UgbWFwcGluZ3MgZXZlbiB3aGVuIHRoZSBicm9hZGVyIGNvbmRpdGlvbnMgYXJlIG5vdCBtZXQsIHNvIGxvbmcgYXMgYGZvcmNlZF9jb2xsYXBzZWAgaXMgYWxzbyBmYWxzZS5cblxuTXkgaW1tZWRpYXRlIGNvbmNlcm4sIGFzIGFsd2F5cywgaXMgd2hldGhlciB0aGlzIGludHJvZHVjZXMgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJpc2tzLiBCdXQgYWZ0ZXIgY2FyZWZ1bGx5IHJldmlld2luZyB0aGUgY29kZSBhbmQgaXRzIGNvbnRleHQsIEkgZG9uJ3Qgc2VlIGFueSBkaXJlY3QgaW50cm9kdWN0aW9uIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlLiBUaGlzIHBhdGNoIHByaW1hcmlseSBhbHRlcnMgY29udHJvbCBmbG93IHdpdGhpbiB0aGUgVEhQIGRlY2lzaW9uIHByb2Nlc3MsIGFmZmVjdGluZyBwYWdlIGFsbG9jYXRpb24gYW5kIFZNQSBmbGFnIGNoZWNrcy4gVGhlcmUncyBubyBjcmVhdGlvbiBvZiBuZXcgbWVtb3J5IHJlZ2lvbnMgb3IgZGlyZWN0IG1hbmlwdWxhdGlvbiBvZiB1bmluaXRpYWxpemVkIGRhdGEgc3RydWN0dXJlcy4gQW55IHBvdGVudGlhbCBpc3N1ZXMgd291bGQgbGlrZWx5IG1hbmlmZXN0IGFzIHBhZ2UgZmF1bHRzLCBtZW1vcnkgY29ycnVwdGlvbiwgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIG9yIHVzZS1hZnRlci1mcmVlIHNjZW5hcmlvcy4gVGhlc2UsIEknbSBjb25maWRlbnQsIGFyZSBhbHJlYWR5IGNvdmVyZWQgYnkgS0FTQU4gb3IgdGhlIHN0YW5kYXJkIGtlcm5lbCBtZW1vcnkgc2FmZXR5IGNoZWNrcy4gS01TQU4gaXNuJ3QgbmVlZGVkIGhlcmUuXG5cbkxvb2tpbmcgY2xvc2VyLCBJJ20gc2ltcGx5IHNlZWluZyBhIG1vZGlmaWNhdGlvbiBvZiBhIGNvbmRpdGlvbi4gSSdtIGdvaW5nIHRvIGNvbmZpcm0gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgcmVsZXZhbnQgY29kZS4gVGhlIGNoYW5nZSBzaW1wbHkgYWx0ZXJzIHRoZSBjb250cm9sIGZsb3cgd2l0aGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gYWxsb3cgVEhQIHdpdGggXCJzcGVjaWFsXCIgaHVnZSBtYXBwaW5ncy5cblxuU28sIGluIGVzc2VuY2UsIHRoaXMgaXMgYSBtb2RpZmljYXRpb24gdG8gdGhlIFRIUCBwb2xpY3kgZGVjaXNpb24tbWFraW5nIHByb2Nlc3MuIFRoZSBjaGFuZ2Ugc29sZWx5IGFmZmVjdHMgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQsIHdoaWNoIEkgY2FuIHJlYWRpbHkgc2VlLiBObyBhbGxvY2F0aW9ucyBhcmUgaW50cm9kdWNlZCwgYW5kIG5vIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIGFyZSB0YWtpbmcgcGxhY2UuIFRoaXMgaXMgbm90IGEgS01TQU4gaXNzdWUsIHNvIEknbGwgc2V0IE5lZWRzS01TQU4gdG8gZmFsc2UuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNjIsIk91dHB1dFRva2VucyI6MTU0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDM1LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjFUMDc6MjQ6MzQuNTc1MTc2NzQyWiIsIlNlcSI6MjIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkxODAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgY29uZGl0aW9uIGluIGBfX3RocF92bWFfYWxsb3dhYmxlX29yZGVyc2AgdG8gZXhlbXB0IHNwZWNpYWwgaHVnZSBtYXBwaW5ncyBmcm9tIFRIUCBjb2xsYXBzZSByZXF1aXJlbWVudHMuIFRoaXMgaXMgYSBsb2dpYyBjaGFuZ2UgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBwb2xpY2llcyBhbmQgVk1BIGZsYWdzLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IG5ldyBkYXRhIHN0cnVjdHVyZXMsIGFsbG9jYXRpb25zLCBvciB1c2VyLXNwYWNlIGNvcGllcyB0aGF0IGNvdWxkIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gQW55IHBvdGVudGlhbCBidWdzIGludHJvZHVjZWQgYnkgdGhpcyBjaGFuZ2UgKGUuZy4sIGludmFsaWQgcGFnZSBhY2Nlc3NlcywgbWVtb3J5IGNvcnJ1cHRpb24sIG9yIHVzZS1hZnRlci1mcmVlKSB3b3VsZCBiZSBlZmZlY3RpdmVseSBjYXVnaHQgYnkgS0FTQU4gYW5kIHN0YW5kYXJkIGtlcm5lbCBkZWJ1Z2dpbmcgdG9vbHMuIFRoZXJlIGlzIG5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mby1sZWFrcyB0aGF0IHdvdWxkIHJlcXVpcmUgS01TQU4uXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGNvbmRpdGlvbiBpbiBgX190aHBfdm1hX2FsbG93YWJsZV9vcmRlcnNgIHRvIGV4ZW1wdCBzcGVjaWFsIGh1Z2UgbWFwcGluZ3MgZnJvbSBUSFAgY29sbGFwc2UgcmVxdWlyZW1lbnRzLiBUaGlzIGlzIGEgbG9naWMgY2hhbmdlIHJlbGF0ZWQgdG8gbWVtb3J5IG1hbmFnZW1lbnQgcG9saWNpZXMgYW5kIFZNQSBmbGFncy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIGFueSBuZXcgZGF0YSBzdHJ1Y3R1cmVzLCBhbGxvY2F0aW9ucywgb3IgdXNlci1zcGFjZSBjb3BpZXMgdGhhdCBjb3VsZCBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnkuIEFueSBwb3RlbnRpYWwgYnVncyBpbnRyb2R1Y2VkIGJ5IHRoaXMgY2hhbmdlIChlLmcuLCBpbnZhbGlkIHBhZ2UgYWNjZXNzZXMsIG1lbW9yeSBjb3JydXB0aW9uLCBvciB1c2UtYWZ0ZXItZnJlZSkgd291bGQgYmUgZWZmZWN0aXZlbHkgY2F1Z2h0IGJ5IEtBU0FOIGFuZCBzdGFuZGFyZCBrZXJuZWwgZGVidWdnaW5nIHRvb2xzLiBUaGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHJlYWRzIG9yIGluZm8tbGVha3MgdGhhdCB3b3VsZCByZXF1aXJlIEtNU0FOLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },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-workflow6n7j9[1] Phase: Succeeded StartedAt: 2026-08-21 07:24:46 +0000 UTC FinishedAt: 2026-08-21 07:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-21 07:24:46 +0000 UTC FinishedAt: 2026-08-21 07:24:46 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2] Phase: Succeeded StartedAt: 2026-08-21 07:24:46 +0000 UTC FinishedAt: 2026-08-21 11:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:24:46 +0000 UTC FinishedAt: 2026-08-21 11:07:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:24:46 +0000 UTC FinishedAt: 2026-08-21 07:24:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:24:46 +0000 UTC FinishedAt: 2026-08-21 07:24:50 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflow6n7j9/series-workflow6n7j9-convert-artifact-4045202472/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:24:56 +0000 UTC FinishedAt: 2026-08-21 07:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:24:56 +0000 UTC FinishedAt: 2026-08-21 07:43:11 +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:*07a42da0-c191-4e18-99ad-a5ee6f8673a1,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-workflow6n7j9/series-workflow6n7j9-convert-artifact-4045202472/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": "ff89bb6a-0cee-42f1-8aef-bafedb015a25", "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-workflow6n7j9/series-workflow6n7j9-build-action-1576884894/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:24:56 +0000 UTC FinishedAt: 2026-08-21 07:43:01 +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:*07a42da0-c191-4e18-99ad-a5ee6f8673a1,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-workflow6n7j9/series-workflow6n7j9-convert-artifact-4045202472/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": "ff89bb6a-0cee-42f1-8aef-bafedb015a25", "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-workflow6n7j9/series-workflow6n7j9-build-action-1576884894/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:43:11 +0000 UTC FinishedAt: 2026-08-21 07:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:43:11 +0000 UTC FinishedAt: 2026-08-21 07:43:11 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:43:11 +0000 UTC FinishedAt: 2026-08-21 07:43:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:43:11 +0000 UTC FinishedAt: 2026-08-21 07:43:17 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-workflow6n7j9/series-workflow6n7j9-convert-artifact-190102543/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:43:21 +0000 UTC FinishedAt: 2026-08-21 07:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:43:21 +0000 UTC FinishedAt: 2026-08-21 07:45:03 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ff89bb6a-0cee-42f1-8aef-bafedb015a25,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-workflow6n7j9/series-workflow6n7j9-build-action-1576884894/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-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:45:13 +0000 UTC FinishedAt: 2026-08-21 07:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:45:13 +0000 UTC FinishedAt: 2026-08-21 07:45:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:45:13 +0000 UTC FinishedAt: 2026-08-21 08:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:45:13 +0000 UTC FinishedAt: 2026-08-21 08:04:01 +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:*07a42da0-c191-4e18-99ad-a5ee6f8673a1,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-workflow6n7j9/series-workflow6n7j9-convert-artifact-190102543/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": "ca8fad3a-fd45-44b7-a3af-ddbdef8e7356", "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-workflow6n7j9/series-workflow6n7j9-build-action-2672663843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 07:45:13 +0000 UTC FinishedAt: 2026-08-21 08:03:51 +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:*07a42da0-c191-4e18-99ad-a5ee6f8673a1,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-workflow6n7j9/series-workflow6n7j9-convert-artifact-190102543/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": "ca8fad3a-fd45-44b7-a3af-ddbdef8e7356", "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-workflow6n7j9/series-workflow6n7j9-build-action-2672663843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:04:01 +0000 UTC FinishedAt: 2026-08-21 08:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:04:01 +0000 UTC FinishedAt: 2026-08-21 08:04:01 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:04:01 +0000 UTC FinishedAt: 2026-08-21 08:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:04:01 +0000 UTC FinishedAt: 2026-08-21 08:05:52 +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:*ca8fad3a-fd45-44b7-a3af-ddbdef8e7356,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-workflow6n7j9/series-workflow6n7j9-build-action-2672663843/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-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:06:02 +0000 UTC FinishedAt: 2026-08-21 11:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:06:02 +0000 UTC FinishedAt: 2026-08-21 11:07:44 +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":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"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:*ff89bb6a-0cee-42f1-8aef-bafedb015a25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ca8fad3a-fd45-44b7-a3af-ddbdef8e7356,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-workflow6n7j9/series-workflow6n7j9-build-action-1576884894/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-workflow6n7j9/series-workflow6n7j9-build-action-2672663843/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:06:02 +0000 UTC FinishedAt: 2026-08-21 08:06:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:06:02 +0000 UTC FinishedAt: 2026-08-21 08:06:08 +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":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"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-workflow6n7j9/series-workflow6n7j9-convert-artifact-4076316616/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:06:02 +0000 UTC FinishedAt: 2026-08-21 08:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:06:02 +0000 UTC FinishedAt: 2026-08-21 08:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:06:02 +0000 UTC FinishedAt: 2026-08-21 08:06:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:06:12 +0000 UTC FinishedAt: 2026-08-21 11:07:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflow6n7j9[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["__thp_vma_allowable_orders","alloc_anon_folio","hugepage_vma_revalidate"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"689c1f1f669abdff41a91aa13d6cb6e77759f0ba","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE"],"series_id":"7bbfc76b-d0a2-4b8c-a977-7ef8afba72be","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-08-21 08:06:12 +0000 UTC FinishedAt: 2026-08-21 11:07:34 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*ff89bb6a-0cee-42f1-8aef-bafedb015a25,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*ca8fad3a-fd45-44b7-a3af-ddbdef8e7356,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-workflow6n7j9/series-workflow6n7j9-build-action-1576884894/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-workflow6n7j9/series-workflow6n7j9-build-action-2672663843/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-workflow6n7j9/series-workflow6n7j9-convert-artifact-4076316616/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,}