Name: series-workflowlcrbn Phase: Succeeded StartedAt: 2026-09-12 11:22:11 +0000 UTC FinishedAt: 2026-09-12 15:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[0] Phase: Succeeded StartedAt: 2026-09-12 11:22:11 +0000 UTC FinishedAt: 2026-09-12 11:51:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[0].run-triage Phase: Succeeded StartedAt: 2026-09-12 11:22:11 +0000 UTC FinishedAt: 2026-09-12 11:51:33 +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": "9958290885035431e2494159f555e332c3c14906", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS" ], "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": "9958290885035431e2494159f555e332c3c14906", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS" ], "series_id": "96ff506a-b89e-4c9a-8572-bf809b140f6c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_cold_or_pageout_pte_range", "madvise_cold", "madvise_pageout" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "9958290885035431e2494159f555e332c3c14906", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9wYWdlb3V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGZvY3VzZWQgb24gbG9ja2luZywgc3luY2hyb25pemF0aW9uLCBhbmQgZm9saW8gc3BsaXR0aW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgYE1BRFZfQ09MRGAgLyBgTUFEVl9QQUdFT1VUYCBvcGVyYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzLCBhbmQgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgY29uY3VycmVuY3kgb3IgcGFnZSByZWZjb3VudCBpc3N1ZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzZXF1ZW5jZSBpbiBtbS9tYWR2aXNlLmMgKG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSkgd2hlbiBzcGxpdHRpbmcgaHVnZSBmb2xpb3MgZm9yIHBhcnRpYWwgcmFuZ2VzIGR1cmluZyBNQURWX0NPTEQgb3IgTUFEVl9QQUdFT1VUIG9wZXJhdGlvbnMuIEl0IHJlcGxhY2VzIGEgYmxvY2tpbmcgZm9saW9fbG9jayBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIHdpdGggYSBmb2xpb190cnlsb2NrIHVuZGVyIHRoZSBwYWdlIHRhYmxlIGxvY2suIFRoaXMgY29kZSBwYXRoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UgdmlhIHRoZSBtYWR2aXNlIGFuZCBwcm9jZXNzX21hZHZpc2Ugc3lzdGVtIGNhbGxzIG9uIFRIUCBtYXBwaW5ncywgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uIGFuZCBiZWhhdmlvciB1bmRlciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4N2JlMDY2ZDg4OWUyNDMxMDgwYWI3MTI3YzUxN2ViZjA3Y2ViZGY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTE6NDk6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCBmNzVhOWQxMzk5ODAzLi5hZTNkNzEyN2Q4N2M0IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC00MTksOSAmIzQzOzQxOSwxMCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRpZiAobmV4dCAtIGFkZHIgIT0gSFBBR0VfUE1EX1NJWkUpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuJiM0MztcdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxuJiM0MztcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gXHRcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiBcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuLVx0XHRcdGZvbGlvX2xvY2soZm9saW8pO1xuIFx0XHRcdGVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcbiBcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX3BhZ2VvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2VxdWVuY2UgaW4gbW0vbWFkdmlzZS5jIChtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UpIHdoZW4gc3BsaXR0aW5nIGh1Z2UgZm9saW9zIGZvciBwYXJ0aWFsIHJhbmdlcyBkdXJpbmcgTUFEVl9DT0xEIG9yIE1BRFZfUEFHRU9VVCBvcGVyYXRpb25zLiBJdCByZXBsYWNlcyBhIGJsb2NraW5nIGZvbGlvX2xvY2sgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayB3aXRoIGEgZm9saW9fdHJ5bG9jayB1bmRlciB0aGUgcGFnZSB0YWJsZSBsb2NrLiBUaGlzIGNvZGUgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIHZpYSB0aGUgbWFkdmlzZSBhbmQgcHJvY2Vzc19tYWR2aXNlIHN5c3RlbSBjYWxscyBvbiBUSFAgbWFwcGluZ3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBhbmQgYmVoYXZpb3IgdW5kZXIgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODdiZTA2NmQ4ODllMjQzMTA4MGFiNzEyN2M1MTdlYmYwN2NlYmRmNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDExOjQ5OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IGY3NWE5ZDEzOTk4MDMuLmFlM2Q3MTI3ZDg3YzQgMTAwNjQ0Ci0tLSBhL21tL21hZHZpc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmMKQEAgLTQxOSw5ICYjNDM7NDE5LDEwIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsCiAJCWlmIChuZXh0IC0gYWRkciAhPSBIUEFHRV9QTURfU0laRSkgewogCQkJaW50IGVycjsKIAomIzQzOwkJCWlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpCiYjNDM7CQkJCWdvdG8gaHVnZV91bmxvY2s7CiAJCQlmb2xpb19nZXQoZm9saW8pOwogCQkJc3Bpbl91bmxvY2socHRsKTsKLQkJCWZvbGlvX2xvY2soZm9saW8pOwogCQkJZXJyID0gc3BsaXRfZm9saW8oZm9saW8pOwogCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJCWZvbGlvX3B1dChmb2xpbyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbW0vbWFkdmlzZS5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSBhIHBhdGNoIHN1Ym1pdHRlZCBmb3IgYG1tL21hZHZpc2UuY2AuIFRoZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvZGUuIEl0IHNlZW1zIHRoZSBwYXRjaCBpbnZvbHZlcyBzb21lIGNoYW5nZXMgYXJvdW5kIHRoZSBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbG9naWMgdGhhdCBoYW5kbGVzIHNwbGl0dGluZyBodWdlIHBhZ2VzLgoKTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgYXBwZWFycyBhIGBmb2xpb190cnlsb2NrYCBoYXMgYmVlbiBhZGRlZCBiZWZvcmUgdGhlIGBzcGxpdF9mb2xpb2AgY2FsbC4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIHJlb3JkZXJpbmcuIENyaXRpY2FsbHksIHRoZSBgZm9saW9fbG9ja2AgYW5kIGBzcGluX3VubG9ja2AgYXJlIG5vdyBjb25kaXRpb25hbGx5IGFwcGxpZWQuIFRoZSBgZm9saW9fdHJ5bG9ja2AgcHJvYmFibHkgcHJldmVudHMgYSBkZWFkbG9jay4KCkxldCYjMzk7cyBxdWlja2x5IHJlZnJlc2ggdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDQxOSwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBjaGFuZ2VzLCBieSByZWFkaW5nIHRoZSBjb2RlIHdpdGhpbiBgbW0vbWFkdmlzZS5jYC4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGNsYXJpZnkgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgYmxvY2sgYW5kIHRoZSByZWFzb24gZm9yIHRoZSBsb2NrIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdFx0XHR1bnNpZ25lZCBsb25nIG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiAzOTE6XHRcbiAzOTI6XHRcdFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBIUEFHRV9QTURfU0laRSk7XG4gMzkzOlx0XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xuIDM5NDpcdFx0XHRpZiAoIXB0bClcbiAzOTU6XHRcdFx0XHRyZXR1cm4gMDtcbiAzOTY6XHRcbiAzOTc6XHRcdFx0b3JpZ19wbWQgPSAqcG1kO1xuIDM5ODpcdFx0XHRpZiAoaXNfaHVnZV96ZXJvX3BtZChvcmlnX3BtZCkpXG4gMzk5Olx0XHRcdFx0Z290byBodWdlX3VubG9jaztcbiA0MDA6XHRcbiA0MDE6XHRcdFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XG4gNDAyOlx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbiA0MDM6XHRcdFx0XHRcdFx0IXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpO1xuIDQwNDpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gNDA1Olx0XHRcdH1cbiA0MDY6XHRcbiA0MDc6XHRcdFx0Zm9saW8gPSBwbWRfZm9saW8ob3JpZ19wbWQpO1xuIDQwODpcdFxuIDQwOTpcdFx0XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxuIDQxMDpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gNDExOlx0XG4gNDEyOlx0XHRcdC8qIERvIG5vdCBpbnRlcmZlcmUgd2l0aCBvdGhlciBtYXBwaW5ncyBvZiB0aGlzIGZvbGlvICovXG4gNDEzOlx0XHRcdGlmIChmb2xpb19tYXliZV9tYXBwZWRfc2hhcmVkKGZvbGlvKSlcbiA0MTQ6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDQxNTpcdFxuIDQxNjpcdFx0XHRpZiAocGFnZW91dF9hbm9uX29ubHlfZmlsdGVyIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbiA0MTc6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDQxODpcdFxuIDQxOTpcdFx0XHRpZiAobmV4dCAtIGFkZHIgIT0gSFBBR0VfUE1EX1NJWkUpIHtcbiA0MjA6XHRcdFx0XHRpbnQgZXJyO1xuIDQyMTpcdFxuIDQyMjpcdFx0XHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4gNDIzOlx0XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDQyNDpcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4gNDI1Olx0XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiA0MjY6XHRcdFx0XHRlcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG4gNDI3Olx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiA0Mjg6XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIDQyOTpcdFx0XHRcdGlmICghZXJyKVxuIDQzMDpcdFx0XHRcdFx0Z290byByZWd1bGFyX2ZvbGlvO1xuIDQzMTpcdFx0XHRcdHJldHVybiAwO1xuIDQzMjpcdFx0XHR9XG4gNDMzOlx0XG4gNDM0Olx0XHRcdGlmICghcGFnZW91dCBcdTAwMjZcdTAwMjYgcG1kX3lvdW5nKG9yaWdfcG1kKSkge1xuIDQzNTpcdFx0XHRcdHBtZHBfaW52YWxpZGF0ZSh2bWEsIGFkZHIsIHBtZCk7XG4gNDM2Olx0XHRcdFx0b3JpZ19wbWQgPSBwbWRfbWtvbGQob3JpZ19wbWQpO1xuIDQzNzpcdFxuIDQzODpcdFx0XHRcdHNldF9wbWRfYXQobW0sIGFkZHIsIHBtZCwgb3JpZ19wbWQpO1xuIDQzOTpcdFx0XHRcdHRsYl9yZW1vdmVfcG1kX3RsYl9lbnRyeSh0bGIsIHBtZCwgYWRkcik7XG4gNDQwOlx0XHRcdH1cbiA0NDE6XHRcbiA0NDI6XHRcdFx0Zm9saW9fY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XG4gNDQzOlx0XHRcdGZvbGlvX3Rlc3RfY2xlYXJfeW91bmcoZm9saW8pO1xuIDQ0NDpcdFx0XHRpZiAoZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pKVxuIDQ0NTpcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiA0NDY6XHRcdFx0aWYgKHBhZ2VvdXQpIHtcbiA0NDc6XHRcdFx0XHRpZiAoZm9saW9faXNvbGF0ZV9scnUoZm9saW8pKSB7XG4gNDQ4Olx0XHRcdFx0XHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gNDQ5Olx0XHRcdFx0XHRcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcbiA0NTA6XHRcdFx0XHRcdGVsc2VcbiA0NTE6XHRcdFx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiA0NTI6XHRcdFx0XHR9XG4gNDUzOlx0XHRcdH0gZWxzZVxuIDQ1NDpcdFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIDQ1NTpcdGh1Z2VfdW5sb2NrOlxuIDQ1NjpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQ1NzpcdFx0XHRpZiAocGFnZW91dClcbiA0NTg6XHRcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xuIDQ1OTpcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDYyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgZGVzY3JpcHRpdmUsIHN1Z2dlc3RpbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBtZW1vcnkgYWR2aWNlIGFuZCBoYW5kbGluZyBwYWdlLW91dHMgb3IgJiMzNDtjb2xkJiMzNDsgcGFnZXMgYXQgdGhlIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgbGV2ZWwuIEJ1dCBjb250ZXh0IGlzIGtpbmcsIHNvIEkgbmVlZCB0byBzZWUgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgbG9naWMgbG9va3MgbGlrZS4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwganVtcCBpbnRvIGBtbS9tYWR2aXNlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDM1MC00MDAuIFRoYXQgcmFuZ2Ugc2hvdWxkIGdpdmUgbWUgYSBnb29kIGZlZWwgZm9yIHRoZSBicm9hZGVyIGltcGxlbWVudGF0aW9uLCBhbnkgc3VwcG9ydGluZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgY2FsbGluZyBjb252ZW50aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIHJldmVhbCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCB0aGlzIG1hZHZpc2UgZnVuY3Rpb24gaXMgaW52b2tlZCBhbmQgd2hhdCBvdGhlciBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgaW4gY29uanVuY3Rpb24gd2l0aCBpdHMgZXhlY3V0aW9uLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgdGhhdCBtaWdodCBiZSBhZGRyZXNzZWQgYXQgdGhpcyBsZXZlbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0cmV0dXJuIGZpbGVfb3duZXJfb3JfY2FwYWJsZSh2bWEtXHUwMDNldm1fZmlsZSkgfHxcbiAzNTE6XHRcdCAgICAgICBmaWxlX3Blcm1pc3Npb24odm1hLVx1MDAzZXZtX2ZpbGUsIE1BWV9XUklURSkgPT0gMDtcbiAzNTI6XHR9XG4gMzUzOlx0XG4gMzU0Olx0c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiAzNTU6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlcCxcbiAzNTY6XHRcdFx0XHRcdFx0ICBwdGVfdCAqcHRlbnRwKVxuIDM1NzpcdHtcbiAzNTg6XHRcdGludCBtYXhfbnIgPSAoZW5kIC0gYWRkcikgLyBQQUdFX1NJWkU7XG4gMzU5Olx0XG4gMzYwOlx0XHRyZXR1cm4gZm9saW9fcHRlX2JhdGNoX2ZsYWdzKGZvbGlvLCBOVUxMLCBwdGVwLCBwdGVudHAsIG1heF9ucixcbiAzNjE6XHRcdFx0XHRcdCAgICAgRlBCX01FUkdFX1lPVU5HX0RJUlRZKTtcbiAzNjI6XHR9XG4gMzYzOlx0XG4gMzY0Olx0c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbiAzNjU6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gMzY2Olx0XHRcdFx0XHRzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiAzNjc6XHR7XG4gMzY4Olx0XHRzdHJ1Y3QgbWFkdmlzZV93YWxrX3ByaXZhdGUgKnByaXZhdGUgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gMzY5Olx0XHRzdHJ1Y3QgbW11X2dhdGhlciAqdGxiID0gcHJpdmF0ZS1cdTAwM2V0bGI7XG4gMzcwOlx0XHRib29sIHBhZ2VvdXQgPSBwcml2YXRlLVx1MDAzZXBhZ2VvdXQ7XG4gMzcxOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRsYi1cdTAwM2VtbTtcbiAzNzI6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cdTAwM2V2bWE7XG4gMzczOlx0XHRwdGVfdCAqc3RhcnRfcHRlLCAqcHRlLCBwdGVudDtcbiAzNzQ6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiAzNzU6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuIDM3NjpcdFx0TElTVF9IRUFEKGZvbGlvX2xpc3QpO1xuIDM3NzpcdFx0Ym9vbCBwYWdlb3V0X2Fub25fb25seV9maWx0ZXI7XG4gMzc4Olx0XHR1bnNpZ25lZCBpbnQgYmF0Y2hfY291bnQgPSAwO1xuIDM3OTpcdFx0aW50IG5yO1xuIDM4MDpcdFxuIDM4MTpcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIDM4MjpcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIDM4MzpcdFxuIDM4NDpcdFx0cGFnZW91dF9hbm9uX29ubHlfZmlsdGVyID0gcGFnZW91dCBcdTAwMjZcdTAwMjYgIXZtYV9pc19hbm9ueW1vdXModm1hKSBcdTAwMjZcdTAwMjZcbiAzODU6XHRcdFx0XHRcdFx0IWNhbl9kb19maWxlX3BhZ2VvdXQodm1hKTtcbiAzODY6XHRcbiAzODc6XHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gMzg4Olx0XHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcbiAzODk6XHRcdFx0cG1kX3Qgb3JpZ19wbWQ7XG4gMzkwOlx0XHRcdHVuc2lnbmVkIGxvbmcgbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuIDM5MTpcdFxuIDM5MjpcdFx0XHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIEhQQUdFX1BNRF9TSVpFKTtcbiAzOTM6XHRcdFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4gMzk0Olx0XHRcdGlmICghcHRsKVxuIDM5NTpcdFx0XHRcdHJldHVybiAwO1xuIDM5NjpcdFxuIDM5NzpcdFx0XHRvcmlnX3BtZCA9ICpwbWQ7XG4gMzk4Olx0XHRcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbiAzOTk6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBhbGwgd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmxvY2suICBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGlzIGlzIHVzZWQgd2l0aCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgd2hpY2ggaXMgdXNlZCBmb3IgYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhpcyBtYWR2aXNlIHN5c3RlbSBjYWxsIGNhbiBkaXJlY3RseSBtYW5pcHVsYXRlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSBrbm93IHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgYXJlIGEgcG90ZW50aWFsIHBvaW50IG9mIGNvbnRlbnRpb24uCgpJIHNlZSBhIHNwZWNpZmljIGNoYW5nZSB3aXRoaW4gYG1tL21hZHZpc2UuY2AuICBQcmV2aW91c2x5LCB0aGUgY29kZSBkaWQgYSBgZm9saW9fZ2V0YCwgdGhlbiBgc3Bpbl91bmxvY2socHRsKWAsIGFuZCB0aGVuIGEgYmxvY2tpbmcgYGZvbGlvX2xvY2soZm9saW8pYC4gTm93LCB0aGVyZSYjMzk7cyBhIGBmb2xpb190cnlsb2NrKGZvbGlvKWAgKmJlZm9yZSogdGhlIGBzcGluX3VubG9jayhwdGwpYC4gSWYgdGhlIHRyeWxvY2sgZmFpbHMsIGl0IGp1bXBzIHRvIGBodWdlX3VubG9ja2Agd2hpY2ggZG9lcyBhIGBzcGluX3VubG9jayhwdGwpYC4gIFRoaXMgaXMgYSBiaWcgY2x1ZSDigJMgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gYXZvaWQgYSBwb3RlbnRpYWwgZGVhZGxvY2sgb3IgaW1wcm92ZSBsb2NraW5nIG9yZGVyIGhlcmUuIFRoZSBvbGQgY29kZSB3YXMgZHJvcHBpbmcgYHB0bGAgYmVmb3JlIGFjcXVpcmluZyBgZm9saW9fbG9ja2AsIHdoaWNoIG1heSBsZWFkIHRvIHBvc3NpYmxlIGRlYWRsb2NrLgoKTm93LCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlPyBBYnNvbHV0ZWx5ISBUaGlzIGhhcHBlbnMgd2hlbiB5b3UgY2FsbCBgbWFkdmlzZShNQURWX1BBR0VPVVQpYCBvciBgbWFkdmlzZShNQURWX0NPTEQpYCBvbiBhIHRyYW5zcGFyZW50IGh1Z2UgcGFnZSByYW5nZSwgc3BlY2lmaWNhbGx5IGlmIHRoZSByYW5nZSBkb2VzbiYjMzk7dCBjb3ZlciB0aGUgKmVudGlyZSogaHVnZSBwYWdlLiBUaGlzIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBtYWR2aXNlKClgIHN5c2NhbGwuIFRoaXMgaXMgYSBiaWcgd2luIGZvciB0ZXN0aW5nIGJlY2F1c2UgdGhpcyBjYW4gYmUgZWFzaWx5IHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSEKCkxldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgYWxsIHRoZSBzYWxpZW50IHBvaW50czoKCiogICAqKlJlYWNoYWJpbGl0eToqKiBEaXJlY3QgdXNlcnNwYWNlIGFjY2VzcyB0aHJvdWdoIGBtYWR2aXNlKClgLCBib3RoIHdpdGggYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgIHdpdGhpbiBgcHJvY2Vzc19tYWR2aXNlYCBhbmQgYG1hZHZpc2VgLgoqICAgKipDb3JlIFN1YnN5c3RlbToqKiBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSAoYG1tL2ApLgoqICAgKipMb2NraW5nIENoYW5nZXM6KiogQ3JpdGljYWwgY2hhbmdlIGZyb20gYSBibG9ja2luZyBgZm9saW9fbG9ja2AgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBzcGlubG9jayB0byBgZm9saW9fdHJ5bG9ja2AgKndoaWxlKiBob2xkaW5nIHRoZSBzcGlubG9jay4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoaXMgbW9kaWZpY2F0aW9uIGlzICoqZGVmaW5pdGVseSBXb3J0aEZ1enppbmc9dHJ1ZSoqIGJlY2F1c2Ugb2YgdGhlIHVzZXIgc3BhY2UgYWNjZXNzaWJpbGl0eSBhbmQgbG9ja2luZyBjaGFuZ2VzLCBwb3RlbnRpYWxseSBleHBvc2luZyByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBjb2RlLiBMZXQgbWUgY2hlY2sgdGhlIGAjaWZkZWZgIGJsb2NrIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgaW4gcGFydGljdWxhciBmcm9tIGxpbmVzIDQ1NS00NzUgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBhbmQgZW5zdXJlIHRoYXQgdGhlIGNvZGUgaXMgd2VsbC1mb3JtZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1NTpcdGh1Z2VfdW5sb2NrOlxuIDQ1NjpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQ1NzpcdFx0XHRpZiAocGFnZW91dClcbiA0NTg6XHRcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xuIDQ1OTpcdFx0XHRyZXR1cm4gMDtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRyZWd1bGFyX2ZvbGlvOlxuIDQ2MzpcdCNlbmRpZlxuIDQ2NDpcdFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBQQUdFX1NJWkUpO1xuIDQ2NTpcdHJlc3RhcnQ6XG4gNDY2Olx0XHRzdGFydF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cdTAwM2V2bV9tbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuIDQ2NzpcdFx0aWYgKCFzdGFydF9wdGUpXG4gNDY4Olx0XHRcdHJldHVybiAwO1xuIDQ2OTpcdFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4gNDcwOlx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuIDQ3MTpcdFx0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHtcbiA0NzI6XHRcdFx0bnIgPSAxO1xuIDQ3MzpcdFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gNDc0Olx0XG4gNDc1Olx0XHRcdGlmICgmIzQzOyYjNDM7YmF0Y2hfY291bnQgPT0gU1dBUF9DTFVTVEVSX01BWCkge1xuIDQ3NjpcdFx0XHRcdGJhdGNoX2NvdW50ID0gMDtcbiA0Nzc6XHRcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcbiA0Nzg6XHRcdFx0XHRcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIDQ3OTpcdFx0XHRcdFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGFzIHlvdSByZXF1ZXN0ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqQW5hbHl6aW5nIGEgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKgoKWWVzLCBjb25maXJtZWQhIFRoZSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBvbiBsaW5lIDM4NyB0aHJvdWdoIDQ2MyBpcyBhY3RpbmcgYXMgYSBndWFyZC4gVGhpcyBtZWFucyB0aGUgZW50aXJlIGNvZGUgYmxvY2sgaXQgZW5jbG9zZXMgaXMgKm9ubHkqIGluY2x1ZGVkIGluIHRoZSBjb21waWxhdGlvbiBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZWZpbmVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGF3YXJlIG9mIHRoZSBpbXBvcnRhbmNlIG9mIHRoZXNlIGtpbmRzIG9mIGd1YXJkcy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXRzZWxmIGhhcyBhbnkgdW51c3VhbCBvciBjcml0aWNhbCBkZXBlbmRlbmNpZXMgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiBldmFsdWF0aW5nIGNvbmRpdGlvbmFsIGNvZGUuIFRoZXJlZm9yZSwgSSB3aWxsIGltbWVkaWF0ZWx5IHJ1biBhIGdyZXAgY29tbWFuZCB0byBzZWFyY2ggdGhyb3VnaCBgbW0vS2NvbmZpZ2AsIHVzaW5nIGBjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFzIHRoZSBzZWFyY2ggdGVybSwgYW5kIGZpbmQgd2hlcmUgaXQgaXMgZGVmaW5lZCwgYW55IGRlcGVuZGVuY2llcywgYW5kL29yIG90aGVyIGltcG9ydGFudCBub3RlcyB0aGF0IHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBmZWx0IHdlcmUgbmVjZXNzYXJ5IHRvIGluY2x1ZGUgaW4gdGhlIEtjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04Mjc9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MjktXG5tbS9LY29uZmlnOjgzMDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzMS1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODQ4PWNob2ljZVxuLS1cbm1tL0tjb25maWctODUzLVxubW0vS2NvbmZpZzo4NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg1NS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2MC1cbm1tL0tjb25maWc6ODYxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODYyLVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2OS1cbm1tL0tjb25maWc6ODcwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3MS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODc3PWNob2ljZVxuLS1cbm1tL0tjb25maWctODg2LVxubW0vS2NvbmZpZzo4ODc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04ODgtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg5Ni1cbm1tL0tjb25maWc6ODk3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg5OC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwNC1cbm1tL0tjb25maWc6OTA1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTA2LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTItXG5tbS9LY29uZmlnOjkxMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTQtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05MjI9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzEtXG5tbS9LY29uZmlnOjkzMjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzMy1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQwLVxubW0vS2NvbmZpZzo5NDE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQyLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ4LVxubW0vS2NvbmZpZzo5NDk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTAtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1Ni1cbm1tL0tjb25maWc6OTU3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk1OC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM2OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnIERlcGVuZGVuY2llcyBvZiBUUkFOU1BBUkVOVF9IVUdFUEFHRSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGRyaXZpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGluIGBtbS9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBwdWxsaW5nIHVwIHRoYXQgZmlsZS4gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzdHJ1Y3R1cmUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGFueSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBhbmQgYW55IG9idmlvdXMgYGRlZmF1bHRgIHZhbHVlcyB0aGF0IGluZmx1ZW5jZSB3aGV0aGVyIHRoZSBvcHRpb24gaXMgZXhwb3NlZCBvciBlbmFibGVkLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXTigJlzIG9mdGVuIGEgd2ViIG9mIGRlcGVuZGVuY2llcywgYW5kIHRoaXMgb25lIGNvdWxkIGJlIHRpZWQgaW50byBDUFUgZmVhdHVyZXMsIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMsIG9yIGV2ZW4gb3RoZXIgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHNwZWNpZmljIENQVSBmZWF0dXJlcywgTlVNQSBjb25maWd1cmF0aW9ucywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIGdlbmVyaWMgaGFyZHdhcmUgZmxhZ3MgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGUgZGlzcGxheSBvZiB0aGlzIG9wdGlvbi4gQWZ0ZXIgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhYmxlIHRvIHJlYXNvbiBob3cgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCwgYW5kIHBvdGVudGlhbGx5IHdoYXQmIzM5O3MgYmVoaW5kIGl0cyBhY3RpdmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyODpcdFx0ZGVmX2Jvb2wgblxuIDgyOTpcdFxuIDgzMDpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MzE6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDgzMjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODMzOlx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDgzNDpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDgzNTpcdFx0c2VsZWN0IE1NX0lEXG4gODM2Olx0XHRoZWxwXG4gODM3Olx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4Mzg6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDgzOTpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NDA6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NDE6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg0MjpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODQzOlx0XG4gODQ0Olx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg0NTpcdFxuIDg0NjpcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODQ3Olx0XG4gODQ4Olx0Y2hvaWNlXG4gODQ5Olx0XHRwcm9tcHQgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1wmIzM0O1xuIDg1MDpcdFx0ZGVmYXVsdCBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbiA4NTE6XHRcdGhlbHBcbiA4NTI6XHRcdCAgU2VsZWN0cyB0aGUgc3lzZnMgZGVmYXVsdHMgZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgb24gYW1kNjQqKgoKT2theSwgc28gSSBzZWUgdGhhdCBvbiBhbWQ2NCBhcmNoaXRlY3R1cmUsIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgZW5hYmxlZC4gIFRoYXQgbWVhbnMgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24gSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gaXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gR29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgcmVsYXRlZCB0byB0aGlzIGluIHRoZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIGBGb2N1c1N5bWJvbHNgIHRvIGdldCBzb21lIG1vcmUgY29udGV4dCBvbiB0aGUgY2hhbmdlcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSB3aWxsIG5vdyBsb29rIGF0IGBtbS9tYWR2aXNlLmNgIHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgY2FsbCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhcyB0aGF0JiMzOTtsbCBsaWtlbHkgZ2l2ZSBtZSB0aGUgbW9zdCBpbnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hZHZpc2UuYy0zNjMtXG5tbS9tYWR2aXNlLmM6MzY0OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG5tbS9tYWR2aXNlLmMtMzY1LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tYWR2aXNlLmM9NTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcbm1tL21hZHZpc2UuYzo1ODQ6XHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxubW0vbWFkdmlzZS5jLTU4NS1cdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgY29sZF93YWxrX29wc2AgaW4gYG1tL21hZHZpc2UuY2AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1tL21hZHZpc2UuY2AgYWdhaW4sIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBjb2xkX3dhbGtfb3BzYC4gSSYjMzk7bSBzdGFydGluZyBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgd2hlcmUgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgYHdhbGtfb3BzYCBzdHJ1Y3QgaXMgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoZSBgbWFkdmlzZWAgc3Vic3lzdGVtLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBjb2xkIHBhZ2VzLgoKSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBkbyB3ZSBkZWZpbmUgdGhlIG1hZHZpc2U/JiMzNDsKCkkgc3VzcGVjdCB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgZm9yIGRlYnVnZ2luZyBhIHJlbGF0ZWQgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGRfd2Fsa19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM2ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy01ODItXG5tbS9tYWR2aXNlLmM6NTgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcbm1tL21hZHZpc2UuYy01ODQtXHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxuLS1cbm1tL21hZHZpc2UuYz01ODg9c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xkX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tYWR2aXNlLmMtNTk5LVx0dGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSk7XG5tbS9tYWR2aXNlLmM6NjAwOlx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsIFx1MDAyNmNvbGRfd2Fsa19vcHMsXG5tbS9tYWR2aXNlLmMtNjAxLVx0XHRcdFx1MDAyNndhbGtfcHJpdmF0ZSk7XG4tLVxubW0vbWFkdmlzZS5jPTYyNj1zdGF0aWMgdm9pZCBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21hZHZpc2UuYy02MzUtXHR0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKTtcbm1tL21hZHZpc2UuYzo2MzY6XHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCwgXHUwMDI2Y29sZF93YWxrX29wcyxcbm1tL21hZHZpc2UuYy02MzctXHRcdFx0ICAgIFx1MDAyNndhbGtfcHJpdmF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTQ3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBBZHZpc2UgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgYG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlYCBhbmQgYG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlYCBmdW5jdGlvbiBpbnRlcm5hbGx5LiBJdCBsb29rcyBsaWtlIGJvdGggb2YgdGhlc2UsIGF0IHRoZWlyIGNvcmUsIHV0aWxpemUgYHdhbGtfcGFnZV9yYW5nZV92bWFgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGl0ZXJhdGlvbiBhY3Jvc3MgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEuIEFuZCB0aGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMsIHRoZXkgZmVlZCBpdCBgJmFtcDtjb2xkX3dhbGtfb3BzYCwgaW1wbHlpbmcgdGhleSYjMzk7cmUgdXNpbmcgYSBzcGVjaWZpYyBzZXQgb2Ygb3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoICYjMzQ7Y29sZCYjMzQ7IG9yICYjMzQ7cGFnZW91dCYjMzQ7IG1lbW9yeSByZWdpb25zLiBUaGUgY3JpdGljYWwgb3BlcmF0aW9uIGFwcGVhcnMgdG8gYmUgYC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBhcyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYWR2aXNlIG9wZXJhdGlvbnMgYXJlIGFwcGxpZWQgdG8gYSByYW5nZSBvZiBwYWdlcy4gU28sIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhlc2UgbWFkdmlzZSBjYWxscyBhcmUgYWN0dWFsbHkgb3JpZ2luYXRpbmcuIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGxpbmcgY2hhaW4gYW5kIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlXyhjb2xkfHBhZ2VvdXQpX3BhZ2VfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTU4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XG4tLVxubW0vbWFkdmlzZS5jLTU4Ny1cbm1tL21hZHZpc2UuYzo1ODg6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xkX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbm1tL21hZHZpc2UuYy01ODktXHRcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYz02MTA9c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy02MTktXHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3ItXHUwMDNlbW0pO1xubW0vbWFkdmlzZS5jOjYyMDpcdG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKFx1MDAyNnRsYiwgbWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtNjIxLVx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbi0tXG5tbS9tYWR2aXNlLmMtNjI1LVxubW0vbWFkdmlzZS5jOjYyNjpzdGF0aWMgdm9pZCBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vbWFkdmlzZS5jLTYyNy1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWFkdmlzZS5jPTY0MT1zdGF0aWMgbG9uZyBtYWR2aXNlX3BhZ2VvdXQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTY2MC1cdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgbWFkdl9iZWhhdmlvci1cdTAwM2VtbSk7XG5tbS9tYWR2aXNlLmM6NjYxOlx0bWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2UoXHUwMDI2dGxiLCB2bWEsIFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UpO1xubW0vbWFkdmlzZS5jLTY2Mi1cdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTM3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgU3ltYm9sIFVzYWdlIGFuZCBJbmxpbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGEgc3RhdGljIGZ1bmN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgdGhlIGNvbXBpbGVyIGlzIGlubGluaW5nIGl0LiBXaXRoIEdDQy9DbGFuZywgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIGxpa2UgaG93IGl0JiMzOTtzIGRvbmUgd2l0aGluIHRoaXMgYGNvbGRfd2Fsa19vcHMucG1kX2VudHJ5YCBzdHJ1Y3QsIGFyZSBub3QgZnVsbHkgZWxpbWluYXRlZCBvciBpbmxpbmVkIGJlY2F1c2UgdGhlaXIgYWRkcmVzcyBpcyB0YWtlbi4gVGhpcyBtZWFucyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCAqd2lsbCogaGF2ZSBhIHN5bWJvbCBpbiB2bWxpbnV4LiBHb29kIHRvIGtub3cuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBsb29rIGF0IGBtYWR2aXNlX2NvbGRgLCBgbWFkdmlzZV9wYWdlb3V0YCwgYG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlYCwgYW5kIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAgd2hpbGUgSSYjMzk7bSBhdCBpdCwganVzdCBmb3IgY29tcGxldGVuZXNzLiBBcmUgdGhlc2UgZnVuY3Rpb25zIGFsbCBvdmVyIHRoZSBwbGFjZT8gTm8sIHRoYW5rZnVsbHksIHRoZXkgYXJlIHNwZWNpZmljIHRvIHRoZSBgbWFkdmlzZWAgY2FsbHMgd2l0aCBgTUFEVl9DT0xEYCBhbmQgYE1BRFZfUEFHRU9VVGAgZmxhZ3MuIFNpbWlsYXJseSwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgaXRzZWxmIGlzIG9ubHkgc3BlY2lmaWMgdG8gdGhlIGNvbGQvcGFnZW91dCBtYWR2aXNlIHVzZSBjYXNlcy4KClRvIGdhaW4gYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlYXNvbmluZyBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGdpdCBsb2cgZm9yIGFueSByZWxldmFudCBwYXRjaGVzLiBTZWVpbmcgdGhlIGNvbW1pdCBoaXN0b3J5IHdvdWxkIGdpdmUgbWUgdmFsdWFibGUgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdHJ5bG9ja1xcKGZvbGlvXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0zNjQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbi0tXG5tbS9tYWR2aXNlLmMtNDIxLVxubW0vbWFkdmlzZS5jOjQyMjpcdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxubW0vbWFkdmlzZS5jLTQyMy1cdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4tLVxubW0vbWFkdmlzZS5jLTUxMC1cdFx0XHRcdFx0Y29udGludWU7XG5tbS9tYWR2aXNlLmM6NTExOlx0XHRcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbm1tL21hZHZpc2UuYy01MTItXHRcdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL21hZHZpc2UuYz02Njc9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tYWR2aXNlLmMtNzM3LVx0XHRcdFx0XHRjb250aW51ZTtcbm1tL21hZHZpc2UuYzo3Mzg6XHRcdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxubW0vbWFkdmlzZS5jLTczOS1cdFx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vbWFkdmlzZS5jLTc1OS1cdFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xubW0vbWFkdmlzZS5jOjc2MDpcdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxubW0vbWFkdmlzZS5jLTc2MS1cdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDk0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhbHRlcnMgdGhlIGxvY2tpbmcgc2VxdWVuY2Ugd2l0aGluIGBtbS9tYWR2aXNlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBzcGxpdHRpbmcgb2YgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBkdXJpbmcgYE1BRFZfQ09MRGAgb3IgYE1BRFZfUEFHRU9VVGAgY2FsbHMuIFRoZSBjb2RlIHNuaXBwZXQgYmVmb3JlIHRoZSBjb21taXQgdXNlZCBhIGBmb2xpb19sb2NrYCBhZnRlciBgc3Bpbl91bmxvY2socHRsKWAsIHdoaWNoIGlzIGEgZGFuZ2Vyb3VzIHBhdHRlcm4uIEkgc2VlIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBgZm9saW9fdHJ5bG9ja2AgYmVmb3JlIGRyb3BwaW5nIGBwdGxgLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQuCgpUaGUgaW5pdGlhbCBjb25jZXJuLCBhbmQgdGhlIHJlYXNvbiBmb3IgdGhlIGNoYW5nZSwgaXMgdG8gYXZvaWQgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIGRlYWRsb2NrLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSB3aW5kb3cgYmV0d2VlbiBkcm9wcGluZyB0aGUgUE1EIHRhYmxlIGxvY2sgKGBwdGxgKSBhbmQgYWNxdWlyaW5nIHRoZSBibG9ja2luZyBgZm9saW9fbG9ja2AuIER1cmluZyB0aGlzIHdpbmRvdywgdGhlIGZvbGlvIGNvdWxkIGhhdmUgYmVlbiBtb2RpZmllZCAoc3BsaXQsIGZyZWVkLCBldGMuKSBjYXVzaW5nIHBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbiBvciBkZWFkbG9jay4gVGhpcyBuZXcgcGF0Y2ggYWRkcmVzc2VzIHRoYXQgYnkgZmlyc3QgdHJ5aW5nIHRvIGxvY2sgdGhlIGZvbGlvIHdpdGggYGZvbGlvX3RyeWxvY2tgLiBJZiB0aGF0IHN1Y2NlZWRzLCB3ZSBwcm9jZWVkIHdpdGggdGhlIHNwbGl0IGFmdGVyIHJlbGVhc2luZyBgcHRsYC4gSWYgdGhlIHRyeWxvY2sgZmFpbHMsIHdlIGJhaWwsIHdoaWNoIGF2b2lkcyB0aGUgcmFjZSBhbmQgcG90ZW50aWFsIGRlYWRsb2NrLgoKVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgZm9saW9fdHJ5bG9ja2AgZG9lc24mIzM5O3Qgc2xlZXAsIHNvIGNhbGxpbmcgaXQgd2hpbGUgaG9sZGluZyBgcHRsYCBpcyBzYWZlLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHJhY2UgY29uZGl0aW9uIHRoYXQgZXhpc3RlZCBwcmV2aW91c2x5LiBOb3cgdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGNoYW5nZSBmdXp6YWJsZT8KClRoZSBhbnN3ZXIgaXMgYSBjbGVhciAmIzM0O3llcy4mIzM0OyBUaGlzIGNoYW5nZSBkaXJlY3RseSBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS9gIGRpcmVjdG9yeSBhbmQgaXQgaW1wYWN0cyBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcuIFRoZSBwYXRjaCBmaXRzIGRpcmVjdGx5IHdpdGhpbiB0aGUgY3JpdGVyaWEgb3V0bGluZWQgZm9yIGZ1enppbmc6IGEgbW9kaWZpY2F0aW9uIGluIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIGNvZGUgcmVzdHJ1Y3R1cmluZy4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1enppbmcgdGFyZ2V0LiBUaGUgZnVuY3Rpb25zIGludm9sdmVkIGFyZSB2ZXJ5IHNwZWNpZmljOiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlYCwgYG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlYCwgYG1hZHZpc2VfY29sZGAsIGFuZCBgbWFkdmlzZV9wYWdlb3V0YC4gVGhlIGZvY3VzIGlzIHRpZ2h0LiBUaGVzZSBhcmUgY2FsbGVkIG9ubHkgd2hlbiBhIHVzZXIgdXNlcyBgbWFkdmlzZWAgd2l0aCBgTUFEVl9DT0xEYCBvciBgTUFEVl9QQUdFT1VUYC4gQW5kIGltcG9ydGFudGx5LCB0aGUgbWFpbiBjb2RlIGNoYW5nZSBpcyBpbiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gVGhlc2Ugc3ltYm9scyBhcmUgbm90IHViaXF1aXRvdXMsIHdoaWNoIGluY3JlYXNlcyB0aGVpciB2YWx1ZSBhcyBhIGZ1enogdGFyZ2V0LgoKRmluYWxseSwgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBXaXRob3V0IHRoYXQsIHRoZSBjb2RlIGlzIHRvdGFsbHkgYWJzZW50LiBTbywgZW5hYmxpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBhbiBhYnNvbHV0ZSByZXF1aXJlbWVudC4gTm8gb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuIFRoaXMgc2VlbXMgbGlrZSBhIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmFsaWRhdGUgdGhlIGNoYW5nZSBhbmQgZW5zdXJlIHRoZSBmaXggaXMgd29ya2luZyBhcyBpbnRlbmRlZCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcmVncmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03NT1pZmRlZiBDT05GSUdfTU1VXG5tbS9NYWtlZmlsZTo3NjpcdG9iai0kKENPTkZJR19BRFZJU0VfU1lTQ0FMTFMpXHQmIzQzOz0gbWFkdmlzZS5vXG5tbS9NYWtlZmlsZS03Ny1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCoqCgpSaWdodCwgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCYjMzk7cyBhYm91dC4gVGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgaW5pdC9LY29uZmlnYCBhbmQgbG9vayBmb3IgdGhlIGRlZmluaXRpb24gb2YgYEFEVklTRV9TWVNDQUxMU2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG9wdGlvbiB3aWxsIGJlIGRlY2xhcmVkLCBhbG9uZyB3aXRoIGEgZGVzY3JpcHRpb24gYW5kIHBvc3NpYmx5IHNvbWUgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBLbm93aW5nIHRoZSBjb250ZXh0IHdpbGwgcG9pbnQgdG8gd2hhdCBpdCBjb250cm9scyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gVGhlbiBJIGNhbiBmaWd1cmUgb3V0IHdoYXQgbW9kdWxlcyBvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBkZXBlbmRlbnQgb24gdGhpcyBjb25maWcgdmFyaWFibGUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0IGl0IGVuYWJsZXMgb3IgZGlzYWJsZXMuIEhvcGVmdWxseSwgdGhlcmUmIzM5O3MgYSBoZWxwZnVsIGNvbW1lbnQgaW4gdGhlcmUgdG8gZ2l2ZSBtZSBhIGNsdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRFZJU0VfU1lTQ0FMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5NzU9Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuLS1cbmluaXQvS2NvbmZpZy0xOTg1LVxuaW5pdC9LY29uZmlnOjE5ODY6Y29uZmlnIEFEVklTRV9TWVNDQUxMU1xuaW5pdC9LY29uZmlnLTE5ODctXHRib29sIFwmIzM0O0VuYWJsZSBtYWR2aXNlL2ZhZHZpc2Ugc3lzY2FsbHNcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODUyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIEdlbmVzaXM6IEEgS2NvbmZpZyBSZXRyb3NwZWN0aXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBjaXJjYSAxOTg2LiBUaGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtsbCBsaWtlbHkgZmluZCB0aGUgYmVkcm9jayBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBldmVuIGlmIGl0JiMzOTtzIGluIGl0cyBlbWJyeW9uaWMgc3RhZ2UuIEkmIzM5O20gZWFnZXIgdG8gc2VlIGhvdyB0aGV5IGFwcHJvYWNoZWQgc3VjaCBhIGZ1bmRhbWVudGFsIHByb2JsZW0gd2l0aCB0aGUgbGltaXRlZCB0b29scyBhbmQgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cyBvZiB0aGF0IGVyYS4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgb3JpZ2luYWwgZGVzaWduIHBoaWxvc29waGllcyBhbmQgdGhlIHRyYWRlLW9mZnMgdGhleSBtYWRlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBlYXJseSBkZXZlbG9wZXJzIGNvbmNlcHR1YWxpemVkIGZlYXR1cmUgc2VsZWN0aW9uIGFuZCBkZXBlbmRlbmNpZXMg4oCTIHdlcmUgdGhleSBldmVuIHRoaW5raW5nIGFib3V0IG1vZHVsYXJpdHkgaW4gdGhlIHdheSB3ZSBkbyBub3c/IFRoaXMgY291bGQgYmUgYSBmYXNjaW5hdGluZyBsb29rIGF0IHRoZSBldm9sdXRpb24gb2YgY29tcGxleGl0eSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk4NTpcdFxuMTk4NjpcdGNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcbjE5ODc6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1hZHZpc2UvZmFkdmlzZSBzeXNjYWxsc1wmIzM0OyBpZiBFWFBFUlRcbjE5ODg6XHRcdGRlZmF1bHQgeVxuMTk4OTpcdFx0aGVscFxuMTk5MDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtYWR2aXNlIGFuZCBmYWR2aXNlIHN5c2NhbGxzLCB1c2VkIGJ5XG4xOTkxOlx0XHQgIGFwcGxpY2F0aW9ucyB0byBhZHZpc2UgdGhlIGtlcm5lbCBhYm91dCB0aGVpciBmdXR1cmUgbWVtb3J5IG9yIGZpbGVcbjE5OTI6XHRcdCAgdXNhZ2UsIGltcHJvdmluZyBwZXJmb3JtYW5jZS4gSWYgYnVpbGRpbmcgYW4gZW1iZWRkZWQgc3lzdGVtIHdoZXJlIG5vXG4xOTkzOlx0XHQgIGFwcGxpY2F0aW9ucyB1c2UgdGhlc2Ugc3lzY2FsbHMsIHlvdSBjYW4gZGlzYWJsZSB0aGlzIG9wdGlvbiB0byBzYXZlXG4xOTk0Olx0XHQgIHNwYWNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NQoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQ29uZmlybWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgaW5pdGlhbCBzdXNwaWNpb25zLiBJdCBsb29rcyBsaWtlIGBBRFZJU0VfU1lTQ0FMTFNgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSBkZWZpbml0ZWx5IHJlcXVpcmVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgKmFsbCogd2UgbmVlZC4gRGlnZ2luZyBpbnRvIHRoZSBjb2RlIHdpdGhpbiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgc3BlY2lmaWNhbGx5IHRoZSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmxvY2ssIGNvbmZpcm1zIGl0LiBXZSYjMzk7cmUgZ29vZCBvbiB0aGUgY29uZmlndXJhdGlvbiBmcm9udC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgoxLiAgKipXb3J0aEZ1enppbmc6IFRydWUuKiogWWVwLCB0aGF0JiMzOTtzIHdoYXQgd2UgZXhwZWN0LiBUaGlzIHBhdGNoIGludm9sdmVzIGNyaXRpY2FsIGxvY2tpbmcgY2hhbmdlcy4KMi4gICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCBpbiBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBsb2NraW5nIHN0cmF0ZWd5IHdoZW4gVEhQcyBhcmUgc3BsaXQgZm9yIGBNQURWX0NPTERgIG9yIGBNQURWX1BBR0VPVVRgLiBSZXBsYWNpbmcgYSBgZm9saW9fbG9jaygpYCB3aXRoIGEgYGZvbGlvX3RyeWxvY2soKWAgYWZ0ZXIgdW5sb2NraW5nIHRoZSBwYWdlIHRhYmxlIGxvY2sgaXMgYSBiaWcgZGVhbC4gQ3JpdGljYWxseSwgd2Uga25vdyB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IHRyaWdnZXIgdGhpcyB2aWEgdGhlIGBtYWR2aXNlYCBzeXNjYWxscyBvbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLiBTbywgdGhpcyBpcyBhIHByaW1lIHRhcmdldCBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgaXNzdWVzLgozLiAgKipGb2N1c1N5bWJvbHM6KiogVGhlIGZ1bmN0aW9uIG5hbWVzIHdlIHdhbnQgdG8gdGFyZ2V0IGxpbmUgdXAgcGVyZmVjdGx5OiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYG1hZHZpc2VfY29sZGAsIGFuZCBgbWFkdmlzZV9wYWdlb3V0YC4gVGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hlcmUgdGhlIGNyaXRpY2FsIGNoYW5nZXMgYXJlLgo0LiAgKipFbmFibGVDb25maWdzOioqIEFnYWluLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQURWSVNFX1NZU0NBTExTYCBhcmUgY29ycmVjdC4KCkZyb20gYSBjb2RlIHJldmlldyBwZXJzcGVjdGl2ZSwgaXQgY2hlY2tzIG91dC4gRXZlcnl0aGluZyYjMzk7cyBpbiBzeW5jLiBJJiMzOTttIHNhdGlzZmllZC4gTGV0JiMzOTtzIGdvIGFoZWFkIGFuZCBzaWduYWwgdGhhdCB3ZSYjMzk7cmUgZ29vZCB0byBnby4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xkJiMzNDssCiAgICAmIzM0O21hZHZpc2VfcGFnZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzZXF1ZW5jZSBpbiBtbS9tYWR2aXNlLmMgKG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSkgd2hlbiBzcGxpdHRpbmcgaHVnZSBmb2xpb3MgZm9yIHBhcnRpYWwgcmFuZ2VzIGR1cmluZyBNQURWX0NPTEQgb3IgTUFEVl9QQUdFT1VUIG9wZXJhdGlvbnMuIEl0IHJlcGxhY2VzIGEgYmxvY2tpbmcgZm9saW9fbG9jayBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIHdpdGggYSBmb2xpb190cnlsb2NrIHVuZGVyIHRoZSBwYWdlIHRhYmxlIGxvY2suIFRoaXMgY29kZSBwYXRoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UgdmlhIHRoZSBtYWR2aXNlIGFuZCBwcm9jZXNzX21hZHZpc2Ugc3lzdGVtIGNhbGxzIG9uIFRIUCBtYXBwaW5ncywgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uIGFuZCBiZWhhdmlvciB1bmRlciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9wYWdlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIHNlcXVlbmNlIGluIG1tL21hZHZpc2UuYyAobWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKSB3aGVuIHNwbGl0dGluZyBodWdlIGZvbGlvcyBmb3IgcGFydGlhbCByYW5nZXMgZHVyaW5nIE1BRFZfQ09MRCBvciBNQURWX1BBR0VPVVQgb3BlcmF0aW9ucy4gSXQgcmVwbGFjZXMgYSBibG9ja2luZyBmb2xpb19sb2NrIGFmdGVyIGRyb3BwaW5nIHRoZSBwYWdlIHRhYmxlIGxvY2sgd2l0aCBhIGZvbGlvX3RyeWxvY2sgdW5kZXIgdGhlIHBhZ2UgdGFibGUgbG9jay4gVGhpcyBjb2RlIHBhdGggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSB2aWEgdGhlIG1hZHZpc2UgYW5kIHByb2Nlc3NfbWFkdmlzZSBzeXN0ZW0gY2FsbHMgb24gVEhQIG1hcHBpbmdzLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZW5zdXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gYW5kIGJlaGF2aW9yIHVuZGVyIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGZvbGlvIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIGluIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UoKWAgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIGEgYmxvY2tpbmcgYGZvbGlvX2xvY2soKWAgdGFrZW4gYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayAoYHB0bGApIHdpdGggYSBub24tYmxvY2tpbmcgYGZvbGlvX3RyeWxvY2soKWAgdW5kZXIgYHB0bGAsIGJyYW5jaGluZyB0byBgaHVnZV91bmxvY2tgIGlmIGxvY2tpbmcgZmFpbHMuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBmb2N1c2VkIG9uIGxvY2tpbmcsIHN5bmNocm9uaXphdGlvbiwgYW5kIGZvbGlvIHNwbGl0dGluZyBjb250cm9sIGZsb3cgZHVyaW5nIGBNQURWX0NPTERgIC8gYE1BRFZfUEFHRU9VVGAgb3BlcmF0aW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocywgYW5kIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5IG9yIHBhZ2UgcmVmY291bnQgaXNzdWVzIHdvdWxkIGZhbGwgdW5kZXIgTE9DS0RFUCBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg3YmUwNjZkODg5ZTI0MzEwODBhYjcxMjdjNTE3ZWJmMDdjZWJkZjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxMTo0OTozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuYwppbmRleCBmNzVhOWQxMzk5ODAzLi5hZTNkNzEyN2Q4N2M0IDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jCkBAIC00MTksOSAmIzQzOzQxOSwxMCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLAogCQlpZiAobmV4dCAtIGFkZHIgIT0gSFBBR0VfUE1EX1NJWkUpIHsKIAkJCWludCBlcnI7CiAKJiM0MzsJCQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKQomIzQzOwkJCQlnb3RvIGh1Z2VfdW5sb2NrOwogCQkJZm9saW9fZ2V0KGZvbGlvKTsKIAkJCXNwaW5fdW5sb2NrKHB0bCk7Ci0JCQlmb2xpb19sb2NrKGZvbGlvKTsKIAkJCWVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTsKIAkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCQlmb2xpb19wdXQoZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDUwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uIGZvciBgbW0vbWFkdmlzZS5jYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb3IgaWYgS0FTQU4gaXMgc3VmZmljaWVudC4gSSBuZWVkIHRvIGFwcGx5IHRob3NlIGZvdXIgS01TQU4gdHJpZ2dlcnMuIExldCYjMzk7cyBzZWUuLi4KCkZpcnN0LCBsZXQmIzM5O3MgcmVjYXAgdGhvc2UgS01TQU4gdHJpZ2dlcnM6CjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlIHBvdGVudGlhbGx5IHdpdGggdW5pbml0aWFsaXplZCBiaXRzLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBzdHVmZi4KMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIuCjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBldGMuLCBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy4KCkFuZCB3aGVuIHRvIHNraXAgS01TQU46CiogICBTdGFuZGFyZCBidWdzIChPT0IsIFVBRiwgTlVMTCBkZXJlZiwgZXRjLikgYXJlIHRoZSByaXNrLgoqICAgU3RydWN0dXJlcyBhcmUgKmZ1bGx5KiBpbml0aWFsaXplZC4KKiAgIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgbGVha3MuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkaWZmLiBJdCYjMzk7cyBpbiBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGF0IGBmb2xpb190cnlsb2NrYCBhbmQgYHNwbGl0X2ZvbGlvYCBjb2RlLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIGBmb2xpb190cnlsb2NrYCBjYWxsIGJlZm9yZSBgc3BsaXRfZm9saW9gLiBUaGUgbG9jayBvcmRlciBpcyBjaGFuZ2VkIHdoaWNoIGlzIG1vc3QgbGlrZWx5IHRvIGF2b2lkIGxvY2sgaW52ZXJzaW9uLgoKU2luY2UgdGhpcyBjaGFuZ2UgcHJpbWFyaWx5IGNvbmNlcm5zIGxvY2tpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGludGVybmFsIHdvcmtpbmdzLCBpdCBmZWVscyBsaWtlIHRoaXMgaXMgbW9zdGx5IGFib3V0IGNvcnJlY3RpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQmIzM5O3MgbGlrZWx5IHRyeWluZyB0byBpbXByb3ZlIHRoZSByZWxpYWJpbGl0eSBvZiBwYWdlIHNwbGl0dGluZy4gVGhlIG1haW4gY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IGRhdGEgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgZm9saW8mIzM5O3Mgc3RhdGUsIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyBhdmVudWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLiBJdCYjMzk7cyB0b3VjaGluZyBvbiBsb2NraW5nIHByaW1pdGl2ZXMgd2hpY2ggaXMgbW9yZSBLQVNBTiB0ZXJyaXRvcnkuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbnkgY29uZGl0aW9uYWwgbG9naWMgZGlyZWN0bHkgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gRnVydGhlcm1vcmUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmlza3kgYWxsb2NhdGlvbnMgb3IgYm91bmRzIGNoZWNrcy4gVGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIHRoZSBpbnRlZ3JpdHkgb2YgaW4ta2VybmVsIGRhdGEuCgpUaGVyZWZvcmUsIG15IGluaXRpYWwgYXNzZXNzbWVudCwgcGVuZGluZyBmdXJ0aGVyIHNjcnV0aW55IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBpcyB0aGF0IHN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUsIG9mIGNvdXJzZS4gVGltZSB0byBsb29rIGludG8gYG1tL21hZHZpc2UuY2AgYXJvdW5kIGxpbmUgNDE5LCB1c2luZyBlaXRoZXIgYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY29tbWFuZCwgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgbXkgY3VycmVudCBjb25jbHVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hZHZpc2UuYy0zNjMtXG5tbS9tYWR2aXNlLmM6MzY0OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG5tbS9tYWR2aXNlLmMtMzY1LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tYWR2aXNlLmM9NTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcbm1tL21hZHZpc2UuYzo1ODQ6XHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxubW0vbWFkdmlzZS5jLTU4NS1cdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBmdW5jdGlvbiwgc3RhcnRpbmcgYXJvdW5kIGxpbmUgNDE5LiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgaGVyZSwgcHJvYmFibHkgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBNQURWX0NPTERgIGFuZCBgTUFEVl9QQUdFT1VUYCBmbGFncyBhbmQgaG93IHRoZXkgaW50ZXJhY3QgYXQgdGhlIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgbGV2ZWwuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgdGhvc2UgaGludHMuIEkgaW1hZ2luZSB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIGRpcnR5IHdvcmsgb2YgbWFya2luZyBwYWdlcyBhcyBjb2xkIG9yIHRyaWdnZXJpbmcgcGFnZS1vdXQgb3BlcmF0aW9ucy4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O2QgZXhwZWN0IGl0IGRlYWxzIHdpdGggYSByYW5nZSBvZiBQVEVzLCBtZWFuaW5nIGl0IG9wZXJhdGVzIG9uIHBvdGVudGlhbGx5IGxhcmdlIGNodW5rcyBvZiBtZW1vcnkuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBlZmZpY2llbnRseSB0aGlzIGlzIGRvbmUgYW5kIGlmIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzLCBvciBwZXJoYXBzIGNsZXZlciB0cmlja3MsIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGtlcm5lbCBpcyBtYW5hZ2luZyB0aGF0IG1lbW9yeSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFxuIDQwMTpcdFx0XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbiA0MDI6XHRcdFx0XHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFx1MDAyNlx1MDAyNlxuIDQwMzpcdFx0XHRcdFx0XHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XG4gNDA0Olx0XHRcdFx0Z290byBodWdlX3VubG9jaztcbiA0MDU6XHRcdFx0fVxuIDQwNjpcdFxuIDQwNzpcdFx0XHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XG4gNDA4Olx0XG4gNDA5Olx0XHRcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4gNDEwOlx0XHRcdFx0Z290byBodWdlX3VubG9jaztcbiA0MTE6XHRcbiA0MTI6XHRcdFx0LyogRG8gbm90IGludGVyZmVyZSB3aXRoIG90aGVyIG1hcHBpbmdzIG9mIHRoaXMgZm9saW8gKi9cbiA0MTM6XHRcdFx0aWYgKGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoZm9saW8pKVxuIDQxNDpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gNDE1Olx0XG4gNDE2Olx0XHRcdGlmIChwYWdlb3V0X2Fub25fb25seV9maWx0ZXIgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuIDQxNzpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gNDE4Olx0XG4gNDE5Olx0XHRcdGlmIChuZXh0IC0gYWRkciAhPSBIUEFHRV9QTURfU0laRSkge1xuIDQyMDpcdFx0XHRcdGludCBlcnI7XG4gNDIxOlx0XG4gNDIyOlx0XHRcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbiA0MjM6XHRcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gNDI0Olx0XHRcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiA0MjU6XHRcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQyNjpcdFx0XHRcdGVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcbiA0Mjc6XHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDQyODpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gNDI5Olx0XHRcdFx0aWYgKCFlcnIpXG4gNDMwOlx0XHRcdFx0XHRnb3RvIHJlZ3VsYXJfZm9saW87XG4gNDMxOlx0XHRcdFx0cmV0dXJuIDA7XG4gNDMyOlx0XHRcdH1cbiA0MzM6XHRcbiA0MzQ6XHRcdFx0aWYgKCFwYWdlb3V0IFx1MDAyNlx1MDAyNiBwbWRfeW91bmcob3JpZ19wbWQpKSB7XG4gNDM1Olx0XHRcdFx0cG1kcF9pbnZhbGlkYXRlKHZtYSwgYWRkciwgcG1kKTtcbiA0MzY6XHRcdFx0XHRvcmlnX3BtZCA9IHBtZF9ta29sZChvcmlnX3BtZCk7XG4gNDM3Olx0XG4gNDM4Olx0XHRcdFx0c2V0X3BtZF9hdChtbSwgYWRkciwgcG1kLCBvcmlnX3BtZCk7XG4gNDM5Olx0XHRcdFx0dGxiX3JlbW92ZV9wbWRfdGxiX2VudHJ5KHRsYiwgcG1kLCBhZGRyKTtcbiA0NDA6XHRcdFx0fVxuIDQ0MTpcdFxuIDQ0MjpcdFx0XHRmb2xpb19jbGVhcl9yZWZlcmVuY2VkKGZvbGlvKTtcbiA0NDM6XHRcdFx0Zm9saW9fdGVzdF9jbGVhcl95b3VuZyhmb2xpbyk7XG4gNDQ0Olx0XHRcdGlmIChmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykpXG4gNDQ1Olx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIDQ0NjpcdFx0XHRpZiAocGFnZW91dCkge1xuIDQ0NzpcdFx0XHRcdGlmIChmb2xpb19pc29sYXRlX2xydShmb2xpbykpIHtcbiA0NDg6XHRcdFx0XHRcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiA0NDk6XHRcdFx0XHRcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9saW8gTG9ja2luZyBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIHdlIHdlbnQgZnJvbSB1c2luZyBgZm9saW9fbG9ja2AgYW5kIGBmb2xpb191bmxvY2tgIHRvIHVzaW5nIGBmb2xpb190cnlsb2NrYCBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZToKCmBgYGMKCQkJaWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSkKCQkJCWdvdG8gaHVnZV91bmxvY2s7CgkJCWZvbGlvX2dldChmb2xpbyk7CgkJCXNwaW5fdW5sb2NrKHB0bCk7CgkJCWVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTsKCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKCQkJZm9saW9fcHV0KGZvbGlvKTsKYGBgCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2h5Kj8gIEJlZm9yZSB0aGUgY2hhbmdlLCB3ZSB3ZXJlIGRvaW5nIHRoaXM6CgpgYGBjCgkJCWZvbGlvX2dldChmb2xpbyk7CgkJCXNwaW5fdW5sb2NrKHB0bCk7CgkJCWZvbGlvX2xvY2soZm9saW8pOwoJCQllcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7CgkJCWZvbGlvX3VubG9jayhmb2xpbyk7CgkJCWZvbGlvX3B1dChmb2xpbyk7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGJsb2NraW5nIG5hdHVyZSBvZiB0aGUgb3JpZ2luYWwgYGZvbGlvX2xvY2tgIHByZXNlbnRlZCBhIHBvdGVudGlhbCBwcm9ibGVtLCBwcm9iYWJseSBpbiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gU3BlY2lmaWNhbGx5LCBibG9ja2luZyB3aXRoIGBmb2xpb19sb2NrYCBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrcyBvciBvdGhlciBsb2NrIG9yZGVyaW5nIHByb2JsZW1zLCBsaWtlIGFuIEFCQkEgZGVhZGxvY2sgb3Igc2xlZXBpbmcgaW4gYW4gYXRvbWljIGNvbnRleHQgaWYgYHB0bGAgd2FzbiYjMzk7dCB1bmxvY2tlZCBvciBzb21lIG90aGVyIGxvY2sgb3JkZXJpbmcgaXNzdWUuIFRoZSBjb2RlICpkaWQqIHVubG9jayBgcHRsYCBiZWZvcmUsIGJ1dCBwZXJoYXBzIHRoZSBibG9ja2luZyB3YWl0IGl0c2VsZiB3YXMgdW5kZXNpcmFibGUuIGBmb2xpb190cnlsb2NrYCBpcyBub24tYmxvY2tpbmcsIHdoaWNoIGxpa2VseSBtaXRpZ2F0ZXMgdGhlIGlzc3VlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgdHJhZGUtb2ZmOiBhdm9pZCB0aGUgd2FpdCwgcG9zc2libHkgYXQgdGhlIGNvc3Qgb2YgZmFpbGluZyB0aGUgb3BlcmF0aW9uIGFuZCBuZWVkaW5nIHRvIGhhbmRsZSB0aGUgZmFpbHVyZS4KClRoZSBgaWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSkgZ290byBodWdlX3VubG9jaztgIGlzIHRoZSBrZXkuIFRoZSBjb2RlIG5vdyAqdHJpZXMqIHRvIGFjcXVpcmUgdGhlIGZvbGlvIGxvY2ssIGFuZCBpZiBpdCBmYWlscywgaXQgYnJhbmNoZXMgdG8gYGh1Z2VfdW5sb2NrYC4gQXQgdGhpcyBwb2ludCwgYHB0bGAgaXMgc3RpbGwgaGVsZCwgYXMgdGhlIGBzcGluX2xvY2tgIGNhbGwgaGFwcGVucyBiZWZvcmUgdGhlIHRyeWxvY2suIFNvIGBodWdlX3VubG9ja2AgaXMgZ29pbmcgdG8gaGF2ZSB0byBjYXJlZnVsbHkgbWFuYWdlIHRoZSBleGlzdGluZyBsb2NrIHN0YXRlLgoKSSBuZWVkIHRvIHNlZSB3aGF0IGBodWdlX3VubG9ja2AgZG9lcyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucy4gTGV0IG1lIHF1aWNrbHkganVtcCBvdmVyIHRvIGxpbmVzIDQ2MC01MDAsIEkgYmVsaWV2ZSB0aGF0IHNob3VsZCBob2xkIHRoZSBhbnN3ZXIuIEkgYmV0IHRoZSBjb2RlIHRoZXJlIGlzIGdvaW5nIHRvIGJhY2sgb3V0IG9mIHRoZSBvcGVyYXRpb25zIGl0IGhhcyBwZXJmb3JtZWQgYW5kIHJlbGVhc2UgcmVzb3VyY2VzIGluIGEgc2FmZSBtYW5uZXIgdG8gYXZvaWQgaXNzdWVzIGFuZCByZXR1cm4gdGhlIGNvcnJlY3QgZXJyb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRyZWd1bGFyX2ZvbGlvOlxuIDQ2MzpcdCNlbmRpZlxuIDQ2NDpcdFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBQQUdFX1NJWkUpO1xuIDQ2NTpcdHJlc3RhcnQ6XG4gNDY2Olx0XHRzdGFydF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cdTAwM2V2bV9tbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuIDQ2NzpcdFx0aWYgKCFzdGFydF9wdGUpXG4gNDY4Olx0XHRcdHJldHVybiAwO1xuIDQ2OTpcdFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4gNDcwOlx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuIDQ3MTpcdFx0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHtcbiA0NzI6XHRcdFx0bnIgPSAxO1xuIDQ3MzpcdFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gNDc0Olx0XG4gNDc1Olx0XHRcdGlmICgmIzQzOyYjNDM7YmF0Y2hfY291bnQgPT0gU1dBUF9DTFVTVEVSX01BWCkge1xuIDQ3NjpcdFx0XHRcdGJhdGNoX2NvdW50ID0gMDtcbiA0Nzc6XHRcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcbiA0Nzg6XHRcdFx0XHRcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIDQ3OTpcdFx0XHRcdFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7XG4gNDgwOlx0XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA0ODE6XHRcdFx0XHRcdGdvdG8gcmVzdGFydDtcbiA0ODI6XHRcdFx0XHR9XG4gNDgzOlx0XHRcdH1cbiA0ODQ6XHRcbiA0ODU6XHRcdFx0aWYgKHB0ZV9ub25lKHB0ZW50KSlcbiA0ODY6XHRcdFx0XHRjb250aW51ZTtcbiA0ODc6XHRcbiA0ODg6XHRcdFx0aWYgKCFwdGVfcHJlc2VudChwdGVudCkpXG4gNDg5Olx0XHRcdFx0Y29udGludWU7XG4gNDkwOlx0XG4gNDkxOlx0XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHZtYSwgYWRkciwgcHRlbnQpO1xuIDQ5MjpcdFx0XHRpZiAoIWZvbGlvIHx8IGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSlcbiA0OTM6XHRcdFx0XHRjb250aW51ZTtcbiA0OTQ6XHRcbiA0OTU6XHRcdFx0LypcbiA0OTY6XHRcdFx0ICogSWYgd2UgZW5jb3VudGVyIGEgbGFyZ2UgZm9saW8sIG9ubHkgc3BsaXQgaXQgaWYgaXQgaXMgbm90XG4gNDk3Olx0XHRcdCAqIGZ1bGx5IG1hcHBlZCB3aXRoaW4gdGhlIHJhbmdlIHdlIGFyZSBvcGVyYXRpbmcgb24uIE90aGVyd2lzZVxuIDQ5ODpcdFx0XHQgKiBsZWF2ZSBpdCBhcyBpcyBzbyB0aGF0IGl0IGNhbiBiZSBzd2FwcGVkIG91dCB3aG9sZS4gSWYgd2VcbiA0OTk6XHRcdFx0ICogZmFpbCB0byBzcGxpdCBhIGZvbGlvLCBsZWF2ZSBpdCBpbiBwbGFjZSBhbmQgYWR2YW5jZSB0byB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIGBodWdlX3VubG9ja2AgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGh1Z2VfdW5sb2NrYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQmIzM5O3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWFkdmlzZSwgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBoaW50IGlzICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdGlvbiDigJMgbWFkdmlzZSBkZWFscyB3aXRoIGhpbnRpbmcgYWJvdXQgbWVtb3J5IHVzYWdlLCBzbyBpdCYjMzk7cyBhIHZlcnkgbG9naWNhbCBwbGFjZSBmb3IgdGhpcyBmdW5jdGlvbiwgYXNzdW1pbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBodWdlIHBhZ2VzLCB3aGljaCBpdCBsaWtlbHkgaXMuIEkmIzM5O2xsIGdvIGNoZWNrIHRoYXQgZmlsZSBkaXJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV91bmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM2ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy0zOTgtXHRcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbm1tL21hZHZpc2UuYzozOTk6XHRcdFx0Z290byBodWdlX3VubG9jaztcbm1tL21hZHZpc2UuYy00MDAtXG4tLVxubW0vbWFkdmlzZS5jLTQwMy1cdFx0XHRcdFx0IXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpO1xubW0vbWFkdmlzZS5jOjQwNDpcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xubW0vbWFkdmlzZS5jLTQwNS1cdFx0fVxuLS1cbm1tL21hZHZpc2UuYy00MDktXHRcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG5tbS9tYWR2aXNlLmM6NDEwOlx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG5tbS9tYWR2aXNlLmMtNDExLVxuLS1cbm1tL21hZHZpc2UuYy00MTMtXHRcdGlmIChmb2xpb19tYXliZV9tYXBwZWRfc2hhcmVkKGZvbGlvKSlcbm1tL21hZHZpc2UuYzo0MTQ6XHRcdFx0Z290byBodWdlX3VubG9jaztcbm1tL21hZHZpc2UuYy00MTUtXG5tbS9tYWR2aXNlLmMtNDE2LVx0XHRpZiAocGFnZW91dF9hbm9uX29ubHlfZmlsdGVyIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbm1tL21hZHZpc2UuYzo0MTc6XHRcdFx0Z290byBodWdlX3VubG9jaztcbm1tL21hZHZpc2UuYy00MTgtXG4tLVxubW0vbWFkdmlzZS5jLTQyMi1cdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxubW0vbWFkdmlzZS5jOjQyMzpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG5tbS9tYWR2aXNlLmMtNDI0LVx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4tLVxubW0vbWFkdmlzZS5jLTQ1NC1cdFx0XHRmb2xpb19kZWFjdGl2YXRlKGZvbGlvKTtcbm1tL21hZHZpc2UuYzo0NTU6aHVnZV91bmxvY2s6XG5tbS9tYWR2aXNlLmMtNDU2LVx0XHRzcGluX3VubG9jayhwdGwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqUXVpY2sgQ2hlY2sgb24gYGh1Z2VfdW5sb2NrYCoqCgpPa2F5LCBzbyBgaHVnZV91bmxvY2tgIGlzIGRlYWQgc2ltcGxlLiBJdCBsb29rcyBsaWtlIGl0IGp1c3QgY2FsbHMgYHNwaW5fdW5sb2NrYCBvbiB0aGUgcGFzc2VkIGluIHByb3RlY3Rpb24gbG9jayAoYHB0bGApIGFuZCB0aGVuIHJldHVybnMgMC4gVGhhdOKAmXMgaXQuIE5vdywganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUgSeKAmW0gbm90IG1pc3NpbmcgYW55dGhpbmcgc3VidGxlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIG1ha2VzIHNlbnNlIG9mIHRoYXQgcmV0dXJuIHZhbHVlLiBMZXQgbWUganVzdCBnbGFuY2UgYXQgbGluZXMgNDU1LTQ1OSB0byBtYWtlIHN1cmUgaXQmIzM5O3MgZG9pbmcgd2hhdCBJIHRoaW5rIGl0IGlzLiBJIGNhbiYjMzk7dCB0aGluayBvZiBhbnkgb2J2aW91cyBpc3N1ZXMsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCB3aXRoIGxvdy1sZXZlbCBsb2NraW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHRcdFx0XHRcdGVsc2VcbiA0NTE6XHRcdFx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiA0NTI6XHRcdFx0XHR9XG4gNDUzOlx0XHRcdH0gZWxzZVxuIDQ1NDpcdFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIDQ1NTpcdGh1Z2VfdW5sb2NrOlxuIDQ1NjpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQ1NzpcdFx0XHRpZiAocGFnZW91dClcbiA0NTg6XHRcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xuIDQ1OTpcdFx0XHRyZXR1cm4gMDtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRyZWd1bGFyX2ZvbGlvOlxuIDQ2MzpcdCNlbmRpZlxuIDQ2NDpcdFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBQQUdFX1NJWkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDAxCgkJCQkJCQlvdXRwdXQ6IDIxNQoJCQkJCQkJdGhvdWdodHM6IDgxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hZHZpc2UgRm9saW8gTG9ja2luZyBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGluIGBtbS9tYWR2aXNlLmNgLCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgc3BlY2lmaWMgb3B0aW1pemF0aW9uIGluIHRoZSBsb2NraW5nIHN0cmF0ZWd5LiAgUHJldmlvdXNseSwgd2UgaGFkIHRoaXMgc2VxdWVuY2U6IGBmb2xpb19nZXRgLCBgc3Bpbl91bmxvY2socHRsKWAsIGBmb2xpb19sb2NrYCwgYHNwbGl0X2ZvbGlvYCwgYGZvbGlvX3VubG9ja2AsIGBmb2xpb19wdXRgLiBOb3csIHRoZSBgZm9saW9fbG9ja2AgaXMgcmVwbGFjZWQgd2l0aCBgZm9saW9fdHJ5bG9ja2Agd2hpbGUgc3RpbGwgaG9sZGluZyBgcHRsYC4gSWYgYGZvbGlvX3RyeWxvY2tgIGZhaWxzLCB3ZSBiYWlsIG91dCB1c2luZyBgZ290byBodWdlX3VubG9ja2AgYWZ0ZXIgcmVsZWFzaW5nIGBwdGxgLiBJZiBgZm9saW9fdHJ5bG9ja2Agc3VjY2VlZHMsIHdlIHRha2UgYSByZWZlcmVuY2UsIHJlbGVhc2UgYHB0bGAsIGNhbGwgYHNwbGl0X2ZvbGlvYCwgYW5kIHByb2NlZWQgYXMgYmVmb3JlLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uLCBhcyBhbHdheXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdCwgYW5kIG5vLCBpdCBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgaXQuIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvbiB0aGUgc3RhY2sgb3IgaGVhcC4gVGhlcmUmIzM5O3Mgbm8gZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIG5vIHJpc2sgb2Yga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLiBJIGNhbiYjMzk7dCBmaW5kIGFueSBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMgYmVpbmcgcmVhZCBvciB2YXJpYWJsZXMgYmVpbmcgcmVhZCB1bmluaXRpYWxpemVkLiBJdCYjMzk7cyBzb2xlbHkgcGFnZSB0YWJsZSBhbmQgZm9saW8gbG9ja2luZyBsb2dpYyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgLiBUaGlzIGlzIHJlYWxseSBhbGwgYWJvdXQgc3luY2hyb25pemF0aW9uLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgS01TQU4gcXVlc3Rpb24uICBSZW1lbWJlciB0aGUgcnVsZTogd2UgKmRvbiYjMzk7dCogcnVuIEtNU0FOIGlmIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgY2FuIGNhdGNoIHRoZSBidWdzLiAgV2UgbmVlZCBLTVNBTiBvbmx5IGlmIHdlIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOICp1bmlxdWVseSogZGV0ZWN0cy4gIFNvLCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGJ1Z3MgaGVyZT8gV2VsbCwgaXQmIzM5O3MgcHJldHR5IG11Y2ggYWxsIGFib3V0IGxvY2tpbmcsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMuICBBbmQsIHRob3NlIGFyZSAqZXhhY3RseSogd2hhdCBMT0NLREVQIGFuZCBLQVNBTiAoYW5kIHRoZSByZWZjb3VudCBjaGVja2VycykgYXJlIGRlc2lnbmVkIHRvIGRldGVjdC4KClNvLCBhY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhOiB0aGUgY29kZSBjaGFuZ2UgaXNuJiMzOTt0IHRvdWNoaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBzdHJpY3RseSBhYm91dCBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIEFsc28sIGFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCBhbmQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKU28sIHRoZSByZWFzb25pbmcgSSB3b3VsZCBwdXQgZm9yd2FyZCBpcyB0aGlzOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZvbGlvIGxvY2tpbmcgaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYC4gU3BlY2lmaWNhbGx5LCBpdCByZXBsYWNlcyBhIGJsb2NraW5nIGBmb2xpb19sb2NrKClgIGFmdGVyIGRyb3BwaW5nIHRoZSBwYWdlIHRhYmxlIGxvY2sgKGBwdGxgKSB3aXRoIGEgYGZvbGlvX3RyeWxvY2soKWAgYmVmb3JlIGRyb3BwaW5nIGBwdGxgLCBhbmQgaXQganVtcHMgdG8gYGh1Z2VfdW5sb2NrYCBvbiBmYWlsdXJlLiBUaGUgbWVtb3J5IHNhZmV0eSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgaXMgbWluaW1hbCBiZWNhdXNlIGl0IHJlbGF0ZXMgZXhjbHVzaXZlbHkgdG8gc3luY2hyb25pemF0aW9uIGFuZCB0aGUgcGFnZS10YWJsZS9mb2xpbyBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGUgbWFkdmlzZSBvcGVyYXRpb25zIChgTUFEVl9DT0xEYCAvIGBNQURWX1BBR0VPVVRgKS4gIFRoZXJlIGFyZSBubyBpbnRyb2R1Y2VkIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgaW5mbyBsZWFrcy4gIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZXMsIG9yIHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGFsbCBhZGVxdWF0ZWx5IGFkZHJlc3NlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHRoZSByZWZjb3VudCBjaGVja2Vycy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGZvY3VzZWQgb24gbG9ja2luZywgc3luY2hyb25pemF0aW9uLCBhbmQgZm9saW8gc3BsaXR0aW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgYE1BRFZfQ09MRGAgLyBgTUFEVl9QQUdFT1VUYCBvcGVyYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzLCBhbmQgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgY29uY3VycmVuY3kgb3IgcGFnZSByZWZjb3VudCBpc3N1ZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGZvY3VzZWQgb24gbG9ja2luZywgc3luY2hyb25pemF0aW9uLCBhbmQgZm9saW8gc3BsaXR0aW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgYE1BRFZfQ09MRGAgLyBgTUFEVl9QQUdFT1VUYCBvcGVyYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzLCBhbmQgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgY29uY3VycmVuY3kgb3IgcGFnZSByZWZjb3VudCBpc3N1ZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo0OTozMy41MDk2NjkyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTI0MDUzMDgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gICAgXCJtYWR2aXNlX2NvbGRcIixcbiAgICBcIm1hZHZpc2VfcGFnZW91dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgZm9jdXNlZCBvbiBsb2NraW5nLCBzeW5jaHJvbml6YXRpb24sIGFuZCBmb2xpbyBzcGxpdHRpbmcgY29udHJvbCBmbG93IGR1cmluZyBgTUFEVl9DT0xEYCAvIGBNQURWX1BBR0VPVVRgIG9wZXJhdGlvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMsIGFuZCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBwYWdlIHJlZmNvdW50IGlzc3VlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2VxdWVuY2UgaW4gbW0vbWFkdmlzZS5jIChtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UpIHdoZW4gc3BsaXR0aW5nIGh1Z2UgZm9saW9zIGZvciBwYXJ0aWFsIHJhbmdlcyBkdXJpbmcgTUFEVl9DT0xEIG9yIE1BRFZfUEFHRU9VVCBvcGVyYXRpb25zLiBJdCByZXBsYWNlcyBhIGJsb2NraW5nIGZvbGlvX2xvY2sgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayB3aXRoIGEgZm9saW9fdHJ5bG9jayB1bmRlciB0aGUgcGFnZSB0YWJsZSBsb2NrLiBUaGlzIGNvZGUgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIHZpYSB0aGUgbWFkdmlzZSBhbmQgcHJvY2Vzc19tYWR2aXNlIHN5c3RlbSBjYWxscyBvbiBUSFAgbWFwcGluZ3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBhbmQgYmVoYXZpb3IgdW5kZXIgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo0OTozMy41MDk2NzY2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3MzM0MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODdiZTA2NmQ4ODllMjQzMTA4MGFiNzEyN2M1MTdlYmYwN2NlYmRmN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMTo0OTozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCBmNzVhOWQxMzk5ODAzLi5hZTNkNzEyN2Q4N2M0IDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC00MTksOSArNDE5LDEwIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuIFxcdFxcdGlmIChuZXh0IC0gYWRkciAhPSBIUEFHRV9QTURfU0laRSkge1xcbiBcXHRcXHRcXHRpbnQgZXJyO1xcbiBcXG4rXFx0XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG4rXFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gXFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4tXFx0XFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuIFxcdFxcdFxcdGVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcXG4gXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NDk6MzQuMTMwMDc2MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY1NjI3MDkzMzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgICBcIm1hZHZpc2VfY29sZFwiLFxuICAgIFwibWFkdmlzZV9wYWdlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2VxdWVuY2UgaW4gbW0vbWFkdmlzZS5jIChtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UpIHdoZW4gc3BsaXR0aW5nIGh1Z2UgZm9saW9zIGZvciBwYXJ0aWFsIHJhbmdlcyBkdXJpbmcgTUFEVl9DT0xEIG9yIE1BRFZfUEFHRU9VVCBvcGVyYXRpb25zLiBJdCByZXBsYWNlcyBhIGJsb2NraW5nIGZvbGlvX2xvY2sgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayB3aXRoIGEgZm9saW9fdHJ5bG9jayB1bmRlciB0aGUgcGFnZSB0YWJsZSBsb2NrLiBUaGlzIGNvZGUgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIHZpYSB0aGUgbWFkdmlzZSBhbmQgcHJvY2Vzc19tYWR2aXNlIHN5c3RlbSBjYWxscyBvbiBUSFAgbWFwcGluZ3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBhbmQgYmVoYXZpb3IgdW5kZXIgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3YmUwNjZkODg5ZTI0MzEwODBhYjcxMjdjNTE3ZWJmMDdjZWJkZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMTo0OTozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggZjc1YTlkMTM5OTgwMy4uYWUzZDcxMjdkODdjNCAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtNDE5LDkgKzQxOSwxMCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRpZiAobmV4dCAtIGFkZHIgIT0gSFBBR0VfUE1EX1NJWkUpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuK1x0XHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4rXHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi1cdFx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbiBcdFx0XHRlcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG4gXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NDk6MzQuMTMwMDc4OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODE3MTU5MjA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtbS9tYWR2aXNlLmNgIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgYSBwYXRjaCBzdWJtaXR0ZWQgZm9yIGBtbS9tYWR2aXNlLmNgLiBUaGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvZGUuIEl0IHNlZW1zIHRoZSBwYXRjaCBpbnZvbHZlcyBzb21lIGNoYW5nZXMgYXJvdW5kIHRoZSBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbG9naWMgdGhhdCBoYW5kbGVzIHNwbGl0dGluZyBodWdlIHBhZ2VzLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCBhcHBlYXJzIGEgYGZvbGlvX3RyeWxvY2tgIGhhcyBiZWVuIGFkZGVkIGJlZm9yZSB0aGUgYHNwbGl0X2ZvbGlvYCBjYWxsLiBUaGVyZSdzIGFsc28gc29tZSByZW9yZGVyaW5nLiBDcml0aWNhbGx5LCB0aGUgYGZvbGlvX2xvY2tgIGFuZCBgc3Bpbl91bmxvY2tgIGFyZSBub3cgY29uZGl0aW9uYWxseSBhcHBsaWVkLiBUaGUgYGZvbGlvX3RyeWxvY2tgIHByb2JhYmx5IHByZXZlbnRzIGEgZGVhZGxvY2suXG5cbkxldCdzIHF1aWNrbHkgcmVmcmVzaCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNDE5LCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMsIGJ5IHJlYWRpbmcgdGhlIGNvZGUgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgY2xhcmlmeSB0aGUgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29kZSBibG9jayBhbmQgdGhlIHJlYXNvbiBmb3IgdGhlIGxvY2sgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjQ5OjUyLjMwMTY3MzgzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzkwOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHRcXHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIEhQQUdFX1BNRF9TSVpFKTtcXG4gMzkzOlxcdFxcdFxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbiAzOTQ6XFx0XFx0XFx0aWYgKCFwdGwpXFxuIDM5NTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzk2OlxcdFxcbiAzOTc6XFx0XFx0XFx0b3JpZ19wbWQgPSAqcG1kO1xcbiAzOTg6XFx0XFx0XFx0aWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKVxcbiAzOTk6XFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XFxuIDQwMjpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFxcdTAwMjZcXHUwMDI2XFxuIDQwMzpcXHRcXHRcXHRcXHRcXHRcXHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XFxuIDQwNDpcXHRcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbiA0MDU6XFx0XFx0XFx0fVxcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRcXHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdFxcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXFxuIDQxMDpcXHRcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRcXHQvKiBEbyBub3QgaW50ZXJmZXJlIHdpdGggb3RoZXIgbWFwcGluZ3Mgb2YgdGhpcyBmb2xpbyAqL1xcbiA0MTM6XFx0XFx0XFx0aWYgKGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoZm9saW8pKVxcbiA0MTQ6XFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gNDE1OlxcdFxcbiA0MTY6XFx0XFx0XFx0aWYgKHBhZ2VvdXRfYW5vbl9vbmx5X2ZpbHRlciBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG4gNDE3OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdFxcdGlmIChuZXh0IC0gYWRkciAhPSBIUEFHRV9QTURfU0laRSkge1xcbiA0MjA6XFx0XFx0XFx0XFx0aW50IGVycjtcXG4gNDIxOlxcdFxcbiA0MjI6XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG4gNDIzOlxcdFxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDQyNDpcXHRcXHRcXHRcXHRmb2xpb19nZXQoZm9saW8pO1xcbiA0MjU6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gNDI2OlxcdFxcdFxcdFxcdGVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcXG4gNDI3OlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIDQyODpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0Mjk6XFx0XFx0XFx0XFx0aWYgKCFlcnIpXFxuIDQzMDpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlZ3VsYXJfZm9saW87XFxuIDQzMTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDMyOlxcdFxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0XFx0aWYgKCFwYWdlb3V0IFxcdTAwMjZcXHUwMDI2IHBtZF95b3VuZyhvcmlnX3BtZCkpIHtcXG4gNDM1OlxcdFxcdFxcdFxcdHBtZHBfaW52YWxpZGF0ZSh2bWEsIGFkZHIsIHBtZCk7XFxuIDQzNjpcXHRcXHRcXHRcXHRvcmlnX3BtZCA9IHBtZF9ta29sZChvcmlnX3BtZCk7XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdFxcdFxcdHNldF9wbWRfYXQobW0sIGFkZHIsIHBtZCwgb3JpZ19wbWQpO1xcbiA0Mzk6XFx0XFx0XFx0XFx0dGxiX3JlbW92ZV9wbWRfdGxiX2VudHJ5KHRsYiwgcG1kLCBhZGRyKTtcXG4gNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XFxuIDQ0MzpcXHRcXHRcXHRmb2xpb190ZXN0X2NsZWFyX3lvdW5nKGZvbGlvKTtcXG4gNDQ0OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykpXFxuIDQ0NTpcXHRcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuIDQ0NjpcXHRcXHRcXHRpZiAocGFnZW91dCkge1xcbiA0NDc6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX2lzb2xhdGVfbHJ1KGZvbGlvKSkge1xcbiA0NDg6XFx0XFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxcbiA0NDk6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xcbiA0NTA6XFx0XFx0XFx0XFx0XFx0ZWxzZVxcbiA0NTE6XFx0XFx0XFx0XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZmb2xpb19saXN0KTtcXG4gNDUyOlxcdFxcdFxcdFxcdH1cXG4gNDUzOlxcdFxcdFxcdH0gZWxzZVxcbiA0NTQ6XFx0XFx0XFx0XFx0Zm9saW9fZGVhY3RpdmF0ZShmb2xpbyk7XFxuIDQ1NTpcXHRodWdlX3VubG9jazpcXG4gNDU2OlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDQ1NzpcXHRcXHRcXHRpZiAocGFnZW91dClcXG4gNDU4OlxcdFxcdFxcdFxcdHJlY2xhaW1fcGFnZXMoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbiA0NTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjQ5OjUyLjMwMTc5MzYwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU3MzA4MTQ3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gVGhlIG5hbWUgaXRzZWxmIGlzIGZhaXJseSBkZXNjcmlwdGl2ZSwgc3VnZ2VzdGluZyBpdCdzIHJlbGF0ZWQgdG8gbWVtb3J5IGFkdmljZSBhbmQgaGFuZGxpbmcgcGFnZS1vdXRzIG9yIFwiY29sZFwiIHBhZ2VzIGF0IHRoZSBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIGxldmVsLiBCdXQgY29udGV4dCBpcyBraW5nLCBzbyBJIG5lZWQgdG8gc2VlICpob3cqIGl0J3MgYmVpbmcgdXNlZCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgbG9naWMgbG9va3MgbGlrZS5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ2xsIGp1bXAgaW50byBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAzNTAtNDAwLiBUaGF0IHJhbmdlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBmZWVsIGZvciB0aGUgYnJvYWRlciBpbXBsZW1lbnRhdGlvbiwgYW55IHN1cHBvcnRpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGNhbGxpbmcgY29udmVudGlvbnMuIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIHJldmVhbCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCB0aGlzIG1hZHZpc2UgZnVuY3Rpb24gaXMgaW52b2tlZCBhbmQgd2hhdCBvdGhlciBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgaW4gY29uanVuY3Rpb24gd2l0aCBpdHMgZXhlY3V0aW9uLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgdGhhdCBtaWdodCBiZSBhZGRyZXNzZWQgYXQgdGhpcyBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NDk6NTguMDMyNjEyNzA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21hZHZpc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTA6XFx0XFx0cmV0dXJuIGZpbGVfb3duZXJfb3JfY2FwYWJsZSh2bWEtXFx1MDAzZXZtX2ZpbGUpIHx8XFxuIDM1MTpcXHRcXHQgICAgICAgZmlsZV9wZXJtaXNzaW9uKHZtYS1cXHUwMDNldm1fZmlsZSwgTUFZX1dSSVRFKSA9PSAwO1xcbiAzNTI6XFx0fVxcbiAzNTM6XFx0XFxuIDM1NDpcXHRzdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiAzNTU6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlcCxcXG4gMzU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgcHRlX3QgKnB0ZW50cClcXG4gMzU3OlxcdHtcXG4gMzU4OlxcdFxcdGludCBtYXhfbnIgPSAoZW5kIC0gYWRkcikgLyBQQUdFX1NJWkU7XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdHJldHVybiBmb2xpb19wdGVfYmF0Y2hfZmxhZ3MoZm9saW8sIE5VTEwsIHB0ZXAsIHB0ZW50cCwgbWF4X25yLFxcbiAzNjE6XFx0XFx0XFx0XFx0XFx0ICAgICBGUEJfTUVSR0VfWU9VTkdfRElSVFkpO1xcbiAzNjI6XFx0fVxcbiAzNjM6XFx0XFxuIDM2NDpcXHRzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbiAzNjU6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gMzY2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiAzNjc6XFx0e1xcbiAzNjg6XFx0XFx0c3RydWN0IG1hZHZpc2Vfd2Fsa19wcml2YXRlICpwcml2YXRlID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4gMzY5OlxcdFxcdHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIgPSBwcml2YXRlLVxcdTAwM2V0bGI7XFxuIDM3MDpcXHRcXHRib29sIHBhZ2VvdXQgPSBwcml2YXRlLVxcdTAwM2VwYWdlb3V0O1xcbiAzNzE6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0bGItXFx1MDAzZW1tO1xcbiAzNzI6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVxcdTAwM2V2bWE7XFxuIDM3MzpcXHRcXHRwdGVfdCAqc3RhcnRfcHRlLCAqcHRlLCBwdGVudDtcXG4gMzc0OlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4gMzc1OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xcbiAzNzY6XFx0XFx0TElTVF9IRUFEKGZvbGlvX2xpc3QpO1xcbiAzNzc6XFx0XFx0Ym9vbCBwYWdlb3V0X2Fub25fb25seV9maWx0ZXI7XFxuIDM3ODpcXHRcXHR1bnNpZ25lZCBpbnQgYmF0Y2hfY291bnQgPSAwO1xcbiAzNzk6XFx0XFx0aW50IG5yO1xcbiAzODA6XFx0XFxuIDM4MTpcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIDM4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRwYWdlb3V0X2Fub25fb25seV9maWx0ZXIgPSBwYWdlb3V0IFxcdTAwMjZcXHUwMDI2ICF2bWFfaXNfYW5vbnltb3VzKHZtYSkgXFx1MDAyNlxcdTAwMjZcXG4gMzg1OlxcdFxcdFxcdFxcdFxcdFxcdCFjYW5fZG9fZmlsZV9wYWdlb3V0KHZtYSk7XFxuIDM4NjpcXHRcXG4gMzg3OlxcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gMzg4OlxcdFxcdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kKSkge1xcbiAzODk6XFx0XFx0XFx0cG1kX3Qgb3JpZ19wbWQ7XFxuIDM5MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0XFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBIUEFHRV9QTURfU0laRSk7XFxuIDM5MzpcXHRcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcXG4gMzk0OlxcdFxcdFxcdGlmICghcHRsKVxcbiAzOTU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdFxcdG9yaWdfcG1kID0gKnBtZDtcXG4gMzk4OlxcdFxcdFxcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcXG4gMzk5OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjQ5OjU4LjAzMjc5ODAzOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NDE3OTg3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQncyBhbGwgd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmxvY2suICBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIFRoaXMgaXMgdXNlZCB3aXRoIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCB3aGljaCBpcyB1c2VkIGZvciBgTUFEVl9DT0xEYCBhbmQgYE1BRFZfUEFHRU9VVGAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGlzIG1hZHZpc2Ugc3lzdGVtIGNhbGwgY2FuIGRpcmVjdGx5IG1hbmlwdWxhdGUgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJIGtub3cgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhcmUgYSBwb3RlbnRpYWwgcG9pbnQgb2YgY29udGVudGlvbi5cblxuSSBzZWUgYSBzcGVjaWZpYyBjaGFuZ2Ugd2l0aGluIGBtbS9tYWR2aXNlLmNgLiAgUHJldmlvdXNseSwgdGhlIGNvZGUgZGlkIGEgYGZvbGlvX2dldGAsIHRoZW4gYHNwaW5fdW5sb2NrKHB0bClgLCBhbmQgdGhlbiBhIGJsb2NraW5nIGBmb2xpb19sb2NrKGZvbGlvKWAuIE5vdywgdGhlcmUncyBhIGBmb2xpb190cnlsb2NrKGZvbGlvKWAgKmJlZm9yZSogdGhlIGBzcGluX3VubG9jayhwdGwpYC4gSWYgdGhlIHRyeWxvY2sgZmFpbHMsIGl0IGp1bXBzIHRvIGBodWdlX3VubG9ja2Agd2hpY2ggZG9lcyBhIGBzcGluX3VubG9jayhwdGwpYC4gIFRoaXMgaXMgYSBiaWcgY2x1ZSDigJMgaXQgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBhdm9pZCBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBpbXByb3ZlIGxvY2tpbmcgb3JkZXIgaGVyZS4gVGhlIG9sZCBjb2RlIHdhcyBkcm9wcGluZyBgcHRsYCBiZWZvcmUgYWNxdWlyaW5nIGBmb2xpb19sb2NrYCwgd2hpY2ggbWF5IGxlYWQgdG8gcG9zc2libGUgZGVhZGxvY2suXG5cbk5vdywgaXMgdGhpcyBldmVuIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgVGhpcyBoYXBwZW5zIHdoZW4geW91IGNhbGwgYG1hZHZpc2UoTUFEVl9QQUdFT1VUKWAgb3IgYG1hZHZpc2UoTUFEVl9DT0xEKWAgb24gYSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgcmFuZ2UsIHNwZWNpZmljYWxseSBpZiB0aGUgcmFuZ2UgZG9lc24ndCBjb3ZlciB0aGUgKmVudGlyZSogaHVnZSBwYWdlLiBUaGlzIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBtYWR2aXNlKClgIHN5c2NhbGwuIFRoaXMgaXMgYSBiaWcgd2luIGZvciB0ZXN0aW5nIGJlY2F1c2UgdGhpcyBjYW4gYmUgZWFzaWx5IHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSFcblxuTGV0IG1lIG1ha2Ugc3VyZSBJJ20gY2FwdHVyaW5nIGFsbCB0aGUgc2FsaWVudCBwb2ludHM6XG5cbiogICAqKlJlYWNoYWJpbGl0eToqKiBEaXJlY3QgdXNlcnNwYWNlIGFjY2VzcyB0aHJvdWdoIGBtYWR2aXNlKClgLCBib3RoIHdpdGggYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgIHdpdGhpbiBgcHJvY2Vzc19tYWR2aXNlYCBhbmQgYG1hZHZpc2VgLlxuKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGBtbS9gKS5cbiogICAqKkxvY2tpbmcgQ2hhbmdlczoqKiBDcml0aWNhbCBjaGFuZ2UgZnJvbSBhIGJsb2NraW5nIGBmb2xpb19sb2NrYCBhZnRlciByZWxlYXNpbmcgdGhlIHNwaW5sb2NrIHRvIGBmb2xpb190cnlsb2NrYCAqd2hpbGUqIGhvbGRpbmcgdGhlIHNwaW5sb2NrLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGlzIG1vZGlmaWNhdGlvbiBpcyAqKmRlZmluaXRlbHkgV29ydGhGdXp6aW5nPXRydWUqKiBiZWNhdXNlIG9mIHRoZSB1c2VyIHNwYWNlIGFjY2Vzc2liaWxpdHkgYW5kIGxvY2tpbmcgY2hhbmdlcywgcG90ZW50aWFsbHkgZXhwb3NpbmcgcmFjZSBjb25kaXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgY29kZS4gTGV0IG1lIGNoZWNrIHRoZSBgI2lmZGVmYCBibG9jayBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGluIHBhcnRpY3VsYXIgZnJvbSBsaW5lcyA0NTUtNDc1IHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIHdlbGwtZm9ybWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MDMuOTc0NjAxMjA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21hZHZpc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTU6XFx0aHVnZV91bmxvY2s6XFxuIDQ1NjpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA0NTc6XFx0XFx0XFx0aWYgKHBhZ2VvdXQpXFxuIDQ1ODpcXHRcXHRcXHRcXHRyZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG4gNDU5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0NjA6XFx0XFx0fVxcbiA0NjE6XFx0XFxuIDQ2MjpcXHRyZWd1bGFyX2ZvbGlvOlxcbiA0NjM6XFx0I2VuZGlmXFxuIDQ2NDpcXHRcXHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIFBBR0VfU0laRSk7XFxuIDQ2NTpcXHRyZXN0YXJ0OlxcbiA0NjY6XFx0XFx0c3RhcnRfcHRlID0gcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtXFx1MDAzZXZtX21tLCBwbWQsIGFkZHIsIFxcdTAwMjZwdGwpO1xcbiA0Njc6XFx0XFx0aWYgKCFzdGFydF9wdGUpXFxuIDQ2ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDY5OlxcdFxcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xcbiA0NzA6XFx0XFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4gNDcxOlxcdFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgZW5kOyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcXG4gNDcyOlxcdFxcdFxcdG5yID0gMTtcXG4gNDczOlxcdFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0XFx0aWYgKCsrYmF0Y2hfY291bnQgPT0gU1dBUF9DTFVTVEVSX01BWCkge1xcbiA0NzY6XFx0XFx0XFx0XFx0YmF0Y2hfY291bnQgPSAwO1xcbiA0Nzc6XFx0XFx0XFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XFxuIDQ3ODpcXHRcXHRcXHRcXHRcXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcXG4gNDc5OlxcdFxcdFxcdFxcdFxcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDowMy45NzQ4ODAyMzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODI5OTgyMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgeW91IHJlcXVlc3RlZCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQW5hbHl6aW5nIGEgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKlxuXG5ZZXMsIGNvbmZpcm1lZCEgVGhlIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIG9uIGxpbmUgMzg3IHRocm91Z2ggNDYzIGlzIGFjdGluZyBhcyBhIGd1YXJkLiBUaGlzIG1lYW5zIHRoZSBlbnRpcmUgY29kZSBibG9jayBpdCBlbmNsb3NlcyBpcyAqb25seSogaW5jbHVkZWQgaW4gdGhlIGNvbXBpbGF0aW9uIGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gYWxyZWFkeSBhd2FyZSBvZiB0aGUgaW1wb3J0YW5jZSBvZiB0aGVzZSBraW5kcyBvZiBndWFyZHMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXRzZWxmIGhhcyBhbnkgdW51c3VhbCBvciBjcml0aWNhbCBkZXBlbmRlbmNpZXMgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiBldmFsdWF0aW5nIGNvbmRpdGlvbmFsIGNvZGUuIFRoZXJlZm9yZSwgSSB3aWxsIGltbWVkaWF0ZWx5IHJ1biBhIGdyZXAgY29tbWFuZCB0byBzZWFyY2ggdGhyb3VnaCBgbW0vS2NvbmZpZ2AsIHVzaW5nIGBjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFzIHRoZSBzZWFyY2ggdGVybSwgYW5kIGZpbmQgd2hlcmUgaXQgaXMgZGVmaW5lZCwgYW55IGRlcGVuZGVuY2llcywgYW5kL29yIG90aGVyIGltcG9ydGFudCBub3RlcyB0aGF0IHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBmZWx0IHdlcmUgbmVjZXNzYXJ5IHRvIGluY2x1ZGUgaW4gdGhlIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjA2LjgwNDg2NDc0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk5MTc3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04Mjc9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgyOS1cXG5tbS9LY29uZmlnOjgzMDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzEtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODQ4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTMtXFxubW0vS2NvbmZpZzo4NTQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU1LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODYwLVxcbm1tL0tjb25maWc6ODYxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjItXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODY5LVxcbm1tL0tjb25maWc6ODcwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04Nzc9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg4Ni1cXG5tbS9LY29uZmlnOjg4NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODg4LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OTYtXFxubW0vS2NvbmZpZzo4OTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04OTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDQtXFxubW0vS2NvbmZpZzo5MDU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkwNi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTIyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzEtXFxubW0vS2NvbmZpZzo5MzI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzMy1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQwLVxcbm1tL0tjb25maWc6OTQxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQyLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ4LVxcbm1tL0tjb25maWc6OTQ5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTAtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjA2LjkwNDc4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzMxNjU0Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyBEZXBlbmRlbmNpZXMgb2YgVFJBTlNQQVJFTlRfSFVHRVBBR0UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZHJpdmluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBgbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCB0aGF0IGZpbGUuIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwncyBLY29uZmlnIHN0cnVjdHVyZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBhbnkgYHNlbGVjdGAgc3RhdGVtZW50cywgYW5kIGFueSBvYnZpb3VzIGBkZWZhdWx0YCB2YWx1ZXMgdGhhdCBpbmZsdWVuY2Ugd2hldGhlciB0aGUgb3B0aW9uIGlzIGV4cG9zZWQgb3IgZW5hYmxlZC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl04oCZcyBvZnRlbiBhIHdlYiBvZiBkZXBlbmRlbmNpZXMsIGFuZCB0aGlzIG9uZSBjb3VsZCBiZSB0aWVkIGludG8gQ1BVIGZlYXR1cmVzLCBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zLCBvciBldmVuIG90aGVyIGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHNwZWNpZmljIENQVSBmZWF0dXJlcywgTlVNQSBjb25maWd1cmF0aW9ucywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIGdlbmVyaWMgaGFyZHdhcmUgZmxhZ3MgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGUgZGlzcGxheSBvZiB0aGlzIG9wdGlvbi4gQWZ0ZXIgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhYmxlIHRvIHJlYXNvbiBob3cgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCwgYW5kIHBvdGVudGlhbGx5IHdoYXQncyBiZWhpbmQgaXRzIGFjdGl2YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDowOS4yMzY0NDY5OTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODI4LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODI4OlxcdFxcdGRlZl9ib29sIG5cXG4gODI5OlxcdFxcbiA4MzA6XFx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4MzE6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gODMyOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIDgzMzpcXHRcXHRzZWxlY3QgQ09NUEFDVElPTlxcbiA4MzQ6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiA4MzU6XFx0XFx0c2VsZWN0IE1NX0lEXFxuIDgzNjpcXHRcXHRoZWxwXFxuIDgzNzpcXHRcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG4gODM4OlxcdFxcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxcbiA4Mzk6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cXG4gODQwOlxcdFxcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcXG4gODQxOlxcdFxcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xcbiA4NDI6XFx0XFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXFxuIDg0NTpcXHRcXG4gODQ2OlxcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDg0NzpcXHRcXG4gODQ4OlxcdGNob2ljZVxcbiA4NDk6XFx0XFx0cHJvbXB0IFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXFxcIlxcbiA4NTA6XFx0XFx0ZGVmYXVsdCBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG4gODUxOlxcdFxcdGhlbHBcXG4gODUyOlxcdFxcdCAgU2VsZWN0cyB0aGUgc3lzZnMgZGVmYXVsdHMgZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjA5LjIzNjY3OTk4N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NzM3MTM5MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIG9uIGFtZDY0KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBvbiBhbWQ2NCBhcmNoaXRlY3R1cmUsIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgZW5hYmxlZC4gIFRoYXQgbWVhbnMgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24gSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gaXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gR29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIHJlbGF0ZWQgdG8gdGhpcyBpbiB0aGUgY29kZS4gSSdtIGdvaW5nIHRvIGNoZWNrIGBGb2N1c1N5bWJvbHNgIHRvIGdldCBzb21lIG1vcmUgY29udGV4dCBvbiB0aGUgY2hhbmdlcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSB3aWxsIG5vdyBsb29rIGF0IGBtbS9tYWR2aXNlLmNgIHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgY2FsbCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhcyB0aGF0J2xsIGxpa2VseSBnaXZlIG1lIHRoZSBtb3N0IGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMTIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDoxNC45NzM4MjM3NjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzYzNTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWFkdmlzZS5jLTM2My1cXG5tbS9tYWR2aXNlLmM6MzY0OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxubW0vbWFkdmlzZS5jLTM2NS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWFkdmlzZS5jPTU4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XFxubW0vbWFkdmlzZS5jOjU4NDpcXHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxcbm1tL21hZHZpc2UuYy01ODUtXFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjE1LjAzODE5NTYyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTMwNzMyNzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBjb2xkX3dhbGtfb3BzYCBpbiBgbW0vbWFkdmlzZS5jYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL21hZHZpc2UuY2AgYWdhaW4sIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBjb2xkX3dhbGtfb3BzYC4gSSdtIHN0YXJ0aW5nIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSB3aGVyZSBhbmQgaG93IHRoaXMgcGFydGljdWxhciBgd2Fsa19vcHNgIHN0cnVjdCBpcyBiZWluZyBlbXBsb3llZCB3aXRoaW4gdGhlIGBtYWR2aXNlYCBzdWJzeXN0ZW0uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGNvbGQgcGFnZXMuXG5cbkknbSB0aGlua2luZywgXCJXaGVyZSBkbyB3ZSBkZWZpbmUgdGhlIG1hZHZpc2U/XCJcblxuSSBzdXNwZWN0IHRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCBmb3IgZGVidWdnaW5nIGEgcmVsYXRlZCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU1MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjE2Ljk2ODkzMjg0MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwMzAxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sZF93YWxrX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTM2ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWFkdmlzZS5jLTU4Mi1cXG5tbS9tYWR2aXNlLmM6NTgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcXG5tbS9tYWR2aXNlLmMtNTg0LVxcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXFxuLS1cXG5tbS9tYWR2aXNlLmM9NTg4PXN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNTk5LVxcdHRsYl9zdGFydF92bWEodGxiLCB2bWEpO1xcbm1tL21hZHZpc2UuYzo2MDA6XFx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCwgXFx1MDAyNmNvbGRfd2Fsa19vcHMsXFxubW0vbWFkdmlzZS5jLTYwMS1cXHRcXHRcXHRcXHUwMDI2d2Fsa19wcml2YXRlKTtcXG4tLVxcbm1tL21hZHZpc2UuYz02MjY9c3RhdGljIHZvaWQgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21hZHZpc2UuYy02MzUtXFx0dGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSk7XFxubW0vbWFkdmlzZS5jOjYzNjpcXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLCBcXHUwMDI2Y29sZF93YWxrX29wcyxcXG5tbS9tYWR2aXNlLmMtNjM3LVxcdFxcdFxcdCAgICBcXHUwMDI2d2Fsa19wcml2YXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MTcuMDI3OTcwMjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQwODQzODE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgQWR2aXNlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgbWFkdmlzZV9jb2xkX3BhZ2VfcmFuZ2VgIGFuZCBgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2VgIGZ1bmN0aW9uIGludGVybmFsbHkuIEl0IGxvb2tzIGxpa2UgYm90aCBvZiB0aGVzZSwgYXQgdGhlaXIgY29yZSwgdXRpbGl6ZSBgd2Fsa19wYWdlX3JhbmdlX3ZtYWAuIFRoYXQncyB0aGUga2V5IGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBpdGVyYXRpb24gYWNyb3NzIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhLiBBbmQgdGhlIGludGVyZXN0aW5nIHRoaW5nIGlzLCB0aGV5IGZlZWQgaXQgYFx1MDAyNmNvbGRfd2Fsa19vcHNgLCBpbXBseWluZyB0aGV5J3JlIHVzaW5nIGEgc3BlY2lmaWMgc2V0IG9mIG9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBcImNvbGRcIiBvciBcInBhZ2VvdXRcIiBtZW1vcnkgcmVnaW9ucy4gVGhlIGNyaXRpY2FsIG9wZXJhdGlvbiBhcHBlYXJzIHRvIGJlIGAucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYXMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFkdmlzZSBvcGVyYXRpb25zIGFyZSBhcHBsaWVkIHRvIGEgcmFuZ2Ugb2YgcGFnZXMuIFNvLCBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoZXNlIG1hZHZpc2UgY2FsbHMgYXJlIGFjdHVhbGx5IG9yaWdpbmF0aW5nLiBUaW1lIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGNoYWluIGFuZCBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MTkuNDM2NDExMTgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM3OTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlXyhjb2xkfHBhZ2VvdXQpX3BhZ2VfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz01ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xcbi0tXFxubW0vbWFkdmlzZS5jLTU4Ny1cXG5tbS9tYWR2aXNlLmM6NTg4OnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTU4OS1cXHRcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYz02MTA9c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTYxOS1cXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VtbSk7XFxubW0vbWFkdmlzZS5jOjYyMDpcXHRtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtNjIxLVxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbi0tXFxubW0vbWFkdmlzZS5jLTYyNS1cXG5tbS9tYWR2aXNlLmM6NjI2OnN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTYyNy1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21hZHZpc2UuYz02NDE9c3RhdGljIGxvbmcgbWFkdmlzZV9wYWdlb3V0KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTY2MC1cXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VtbSk7XFxubW0vbWFkdmlzZS5jOjY2MTpcXHRtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShcXHUwMDI2dGxiLCB2bWEsIFxcdTAwMjZtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZSk7XFxubW0vbWFkdmlzZS5jLTY2Mi1cXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MTkuNTA3Nzk3ODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA1MjcxODE4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIFN5bWJvbCBVc2FnZSBhbmQgSW5saW5pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYSBzdGF0aWMgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiB0aGUgY29tcGlsZXIgaXMgaW5saW5pbmcgaXQuIFdpdGggR0NDL0NsYW5nLCBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgbGlrZSBob3cgaXQncyBkb25lIHdpdGhpbiB0aGlzIGBjb2xkX3dhbGtfb3BzLnBtZF9lbnRyeWAgc3RydWN0LCBhcmUgbm90IGZ1bGx5IGVsaW1pbmF0ZWQgb3IgaW5saW5lZCBiZWNhdXNlIHRoZWlyIGFkZHJlc3MgaXMgdGFrZW4uIFRoaXMgbWVhbnMgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgKndpbGwqIGhhdmUgYSBzeW1ib2wgaW4gdm1saW51eC4gR29vZCB0byBrbm93LlxuXG5JIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBsb29rIGF0IGBtYWR2aXNlX2NvbGRgLCBgbWFkdmlzZV9wYWdlb3V0YCwgYG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlYCwgYW5kIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAgd2hpbGUgSSdtIGF0IGl0LCBqdXN0IGZvciBjb21wbGV0ZW5lc3MuIEFyZSB0aGVzZSBmdW5jdGlvbnMgYWxsIG92ZXIgdGhlIHBsYWNlPyBObywgdGhhbmtmdWxseSwgdGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIGBtYWR2aXNlYCBjYWxscyB3aXRoIGBNQURWX0NPTERgIGFuZCBgTUFEVl9QQUdFT1VUYCBmbGFncy4gU2ltaWxhcmx5LCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBpdHNlbGYgaXMgb25seSBzcGVjaWZpYyB0byB0aGUgY29sZC9wYWdlb3V0IG1hZHZpc2UgdXNlIGNhc2VzLlxuXG5UbyBnYWluIGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWFzb25pbmcgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBnaXQgbG9nIGZvciBhbnkgcmVsZXZhbnQgcGF0Y2hlcy4gU2VlaW5nIHRoZSBjb21taXQgaGlzdG9yeSB3b3VsZCBnaXZlIG1lIHZhbHVhYmxlIGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjIyLjU2MDUxOTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NzE5NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3RyeWxvY2tcXFxcKGZvbGlvXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNjQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy00MjEtXFxubW0vbWFkdmlzZS5jOjQyMjpcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbm1tL21hZHZpc2UuYy00MjMtXFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4tLVxcbm1tL21hZHZpc2UuYy01MTAtXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxubW0vbWFkdmlzZS5jOjUxMTpcXHRcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbm1tL21hZHZpc2UuYy01MTItXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9tYWR2aXNlLmM9NjY3PXN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNzM3LVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL21hZHZpc2UuYzo3Mzg6XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG5tbS9tYWR2aXNlLmMtNzM5LVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vbWFkdmlzZS5jLTc1OS1cXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XFxubW0vbWFkdmlzZS5jOjc2MDpcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbm1tL21hZHZpc2UuYy03NjEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjIyLjYzOTI0NTkzOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NjkxNDA0MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFsdGVycyB0aGUgbG9ja2luZyBzZXF1ZW5jZSB3aXRoaW4gYG1tL21hZHZpc2UuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHNwbGl0dGluZyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGR1cmluZyBgTUFEVl9DT0xEYCBvciBgTUFEVl9QQUdFT1VUYCBjYWxscy4gVGhlIGNvZGUgc25pcHBldCBiZWZvcmUgdGhlIGNvbW1pdCB1c2VkIGEgYGZvbGlvX2xvY2tgIGFmdGVyIGBzcGluX3VubG9jayhwdGwpYCwgd2hpY2ggaXMgYSBkYW5nZXJvdXMgcGF0dGVybi4gSSBzZWUgdGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGBmb2xpb190cnlsb2NrYCBiZWZvcmUgZHJvcHBpbmcgYHB0bGAsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBzaGlmdC5cblxuVGhlIGluaXRpYWwgY29uY2VybiwgYW5kIHRoZSByZWFzb24gZm9yIHRoZSBjaGFuZ2UsIGlzIHRvIGF2b2lkIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCBkZWFkbG9jay4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgd2luZG93IGJldHdlZW4gZHJvcHBpbmcgdGhlIFBNRCB0YWJsZSBsb2NrIChgcHRsYCkgYW5kIGFjcXVpcmluZyB0aGUgYmxvY2tpbmcgYGZvbGlvX2xvY2tgLiBEdXJpbmcgdGhpcyB3aW5kb3csIHRoZSBmb2xpbyBjb3VsZCBoYXZlIGJlZW4gbW9kaWZpZWQgKHNwbGl0LCBmcmVlZCwgZXRjLikgY2F1c2luZyBwb3NzaWJsZSBkYXRhIGNvcnJ1cHRpb24gb3IgZGVhZGxvY2suIFRoaXMgbmV3IHBhdGNoIGFkZHJlc3NlcyB0aGF0IGJ5IGZpcnN0IHRyeWluZyB0byBsb2NrIHRoZSBmb2xpbyB3aXRoIGBmb2xpb190cnlsb2NrYC4gSWYgdGhhdCBzdWNjZWVkcywgd2UgcHJvY2VlZCB3aXRoIHRoZSBzcGxpdCBhZnRlciByZWxlYXNpbmcgYHB0bGAuIElmIHRoZSB0cnlsb2NrIGZhaWxzLCB3ZSBiYWlsLCB3aGljaCBhdm9pZHMgdGhlIHJhY2UgYW5kIHBvdGVudGlhbCBkZWFkbG9jay5cblxuVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgZm9saW9fdHJ5bG9ja2AgZG9lc24ndCBzbGVlcCwgc28gY2FsbGluZyBpdCB3aGlsZSBob2xkaW5nIGBwdGxgIGlzIHNhZmUuIFRoaXMgZWxpbWluYXRlcyB0aGUgcmFjZSBjb25kaXRpb24gdGhhdCBleGlzdGVkIHByZXZpb3VzbHkuIE5vdyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY2hhbmdlIGZ1enphYmxlP1xuXG5UaGUgYW5zd2VyIGlzIGEgY2xlYXIgXCJ5ZXMuXCIgVGhpcyBjaGFuZ2UgZGlyZWN0bHkgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbW0vYCBkaXJlY3RvcnkgYW5kIGl0IGltcGFjdHMgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nLiBUaGUgcGF0Y2ggZml0cyBkaXJlY3RseSB3aXRoaW4gdGhlIGNyaXRlcmlhIG91dGxpbmVkIGZvciBmdXp6aW5nOiBhIG1vZGlmaWNhdGlvbiBpbiBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCBjb2RlIHJlc3RydWN0dXJpbmcuXG5cbkxldCdzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXQuIFRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgYXJlIHZlcnkgc3BlY2lmaWM6IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBgbWFkdmlzZV9jb2xkX3BhZ2VfcmFuZ2VgLCBgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2VgLCBgbWFkdmlzZV9jb2xkYCwgYW5kIGBtYWR2aXNlX3BhZ2VvdXRgLiBUaGUgZm9jdXMgaXMgdGlnaHQuIFRoZXNlIGFyZSBjYWxsZWQgb25seSB3aGVuIGEgdXNlciB1c2VzIGBtYWR2aXNlYCB3aXRoIGBNQURWX0NPTERgIG9yIGBNQURWX1BBR0VPVVRgLiBBbmQgaW1wb3J0YW50bHksIHRoZSBtYWluIGNvZGUgY2hhbmdlIGlzIGluIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBUaGVzZSBzeW1ib2xzIGFyZSBub3QgdWJpcXVpdG91cywgd2hpY2ggaW5jcmVhc2VzIHRoZWlyIHZhbHVlIGFzIGEgZnV6eiB0YXJnZXQuXG5cbkZpbmFsbHksIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gV2l0aG91dCB0aGF0LCB0aGUgY29kZSBpcyB0b3RhbGx5IGFic2VudC4gU28sIGVuYWJsaW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYW4gYWJzb2x1dGUgcmVxdWlyZW1lbnQuIE5vIG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGp1bXAgb3V0IGF0IG1lLiBUaGlzIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgdGFyZ2V0IGZvciBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZSBjaGFuZ2UgYW5kIGVuc3VyZSB0aGUgZml4IGlzIHdvcmtpbmcgYXMgaW50ZW5kZWQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmVncmVzc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjI5LjMzMDY1NTA3MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5MzI5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03NT1pZmRlZiBDT05GSUdfTU1VXFxubW0vTWFrZWZpbGU6NzY6XFx0b2JqLSQoQ09ORklHX0FEVklTRV9TWVNDQUxMUylcXHQrPSBtYWR2aXNlLm9cXG5tbS9NYWtlZmlsZS03Ny1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDoyOS40MDU1OTY4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTgwMjEyNTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCoqXG5cblJpZ2h0LCBgQ09ORklHX0FEVklTRV9TWVNDQUxMU2AuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0J3MgYWJvdXQuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIEknbGwgaGVhZCBvdmVyIHRvIGBpbml0L0tjb25maWdgIGFuZCBsb29rIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgQURWSVNFX1NZU0NBTExTYC4gVGhhdCdzIHdoZXJlIHRoZSBvcHRpb24gd2lsbCBiZSBkZWNsYXJlZCwgYWxvbmcgd2l0aCBhIGRlc2NyaXB0aW9uIGFuZCBwb3NzaWJseSBzb21lIGRlcGVuZGVuY2llcyBvciBkZWZhdWx0IHZhbHVlcy4gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIHBvaW50IHRvIHdoYXQgaXQgY29udHJvbHMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoZW4gSSBjYW4gZmlndXJlIG91dCB3aGF0IG1vZHVsZXMgb3Igb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgZGVwZW5kZW50IG9uIHRoaXMgY29uZmlnIHZhcmlhYmxlLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGF0IGl0IGVuYWJsZXMgb3IgZGlzYWJsZXMuIEhvcGVmdWxseSwgdGhlcmUncyBhIGhlbHBmdWwgY29tbWVudCBpbiB0aGVyZSB0byBnaXZlIG1lIGEgY2x1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDozMS4zODU4MTM3NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjU5NzUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQURWSVNFX1NZU0NBTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTk3NT1jb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuLS1cXG5pbml0L0tjb25maWctMTk4NS1cXG5pbml0L0tjb25maWc6MTk4Njpjb25maWcgQURWSVNFX1NZU0NBTExTXFxuaW5pdC9LY29uZmlnLTE5ODctXFx0Ym9vbCBcXFwiRW5hYmxlIG1hZHZpc2UvZmFkdmlzZSBzeXNjYWxsc1xcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjMxLjgwMjQxNzYxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTY1MjQwNjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBHZW5lc2lzOiBBIEtjb25maWcgUmV0cm9zcGVjdGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIGNpcmNhIDE5ODYuIFRoYXQncyB3aGVyZSB3ZSdsbCBsaWtlbHkgZmluZCB0aGUgYmVkcm9jayBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGV2ZW4gaWYgaXQncyBpbiBpdHMgZW1icnlvbmljIHN0YWdlLiBJJ20gZWFnZXIgdG8gc2VlIGhvdyB0aGV5IGFwcHJvYWNoZWQgc3VjaCBhIGZ1bmRhbWVudGFsIHByb2JsZW0gd2l0aCB0aGUgbGltaXRlZCB0b29scyBhbmQgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cyBvZiB0aGF0IGVyYS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBvcmlnaW5hbCBkZXNpZ24gcGhpbG9zb3BoaWVzIGFuZCB0aGUgdHJhZGUtb2ZmcyB0aGV5IG1hZGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgZWFybHkgZGV2ZWxvcGVycyBjb25jZXB0dWFsaXplZCBmZWF0dXJlIHNlbGVjdGlvbiBhbmQgZGVwZW5kZW5jaWVzIOKAkyB3ZXJlIHRoZXkgZXZlbiB0aGlua2luZyBhYm91dCBtb2R1bGFyaXR5IGluIHRoZSB3YXkgd2UgZG8gbm93PyBUaGlzIGNvdWxkIGJlIGEgZmFzY2luYXRpbmcgbG9vayBhdCB0aGUgZXZvbHV0aW9uIG9mIGNvbXBsZXhpdHkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDozMy45Njc2NjEzMzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzNTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk4NSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk4NTpcXHRcXG4xOTg2OlxcdGNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcXG4xOTg3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBtYWR2aXNlL2ZhZHZpc2Ugc3lzY2FsbHNcXFwiIGlmIEVYUEVSVFxcbjE5ODg6XFx0XFx0ZGVmYXVsdCB5XFxuMTk4OTpcXHRcXHRoZWxwXFxuMTk5MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG1hZHZpc2UgYW5kIGZhZHZpc2Ugc3lzY2FsbHMsIHVzZWQgYnlcXG4xOTkxOlxcdFxcdCAgYXBwbGljYXRpb25zIHRvIGFkdmlzZSB0aGUga2VybmVsIGFib3V0IHRoZWlyIGZ1dHVyZSBtZW1vcnkgb3IgZmlsZVxcbjE5OTI6XFx0XFx0ICB1c2FnZSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlLiBJZiBidWlsZGluZyBhbiBlbWJlZGRlZCBzeXN0ZW0gd2hlcmUgbm9cXG4xOTkzOlxcdFxcdCAgYXBwbGljYXRpb25zIHVzZSB0aGVzZSBzeXNjYWxscywgeW91IGNhbiBkaXNhYmxlIHRoaXMgb3B0aW9uIHRvIHNhdmVcXG4xOTk0OlxcdFxcdCAgc3BhY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjMzLjk3MDAwMDQzNloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NjM2OTUzMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IENvbmZpcm1hdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoZSBpbml0aWFsIHN1c3BpY2lvbnMuIEl0IGxvb2tzIGxpa2UgYEFEVklTRV9TWVNDQUxMU2AgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIGRlZmluaXRlbHkgcmVxdWlyZWQuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgKmFsbCogd2UgbmVlZC4gRGlnZ2luZyBpbnRvIHRoZSBjb2RlIHdpdGhpbiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgc3BlY2lmaWNhbGx5IHRoZSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmxvY2ssIGNvbmZpcm1zIGl0LiBXZSdyZSBnb29kIG9uIHRoZSBjb25maWd1cmF0aW9uIGZyb250LlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbjEuICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKiBZZXAsIHRoYXQncyB3aGF0IHdlIGV4cGVjdC4gVGhpcyBwYXRjaCBpbnZvbHZlcyBjcml0aWNhbCBsb2NraW5nIGNoYW5nZXMuXG4yLiAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKClgIGluIGBtbS9tYWR2aXNlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgd2hlbiBUSFBzIGFyZSBzcGxpdCBmb3IgYE1BRFZfQ09MRGAgb3IgYE1BRFZfUEFHRU9VVGAuIFJlcGxhY2luZyBhIGBmb2xpb19sb2NrKClgIHdpdGggYSBgZm9saW9fdHJ5bG9jaygpYCBhZnRlciB1bmxvY2tpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayBpcyBhIGJpZyBkZWFsLiBDcml0aWNhbGx5LCB3ZSBrbm93IHVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgdHJpZ2dlciB0aGlzIHZpYSB0aGUgYG1hZHZpc2VgIHN5c2NhbGxzIG9uIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMuIFNvLCB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMuXG4zLiAgKipGb2N1c1N5bWJvbHM6KiogVGhlIGZ1bmN0aW9uIG5hbWVzIHdlIHdhbnQgdG8gdGFyZ2V0IGxpbmUgdXAgcGVyZmVjdGx5OiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYG1hZHZpc2VfY29sZGAsIGFuZCBgbWFkdmlzZV9wYWdlb3V0YC4gVGhhdCdzIHByZWNpc2VseSB3aGVyZSB0aGUgY3JpdGljYWwgY2hhbmdlcyBhcmUuXG40LiAgKipFbmFibGVDb25maWdzOioqIEFnYWluLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQURWSVNFX1NZU0NBTExTYCBhcmUgY29ycmVjdC5cblxuRnJvbSBhIGNvZGUgcmV2aWV3IHBlcnNwZWN0aXZlLCBpdCBjaGVja3Mgb3V0LiBFdmVyeXRoaW5nJ3MgaW4gc3luYy4gSSdtIHNhdGlzZmllZC4gTGV0J3MgZ28gYWhlYWQgYW5kIHNpZ25hbCB0aGF0IHdlJ3JlIGdvb2QgdG8gZ28uIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI0NSwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDozOS42MDY5NTcwNDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAyMDUwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgICBcIm1hZHZpc2VfY29sZFwiLFxuICAgIFwibWFkdmlzZV9wYWdlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2VxdWVuY2UgaW4gbW0vbWFkdmlzZS5jIChtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UpIHdoZW4gc3BsaXR0aW5nIGh1Z2UgZm9saW9zIGZvciBwYXJ0aWFsIHJhbmdlcyBkdXJpbmcgTUFEVl9DT0xEIG9yIE1BRFZfUEFHRU9VVCBvcGVyYXRpb25zLiBJdCByZXBsYWNlcyBhIGJsb2NraW5nIGZvbGlvX2xvY2sgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayB3aXRoIGEgZm9saW9fdHJ5bG9jayB1bmRlciB0aGUgcGFnZSB0YWJsZSBsb2NrLiBUaGlzIGNvZGUgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIHZpYSB0aGUgbWFkdmlzZSBhbmQgcHJvY2Vzc19tYWR2aXNlIHN5c3RlbSBjYWxscyBvbiBUSFAgbWFwcGluZ3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBhbmQgYmVoYXZpb3IgdW5kZXIgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgICBcIm1hZHZpc2VfY29sZFwiLFxuICAgIFwibWFkdmlzZV9wYWdlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2VxdWVuY2UgaW4gbW0vbWFkdmlzZS5jIChtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UpIHdoZW4gc3BsaXR0aW5nIGh1Z2UgZm9saW9zIGZvciBwYXJ0aWFsIHJhbmdlcyBkdXJpbmcgTUFEVl9DT0xEIG9yIE1BRFZfUEFHRU9VVCBvcGVyYXRpb25zLiBJdCByZXBsYWNlcyBhIGJsb2NraW5nIGZvbGlvX2xvY2sgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayB3aXRoIGEgZm9saW9fdHJ5bG9jayB1bmRlciB0aGUgcGFnZSB0YWJsZSBsb2NrLiBUaGlzIGNvZGUgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIHZpYSB0aGUgbWFkdmlzZSBhbmQgcHJvY2Vzc19tYWR2aXNlIHN5c3RlbSBjYWxscyBvbiBUSFAgbWFwcGluZ3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBhbmQgYmVoYXZpb3IgdW5kZXIgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDozOS43NTcxNzU0OTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTkzMDA4MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MzkuNzU5MDkzODgzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDI5OTEwODE3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGZvbGlvIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIGluIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UoKWAgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIGEgYmxvY2tpbmcgYGZvbGlvX2xvY2soKWAgdGFrZW4gYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayAoYHB0bGApIHdpdGggYSBub24tYmxvY2tpbmcgYGZvbGlvX3RyeWxvY2soKWAgdW5kZXIgYHB0bGAsIGJyYW5jaGluZyB0byBgaHVnZV91bmxvY2tgIGlmIGxvY2tpbmcgZmFpbHMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGZvY3VzZWQgb24gbG9ja2luZywgc3luY2hyb25pemF0aW9uLCBhbmQgZm9saW8gc3BsaXR0aW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgYE1BRFZfQ09MRGAgLyBgTUFEVl9QQUdFT1VUYCBvcGVyYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzLCBhbmQgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgY29uY3VycmVuY3kgb3IgcGFnZSByZWZjb3VudCBpc3N1ZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3YmUwNjZkODg5ZTI0MzEwODBhYjcxMjdjNTE3ZWJmMDdjZWJkZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMTo0OTozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggZjc1YTlkMTM5OTgwMy4uYWUzZDcxMjdkODdjNCAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtNDE5LDkgKzQxOSwxMCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRpZiAobmV4dCAtIGFkZHIgIT0gSFBBR0VfUE1EX1NJWkUpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuK1x0XHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4rXHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi1cdFx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbiBcdFx0XHRlcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG4gXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MzkuNzU5MDk2MDU0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MjA1NTMzODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb24gZm9yIGBtbS9tYWR2aXNlLmNgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb3IgaWYgS0FTQU4gaXMgc3VmZmljaWVudC4gSSBuZWVkIHRvIGFwcGx5IHRob3NlIGZvdXIgS01TQU4gdHJpZ2dlcnMuIExldCdzIHNlZS4uLlxuXG5GaXJzdCwgbGV0J3MgcmVjYXAgdGhvc2UgS01TQU4gdHJpZ2dlcnM6XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZSBwb3RlbnRpYWxseSB3aXRoIHVuaW5pdGlhbGl6ZWQgYml0cy5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHN0dWZmLlxuMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3RocywgZXRjLiwgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbkFuZCB3aGVuIHRvIHNraXAgS01TQU46XG4qICAgU3RhbmRhcmQgYnVncyAoT09CLCBVQUYsIE5VTEwgZGVyZWYsIGV0Yy4pIGFyZSB0aGUgcmlzay5cbiogICBTdHJ1Y3R1cmVzIGFyZSAqZnVsbHkqIGluaXRpYWxpemVkLlxuKiAgIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgbGVha3MuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZGlmZi4gSXQncyBpbiBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGF0IGBmb2xpb190cnlsb2NrYCBhbmQgYHNwbGl0X2ZvbGlvYCBjb2RlLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIGBmb2xpb190cnlsb2NrYCBjYWxsIGJlZm9yZSBgc3BsaXRfZm9saW9gLiBUaGUgbG9jayBvcmRlciBpcyBjaGFuZ2VkIHdoaWNoIGlzIG1vc3QgbGlrZWx5IHRvIGF2b2lkIGxvY2sgaW52ZXJzaW9uLlxuXG5TaW5jZSB0aGlzIGNoYW5nZSBwcmltYXJpbHkgY29uY2VybnMgbG9ja2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwncyBpbnRlcm5hbCB3b3JraW5ncywgaXQgZmVlbHMgbGlrZSB0aGlzIGlzIG1vc3RseSBhYm91dCBjb3JyZWN0aW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0J3MgbGlrZWx5IHRyeWluZyB0byBpbXByb3ZlIHRoZSByZWxpYWJpbGl0eSBvZiBwYWdlIHNwbGl0dGluZy4gVGhlIG1haW4gY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IGRhdGEgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgZm9saW8ncyBzdGF0ZSwgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHJlYWQuIEl0J3MgdG91Y2hpbmcgb24gbG9ja2luZyBwcmltaXRpdmVzIHdoaWNoIGlzIG1vcmUgS0FTQU4gdGVycml0b3J5LiBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbnkgY29uZGl0aW9uYWwgbG9naWMgZGlyZWN0bHkgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gRnVydGhlcm1vcmUsIEkgZG9uJ3Qgc2VlIGFueSByaXNreSBhbGxvY2F0aW9ucyBvciBib3VuZHMgY2hlY2tzLiBUaGlzIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gdGhlIGludGVncml0eSBvZiBpbi1rZXJuZWwgZGF0YS5cblxuVGhlcmVmb3JlLCBteSBpbml0aWFsIGFzc2Vzc21lbnQsIHBlbmRpbmcgZnVydGhlciBzY3J1dGlueSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXMgdGhhdCBzdGFuZGFyZCBLQVNBTiBzaG91bGQgYmUgc3VmZmljaWVudCBoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlLCBvZiBjb3Vyc2UuIFRpbWUgdG8gbG9vayBpbnRvIGBtbS9tYWR2aXNlLmNgIGFyb3VuZCBsaW5lIDQxOSwgdXNpbmcgZWl0aGVyIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGNvbW1hbmQsIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLiBMZXQncyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgbXkgY3VycmVudCBjb25jbHVzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6NTMuOTY0NjMzNDg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEzMDIyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MzU0PXN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfZm9saW9fcHRlX2JhdGNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMzYzLVxcbm1tL21hZHZpc2UuYzozNjQ6c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG5tbS9tYWR2aXNlLmMtMzY1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tYWR2aXNlLmM9NTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcXG5tbS9tYWR2aXNlLmM6NTg0OlxcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXFxubW0vbWFkdmlzZS5jLTU4NS1cXHQud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6NTQuMTk1OTQ0MDgxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMzc3ODIzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgZnVuY3Rpb24sIHN0YXJ0aW5nIGFyb3VuZCBsaW5lIDQxOS4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBoZXJlLCBwcm9iYWJseSBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgIGZsYWdzIGFuZCBob3cgdGhleSBpbnRlcmFjdCBhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBsZXZlbC4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRob3NlIGhpbnRzLiBJIGltYWdpbmUgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCBkaXJ0eSB3b3JrIG9mIG1hcmtpbmcgcGFnZXMgYXMgY29sZCBvciB0cmlnZ2VyaW5nIHBhZ2Utb3V0IG9wZXJhdGlvbnMuIEdpdmVuIHRoZSBuYW1lLCBJJ2QgZXhwZWN0IGl0IGRlYWxzIHdpdGggYSByYW5nZSBvZiBQVEVzLCBtZWFuaW5nIGl0IG9wZXJhdGVzIG9uIHBvdGVudGlhbGx5IGxhcmdlIGNodW5rcyBvZiBtZW1vcnkuIEknbGwgbmVlZCB0byBzZWUgaG93IGVmZmljaWVudGx5IHRoaXMgaXMgZG9uZSBhbmQgaWYgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3MsIG9yIHBlcmhhcHMgY2xldmVyIHRyaWNrcywgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUga2VybmVsIGlzIG1hbmFnaW5nIHRoYXQgbWVtb3J5IVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6NTYuMzMzNzMwODE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XFxuIDQwMjpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFxcdTAwMjZcXHUwMDI2XFxuIDQwMzpcXHRcXHRcXHRcXHRcXHRcXHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XFxuIDQwNDpcXHRcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbiA0MDU6XFx0XFx0XFx0fVxcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRcXHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdFxcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXFxuIDQxMDpcXHRcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRcXHQvKiBEbyBub3QgaW50ZXJmZXJlIHdpdGggb3RoZXIgbWFwcGluZ3Mgb2YgdGhpcyBmb2xpbyAqL1xcbiA0MTM6XFx0XFx0XFx0aWYgKGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoZm9saW8pKVxcbiA0MTQ6XFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gNDE1OlxcdFxcbiA0MTY6XFx0XFx0XFx0aWYgKHBhZ2VvdXRfYW5vbl9vbmx5X2ZpbHRlciBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG4gNDE3OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdFxcdGlmIChuZXh0IC0gYWRkciAhPSBIUEFHRV9QTURfU0laRSkge1xcbiA0MjA6XFx0XFx0XFx0XFx0aW50IGVycjtcXG4gNDIxOlxcdFxcbiA0MjI6XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG4gNDIzOlxcdFxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDQyNDpcXHRcXHRcXHRcXHRmb2xpb19nZXQoZm9saW8pO1xcbiA0MjU6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gNDI2OlxcdFxcdFxcdFxcdGVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcXG4gNDI3OlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIDQyODpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0Mjk6XFx0XFx0XFx0XFx0aWYgKCFlcnIpXFxuIDQzMDpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlZ3VsYXJfZm9saW87XFxuIDQzMTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDMyOlxcdFxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0XFx0aWYgKCFwYWdlb3V0IFxcdTAwMjZcXHUwMDI2IHBtZF95b3VuZyhvcmlnX3BtZCkpIHtcXG4gNDM1OlxcdFxcdFxcdFxcdHBtZHBfaW52YWxpZGF0ZSh2bWEsIGFkZHIsIHBtZCk7XFxuIDQzNjpcXHRcXHRcXHRcXHRvcmlnX3BtZCA9IHBtZF9ta29sZChvcmlnX3BtZCk7XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdFxcdFxcdHNldF9wbWRfYXQobW0sIGFkZHIsIHBtZCwgb3JpZ19wbWQpO1xcbiA0Mzk6XFx0XFx0XFx0XFx0dGxiX3JlbW92ZV9wbWRfdGxiX2VudHJ5KHRsYiwgcG1kLCBhZGRyKTtcXG4gNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XFxuIDQ0MzpcXHRcXHRcXHRmb2xpb190ZXN0X2NsZWFyX3lvdW5nKGZvbGlvKTtcXG4gNDQ0OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykpXFxuIDQ0NTpcXHRcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuIDQ0NjpcXHRcXHRcXHRpZiAocGFnZW91dCkge1xcbiA0NDc6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX2lzb2xhdGVfbHJ1KGZvbGlvKSkge1xcbiA0NDg6XFx0XFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxcbiA0NDk6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDo1Ni4zMzM5OTAwNTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDUwNjU1MzkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIExvY2tpbmcgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgd2Ugd2VudCBmcm9tIHVzaW5nIGBmb2xpb19sb2NrYCBhbmQgYGZvbGlvX3VubG9ja2AgdG8gdXNpbmcgYGZvbGlvX3RyeWxvY2tgIGluIHRoaXMgc2VjdGlvbiBvZiBjb2RlOlxuXG5gYGBjXG5cdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxuXHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuXHRcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcblx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG5cdFx0XHRlcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG5cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmBgYFxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2h5Kj8gIEJlZm9yZSB0aGUgY2hhbmdlLCB3ZSB3ZXJlIGRvaW5nIHRoaXM6XG5cbmBgYGNcblx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG5cdFx0XHRzcGluX3VubG9jayhwdGwpO1xuXHRcdFx0Zm9saW9fbG9jayhmb2xpbyk7XG5cdFx0XHRlcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG5cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgYmxvY2tpbmcgbmF0dXJlIG9mIHRoZSBvcmlnaW5hbCBgZm9saW9fbG9ja2AgcHJlc2VudGVkIGEgcG90ZW50aWFsIHByb2JsZW0sIHByb2JhYmx5IGluIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBTcGVjaWZpY2FsbHksIGJsb2NraW5nIHdpdGggYGZvbGlvX2xvY2tgIGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzIG9yIG90aGVyIGxvY2sgb3JkZXJpbmcgcHJvYmxlbXMsIGxpa2UgYW4gQUJCQSBkZWFkbG9jayBvciBzbGVlcGluZyBpbiBhbiBhdG9taWMgY29udGV4dCBpZiBgcHRsYCB3YXNuJ3QgdW5sb2NrZWQgb3Igc29tZSBvdGhlciBsb2NrIG9yZGVyaW5nIGlzc3VlLiBUaGUgY29kZSAqZGlkKiB1bmxvY2sgYHB0bGAgYmVmb3JlLCBidXQgcGVyaGFwcyB0aGUgYmxvY2tpbmcgd2FpdCBpdHNlbGYgd2FzIHVuZGVzaXJhYmxlLiBgZm9saW9fdHJ5bG9ja2AgaXMgbm9uLWJsb2NraW5nLCB3aGljaCBsaWtlbHkgbWl0aWdhdGVzIHRoZSBpc3N1ZS4gSXQgbG9va3MgbGlrZSBpdCdzIGEgdHJhZGUtb2ZmOiBhdm9pZCB0aGUgd2FpdCwgcG9zc2libHkgYXQgdGhlIGNvc3Qgb2YgZmFpbGluZyB0aGUgb3BlcmF0aW9uIGFuZCBuZWVkaW5nIHRvIGhhbmRsZSB0aGUgZmFpbHVyZS5cblxuVGhlIGBpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKSBnb3RvIGh1Z2VfdW5sb2NrO2AgaXMgdGhlIGtleS4gVGhlIGNvZGUgbm93ICp0cmllcyogdG8gYWNxdWlyZSB0aGUgZm9saW8gbG9jaywgYW5kIGlmIGl0IGZhaWxzLCBpdCBicmFuY2hlcyB0byBgaHVnZV91bmxvY2tgLiBBdCB0aGlzIHBvaW50LCBgcHRsYCBpcyBzdGlsbCBoZWxkLCBhcyB0aGUgYHNwaW5fbG9ja2AgY2FsbCBoYXBwZW5zIGJlZm9yZSB0aGUgdHJ5bG9jay4gU28gYGh1Z2VfdW5sb2NrYCBpcyBnb2luZyB0byBoYXZlIHRvIGNhcmVmdWxseSBtYW5hZ2UgdGhlIGV4aXN0aW5nIGxvY2sgc3RhdGUuXG5cbkkgbmVlZCB0byBzZWUgd2hhdCBgaHVnZV91bmxvY2tgIGRvZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIExldCBtZSBxdWlja2x5IGp1bXAgb3ZlciB0byBsaW5lcyA0NjAtNTAwLCBJIGJlbGlldmUgdGhhdCBzaG91bGQgaG9sZCB0aGUgYW5zd2VyLiBJIGJldCB0aGUgY29kZSB0aGVyZSBpcyBnb2luZyB0byBiYWNrIG91dCBvZiB0aGUgb3BlcmF0aW9ucyBpdCBoYXMgcGVyZm9ybWVkIGFuZCByZWxlYXNlIHJlc291cmNlcyBpbiBhIHNhZmUgbWFubmVyIHRvIGF2b2lkIGlzc3VlcyBhbmQgcmV0dXJuIHRoZSBjb3JyZWN0IGVycm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDE5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTE6MDAuODQwNTQ3MjY0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdFxcdH1cXG4gNDYxOlxcdFxcbiA0NjI6XFx0cmVndWxhcl9mb2xpbzpcXG4gNDYzOlxcdCNlbmRpZlxcbiA0NjQ6XFx0XFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBQQUdFX1NJWkUpO1xcbiA0NjU6XFx0cmVzdGFydDpcXG4gNDY2OlxcdFxcdHN0YXJ0X3B0ZSA9IHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLVxcdTAwM2V2bV9tbSwgcG1kLCBhZGRyLCBcXHUwMDI2cHRsKTtcXG4gNDY3OlxcdFxcdGlmICghc3RhcnRfcHRlKVxcbiA0Njg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ2OTpcXHRcXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcXG4gNDcwOlxcdFxcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XFxuIDQ3MTpcXHRcXHRmb3IgKDsgYWRkciBcXHUwMDNjIGVuZDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuIDQ3MjpcXHRcXHRcXHRuciA9IDE7XFxuIDQ3MzpcXHRcXHRcXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdFxcdFxcdGlmICgrK2JhdGNoX2NvdW50ID09IFNXQVBfQ0xVU1RFUl9NQVgpIHtcXG4gNDc2OlxcdFxcdFxcdFxcdGJhdGNoX2NvdW50ID0gMDtcXG4gNDc3OlxcdFxcdFxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xcbiA0Nzg6XFx0XFx0XFx0XFx0XFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XFxuIDQ3OTpcXHRcXHRcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgcHRsKTtcXG4gNDgwOlxcdFxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiA0ODE6XFx0XFx0XFx0XFx0XFx0Z290byByZXN0YXJ0O1xcbiA0ODI6XFx0XFx0XFx0XFx0fVxcbiA0ODM6XFx0XFx0XFx0fVxcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRcXHRcXHRpZiAocHRlX25vbmUocHRlbnQpKVxcbiA0ODY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ4NzpcXHRcXG4gNDg4OlxcdFxcdFxcdGlmICghcHRlX3ByZXNlbnQocHRlbnQpKVxcbiA0ODk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdFxcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHZtYSwgYWRkciwgcHRlbnQpO1xcbiA0OTI6XFx0XFx0XFx0aWYgKCFmb2xpbyB8fCBmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXFxuIDQ5MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0XFx0LypcXG4gNDk2OlxcdFxcdFxcdCAqIElmIHdlIGVuY291bnRlciBhIGxhcmdlIGZvbGlvLCBvbmx5IHNwbGl0IGl0IGlmIGl0IGlzIG5vdFxcbiA0OTc6XFx0XFx0XFx0ICogZnVsbHkgbWFwcGVkIHdpdGhpbiB0aGUgcmFuZ2Ugd2UgYXJlIG9wZXJhdGluZyBvbi4gT3RoZXJ3aXNlXFxuIDQ5ODpcXHRcXHRcXHQgKiBsZWF2ZSBpdCBhcyBpcyBzbyB0aGF0IGl0IGNhbiBiZSBzd2FwcGVkIG91dCB3aG9sZS4gSWYgd2VcXG4gNDk5OlxcdFxcdFxcdCAqIGZhaWwgdG8gc3BsaXQgYSBmb2xpbywgbGVhdmUgaXQgaW4gcGxhY2UgYW5kIGFkdmFuY2UgdG8gdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUxOjAwLjg0MDg2ODAyNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODI0MjM1NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyBgaHVnZV91bmxvY2tgIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGh1Z2VfdW5sb2NrYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQncyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtYWR2aXNlLCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgaGludCBpcyBcIm1tL21hZHZpc2UuY1wiLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdGlvbiDigJMgbWFkdmlzZSBkZWFscyB3aXRoIGhpbnRpbmcgYWJvdXQgbWVtb3J5IHVzYWdlLCBzbyBpdCdzIGEgdmVyeSBsb2dpY2FsIHBsYWNlIGZvciB0aGlzIGZ1bmN0aW9uLCBhc3N1bWluZyBpdCdzIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcywgd2hpY2ggaXQgbGlrZWx5IGlzLiBJJ2xsIGdvIGNoZWNrIHRoYXQgZmlsZSBkaXJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTE6MDIuNjY1MTA2NjU0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxOTUwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV91bmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNjQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zOTgtXFx0XFx0aWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKVxcbm1tL21hZHZpc2UuYzozOTk6XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG5tbS9tYWR2aXNlLmMtNDAwLVxcbi0tXFxubW0vbWFkdmlzZS5jLTQwMy1cXHRcXHRcXHRcXHRcXHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XFxubW0vbWFkdmlzZS5jOjQwNDpcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbm1tL21hZHZpc2UuYy00MDUtXFx0XFx0fVxcbi0tXFxubW0vbWFkdmlzZS5jLTQwOS1cXHRcXHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxcbm1tL21hZHZpc2UuYzo0MTA6XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG5tbS9tYWR2aXNlLmMtNDExLVxcbi0tXFxubW0vbWFkdmlzZS5jLTQxMy1cXHRcXHRpZiAoZm9saW9fbWF5YmVfbWFwcGVkX3NoYXJlZChmb2xpbykpXFxubW0vbWFkdmlzZS5jOjQxNDpcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbm1tL21hZHZpc2UuYy00MTUtXFxubW0vbWFkdmlzZS5jLTQxNi1cXHRcXHRpZiAocGFnZW91dF9hbm9uX29ubHlfZmlsdGVyIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbm1tL21hZHZpc2UuYzo0MTc6XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG5tbS9tYWR2aXNlLmMtNDE4LVxcbi0tXFxubW0vbWFkdmlzZS5jLTQyMi1cXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbm1tL21hZHZpc2UuYzo0MjM6XFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG5tbS9tYWR2aXNlLmMtNDI0LVxcdFxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuLS1cXG5tbS9tYWR2aXNlLmMtNDU0LVxcdFxcdFxcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xcbm1tL21hZHZpc2UuYzo0NTU6aHVnZV91bmxvY2s6XFxubW0vbWFkdmlzZS5jLTQ1Ni1cXHRcXHRzcGluX3VubG9jayhwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MTowMi43ODQzMTQ1NjNaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1MTY1MzU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipRdWljayBDaGVjayBvbiBgaHVnZV91bmxvY2tgKipcblxuT2theSwgc28gYGh1Z2VfdW5sb2NrYCBpcyBkZWFkIHNpbXBsZS4gSXQgbG9va3MgbGlrZSBpdCBqdXN0IGNhbGxzIGBzcGluX3VubG9ja2Agb24gdGhlIHBhc3NlZCBpbiBwcm90ZWN0aW9uIGxvY2sgKGBwdGxgKSBhbmQgdGhlbiByZXR1cm5zIDAuIFRoYXTigJlzIGl0LiBOb3csIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlIEnigJltIG5vdCBtaXNzaW5nIGFueXRoaW5nIHN1YnRsZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBtYWtlcyBzZW5zZSBvZiB0aGF0IHJldHVybiB2YWx1ZS4gTGV0IG1lIGp1c3QgZ2xhbmNlIGF0IGxpbmVzIDQ1NS00NTkgdG8gbWFrZSBzdXJlIGl0J3MgZG9pbmcgd2hhdCBJIHRoaW5rIGl0IGlzLiBJIGNhbid0IHRoaW5rIG9mIGFueSBvYnZpb3VzIGlzc3VlcywgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggd2l0aCBsb3ctbGV2ZWwgbG9ja2luZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTE6MDQuODM1OTcyMjE5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUwLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUwOlxcdFxcdFxcdFxcdFxcdGVsc2VcXG4gNDUxOlxcdFxcdFxcdFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Zm9saW9fbGlzdCk7XFxuIDQ1MjpcXHRcXHRcXHRcXHR9XFxuIDQ1MzpcXHRcXHRcXHR9IGVsc2VcXG4gNDU0OlxcdFxcdFxcdFxcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xcbiA0NTU6XFx0aHVnZV91bmxvY2s6XFxuIDQ1NjpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA0NTc6XFx0XFx0XFx0aWYgKHBhZ2VvdXQpXFxuIDQ1ODpcXHRcXHRcXHRcXHRyZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG4gNDU5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0NjA6XFx0XFx0fVxcbiA0NjE6XFx0XFxuIDQ2MjpcXHRyZWd1bGFyX2ZvbGlvOlxcbiA0NjM6XFx0I2VuZGlmXFxuIDQ2NDpcXHRcXHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIFBBR0VfU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUxOjA0LjgzNjMxMTcyOVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzkxMzgxODc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hZHZpc2UgRm9saW8gTG9ja2luZyBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgbW0vbWFkdmlzZS5jYCwgYW5kIGl0J3MgbWFraW5nIGEgc3BlY2lmaWMgb3B0aW1pemF0aW9uIGluIHRoZSBsb2NraW5nIHN0cmF0ZWd5LiAgUHJldmlvdXNseSwgd2UgaGFkIHRoaXMgc2VxdWVuY2U6IGBmb2xpb19nZXRgLCBgc3Bpbl91bmxvY2socHRsKWAsIGBmb2xpb19sb2NrYCwgYHNwbGl0X2ZvbGlvYCwgYGZvbGlvX3VubG9ja2AsIGBmb2xpb19wdXRgLiBOb3csIHRoZSBgZm9saW9fbG9ja2AgaXMgcmVwbGFjZWQgd2l0aCBgZm9saW9fdHJ5bG9ja2Agd2hpbGUgc3RpbGwgaG9sZGluZyBgcHRsYC4gSWYgYGZvbGlvX3RyeWxvY2tgIGZhaWxzLCB3ZSBiYWlsIG91dCB1c2luZyBgZ290byBodWdlX3VubG9ja2AgYWZ0ZXIgcmVsZWFzaW5nIGBwdGxgLiBJZiBgZm9saW9fdHJ5bG9ja2Agc3VjY2VlZHMsIHdlIHRha2UgYSByZWZlcmVuY2UsIHJlbGVhc2UgYHB0bGAsIGNhbGwgYHNwbGl0X2ZvbGlvYCwgYW5kIHByb2NlZWQgYXMgYmVmb3JlLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24sIGFzIGFsd2F5czogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBJJ20gdGhpbmtpbmcgYWJvdXQgaXQsIGFuZCBubywgaXQgZG9lc24ndCBzZWVtIGxpa2UgaXQuIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvbiB0aGUgc3RhY2sgb3IgaGVhcC4gVGhlcmUncyBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIG1lYW5pbmcgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIEkgY2FuJ3QgZmluZCBhbnkgaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIHJlYWQgb3IgdmFyaWFibGVzIGJlaW5nIHJlYWQgdW5pbml0aWFsaXplZC4gSXQncyBzb2xlbHkgcGFnZSB0YWJsZSBhbmQgZm9saW8gbG9ja2luZyBsb2dpYyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgLiBUaGlzIGlzIHJlYWxseSBhbGwgYWJvdXQgc3luY2hyb25pemF0aW9uLlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIEtNU0FOIHF1ZXN0aW9uLiAgUmVtZW1iZXIgdGhlIHJ1bGU6IHdlICpkb24ndCogcnVuIEtNU0FOIGlmIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgY2FuIGNhdGNoIHRoZSBidWdzLiAgV2UgbmVlZCBLTVNBTiBvbmx5IGlmIHdlIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOICp1bmlxdWVseSogZGV0ZWN0cy4gIFNvLCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGJ1Z3MgaGVyZT8gV2VsbCwgaXQncyBwcmV0dHkgbXVjaCBhbGwgYWJvdXQgbG9ja2luZywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3Vlcy4gIEFuZCwgdGhvc2UgYXJlICpleGFjdGx5KiB3aGF0IExPQ0tERVAgYW5kIEtBU0FOIChhbmQgdGhlIHJlZmNvdW50IGNoZWNrZXJzKSBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LlxuXG5TbywgYWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYTogdGhlIGNvZGUgY2hhbmdlIGlzbid0IHRvdWNoaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIHN0cmljdGx5IGFib3V0IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbi4gQWxzbywgYWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuU28sIHRoZSByZWFzb25pbmcgSSB3b3VsZCBwdXQgZm9yd2FyZCBpcyB0aGlzOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZvbGlvIGxvY2tpbmcgaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYC4gU3BlY2lmaWNhbGx5LCBpdCByZXBsYWNlcyBhIGJsb2NraW5nIGBmb2xpb19sb2NrKClgIGFmdGVyIGRyb3BwaW5nIHRoZSBwYWdlIHRhYmxlIGxvY2sgKGBwdGxgKSB3aXRoIGEgYGZvbGlvX3RyeWxvY2soKWAgYmVmb3JlIGRyb3BwaW5nIGBwdGxgLCBhbmQgaXQganVtcHMgdG8gYGh1Z2VfdW5sb2NrYCBvbiBmYWlsdXJlLiBUaGUgbWVtb3J5IHNhZmV0eSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgaXMgbWluaW1hbCBiZWNhdXNlIGl0IHJlbGF0ZXMgZXhjbHVzaXZlbHkgdG8gc3luY2hyb25pemF0aW9uIGFuZCB0aGUgcGFnZS10YWJsZS9mb2xpbyBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGUgbWFkdmlzZSBvcGVyYXRpb25zIChgTUFEVl9DT0xEYCAvIGBNQURWX1BBR0VPVVRgKS4gIFRoZXJlIGFyZSBubyBpbnRyb2R1Y2VkIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgaW5mbyBsZWFrcy4gIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZXMsIG9yIHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGFsbCBhZGVxdWF0ZWx5IGFkZHJlc3NlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHRoZSByZWZjb3VudCBjaGVja2Vycy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDAxLCJPdXRwdXRUb2tlbnMiOjIxNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUxOjIyLjc1MDEzNTg1MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgZm9jdXNlZCBvbiBsb2NraW5nLCBzeW5jaHJvbml6YXRpb24sIGFuZCBmb2xpbyBzcGxpdHRpbmcgY29udHJvbCBmbG93IGR1cmluZyBgTUFEVl9DT0xEYCAvIGBNQURWX1BBR0VPVVRgIG9wZXJhdGlvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMsIGFuZCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBwYWdlIHJlZmNvdW50IGlzc3VlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgZm9jdXNlZCBvbiBsb2NraW5nLCBzeW5jaHJvbml6YXRpb24sIGFuZCBmb2xpbyBzcGxpdHRpbmcgY29udHJvbCBmbG93IGR1cmluZyBgTUFEVl9DT0xEYCAvIGBNQURWX1BBR0VPVVRgIG9wZXJhdGlvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMsIGFuZCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBwYWdlIHJlZmNvdW50IGlzc3VlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlcrbn[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-12 11:22:11 +0000 UTC FinishedAt: 2026-09-12 11:51:23 +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": "9958290885035431e2494159f555e332c3c14906", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS" ], "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": "9958290885035431e2494159f555e332c3c14906", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "TRANSPARENT_HUGEPAGE", "ADVISE_SYSCALLS" ], "series_id": "96ff506a-b89e-4c9a-8572-bf809b140f6c" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "madvise_cold_or_pageout_pte_range", "madvise_cold", "madvise_pageout" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "", "base_commit": "9958290885035431e2494159f555e332c3c14906", "base_tree": "mm-new" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjQ5PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9wYWdlb3V0JiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGZvY3VzZWQgb24gbG9ja2luZywgc3luY2hyb25pemF0aW9uLCBhbmQgZm9saW8gc3BsaXR0aW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgYE1BRFZfQ09MRGAgLyBgTUFEVl9QQUdFT1VUYCBvcGVyYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzLCBhbmQgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgY29uY3VycmVuY3kgb3IgcGFnZSByZWZjb3VudCBpc3N1ZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzZXF1ZW5jZSBpbiBtbS9tYWR2aXNlLmMgKG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSkgd2hlbiBzcGxpdHRpbmcgaHVnZSBmb2xpb3MgZm9yIHBhcnRpYWwgcmFuZ2VzIGR1cmluZyBNQURWX0NPTEQgb3IgTUFEVl9QQUdFT1VUIG9wZXJhdGlvbnMuIEl0IHJlcGxhY2VzIGEgYmxvY2tpbmcgZm9saW9fbG9jayBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIHdpdGggYSBmb2xpb190cnlsb2NrIHVuZGVyIHRoZSBwYWdlIHRhYmxlIGxvY2suIFRoaXMgY29kZSBwYXRoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UgdmlhIHRoZSBtYWR2aXNlIGFuZCBwcm9jZXNzX21hZHZpc2Ugc3lzdGVtIGNhbGxzIG9uIFRIUCBtYXBwaW5ncywgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uIGFuZCBiZWhhdmlvciB1bmRlciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NDk8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA4N2JlMDY2ZDg4OWUyNDMxMDgwYWI3MTI3YzUxN2ViZjA3Y2ViZGY3XG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFNhdCBTZXAgMTIgMTE6NDk6MzIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jXG5pbmRleCBmNzVhOWQxMzk5ODAzLi5hZTNkNzEyN2Q4N2M0IDEwMDY0NFxuLS0tIGEvbW0vbWFkdmlzZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmNcbkBAIC00MTksOSAmIzQzOzQxOSwxMCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRpZiAobmV4dCAtIGFkZHIgIT0gSFBBR0VfUE1EX1NJWkUpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuJiM0MztcdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxuJiM0MztcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gXHRcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiBcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuLVx0XHRcdGZvbGlvX2xvY2soZm9saW8pO1xuIFx0XHRcdGVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcbiBcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NDk8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7VFJBTlNQQVJFTlRfSFVHRVBBR0UmIzM0OywKICAgICYjMzQ7QURWSVNFX1NZU0NBTExTJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7bWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlJiMzNDssCiAgICAmIzM0O21hZHZpc2VfY29sZCYjMzQ7LAogICAgJiMzNDttYWR2aXNlX3BhZ2VvdXQmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2VxdWVuY2UgaW4gbW0vbWFkdmlzZS5jIChtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UpIHdoZW4gc3BsaXR0aW5nIGh1Z2UgZm9saW9zIGZvciBwYXJ0aWFsIHJhbmdlcyBkdXJpbmcgTUFEVl9DT0xEIG9yIE1BRFZfUEFHRU9VVCBvcGVyYXRpb25zLiBJdCByZXBsYWNlcyBhIGJsb2NraW5nIGZvbGlvX2xvY2sgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayB3aXRoIGEgZm9saW9fdHJ5bG9jayB1bmRlciB0aGUgcGFnZSB0YWJsZSBsb2NrLiBUaGlzIGNvZGUgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIHZpYSB0aGUgbWFkdmlzZSBhbmQgcHJvY2Vzc19tYWR2aXNlIHN5c3RlbSBjYWxscyBvbiBUSFAgbWFwcGluZ3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBhbmQgYmVoYXZpb3IgdW5kZXIgcmFjZSBjb25kaXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZXZhbHVhdGUgd2hldGhlciBpdCB3YXJyYW50cyBmdXp6aW5nIHdpdGggc3l6a2FsbGVyLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiBpbnRlcm5hbCBhc3N1bXB0aW9ucy4gWW91IG11c3QgYWN0aXZlbHkgdXNlIHlvdXIgY29kZSBhY2Nlc3MKdG9vbHMgdG8gaW5zcGVjdCB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlLCBjYWxsZXJzLCBhbmQgc3Vycm91bmRpbmcgY29udGV4dC4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjEuIENPUkUgVFJJQUdFIFBISUxPU09QSFkKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KVGhlIGdvYWwgb2YgcGF0Y2ggZnV6emluZyBpcyB0byBkaXNjb3ZlciBjcmFzaGVzLCByZWdyZXNzaW9ucywgZXhwb3NlZCBsYXRlbnQgYnVncywKYW5kIG5ld2x5IHRyaWdnZXJlZCBhc3NlcnRpb25zIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIHNlcmllcy4KCi0gUkVBQ0hBQklMSVRZIElTIFRIRSBQUklNQVJZIEdBVEU6CiAgRnV6emluZyBjYW4gb25seSBkaXNjb3ZlciBidWdzIGluIGNvZGUgdGhhdCBjYW4gYWN0dWFsbHkgZXhlY3V0ZSBpbiBzdGFuZGFyZCB2aXJ0dWFsaXplZAogIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuCiAgSWYgdGhlIG1vZGlmaWVkIGNvZGUgaXMgc3RydWN0dXJhbGx5IHVucmVhY2hhYmxlIChzZWUgU2VjdGlvbiAyKSwgaXQgTVVTVCBOT1QgYmUgZnV6emVkLAogIHJlZ2FyZGxlc3Mgb2Ygd2hldGhlciBpdCBhZGRzIGFzc2VydGlvbnMgb3IgY29tcGxleCBsb2dpYy4KCi0gRE8gTk9UIEJMSU5ETFkgVFJVU1QgJiMzNDtOTyBGVU5DVElPTkFMIENIQU5HRSYjMzQ7IChORkNJKSBPUiAmIzM0O1JFRkFDVE9SSU5HJiMzNDsgQ0xBSU1TOgogIFBhdGNoIGF1dGhvcnMgcm91dGluZWx5IGxhYmVsIGNoYW5nZXMgYXMgJiMzNDtjbGVhbnVwcyYjMzQ7LCAmIzM0O3JlZmFjdG9yaW5ncyYjMzQ7LCBvciBzdGF0ZQogICYjMzQ7Tm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWQmIzM0Oy4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuCiAgQ29kZSByZWZhY3RvcmluZ3MgdGhhdCByZWFycmFuZ2UgbG9naWMsIGludHJvZHVjZSBoZWxwZXIgZnVuY3Rpb25zLCBvciBhbHRlciBzdGF0ZSBtYW5hZ2VtZW50CiAgaW4gY29yZSBzdWJzeXN0ZW1zIGZyZXF1ZW50bHkgaW50cm9kdWNlIHN1YnRsZSBzZW1hbnRpYyBzaGlmdHMgb3IgdW5jb3ZlciBsYXRlbnQga2VybmVsIGJ1Z3MuCiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC4KCi0gTkVXIE9SIE1PRElGSUVEIEFTU0VSVElPTlMgSU4gUkVBQ0hBQkxFIENPREUgTVVTVCBCRSBGVVpaRUQ6CiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLAogIEJVR19PTiosIGxvY2tkZXBfYXNzZXJ0KikgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMsIGl0IGVuZm9yY2VzIG5ldyBvciBzdHJpY3RlciBpbnZhcmlhbnRzLgogIEV2ZW4gaWYgdGhlIGF1dGhvciBiZWxpZXZlcyB0aGUgaW52YXJpYW50IGFsd2F5cyBob2xkcywgZnV6emluZyBpcyBlc3NlbnRpYWwgdG8gdmVyaWZ5IHdoZXRoZXIKICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoyLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIE9OTFkgSUYgYWxsIG1vZGlmaWVkIGNvZGUgZmFsbHMgc3RyaWN0bHkgaW50byBvbmUgb3IgbW9yZSBvZiB0aGVzZSBjYXRlZ29yaWVzOgoKLSBOb24ta2VybmVsIGFuZCBub24tZXhlY3V0YWJsZSBjaGFuZ2VzOgogICogTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgY29tbWVudHMsIG9yIHNwZWxsaW5nIGZpeGVzLgogICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pCiAgICB0aGF0IGRvIG5vdCBhZmZlY3QgdGhlIGNvbXBpbGVkIGtlcm5lbCBpbWFnZSAodm1saW51eCkgb3Iga2VybmVsIG1vZHVsZXMuCiAgKiBQdXJlbHkgZGVjb3JhdGl2ZSBsb2dnaW5nIChlLmcuLCBtZXNzYWdlIHN0cmluZ3MgaW4gcHJfZXJyLCBwcmludGssIGRldl9pbmZvKSBvciB0cmFjZXBvaW50cwogICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy4KICAqIEJ1aWxkIHN5c3RlbSBvciBLY29uZmlnIGNoYW5nZXMgdGhhdCBkbyBub3QgYWx0ZXIgY29tcGlsZWQgQyBsb2dpYy4KLSBTdHJ1Y3R1cmFsbHkgdW5yZWFjaGFibGUgaGFyZHdhcmU6CiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsCiAgICBpb25pYywgYW1kZ3B1KSByZXF1aXJpbmcgcGh5c2ljYWwgQVNJQy9QQ0llIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIFVucmVhY2hhYmxlIGV4ZWN1dGlvbiBwYXRoczoKICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZwogICAgcGh5c2ljYWwgUENJIGhvdC11bnBsdWcgb3IgbWFudWFsIHN5c2ZzIGRyaXZlciB1bmJpbmRpbmcuCiAgKiBDb2RlIHBhdGhzIGV4Y2x1c2l2ZSB0byBhcmNoaXRlY3R1cmVzIG90aGVyIHRoYW4gdGhlIHRhcmdldCBhcmNoaXRlY3R1cmUuCgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQozLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9dHJ1ZSAoUE9TSVRJVkUgQ1JJVEVSSUEpCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZSB3aGVuZXZlciB0aGUgcGF0Y2ggdG91Y2hlcyByZWFjaGFibGUgZXhlY3V0YWJsZSBjb2RlLCBpbmNsdWRpbmc6Ci0gQ29yZSBTdWJzeXN0ZW1zOgogICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLAogICAgQlBGLCBzY2hlZHVsZXIsIGNvcmUgbmV0d29ya2luZywgVkZTLCBvciBzeXNjYWxsIGhhbmRsaW5nLgotIFJlZmFjdG9yaW5ncyBhbmQgQ29kZSBDbGVhbnVwczoKICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy4KLSBSdW50aW1lIEFzc2VydGlvbnMgYW5kIERlZmVuc2l2ZSBDaGVja3M6CiAgKiBBbnkgaW50cm9kdWN0aW9uIG9yIGFsdGVyYXRpb24gb2YgYXNzZXJ0aW9ucyAoV0FSTl9PTiosIFZNX1dBUk5fT04qLCBCVUdfT04qLCBldGMuKSBpbiByZWFjaGFibGUgcGF0aHMuCi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczoKICAqIERyaXZlcnMgYWNjZXNzaWJsZSB2aWEgdmlydHVhbCBidXNlcyAodmlydGlvLCBVU0IgZ2FkZ2V0LCBsb29wYmFjaywgbmV0bGluaywgYmluZGVyLCBzb2NrZXRzLCBldGMuKS4KCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CjQuIEVYVFJBQ1RJTkcgRm9jdXNTeW1ib2xzIChQUkVWRU5USU5HIERJTFVUSU9OKQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpXaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjoKCi0gQVZPSUQgVUJJUVVJVE9VUyBMSUZFQ1lDTEUgSE9ULVBBVEhTOgogIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzCiAgKGluY2x1ZGluZywgYnV0IG5vdCBsaW1pdGVkIHRvOiBnZW5lcmFsIG1lbW9yeSBhbGxvY2F0b3JzIGFuZCBkZWFsbG9jYXRvcnMsIHBhZ2UgZmF1bHQKICBhbmQgdHJhcCBoYW5kbGVycywgb3IgY29yZSBzeW5jaHJvbml6YXRpb24gcHJpbWl0aXZlczsgdGhpcyBpcyBub3QgYW4gZXhoYXVzdGl2ZSBsaXN0KS4KICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgJiMzNDtmb2N1c2VkJiMzNDssCiAgd2hpY2ggc2V2ZXJlbHkgZGlsdXRlcyBmdXp6aW5nIGVmZm9ydCBhd2F5IGZyb20gdGhlIGFjdHVhbCBjaGFuZ2VzLgoKLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6CiAgTGlzdCBmdW5jdGlvbnMgdGhhdCBzcGVjaWZpY2FsbHkgaW1wbGVtZW50IHRoZSBsb2dpYyBiZWluZyBhZGRlZCBvciBhbHRlcmVkLCBvciBkaXJlY3QgQVBJIGVudHJ5cG9pbnRzCiAgZm9yIHRoZSBzdWJzeXN0ZW0gZmVhdHVyZSB1bmRlciByZXZpZXcuCgotIEhBTkRMSU5HIFNUQVRJQyBJTkxJTkUgRlVOQ1RJT05TIElOIEhFQURFUlMgKC5oKToKICBDb21waWxlci1pbmxpbmVkIHN0YXRpYyBmdW5jdGlvbnMgKHN1Y2ggYXMgc3RhdGljIGlubGluZXMgaW4gbW0vKi5oIG9yIGluY2x1ZGUvbGludXgvKi5oKSBsYWNrCiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuCiAgSWYgdGhlIGNoYW5nZXMgYXJlIHByaW1hcmlseSBpbiBzdGF0aWMgaW5saW5lIGhlbHBlcnMsIGlkZW50aWZ5IG5vbi1zdGF0aWMsIGZlYXR1cmUtc3BlY2lmaWMgY2FsbGVyCiAgZnVuY3Rpb25zIGluIC5jIGZpbGVzIHRoYXQgZXhlcmNpc2UgdGhlbSAoYXZvaWRpbmcgdWJpcXVpdG91cyBsaWZlY3ljbGUgd3JhcHBlcnMpLgoKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KNS4gSURFTlRJRllJTkcgRW5hYmxlQ29uZmlncwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IGNvbXBpbGUgYW5kIHJlYWNoIHRoZSBtb2RpZmllZCBjb2RlOgotIEluc3BlY3QgS2NvbmZpZyBmaWxlcyBhbmQgI2lmZGVmIGd1YXJkczsgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCi0gQ2hlY2sgJiMzNDtkZXBlbmRzIG9uJiMzNDsgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC4KLSBTdHJpcCBhbnkgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+VGFyZ2V0IGFyY2hpdGVjdHVyZTogYW1kNjQKCkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgODdiZTA2NmQ4ODllMjQzMTA4MGFiNzEyN2M1MTdlYmYwN2NlYmRmNwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBTYXQgU2VwIDEyIDExOjQ5OjMyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vbWFkdmlzZS5jIGIvbW0vbWFkdmlzZS5jCmluZGV4IGY3NWE5ZDEzOTk4MDMuLmFlM2Q3MTI3ZDg3YzQgMTAwNjQ0Ci0tLSBhL21tL21hZHZpc2UuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9tYWR2aXNlLmMKQEAgLTQxOSw5ICYjNDM7NDE5LDEwIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsCiAJCWlmIChuZXh0IC0gYWRkciAhPSBIUEFHRV9QTURfU0laRSkgewogCQkJaW50IGVycjsKIAomIzQzOwkJCWlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpCiYjNDM7CQkJCWdvdG8gaHVnZV91bmxvY2s7CiAJCQlmb2xpb19nZXQoZm9saW8pOwogCQkJc3Bpbl91bmxvY2socHRsKTsKLQkJCWZvbGlvX2xvY2soZm9saW8pOwogCQkJZXJyID0gc3BsaXRfZm9saW8oZm9saW8pOwogCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKIAkJCWZvbGlvX3B1dChmb2xpbyk7CjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODMKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiAyODEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBgbW0vbWFkdmlzZS5jYCBQYXRjaCoqCgpPa2F5LCBzbyBJIHNlZSBhIHBhdGNoIHN1Ym1pdHRlZCBmb3IgYG1tL21hZHZpc2UuY2AuIFRoZSB0YXNrIGlzIHRvIHVuZGVyc3RhbmQgaXRzIGltcGFjdC4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvZGUuIEl0IHNlZW1zIHRoZSBwYXRjaCBpbnZvbHZlcyBzb21lIGNoYW5nZXMgYXJvdW5kIHRoZSBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbG9naWMgdGhhdCBoYW5kbGVzIHNwbGl0dGluZyBodWdlIHBhZ2VzLgoKTG9va2luZyBhdCB0aGUgZGlmZiwgaXQgYXBwZWFycyBhIGBmb2xpb190cnlsb2NrYCBoYXMgYmVlbiBhZGRlZCBiZWZvcmUgdGhlIGBzcGxpdF9mb2xpb2AgY2FsbC4gVGhlcmUmIzM5O3MgYWxzbyBzb21lIHJlb3JkZXJpbmcuIENyaXRpY2FsbHksIHRoZSBgZm9saW9fbG9ja2AgYW5kIGBzcGluX3VubG9ja2AgYXJlIG5vdyBjb25kaXRpb25hbGx5IGFwcGxpZWQuIFRoZSBgZm9saW9fdHJ5bG9ja2AgcHJvYmFibHkgcHJldmVudHMgYSBkZWFkbG9jay4KCkxldCYjMzk7cyBxdWlja2x5IHJlZnJlc2ggdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gTGV0IG1lIGNoZWNrIHRoZSBjb2RlIGFyb3VuZCBsaW5lIDQxOSwgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgZmxvdyBhbmQgcmF0aW9uYWxlIGJlaGluZCB0aGVzZSBjaGFuZ2VzLCBieSByZWFkaW5nIHRoZSBjb2RlIHdpdGhpbiBgbW0vbWFkdmlzZS5jYC4gVW5kZXJzdGFuZGluZyB0aGUgc3Vycm91bmRpbmcgY29kZSB3aWxsIGNsYXJpZnkgdGhlIHB1cnBvc2Ugb2YgdGhpcyBwYXJ0aWN1bGFyIGNvZGUgYmxvY2sgYW5kIHRoZSByZWFzb24gZm9yIHRoZSBsb2NrIGNoYW5nZXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNzAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM5MDpcdFx0XHR1bnNpZ25lZCBsb25nIG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcbiAzOTE6XHRcbiAzOTI6XHRcdFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBIUEFHRV9QTURfU0laRSk7XG4gMzkzOlx0XHRcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xuIDM5NDpcdFx0XHRpZiAoIXB0bClcbiAzOTU6XHRcdFx0XHRyZXR1cm4gMDtcbiAzOTY6XHRcbiAzOTc6XHRcdFx0b3JpZ19wbWQgPSAqcG1kO1xuIDM5ODpcdFx0XHRpZiAoaXNfaHVnZV96ZXJvX3BtZChvcmlnX3BtZCkpXG4gMzk5Olx0XHRcdFx0Z290byBodWdlX3VubG9jaztcbiA0MDA6XHRcbiA0MDE6XHRcdFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XG4gNDAyOlx0XHRcdFx0Vk1fV0FSTl9PTl9PTkNFKCFwbWRfaXNfbWlncmF0aW9uX2VudHJ5KG9yaWdfcG1kKSBcdTAwMjZcdTAwMjZcbiA0MDM6XHRcdFx0XHRcdFx0IXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpO1xuIDQwNDpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gNDA1Olx0XHRcdH1cbiA0MDY6XHRcbiA0MDc6XHRcdFx0Zm9saW8gPSBwbWRfZm9saW8ob3JpZ19wbWQpO1xuIDQwODpcdFxuIDQwOTpcdFx0XHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxuIDQxMDpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gNDExOlx0XG4gNDEyOlx0XHRcdC8qIERvIG5vdCBpbnRlcmZlcmUgd2l0aCBvdGhlciBtYXBwaW5ncyBvZiB0aGlzIGZvbGlvICovXG4gNDEzOlx0XHRcdGlmIChmb2xpb19tYXliZV9tYXBwZWRfc2hhcmVkKGZvbGlvKSlcbiA0MTQ6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDQxNTpcdFxuIDQxNjpcdFx0XHRpZiAocGFnZW91dF9hbm9uX29ubHlfZmlsdGVyIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbiA0MTc6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDQxODpcdFxuIDQxOTpcdFx0XHRpZiAobmV4dCAtIGFkZHIgIT0gSFBBR0VfUE1EX1NJWkUpIHtcbiA0MjA6XHRcdFx0XHRpbnQgZXJyO1xuIDQyMTpcdFxuIDQyMjpcdFx0XHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4gNDIzOlx0XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIDQyNDpcdFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4gNDI1Olx0XHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbiA0MjY6XHRcdFx0XHRlcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG4gNDI3Olx0XHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiA0Mjg6XHRcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIDQyOTpcdFx0XHRcdGlmICghZXJyKVxuIDQzMDpcdFx0XHRcdFx0Z290byByZWd1bGFyX2ZvbGlvO1xuIDQzMTpcdFx0XHRcdHJldHVybiAwO1xuIDQzMjpcdFx0XHR9XG4gNDMzOlx0XG4gNDM0Olx0XHRcdGlmICghcGFnZW91dCBcdTAwMjZcdTAwMjYgcG1kX3lvdW5nKG9yaWdfcG1kKSkge1xuIDQzNTpcdFx0XHRcdHBtZHBfaW52YWxpZGF0ZSh2bWEsIGFkZHIsIHBtZCk7XG4gNDM2Olx0XHRcdFx0b3JpZ19wbWQgPSBwbWRfbWtvbGQob3JpZ19wbWQpO1xuIDQzNzpcdFxuIDQzODpcdFx0XHRcdHNldF9wbWRfYXQobW0sIGFkZHIsIHBtZCwgb3JpZ19wbWQpO1xuIDQzOTpcdFx0XHRcdHRsYl9yZW1vdmVfcG1kX3RsYl9lbnRyeSh0bGIsIHBtZCwgYWRkcik7XG4gNDQwOlx0XHRcdH1cbiA0NDE6XHRcbiA0NDI6XHRcdFx0Zm9saW9fY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XG4gNDQzOlx0XHRcdGZvbGlvX3Rlc3RfY2xlYXJfeW91bmcoZm9saW8pO1xuIDQ0NDpcdFx0XHRpZiAoZm9saW9fdGVzdF9hY3RpdmUoZm9saW8pKVxuIDQ0NTpcdFx0XHRcdGZvbGlvX3NldF93b3JraW5nc2V0KGZvbGlvKTtcbiA0NDY6XHRcdFx0aWYgKHBhZ2VvdXQpIHtcbiA0NDc6XHRcdFx0XHRpZiAoZm9saW9faXNvbGF0ZV9scnUoZm9saW8pKSB7XG4gNDQ4Olx0XHRcdFx0XHRpZiAoZm9saW9fdGVzdF91bmV2aWN0YWJsZShmb2xpbykpXG4gNDQ5Olx0XHRcdFx0XHRcdGZvbGlvX3B1dGJhY2tfbHJ1KGZvbGlvKTtcbiA0NTA6XHRcdFx0XHRcdGVsc2VcbiA0NTE6XHRcdFx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiA0NTI6XHRcdFx0XHR9XG4gNDUzOlx0XHRcdH0gZWxzZVxuIDQ1NDpcdFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIDQ1NTpcdGh1Z2VfdW5sb2NrOlxuIDQ1NjpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQ1NzpcdFx0XHRpZiAocGFnZW91dClcbiA0NTg6XHRcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xuIDQ1OTpcdFx0XHRyZXR1cm4gMDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo0OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDYyCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0czoKCioqQW5hbHl6aW5nIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGluLiBGaXJzdCwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhpcyBmdW5jdGlvbiwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAuIFRoZSBuYW1lIGl0c2VsZiBpcyBmYWlybHkgZGVzY3JpcHRpdmUsIHN1Z2dlc3RpbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBtZW1vcnkgYWR2aWNlIGFuZCBoYW5kbGluZyBwYWdlLW91dHMgb3IgJiMzNDtjb2xkJiMzNDsgcGFnZXMgYXQgdGhlIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgbGV2ZWwuIEJ1dCBjb250ZXh0IGlzIGtpbmcsIHNvIEkgbmVlZCB0byBzZWUgKmhvdyogaXQmIzM5O3MgYmVpbmcgdXNlZCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgbG9naWMgbG9va3MgbGlrZS4KClRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSwgSSYjMzk7bGwganVtcCBpbnRvIGBtbS9tYWR2aXNlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmVzIDM1MC00MDAuIFRoYXQgcmFuZ2Ugc2hvdWxkIGdpdmUgbWUgYSBnb29kIGZlZWwgZm9yIHRoZSBicm9hZGVyIGltcGxlbWVudGF0aW9uLCBhbnkgc3VwcG9ydGluZyBkYXRhIHN0cnVjdHVyZXMsIGFuZCB0aGUgY2FsbGluZyBjb252ZW50aW9ucy4gSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIHJldmVhbCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCB0aGlzIG1hZHZpc2UgZnVuY3Rpb24gaXMgaW52b2tlZCBhbmQgd2hhdCBvdGhlciBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgaW4gY29uanVuY3Rpb24gd2l0aCBpdHMgZXhlY3V0aW9uLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgdGhhdCBtaWdodCBiZSBhZGRyZXNzZWQgYXQgdGhpcyBsZXZlbC4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzNTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDM1MDpcdFx0cmV0dXJuIGZpbGVfb3duZXJfb3JfY2FwYWJsZSh2bWEtXHUwMDNldm1fZmlsZSkgfHxcbiAzNTE6XHRcdCAgICAgICBmaWxlX3Blcm1pc3Npb24odm1hLVx1MDAzZXZtX2ZpbGUsIE1BWV9XUklURSkgPT0gMDtcbiAzNTI6XHR9XG4gMzUzOlx0XG4gMzU0Olx0c3RhdGljIGlubGluZSBpbnQgbWFkdmlzZV9mb2xpb19wdGVfYmF0Y2godW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbiAzNTU6XHRcdFx0XHRcdFx0ICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlcCxcbiAzNTY6XHRcdFx0XHRcdFx0ICBwdGVfdCAqcHRlbnRwKVxuIDM1NzpcdHtcbiAzNTg6XHRcdGludCBtYXhfbnIgPSAoZW5kIC0gYWRkcikgLyBQQUdFX1NJWkU7XG4gMzU5Olx0XG4gMzYwOlx0XHRyZXR1cm4gZm9saW9fcHRlX2JhdGNoX2ZsYWdzKGZvbGlvLCBOVUxMLCBwdGVwLCBwdGVudHAsIG1heF9ucixcbiAzNjE6XHRcdFx0XHRcdCAgICAgRlBCX01FUkdFX1lPVU5HX0RJUlRZKTtcbiAzNjI6XHR9XG4gMzYzOlx0XG4gMzY0Olx0c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbiAzNjU6XHRcdFx0XHRcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXG4gMzY2Olx0XHRcdFx0XHRzdHJ1Y3QgbW1fd2FsayAqd2FsaylcbiAzNjc6XHR7XG4gMzY4Olx0XHRzdHJ1Y3QgbWFkdmlzZV93YWxrX3ByaXZhdGUgKnByaXZhdGUgPSB3YWxrLVx1MDAzZXByaXZhdGU7XG4gMzY5Olx0XHRzdHJ1Y3QgbW11X2dhdGhlciAqdGxiID0gcHJpdmF0ZS1cdTAwM2V0bGI7XG4gMzcwOlx0XHRib29sIHBhZ2VvdXQgPSBwcml2YXRlLVx1MDAzZXBhZ2VvdXQ7XG4gMzcxOlx0XHRzdHJ1Y3QgbW1fc3RydWN0ICptbSA9IHRsYi1cdTAwM2VtbTtcbiAzNzI6XHRcdHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hID0gd2Fsay1cdTAwM2V2bWE7XG4gMzczOlx0XHRwdGVfdCAqc3RhcnRfcHRlLCAqcHRlLCBwdGVudDtcbiAzNzQ6XHRcdHNwaW5sb2NrX3QgKnB0bDtcbiAzNzU6XHRcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xuIDM3NjpcdFx0TElTVF9IRUFEKGZvbGlvX2xpc3QpO1xuIDM3NzpcdFx0Ym9vbCBwYWdlb3V0X2Fub25fb25seV9maWx0ZXI7XG4gMzc4Olx0XHR1bnNpZ25lZCBpbnQgYmF0Y2hfY291bnQgPSAwO1xuIDM3OTpcdFx0aW50IG5yO1xuIDM4MDpcdFxuIDM4MTpcdFx0aWYgKGZhdGFsX3NpZ25hbF9wZW5kaW5nKGN1cnJlbnQpKVxuIDM4MjpcdFx0XHRyZXR1cm4gLUVJTlRSO1xuIDM4MzpcdFxuIDM4NDpcdFx0cGFnZW91dF9hbm9uX29ubHlfZmlsdGVyID0gcGFnZW91dCBcdTAwMjZcdTAwMjYgIXZtYV9pc19hbm9ueW1vdXModm1hKSBcdTAwMjZcdTAwMjZcbiAzODU6XHRcdFx0XHRcdFx0IWNhbl9kb19maWxlX3BhZ2VvdXQodm1hKTtcbiAzODY6XHRcbiAzODc6XHQjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFXG4gMzg4Olx0XHRpZiAocG1kX3RyYW5zX2h1Z2UoKnBtZCkpIHtcbiAzODk6XHRcdFx0cG1kX3Qgb3JpZ19wbWQ7XG4gMzkwOlx0XHRcdHVuc2lnbmVkIGxvbmcgbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xuIDM5MTpcdFxuIDM5MjpcdFx0XHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIEhQQUdFX1BNRF9TSVpFKTtcbiAzOTM6XHRcdFx0cHRsID0gcG1kX3RyYW5zX2h1Z2VfbG9jayhwbWQsIHZtYSk7XG4gMzk0Olx0XHRcdGlmICghcHRsKVxuIDM5NTpcdFx0XHRcdHJldHVybiAwO1xuIDM5NjpcdFxuIDM5NzpcdFx0XHRvcmlnX3BtZCA9ICpwbWQ7XG4gMzk4Olx0XHRcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbiAzOTk6XHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjQ5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDU2MzUKCQkJCQkJCW91dHB1dDogMzUKCQkJCQkJCXRob3VnaHRzOiA2MzIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIGEgUmVjZW50IE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIHNuaXBwZXQsIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhhdCBpdCYjMzk7cyBhbGwgd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmxvY2suICBUaGF0JiMzOTtzIG15IHN0YXJ0aW5nIHBvaW50LiBUaGlzIGlzIHVzZWQgd2l0aCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgd2hpY2ggaXMgdXNlZCBmb3IgYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgLiBUaGlzIGlzIGludGVyZXN0aW5nIGJlY2F1c2UgdGhpcyBtYWR2aXNlIHN5c3RlbSBjYWxsIGNhbiBkaXJlY3RseSBtYW5pcHVsYXRlIG1lbW9yeSBtYW5hZ2VtZW50LCBhbmQgSSBrbm93IHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMgYXJlIGEgcG90ZW50aWFsIHBvaW50IG9mIGNvbnRlbnRpb24uCgpJIHNlZSBhIHNwZWNpZmljIGNoYW5nZSB3aXRoaW4gYG1tL21hZHZpc2UuY2AuICBQcmV2aW91c2x5LCB0aGUgY29kZSBkaWQgYSBgZm9saW9fZ2V0YCwgdGhlbiBgc3Bpbl91bmxvY2socHRsKWAsIGFuZCB0aGVuIGEgYmxvY2tpbmcgYGZvbGlvX2xvY2soZm9saW8pYC4gTm93LCB0aGVyZSYjMzk7cyBhIGBmb2xpb190cnlsb2NrKGZvbGlvKWAgKmJlZm9yZSogdGhlIGBzcGluX3VubG9jayhwdGwpYC4gSWYgdGhlIHRyeWxvY2sgZmFpbHMsIGl0IGp1bXBzIHRvIGBodWdlX3VubG9ja2Agd2hpY2ggZG9lcyBhIGBzcGluX3VubG9jayhwdGwpYC4gIFRoaXMgaXMgYSBiaWcgY2x1ZSDigJMgaXQgbG9va3MgbGlrZSB0aGV5JiMzOTtyZSB0cnlpbmcgdG8gYXZvaWQgYSBwb3RlbnRpYWwgZGVhZGxvY2sgb3IgaW1wcm92ZSBsb2NraW5nIG9yZGVyIGhlcmUuIFRoZSBvbGQgY29kZSB3YXMgZHJvcHBpbmcgYHB0bGAgYmVmb3JlIGFjcXVpcmluZyBgZm9saW9fbG9ja2AsIHdoaWNoIG1heSBsZWFkIHRvIHBvc3NpYmxlIGRlYWRsb2NrLgoKTm93LCBpcyB0aGlzIGV2ZW4gcmVhY2hhYmxlPyBBYnNvbHV0ZWx5ISBUaGlzIGhhcHBlbnMgd2hlbiB5b3UgY2FsbCBgbWFkdmlzZShNQURWX1BBR0VPVVQpYCBvciBgbWFkdmlzZShNQURWX0NPTEQpYCBvbiBhIHRyYW5zcGFyZW50IGh1Z2UgcGFnZSByYW5nZSwgc3BlY2lmaWNhbGx5IGlmIHRoZSByYW5nZSBkb2VzbiYjMzk7dCBjb3ZlciB0aGUgKmVudGlyZSogaHVnZSBwYWdlLiBUaGlzIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBtYWR2aXNlKClgIHN5c2NhbGwuIFRoaXMgaXMgYSBiaWcgd2luIGZvciB0ZXN0aW5nIGJlY2F1c2UgdGhpcyBjYW4gYmUgZWFzaWx5IHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSEKCkxldCBtZSBtYWtlIHN1cmUgSSYjMzk7bSBjYXB0dXJpbmcgYWxsIHRoZSBzYWxpZW50IHBvaW50czoKCiogICAqKlJlYWNoYWJpbGl0eToqKiBEaXJlY3QgdXNlcnNwYWNlIGFjY2VzcyB0aHJvdWdoIGBtYWR2aXNlKClgLCBib3RoIHdpdGggYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgIHdpdGhpbiBgcHJvY2Vzc19tYWR2aXNlYCBhbmQgYG1hZHZpc2VgLgoqICAgKipDb3JlIFN1YnN5c3RlbToqKiBUaGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgbWVtb3J5IG1hbmFnZW1lbnQgY29kZSAoYG1tL2ApLgoqICAgKipMb2NraW5nIENoYW5nZXM6KiogQ3JpdGljYWwgY2hhbmdlIGZyb20gYSBibG9ja2luZyBgZm9saW9fbG9ja2AgYWZ0ZXIgcmVsZWFzaW5nIHRoZSBzcGlubG9jayB0byBgZm9saW9fdHJ5bG9ja2AgKndoaWxlKiBob2xkaW5nIHRoZSBzcGlubG9jay4KCkJhc2VkIG9uIHRoaXMgYW5hbHlzaXMsIHRoaXMgbW9kaWZpY2F0aW9uIGlzICoqZGVmaW5pdGVseSBXb3J0aEZ1enppbmc9dHJ1ZSoqIGJlY2F1c2Ugb2YgdGhlIHVzZXIgc3BhY2UgYWNjZXNzaWJpbGl0eSBhbmQgbG9ja2luZyBjaGFuZ2VzLCBwb3RlbnRpYWxseSBleHBvc2luZyByYWNlIGNvbmRpdGlvbnMuIEkgbmVlZCB0byBtYWtlIHN1cmUgSSB1bmRlcnN0YW5kIHRoZSBmdWxsIGNvbnRleHQgb2YgdGhpcyBjaGFuZ2Ugd2l0aGluIHRoZSBjb2RlLiBMZXQgbWUgY2hlY2sgdGhlIGAjaWZkZWZgIGJsb2NrIGFuZCB0aGUgc3Vycm91bmRpbmcgY29kZSwgaW4gcGFydGljdWxhciBmcm9tIGxpbmVzIDQ1NS00NzUgdG8gY29uZmlybSB0aGUgY29uZmlndXJhdGlvbiBhbmQgZW5zdXJlIHRoYXQgdGhlIGNvZGUgaXMgd2VsbC1mb3JtZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0NTUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQ1NTpcdGh1Z2VfdW5sb2NrOlxuIDQ1NjpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQ1NzpcdFx0XHRpZiAocGFnZW91dClcbiA0NTg6XHRcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xuIDQ1OTpcdFx0XHRyZXR1cm4gMDtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRyZWd1bGFyX2ZvbGlvOlxuIDQ2MzpcdCNlbmRpZlxuIDQ2NDpcdFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBQQUdFX1NJWkUpO1xuIDQ2NTpcdHJlc3RhcnQ6XG4gNDY2Olx0XHRzdGFydF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cdTAwM2V2bV9tbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuIDQ2NzpcdFx0aWYgKCFzdGFydF9wdGUpXG4gNDY4Olx0XHRcdHJldHVybiAwO1xuIDQ2OTpcdFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4gNDcwOlx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuIDQ3MTpcdFx0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHtcbiA0NzI6XHRcdFx0bnIgPSAxO1xuIDQ3MzpcdFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gNDc0Olx0XG4gNDc1Olx0XHRcdGlmICgmIzQzOyYjNDM7YmF0Y2hfY291bnQgPT0gU1dBUF9DTFVTVEVSX01BWCkge1xuIDQ3NjpcdFx0XHRcdGJhdGNoX2NvdW50ID0gMDtcbiA0Nzc6XHRcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcbiA0Nzg6XHRcdFx0XHRcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIDQ3OTpcdFx0XHRcdFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI4MQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcyBvbiB0aGlzLCBkaXN0aWxsZWQgaW50byBhIGZpcnN0LXBlcnNvbiBzdW1tYXJ5IGFzIHlvdSByZXF1ZXN0ZWQsIGFzc3VtaW5nIEkmIzM5O20gYWxyZWFkeSB3ZWxsLXZlcnNlZCBpbiBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqQW5hbHl6aW5nIGEgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKgoKWWVzLCBjb25maXJtZWQhIFRoZSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgcHJlcHJvY2Vzc29yIGRpcmVjdGl2ZSBvbiBsaW5lIDM4NyB0aHJvdWdoIDQ2MyBpcyBhY3RpbmcgYXMgYSBndWFyZC4gVGhpcyBtZWFucyB0aGUgZW50aXJlIGNvZGUgYmxvY2sgaXQgZW5jbG9zZXMgaXMgKm9ubHkqIGluY2x1ZGVkIGluIHRoZSBjb21waWxhdGlvbiBpZiBgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBkZWZpbmVkIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGF3YXJlIG9mIHRoZSBpbXBvcnRhbmNlIG9mIHRoZXNlIGtpbmRzIG9mIGd1YXJkcy4KCk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXRzZWxmIGhhcyBhbnkgdW51c3VhbCBvciBjcml0aWNhbCBkZXBlbmRlbmNpZXMgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiBldmFsdWF0aW5nIGNvbmRpdGlvbmFsIGNvZGUuIFRoZXJlZm9yZSwgSSB3aWxsIGltbWVkaWF0ZWx5IHJ1biBhIGdyZXAgY29tbWFuZCB0byBzZWFyY2ggdGhyb3VnaCBgbW0vS2NvbmZpZ2AsIHVzaW5nIGBjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFzIHRoZSBzZWFyY2ggdGVybSwgYW5kIGZpbmQgd2hlcmUgaXQgaXMgZGVmaW5lZCwgYW55IGRlcGVuZGVuY2llcywgYW5kL29yIG90aGVyIGltcG9ydGFudCBub3RlcyB0aGF0IHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBmZWx0IHdlcmUgbmVjZXNzYXJ5IHRvIGluY2x1ZGUgaW4gdGhlIEtjb25maWcuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vS2NvbmZpZz04Mjc9Y29uZmlnIE1NX0lEXG4tLVxubW0vS2NvbmZpZy04MjktXG5tbS9LY29uZmlnOjgzMDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG5tbS9LY29uZmlnLTgzMS1cdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODQ4PWNob2ljZVxuLS1cbm1tL0tjb25maWctODUzLVxubW0vS2NvbmZpZzo4NTQ6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg1NS1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2MC1cbm1tL0tjb25maWc6ODYxOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX01BRFZJU0Vcbm1tL0tjb25maWctODYyLVx0XHRib29sIFwmIzM0O21hZHZpc2VcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg2OS1cbm1tL0tjb25maWc6ODcwOlx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX05FVkVSXG5tbS9LY29uZmlnLTg3MS1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWc9ODc3PWNob2ljZVxuLS1cbm1tL0tjb25maWctODg2LVxubW0vS2NvbmZpZzo4ODc6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxubW0vS2NvbmZpZy04ODgtXHRcdGJvb2wgXCYjMzQ7bmV2ZXJcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTg5Ni1cbm1tL0tjb25maWc6ODk3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXG5tbS9LY29uZmlnLTg5OC1cdFx0Ym9vbCBcJiMzNDthbHdheXNcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTkwNC1cbm1tL0tjb25maWc6OTA1Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcbm1tL0tjb25maWctOTA2LVx0XHRib29sIFwmIzM0O3dpdGhpbl9zaXplXCYjMzQ7XG4tLVxubW0vS2NvbmZpZy05MTItXG5tbS9LY29uZmlnOjkxMzpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxubW0vS2NvbmZpZy05MTQtXHRcdGJvb2wgXCYjMzQ7YWR2aXNlXCYjMzQ7XG4tLVxubW0vS2NvbmZpZz05MjI9Y2hvaWNlXG4tLVxubW0vS2NvbmZpZy05MzEtXG5tbS9LY29uZmlnOjkzMjpcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX05FVkVSXG5tbS9LY29uZmlnLTkzMy1cdFx0Ym9vbCBcJiMzNDtuZXZlclwmIzM0O1xuLS1cbm1tL0tjb25maWctOTQwLVxubW0vS2NvbmZpZzo5NDE6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BTFdBWVNcbm1tL0tjb25maWctOTQyLVx0XHRib29sIFwmIzM0O2Fsd2F5c1wmIzM0O1xuLS1cbm1tL0tjb25maWctOTQ4LVxubW0vS2NvbmZpZzo5NDk6XHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9XSVRISU5fU0laRVxubW0vS2NvbmZpZy05NTAtXHRcdGJvb2wgXCYjMzQ7d2l0aGluX3NpemVcJiMzNDtcbi0tXG5tbS9LY29uZmlnLTk1Ni1cbm1tL0tjb25maWc6OTU3Olx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfQURWSVNFXG5tbS9LY29uZmlnLTk1OC1cdFx0Ym9vbCBcJiMzNDthZHZpc2VcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODM2OQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDI1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRoaW5raW5nIHByb2Nlc3M6CgoqKkRpdmluZyBpbnRvIHRoZSBLY29uZmlnIERlcGVuZGVuY2llcyBvZiBUUkFOU1BBUkVOVF9IVUdFUEFHRSoqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0JiMzOTtzIGRyaXZpbmcgdGhlIGNvbmZpZ3VyYXRpb24gb2YgYG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGluIGBtbS9LY29uZmlnYC4gSSYjMzk7bSBnb2luZyB0byBzdGFydCBieSBwdWxsaW5nIHVwIHRoYXQgZmlsZS4gSSYjMzk7bSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwmIzM5O3MgS2NvbmZpZyBzdHJ1Y3R1cmUsIGJ1dCBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSB0aGUgcmVsZXZhbnQgZGVwZW5kZW5jaWVzLiBJJiMzOTtsbCBiZSBsb29raW5nIGZvciBhbnkgYGRlcGVuZHMgb25gIHN0YXRlbWVudHMsIGFueSBgc2VsZWN0YCBzdGF0ZW1lbnRzLCBhbmQgYW55IG9idmlvdXMgYGRlZmF1bHRgIHZhbHVlcyB0aGF0IGluZmx1ZW5jZSB3aGV0aGVyIHRoZSBvcHRpb24gaXMgZXhwb3NlZCBvciBlbmFibGVkLiBJIGtub3cgZnJvbSBleHBlcmllbmNlIHRoYXQgaXTigJlzIG9mdGVuIGEgd2ViIG9mIGRlcGVuZGVuY2llcywgYW5kIHRoaXMgb25lIGNvdWxkIGJlIHRpZWQgaW50byBDUFUgZmVhdHVyZXMsIG1lbW9yeSBtYW5hZ2VtZW50IG9wdGlvbnMsIG9yIGV2ZW4gb3RoZXIgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cy4gSSYjMzk7bSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHNwZWNpZmljIENQVSBmZWF0dXJlcywgTlVNQSBjb25maWd1cmF0aW9ucywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIGdlbmVyaWMgaGFyZHdhcmUgZmxhZ3MgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGUgZGlzcGxheSBvZiB0aGlzIG9wdGlvbi4gQWZ0ZXIgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhYmxlIHRvIHJlYXNvbiBob3cgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCwgYW5kIHBvdGVudGlhbGx5IHdoYXQmIzM5O3MgYmVoaW5kIGl0cyBhY3RpdmF0aW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA4MjgsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDgyODpcdFx0ZGVmX2Jvb2wgblxuIDgyOTpcdFxuIDgzMDpcdG1lbnVjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VcbiA4MzE6XHRcdGJvb2wgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFwmIzM0O1xuIDgzMjpcdFx0ZGVwZW5kcyBvbiBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0UgXHUwMDI2XHUwMDI2ICFQUkVFTVBUX1JUXG4gODMzOlx0XHRzZWxlY3QgQ09NUEFDVElPTlxuIDgzNDpcdFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxuIDgzNTpcdFx0c2VsZWN0IE1NX0lEXG4gODM2Olx0XHRoZWxwXG4gODM3Olx0XHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcbiA4Mzg6XHRcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxuIDgzOTpcdFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cbiA4NDA6XHRcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcbiA4NDE6XHRcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xuIDg0MjpcdFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXG4gODQzOlx0XG4gODQ0Olx0XHQgIElmIG1lbW9yeSBjb25zdHJhaW5lZCBvbiBlbWJlZGRlZCwgeW91IG1heSB3YW50IHRvIHNheSBOLlxuIDg0NTpcdFxuIDg0NjpcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXG4gODQ3Olx0XG4gODQ4Olx0Y2hvaWNlXG4gODQ5Olx0XHRwcm9tcHQgXCYjMzQ7VHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydCBzeXNmcyBkZWZhdWx0c1wmIzM0O1xuIDg1MDpcdFx0ZGVmYXVsdCBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcbiA4NTE6XHRcdGhlbHBcbiA4NTI6XHRcdCAgU2VsZWN0cyB0aGUgc3lzZnMgZGVmYXVsdHMgZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQuXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkwMTIKCQkJCQkJCW91dHB1dDogNDEKCQkJCQkJCXRob3VnaHRzOiAxMDYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFRyYW5zcGFyZW50IEh1Z2UgUGFnZXMgb24gYW1kNjQqKgoKT2theSwgc28gSSBzZWUgdGhhdCBvbiBhbWQ2NCBhcmNoaXRlY3R1cmUsIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgZW5hYmxlZC4gIFRoYXQgbWVhbnMgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24gSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gaXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gR29vZCwgdGhhdCYjMzk7cyB3aGF0IEkgZXhwZWN0ZWQuIE5vdywgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCYjMzk7cyBiZWVuIGNoYW5nZWQgcmVsYXRlZCB0byB0aGlzIGluIHRoZSBjb2RlLiBJJiMzOTttIGdvaW5nIHRvIGNoZWNrIGBGb2N1c1N5bWJvbHNgIHRvIGdldCBzb21lIG1vcmUgY29udGV4dCBvbiB0aGUgY2hhbmdlcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSB3aWxsIG5vdyBsb29rIGF0IGBtbS9tYWR2aXNlLmNgIHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgY2FsbCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhcyB0aGF0JiMzOTtsbCBsaWtlbHkgZ2l2ZSBtZSB0aGUgbW9zdCBpbnNpZ2h0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hZHZpc2UuYy0zNjMtXG5tbS9tYWR2aXNlLmM6MzY0OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG5tbS9tYWR2aXNlLmMtMzY1LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tYWR2aXNlLmM9NTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcbm1tL21hZHZpc2UuYzo1ODQ6XHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxubW0vbWFkdmlzZS5jLTU4NS1cdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTUzCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqSW52ZXN0aWdhdGluZyBgY29sZF93YWxrX29wc2AgaW4gYG1tL21hZHZpc2UuY2AqKgoKT2theSwgc28gSSYjMzk7bSBkaWdnaW5nIGludG8gYG1tL21hZHZpc2UuY2AgYWdhaW4sIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBjb2xkX3dhbGtfb3BzYC4gSSYjMzk7bSBzdGFydGluZyBmcm9tIHRoZSBmdW5jdGlvbiBuYW1lIGl0c2VsZi4gSSB3YW50IHRvIHNlZSBwcmVjaXNlbHkgd2hlcmUgYW5kIGhvdyB0aGlzIHBhcnRpY3VsYXIgYHdhbGtfb3BzYCBzdHJ1Y3QgaXMgYmVpbmcgZW1wbG95ZWQgd2l0aGluIHRoZSBgbWFkdmlzZWAgc3Vic3lzdGVtLiBLbm93aW5nIHRoaXMgd2lsbCBnaXZlIG1lIGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcgb2YgaG93IHRoZSBrZXJuZWwgaGFuZGxlcyBjb2xkIHBhZ2VzLgoKSSYjMzk7bSB0aGlua2luZywgJiMzNDtXaGVyZSBkbyB3ZSBkZWZpbmUgdGhlIG1hZHZpc2U/JiMzNDsKCkkgc3VzcGVjdCB0aGlzIHdpbGwgZ2l2ZSBtZSBhIGdvb2QganVtcGluZy1vZmYgcG9pbnQgZm9yIGRlYnVnZ2luZyBhIHJlbGF0ZWQgaXNzdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbGRfd2Fsa19vcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM2ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy01ODItXG5tbS9tYWR2aXNlLmM6NTgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcbm1tL21hZHZpc2UuYy01ODQtXHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxuLS1cbm1tL21hZHZpc2UuYz01ODg9c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xkX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbi0tXG5tbS9tYWR2aXNlLmMtNTk5LVx0dGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSk7XG5tbS9tYWR2aXNlLmM6NjAwOlx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVx1MDAzZXN0YXJ0LCByYW5nZS1cdTAwM2VlbmQsIFx1MDAyNmNvbGRfd2Fsa19vcHMsXG5tbS9tYWR2aXNlLmMtNjAxLVx0XHRcdFx1MDAyNndhbGtfcHJpdmF0ZSk7XG4tLVxubW0vbWFkdmlzZS5jPTYyNj1zdGF0aWMgdm9pZCBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxuLS1cbm1tL21hZHZpc2UuYy02MzUtXHR0bGJfc3RhcnRfdm1hKHRsYiwgdm1hKTtcbm1tL21hZHZpc2UuYzo2MzY6XHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXHUwMDNlc3RhcnQsIHJhbmdlLVx1MDAzZWVuZCwgXHUwMDI2Y29sZF93YWxrX29wcyxcbm1tL21hZHZpc2UuYy02MzctXHRcdFx0ICAgIFx1MDAyNndhbGtfcHJpdmF0ZSk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMTQ3CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTA1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGFnZSBBZHZpc2UgRnVuY3Rpb25hbGl0eSoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBmb2N1cyByaWdodCBub3cgaXMgb24gdW5kZXJzdGFuZGluZyBob3cgYG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlYCBhbmQgYG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlYCBmdW5jdGlvbiBpbnRlcm5hbGx5LiBJdCBsb29rcyBsaWtlIGJvdGggb2YgdGhlc2UsIGF0IHRoZWlyIGNvcmUsIHV0aWxpemUgYHdhbGtfcGFnZV9yYW5nZV92bWFgLiBUaGF0JiMzOTtzIHRoZSBrZXkgZnVuY3Rpb24gaGFuZGxpbmcgdGhlIGl0ZXJhdGlvbiBhY3Jvc3MgdGhlIHZpcnR1YWwgbWVtb3J5IGFyZWEuIEFuZCB0aGUgaW50ZXJlc3RpbmcgdGhpbmcgaXMsIHRoZXkgZmVlZCBpdCBgJmFtcDtjb2xkX3dhbGtfb3BzYCwgaW1wbHlpbmcgdGhleSYjMzk7cmUgdXNpbmcgYSBzcGVjaWZpYyBzZXQgb2Ygb3BlcmF0aW9ucyBmb3IgZGVhbGluZyB3aXRoICYjMzQ7Y29sZCYjMzQ7IG9yICYjMzQ7cGFnZW91dCYjMzQ7IG1lbW9yeSByZWdpb25zLiBUaGUgY3JpdGljYWwgb3BlcmF0aW9uIGFwcGVhcnMgdG8gYmUgYC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBhcyBJIG5lZWQgdG8gZmlndXJlIG91dCBob3cgdGhlc2UgYWR2aXNlIG9wZXJhdGlvbnMgYXJlIGFwcGxpZWQgdG8gYSByYW5nZSBvZiBwYWdlcy4gU28sIEkgbmVlZCB0byBzZWUgd2hlcmUgdGhlc2UgbWFkdmlzZSBjYWxscyBhcmUgYWN0dWFsbHkgb3JpZ2luYXRpbmcuIFRpbWUgdG8gdHJhY2UgdGhlIGNhbGxpbmcgY2hhaW4gYW5kIGdldCB0aGUgYnJvYWRlciBwaWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlXyhjb2xkfHBhZ2VvdXQpX3BhZ2VfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTU4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XG4tLVxubW0vbWFkdmlzZS5jLTU4Ny1cbm1tL21hZHZpc2UuYzo1ODg6c3RhdGljIHZvaWQgbWFkdmlzZV9jb2xkX3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcbm1tL21hZHZpc2UuYy01ODktXHRcdHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYz02MTA9c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxuLS1cbm1tL21hZHZpc2UuYy02MTktXHR0bGJfZ2F0aGVyX21tdShcdTAwMjZ0bGIsIG1hZHZfYmVoYXZpb3ItXHUwMDNlbW0pO1xubW0vbWFkdmlzZS5jOjYyMDpcdG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKFx1MDAyNnRsYiwgbWFkdl9iZWhhdmlvcik7XG5tbS9tYWR2aXNlLmMtNjIxLVx0dGxiX2ZpbmlzaF9tbXUoXHUwMDI2dGxiKTtcbi0tXG5tbS9tYWR2aXNlLmMtNjI1LVxubW0vbWFkdmlzZS5jOjYyNjpzdGF0aWMgdm9pZCBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShzdHJ1Y3QgbW11X2dhdGhlciAqdGxiLFxubW0vbWFkdmlzZS5jLTYyNy1cdFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsXG4tLVxubW0vbWFkdmlzZS5jPTY0MT1zdGF0aWMgbG9uZyBtYWR2aXNlX3BhZ2VvdXQoc3RydWN0IG1hZHZpc2VfYmVoYXZpb3IgKm1hZHZfYmVoYXZpb3IpXG4tLVxubW0vbWFkdmlzZS5jLTY2MC1cdHRsYl9nYXRoZXJfbW11KFx1MDAyNnRsYiwgbWFkdl9iZWhhdmlvci1cdTAwM2VtbSk7XG5tbS9tYWR2aXNlLmM6NjYxOlx0bWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2UoXHUwMDI2dGxiLCB2bWEsIFx1MDAyNm1hZHZfYmVoYXZpb3ItXHUwMDNlcmFuZ2UpO1xubW0vbWFkdmlzZS5jLTY2Mi1cdHRsYl9maW5pc2hfbW11KFx1MDAyNnRsYik7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTM3CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMjcwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBLZXJuZWwgU3ltYm9sIFVzYWdlIGFuZCBJbmxpbmluZyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAsIGEgc3RhdGljIGZ1bmN0aW9uLiBNeSBmaXJzdCBpbnN0aW5jdCBpcyB0byBzZWUgaWYgdGhlIGNvbXBpbGVyIGlzIGlubGluaW5nIGl0LiBXaXRoIEdDQy9DbGFuZywgc3RhdGljIGZ1bmN0aW9ucyB0aGF0IGFyZSBwYXNzZWQgYXMgZnVuY3Rpb24gcG9pbnRlcnMsIGxpa2UgaG93IGl0JiMzOTtzIGRvbmUgd2l0aGluIHRoaXMgYGNvbGRfd2Fsa19vcHMucG1kX2VudHJ5YCBzdHJ1Y3QsIGFyZSBub3QgZnVsbHkgZWxpbWluYXRlZCBvciBpbmxpbmVkIGJlY2F1c2UgdGhlaXIgYWRkcmVzcyBpcyB0YWtlbi4gVGhpcyBtZWFucyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCAqd2lsbCogaGF2ZSBhIHN5bWJvbCBpbiB2bWxpbnV4LiBHb29kIHRvIGtub3cuCgpJIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBsb29rIGF0IGBtYWR2aXNlX2NvbGRgLCBgbWFkdmlzZV9wYWdlb3V0YCwgYG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlYCwgYW5kIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAgd2hpbGUgSSYjMzk7bSBhdCBpdCwganVzdCBmb3IgY29tcGxldGVuZXNzLiBBcmUgdGhlc2UgZnVuY3Rpb25zIGFsbCBvdmVyIHRoZSBwbGFjZT8gTm8sIHRoYW5rZnVsbHksIHRoZXkgYXJlIHNwZWNpZmljIHRvIHRoZSBgbWFkdmlzZWAgY2FsbHMgd2l0aCBgTUFEVl9DT0xEYCBhbmQgYE1BRFZfUEFHRU9VVGAgZmxhZ3MuIFNpbWlsYXJseSwgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgaXRzZWxmIGlzIG9ubHkgc3BlY2lmaWMgdG8gdGhlIGNvbGQvcGFnZW91dCBtYWR2aXNlIHVzZSBjYXNlcy4KClRvIGdhaW4gYSBjbGVhcmVyIHVuZGVyc3RhbmRpbmcgb2YgdGhlIHJlYXNvbmluZyBhbmQgdGhlIGJyb2FkZXIgY29udGV4dCwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhlIGdpdCBsb2cgZm9yIGFueSByZWxldmFudCBwYXRjaGVzLiBTZWVpbmcgdGhlIGNvbW1pdCBoaXN0b3J5IHdvdWxkIGdpdmUgbWUgdmFsdWFibGUgaW5zaWdodC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Zm9saW9fdHJ5bG9ja1xcKGZvbGlvXFwpJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL21hZHZpc2UuYz0zNjQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcbi0tXG5tbS9tYWR2aXNlLmMtNDIxLVxubW0vbWFkdmlzZS5jOjQyMjpcdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxubW0vbWFkdmlzZS5jLTQyMy1cdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4tLVxubW0vbWFkdmlzZS5jLTUxMC1cdFx0XHRcdFx0Y29udGludWU7XG5tbS9tYWR2aXNlLmM6NTExOlx0XHRcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbm1tL21hZHZpc2UuYy01MTItXHRcdFx0XHRcdGNvbnRpbnVlO1xuLS1cbm1tL21hZHZpc2UuYz02Njc9c3RhdGljIGludCBtYWR2aXNlX2ZyZWVfcHRlX3JhbmdlKHBtZF90ICpwbWQsIHVuc2lnbmVkIGxvbmcgYWRkcixcbi0tXG5tbS9tYWR2aXNlLmMtNzM3LVx0XHRcdFx0XHRjb250aW51ZTtcbm1tL21hZHZpc2UuYzo3Mzg6XHRcdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxubW0vbWFkdmlzZS5jLTczOS1cdFx0XHRcdFx0Y29udGludWU7XG4tLVxubW0vbWFkdmlzZS5jLTc1OS1cdFx0aWYgKGZvbGlvX3Rlc3Rfc3dhcGNhY2hlKGZvbGlvKSB8fCBmb2xpb190ZXN0X2RpcnR5KGZvbGlvKSkge1xubW0vbWFkdmlzZS5jOjc2MDpcdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxubW0vbWFkdmlzZS5jLTc2MS1cdFx0XHRcdGNvbnRpbnVlO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTg4MAoJCQkJCQkJb3V0cHV0OiAyNgoJCQkJCQkJdGhvdWdodHM6IDk0MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBDcml0aWNhbCBNZW1vcnkgTWFuYWdlbWVudCBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gSSYjMzk7bSBsb29raW5nIGF0IGEgcGF0Y2ggdGhhdCBhbHRlcnMgdGhlIGxvY2tpbmcgc2VxdWVuY2Ugd2l0aGluIGBtbS9tYWR2aXNlLmNgLCBzcGVjaWZpY2FsbHkgYXJvdW5kIHRoZSBzcGxpdHRpbmcgb2YgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBkdXJpbmcgYE1BRFZfQ09MRGAgb3IgYE1BRFZfUEFHRU9VVGAgY2FsbHMuIFRoZSBjb2RlIHNuaXBwZXQgYmVmb3JlIHRoZSBjb21taXQgdXNlZCBhIGBmb2xpb19sb2NrYCBhZnRlciBgc3Bpbl91bmxvY2socHRsKWAsIHdoaWNoIGlzIGEgZGFuZ2Vyb3VzIHBhdHRlcm4uIEkgc2VlIHRoZSBjaGFuZ2UgaW50cm9kdWNlcyBgZm9saW9fdHJ5bG9ja2AgYmVmb3JlIGRyb3BwaW5nIGBwdGxgLCB3aGljaCBpcyBhIHNpZ25pZmljYW50IGFyY2hpdGVjdHVyYWwgc2hpZnQuCgpUaGUgaW5pdGlhbCBjb25jZXJuLCBhbmQgdGhlIHJlYXNvbiBmb3IgdGhlIGNoYW5nZSwgaXMgdG8gYXZvaWQgYSBwb3RlbnRpYWwgcmFjZSBjb25kaXRpb24gYW5kIGRlYWRsb2NrLiBQcmV2aW91c2x5LCB0aGVyZSB3YXMgYSB3aW5kb3cgYmV0d2VlbiBkcm9wcGluZyB0aGUgUE1EIHRhYmxlIGxvY2sgKGBwdGxgKSBhbmQgYWNxdWlyaW5nIHRoZSBibG9ja2luZyBgZm9saW9fbG9ja2AuIER1cmluZyB0aGlzIHdpbmRvdywgdGhlIGZvbGlvIGNvdWxkIGhhdmUgYmVlbiBtb2RpZmllZCAoc3BsaXQsIGZyZWVkLCBldGMuKSBjYXVzaW5nIHBvc3NpYmxlIGRhdGEgY29ycnVwdGlvbiBvciBkZWFkbG9jay4gVGhpcyBuZXcgcGF0Y2ggYWRkcmVzc2VzIHRoYXQgYnkgZmlyc3QgdHJ5aW5nIHRvIGxvY2sgdGhlIGZvbGlvIHdpdGggYGZvbGlvX3RyeWxvY2tgLiBJZiB0aGF0IHN1Y2NlZWRzLCB3ZSBwcm9jZWVkIHdpdGggdGhlIHNwbGl0IGFmdGVyIHJlbGVhc2luZyBgcHRsYC4gSWYgdGhlIHRyeWxvY2sgZmFpbHMsIHdlIGJhaWwsIHdoaWNoIGF2b2lkcyB0aGUgcmFjZSBhbmQgcG90ZW50aWFsIGRlYWRsb2NrLgoKVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgZm9saW9fdHJ5bG9ja2AgZG9lc24mIzM5O3Qgc2xlZXAsIHNvIGNhbGxpbmcgaXQgd2hpbGUgaG9sZGluZyBgcHRsYCBpcyBzYWZlLiBUaGlzIGVsaW1pbmF0ZXMgdGhlIHJhY2UgY29uZGl0aW9uIHRoYXQgZXhpc3RlZCBwcmV2aW91c2x5LiBOb3cgdGhlIHF1ZXN0aW9uIGlzOiBpcyB0aGlzIGNoYW5nZSBmdXp6YWJsZT8KClRoZSBhbnN3ZXIgaXMgYSBjbGVhciAmIzM0O3llcy4mIzM0OyBUaGlzIGNoYW5nZSBkaXJlY3RseSBtb2RpZmllcyBjb3JlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIGBtbS9gIGRpcmVjdG9yeSBhbmQgaXQgaW1wYWN0cyBzeW5jaHJvbml6YXRpb24gYW5kIGxvY2tpbmcuIFRoZSBwYXRjaCBmaXRzIGRpcmVjdGx5IHdpdGhpbiB0aGUgY3JpdGVyaWEgb3V0bGluZWQgZm9yIGZ1enppbmc6IGEgbW9kaWZpY2F0aW9uIGluIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgYW5kIGNvZGUgcmVzdHJ1Y3R1cmluZy4KCkxldCYjMzk7cyBuYWlsIGRvd24gdGhlIGZ1enppbmcgdGFyZ2V0LiBUaGUgZnVuY3Rpb25zIGludm9sdmVkIGFyZSB2ZXJ5IHNwZWNpZmljOiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlYCwgYG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlYCwgYG1hZHZpc2VfY29sZGAsIGFuZCBgbWFkdmlzZV9wYWdlb3V0YC4gVGhlIGZvY3VzIGlzIHRpZ2h0LiBUaGVzZSBhcmUgY2FsbGVkIG9ubHkgd2hlbiBhIHVzZXIgdXNlcyBgbWFkdmlzZWAgd2l0aCBgTUFEVl9DT0xEYCBvciBgTUFEVl9QQUdFT1VUYC4gQW5kIGltcG9ydGFudGx5LCB0aGUgbWFpbiBjb2RlIGNoYW5nZSBpcyBpbiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gVGhlc2Ugc3ltYm9scyBhcmUgbm90IHViaXF1aXRvdXMsIHdoaWNoIGluY3JlYXNlcyB0aGVpciB2YWx1ZSBhcyBhIGZ1enogdGFyZ2V0LgoKRmluYWxseSwgd2UgbmVlZCB0byBjb25zaWRlciB0aGUgcmVxdWlyZWQgY29uZmlndXJhdGlvbnMuIFRoZSBtb2RpZmllZCBjb2RlIGlzIGNvbmRpdGlvbmFsbHkgY29tcGlsZWQgdW5kZXIgYCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgLiBXaXRob3V0IHRoYXQsIHRoZSBjb2RlIGlzIHRvdGFsbHkgYWJzZW50LiBTbywgZW5hYmxpbmcgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYCBpcyBhbiBhYnNvbHV0ZSByZXF1aXJlbWVudC4gTm8gb3RoZXIgY29uZmlndXJhdGlvbiBkZXBlbmRlbmNpZXMganVtcCBvdXQgYXQgbWUuIFRoaXMgc2VlbXMgbGlrZSBhIHByb21pc2luZyB0YXJnZXQgZm9yIGZ1enppbmcgdG8gdmFsaWRhdGUgdGhlIGNoYW5nZSBhbmQgZW5zdXJlIHRoZSBmaXggaXMgd29ya2luZyBhcyBpbnRlbmRlZCBhbmQgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcmVncmVzc2lvbnMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21hZHZpc2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9NYWtlZmlsZSYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9NYWtlZmlsZT03NT1pZmRlZiBDT05GSUdfTU1VXG5tbS9NYWtlZmlsZTo3NjpcdG9iai0kKENPTkZJR19BRFZJU0VfU1lTQ0FMTFMpXHQmIzQzOz0gbWFkdmlzZS5vXG5tbS9NYWtlZmlsZS03Ny1lbmRpZlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzUwMwoJCQkJCQkJb3V0cHV0OiAzMwoJCQkJCQkJdGhvdWdodHM6IDM1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJiMzOTttIHRoaW5raW5nIHRocm91Z2ggdGhpcyBwcm9jZXNzOgoKKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCoqCgpSaWdodCwgYENPTkZJR19BRFZJU0VfU1lTQ0FMTFNgLi4uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgdGhhdCYjMzk7cyBhYm91dC4gVGhlIG9idmlvdXMgZmlyc3Qgc3RlcCBpcyB0byBkaWcgaW50byB0aGUga2VybmVsJiMzOTtzIEtjb25maWcgZmlsZXMuIEkmIzM5O2xsIGhlYWQgb3ZlciB0byBgaW5pdC9LY29uZmlnYCBhbmQgbG9vayBmb3IgdGhlIGRlZmluaXRpb24gb2YgYEFEVklTRV9TWVNDQUxMU2AuIFRoYXQmIzM5O3Mgd2hlcmUgdGhlIG9wdGlvbiB3aWxsIGJlIGRlY2xhcmVkLCBhbG9uZyB3aXRoIGEgZGVzY3JpcHRpb24gYW5kIHBvc3NpYmx5IHNvbWUgZGVwZW5kZW5jaWVzIG9yIGRlZmF1bHQgdmFsdWVzLiBLbm93aW5nIHRoZSBjb250ZXh0IHdpbGwgcG9pbnQgdG8gd2hhdCBpdCBjb250cm9scyB3aXRoaW4gdGhlIGtlcm5lbCBidWlsZC4gVGhlbiBJIGNhbiBmaWd1cmUgb3V0IHdoYXQgbW9kdWxlcyBvciBvdGhlciBwYXJ0cyBvZiB0aGUga2VybmVsIGFyZSBkZXBlbmRlbnQgb24gdGhpcyBjb25maWcgdmFyaWFibGUuIEkmIzM5O2xsIG5lZWQgdG8ga25vdyB3aGF0IGl0IGVuYWJsZXMgb3IgZGlzYWJsZXMuIEhvcGVmdWxseSwgdGhlcmUmIzM5O3MgYSBoZWxwZnVsIGNvbW1lbnQgaW4gdGhlcmUgdG8gZ2l2ZSBtZSBhIGNsdWUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBBRFZJU0VfU1lTQ0FMTFMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbml0L0tjb25maWcmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7aW5pdC9LY29uZmlnPTE5NzU9Y29uZmlnIElPX1VSSU5HX01PQ0tfRklMRVxuLS1cbmluaXQvS2NvbmZpZy0xOTg1LVxuaW5pdC9LY29uZmlnOjE5ODY6Y29uZmlnIEFEVklTRV9TWVNDQUxMU1xuaW5pdC9LY29uZmlnLTE5ODctXHRib29sIFwmIzM0O0VuYWJsZSBtYWR2aXNlL2ZhZHZpc2Ugc3lzY2FsbHNcJiMzNDsgaWYgRVhQRVJUXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy44LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEzODUyCgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgS2VybmVsJiMzOTtzIEdlbmVzaXM6IEEgS2NvbmZpZyBSZXRyb3NwZWN0aXZlKioKCkFscmlnaHQsIGxldCYjMzk7cyBwdWxsIHVwIHRoZSBgaW5pdC9LY29uZmlnYCBmaWxlLCBjaXJjYSAxOTg2LiBUaGF0JiMzOTtzIHdoZXJlIHdlJiMzOTtsbCBsaWtlbHkgZmluZCB0aGUgYmVkcm9jayBvZiB0aGUga2VybmVsJiMzOTtzIGNvbmZpZ3VyYXRpb24gc3lzdGVtLCBldmVuIGlmIGl0JiMzOTtzIGluIGl0cyBlbWJyeW9uaWMgc3RhZ2UuIEkmIzM5O20gZWFnZXIgdG8gc2VlIGhvdyB0aGV5IGFwcHJvYWNoZWQgc3VjaCBhIGZ1bmRhbWVudGFsIHByb2JsZW0gd2l0aCB0aGUgbGltaXRlZCB0b29scyBhbmQgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cyBvZiB0aGF0IGVyYS4gSSYjMzk7bSBsb29raW5nIGZvciBjbHVlcyBhYm91dCB0aGUgb3JpZ2luYWwgZGVzaWduIHBoaWxvc29waGllcyBhbmQgdGhlIHRyYWRlLW9mZnMgdGhleSBtYWRlLiBJJiMzOTttIGVzcGVjaWFsbHkgaW50ZXJlc3RlZCBpbiB1bmRlcnN0YW5kaW5nIGhvdyBlYXJseSBkZXZlbG9wZXJzIGNvbmNlcHR1YWxpemVkIGZlYXR1cmUgc2VsZWN0aW9uIGFuZCBkZXBlbmRlbmNpZXMg4oCTIHdlcmUgdGhleSBldmVuIHRoaW5raW5nIGFib3V0IG1vZHVsYXJpdHkgaW4gdGhlIHdheSB3ZSBkbyBub3c/IFRoaXMgY291bGQgYmUgYSBmYXNjaW5hdGluZyBsb29rIGF0IHRoZSBldm9sdXRpb24gb2YgY29tcGxleGl0eSBtYW5hZ2VtZW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luaXQvS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDE5ODUsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MTk4NTpcdFxuMTk4NjpcdGNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcbjE5ODc6XHRcdGJvb2wgXCYjMzQ7RW5hYmxlIG1hZHZpc2UvZmFkdmlzZSBzeXNjYWxsc1wmIzM0OyBpZiBFWFBFUlRcbjE5ODg6XHRcdGRlZmF1bHQgeVxuMTk4OTpcdFx0aGVscFxuMTk5MDpcdFx0ICBUaGlzIG9wdGlvbiBlbmFibGVzIHRoZSBtYWR2aXNlIGFuZCBmYWR2aXNlIHN5c2NhbGxzLCB1c2VkIGJ5XG4xOTkxOlx0XHQgIGFwcGxpY2F0aW9ucyB0byBhZHZpc2UgdGhlIGtlcm5lbCBhYm91dCB0aGVpciBmdXR1cmUgbWVtb3J5IG9yIGZpbGVcbjE5OTI6XHRcdCAgdXNhZ2UsIGltcHJvdmluZyBwZXJmb3JtYW5jZS4gSWYgYnVpbGRpbmcgYW4gZW1iZWRkZWQgc3lzdGVtIHdoZXJlIG5vXG4xOTkzOlx0XHQgIGFwcGxpY2F0aW9ucyB1c2UgdGhlc2Ugc3lzY2FsbHMsIHlvdSBjYW4gZGlzYWJsZSB0aGlzIG9wdGlvbiB0byBzYXZlXG4xOTk0Olx0XHQgIHNwYWNlLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNDI0NQoJCQkJCQkJb3V0cHV0OiAyMDQKCQkJCQkJCXRob3VnaHRzOiAzMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRnV6emluZyBUYXJnZXQgQ29uZmlybWF0aW9uKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGUgaW5pdGlhbCBzdXNwaWNpb25zLiBJdCBsb29rcyBsaWtlIGBBRFZJU0VfU1lTQ0FMTFNgIGFuZCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFyZSBkZWZpbml0ZWx5IHJlcXVpcmVkLiBMZXQmIzM5O3MgbWFrZSBzdXJlIHRoYXQmIzM5O3MgKmFsbCogd2UgbmVlZC4gRGlnZ2luZyBpbnRvIHRoZSBjb2RlIHdpdGhpbiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgc3BlY2lmaWNhbGx5IHRoZSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmxvY2ssIGNvbmZpcm1zIGl0LiBXZSYjMzk7cmUgZ29vZCBvbiB0aGUgY29uZmlndXJhdGlvbiBmcm9udC4KCk5vdywgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuCgoxLiAgKipXb3J0aEZ1enppbmc6IFRydWUuKiogWWVwLCB0aGF0JiMzOTtzIHdoYXQgd2UgZXhwZWN0LiBUaGlzIHBhdGNoIGludm9sdmVzIGNyaXRpY2FsIGxvY2tpbmcgY2hhbmdlcy4KMi4gICoqUmVhc29uaW5nOioqIFRoZSBwYXRjaCBpcyBtb2RpZnlpbmcgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCBpbiBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IHRoZSBsb2NraW5nIHN0cmF0ZWd5IHdoZW4gVEhQcyBhcmUgc3BsaXQgZm9yIGBNQURWX0NPTERgIG9yIGBNQURWX1BBR0VPVVRgLiBSZXBsYWNpbmcgYSBgZm9saW9fbG9jaygpYCB3aXRoIGEgYGZvbGlvX3RyeWxvY2soKWAgYWZ0ZXIgdW5sb2NraW5nIHRoZSBwYWdlIHRhYmxlIGxvY2sgaXMgYSBiaWcgZGVhbC4gQ3JpdGljYWxseSwgd2Uga25vdyB1c2Vyc3BhY2UgY2FuIGRpcmVjdGx5IHRyaWdnZXIgdGhpcyB2aWEgdGhlIGBtYWR2aXNlYCBzeXNjYWxscyBvbiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzLiBTbywgdGhpcyBpcyBhIHByaW1lIHRhcmdldCBmb3IgcG90ZW50aWFsIHJlZ3Jlc3Npb25zLCByYWNlIGNvbmRpdGlvbnMsIG9yIGxvY2tpbmcgaXNzdWVzLgozLiAgKipGb2N1c1N5bWJvbHM6KiogVGhlIGZ1bmN0aW9uIG5hbWVzIHdlIHdhbnQgdG8gdGFyZ2V0IGxpbmUgdXAgcGVyZmVjdGx5OiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYG1hZHZpc2VfY29sZGAsIGFuZCBgbWFkdmlzZV9wYWdlb3V0YC4gVGhhdCYjMzk7cyBwcmVjaXNlbHkgd2hlcmUgdGhlIGNyaXRpY2FsIGNoYW5nZXMgYXJlLgo0LiAgKipFbmFibGVDb25maWdzOioqIEFnYWluLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQURWSVNFX1NZU0NBTExTYCBhcmUgY29ycmVjdC4KCkZyb20gYSBjb2RlIHJldmlldyBwZXJzcGVjdGl2ZSwgaXQgY2hlY2tzIG91dC4gRXZlcnl0aGluZyYjMzk7cyBpbiBzeW5jLiBJJiMzOTttIHNhdGlzZmllZC4gTGV0JiMzOTtzIGdvIGFoZWFkIGFuZCBzaWduYWwgdGhhdCB3ZSYjMzk7cmUgZ29vZCB0byBnby4gVGltZSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtUUkFOU1BBUkVOVF9IVUdFUEFHRSYjMzQ7LAogICAgJiMzNDtBRFZJU0VfU1lTQ0FMTFMmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9jb2xkJiMzNDssCiAgICAmIzM0O21hZHZpc2VfcGFnZW91dCYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgbG9ja2luZyBzZXF1ZW5jZSBpbiBtbS9tYWR2aXNlLmMgKG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSkgd2hlbiBzcGxpdHRpbmcgaHVnZSBmb2xpb3MgZm9yIHBhcnRpYWwgcmFuZ2VzIGR1cmluZyBNQURWX0NPTEQgb3IgTUFEVl9QQUdFT1VUIG9wZXJhdGlvbnMuIEl0IHJlcGxhY2VzIGEgYmxvY2tpbmcgZm9saW9fbG9jayBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIHdpdGggYSBmb2xpb190cnlsb2NrIHVuZGVyIHRoZSBwYWdlIHRhYmxlIGxvY2suIFRoaXMgY29kZSBwYXRoIGlzIGRpcmVjdGx5IHJlYWNoYWJsZSBmcm9tIHVucHJpdmlsZWdlZCB1c2Vyc3BhY2UgdmlhIHRoZSBtYWR2aXNlIGFuZCBwcm9jZXNzX21hZHZpc2Ugc3lzdGVtIGNhbGxzIG9uIFRIUCBtYXBwaW5ncywgd2FycmFudGluZyBmdXp6aW5nIHRvIGVuc3VyZSBwcm9wZXIgc3luY2hyb25pemF0aW9uIGFuZCBiZWhhdmlvciB1bmRlciByYWNlIGNvbmRpdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O1RSQU5TUEFSRU5UX0hVR0VQQUdFJiMzNDssCiAgICAmIzM0O0FEVklTRV9TWVNDQUxMUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O21hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSYjMzQ7LAogICAgJiMzNDttYWR2aXNlX2NvbGQmIzM0OywKICAgICYjMzQ7bWFkdmlzZV9wYWdlb3V0JiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBsb2NraW5nIHNlcXVlbmNlIGluIG1tL21hZHZpc2UuYyAobWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKSB3aGVuIHNwbGl0dGluZyBodWdlIGZvbGlvcyBmb3IgcGFydGlhbCByYW5nZXMgZHVyaW5nIE1BRFZfQ09MRCBvciBNQURWX1BBR0VPVVQgb3BlcmF0aW9ucy4gSXQgcmVwbGFjZXMgYSBibG9ja2luZyBmb2xpb19sb2NrIGFmdGVyIGRyb3BwaW5nIHRoZSBwYWdlIHRhYmxlIGxvY2sgd2l0aCBhIGZvbGlvX3RyeWxvY2sgdW5kZXIgdGhlIHBhZ2UgdGFibGUgbG9jay4gVGhpcyBjb2RlIHBhdGggaXMgZGlyZWN0bHkgcmVhY2hhYmxlIGZyb20gdW5wcml2aWxlZ2VkIHVzZXJzcGFjZSB2aWEgdGhlIG1hZHZpc2UgYW5kIHByb2Nlc3NfbWFkdmlzZSBzeXN0ZW0gY2FsbHMgb24gVEhQIG1hcHBpbmdzLCB3YXJyYW50aW5nIGZ1enppbmcgdG8gZW5zdXJlIHByb3BlciBzeW5jaHJvbml6YXRpb24gYW5kIGJlaGF2aW9yIHVuZGVyIHJhY2UgY29uZGl0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPklmPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5jb3JlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGZvbGlvIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIGluIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UoKWAgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIGEgYmxvY2tpbmcgYGZvbGlvX2xvY2soKWAgdGFrZW4gYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayAoYHB0bGApIHdpdGggYSBub24tYmxvY2tpbmcgYGZvbGlvX3RyeWxvY2soKWAgdW5kZXIgYHB0bGAsIGJyYW5jaGluZyB0byBgaHVnZV91bmxvY2tgIGlmIGxvY2tpbmcgZmFpbHMuXG5cblRoaXMgY2hhbmdlIGlzIHB1cmVseSBmb2N1c2VkIG9uIGxvY2tpbmcsIHN5bmNocm9uaXphdGlvbiwgYW5kIGZvbGlvIHNwbGl0dGluZyBjb250cm9sIGZsb3cgZHVyaW5nIGBNQURWX0NPTERgIC8gYE1BRFZfUEFHRU9VVGAgb3BlcmF0aW9ucy4gSXQgZG9lcyBub3QgaW50cm9kdWNlIG9yIG1vZGlmeSBhbnkgc3RhY2svaGVhcCBhbGxvY2F0aW9ucywgZG9lcyBub3QgZXhwb3NlIG9yIHJlYWQgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFsdGVyIGJ1ZmZlciBib3VuZHMgb3IgbGVuZ3RocywgYW5kIGRvZXMgbm90IGNvcHkga2VybmVsIGRhdGEgdG8gdXNlciBzcGFjZS4gQW55IGNvbmN1cnJlbmN5IG9yIHBhZ2UgcmVmY291bnQgaXNzdWVzIHdvdWxkIGZhbGwgdW5kZXIgTE9DS0RFUCBvciBLQVNBTiByYXRoZXIgdGhhbiBLTVNBTi4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0CgpGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDg3YmUwNjZkODg5ZTI0MzEwODBhYjcxMjdjNTE3ZWJmMDdjZWJkZjcKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgU2F0IFNlcCAxMiAxMTo0OTozMiAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuYwppbmRleCBmNzVhOWQxMzk5ODAzLi5hZTNkNzEyN2Q4N2M0IDEwMDY0NAotLS0gYS9tbS9tYWR2aXNlLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vbWFkdmlzZS5jCkBAIC00MTksOSAmIzQzOzQxOSwxMCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLAogCQlpZiAobmV4dCAtIGFkZHIgIT0gSFBBR0VfUE1EX1NJWkUpIHsKIAkJCWludCBlcnI7CiAKJiM0MzsJCQlpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKQomIzQzOwkJCQlnb3RvIGh1Z2VfdW5sb2NrOwogCQkJZm9saW9fZ2V0KGZvbGlvKTsKIAkJCXNwaW5fdW5sb2NrKHB0bCk7Ci0JCQlmb2xpb19sb2NrKGZvbGlvKTsKIAkJCWVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTsKIAkJCWZvbGlvX3VubG9jayhmb2xpbyk7CiAJCQlmb2xpb19wdXQoZm9saW8pOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMS8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA5NQoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDUwOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipLTVNBTiBFdmFsdWF0aW9uIGZvciBgbW0vbWFkdmlzZS5jYCBQYXRjaCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb3IgaWYgS0FTQU4gaXMgc3VmZmljaWVudC4gSSBuZWVkIHRvIGFwcGx5IHRob3NlIGZvdXIgS01TQU4gdHJpZ2dlcnMuIExldCYjMzk7cyBzZWUuLi4KCkZpcnN0LCBsZXQmIzM5O3MgcmVjYXAgdGhvc2UgS01TQU4gdHJpZ2dlcnM6CjEuICBLZXJuZWwgc3RydWN0dXJlcyBwYXNzZWQgdG8gdXNlcnNwYWNlIHBvdGVudGlhbGx5IHdpdGggdW5pbml0aWFsaXplZCBiaXRzLgoyLiAgQ29uZGl0aW9uYWwgbG9naWMgYmFzZWQgb24gcG90ZW50aWFsbHkgdW5pbml0aWFsaXplZCBzdHVmZi4KMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIuCjQuICBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBldGMuLCBhbGxvd2luZyBhY2Nlc3MgdG8gdW5pbml0aWFsaXplZCBieXRlcy4KCkFuZCB3aGVuIHRvIHNraXAgS01TQU46CiogICBTdGFuZGFyZCBidWdzIChPT0IsIFVBRiwgTlVMTCBkZXJlZiwgZXRjLikgYXJlIHRoZSByaXNrLgoqICAgU3RydWN0dXJlcyBhcmUgKmZ1bGx5KiBpbml0aWFsaXplZC4KKiAgIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgbGVha3MuCgpOb3csIGxldCYjMzk7cyBsb29rIGF0IHRoZSBkaWZmLiBJdCYjMzk7cyBpbiBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGF0IGBmb2xpb190cnlsb2NrYCBhbmQgYHNwbGl0X2ZvbGlvYCBjb2RlLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIGBmb2xpb190cnlsb2NrYCBjYWxsIGJlZm9yZSBgc3BsaXRfZm9saW9gLiBUaGUgbG9jayBvcmRlciBpcyBjaGFuZ2VkIHdoaWNoIGlzIG1vc3QgbGlrZWx5IHRvIGF2b2lkIGxvY2sgaW52ZXJzaW9uLgoKU2luY2UgdGhpcyBjaGFuZ2UgcHJpbWFyaWx5IGNvbmNlcm5zIGxvY2tpbmcgYW5kIG1lbW9yeSBtYW5hZ2VtZW50IHdpdGhpbiB0aGUga2VybmVsJiMzOTtzIGludGVybmFsIHdvcmtpbmdzLCBpdCBmZWVscyBsaWtlIHRoaXMgaXMgbW9zdGx5IGFib3V0IGNvcnJlY3RpbmcgcG90ZW50aWFsIGNvbmN1cnJlbmN5IGlzc3Vlcy4gSXQmIzM5O3MgbGlrZWx5IHRyeWluZyB0byBpbXByb3ZlIHRoZSByZWxpYWJpbGl0eSBvZiBwYWdlIHNwbGl0dGluZy4gVGhlIG1haW4gY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IGRhdGEgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgZm9saW8mIzM5O3Mgc3RhdGUsIHJhdGhlciB0aGFuIGludHJvZHVjaW5nIG5ldyBhdmVudWVzIGZvciB1bmluaXRpYWxpemVkIG1lbW9yeSB0byBiZSByZWFkLiBJdCYjMzk7cyB0b3VjaGluZyBvbiBsb2NraW5nIHByaW1pdGl2ZXMgd2hpY2ggaXMgbW9yZSBLQVNBTiB0ZXJyaXRvcnkuIEkgZG9uJiMzOTt0IHNlZSBhbnkgb2J2aW91cyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbnkgY29uZGl0aW9uYWwgbG9naWMgZGlyZWN0bHkgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gRnVydGhlcm1vcmUsIEkgZG9uJiMzOTt0IHNlZSBhbnkgcmlza3kgYWxsb2NhdGlvbnMgb3IgYm91bmRzIGNoZWNrcy4gVGhpcyBwYXRjaCBzZWVtcyBmb2N1c2VkIG9uIHRoZSBpbnRlZ3JpdHkgb2YgaW4ta2VybmVsIGRhdGEuCgpUaGVyZWZvcmUsIG15IGluaXRpYWwgYXNzZXNzbWVudCwgcGVuZGluZyBmdXJ0aGVyIHNjcnV0aW55IG9mIHRoZSBzdXJyb3VuZGluZyBjb2RlLCBpcyB0aGF0IHN0YW5kYXJkIEtBU0FOIHNob3VsZCBiZSBzdWZmaWNpZW50IGhlcmUuIEkgbmVlZCB0byBtYWtlIHN1cmUsIG9mIGNvdXJzZS4gVGltZSB0byBsb29rIGludG8gYG1tL21hZHZpc2UuY2AgYXJvdW5kIGxpbmUgNDE5LCB1c2luZyBlaXRoZXIgYSBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgY29tbWFuZCwgdG8gY29uZmlybSBteSBzdXNwaWNpb24uIExldCYjMzk7cyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgbXkgY3VycmVudCBjb25jbHVzaW9uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDttYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxuLS1cbm1tL21hZHZpc2UuYy0zNjMtXG5tbS9tYWR2aXNlLmM6MzY0OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXG5tbS9tYWR2aXNlLmMtMzY1LVx0XHRcdFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcbi0tXG5tbS9tYWR2aXNlLmM9NTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcbm1tL21hZHZpc2UuYzo1ODQ6XHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxubW0vbWFkdmlzZS5jLTU4NS1cdC53YWxrX2xvY2sgPSBQR1dBTEtfUkRMT0NLLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzYxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgZnJhbWVkIGFzIGFuIGV4cGVydCYjMzk7cyBpbnRlcm5hbCBtb25vbG9ndWU6CgoqKkRpdmluZyBpbnRvIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgKioKCkFscmlnaHQsIGxldCYjMzk7cyBnZXQgZG93biB0byBicmFzcyB0YWNrcy4gSSBuZWVkIHRvIHRha2UgYSBsb29rIGF0IHRoZSBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBmdW5jdGlvbiwgc3RhcnRpbmcgYXJvdW5kIGxpbmUgNDE5LiBJJiMzOTttIGFzc3VtaW5nIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggbWVtb3J5IG1hbmFnZW1lbnQgaGVyZSwgcHJvYmFibHkgc3BlY2lmaWNhbGx5IHdpdGggdGhlIGBNQURWX0NPTERgIGFuZCBgTUFEVl9QQUdFT1VUYCBmbGFncyBhbmQgaG93IHRoZXkgaW50ZXJhY3QgYXQgdGhlIHBhZ2UgdGFibGUgZW50cnkgKFBURSkgbGV2ZWwuIEkmIzM5O20ga2VlbiB0byBzZWUgaG93IHRoZSBrZXJuZWwgaXMgaGFuZGxpbmcgdGhvc2UgaGludHMuIEkgaW1hZ2luZSB0aGlzIGZ1bmN0aW9uIGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgYWN0dWFsIGRpcnR5IHdvcmsgb2YgbWFya2luZyBwYWdlcyBhcyBjb2xkIG9yIHRyaWdnZXJpbmcgcGFnZS1vdXQgb3BlcmF0aW9ucy4gR2l2ZW4gdGhlIG5hbWUsIEkmIzM5O2QgZXhwZWN0IGl0IGRlYWxzIHdpdGggYSByYW5nZSBvZiBQVEVzLCBtZWFuaW5nIGl0IG9wZXJhdGVzIG9uIHBvdGVudGlhbGx5IGxhcmdlIGNodW5rcyBvZiBtZW1vcnkuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyBlZmZpY2llbnRseSB0aGlzIGlzIGRvbmUgYW5kIGlmIHRoZXJlIGFueSBvYnZpb3VzIGJvdHRsZW5lY2tzLCBvciBwZXJoYXBzIGNsZXZlciB0cmlja3MsIGluIHRoZSBpbXBsZW1lbnRhdGlvbi4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSBob3cgdGhlIGtlcm5lbCBpcyBtYW5hZ2luZyB0aGF0IG1lbW9yeSEKCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA0MDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7IDQwMDpcdFxuIDQwMTpcdFx0XHRpZiAodW5saWtlbHkoIXBtZF9wcmVzZW50KG9yaWdfcG1kKSkpIHtcbiA0MDI6XHRcdFx0XHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFx1MDAyNlx1MDAyNlxuIDQwMzpcdFx0XHRcdFx0XHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XG4gNDA0Olx0XHRcdFx0Z290byBodWdlX3VubG9jaztcbiA0MDU6XHRcdFx0fVxuIDQwNjpcdFxuIDQwNzpcdFx0XHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XG4gNDA4Olx0XG4gNDA5Olx0XHRcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG4gNDEwOlx0XHRcdFx0Z290byBodWdlX3VubG9jaztcbiA0MTE6XHRcbiA0MTI6XHRcdFx0LyogRG8gbm90IGludGVyZmVyZSB3aXRoIG90aGVyIG1hcHBpbmdzIG9mIHRoaXMgZm9saW8gKi9cbiA0MTM6XHRcdFx0aWYgKGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoZm9saW8pKVxuIDQxNDpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gNDE1Olx0XG4gNDE2Olx0XHRcdGlmIChwYWdlb3V0X2Fub25fb25seV9maWx0ZXIgXHUwMDI2XHUwMDI2ICFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxuIDQxNzpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gNDE4Olx0XG4gNDE5Olx0XHRcdGlmIChuZXh0IC0gYWRkciAhPSBIUEFHRV9QTURfU0laRSkge1xuIDQyMDpcdFx0XHRcdGludCBlcnI7XG4gNDIxOlx0XG4gNDIyOlx0XHRcdFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcbiA0MjM6XHRcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG4gNDI0Olx0XHRcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcbiA0MjU6XHRcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQyNjpcdFx0XHRcdGVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcbiA0Mjc6XHRcdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuIDQyODpcdFx0XHRcdGZvbGlvX3B1dChmb2xpbyk7XG4gNDI5Olx0XHRcdFx0aWYgKCFlcnIpXG4gNDMwOlx0XHRcdFx0XHRnb3RvIHJlZ3VsYXJfZm9saW87XG4gNDMxOlx0XHRcdFx0cmV0dXJuIDA7XG4gNDMyOlx0XHRcdH1cbiA0MzM6XHRcbiA0MzQ6XHRcdFx0aWYgKCFwYWdlb3V0IFx1MDAyNlx1MDAyNiBwbWRfeW91bmcob3JpZ19wbWQpKSB7XG4gNDM1Olx0XHRcdFx0cG1kcF9pbnZhbGlkYXRlKHZtYSwgYWRkciwgcG1kKTtcbiA0MzY6XHRcdFx0XHRvcmlnX3BtZCA9IHBtZF9ta29sZChvcmlnX3BtZCk7XG4gNDM3Olx0XG4gNDM4Olx0XHRcdFx0c2V0X3BtZF9hdChtbSwgYWRkciwgcG1kLCBvcmlnX3BtZCk7XG4gNDM5Olx0XHRcdFx0dGxiX3JlbW92ZV9wbWRfdGxiX2VudHJ5KHRsYiwgcG1kLCBhZGRyKTtcbiA0NDA6XHRcdFx0fVxuIDQ0MTpcdFxuIDQ0MjpcdFx0XHRmb2xpb19jbGVhcl9yZWZlcmVuY2VkKGZvbGlvKTtcbiA0NDM6XHRcdFx0Zm9saW9fdGVzdF9jbGVhcl95b3VuZyhmb2xpbyk7XG4gNDQ0Olx0XHRcdGlmIChmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykpXG4gNDQ1Olx0XHRcdFx0Zm9saW9fc2V0X3dvcmtpbmdzZXQoZm9saW8pO1xuIDQ0NjpcdFx0XHRpZiAocGFnZW91dCkge1xuIDQ0NzpcdFx0XHRcdGlmIChmb2xpb19pc29sYXRlX2xydShmb2xpbykpIHtcbiA0NDg6XHRcdFx0XHRcdGlmIChmb2xpb190ZXN0X3VuZXZpY3RhYmxlKGZvbGlvKSlcbiA0NDk6XHRcdFx0XHRcdFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDE5CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzE4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgRm9saW8gTG9ja2luZyBDaGFuZ2UqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gVGhlIGNvcmUgb2YgdGhlIGNoYW5nZSBzZWVtcyBzdHJhaWdodGZvcndhcmQg4oCTIHdlIHdlbnQgZnJvbSB1c2luZyBgZm9saW9fbG9ja2AgYW5kIGBmb2xpb191bmxvY2tgIHRvIHVzaW5nIGBmb2xpb190cnlsb2NrYCBpbiB0aGlzIHNlY3Rpb24gb2YgY29kZToKCmBgYGMKCQkJaWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSkKCQkJCWdvdG8gaHVnZV91bmxvY2s7CgkJCWZvbGlvX2dldChmb2xpbyk7CgkJCXNwaW5fdW5sb2NrKHB0bCk7CgkJCWVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTsKCQkJZm9saW9fdW5sb2NrKGZvbGlvKTsKCQkJZm9saW9fcHV0KGZvbGlvKTsKYGBgCgpUaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2h5Kj8gIEJlZm9yZSB0aGUgY2hhbmdlLCB3ZSB3ZXJlIGRvaW5nIHRoaXM6CgpgYGBjCgkJCWZvbGlvX2dldChmb2xpbyk7CgkJCXNwaW5fdW5sb2NrKHB0bCk7CgkJCWZvbGlvX2xvY2soZm9saW8pOwoJCQllcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7CgkJCWZvbGlvX3VubG9jayhmb2xpbyk7CgkJCWZvbGlvX3B1dChmb2xpbyk7CmBgYAoKTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRoYXQgdGhlIGJsb2NraW5nIG5hdHVyZSBvZiB0aGUgb3JpZ2luYWwgYGZvbGlvX2xvY2tgIHByZXNlbnRlZCBhIHBvdGVudGlhbCBwcm9ibGVtLCBwcm9iYWJseSBpbiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gU3BlY2lmaWNhbGx5LCBibG9ja2luZyB3aXRoIGBmb2xpb19sb2NrYCBjb3VsZCBsZWFkIHRvIGRlYWRsb2NrcyBvciBvdGhlciBsb2NrIG9yZGVyaW5nIHByb2JsZW1zLCBsaWtlIGFuIEFCQkEgZGVhZGxvY2sgb3Igc2xlZXBpbmcgaW4gYW4gYXRvbWljIGNvbnRleHQgaWYgYHB0bGAgd2FzbiYjMzk7dCB1bmxvY2tlZCBvciBzb21lIG90aGVyIGxvY2sgb3JkZXJpbmcgaXNzdWUuIFRoZSBjb2RlICpkaWQqIHVubG9jayBgcHRsYCBiZWZvcmUsIGJ1dCBwZXJoYXBzIHRoZSBibG9ja2luZyB3YWl0IGl0c2VsZiB3YXMgdW5kZXNpcmFibGUuIGBmb2xpb190cnlsb2NrYCBpcyBub24tYmxvY2tpbmcsIHdoaWNoIGxpa2VseSBtaXRpZ2F0ZXMgdGhlIGlzc3VlLiBJdCBsb29rcyBsaWtlIGl0JiMzOTtzIGEgdHJhZGUtb2ZmOiBhdm9pZCB0aGUgd2FpdCwgcG9zc2libHkgYXQgdGhlIGNvc3Qgb2YgZmFpbGluZyB0aGUgb3BlcmF0aW9uIGFuZCBuZWVkaW5nIHRvIGhhbmRsZSB0aGUgZmFpbHVyZS4KClRoZSBgaWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSkgZ290byBodWdlX3VubG9jaztgIGlzIHRoZSBrZXkuIFRoZSBjb2RlIG5vdyAqdHJpZXMqIHRvIGFjcXVpcmUgdGhlIGZvbGlvIGxvY2ssIGFuZCBpZiBpdCBmYWlscywgaXQgYnJhbmNoZXMgdG8gYGh1Z2VfdW5sb2NrYC4gQXQgdGhpcyBwb2ludCwgYHB0bGAgaXMgc3RpbGwgaGVsZCwgYXMgdGhlIGBzcGluX2xvY2tgIGNhbGwgaGFwcGVucyBiZWZvcmUgdGhlIHRyeWxvY2suIFNvIGBodWdlX3VubG9ja2AgaXMgZ29pbmcgdG8gaGF2ZSB0byBjYXJlZnVsbHkgbWFuYWdlIHRoZSBleGlzdGluZyBsb2NrIHN0YXRlLgoKSSBuZWVkIHRvIHNlZSB3aGF0IGBodWdlX3VubG9ja2AgZG9lcyB0byB1bmRlcnN0YW5kIHRoZSBmdWxsIGltcGxpY2F0aW9ucy4gTGV0IG1lIHF1aWNrbHkganVtcCBvdmVyIHRvIGxpbmVzIDQ2MC01MDAsIEkgYmVsaWV2ZSB0aGF0IHNob3VsZCBob2xkIHRoZSBhbnN3ZXIuIEkgYmV0IHRoZSBjb2RlIHRoZXJlIGlzIGdvaW5nIHRvIGJhY2sgb3V0IG9mIHRoZSBvcGVyYXRpb25zIGl0IGhhcyBwZXJmb3JtZWQgYW5kIHJlbGVhc2UgcmVzb3VyY2VzIGluIGEgc2FmZSBtYW5uZXIgdG8gYXZvaWQgaXNzdWVzIGFuZCByZXR1cm4gdGhlIGNvcnJlY3QgZXJyb3IuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDYwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDQwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRyZWd1bGFyX2ZvbGlvOlxuIDQ2MzpcdCNlbmRpZlxuIDQ2NDpcdFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBQQUdFX1NJWkUpO1xuIDQ2NTpcdHJlc3RhcnQ6XG4gNDY2Olx0XHRzdGFydF9wdGUgPSBwdGUgPSBwdGVfb2Zmc2V0X21hcF9sb2NrKHZtYS1cdTAwM2V2bV9tbSwgcG1kLCBhZGRyLCBcdTAwMjZwdGwpO1xuIDQ2NzpcdFx0aWYgKCFzdGFydF9wdGUpXG4gNDY4Olx0XHRcdHJldHVybiAwO1xuIDQ2OTpcdFx0Zmx1c2hfdGxiX2JhdGNoZWRfcGVuZGluZyhtbSk7XG4gNDcwOlx0XHRsYXp5X21tdV9tb2RlX2VuYWJsZSgpO1xuIDQ3MTpcdFx0Zm9yICg7IGFkZHIgXHUwMDNjIGVuZDsgcHRlICYjNDM7PSBuciwgYWRkciAmIzQzOz0gbnIgKiBQQUdFX1NJWkUpIHtcbiA0NzI6XHRcdFx0bnIgPSAxO1xuIDQ3MzpcdFx0XHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XG4gNDc0Olx0XG4gNDc1Olx0XHRcdGlmICgmIzQzOyYjNDM7YmF0Y2hfY291bnQgPT0gU1dBUF9DTFVTVEVSX01BWCkge1xuIDQ3NjpcdFx0XHRcdGJhdGNoX2NvdW50ID0gMDtcbiA0Nzc6XHRcdFx0XHRpZiAobmVlZF9yZXNjaGVkKCkpIHtcbiA0Nzg6XHRcdFx0XHRcdGxhenlfbW11X21vZGVfZGlzYWJsZSgpO1xuIDQ3OTpcdFx0XHRcdFx0cHRlX3VubWFwX3VubG9jayhzdGFydF9wdGUsIHB0bCk7XG4gNDgwOlx0XHRcdFx0XHRjb25kX3Jlc2NoZWQoKTtcbiA0ODE6XHRcdFx0XHRcdGdvdG8gcmVzdGFydDtcbiA0ODI6XHRcdFx0XHR9XG4gNDgzOlx0XHRcdH1cbiA0ODQ6XHRcbiA0ODU6XHRcdFx0aWYgKHB0ZV9ub25lKHB0ZW50KSlcbiA0ODY6XHRcdFx0XHRjb250aW51ZTtcbiA0ODc6XHRcbiA0ODg6XHRcdFx0aWYgKCFwdGVfcHJlc2VudChwdGVudCkpXG4gNDg5Olx0XHRcdFx0Y29udGludWU7XG4gNDkwOlx0XG4gNDkxOlx0XHRcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHZtYSwgYWRkciwgcHRlbnQpO1xuIDQ5MjpcdFx0XHRpZiAoIWZvbGlvIHx8IGZvbGlvX2lzX3pvbmVfZGV2aWNlKGZvbGlvKSlcbiA0OTM6XHRcdFx0XHRjb250aW51ZTtcbiA0OTQ6XHRcbiA0OTU6XHRcdFx0LypcbiA0OTY6XHRcdFx0ICogSWYgd2UgZW5jb3VudGVyIGEgbGFyZ2UgZm9saW8sIG9ubHkgc3BsaXQgaXQgaWYgaXQgaXMgbm90XG4gNDk3Olx0XHRcdCAqIGZ1bGx5IG1hcHBlZCB3aXRoaW4gdGhlIHJhbmdlIHdlIGFyZSBvcGVyYXRpbmcgb24uIE90aGVyd2lzZVxuIDQ5ODpcdFx0XHQgKiBsZWF2ZSBpdCBhcyBpcyBzbyB0aGF0IGl0IGNhbiBiZSBzd2FwcGVkIG91dCB3aG9sZS4gSWYgd2VcbiA0OTk6XHRcdFx0ICogZmFpbCB0byBzcGxpdCBhIGZvbGlvLCBsZWF2ZSBpdCBpbiBwbGFjZSBhbmQgYWR2YW5jZSB0byB0aGVcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTE8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjgtZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTg4MwoJCQkJCQkJb3V0cHV0OiAzMAoJCQkJCQkJdGhvdWdodHM6IDIyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgaWYgSSB3ZXJlIGNvbnNpZGVyaW5nIHRoaXMgbXlzZWxmOgoKKipUcmFjaW5nIGBodWdlX3VubG9ja2AgRGVmaW5pdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGh1Z2VfdW5sb2NrYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQmIzM5O3MgcmVsYXRlZCB0byBtZW1vcnkgbWFuYWdlbWVudCBhbmQgbWFkdmlzZSwgc28gbXkgZmlyc3QgaW5zdGluY3QgaXMgdG8gbG9vayB3aXRoaW4gdGhlIGtlcm5lbCYjMzk7cyBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLiBTcGVjaWZpY2FsbHksIHRoZSBoaW50IGlzICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDsuIFRoYXQmIzM5O3MgYSBzdHJvbmcgaW5kaWNhdGlvbiDigJMgbWFkdmlzZSBkZWFscyB3aXRoIGhpbnRpbmcgYWJvdXQgbWVtb3J5IHVzYWdlLCBzbyBpdCYjMzk7cyBhIHZlcnkgbG9naWNhbCBwbGFjZSBmb3IgdGhpcyBmdW5jdGlvbiwgYXNzdW1pbmcgaXQmIzM5O3MgcmVsYXRlZCB0byBodWdlIHBhZ2VzLCB3aGljaCBpdCBsaWtlbHkgaXMuIEkmIzM5O2xsIGdvIGNoZWNrIHRoYXQgZmlsZSBkaXJlY3RseS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7aHVnZV91bmxvY2smIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9tYWR2aXNlLmMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jPTM2ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuLS1cbm1tL21hZHZpc2UuYy0zOTgtXHRcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcbm1tL21hZHZpc2UuYzozOTk6XHRcdFx0Z290byBodWdlX3VubG9jaztcbm1tL21hZHZpc2UuYy00MDAtXG4tLVxubW0vbWFkdmlzZS5jLTQwMy1cdFx0XHRcdFx0IXBtZF9pc19kZXZpY2VfcHJpdmF0ZV9lbnRyeShvcmlnX3BtZCkpO1xubW0vbWFkdmlzZS5jOjQwNDpcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xubW0vbWFkdmlzZS5jLTQwNS1cdFx0fVxuLS1cbm1tL21hZHZpc2UuYy00MDktXHRcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXG5tbS9tYWR2aXNlLmM6NDEwOlx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG5tbS9tYWR2aXNlLmMtNDExLVxuLS1cbm1tL21hZHZpc2UuYy00MTMtXHRcdGlmIChmb2xpb19tYXliZV9tYXBwZWRfc2hhcmVkKGZvbGlvKSlcbm1tL21hZHZpc2UuYzo0MTQ6XHRcdFx0Z290byBodWdlX3VubG9jaztcbm1tL21hZHZpc2UuYy00MTUtXG5tbS9tYWR2aXNlLmMtNDE2LVx0XHRpZiAocGFnZW91dF9hbm9uX29ubHlfZmlsdGVyIFx1MDAyNlx1MDAyNiAhZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcbm1tL21hZHZpc2UuYzo0MTc6XHRcdFx0Z290byBodWdlX3VubG9jaztcbm1tL21hZHZpc2UuYy00MTgtXG4tLVxubW0vbWFkdmlzZS5jLTQyMi1cdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxubW0vbWFkdmlzZS5jOjQyMzpcdFx0XHRcdGdvdG8gaHVnZV91bmxvY2s7XG5tbS9tYWR2aXNlLmMtNDI0LVx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4tLVxubW0vbWFkdmlzZS5jLTQ1NC1cdFx0XHRmb2xpb19kZWFjdGl2YXRlKGZvbGlvKTtcbm1tL21hZHZpc2UuYzo0NTU6aHVnZV91bmxvY2s6XG5tbS9tYWR2aXNlLmMtNDU2LVx0XHRzcGluX3VubG9jayhwdGwpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTY3CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogNDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEkmIzM5O20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjoKCioqUXVpY2sgQ2hlY2sgb24gYGh1Z2VfdW5sb2NrYCoqCgpPa2F5LCBzbyBgaHVnZV91bmxvY2tgIGlzIGRlYWQgc2ltcGxlLiBJdCBsb29rcyBsaWtlIGl0IGp1c3QgY2FsbHMgYHNwaW5fdW5sb2NrYCBvbiB0aGUgcGFzc2VkIGluIHByb3RlY3Rpb24gbG9jayAoYHB0bGApIGFuZCB0aGVuIHJldHVybnMgMC4gVGhhdOKAmXMgaXQuIE5vdywganVzdCB0byBiZSBjb21wbGV0ZWx5IHN1cmUgSeKAmW0gbm90IG1pc3NpbmcgYW55dGhpbmcgc3VidGxlLCBJIHNob3VsZCBwcm9iYWJseSBjaGVjayB0aGF0IHRoZSBzdXJyb3VuZGluZyBjb2RlIG1ha2VzIHNlbnNlIG9mIHRoYXQgcmV0dXJuIHZhbHVlLiBMZXQgbWUganVzdCBnbGFuY2UgYXQgbGluZXMgNDU1LTQ1OSB0byBtYWtlIHN1cmUgaXQmIzM5O3MgZG9pbmcgd2hhdCBJIHRoaW5rIGl0IGlzLiBJIGNhbiYjMzk7dCB0aGluayBvZiBhbnkgb2J2aW91cyBpc3N1ZXMsIGJ1dCBpdCYjMzk7cyBhbHdheXMgZ29vZCB0byBiZSB0aG9yb3VnaCB3aXRoIGxvdy1sZXZlbCBsb2NraW5nIGNvZGUuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzEyIDExOjUxPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vbWFkdmlzZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNDUwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDE1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyA0NTA6XHRcdFx0XHRcdGVsc2VcbiA0NTE6XHRcdFx0XHRcdFx0bGlzdF9hZGQoXHUwMDI2Zm9saW8tXHUwMDNlbHJ1LCBcdTAwMjZmb2xpb19saXN0KTtcbiA0NTI6XHRcdFx0XHR9XG4gNDUzOlx0XHRcdH0gZWxzZVxuIDQ1NDpcdFx0XHRcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xuIDQ1NTpcdGh1Z2VfdW5sb2NrOlxuIDQ1NjpcdFx0XHRzcGluX3VubG9jayhwdGwpO1xuIDQ1NzpcdFx0XHRpZiAocGFnZW91dClcbiA0NTg6XHRcdFx0XHRyZWNsYWltX3BhZ2VzKFx1MDAyNmZvbGlvX2xpc3QpO1xuIDQ1OTpcdFx0XHRyZXR1cm4gMDtcbiA0NjA6XHRcdH1cbiA0NjE6XHRcbiA0NjI6XHRyZWd1bGFyX2ZvbGlvOlxuIDQ2MzpcdCNlbmRpZlxuIDQ2NDpcdFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBQQUdFX1NJWkUpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8xMiAxMTo1MTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuOC1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3MDAxCgkJCQkJCQlvdXRwdXQ6IDIxNQoJCQkJCQkJdGhvdWdodHM6IDgxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIE1hZHZpc2UgRm9saW8gTG9ja2luZyBDaGFuZ2UqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY2hhbmdlIGluIGBtbS9tYWR2aXNlLmNgLCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgc3BlY2lmaWMgb3B0aW1pemF0aW9uIGluIHRoZSBsb2NraW5nIHN0cmF0ZWd5LiAgUHJldmlvdXNseSwgd2UgaGFkIHRoaXMgc2VxdWVuY2U6IGBmb2xpb19nZXRgLCBgc3Bpbl91bmxvY2socHRsKWAsIGBmb2xpb19sb2NrYCwgYHNwbGl0X2ZvbGlvYCwgYGZvbGlvX3VubG9ja2AsIGBmb2xpb19wdXRgLiBOb3csIHRoZSBgZm9saW9fbG9ja2AgaXMgcmVwbGFjZWQgd2l0aCBgZm9saW9fdHJ5bG9ja2Agd2hpbGUgc3RpbGwgaG9sZGluZyBgcHRsYC4gSWYgYGZvbGlvX3RyeWxvY2tgIGZhaWxzLCB3ZSBiYWlsIG91dCB1c2luZyBgZ290byBodWdlX3VubG9ja2AgYWZ0ZXIgcmVsZWFzaW5nIGBwdGxgLiBJZiBgZm9saW9fdHJ5bG9ja2Agc3VjY2VlZHMsIHdlIHRha2UgYSByZWZlcmVuY2UsIHJlbGVhc2UgYHB0bGAsIGNhbGwgYHNwbGl0X2ZvbGlvYCwgYW5kIHByb2NlZWQgYXMgYmVmb3JlLgoKTm93LCB0aGUgaW1wb3J0YW50IHF1ZXN0aW9uLCBhcyBhbHdheXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55IHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGlzc3Vlcz8gSSYjMzk7bSB0aGlua2luZyBhYm91dCBpdCwgYW5kIG5vLCBpdCBkb2VzbiYjMzk7dCBzZWVtIGxpa2UgaXQuIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvbiB0aGUgc3RhY2sgb3IgaGVhcC4gVGhlcmUmIzM5O3Mgbm8gZGF0YSBiZWluZyBjb3BpZWQgdG8gdXNlcnNwYWNlLCBtZWFuaW5nIG5vIHJpc2sgb2Yga2VybmVsIGluZm9ybWF0aW9uIGxlYWtzLiBJIGNhbiYjMzk7dCBmaW5kIGFueSBpbnN0YW5jZXMgb2YgdW5pbml0aWFsaXplZCBmaWVsZHMgYmVpbmcgcmVhZCBvciB2YXJpYWJsZXMgYmVpbmcgcmVhZCB1bmluaXRpYWxpemVkLiBJdCYjMzk7cyBzb2xlbHkgcGFnZSB0YWJsZSBhbmQgZm9saW8gbG9ja2luZyBsb2dpYyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgLiBUaGlzIGlzIHJlYWxseSBhbGwgYWJvdXQgc3luY2hyb25pemF0aW9uLgoKTm93LCBsZXQmIzM5O3Mgc3RlcCBiYWNrIGFuZCBjb25zaWRlciB0aGUgS01TQU4gcXVlc3Rpb24uICBSZW1lbWJlciB0aGUgcnVsZTogd2UgKmRvbiYjMzk7dCogcnVuIEtNU0FOIGlmIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgY2FuIGNhdGNoIHRoZSBidWdzLiAgV2UgbmVlZCBLTVNBTiBvbmx5IGlmIHdlIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOICp1bmlxdWVseSogZGV0ZWN0cy4gIFNvLCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGJ1Z3MgaGVyZT8gV2VsbCwgaXQmIzM5O3MgcHJldHR5IG11Y2ggYWxsIGFib3V0IGxvY2tpbmcsIHBvdGVudGlhbCByYWNlIGNvbmRpdGlvbnMsIG9yIHJlZmVyZW5jZSBjb3VudGluZyBpc3N1ZXMuICBBbmQsIHRob3NlIGFyZSAqZXhhY3RseSogd2hhdCBMT0NLREVQIGFuZCBLQVNBTiAoYW5kIHRoZSByZWZjb3VudCBjaGVja2VycykgYXJlIGRlc2lnbmVkIHRvIGRldGVjdC4KClNvLCBhY2NvcmRpbmcgdG8gdGhlIGNyaXRlcmlhOiB0aGUgY29kZSBjaGFuZ2UgaXNuJiMzOTt0IHRvdWNoaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCYjMzk7cyBzdHJpY3RseSBhYm91dCBsb2NraW5nIGFuZCBzeW5jaHJvbml6YXRpb24uIEFsc28sIGFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgYXJlIGZ1bGx5IHplcm9lZCBvciBpbml0aWFsaXplZCBhbmQgdGhlcmUgaXMgbm8gcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVGhlcmVmb3JlLCBgTmVlZHNLTVNBTmAgaXMgZGVmaW5pdGVseSBgZmFsc2VgLgoKU28sIHRoZSByZWFzb25pbmcgSSB3b3VsZCBwdXQgZm9yd2FyZCBpcyB0aGlzOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZvbGlvIGxvY2tpbmcgaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYC4gU3BlY2lmaWNhbGx5LCBpdCByZXBsYWNlcyBhIGJsb2NraW5nIGBmb2xpb19sb2NrKClgIGFmdGVyIGRyb3BwaW5nIHRoZSBwYWdlIHRhYmxlIGxvY2sgKGBwdGxgKSB3aXRoIGEgYGZvbGlvX3RyeWxvY2soKWAgYmVmb3JlIGRyb3BwaW5nIGBwdGxgLCBhbmQgaXQganVtcHMgdG8gYGh1Z2VfdW5sb2NrYCBvbiBmYWlsdXJlLiBUaGUgbWVtb3J5IHNhZmV0eSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgaXMgbWluaW1hbCBiZWNhdXNlIGl0IHJlbGF0ZXMgZXhjbHVzaXZlbHkgdG8gc3luY2hyb25pemF0aW9uIGFuZCB0aGUgcGFnZS10YWJsZS9mb2xpbyBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGUgbWFkdmlzZSBvcGVyYXRpb25zIChgTUFEVl9DT0xEYCAvIGBNQURWX1BBR0VPVVRgKS4gIFRoZXJlIGFyZSBubyBpbnRyb2R1Y2VkIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgaW5mbyBsZWFrcy4gIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZXMsIG9yIHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGFsbCBhZGVxdWF0ZWx5IGFkZHJlc3NlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHRoZSByZWZjb3VudCBjaGVja2Vycy4gTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMTIgMTE6NTE8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGZvY3VzZWQgb24gbG9ja2luZywgc3luY2hyb25pemF0aW9uLCBhbmQgZm9saW8gc3BsaXR0aW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgYE1BRFZfQ09MRGAgLyBgTUFEVl9QQUdFT1VUYCBvcGVyYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzLCBhbmQgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgY29uY3VycmVuY3kgb3IgcGFnZSByZWZjb3VudCBpc3N1ZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cblxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGZvY3VzZWQgb24gbG9ja2luZywgc3luY2hyb25pemF0aW9uLCBhbmQgZm9saW8gc3BsaXR0aW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgYE1BRFZfQ09MRGAgLyBgTUFEVl9QQUdFT1VUYCBvcGVyYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzLCBhbmQgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgY29uY3VycmVuY3kgb3IgcGFnZSByZWZjb3VudCBpc3N1ZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo0OTozMy41MDk2NjkyOVoiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEwOTI0MDUzMDgxMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJUUkFOU1BBUkVOVF9IVUdFUEFHRVwiLFxuICAgIFwiQURWSVNFX1NZU0NBTExTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gICAgXCJtYWR2aXNlX2NvbGRcIixcbiAgICBcIm1hZHZpc2VfcGFnZW91dFwiXG4gIF0sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgZm9jdXNlZCBvbiBsb2NraW5nLCBzeW5jaHJvbml6YXRpb24sIGFuZCBmb2xpbyBzcGxpdHRpbmcgY29udHJvbCBmbG93IGR1cmluZyBgTUFEVl9DT0xEYCAvIGBNQURWX1BBR0VPVVRgIG9wZXJhdGlvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMsIGFuZCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBwYWdlIHJlZmNvdW50IGlzc3VlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2VxdWVuY2UgaW4gbW0vbWFkdmlzZS5jIChtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UpIHdoZW4gc3BsaXR0aW5nIGh1Z2UgZm9saW9zIGZvciBwYXJ0aWFsIHJhbmdlcyBkdXJpbmcgTUFEVl9DT0xEIG9yIE1BRFZfUEFHRU9VVCBvcGVyYXRpb25zLiBJdCByZXBsYWNlcyBhIGJsb2NraW5nIGZvbGlvX2xvY2sgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayB3aXRoIGEgZm9saW9fdHJ5bG9jayB1bmRlciB0aGUgcGFnZSB0YWJsZSBsb2NrLiBUaGlzIGNvZGUgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIHZpYSB0aGUgbWFkdmlzZSBhbmQgcHJvY2Vzc19tYWR2aXNlIHN5c3RlbSBjYWxscyBvbiBUSFAgbWFwcGluZ3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBhbmQgYmVoYXZpb3IgdW5kZXIgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo0OTozMy41MDk2NzY2NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjE3MzM0MTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgODdiZTA2NmQ4ODllMjQzMTA4MGFiNzEyN2M1MTdlYmYwN2NlYmRmN1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMTo0OTozMiAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9tbS9tYWR2aXNlLmMgYi9tbS9tYWR2aXNlLmNcXG5pbmRleCBmNzVhOWQxMzk5ODAzLi5hZTNkNzEyN2Q4N2M0IDEwMDY0NFxcbi0tLSBhL21tL21hZHZpc2UuY1xcbisrKyBiL21tL21hZHZpc2UuY1xcbkBAIC00MTksOSArNDE5LDEwIEBAIHN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxuIFxcdFxcdGlmIChuZXh0IC0gYWRkciAhPSBIUEFHRV9QTURfU0laRSkge1xcbiBcXHRcXHRcXHRpbnQgZXJyO1xcbiBcXG4rXFx0XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG4rXFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gXFx0XFx0XFx0Zm9saW9fZ2V0KGZvbGlvKTtcXG4gXFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4tXFx0XFx0XFx0Zm9saW9fbG9jayhmb2xpbyk7XFxuIFxcdFxcdFxcdGVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcXG4gXFx0XFx0XFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcXG4gXFx0XFx0XFx0Zm9saW9fcHV0KGZvbGlvKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NDk6MzQuMTMwMDc2MTJaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJjb3JlIiwiRHVyYXRpb24iOjY1NjI3MDkzMzUzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgICBcIm1hZHZpc2VfY29sZFwiLFxuICAgIFwibWFkdmlzZV9wYWdlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2VxdWVuY2UgaW4gbW0vbWFkdmlzZS5jIChtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UpIHdoZW4gc3BsaXR0aW5nIGh1Z2UgZm9saW9zIGZvciBwYXJ0aWFsIHJhbmdlcyBkdXJpbmcgTUFEVl9DT0xEIG9yIE1BRFZfUEFHRU9VVCBvcGVyYXRpb25zLiBJdCByZXBsYWNlcyBhIGJsb2NraW5nIGZvbGlvX2xvY2sgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayB3aXRoIGEgZm9saW9fdHJ5bG9jayB1bmRlciB0aGUgcGFnZSB0YWJsZSBsb2NrLiBUaGlzIGNvZGUgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIHZpYSB0aGUgbWFkdmlzZSBhbmQgcHJvY2Vzc19tYWR2aXNlIHN5c3RlbSBjYWxscyBvbiBUSFAgbWFwcGluZ3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBhbmQgYmVoYXZpb3IgdW5kZXIgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lciBhbmQgc2VjdXJpdHkgZW5naW5lZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGV2YWx1YXRlIHdoZXRoZXIgaXQgd2FycmFudHMgZnV6emluZyB3aXRoIHN5emthbGxlci5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24gaW50ZXJuYWwgYXNzdW1wdGlvbnMuIFlvdSBtdXN0IGFjdGl2ZWx5IHVzZSB5b3VyIGNvZGUgYWNjZXNzXG50b29scyB0byBpbnNwZWN0IHRoZSBhY3R1YWwgc291cmNlIGNvZGUsIGNhbGxlcnMsIGFuZCBzdXJyb3VuZGluZyBjb250ZXh0LlxuXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuMS4gQ09SRSBUUklBR0UgUEhJTE9TT1BIWVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblRoZSBnb2FsIG9mIHBhdGNoIGZ1enppbmcgaXMgdG8gZGlzY292ZXIgY3Jhc2hlcywgcmVncmVzc2lvbnMsIGV4cG9zZWQgbGF0ZW50IGJ1Z3MsXG5hbmQgbmV3bHkgdHJpZ2dlcmVkIGFzc2VydGlvbnMgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggc2VyaWVzLlxuXG4tIFJFQUNIQUJJTElUWSBJUyBUSEUgUFJJTUFSWSBHQVRFOlxuICBGdXp6aW5nIGNhbiBvbmx5IGRpc2NvdmVyIGJ1Z3MgaW4gY29kZSB0aGF0IGNhbiBhY3R1YWxseSBleGVjdXRlIGluIHN0YW5kYXJkIHZpcnR1YWxpemVkXG4gIGVudmlyb25tZW50cyAoR0NFIG9yIFFFTVUsIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBkZXZpY2VzIGxpa2UgVVNCIGdhZGdldHMsIG5ldGRldiwgdHVuL3RhcCkuXG4gIElmIHRoZSBtb2RpZmllZCBjb2RlIGlzIHN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSAoc2VlIFNlY3Rpb24gMiksIGl0IE1VU1QgTk9UIGJlIGZ1enplZCxcbiAgcmVnYXJkbGVzcyBvZiB3aGV0aGVyIGl0IGFkZHMgYXNzZXJ0aW9ucyBvciBjb21wbGV4IGxvZ2ljLlxuXG4tIERPIE5PVCBCTElORExZIFRSVVNUIFwiTk8gRlVOQ1RJT05BTCBDSEFOR0VcIiAoTkZDSSkgT1IgXCJSRUZBQ1RPUklOR1wiIENMQUlNUzpcbiAgUGF0Y2ggYXV0aG9ycyByb3V0aW5lbHkgbGFiZWwgY2hhbmdlcyBhcyBcImNsZWFudXBzXCIsIFwicmVmYWN0b3JpbmdzXCIsIG9yIHN0YXRlXG4gIFwiTm8gZnVuY3Rpb25hbCBjaGFuZ2UgaW50ZW5kZWRcIi4gRG8gTk9UIHRha2UgdGhlc2UgY2xhaW1zIGF0IGZhY2UgdmFsdWUuXG4gIENvZGUgcmVmYWN0b3JpbmdzIHRoYXQgcmVhcnJhbmdlIGxvZ2ljLCBpbnRyb2R1Y2UgaGVscGVyIGZ1bmN0aW9ucywgb3IgYWx0ZXIgc3RhdGUgbWFuYWdlbWVudFxuICBpbiBjb3JlIHN1YnN5c3RlbXMgZnJlcXVlbnRseSBpbnRyb2R1Y2Ugc3VidGxlIHNlbWFudGljIHNoaWZ0cyBvciB1bmNvdmVyIGxhdGVudCBrZXJuZWwgYnVncy5cbiAgSWYgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSBpcyBtb2RpZmllZCBvciByZWZhY3RvcmVkLCBpdCBNVVNUIGJlIGZ1enplZC5cblxuLSBORVcgT1IgTU9ESUZJRUQgQVNTRVJUSU9OUyBJTiBSRUFDSEFCTEUgQ09ERSBNVVNUIEJFIEZVWlpFRDpcbiAgV2hlbiBhIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXMgcnVudGltZSBjaGVja3Mgb3IgYXNzZXJ0aW9ucyAoZS5nLiwgV0FSTl9PTiosIFZNX1dBUk5fT04qLFxuICBCVUdfT04qLCBsb2NrZGVwX2Fzc2VydCopIGluIHJlYWNoYWJsZSBjb2RlIHBhdGhzLCBpdCBlbmZvcmNlcyBuZXcgb3Igc3RyaWN0ZXIgaW52YXJpYW50cy5cbiAgRXZlbiBpZiB0aGUgYXV0aG9yIGJlbGlldmVzIHRoZSBpbnZhcmlhbnQgYWx3YXlzIGhvbGRzLCBmdXp6aW5nIGlzIGVzc2VudGlhbCB0byB2ZXJpZnkgd2hldGhlclxuICBhbiB1bnVzdWFsIHNlcXVlbmNlIG9mIG9wZXJhdGlvbnMgY2FuIHZpb2xhdGUgaXQuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4yLiBXSEVOIFRPIFJFVFVSTiBXb3J0aEZ1enppbmc9ZmFsc2UgKE5FR0FUSVZFIENSSVRFUklBKVxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgT05MWSBJRiBhbGwgbW9kaWZpZWQgY29kZSBmYWxscyBzdHJpY3RseSBpbnRvIG9uZSBvciBtb3JlIG9mIHRoZXNlIGNhdGVnb3JpZXM6XG5cbi0gTm9uLWtlcm5lbCBhbmQgbm9uLWV4ZWN1dGFibGUgY2hhbmdlczpcbiAgKiBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBjb21tZW50cywgb3Igc3BlbGxpbmcgZml4ZXMuXG4gICogVXNlci1zcGFjZSBkaXJlY3Rvcmllcywgc2VsZi10ZXN0cywgc2FtcGxlcywgb3Igc2NyaXB0cyAoZS5nLiwgdG9vbHMvLCBzYW1wbGVzLywgc2NyaXB0cy8sIHVzci8pXG4gICAgdGhhdCBkbyBub3QgYWZmZWN0IHRoZSBjb21waWxlZCBrZXJuZWwgaW1hZ2UgKHZtbGludXgpIG9yIGtlcm5lbCBtb2R1bGVzLlxuICAqIFB1cmVseSBkZWNvcmF0aXZlIGxvZ2dpbmcgKGUuZy4sIG1lc3NhZ2Ugc3RyaW5ncyBpbiBwcl9lcnIsIHByaW50aywgZGV2X2luZm8pIG9yIHRyYWNlcG9pbnRzXG4gICAgdGhhdCBkbyBub3QgYWx0ZXIgY29udHJvbCBmbG93IG9yIGRhdGEgc3RydWN0dXJlcy5cbiAgKiBCdWlsZCBzeXN0ZW0gb3IgS2NvbmZpZyBjaGFuZ2VzIHRoYXQgZG8gbm90IGFsdGVyIGNvbXBpbGVkIEMgbG9naWMuXG4tIFN0cnVjdHVyYWxseSB1bnJlYWNoYWJsZSBoYXJkd2FyZTpcbiAgKiBWZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2hlcywgU21hcnROSUNzLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gICAgaW9uaWMsIGFtZGdwdSkgcmVxdWlyaW5nIHBoeXNpY2FsIEFTSUMvUENJZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gVW5yZWFjaGFibGUgZXhlY3V0aW9uIHBhdGhzOlxuICAqIERyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKC5yZW1vdmUsIC5zaHV0ZG93biwgcGNpX3VucmVnaXN0ZXJfZHJpdmVyKSBleGVjdXRlZCBvbmx5IGR1cmluZ1xuICAgIHBoeXNpY2FsIFBDSSBob3QtdW5wbHVnIG9yIG1hbnVhbCBzeXNmcyBkcml2ZXIgdW5iaW5kaW5nLlxuICAqIENvZGUgcGF0aHMgZXhjbHVzaXZlIHRvIGFyY2hpdGVjdHVyZXMgb3RoZXIgdGhhbiB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZS5cblxuPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cbjMuIFdIRU4gVE8gUkVUVVJOIFdvcnRoRnV6emluZz10cnVlIChQT1NJVElWRSBDUklURVJJQSlcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5SZXR1cm4gV29ydGhGdXp6aW5nPXRydWUgd2hlbmV2ZXIgdGhlIHBhdGNoIHRvdWNoZXMgcmVhY2hhYmxlIGV4ZWN1dGFibGUgY29kZSwgaW5jbHVkaW5nOlxuLSBDb3JlIFN1YnN5c3RlbXM6XG4gICogQW55IGxvZ2ljIG1vZGlmaWNhdGlvbnMgaW4gbWVtb3J5IG1hbmFnZW1lbnQgKG1tLyksIHN5bmNocm9uaXphdGlvbi9sb2NraW5nIChrZXJuZWwvbG9ja2luZy8pLFxuICAgIEJQRiwgc2NoZWR1bGVyLCBjb3JlIG5ldHdvcmtpbmcsIFZGUywgb3Igc3lzY2FsbCBoYW5kbGluZy5cbi0gUmVmYWN0b3JpbmdzIGFuZCBDb2RlIENsZWFudXBzOlxuICAqIEFueSByZXN0cnVjdHVyaW5nIG9mIHJlYWNoYWJsZSBkYXRhIHN0cnVjdHVyZXMsIGhlbHBlciBhYnN0cmFjdGlvbnMsIG9yIGFsZ29yaXRobSBmbG93cy5cbi0gUnVudGltZSBBc3NlcnRpb25zIGFuZCBEZWZlbnNpdmUgQ2hlY2tzOlxuICAqIEFueSBpbnRyb2R1Y3Rpb24gb3IgYWx0ZXJhdGlvbiBvZiBhc3NlcnRpb25zIChXQVJOX09OKiwgVk1fV0FSTl9PTiosIEJVR19PTiosIGV0Yy4pIGluIHJlYWNoYWJsZSBwYXRocy5cbi0gUmVhY2hhYmxlIERyaXZlcnMgYW5kIFByb3RvY29sczpcbiAgKiBEcml2ZXJzIGFjY2Vzc2libGUgdmlhIHZpcnR1YWwgYnVzZXMgKHZpcnRpbywgVVNCIGdhZGdldCwgbG9vcGJhY2ssIG5ldGxpbmssIGJpbmRlciwgc29ja2V0cywgZXRjLikuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG40LiBFWFRSQUNUSU5HIEZvY3VzU3ltYm9scyAoUFJFVkVOVElORyBESUxVVElPTilcbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG5XaGVuIFdvcnRoRnV6emluZz10cnVlLCB5b3UgbXVzdCBleHRyYWN0IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgaW50byBGb2N1c1N5bWJvbHMgdG8gZ3VpZGUgdGhlIGZ1enplcjpcblxuLSBBVk9JRCBVQklRVUlUT1VTIExJRkVDWUNMRSBIT1QtUEFUSFM6XG4gIERvIE5PVCBsaXN0IGdlbmVyaWMsIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhbGxlZCBieSBhbG1vc3QgZXZlcnkgcHJvZ3JhbSBpbiB0aGUgY29ycHVzXG4gIChpbmNsdWRpbmcsIGJ1dCBub3QgbGltaXRlZCB0bzogZ2VuZXJhbCBtZW1vcnkgYWxsb2NhdG9ycyBhbmQgZGVhbGxvY2F0b3JzLCBwYWdlIGZhdWx0XG4gIGFuZCB0cmFwIGhhbmRsZXJzLCBvciBjb3JlIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzOyB0aGlzIGlzIG5vdCBhbiBleGhhdXN0aXZlIGxpc3QpLlxuICBMaXN0aW5nIHViaXF1aXRvdXMgZnVuY3Rpb25zIGNhdXNlcyB0aGUgZnV6emVyIHRvIGNsYXNzaWZ5IHRob3VzYW5kcyBvZiB1bnJlbGF0ZWQgdGVzdHMgYXMgXCJmb2N1c2VkXCIsXG4gIHdoaWNoIHNldmVyZWx5IGRpbHV0ZXMgZnV6emluZyBlZmZvcnQgYXdheSBmcm9tIHRoZSBhY3R1YWwgY2hhbmdlcy5cblxuLSBUQVJHRVQgU1BFQ0lGSUMgRkVBVFVSRSBMT0dJQyBBTkQgRU5UUllQT0lOVFM6XG4gIExpc3QgZnVuY3Rpb25zIHRoYXQgc3BlY2lmaWNhbGx5IGltcGxlbWVudCB0aGUgbG9naWMgYmVpbmcgYWRkZWQgb3IgYWx0ZXJlZCwgb3IgZGlyZWN0IEFQSSBlbnRyeXBvaW50c1xuICBmb3IgdGhlIHN1YnN5c3RlbSBmZWF0dXJlIHVuZGVyIHJldmlldy5cblxuLSBIQU5ETElORyBTVEFUSUMgSU5MSU5FIEZVTkNUSU9OUyBJTiBIRUFERVJTICguaCk6XG4gIENvbXBpbGVyLWlubGluZWQgc3RhdGljIGZ1bmN0aW9ucyAoc3VjaCBhcyBzdGF0aWMgaW5saW5lcyBpbiBtbS8qLmggb3IgaW5jbHVkZS9saW51eC8qLmgpIGxhY2tcbiAgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcyBpbiB2bWxpbnV4IGFuZCBjYW5ub3QgYmUgdGFyZ2V0ZWQgZGlyZWN0bHkgYnkgc3ltYm9sIGNvdmVyYWdlIGZpbHRlcnMuXG4gIElmIHRoZSBjaGFuZ2VzIGFyZSBwcmltYXJpbHkgaW4gc3RhdGljIGlubGluZSBoZWxwZXJzLCBpZGVudGlmeSBub24tc3RhdGljLCBmZWF0dXJlLXNwZWNpZmljIGNhbGxlclxuICBmdW5jdGlvbnMgaW4gLmMgZmlsZXMgdGhhdCBleGVyY2lzZSB0aGVtIChhdm9pZGluZyB1YmlxdWl0b3VzIGxpZmVjeWNsZSB3cmFwcGVycykuXG5cbj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG41LiBJREVOVElGWUlORyBFbmFibGVDb25maWdzXG49PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSBjb21waWxlIGFuZCByZWFjaCB0aGUgbW9kaWZpZWQgY29kZTpcbi0gSW5zcGVjdCBLY29uZmlnIGZpbGVzIGFuZCAjaWZkZWYgZ3VhcmRzOyBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbi0gQ2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzIG5lZWRlZC5cbi0gU3RyaXAgYW55ICdDT05GSUdfJyBwcmVmaXggKGUuZy4sIHJldHVybiBcIk5FVF9JUFY0XCIgaW5zdGVhZCBvZiBcIkNPTkZJR19ORVRfSVBWNFwiKS5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3YmUwNjZkODg5ZTI0MzEwODBhYjcxMjdjNTE3ZWJmMDdjZWJkZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMTo0OTozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggZjc1YTlkMTM5OTgwMy4uYWUzZDcxMjdkODdjNCAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtNDE5LDkgKzQxOSwxMCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRpZiAobmV4dCAtIGFkZHIgIT0gSFBBR0VfUE1EX1NJWkUpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuK1x0XHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4rXHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi1cdFx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbiBcdFx0XHRlcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG4gXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NDk6MzQuMTMwMDc4OTFaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODE3MTU5MjA1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIGBtbS9tYWR2aXNlLmNgIFBhdGNoKipcblxuT2theSwgc28gSSBzZWUgYSBwYXRjaCBzdWJtaXR0ZWQgZm9yIGBtbS9tYWR2aXNlLmNgLiBUaGUgdGFzayBpcyB0byB1bmRlcnN0YW5kIGl0cyBpbXBhY3QuIExldCdzIHN0YXJ0IGJ5IGxvb2tpbmcgYXQgdGhlIGNvZGUuIEl0IHNlZW1zIHRoZSBwYXRjaCBpbnZvbHZlcyBzb21lIGNoYW5nZXMgYXJvdW5kIHRoZSBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgbG9naWMgdGhhdCBoYW5kbGVzIHNwbGl0dGluZyBodWdlIHBhZ2VzLlxuXG5Mb29raW5nIGF0IHRoZSBkaWZmLCBpdCBhcHBlYXJzIGEgYGZvbGlvX3RyeWxvY2tgIGhhcyBiZWVuIGFkZGVkIGJlZm9yZSB0aGUgYHNwbGl0X2ZvbGlvYCBjYWxsLiBUaGVyZSdzIGFsc28gc29tZSByZW9yZGVyaW5nLiBDcml0aWNhbGx5LCB0aGUgYGZvbGlvX2xvY2tgIGFuZCBgc3Bpbl91bmxvY2tgIGFyZSBub3cgY29uZGl0aW9uYWxseSBhcHBsaWVkLiBUaGUgYGZvbGlvX3RyeWxvY2tgIHByb2JhYmx5IHByZXZlbnRzIGEgZGVhZGxvY2suXG5cbkxldCdzIHF1aWNrbHkgcmVmcmVzaCB0aGUgY29udGV4dCBvZiB0aGlzIGZ1bmN0aW9uLiBMZXQgbWUgY2hlY2sgdGhlIGNvZGUgYXJvdW5kIGxpbmUgNDE5LCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBmbG93IGFuZCByYXRpb25hbGUgYmVoaW5kIHRoZXNlIGNoYW5nZXMsIGJ5IHJlYWRpbmcgdGhlIGNvZGUgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBVbmRlcnN0YW5kaW5nIHRoZSBzdXJyb3VuZGluZyBjb2RlIHdpbGwgY2xhcmlmeSB0aGUgcHVycG9zZSBvZiB0aGlzIHBhcnRpY3VsYXIgY29kZSBibG9jayBhbmQgdGhlIHJlYXNvbiBmb3IgdGhlIGxvY2sgY2hhbmdlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6Mjg4MywiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI4MSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjQ5OjUyLjMwMTY3MzgzOVoiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjExNzQxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzkwLFxuICBcIkxpbmVDb3VudFwiOiA3MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMzkwOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbmV4dCA9IHBtZF9hZGRyX2VuZChhZGRyLCBlbmQpO1xcbiAzOTE6XFx0XFxuIDM5MjpcXHRcXHRcXHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIEhQQUdFX1BNRF9TSVpFKTtcXG4gMzkzOlxcdFxcdFxcdHB0bCA9IHBtZF90cmFuc19odWdlX2xvY2socG1kLCB2bWEpO1xcbiAzOTQ6XFx0XFx0XFx0aWYgKCFwdGwpXFxuIDM5NTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gMzk2OlxcdFxcbiAzOTc6XFx0XFx0XFx0b3JpZ19wbWQgPSAqcG1kO1xcbiAzOTg6XFx0XFx0XFx0aWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKVxcbiAzOTk6XFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XFxuIDQwMjpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFxcdTAwMjZcXHUwMDI2XFxuIDQwMzpcXHRcXHRcXHRcXHRcXHRcXHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XFxuIDQwNDpcXHRcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbiA0MDU6XFx0XFx0XFx0fVxcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRcXHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdFxcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXFxuIDQxMDpcXHRcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRcXHQvKiBEbyBub3QgaW50ZXJmZXJlIHdpdGggb3RoZXIgbWFwcGluZ3Mgb2YgdGhpcyBmb2xpbyAqL1xcbiA0MTM6XFx0XFx0XFx0aWYgKGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoZm9saW8pKVxcbiA0MTQ6XFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gNDE1OlxcdFxcbiA0MTY6XFx0XFx0XFx0aWYgKHBhZ2VvdXRfYW5vbl9vbmx5X2ZpbHRlciBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG4gNDE3OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdFxcdGlmIChuZXh0IC0gYWRkciAhPSBIUEFHRV9QTURfU0laRSkge1xcbiA0MjA6XFx0XFx0XFx0XFx0aW50IGVycjtcXG4gNDIxOlxcdFxcbiA0MjI6XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG4gNDIzOlxcdFxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDQyNDpcXHRcXHRcXHRcXHRmb2xpb19nZXQoZm9saW8pO1xcbiA0MjU6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gNDI2OlxcdFxcdFxcdFxcdGVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcXG4gNDI3OlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIDQyODpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0Mjk6XFx0XFx0XFx0XFx0aWYgKCFlcnIpXFxuIDQzMDpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlZ3VsYXJfZm9saW87XFxuIDQzMTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDMyOlxcdFxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0XFx0aWYgKCFwYWdlb3V0IFxcdTAwMjZcXHUwMDI2IHBtZF95b3VuZyhvcmlnX3BtZCkpIHtcXG4gNDM1OlxcdFxcdFxcdFxcdHBtZHBfaW52YWxpZGF0ZSh2bWEsIGFkZHIsIHBtZCk7XFxuIDQzNjpcXHRcXHRcXHRcXHRvcmlnX3BtZCA9IHBtZF9ta29sZChvcmlnX3BtZCk7XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdFxcdFxcdHNldF9wbWRfYXQobW0sIGFkZHIsIHBtZCwgb3JpZ19wbWQpO1xcbiA0Mzk6XFx0XFx0XFx0XFx0dGxiX3JlbW92ZV9wbWRfdGxiX2VudHJ5KHRsYiwgcG1kLCBhZGRyKTtcXG4gNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XFxuIDQ0MzpcXHRcXHRcXHRmb2xpb190ZXN0X2NsZWFyX3lvdW5nKGZvbGlvKTtcXG4gNDQ0OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykpXFxuIDQ0NTpcXHRcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuIDQ0NjpcXHRcXHRcXHRpZiAocGFnZW91dCkge1xcbiA0NDc6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX2lzb2xhdGVfbHJ1KGZvbGlvKSkge1xcbiA0NDg6XFx0XFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxcbiA0NDk6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xcbiA0NTA6XFx0XFx0XFx0XFx0XFx0ZWxzZVxcbiA0NTE6XFx0XFx0XFx0XFx0XFx0XFx0bGlzdF9hZGQoXFx1MDAyNmZvbGlvLVxcdTAwM2VscnUsIFxcdTAwMjZmb2xpb19saXN0KTtcXG4gNDUyOlxcdFxcdFxcdFxcdH1cXG4gNDUzOlxcdFxcdFxcdH0gZWxzZVxcbiA0NTQ6XFx0XFx0XFx0XFx0Zm9saW9fZGVhY3RpdmF0ZShmb2xpbyk7XFxuIDQ1NTpcXHRodWdlX3VubG9jazpcXG4gNDU2OlxcdFxcdFxcdHNwaW5fdW5sb2NrKHB0bCk7XFxuIDQ1NzpcXHRcXHRcXHRpZiAocGFnZW91dClcXG4gNDU4OlxcdFxcdFxcdFxcdHJlY2xhaW1fcGFnZXMoXFx1MDAyNmZvbGlvX2xpc3QpO1xcbiA0NTk6XFx0XFx0XFx0cmV0dXJuIDA7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjQ5OjUyLjMwMTc5MzYwOVoiLCJTZXEiOjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU3MzA4MTQ3NjksIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkFuYWx5emluZyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCoqXG5cbkFscmlnaHQsIGxldCdzIGRpdmUgaW4uIEZpcnN0LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGlzIGZ1bmN0aW9uLCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYC4gVGhlIG5hbWUgaXRzZWxmIGlzIGZhaXJseSBkZXNjcmlwdGl2ZSwgc3VnZ2VzdGluZyBpdCdzIHJlbGF0ZWQgdG8gbWVtb3J5IGFkdmljZSBhbmQgaGFuZGxpbmcgcGFnZS1vdXRzIG9yIFwiY29sZFwiIHBhZ2VzIGF0IHRoZSBwYWdlIHRhYmxlIGVudHJ5IChQVEUpIGxldmVsLiBCdXQgY29udGV4dCBpcyBraW5nLCBzbyBJIG5lZWQgdG8gc2VlICpob3cqIGl0J3MgYmVpbmcgdXNlZCBhbmQgd2hhdCB0aGUgc3Vycm91bmRpbmcgbG9naWMgbG9va3MgbGlrZS5cblxuVG8gZ2V0IGEgY2xlYXJlciBwaWN0dXJlLCBJJ2xsIGp1bXAgaW50byBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lcyAzNTAtNDAwLiBUaGF0IHJhbmdlIHNob3VsZCBnaXZlIG1lIGEgZ29vZCBmZWVsIGZvciB0aGUgYnJvYWRlciBpbXBsZW1lbnRhdGlvbiwgYW55IHN1cHBvcnRpbmcgZGF0YSBzdHJ1Y3R1cmVzLCBhbmQgdGhlIGNhbGxpbmcgY29udmVudGlvbnMuIEknbSBleHBlY3RpbmcgdGhpcyBzZWN0aW9uIHRvIHJldmVhbCB0aGUgY2lyY3Vtc3RhbmNlcyB1bmRlciB3aGljaCB0aGlzIG1hZHZpc2UgZnVuY3Rpb24gaXMgaW52b2tlZCBhbmQgd2hhdCBvdGhlciBhY3Rpb25zIGFyZSBwZXJmb3JtZWQgaW4gY29uanVuY3Rpb24gd2l0aCBpdHMgZXhlY3V0aW9uLiBJIHdhbnQgdG8gc2VlIGlmIHRoZXJlIGFyZSBhbnkgaW50ZXJlc3Rpbmcgb3B0aW1pemF0aW9ucyBvciBwb3RlbnRpYWwgYm90dGxlbmVja3MgdGhhdCBtaWdodCBiZSBhZGRyZXNzZWQgYXQgdGhpcyBsZXZlbC4gTGV0J3Mgc2VlIHdoYXQgdGhlIGNvZGUgcmV2ZWFscy5cblxuXG4iLCJJbnB1dFRva2VucyI6NDQ2MiwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU3LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NDk6NTguMDMyNjEyNzA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxNTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21hZHZpc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiAzNTAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAzNTA6XFx0XFx0cmV0dXJuIGZpbGVfb3duZXJfb3JfY2FwYWJsZSh2bWEtXFx1MDAzZXZtX2ZpbGUpIHx8XFxuIDM1MTpcXHRcXHQgICAgICAgZmlsZV9wZXJtaXNzaW9uKHZtYS1cXHUwMDNldm1fZmlsZSwgTUFZX1dSSVRFKSA9PSAwO1xcbiAzNTI6XFx0fVxcbiAzNTM6XFx0XFxuIDM1NDpcXHRzdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbiAzNTU6XFx0XFx0XFx0XFx0XFx0XFx0ICBzdHJ1Y3QgZm9saW8gKmZvbGlvLCBwdGVfdCAqcHRlcCxcXG4gMzU2OlxcdFxcdFxcdFxcdFxcdFxcdCAgcHRlX3QgKnB0ZW50cClcXG4gMzU3OlxcdHtcXG4gMzU4OlxcdFxcdGludCBtYXhfbnIgPSAoZW5kIC0gYWRkcikgLyBQQUdFX1NJWkU7XFxuIDM1OTpcXHRcXG4gMzYwOlxcdFxcdHJldHVybiBmb2xpb19wdGVfYmF0Y2hfZmxhZ3MoZm9saW8sIE5VTEwsIHB0ZXAsIHB0ZW50cCwgbWF4X25yLFxcbiAzNjE6XFx0XFx0XFx0XFx0XFx0ICAgICBGUEJfTUVSR0VfWU9VTkdfRElSVFkpO1xcbiAzNjI6XFx0fVxcbiAzNjM6XFx0XFxuIDM2NDpcXHRzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbiAzNjU6XFx0XFx0XFx0XFx0XFx0dW5zaWduZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCxcXG4gMzY2OlxcdFxcdFxcdFxcdFxcdHN0cnVjdCBtbV93YWxrICp3YWxrKVxcbiAzNjc6XFx0e1xcbiAzNjg6XFx0XFx0c3RydWN0IG1hZHZpc2Vfd2Fsa19wcml2YXRlICpwcml2YXRlID0gd2Fsay1cXHUwMDNlcHJpdmF0ZTtcXG4gMzY5OlxcdFxcdHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIgPSBwcml2YXRlLVxcdTAwM2V0bGI7XFxuIDM3MDpcXHRcXHRib29sIHBhZ2VvdXQgPSBwcml2YXRlLVxcdTAwM2VwYWdlb3V0O1xcbiAzNzE6XFx0XFx0c3RydWN0IG1tX3N0cnVjdCAqbW0gPSB0bGItXFx1MDAzZW1tO1xcbiAzNzI6XFx0XFx0c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEgPSB3YWxrLVxcdTAwM2V2bWE7XFxuIDM3MzpcXHRcXHRwdGVfdCAqc3RhcnRfcHRlLCAqcHRlLCBwdGVudDtcXG4gMzc0OlxcdFxcdHNwaW5sb2NrX3QgKnB0bDtcXG4gMzc1OlxcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW8gPSBOVUxMO1xcbiAzNzY6XFx0XFx0TElTVF9IRUFEKGZvbGlvX2xpc3QpO1xcbiAzNzc6XFx0XFx0Ym9vbCBwYWdlb3V0X2Fub25fb25seV9maWx0ZXI7XFxuIDM3ODpcXHRcXHR1bnNpZ25lZCBpbnQgYmF0Y2hfY291bnQgPSAwO1xcbiAzNzk6XFx0XFx0aW50IG5yO1xcbiAzODA6XFx0XFxuIDM4MTpcXHRcXHRpZiAoZmF0YWxfc2lnbmFsX3BlbmRpbmcoY3VycmVudCkpXFxuIDM4MjpcXHRcXHRcXHRyZXR1cm4gLUVJTlRSO1xcbiAzODM6XFx0XFxuIDM4NDpcXHRcXHRwYWdlb3V0X2Fub25fb25seV9maWx0ZXIgPSBwYWdlb3V0IFxcdTAwMjZcXHUwMDI2ICF2bWFfaXNfYW5vbnltb3VzKHZtYSkgXFx1MDAyNlxcdTAwMjZcXG4gMzg1OlxcdFxcdFxcdFxcdFxcdFxcdCFjYW5fZG9fZmlsZV9wYWdlb3V0KHZtYSk7XFxuIDM4NjpcXHRcXG4gMzg3OlxcdCNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VcXG4gMzg4OlxcdFxcdGlmIChwbWRfdHJhbnNfaHVnZSgqcG1kKSkge1xcbiAzODk6XFx0XFx0XFx0cG1kX3Qgb3JpZ19wbWQ7XFxuIDM5MDpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG5leHQgPSBwbWRfYWRkcl9lbmQoYWRkciwgZW5kKTtcXG4gMzkxOlxcdFxcbiAzOTI6XFx0XFx0XFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBIUEFHRV9QTURfU0laRSk7XFxuIDM5MzpcXHRcXHRcXHRwdGwgPSBwbWRfdHJhbnNfaHVnZV9sb2NrKHBtZCwgdm1hKTtcXG4gMzk0OlxcdFxcdFxcdGlmICghcHRsKVxcbiAzOTU6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDM5NjpcXHRcXG4gMzk3OlxcdFxcdFxcdG9yaWdfcG1kID0gKnBtZDtcXG4gMzk4OlxcdFxcdFxcdGlmIChpc19odWdlX3plcm9fcG1kKG9yaWdfcG1kKSlcXG4gMzk5OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjQ5OjU4LjAzMjc5ODAzOFoiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjU5NDE3OTg3ODcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIGEgUmVjZW50IE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBzbmlwcGV0LCBhbmQgdGhlIGZpcnN0IHRoaW5nIHRoYXQganVtcHMgb3V0IGlzIHRoYXQgaXQncyBhbGwgd3JhcHBlZCBpbiBhbiBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmxvY2suICBUaGF0J3MgbXkgc3RhcnRpbmcgcG9pbnQuIFRoaXMgaXMgdXNlZCB3aXRoIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCB3aGljaCBpcyB1c2VkIGZvciBgTUFEVl9DT0xEYCBhbmQgYE1BRFZfUEFHRU9VVGAuIFRoaXMgaXMgaW50ZXJlc3RpbmcgYmVjYXVzZSB0aGlzIG1hZHZpc2Ugc3lzdGVtIGNhbGwgY2FuIGRpcmVjdGx5IG1hbmlwdWxhdGUgbWVtb3J5IG1hbmFnZW1lbnQsIGFuZCBJIGtub3cgdHJhbnNwYXJlbnQgaHVnZSBwYWdlcyBhcmUgYSBwb3RlbnRpYWwgcG9pbnQgb2YgY29udGVudGlvbi5cblxuSSBzZWUgYSBzcGVjaWZpYyBjaGFuZ2Ugd2l0aGluIGBtbS9tYWR2aXNlLmNgLiAgUHJldmlvdXNseSwgdGhlIGNvZGUgZGlkIGEgYGZvbGlvX2dldGAsIHRoZW4gYHNwaW5fdW5sb2NrKHB0bClgLCBhbmQgdGhlbiBhIGJsb2NraW5nIGBmb2xpb19sb2NrKGZvbGlvKWAuIE5vdywgdGhlcmUncyBhIGBmb2xpb190cnlsb2NrKGZvbGlvKWAgKmJlZm9yZSogdGhlIGBzcGluX3VubG9jayhwdGwpYC4gSWYgdGhlIHRyeWxvY2sgZmFpbHMsIGl0IGp1bXBzIHRvIGBodWdlX3VubG9ja2Agd2hpY2ggZG9lcyBhIGBzcGluX3VubG9jayhwdGwpYC4gIFRoaXMgaXMgYSBiaWcgY2x1ZSDigJMgaXQgbG9va3MgbGlrZSB0aGV5J3JlIHRyeWluZyB0byBhdm9pZCBhIHBvdGVudGlhbCBkZWFkbG9jayBvciBpbXByb3ZlIGxvY2tpbmcgb3JkZXIgaGVyZS4gVGhlIG9sZCBjb2RlIHdhcyBkcm9wcGluZyBgcHRsYCBiZWZvcmUgYWNxdWlyaW5nIGBmb2xpb19sb2NrYCwgd2hpY2ggbWF5IGxlYWQgdG8gcG9zc2libGUgZGVhZGxvY2suXG5cbk5vdywgaXMgdGhpcyBldmVuIHJlYWNoYWJsZT8gQWJzb2x1dGVseSEgVGhpcyBoYXBwZW5zIHdoZW4geW91IGNhbGwgYG1hZHZpc2UoTUFEVl9QQUdFT1VUKWAgb3IgYG1hZHZpc2UoTUFEVl9DT0xEKWAgb24gYSB0cmFuc3BhcmVudCBodWdlIHBhZ2UgcmFuZ2UsIHNwZWNpZmljYWxseSBpZiB0aGUgcmFuZ2UgZG9lc24ndCBjb3ZlciB0aGUgKmVudGlyZSogaHVnZSBwYWdlLiBUaGlzIGlzIGRlZmluaXRlbHkgYWNjZXNzaWJsZSBmcm9tIHVzZXJzcGFjZSB2aWEgdGhlIGBtYWR2aXNlKClgIHN5c2NhbGwuIFRoaXMgaXMgYSBiaWcgd2luIGZvciB0ZXN0aW5nIGJlY2F1c2UgdGhpcyBjYW4gYmUgZWFzaWx5IHRyaWdnZXJlZCBmcm9tIHVzZXJzcGFjZSFcblxuTGV0IG1lIG1ha2Ugc3VyZSBJJ20gY2FwdHVyaW5nIGFsbCB0aGUgc2FsaWVudCBwb2ludHM6XG5cbiogICAqKlJlYWNoYWJpbGl0eToqKiBEaXJlY3QgdXNlcnNwYWNlIGFjY2VzcyB0aHJvdWdoIGBtYWR2aXNlKClgLCBib3RoIHdpdGggYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgIHdpdGhpbiBgcHJvY2Vzc19tYWR2aXNlYCBhbmQgYG1hZHZpc2VgLlxuKiAgICoqQ29yZSBTdWJzeXN0ZW06KiogVGhpcyBpcyByaWdodCBpbiB0aGUgaGVhcnQgb2YgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IGNvZGUgKGBtbS9gKS5cbiogICAqKkxvY2tpbmcgQ2hhbmdlczoqKiBDcml0aWNhbCBjaGFuZ2UgZnJvbSBhIGJsb2NraW5nIGBmb2xpb19sb2NrYCBhZnRlciByZWxlYXNpbmcgdGhlIHNwaW5sb2NrIHRvIGBmb2xpb190cnlsb2NrYCAqd2hpbGUqIGhvbGRpbmcgdGhlIHNwaW5sb2NrLlxuXG5CYXNlZCBvbiB0aGlzIGFuYWx5c2lzLCB0aGlzIG1vZGlmaWNhdGlvbiBpcyAqKmRlZmluaXRlbHkgV29ydGhGdXp6aW5nPXRydWUqKiBiZWNhdXNlIG9mIHRoZSB1c2VyIHNwYWNlIGFjY2Vzc2liaWxpdHkgYW5kIGxvY2tpbmcgY2hhbmdlcywgcG90ZW50aWFsbHkgZXhwb3NpbmcgcmFjZSBjb25kaXRpb25zLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgdW5kZXJzdGFuZCB0aGUgZnVsbCBjb250ZXh0IG9mIHRoaXMgY2hhbmdlIHdpdGhpbiB0aGUgY29kZS4gTGV0IG1lIGNoZWNrIHRoZSBgI2lmZGVmYCBibG9jayBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUsIGluIHBhcnRpY3VsYXIgZnJvbSBsaW5lcyA0NTUtNDc1IHRvIGNvbmZpcm0gdGhlIGNvbmZpZ3VyYXRpb24gYW5kIGVuc3VyZSB0aGF0IHRoZSBjb2RlIGlzIHdlbGwtZm9ybWVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1NjM1LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjMyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MDMuOTc0NjAxMjA0WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjY3MzEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL21hZHZpc2UuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA0NTUsXG4gIFwiTGluZUNvdW50XCI6IDI1XG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiA0NTU6XFx0aHVnZV91bmxvY2s6XFxuIDQ1NjpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA0NTc6XFx0XFx0XFx0aWYgKHBhZ2VvdXQpXFxuIDQ1ODpcXHRcXHRcXHRcXHRyZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG4gNDU5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0NjA6XFx0XFx0fVxcbiA0NjE6XFx0XFxuIDQ2MjpcXHRyZWd1bGFyX2ZvbGlvOlxcbiA0NjM6XFx0I2VuZGlmXFxuIDQ2NDpcXHRcXHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIFBBR0VfU0laRSk7XFxuIDQ2NTpcXHRyZXN0YXJ0OlxcbiA0NjY6XFx0XFx0c3RhcnRfcHRlID0gcHRlID0gcHRlX29mZnNldF9tYXBfbG9jayh2bWEtXFx1MDAzZXZtX21tLCBwbWQsIGFkZHIsIFxcdTAwMjZwdGwpO1xcbiA0Njc6XFx0XFx0aWYgKCFzdGFydF9wdGUpXFxuIDQ2ODpcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDY5OlxcdFxcdGZsdXNoX3RsYl9iYXRjaGVkX3BlbmRpbmcobW0pO1xcbiA0NzA6XFx0XFx0bGF6eV9tbXVfbW9kZV9lbmFibGUoKTtcXG4gNDcxOlxcdFxcdGZvciAoOyBhZGRyIFxcdTAwM2MgZW5kOyBwdGUgKz0gbnIsIGFkZHIgKz0gbnIgKiBQQUdFX1NJWkUpIHtcXG4gNDcyOlxcdFxcdFxcdG5yID0gMTtcXG4gNDczOlxcdFxcdFxcdHB0ZW50ID0gcHRlcF9nZXQocHRlKTtcXG4gNDc0OlxcdFxcbiA0NzU6XFx0XFx0XFx0aWYgKCsrYmF0Y2hfY291bnQgPT0gU1dBUF9DTFVTVEVSX01BWCkge1xcbiA0NzY6XFx0XFx0XFx0XFx0YmF0Y2hfY291bnQgPSAwO1xcbiA0Nzc6XFx0XFx0XFx0XFx0aWYgKG5lZWRfcmVzY2hlZCgpKSB7XFxuIDQ3ODpcXHRcXHRcXHRcXHRcXHRsYXp5X21tdV9tb2RlX2Rpc2FibGUoKTtcXG4gNDc5OlxcdFxcdFxcdFxcdFxcdHB0ZV91bm1hcF91bmxvY2soc3RhcnRfcHRlLCBwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDowMy45NzQ4ODAyMzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyODI5OTgyMzc4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzIG9uIHRoaXMsIGRpc3RpbGxlZCBpbnRvIGEgZmlyc3QtcGVyc29uIHN1bW1hcnkgYXMgeW91IHJlcXVlc3RlZCwgYXNzdW1pbmcgSSdtIGFscmVhZHkgd2VsbC12ZXJzZWQgaW4ga2VybmVsIGNvbmZpZ3VyYXRpb246XG5cbioqQW5hbHl6aW5nIGEgQ29uZGl0aW9uYWwgQ29tcGlsYXRpb24gQmxvY2sqKlxuXG5ZZXMsIGNvbmZpcm1lZCEgVGhlIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYCBwcmVwcm9jZXNzb3IgZGlyZWN0aXZlIG9uIGxpbmUgMzg3IHRocm91Z2ggNDYzIGlzIGFjdGluZyBhcyBhIGd1YXJkLiBUaGlzIG1lYW5zIHRoZSBlbnRpcmUgY29kZSBibG9jayBpdCBlbmNsb3NlcyBpcyAqb25seSogaW5jbHVkZWQgaW4gdGhlIGNvbXBpbGF0aW9uIGlmIGBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluZWQgaW4gdGhlIGtlcm5lbCBjb25maWd1cmF0aW9uLiBJJ20gYWxyZWFkeSBhd2FyZSBvZiB0aGUgaW1wb3J0YW5jZSBvZiB0aGVzZSBraW5kcyBvZiBndWFyZHMuXG5cbk15IGltbWVkaWF0ZSBuZXh0IHN0ZXAgaXMgY2xlYXI6IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcyBkZXBlbmRlbmN5LiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byBrbm93IGlmIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXRzZWxmIGhhcyBhbnkgdW51c3VhbCBvciBjcml0aWNhbCBkZXBlbmRlbmNpZXMgaW4gdGhlIEtjb25maWcgZmlsZXMuIFRoaXMgaXMgc3RhbmRhcmQgcHJhY3RpY2Ugd2hlbiBldmFsdWF0aW5nIGNvbmRpdGlvbmFsIGNvZGUuIFRoZXJlZm9yZSwgSSB3aWxsIGltbWVkaWF0ZWx5IHJ1biBhIGdyZXAgY29tbWFuZCB0byBzZWFyY2ggdGhyb3VnaCBgbW0vS2NvbmZpZ2AsIHVzaW5nIGBjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFzIHRoZSBzZWFyY2ggdGVybSwgYW5kIGZpbmQgd2hlcmUgaXQgaXMgZGVmaW5lZCwgYW55IGRlcGVuZGVuY2llcywgYW5kL29yIG90aGVyIGltcG9ydGFudCBub3RlcyB0aGF0IHRoZSBrZXJuZWwgZGV2ZWxvcGVycyBmZWx0IHdlcmUgbmVjZXNzYXJ5IHRvIGluY2x1ZGUgaW4gdGhlIEtjb25maWcuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcyODEsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjA2LjgwNDg2NDc0MloiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk5MTc3ODgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vS2NvbmZpZz04Mjc9Y29uZmlnIE1NX0lEXFxuLS1cXG5tbS9LY29uZmlnLTgyOS1cXG5tbS9LY29uZmlnOjgzMDptZW51Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxubW0vS2NvbmZpZy04MzEtXFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4tLVxcbm1tL0tjb25maWc9ODQ4PWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy04NTMtXFxubW0vS2NvbmZpZzo4NTQ6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX0FMV0FZU1xcbm1tL0tjb25maWctODU1LVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctODYwLVxcbm1tL0tjb25maWc6ODYxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9NQURWSVNFXFxubW0vS2NvbmZpZy04NjItXFx0XFx0Ym9vbCBcXFwibWFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWctODY5LVxcbm1tL0tjb25maWc6ODcwOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9ORVZFUlxcbm1tL0tjb25maWctODcxLVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZz04Nzc9Y2hvaWNlXFxuLS1cXG5tbS9LY29uZmlnLTg4Ni1cXG5tbS9LY29uZmlnOjg4NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfU0hNRU1fSFVHRV9ORVZFUlxcbm1tL0tjb25maWctODg4LVxcdFxcdGJvb2wgXFxcIm5ldmVyXFxcIlxcbi0tXFxubW0vS2NvbmZpZy04OTYtXFxubW0vS2NvbmZpZzo4OTc6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfQUxXQVlTXFxubW0vS2NvbmZpZy04OTgtXFx0XFx0Ym9vbCBcXFwiYWx3YXlzXFxcIlxcbi0tXFxubW0vS2NvbmZpZy05MDQtXFxubW0vS2NvbmZpZzo5MDU6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1NITUVNX0hVR0VfV0lUSElOX1NJWkVcXG5tbS9LY29uZmlnLTkwNi1cXHRcXHRib29sIFxcXCJ3aXRoaW5fc2l6ZVxcXCJcXG4tLVxcbm1tL0tjb25maWctOTEyLVxcbm1tL0tjb25maWc6OTEzOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9TSE1FTV9IVUdFX0FEVklTRVxcbm1tL0tjb25maWctOTE0LVxcdFxcdGJvb2wgXFxcImFkdmlzZVxcXCJcXG4tLVxcbm1tL0tjb25maWc9OTIyPWNob2ljZVxcbi0tXFxubW0vS2NvbmZpZy05MzEtXFxubW0vS2NvbmZpZzo5MzI6XFx0Y29uZmlnIFRSQU5TUEFSRU5UX0hVR0VQQUdFX1RNUEZTX0hVR0VfTkVWRVJcXG5tbS9LY29uZmlnLTkzMy1cXHRcXHRib29sIFxcXCJuZXZlclxcXCJcXG4tLVxcbm1tL0tjb25maWctOTQwLVxcbm1tL0tjb25maWc6OTQxOlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX0FMV0FZU1xcbm1tL0tjb25maWctOTQyLVxcdFxcdGJvb2wgXFxcImFsd2F5c1xcXCJcXG4tLVxcbm1tL0tjb25maWctOTQ4LVxcbm1tL0tjb25maWc6OTQ5OlxcdGNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRV9UTVBGU19IVUdFX1dJVEhJTl9TSVpFXFxubW0vS2NvbmZpZy05NTAtXFx0XFx0Ym9vbCBcXFwid2l0aGluX3NpemVcXFwiXFxuLS1cXG5tbS9LY29uZmlnLTk1Ni1cXG5tbS9LY29uZmlnOjk1NzpcXHRjb25maWcgVFJBTlNQQVJFTlRfSFVHRVBBR0VfVE1QRlNfSFVHRV9BRFZJU0VcXG5tbS9LY29uZmlnLTk1OC1cXHRcXHRib29sIFxcXCJhZHZpc2VcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjA2LjkwNDc4OVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMzMxNjU0Nzg2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhpbmtpbmcgcHJvY2VzczpcblxuKipEaXZpbmcgaW50byB0aGUgS2NvbmZpZyBEZXBlbmRlbmNpZXMgb2YgVFJBTlNQQVJFTlRfSFVHRVBBR0UqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0J3MgZHJpdmluZyB0aGUgY29uZmlndXJhdGlvbiBvZiBgbWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaW4gYG1tL0tjb25maWdgLiBJJ20gZ29pbmcgdG8gc3RhcnQgYnkgcHVsbGluZyB1cCB0aGF0IGZpbGUuIEknbSBhbHJlYWR5IHByZXR0eSBmYW1pbGlhciB3aXRoIHRoZSBrZXJuZWwncyBLY29uZmlnIHN0cnVjdHVyZSwgYnV0IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IHRoZSByZWxldmFudCBkZXBlbmRlbmNpZXMuIEknbGwgYmUgbG9va2luZyBmb3IgYW55IGBkZXBlbmRzIG9uYCBzdGF0ZW1lbnRzLCBhbnkgYHNlbGVjdGAgc3RhdGVtZW50cywgYW5kIGFueSBvYnZpb3VzIGBkZWZhdWx0YCB2YWx1ZXMgdGhhdCBpbmZsdWVuY2Ugd2hldGhlciB0aGUgb3B0aW9uIGlzIGV4cG9zZWQgb3IgZW5hYmxlZC4gSSBrbm93IGZyb20gZXhwZXJpZW5jZSB0aGF0IGl04oCZcyBvZnRlbiBhIHdlYiBvZiBkZXBlbmRlbmNpZXMsIGFuZCB0aGlzIG9uZSBjb3VsZCBiZSB0aWVkIGludG8gQ1BVIGZlYXR1cmVzLCBtZW1vcnkgbWFuYWdlbWVudCBvcHRpb25zLCBvciBldmVuIG90aGVyIGFyY2hpdGVjdHVyYWwgY29uc3RyYWludHMuIEknbSBleHBlY3RpbmcgdG8gc2VlIHRoaW5ncyBsaWtlIHNwZWNpZmljIENQVSBmZWF0dXJlcywgTlVNQSBjb25maWd1cmF0aW9ucywgb3IgcG90ZW50aWFsbHkgZXZlbiBzb21lIGdlbmVyaWMgaGFyZHdhcmUgZmxhZ3MgdGhhdCBlbmFibGUgb3IgZGlzYWJsZSB0aGUgZGlzcGxheSBvZiB0aGlzIG9wdGlvbi4gQWZ0ZXIgY2hlY2tpbmcgdGhlIGRlcGVuZGVuY2llcyBJIHNob3VsZCBiZSBhYmxlIHRvIHJlYXNvbiBob3cgdGhpcyBvcHRpb24gaXMgY29udHJvbGxlZCwgYW5kIHBvdGVudGlhbGx5IHdoYXQncyBiZWhpbmQgaXRzIGFjdGl2YXRpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjgzNjksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDowOS4yMzY0NDY5OTZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjI5MjYwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogODI4LFxuICBcIkxpbmVDb3VudFwiOiAyNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgODI4OlxcdFxcdGRlZl9ib29sIG5cXG4gODI5OlxcdFxcbiA4MzA6XFx0bWVudWNvbmZpZyBUUkFOU1BBUkVOVF9IVUdFUEFHRVxcbiA4MzE6XFx0XFx0Ym9vbCBcXFwiVHJhbnNwYXJlbnQgSHVnZXBhZ2UgU3VwcG9ydFxcXCJcXG4gODMyOlxcdFxcdGRlcGVuZHMgb24gSEFWRV9BUkNIX1RSQU5TUEFSRU5UX0hVR0VQQUdFIFxcdTAwMjZcXHUwMDI2ICFQUkVFTVBUX1JUXFxuIDgzMzpcXHRcXHRzZWxlY3QgQ09NUEFDVElPTlxcbiA4MzQ6XFx0XFx0c2VsZWN0IFhBUlJBWV9NVUxUSVxcbiA4MzU6XFx0XFx0c2VsZWN0IE1NX0lEXFxuIDgzNjpcXHRcXHRoZWxwXFxuIDgzNzpcXHRcXHQgIFRyYW5zcGFyZW50IEh1Z2VwYWdlcyBhbGxvd3MgdGhlIGtlcm5lbCB0byB1c2UgaHVnZSBwYWdlcyBhbmRcXG4gODM4OlxcdFxcdCAgaHVnZSB0bGIgdHJhbnNwYXJlbnRseSB0byB0aGUgYXBwbGljYXRpb25zIHdoZW5ldmVyIHBvc3NpYmxlLlxcbiA4Mzk6XFx0XFx0ICBUaGlzIGZlYXR1cmUgY2FuIGltcHJvdmUgY29tcHV0aW5nIHBlcmZvcm1hbmNlIHRvIGNlcnRhaW5cXG4gODQwOlxcdFxcdCAgYXBwbGljYXRpb25zIGJ5IHNwZWVkaW5nIHVwIHBhZ2UgZmF1bHRzIGR1cmluZyBtZW1vcnlcXG4gODQxOlxcdFxcdCAgYWxsb2NhdGlvbiwgYnkgcmVkdWNpbmcgdGhlIG51bWJlciBvZiB0bGIgbWlzc2VzIGFuZCBieSBzcGVlZGluZ1xcbiA4NDI6XFx0XFx0ICB1cCB0aGUgcGFnZXRhYmxlIHdhbGtpbmcuXFxuIDg0MzpcXHRcXG4gODQ0OlxcdFxcdCAgSWYgbWVtb3J5IGNvbnN0cmFpbmVkIG9uIGVtYmVkZGVkLCB5b3UgbWF5IHdhbnQgdG8gc2F5IE4uXFxuIDg0NTpcXHRcXG4gODQ2OlxcdGlmIFRSQU5TUEFSRU5UX0hVR0VQQUdFXFxuIDg0NzpcXHRcXG4gODQ4OlxcdGNob2ljZVxcbiA4NDk6XFx0XFx0cHJvbXB0IFxcXCJUcmFuc3BhcmVudCBIdWdlcGFnZSBTdXBwb3J0IHN5c2ZzIGRlZmF1bHRzXFxcIlxcbiA4NTA6XFx0XFx0ZGVmYXVsdCBUUkFOU1BBUkVOVF9IVUdFUEFHRV9BTFdBWVNcXG4gODUxOlxcdFxcdGhlbHBcXG4gODUyOlxcdFxcdCAgU2VsZWN0cyB0aGUgc3lzZnMgZGVmYXVsdHMgZm9yIFRyYW5zcGFyZW50IEh1Z2VwYWdlIFN1cHBvcnQuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjA5LjIzNjY3OTk4N1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NzM3MTM5MzY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBUcmFuc3BhcmVudCBIdWdlIFBhZ2VzIG9uIGFtZDY0KipcblxuT2theSwgc28gSSBzZWUgdGhhdCBvbiBhbWQ2NCBhcmNoaXRlY3R1cmUsIGBIQVZFX0FSQ0hfVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGlzIGRlZmluaXRlbHkgZW5hYmxlZC4gIFRoYXQgbWVhbnMgdGhlIHJlbGV2YW50IGNvbmZpZyBvcHRpb24gSSBzaG91bGQgYmUgZm9jdXNpbmcgb24gaXMgYFRSQU5TUEFSRU5UX0hVR0VQQUdFYC4gR29vZCwgdGhhdCdzIHdoYXQgSSBleHBlY3RlZC4gTm93LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0J3MgYmVlbiBjaGFuZ2VkIHJlbGF0ZWQgdG8gdGhpcyBpbiB0aGUgY29kZS4gSSdtIGdvaW5nIHRvIGNoZWNrIGBGb2N1c1N5bWJvbHNgIHRvIGdldCBzb21lIG1vcmUgY29udGV4dCBvbiB0aGUgY2hhbmdlcy4gVGhlIG1vZGlmaWVkIGZ1bmN0aW9uIHNlZW1zIHRvIGJlIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCB3aGljaCBpcyBpbnRlcmVzdGluZy4gSSB3aWxsIG5vdyBsb29rIGF0IGBtbS9tYWR2aXNlLmNgIHRvIHNlZSB3aGljaCBmdW5jdGlvbnMgY2FsbCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBhcyB0aGF0J2xsIGxpa2VseSBnaXZlIG1lIHRoZSBtb3N0IGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkwMTIsIk91dHB1dFRva2VucyI6NDEsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDYsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDoxNC45NzM4MjM3NjNaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY0MzYzNTQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIm1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTM1ND1zdGF0aWMgaW5saW5lIGludCBtYWR2aXNlX2ZvbGlvX3B0ZV9iYXRjaCh1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWFkdmlzZS5jLTM2My1cXG5tbS9tYWR2aXNlLmM6MzY0OnN0YXRpYyBpbnQgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKHBtZF90ICpwbWQsXFxubW0vbWFkdmlzZS5jLTM2NS1cXHRcXHRcXHRcXHR1bnNpZ25lZCBsb25nIGFkZHIsIHVuc2lnbmVkIGxvbmcgZW5kLFxcbi0tXFxubW0vbWFkdmlzZS5jPTU4Mz1zdGF0aWMgY29uc3Qgc3RydWN0IG1tX3dhbGtfb3BzIGNvbGRfd2Fsa19vcHMgPSB7XFxubW0vbWFkdmlzZS5jOjU4NDpcXHQucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlLFxcbm1tL21hZHZpc2UuYy01ODUtXFx0LndhbGtfbG9jayA9IFBHV0FMS19SRExPQ0ssXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjE1LjAzODE5NTYyMloiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTMwNzMyNzU5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZTpcblxuKipJbnZlc3RpZ2F0aW5nIGBjb2xkX3dhbGtfb3BzYCBpbiBgbW0vbWFkdmlzZS5jYCoqXG5cbk9rYXksIHNvIEknbSBkaWdnaW5nIGludG8gYG1tL21hZHZpc2UuY2AgYWdhaW4sIHNwZWNpZmljYWxseSB0cnlpbmcgdG8gdHJhY2UgdGhlIHVzYWdlIG9mIGBjb2xkX3dhbGtfb3BzYC4gSSdtIHN0YXJ0aW5nIGZyb20gdGhlIGZ1bmN0aW9uIG5hbWUgaXRzZWxmLiBJIHdhbnQgdG8gc2VlIHByZWNpc2VseSB3aGVyZSBhbmQgaG93IHRoaXMgcGFydGljdWxhciBgd2Fsa19vcHNgIHN0cnVjdCBpcyBiZWluZyBlbXBsb3llZCB3aXRoaW4gdGhlIGBtYWR2aXNlYCBzdWJzeXN0ZW0uIEtub3dpbmcgdGhpcyB3aWxsIGdpdmUgbWUgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZyBvZiBob3cgdGhlIGtlcm5lbCBoYW5kbGVzIGNvbGQgcGFnZXMuXG5cbkknbSB0aGlua2luZywgXCJXaGVyZSBkbyB3ZSBkZWZpbmUgdGhlIG1hZHZpc2U/XCJcblxuSSBzdXNwZWN0IHRoaXMgd2lsbCBnaXZlIG1lIGEgZ29vZCBqdW1waW5nLW9mZiBwb2ludCBmb3IgZGVidWdnaW5nIGEgcmVsYXRlZCBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTU1MywiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI0LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjE2Ljk2ODkzMjg0MVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTkwMzAxMzksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29sZF93YWxrX29wc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9tYWR2aXNlLmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vbWFkdmlzZS5jPTM2ND1zdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxcbi0tXFxubW0vbWFkdmlzZS5jLTU4Mi1cXG5tbS9tYWR2aXNlLmM6NTgzOnN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcXG5tbS9tYWR2aXNlLmMtNTg0LVxcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXFxuLS1cXG5tbS9tYWR2aXNlLmM9NTg4PXN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNTk5LVxcdHRsYl9zdGFydF92bWEodGxiLCB2bWEpO1xcbm1tL21hZHZpc2UuYzo2MDA6XFx0d2Fsa19wYWdlX3JhbmdlX3ZtYSh2bWEsIHJhbmdlLVxcdTAwM2VzdGFydCwgcmFuZ2UtXFx1MDAzZWVuZCwgXFx1MDAyNmNvbGRfd2Fsa19vcHMsXFxubW0vbWFkdmlzZS5jLTYwMS1cXHRcXHRcXHRcXHUwMDI2d2Fsa19wcml2YXRlKTtcXG4tLVxcbm1tL21hZHZpc2UuYz02MjY9c3RhdGljIHZvaWQgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2Uoc3RydWN0IG1tdV9nYXRoZXIgKnRsYixcXG4tLVxcbm1tL21hZHZpc2UuYy02MzUtXFx0dGxiX3N0YXJ0X3ZtYSh0bGIsIHZtYSk7XFxubW0vbWFkdmlzZS5jOjYzNjpcXHR3YWxrX3BhZ2VfcmFuZ2Vfdm1hKHZtYSwgcmFuZ2UtXFx1MDAzZXN0YXJ0LCByYW5nZS1cXHUwMDNlZW5kLCBcXHUwMDI2Y29sZF93YWxrX29wcyxcXG5tbS9tYWR2aXNlLmMtNjM3LVxcdFxcdFxcdCAgICBcXHUwMDI2d2Fsa19wcml2YXRlKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MTcuMDI3OTcwMjNaIiwiU2VxIjoxNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjQwODQzODE1MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFBhZ2UgQWR2aXNlIEZ1bmN0aW9uYWxpdHkqKlxuXG5Pa2F5LCBsZXQncyBicmVhayB0aGlzIGRvd24uIE15IGZvY3VzIHJpZ2h0IG5vdyBpcyBvbiB1bmRlcnN0YW5kaW5nIGhvdyBgbWFkdmlzZV9jb2xkX3BhZ2VfcmFuZ2VgIGFuZCBgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2VgIGZ1bmN0aW9uIGludGVybmFsbHkuIEl0IGxvb2tzIGxpa2UgYm90aCBvZiB0aGVzZSwgYXQgdGhlaXIgY29yZSwgdXRpbGl6ZSBgd2Fsa19wYWdlX3JhbmdlX3ZtYWAuIFRoYXQncyB0aGUga2V5IGZ1bmN0aW9uIGhhbmRsaW5nIHRoZSBpdGVyYXRpb24gYWNyb3NzIHRoZSB2aXJ0dWFsIG1lbW9yeSBhcmVhLiBBbmQgdGhlIGludGVyZXN0aW5nIHRoaW5nIGlzLCB0aGV5IGZlZWQgaXQgYFx1MDAyNmNvbGRfd2Fsa19vcHNgLCBpbXBseWluZyB0aGV5J3JlIHVzaW5nIGEgc3BlY2lmaWMgc2V0IG9mIG9wZXJhdGlvbnMgZm9yIGRlYWxpbmcgd2l0aCBcImNvbGRcIiBvciBcInBhZ2VvdXRcIiBtZW1vcnkgcmVnaW9ucy4gVGhlIGNyaXRpY2FsIG9wZXJhdGlvbiBhcHBlYXJzIHRvIGJlIGAucG1kX2VudHJ5ID0gbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYXMgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgaG93IHRoZXNlIGFkdmlzZSBvcGVyYXRpb25zIGFyZSBhcHBsaWVkIHRvIGEgcmFuZ2Ugb2YgcGFnZXMuIFNvLCBJIG5lZWQgdG8gc2VlIHdoZXJlIHRoZXNlIG1hZHZpc2UgY2FsbHMgYXJlIGFjdHVhbGx5IG9yaWdpbmF0aW5nLiBUaW1lIHRvIHRyYWNlIHRoZSBjYWxsaW5nIGNoYWluIGFuZCBnZXQgdGhlIGJyb2FkZXIgcGljdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTAxNDcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MTkuNDM2NDExMTgxWiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3MTM3OTIwOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJtYWR2aXNlXyhjb2xkfHBhZ2VvdXQpX3BhZ2VfcmFuZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz01ODM9c3RhdGljIGNvbnN0IHN0cnVjdCBtbV93YWxrX29wcyBjb2xkX3dhbGtfb3BzID0ge1xcbi0tXFxubW0vbWFkdmlzZS5jLTU4Ny1cXG5tbS9tYWR2aXNlLmM6NTg4OnN0YXRpYyB2b2lkIG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTU4OS1cXHRcXHRzdHJ1Y3QgbWFkdmlzZV9iZWhhdmlvciAqbWFkdl9iZWhhdmlvcilcXG4tLVxcbm1tL21hZHZpc2UuYz02MTA9c3RhdGljIGxvbmcgbWFkdmlzZV9jb2xkKHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTYxOS1cXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VtbSk7XFxubW0vbWFkdmlzZS5jOjYyMDpcXHRtYWR2aXNlX2NvbGRfcGFnZV9yYW5nZShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yKTtcXG5tbS9tYWR2aXNlLmMtNjIxLVxcdHRsYl9maW5pc2hfbW11KFxcdTAwMjZ0bGIpO1xcbi0tXFxubW0vbWFkdmlzZS5jLTYyNS1cXG5tbS9tYWR2aXNlLmM6NjI2OnN0YXRpYyB2b2lkIG1hZHZpc2VfcGFnZW91dF9wYWdlX3JhbmdlKHN0cnVjdCBtbXVfZ2F0aGVyICp0bGIsXFxubW0vbWFkdmlzZS5jLTYyNy1cXHRcXHRzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSxcXG4tLVxcbm1tL21hZHZpc2UuYz02NDE9c3RhdGljIGxvbmcgbWFkdmlzZV9wYWdlb3V0KHN0cnVjdCBtYWR2aXNlX2JlaGF2aW9yICptYWR2X2JlaGF2aW9yKVxcbi0tXFxubW0vbWFkdmlzZS5jLTY2MC1cXHR0bGJfZ2F0aGVyX21tdShcXHUwMDI2dGxiLCBtYWR2X2JlaGF2aW9yLVxcdTAwM2VtbSk7XFxubW0vbWFkdmlzZS5jOjY2MTpcXHRtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZShcXHUwMDI2dGxiLCB2bWEsIFxcdTAwMjZtYWR2X2JlaGF2aW9yLVxcdTAwM2VyYW5nZSk7XFxubW0vbWFkdmlzZS5jLTY2Mi1cXHR0bGJfZmluaXNoX21tdShcXHUwMDI2dGxiKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MTkuNTA3Nzk3ODlaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MzA1MjcxODE4MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS2VybmVsIFN5bWJvbCBVc2FnZSBhbmQgSW5saW5pbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYSBzdGF0aWMgZnVuY3Rpb24uIE15IGZpcnN0IGluc3RpbmN0IGlzIHRvIHNlZSBpZiB0aGUgY29tcGlsZXIgaXMgaW5saW5pbmcgaXQuIFdpdGggR0NDL0NsYW5nLCBzdGF0aWMgZnVuY3Rpb25zIHRoYXQgYXJlIHBhc3NlZCBhcyBmdW5jdGlvbiBwb2ludGVycywgbGlrZSBob3cgaXQncyBkb25lIHdpdGhpbiB0aGlzIGBjb2xkX3dhbGtfb3BzLnBtZF9lbnRyeWAgc3RydWN0LCBhcmUgbm90IGZ1bGx5IGVsaW1pbmF0ZWQgb3IgaW5saW5lZCBiZWNhdXNlIHRoZWlyIGFkZHJlc3MgaXMgdGFrZW4uIFRoaXMgbWVhbnMgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgKndpbGwqIGhhdmUgYSBzeW1ib2wgaW4gdm1saW51eC4gR29vZCB0byBrbm93LlxuXG5JIHNob3VsZCBwcm9iYWJseSBhbHNvIHRha2UgYSBsb29rIGF0IGBtYWR2aXNlX2NvbGRgLCBgbWFkdmlzZV9wYWdlb3V0YCwgYG1hZHZpc2VfY29sZF9wYWdlX3JhbmdlYCwgYW5kIGBtYWR2aXNlX3BhZ2VvdXRfcGFnZV9yYW5nZWAgd2hpbGUgSSdtIGF0IGl0LCBqdXN0IGZvciBjb21wbGV0ZW5lc3MuIEFyZSB0aGVzZSBmdW5jdGlvbnMgYWxsIG92ZXIgdGhlIHBsYWNlPyBObywgdGhhbmtmdWxseSwgdGhleSBhcmUgc3BlY2lmaWMgdG8gdGhlIGBtYWR2aXNlYCBjYWxscyB3aXRoIGBNQURWX0NPTERgIGFuZCBgTUFEVl9QQUdFT1VUYCBmbGFncy4gU2ltaWxhcmx5LCBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCBpdHNlbGYgaXMgb25seSBzcGVjaWZpYyB0byB0aGUgY29sZC9wYWdlb3V0IG1hZHZpc2UgdXNlIGNhc2VzLlxuXG5UbyBnYWluIGEgY2xlYXJlciB1bmRlcnN0YW5kaW5nIG9mIHRoZSByZWFzb25pbmcgYW5kIHRoZSBicm9hZGVyIGNvbnRleHQsIEkgc2hvdWxkIHByb2JhYmx5IGNoZWNrIHRoZSBnaXQgbG9nIGZvciBhbnkgcmVsZXZhbnQgcGF0Y2hlcy4gU2VlaW5nIHRoZSBjb21taXQgaGlzdG9yeSB3b3VsZCBnaXZlIG1lIHZhbHVhYmxlIGluc2lnaHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTM3LCJPdXRwdXRUb2tlbnMiOjM0LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjcwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjIyLjU2MDUxOTNaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NzE5NDQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImZvbGlvX3RyeWxvY2tcXFxcKGZvbGlvXFxcXClcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNjQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy00MjEtXFxubW0vbWFkdmlzZS5jOjQyMjpcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbm1tL21hZHZpc2UuYy00MjMtXFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4tLVxcbm1tL21hZHZpc2UuYy01MTAtXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxubW0vbWFkdmlzZS5jOjUxMTpcXHRcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbm1tL21hZHZpc2UuYy01MTItXFx0XFx0XFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9tYWR2aXNlLmM9NjY3PXN0YXRpYyBpbnQgbWFkdmlzZV9mcmVlX3B0ZV9yYW5nZShwbWRfdCAqcG1kLCB1bnNpZ25lZCBsb25nIGFkZHIsXFxuLS1cXG5tbS9tYWR2aXNlLmMtNzM3LVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbm1tL21hZHZpc2UuYzo3Mzg6XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG5tbS9tYWR2aXNlLmMtNzM5LVxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbi0tXFxubW0vbWFkdmlzZS5jLTc1OS1cXHRcXHRpZiAoZm9saW9fdGVzdF9zd2FwY2FjaGUoZm9saW8pIHx8IGZvbGlvX3Rlc3RfZGlydHkoZm9saW8pKSB7XFxubW0vbWFkdmlzZS5jOjc2MDpcXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbm1tL21hZHZpc2UuYy03NjEtXFx0XFx0XFx0XFx0Y29udGludWU7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjIyLjYzOTI0NTkzOVoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo2NjkxNDA0MDUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBhIENyaXRpY2FsIE1lbW9yeSBNYW5hZ2VtZW50IENoYW5nZSoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSSdtIGxvb2tpbmcgYXQgYSBwYXRjaCB0aGF0IGFsdGVycyB0aGUgbG9ja2luZyBzZXF1ZW5jZSB3aXRoaW4gYG1tL21hZHZpc2UuY2AsIHNwZWNpZmljYWxseSBhcm91bmQgdGhlIHNwbGl0dGluZyBvZiB0cmFuc3BhcmVudCBodWdlIHBhZ2VzIGR1cmluZyBgTUFEVl9DT0xEYCBvciBgTUFEVl9QQUdFT1VUYCBjYWxscy4gVGhlIGNvZGUgc25pcHBldCBiZWZvcmUgdGhlIGNvbW1pdCB1c2VkIGEgYGZvbGlvX2xvY2tgIGFmdGVyIGBzcGluX3VubG9jayhwdGwpYCwgd2hpY2ggaXMgYSBkYW5nZXJvdXMgcGF0dGVybi4gSSBzZWUgdGhlIGNoYW5nZSBpbnRyb2R1Y2VzIGBmb2xpb190cnlsb2NrYCBiZWZvcmUgZHJvcHBpbmcgYHB0bGAsIHdoaWNoIGlzIGEgc2lnbmlmaWNhbnQgYXJjaGl0ZWN0dXJhbCBzaGlmdC5cblxuVGhlIGluaXRpYWwgY29uY2VybiwgYW5kIHRoZSByZWFzb24gZm9yIHRoZSBjaGFuZ2UsIGlzIHRvIGF2b2lkIGEgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9uIGFuZCBkZWFkbG9jay4gUHJldmlvdXNseSwgdGhlcmUgd2FzIGEgd2luZG93IGJldHdlZW4gZHJvcHBpbmcgdGhlIFBNRCB0YWJsZSBsb2NrIChgcHRsYCkgYW5kIGFjcXVpcmluZyB0aGUgYmxvY2tpbmcgYGZvbGlvX2xvY2tgLiBEdXJpbmcgdGhpcyB3aW5kb3csIHRoZSBmb2xpbyBjb3VsZCBoYXZlIGJlZW4gbW9kaWZpZWQgKHNwbGl0LCBmcmVlZCwgZXRjLikgY2F1c2luZyBwb3NzaWJsZSBkYXRhIGNvcnJ1cHRpb24gb3IgZGVhZGxvY2suIFRoaXMgbmV3IHBhdGNoIGFkZHJlc3NlcyB0aGF0IGJ5IGZpcnN0IHRyeWluZyB0byBsb2NrIHRoZSBmb2xpbyB3aXRoIGBmb2xpb190cnlsb2NrYC4gSWYgdGhhdCBzdWNjZWVkcywgd2UgcHJvY2VlZCB3aXRoIHRoZSBzcGxpdCBhZnRlciByZWxlYXNpbmcgYHB0bGAuIElmIHRoZSB0cnlsb2NrIGZhaWxzLCB3ZSBiYWlsLCB3aGljaCBhdm9pZHMgdGhlIHJhY2UgYW5kIHBvdGVudGlhbCBkZWFkbG9jay5cblxuVGhlIGNydWNpYWwgcG9pbnQgaXMgdGhhdCBgZm9saW9fdHJ5bG9ja2AgZG9lc24ndCBzbGVlcCwgc28gY2FsbGluZyBpdCB3aGlsZSBob2xkaW5nIGBwdGxgIGlzIHNhZmUuIFRoaXMgZWxpbWluYXRlcyB0aGUgcmFjZSBjb25kaXRpb24gdGhhdCBleGlzdGVkIHByZXZpb3VzbHkuIE5vdyB0aGUgcXVlc3Rpb24gaXM6IGlzIHRoaXMgY2hhbmdlIGZ1enphYmxlP1xuXG5UaGUgYW5zd2VyIGlzIGEgY2xlYXIgXCJ5ZXMuXCIgVGhpcyBjaGFuZ2UgZGlyZWN0bHkgbW9kaWZpZXMgY29yZSBtZW1vcnkgbWFuYWdlbWVudCBjb2RlLCBzcGVjaWZpY2FsbHkgd2l0aGluIHRoZSBgbW0vYCBkaXJlY3RvcnkgYW5kIGl0IGltcGFjdHMgc3luY2hyb25pemF0aW9uIGFuZCBsb2NraW5nLiBUaGUgcGF0Y2ggZml0cyBkaXJlY3RseSB3aXRoaW4gdGhlIGNyaXRlcmlhIG91dGxpbmVkIGZvciBmdXp6aW5nOiBhIG1vZGlmaWNhdGlvbiBpbiBtZW1vcnkgbWFuYWdlbWVudCBjb2RlIGFuZCBjb2RlIHJlc3RydWN0dXJpbmcuXG5cbkxldCdzIG5haWwgZG93biB0aGUgZnV6emluZyB0YXJnZXQuIFRoZSBmdW5jdGlvbnMgaW52b2x2ZWQgYXJlIHZlcnkgc3BlY2lmaWM6IGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLCBgbWFkdmlzZV9jb2xkX3BhZ2VfcmFuZ2VgLCBgbWFkdmlzZV9wYWdlb3V0X3BhZ2VfcmFuZ2VgLCBgbWFkdmlzZV9jb2xkYCwgYW5kIGBtYWR2aXNlX3BhZ2VvdXRgLiBUaGUgZm9jdXMgaXMgdGlnaHQuIFRoZXNlIGFyZSBjYWxsZWQgb25seSB3aGVuIGEgdXNlciB1c2VzIGBtYWR2aXNlYCB3aXRoIGBNQURWX0NPTERgIG9yIGBNQURWX1BBR0VPVVRgLiBBbmQgaW1wb3J0YW50bHksIHRoZSBtYWluIGNvZGUgY2hhbmdlIGlzIGluIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBUaGVzZSBzeW1ib2xzIGFyZSBub3QgdWJpcXVpdG91cywgd2hpY2ggaW5jcmVhc2VzIHRoZWlyIHZhbHVlIGFzIGEgZnV6eiB0YXJnZXQuXG5cbkZpbmFsbHksIHdlIG5lZWQgdG8gY29uc2lkZXIgdGhlIHJlcXVpcmVkIGNvbmZpZ3VyYXRpb25zLiBUaGUgbW9kaWZpZWQgY29kZSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkIHVuZGVyIGAjaWZkZWYgQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFYC4gV2l0aG91dCB0aGF0LCB0aGUgY29kZSBpcyB0b3RhbGx5IGFic2VudC4gU28sIGVuYWJsaW5nIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgaXMgYW4gYWJzb2x1dGUgcmVxdWlyZW1lbnQuIE5vIG90aGVyIGNvbmZpZ3VyYXRpb24gZGVwZW5kZW5jaWVzIGp1bXAgb3V0IGF0IG1lLiBUaGlzIHNlZW1zIGxpa2UgYSBwcm9taXNpbmcgdGFyZ2V0IGZvciBmdXp6aW5nIHRvIHZhbGlkYXRlIHRoZSBjaGFuZ2UgYW5kIGVuc3VyZSB0aGUgZml4IGlzIHdvcmtpbmcgYXMgaW50ZW5kZWQgYW5kIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcmVncmVzc2lvbnMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExODgwLCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTQzLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjI5LjMzMDY1NTA3MVoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzQ5MzI5MjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJtbS9NYWtlZmlsZVwiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9NYWtlZmlsZT03NT1pZmRlZiBDT05GSUdfTU1VXFxubW0vTWFrZWZpbGU6NzY6XFx0b2JqLSQoQ09ORklHX0FEVklTRV9TWVNDQUxMUylcXHQrPSBtYWR2aXNlLm9cXG5tbS9NYWtlZmlsZS03Ny1lbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDoyOS40MDU1OTY4MloiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxOTgwMjEyNTM4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIGBDT05GSUdfQURWSVNFX1NZU0NBTExTYCoqXG5cblJpZ2h0LCBgQ09ORklHX0FEVklTRV9TWVNDQUxMU2AuLi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0J3MgYWJvdXQuIFRoZSBvYnZpb3VzIGZpcnN0IHN0ZXAgaXMgdG8gZGlnIGludG8gdGhlIGtlcm5lbCdzIEtjb25maWcgZmlsZXMuIEknbGwgaGVhZCBvdmVyIHRvIGBpbml0L0tjb25maWdgIGFuZCBsb29rIGZvciB0aGUgZGVmaW5pdGlvbiBvZiBgQURWSVNFX1NZU0NBTExTYC4gVGhhdCdzIHdoZXJlIHRoZSBvcHRpb24gd2lsbCBiZSBkZWNsYXJlZCwgYWxvbmcgd2l0aCBhIGRlc2NyaXB0aW9uIGFuZCBwb3NzaWJseSBzb21lIGRlcGVuZGVuY2llcyBvciBkZWZhdWx0IHZhbHVlcy4gS25vd2luZyB0aGUgY29udGV4dCB3aWxsIHBvaW50IHRvIHdoYXQgaXQgY29udHJvbHMgd2l0aGluIHRoZSBrZXJuZWwgYnVpbGQuIFRoZW4gSSBjYW4gZmlndXJlIG91dCB3aGF0IG1vZHVsZXMgb3Igb3RoZXIgcGFydHMgb2YgdGhlIGtlcm5lbCBhcmUgZGVwZW5kZW50IG9uIHRoaXMgY29uZmlnIHZhcmlhYmxlLiBJJ2xsIG5lZWQgdG8ga25vdyB3aGF0IGl0IGVuYWJsZXMgb3IgZGlzYWJsZXMuIEhvcGVmdWxseSwgdGhlcmUncyBhIGhlbHBmdWwgY29tbWVudCBpbiB0aGVyZSB0byBnaXZlIG1lIGEgY2x1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM1MDMsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDozMS4zODU4MTM3NjhaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxNjU5NzUzMywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgQURWSVNFX1NZU0NBTExTXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImluaXQvS2NvbmZpZ1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbml0L0tjb25maWc9MTk3NT1jb25maWcgSU9fVVJJTkdfTU9DS19GSUxFXFxuLS1cXG5pbml0L0tjb25maWctMTk4NS1cXG5pbml0L0tjb25maWc6MTk4Njpjb25maWcgQURWSVNFX1NZU0NBTExTXFxuaW5pdC9LY29uZmlnLTE5ODctXFx0Ym9vbCBcXFwiRW5hYmxlIG1hZHZpc2UvZmFkdmlzZSBzeXNjYWxsc1xcXCIgaWYgRVhQRVJUXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjMxLjgwMjQxNzYxMVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoyMTY1MjQwNjM2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBLZXJuZWwncyBHZW5lc2lzOiBBIEtjb25maWcgUmV0cm9zcGVjdGl2ZSoqXG5cbkFscmlnaHQsIGxldCdzIHB1bGwgdXAgdGhlIGBpbml0L0tjb25maWdgIGZpbGUsIGNpcmNhIDE5ODYuIFRoYXQncyB3aGVyZSB3ZSdsbCBsaWtlbHkgZmluZCB0aGUgYmVkcm9jayBvZiB0aGUga2VybmVsJ3MgY29uZmlndXJhdGlvbiBzeXN0ZW0sIGV2ZW4gaWYgaXQncyBpbiBpdHMgZW1icnlvbmljIHN0YWdlLiBJJ20gZWFnZXIgdG8gc2VlIGhvdyB0aGV5IGFwcHJvYWNoZWQgc3VjaCBhIGZ1bmRhbWVudGFsIHByb2JsZW0gd2l0aCB0aGUgbGltaXRlZCB0b29scyBhbmQgYXJjaGl0ZWN0dXJhbCBjb25zdHJhaW50cyBvZiB0aGF0IGVyYS4gSSdtIGxvb2tpbmcgZm9yIGNsdWVzIGFib3V0IHRoZSBvcmlnaW5hbCBkZXNpZ24gcGhpbG9zb3BoaWVzIGFuZCB0aGUgdHJhZGUtb2ZmcyB0aGV5IG1hZGUuIEknbSBlc3BlY2lhbGx5IGludGVyZXN0ZWQgaW4gdW5kZXJzdGFuZGluZyBob3cgZWFybHkgZGV2ZWxvcGVycyBjb25jZXB0dWFsaXplZCBmZWF0dXJlIHNlbGVjdGlvbiBhbmQgZGVwZW5kZW5jaWVzIOKAkyB3ZXJlIHRoZXkgZXZlbiB0aGlua2luZyBhYm91dCBtb2R1bGFyaXR5IGluIHRoZSB3YXkgd2UgZG8gbm93PyBUaGlzIGNvdWxkIGJlIGEgZmFzY2luYXRpbmcgbG9vayBhdCB0aGUgZXZvbHV0aW9uIG9mIGNvbXBsZXhpdHkgbWFuYWdlbWVudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTM4NTIsIk91dHB1dFRva2VucyI6MzMsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDozMy45Njc2NjEzMzdaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjMzNTExMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbml0L0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMTk4NSxcbiAgXCJMaW5lQ291bnRcIjogMTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMTk4NTpcXHRcXG4xOTg2OlxcdGNvbmZpZyBBRFZJU0VfU1lTQ0FMTFNcXG4xOTg3OlxcdFxcdGJvb2wgXFxcIkVuYWJsZSBtYWR2aXNlL2ZhZHZpc2Ugc3lzY2FsbHNcXFwiIGlmIEVYUEVSVFxcbjE5ODg6XFx0XFx0ZGVmYXVsdCB5XFxuMTk4OTpcXHRcXHRoZWxwXFxuMTk5MDpcXHRcXHQgIFRoaXMgb3B0aW9uIGVuYWJsZXMgdGhlIG1hZHZpc2UgYW5kIGZhZHZpc2Ugc3lzY2FsbHMsIHVzZWQgYnlcXG4xOTkxOlxcdFxcdCAgYXBwbGljYXRpb25zIHRvIGFkdmlzZSB0aGUga2VybmVsIGFib3V0IHRoZWlyIGZ1dHVyZSBtZW1vcnkgb3IgZmlsZVxcbjE5OTI6XFx0XFx0ICB1c2FnZSwgaW1wcm92aW5nIHBlcmZvcm1hbmNlLiBJZiBidWlsZGluZyBhbiBlbWJlZGRlZCBzeXN0ZW0gd2hlcmUgbm9cXG4xOTkzOlxcdFxcdCAgYXBwbGljYXRpb25zIHVzZSB0aGVzZSBzeXNjYWxscywgeW91IGNhbiBkaXNhYmxlIHRoaXMgb3B0aW9uIHRvIHNhdmVcXG4xOTk0OlxcdFxcdCAgc3BhY2UuXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUwOjMzLjk3MDAwMDQzNloiLCJTZXEiOjI3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjo1NjM2OTUzMTY5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgVGFyZ2V0IENvbmZpcm1hdGlvbioqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoZSBpbml0aWFsIHN1c3BpY2lvbnMuIEl0IGxvb2tzIGxpa2UgYEFEVklTRV9TWVNDQUxMU2AgYW5kIGBUUkFOU1BBUkVOVF9IVUdFUEFHRWAgYXJlIGRlZmluaXRlbHkgcmVxdWlyZWQuIExldCdzIG1ha2Ugc3VyZSB0aGF0J3MgKmFsbCogd2UgbmVlZC4gRGlnZ2luZyBpbnRvIHRoZSBjb2RlIHdpdGhpbiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgc3BlY2lmaWNhbGx5IHRoZSBgI2lmZGVmIENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRWAgYmxvY2ssIGNvbmZpcm1zIGl0LiBXZSdyZSBnb29kIG9uIHRoZSBjb25maWd1cmF0aW9uIGZyb250LlxuXG5Ob3csIGxldCdzIGp1c3QgbWFrZSBzdXJlIGV2ZXJ5dGhpbmcgbGluZXMgdXAgZnJvbSBhIGZ1enppbmcgcGVyc3BlY3RpdmUuXG5cbjEuICAqKldvcnRoRnV6emluZzogVHJ1ZS4qKiBZZXAsIHRoYXQncyB3aGF0IHdlIGV4cGVjdC4gVGhpcyBwYXRjaCBpbnZvbHZlcyBjcml0aWNhbCBsb2NraW5nIGNoYW5nZXMuXG4yLiAgKipSZWFzb25pbmc6KiogVGhlIHBhdGNoIGlzIG1vZGlmeWluZyBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlKClgIGluIGBtbS9tYWR2aXNlLmNgLCBzcGVjaWZpY2FsbHkgdGhlIGxvY2tpbmcgc3RyYXRlZ3kgd2hlbiBUSFBzIGFyZSBzcGxpdCBmb3IgYE1BRFZfQ09MRGAgb3IgYE1BRFZfUEFHRU9VVGAuIFJlcGxhY2luZyBhIGBmb2xpb19sb2NrKClgIHdpdGggYSBgZm9saW9fdHJ5bG9jaygpYCBhZnRlciB1bmxvY2tpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayBpcyBhIGJpZyBkZWFsLiBDcml0aWNhbGx5LCB3ZSBrbm93IHVzZXJzcGFjZSBjYW4gZGlyZWN0bHkgdHJpZ2dlciB0aGlzIHZpYSB0aGUgYG1hZHZpc2VgIHN5c2NhbGxzIG9uIHRyYW5zcGFyZW50IGh1Z2UgcGFnZXMuIFNvLCB0aGlzIGlzIGEgcHJpbWUgdGFyZ2V0IGZvciBwb3RlbnRpYWwgcmVncmVzc2lvbnMsIHJhY2UgY29uZGl0aW9ucywgb3IgbG9ja2luZyBpc3N1ZXMuXG4zLiAgKipGb2N1c1N5bWJvbHM6KiogVGhlIGZ1bmN0aW9uIG5hbWVzIHdlIHdhbnQgdG8gdGFyZ2V0IGxpbmUgdXAgcGVyZmVjdGx5OiBgbWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlYCwgYG1hZHZpc2VfY29sZGAsIGFuZCBgbWFkdmlzZV9wYWdlb3V0YC4gVGhhdCdzIHByZWNpc2VseSB3aGVyZSB0aGUgY3JpdGljYWwgY2hhbmdlcyBhcmUuXG40LiAgKipFbmFibGVDb25maWdzOioqIEFnYWluLCBgVFJBTlNQQVJFTlRfSFVHRVBBR0VgIGFuZCBgQURWSVNFX1NZU0NBTExTYCBhcmUgY29ycmVjdC5cblxuRnJvbSBhIGNvZGUgcmV2aWV3IHBlcnNwZWN0aXZlLCBpdCBjaGVja3Mgb3V0LiBFdmVyeXRoaW5nJ3MgaW4gc3luYy4gSSdtIHNhdGlzZmllZC4gTGV0J3MgZ28gYWhlYWQgYW5kIHNpZ25hbCB0aGF0IHdlJ3JlIGdvb2QgdG8gZ28uIFRpbWUgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNDI0NSwiT3V0cHV0VG9rZW5zIjoyMDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMjksIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDozOS42MDY5NTcwNDZaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTAyMDUwMjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgICBcIm1hZHZpc2VfY29sZFwiLFxuICAgIFwibWFkdmlzZV9wYWdlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2VxdWVuY2UgaW4gbW0vbWFkdmlzZS5jIChtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UpIHdoZW4gc3BsaXR0aW5nIGh1Z2UgZm9saW9zIGZvciBwYXJ0aWFsIHJhbmdlcyBkdXJpbmcgTUFEVl9DT0xEIG9yIE1BRFZfUEFHRU9VVCBvcGVyYXRpb25zLiBJdCByZXBsYWNlcyBhIGJsb2NraW5nIGZvbGlvX2xvY2sgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayB3aXRoIGEgZm9saW9fdHJ5bG9jayB1bmRlciB0aGUgcGFnZSB0YWJsZSBsb2NrLiBUaGlzIGNvZGUgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIHZpYSB0aGUgbWFkdmlzZSBhbmQgcHJvY2Vzc19tYWR2aXNlIHN5c3RlbSBjYWxscyBvbiBUSFAgbWFwcGluZ3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBhbmQgYmVoYXZpb3IgdW5kZXIgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIlRSQU5TUEFSRU5UX0hVR0VQQUdFXCIsXG4gICAgXCJBRFZJU0VfU1lTQ0FMTFNcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VcIixcbiAgICBcIm1hZHZpc2VfY29sZFwiLFxuICAgIFwibWFkdmlzZV9wYWdlb3V0XCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGxvY2tpbmcgc2VxdWVuY2UgaW4gbW0vbWFkdmlzZS5jIChtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UpIHdoZW4gc3BsaXR0aW5nIGh1Z2UgZm9saW9zIGZvciBwYXJ0aWFsIHJhbmdlcyBkdXJpbmcgTUFEVl9DT0xEIG9yIE1BRFZfUEFHRU9VVCBvcGVyYXRpb25zLiBJdCByZXBsYWNlcyBhIGJsb2NraW5nIGZvbGlvX2xvY2sgYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayB3aXRoIGEgZm9saW9fdHJ5bG9jayB1bmRlciB0aGUgcGFnZSB0YWJsZSBsb2NrLiBUaGlzIGNvZGUgcGF0aCBpcyBkaXJlY3RseSByZWFjaGFibGUgZnJvbSB1bnByaXZpbGVnZWQgdXNlcnNwYWNlIHZpYSB0aGUgbWFkdmlzZSBhbmQgcHJvY2Vzc19tYWR2aXNlIHN5c3RlbSBjYWxscyBvbiBUSFAgbWFwcGluZ3MsIHdhcnJhbnRpbmcgZnV6emluZyB0byBlbnN1cmUgcHJvcGVyIHN5bmNocm9uaXphdGlvbiBhbmQgYmVoYXZpb3IgdW5kZXIgcmFjZSBjb25kaXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDozOS43NTcxNzU0OTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJJZiIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQyOTkzMDA4MzQ4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MzkuNzU5MDkzODgzWiIsIlNlcSI6MzAsIk5lc3RpbmciOjIsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImNvcmUiLCJEdXJhdGlvbiI6NDI5OTEwODE3ODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGZvbGlvIGxvY2tpbmcgc3luY2hyb25pemF0aW9uIGluIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UoKWAgd2l0aGluIGBtbS9tYWR2aXNlLmNgLiBTcGVjaWZpY2FsbHksIGl0IHJlcGxhY2VzIGEgYmxvY2tpbmcgYGZvbGlvX2xvY2soKWAgdGFrZW4gYWZ0ZXIgZHJvcHBpbmcgdGhlIHBhZ2UgdGFibGUgbG9jayAoYHB0bGApIHdpdGggYSBub24tYmxvY2tpbmcgYGZvbGlvX3RyeWxvY2soKWAgdW5kZXIgYHB0bGAsIGJyYW5jaGluZyB0byBgaHVnZV91bmxvY2tgIGlmIGxvY2tpbmcgZmFpbHMuXFxuXFxuVGhpcyBjaGFuZ2UgaXMgcHVyZWx5IGZvY3VzZWQgb24gbG9ja2luZywgc3luY2hyb25pemF0aW9uLCBhbmQgZm9saW8gc3BsaXR0aW5nIGNvbnRyb2wgZmxvdyBkdXJpbmcgYE1BRFZfQ09MRGAgLyBgTUFEVl9QQUdFT1VUYCBvcGVyYXRpb25zLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2Ugb3IgbW9kaWZ5IGFueSBzdGFjay9oZWFwIGFsbG9jYXRpb25zLCBkb2VzIG5vdCBleHBvc2Ugb3IgcmVhZCB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWx0ZXIgYnVmZmVyIGJvdW5kcyBvciBsZW5ndGhzLCBhbmQgZG9lcyBub3QgY29weSBrZXJuZWwgZGF0YSB0byB1c2VyIHNwYWNlLiBBbnkgY29uY3VycmVuY3kgb3IgcGFnZSByZWZjb3VudCBpc3N1ZXMgd291bGQgZmFsbCB1bmRlciBMT0NLREVQIG9yIEtBU0FOIHJhdGhlciB0aGFuIEtNU0FOLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IlRhcmdldCBhcmNoaXRlY3R1cmU6IGFtZDY0XG5cbkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDg3YmUwNjZkODg5ZTI0MzEwODBhYjcxMjdjNTE3ZWJmMDdjZWJkZjdcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgU2F0IFNlcCAxMiAxMTo0OTozMiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL21tL21hZHZpc2UuYyBiL21tL21hZHZpc2UuY1xuaW5kZXggZjc1YTlkMTM5OTgwMy4uYWUzZDcxMjdkODdjNCAxMDA2NDRcbi0tLSBhL21tL21hZHZpc2UuY1xuKysrIGIvbW0vbWFkdmlzZS5jXG5AQCAtNDE5LDkgKzQxOSwxMCBAQCBzdGF0aWMgaW50IG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZShwbWRfdCAqcG1kLFxuIFx0XHRpZiAobmV4dCAtIGFkZHIgIT0gSFBBR0VfUE1EX1NJWkUpIHtcbiBcdFx0XHRpbnQgZXJyO1xuIFxuK1x0XHRcdGlmICghZm9saW9fdHJ5bG9jayhmb2xpbykpXG4rXHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuIFx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG4gXHRcdFx0c3Bpbl91bmxvY2socHRsKTtcbi1cdFx0XHRmb2xpb19sb2NrKGZvbGlvKTtcbiBcdFx0XHRlcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG4gXHRcdFx0Zm9saW9fdW5sb2NrKGZvbGlvKTtcbiBcdFx0XHRmb2xpb19wdXQoZm9saW8pO1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6MzkuNzU5MDk2MDU0WiIsIlNlcSI6MzEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjE0MjA1NTMzODkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktNU0FOIEV2YWx1YXRpb24gZm9yIGBtbS9tYWR2aXNlLmNgIFBhdGNoKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgdGFzayBpcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIHBhdGNoIHNlcmllcyB3YXJyYW50cyBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gb3IgaWYgS0FTQU4gaXMgc3VmZmljaWVudC4gSSBuZWVkIHRvIGFwcGx5IHRob3NlIGZvdXIgS01TQU4gdHJpZ2dlcnMuIExldCdzIHNlZS4uLlxuXG5GaXJzdCwgbGV0J3MgcmVjYXAgdGhvc2UgS01TQU4gdHJpZ2dlcnM6XG4xLiAgS2VybmVsIHN0cnVjdHVyZXMgcGFzc2VkIHRvIHVzZXJzcGFjZSBwb3RlbnRpYWxseSB3aXRoIHVuaW5pdGlhbGl6ZWQgYml0cy5cbjIuICBDb25kaXRpb25hbCBsb2dpYyBiYXNlZCBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHN0dWZmLlxuMy4gIEFsbG9jYXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMgY291bGQgY2F1c2UgcHJvYmxlbXMgbGF0ZXIuXG40LiAgQm91bmRzIGNoZWNrcywgbGVuZ3RocywgZXRjLiwgYWxsb3dpbmcgYWNjZXNzIHRvIHVuaW5pdGlhbGl6ZWQgYnl0ZXMuXG5cbkFuZCB3aGVuIHRvIHNraXAgS01TQU46XG4qICAgU3RhbmRhcmQgYnVncyAoT09CLCBVQUYsIE5VTEwgZGVyZWYsIGV0Yy4pIGFyZSB0aGUgcmlzay5cbiogICBTdHJ1Y3R1cmVzIGFyZSAqZnVsbHkqIGluaXRpYWxpemVkLlxuKiAgIE5vIHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgbGVha3MuXG5cbk5vdywgbGV0J3MgbG9vayBhdCB0aGUgZGlmZi4gSXQncyBpbiBgbW0vbWFkdmlzZS5jYCwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGF0IGBmb2xpb190cnlsb2NrYCBhbmQgYHNwbGl0X2ZvbGlvYCBjb2RlLiBUaGUga2V5IGNoYW5nZSBpcyB0aGUgYWRkaXRpb24gb2YgdGhlIGBmb2xpb190cnlsb2NrYCBjYWxsIGJlZm9yZSBgc3BsaXRfZm9saW9gLiBUaGUgbG9jayBvcmRlciBpcyBjaGFuZ2VkIHdoaWNoIGlzIG1vc3QgbGlrZWx5IHRvIGF2b2lkIGxvY2sgaW52ZXJzaW9uLlxuXG5TaW5jZSB0aGlzIGNoYW5nZSBwcmltYXJpbHkgY29uY2VybnMgbG9ja2luZyBhbmQgbWVtb3J5IG1hbmFnZW1lbnQgd2l0aGluIHRoZSBrZXJuZWwncyBpbnRlcm5hbCB3b3JraW5ncywgaXQgZmVlbHMgbGlrZSB0aGlzIGlzIG1vc3RseSBhYm91dCBjb3JyZWN0aW5nIHBvdGVudGlhbCBjb25jdXJyZW5jeSBpc3N1ZXMuIEl0J3MgbGlrZWx5IHRyeWluZyB0byBpbXByb3ZlIHRoZSByZWxpYWJpbGl0eSBvZiBwYWdlIHNwbGl0dGluZy4gVGhlIG1haW4gY29uY2VybiBoZXJlIHNlZW1zIHRvIGJlIGFib3V0IGRhdGEgY29ycnVwdGlvbiBvciByYWNlIGNvbmRpdGlvbnMgcmVsYXRlZCB0byB0aGUgZm9saW8ncyBzdGF0ZSwgcmF0aGVyIHRoYW4gaW50cm9kdWNpbmcgbmV3IGF2ZW51ZXMgZm9yIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHRvIGJlIHJlYWQuIEl0J3MgdG91Y2hpbmcgb24gbG9ja2luZyBwcmltaXRpdmVzIHdoaWNoIGlzIG1vcmUgS0FTQU4gdGVycml0b3J5LiBJIGRvbid0IHNlZSBhbnkgb2J2aW91cyBpbnRyb2R1Y3Rpb24gb3IgbW9kaWZpY2F0aW9uIG9mIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlLCBvciBhbnkgY29uZGl0aW9uYWwgbG9naWMgZGlyZWN0bHkgZGVwZW5kZW50IG9uIHVuaW5pdGlhbGl6ZWQgZGF0YS4gRnVydGhlcm1vcmUsIEkgZG9uJ3Qgc2VlIGFueSByaXNreSBhbGxvY2F0aW9ucyBvciBib3VuZHMgY2hlY2tzLiBUaGlzIHBhdGNoIHNlZW1zIGZvY3VzZWQgb24gdGhlIGludGVncml0eSBvZiBpbi1rZXJuZWwgZGF0YS5cblxuVGhlcmVmb3JlLCBteSBpbml0aWFsIGFzc2Vzc21lbnQsIHBlbmRpbmcgZnVydGhlciBzY3J1dGlueSBvZiB0aGUgc3Vycm91bmRpbmcgY29kZSwgaXMgdGhhdCBzdGFuZGFyZCBLQVNBTiBzaG91bGQgYmUgc3VmZmljaWVudCBoZXJlLiBJIG5lZWQgdG8gbWFrZSBzdXJlLCBvZiBjb3Vyc2UuIFRpbWUgdG8gbG9vayBpbnRvIGBtbS9tYWR2aXNlLmNgIGFyb3VuZCBsaW5lIDQxOSwgdXNpbmcgZWl0aGVyIGEgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIGNvbW1hbmQsIHRvIGNvbmZpcm0gbXkgc3VzcGljaW9uLiBMZXQncyBkaWcgZGVlcGVyIGFuZCB2ZXJpZnkgbXkgY3VycmVudCBjb25jbHVzaW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDk1LCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTA4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6NTMuOTY0NjMzNDg1WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzEzMDIyNjYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWFkdmlzZV9jb2xkX29yX3BhZ2VvdXRfcHRlX3JhbmdlXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL21hZHZpc2UuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9tYWR2aXNlLmM9MzU0PXN0YXRpYyBpbmxpbmUgaW50IG1hZHZpc2VfZm9saW9fcHRlX2JhdGNoKHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tYWR2aXNlLmMtMzYzLVxcbm1tL21hZHZpc2UuYzozNjQ6c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG5tbS9tYWR2aXNlLmMtMzY1LVxcdFxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQsXFxuLS1cXG5tbS9tYWR2aXNlLmM9NTgzPXN0YXRpYyBjb25zdCBzdHJ1Y3QgbW1fd2Fsa19vcHMgY29sZF93YWxrX29wcyA9IHtcXG5tbS9tYWR2aXNlLmM6NTg0OlxcdC5wbWRfZW50cnkgPSBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UsXFxubW0vbWFkdmlzZS5jLTU4NS1cXHQud2Fsa19sb2NrID0gUEdXQUxLX1JETE9DSyxcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6NTQuMTk1OTQ0MDgxWiIsIlNlcSI6MzMsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy44LWZsYXNoIiwiRHVyYXRpb24iOjIxMzc3ODIzNzUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCBmcmFtZWQgYXMgYW4gZXhwZXJ0J3MgaW50ZXJuYWwgbW9ub2xvZ3VlOlxuXG4qKkRpdmluZyBpbnRvIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgKipcblxuQWxyaWdodCwgbGV0J3MgZ2V0IGRvd24gdG8gYnJhc3MgdGFja3MuIEkgbmVlZCB0byB0YWtlIGEgbG9vayBhdCB0aGUgYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZWAgZnVuY3Rpb24sIHN0YXJ0aW5nIGFyb3VuZCBsaW5lIDQxOS4gSSdtIGFzc3VtaW5nIHdlJ3JlIGRlYWxpbmcgd2l0aCBtZW1vcnkgbWFuYWdlbWVudCBoZXJlLCBwcm9iYWJseSBzcGVjaWZpY2FsbHkgd2l0aCB0aGUgYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgIGZsYWdzIGFuZCBob3cgdGhleSBpbnRlcmFjdCBhdCB0aGUgcGFnZSB0YWJsZSBlbnRyeSAoUFRFKSBsZXZlbC4gSSdtIGtlZW4gdG8gc2VlIGhvdyB0aGUga2VybmVsIGlzIGhhbmRsaW5nIHRob3NlIGhpbnRzLiBJIGltYWdpbmUgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIGFjdHVhbCBkaXJ0eSB3b3JrIG9mIG1hcmtpbmcgcGFnZXMgYXMgY29sZCBvciB0cmlnZ2VyaW5nIHBhZ2Utb3V0IG9wZXJhdGlvbnMuIEdpdmVuIHRoZSBuYW1lLCBJJ2QgZXhwZWN0IGl0IGRlYWxzIHdpdGggYSByYW5nZSBvZiBQVEVzLCBtZWFuaW5nIGl0IG9wZXJhdGVzIG9uIHBvdGVudGlhbGx5IGxhcmdlIGNodW5rcyBvZiBtZW1vcnkuIEknbGwgbmVlZCB0byBzZWUgaG93IGVmZmljaWVudGx5IHRoaXMgaXMgZG9uZSBhbmQgaWYgdGhlcmUgYW55IG9idmlvdXMgYm90dGxlbmVja3MsIG9yIHBlcmhhcHMgY2xldmVyIHRyaWNrcywgaW4gdGhlIGltcGxlbWVudGF0aW9uLiBUaW1lIHRvIGRpZyBpbiBhbmQgc2VlIGhvdyB0aGUga2VybmVsIGlzIG1hbmFnaW5nIHRoYXQgbWVtb3J5IVxuXG5cbiIsIklucHV0VG9rZW5zIjozMzYxLCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTA6NTYuMzMzNzMwODE2WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI1NTAyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDAwLFxuICBcIkxpbmVDb3VudFwiOiA1MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDAwOlxcdFxcbiA0MDE6XFx0XFx0XFx0aWYgKHVubGlrZWx5KCFwbWRfcHJlc2VudChvcmlnX3BtZCkpKSB7XFxuIDQwMjpcXHRcXHRcXHRcXHRWTV9XQVJOX09OX09OQ0UoIXBtZF9pc19taWdyYXRpb25fZW50cnkob3JpZ19wbWQpIFxcdTAwMjZcXHUwMDI2XFxuIDQwMzpcXHRcXHRcXHRcXHRcXHRcXHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XFxuIDQwNDpcXHRcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbiA0MDU6XFx0XFx0XFx0fVxcbiA0MDY6XFx0XFxuIDQwNzpcXHRcXHRcXHRmb2xpbyA9IHBtZF9mb2xpbyhvcmlnX3BtZCk7XFxuIDQwODpcXHRcXG4gNDA5OlxcdFxcdFxcdGlmIChmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXFxuIDQxMDpcXHRcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbiA0MTE6XFx0XFxuIDQxMjpcXHRcXHRcXHQvKiBEbyBub3QgaW50ZXJmZXJlIHdpdGggb3RoZXIgbWFwcGluZ3Mgb2YgdGhpcyBmb2xpbyAqL1xcbiA0MTM6XFx0XFx0XFx0aWYgKGZvbGlvX21heWJlX21hcHBlZF9zaGFyZWQoZm9saW8pKVxcbiA0MTQ6XFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG4gNDE1OlxcdFxcbiA0MTY6XFx0XFx0XFx0aWYgKHBhZ2VvdXRfYW5vbl9vbmx5X2ZpbHRlciBcXHUwMDI2XFx1MDAyNiAhZm9saW9fdGVzdF9hbm9uKGZvbGlvKSlcXG4gNDE3OlxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDQxODpcXHRcXG4gNDE5OlxcdFxcdFxcdGlmIChuZXh0IC0gYWRkciAhPSBIUEFHRV9QTURfU0laRSkge1xcbiA0MjA6XFx0XFx0XFx0XFx0aW50IGVycjtcXG4gNDIxOlxcdFxcbiA0MjI6XFx0XFx0XFx0XFx0aWYgKCFmb2xpb190cnlsb2NrKGZvbGlvKSlcXG4gNDIzOlxcdFxcdFxcdFxcdFxcdGdvdG8gaHVnZV91bmxvY2s7XFxuIDQyNDpcXHRcXHRcXHRcXHRmb2xpb19nZXQoZm9saW8pO1xcbiA0MjU6XFx0XFx0XFx0XFx0c3Bpbl91bmxvY2socHRsKTtcXG4gNDI2OlxcdFxcdFxcdFxcdGVyciA9IHNwbGl0X2ZvbGlvKGZvbGlvKTtcXG4gNDI3OlxcdFxcdFxcdFxcdGZvbGlvX3VubG9jayhmb2xpbyk7XFxuIDQyODpcXHRcXHRcXHRcXHRmb2xpb19wdXQoZm9saW8pO1xcbiA0Mjk6XFx0XFx0XFx0XFx0aWYgKCFlcnIpXFxuIDQzMDpcXHRcXHRcXHRcXHRcXHRnb3RvIHJlZ3VsYXJfZm9saW87XFxuIDQzMTpcXHRcXHRcXHRcXHRyZXR1cm4gMDtcXG4gNDMyOlxcdFxcdFxcdH1cXG4gNDMzOlxcdFxcbiA0MzQ6XFx0XFx0XFx0aWYgKCFwYWdlb3V0IFxcdTAwMjZcXHUwMDI2IHBtZF95b3VuZyhvcmlnX3BtZCkpIHtcXG4gNDM1OlxcdFxcdFxcdFxcdHBtZHBfaW52YWxpZGF0ZSh2bWEsIGFkZHIsIHBtZCk7XFxuIDQzNjpcXHRcXHRcXHRcXHRvcmlnX3BtZCA9IHBtZF9ta29sZChvcmlnX3BtZCk7XFxuIDQzNzpcXHRcXG4gNDM4OlxcdFxcdFxcdFxcdHNldF9wbWRfYXQobW0sIGFkZHIsIHBtZCwgb3JpZ19wbWQpO1xcbiA0Mzk6XFx0XFx0XFx0XFx0dGxiX3JlbW92ZV9wbWRfdGxiX2VudHJ5KHRsYiwgcG1kLCBhZGRyKTtcXG4gNDQwOlxcdFxcdFxcdH1cXG4gNDQxOlxcdFxcbiA0NDI6XFx0XFx0XFx0Zm9saW9fY2xlYXJfcmVmZXJlbmNlZChmb2xpbyk7XFxuIDQ0MzpcXHRcXHRcXHRmb2xpb190ZXN0X2NsZWFyX3lvdW5nKGZvbGlvKTtcXG4gNDQ0OlxcdFxcdFxcdGlmIChmb2xpb190ZXN0X2FjdGl2ZShmb2xpbykpXFxuIDQ0NTpcXHRcXHRcXHRcXHRmb2xpb19zZXRfd29ya2luZ3NldChmb2xpbyk7XFxuIDQ0NjpcXHRcXHRcXHRpZiAocGFnZW91dCkge1xcbiA0NDc6XFx0XFx0XFx0XFx0aWYgKGZvbGlvX2lzb2xhdGVfbHJ1KGZvbGlvKSkge1xcbiA0NDg6XFx0XFx0XFx0XFx0XFx0aWYgKGZvbGlvX3Rlc3RfdW5ldmljdGFibGUoZm9saW8pKVxcbiA0NDk6XFx0XFx0XFx0XFx0XFx0XFx0Zm9saW9fcHV0YmFja19scnUoZm9saW8pO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MDo1Ni4zMzM5OTAwNTZaIiwiU2VxIjozNSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6NDUwNjU1MzkwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEZvbGlvIExvY2tpbmcgQ2hhbmdlKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBUaGUgY29yZSBvZiB0aGUgY2hhbmdlIHNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCDigJMgd2Ugd2VudCBmcm9tIHVzaW5nIGBmb2xpb19sb2NrYCBhbmQgYGZvbGlvX3VubG9ja2AgdG8gdXNpbmcgYGZvbGlvX3RyeWxvY2tgIGluIHRoaXMgc2VjdGlvbiBvZiBjb2RlOlxuXG5gYGBjXG5cdFx0XHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxuXHRcdFx0XHRnb3RvIGh1Z2VfdW5sb2NrO1xuXHRcdFx0Zm9saW9fZ2V0KGZvbGlvKTtcblx0XHRcdHNwaW5fdW5sb2NrKHB0bCk7XG5cdFx0XHRlcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG5cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmBgYFxuXG5UaGUgY3J1Y2lhbCBxdWVzdGlvbiBpcyAqd2h5Kj8gIEJlZm9yZSB0aGUgY2hhbmdlLCB3ZSB3ZXJlIGRvaW5nIHRoaXM6XG5cbmBgYGNcblx0XHRcdGZvbGlvX2dldChmb2xpbyk7XG5cdFx0XHRzcGluX3VubG9jayhwdGwpO1xuXHRcdFx0Zm9saW9fbG9jayhmb2xpbyk7XG5cdFx0XHRlcnIgPSBzcGxpdF9mb2xpbyhmb2xpbyk7XG5cdFx0XHRmb2xpb191bmxvY2soZm9saW8pO1xuXHRcdFx0Zm9saW9fcHV0KGZvbGlvKTtcbmBgYFxuXG5NeSBpbml0aWFsIHRob3VnaHQgaXMgdGhhdCB0aGUgYmxvY2tpbmcgbmF0dXJlIG9mIHRoZSBvcmlnaW5hbCBgZm9saW9fbG9ja2AgcHJlc2VudGVkIGEgcG90ZW50aWFsIHByb2JsZW0sIHByb2JhYmx5IGluIGBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2VgLiBTcGVjaWZpY2FsbHksIGJsb2NraW5nIHdpdGggYGZvbGlvX2xvY2tgIGNvdWxkIGxlYWQgdG8gZGVhZGxvY2tzIG9yIG90aGVyIGxvY2sgb3JkZXJpbmcgcHJvYmxlbXMsIGxpa2UgYW4gQUJCQSBkZWFkbG9jayBvciBzbGVlcGluZyBpbiBhbiBhdG9taWMgY29udGV4dCBpZiBgcHRsYCB3YXNuJ3QgdW5sb2NrZWQgb3Igc29tZSBvdGhlciBsb2NrIG9yZGVyaW5nIGlzc3VlLiBUaGUgY29kZSAqZGlkKiB1bmxvY2sgYHB0bGAgYmVmb3JlLCBidXQgcGVyaGFwcyB0aGUgYmxvY2tpbmcgd2FpdCBpdHNlbGYgd2FzIHVuZGVzaXJhYmxlLiBgZm9saW9fdHJ5bG9ja2AgaXMgbm9uLWJsb2NraW5nLCB3aGljaCBsaWtlbHkgbWl0aWdhdGVzIHRoZSBpc3N1ZS4gSXQgbG9va3MgbGlrZSBpdCdzIGEgdHJhZGUtb2ZmOiBhdm9pZCB0aGUgd2FpdCwgcG9zc2libHkgYXQgdGhlIGNvc3Qgb2YgZmFpbGluZyB0aGUgb3BlcmF0aW9uIGFuZCBuZWVkaW5nIHRvIGhhbmRsZSB0aGUgZmFpbHVyZS5cblxuVGhlIGBpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKSBnb3RvIGh1Z2VfdW5sb2NrO2AgaXMgdGhlIGtleS4gVGhlIGNvZGUgbm93ICp0cmllcyogdG8gYWNxdWlyZSB0aGUgZm9saW8gbG9jaywgYW5kIGlmIGl0IGZhaWxzLCBpdCBicmFuY2hlcyB0byBgaHVnZV91bmxvY2tgLiBBdCB0aGlzIHBvaW50LCBgcHRsYCBpcyBzdGlsbCBoZWxkLCBhcyB0aGUgYHNwaW5fbG9ja2AgY2FsbCBoYXBwZW5zIGJlZm9yZSB0aGUgdHJ5bG9jay4gU28gYGh1Z2VfdW5sb2NrYCBpcyBnb2luZyB0byBoYXZlIHRvIGNhcmVmdWxseSBtYW5hZ2UgdGhlIGV4aXN0aW5nIGxvY2sgc3RhdGUuXG5cbkkgbmVlZCB0byBzZWUgd2hhdCBgaHVnZV91bmxvY2tgIGRvZXMgdG8gdW5kZXJzdGFuZCB0aGUgZnVsbCBpbXBsaWNhdGlvbnMuIExldCBtZSBxdWlja2x5IGp1bXAgb3ZlciB0byBsaW5lcyA0NjAtNTAwLCBJIGJlbGlldmUgdGhhdCBzaG91bGQgaG9sZCB0aGUgYW5zd2VyLiBJIGJldCB0aGUgY29kZSB0aGVyZSBpcyBnb2luZyB0byBiYWNrIG91dCBvZiB0aGUgb3BlcmF0aW9ucyBpdCBoYXMgcGVyZm9ybWVkIGFuZCByZWxlYXNlIHJlc291cmNlcyBpbiBhIHNhZmUgbWFubmVyIHRvIGF2b2lkIGlzc3VlcyBhbmQgcmV0dXJuIHRoZSBjb3JyZWN0IGVycm9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NDE5LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzE4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTE6MDAuODQwNTQ3MjY0WiIsIlNlcSI6MzYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxNjYxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDYwLFxuICBcIkxpbmVDb3VudFwiOiA0MFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDYwOlxcdFxcdH1cXG4gNDYxOlxcdFxcbiA0NjI6XFx0cmVndWxhcl9mb2xpbzpcXG4gNDYzOlxcdCNlbmRpZlxcbiA0NjQ6XFx0XFx0dGxiX2NoYW5nZV9wYWdlX3NpemUodGxiLCBQQUdFX1NJWkUpO1xcbiA0NjU6XFx0cmVzdGFydDpcXG4gNDY2OlxcdFxcdHN0YXJ0X3B0ZSA9IHB0ZSA9IHB0ZV9vZmZzZXRfbWFwX2xvY2sodm1hLVxcdTAwM2V2bV9tbSwgcG1kLCBhZGRyLCBcXHUwMDI2cHRsKTtcXG4gNDY3OlxcdFxcdGlmICghc3RhcnRfcHRlKVxcbiA0Njg6XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDQ2OTpcXHRcXHRmbHVzaF90bGJfYmF0Y2hlZF9wZW5kaW5nKG1tKTtcXG4gNDcwOlxcdFxcdGxhenlfbW11X21vZGVfZW5hYmxlKCk7XFxuIDQ3MTpcXHRcXHRmb3IgKDsgYWRkciBcXHUwMDNjIGVuZDsgcHRlICs9IG5yLCBhZGRyICs9IG5yICogUEFHRV9TSVpFKSB7XFxuIDQ3MjpcXHRcXHRcXHRuciA9IDE7XFxuIDQ3MzpcXHRcXHRcXHRwdGVudCA9IHB0ZXBfZ2V0KHB0ZSk7XFxuIDQ3NDpcXHRcXG4gNDc1OlxcdFxcdFxcdGlmICgrK2JhdGNoX2NvdW50ID09IFNXQVBfQ0xVU1RFUl9NQVgpIHtcXG4gNDc2OlxcdFxcdFxcdFxcdGJhdGNoX2NvdW50ID0gMDtcXG4gNDc3OlxcdFxcdFxcdFxcdGlmIChuZWVkX3Jlc2NoZWQoKSkge1xcbiA0Nzg6XFx0XFx0XFx0XFx0XFx0bGF6eV9tbXVfbW9kZV9kaXNhYmxlKCk7XFxuIDQ3OTpcXHRcXHRcXHRcXHRcXHRwdGVfdW5tYXBfdW5sb2NrKHN0YXJ0X3B0ZSwgcHRsKTtcXG4gNDgwOlxcdFxcdFxcdFxcdFxcdGNvbmRfcmVzY2hlZCgpO1xcbiA0ODE6XFx0XFx0XFx0XFx0XFx0Z290byByZXN0YXJ0O1xcbiA0ODI6XFx0XFx0XFx0XFx0fVxcbiA0ODM6XFx0XFx0XFx0fVxcbiA0ODQ6XFx0XFxuIDQ4NTpcXHRcXHRcXHRpZiAocHRlX25vbmUocHRlbnQpKVxcbiA0ODY6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ4NzpcXHRcXG4gNDg4OlxcdFxcdFxcdGlmICghcHRlX3ByZXNlbnQocHRlbnQpKVxcbiA0ODk6XFx0XFx0XFx0XFx0Y29udGludWU7XFxuIDQ5MDpcXHRcXG4gNDkxOlxcdFxcdFxcdGZvbGlvID0gdm1fbm9ybWFsX2ZvbGlvKHZtYSwgYWRkciwgcHRlbnQpO1xcbiA0OTI6XFx0XFx0XFx0aWYgKCFmb2xpbyB8fCBmb2xpb19pc196b25lX2RldmljZShmb2xpbykpXFxuIDQ5MzpcXHRcXHRcXHRcXHRjb250aW51ZTtcXG4gNDk0OlxcdFxcbiA0OTU6XFx0XFx0XFx0LypcXG4gNDk2OlxcdFxcdFxcdCAqIElmIHdlIGVuY291bnRlciBhIGxhcmdlIGZvbGlvLCBvbmx5IHNwbGl0IGl0IGlmIGl0IGlzIG5vdFxcbiA0OTc6XFx0XFx0XFx0ICogZnVsbHkgbWFwcGVkIHdpdGhpbiB0aGUgcmFuZ2Ugd2UgYXJlIG9wZXJhdGluZyBvbi4gT3RoZXJ3aXNlXFxuIDQ5ODpcXHRcXHRcXHQgKiBsZWF2ZSBpdCBhcyBpcyBzbyB0aGF0IGl0IGNhbiBiZSBzd2FwcGVkIG91dCB3aG9sZS4gSWYgd2VcXG4gNDk5OlxcdFxcdFxcdCAqIGZhaWwgdG8gc3BsaXQgYSBmb2xpbywgbGVhdmUgaXQgaW4gcGxhY2UgYW5kIGFkdmFuY2UgdG8gdGhlXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUxOjAwLjg0MDg2ODAyNFoiLCJTZXEiOjM3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxODI0MjM1NTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgY29uc2lkZXJpbmcgdGhpcyBteXNlbGY6XG5cbioqVHJhY2luZyBgaHVnZV91bmxvY2tgIERlZmluaXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGVyZSB0aGUgYGh1Z2VfdW5sb2NrYCBmdW5jdGlvbiBpcyBhY3R1YWxseSBkZWZpbmVkLiBJIGtub3cgaXQncyByZWxhdGVkIHRvIG1lbW9yeSBtYW5hZ2VtZW50IGFuZCBtYWR2aXNlLCBzbyBteSBmaXJzdCBpbnN0aW5jdCBpcyB0byBsb29rIHdpdGhpbiB0aGUga2VybmVsJ3MgbWVtb3J5IG1hbmFnZW1lbnQgY29kZS4gU3BlY2lmaWNhbGx5LCB0aGUgaGludCBpcyBcIm1tL21hZHZpc2UuY1wiLiBUaGF0J3MgYSBzdHJvbmcgaW5kaWNhdGlvbiDigJMgbWFkdmlzZSBkZWFscyB3aXRoIGhpbnRpbmcgYWJvdXQgbWVtb3J5IHVzYWdlLCBzbyBpdCdzIGEgdmVyeSBsb2dpY2FsIHBsYWNlIGZvciB0aGlzIGZ1bmN0aW9uLCBhc3N1bWluZyBpdCdzIHJlbGF0ZWQgdG8gaHVnZSBwYWdlcywgd2hpY2ggaXQgbGlrZWx5IGlzLiBJJ2xsIGdvIGNoZWNrIHRoYXQgZmlsZSBkaXJlY3RseS5cblxuXG4iLCJJbnB1dFRva2VucyI6NTg4MywiT3V0cHV0VG9rZW5zIjozMCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIyLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTE6MDIuNjY1MTA2NjU0WiIsIlNlcSI6MzgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTkxOTUwODcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaHVnZV91bmxvY2tcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vbWFkdmlzZS5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL21hZHZpc2UuYz0zNjQ9c3RhdGljIGludCBtYWR2aXNlX2NvbGRfb3JfcGFnZW91dF9wdGVfcmFuZ2UocG1kX3QgKnBtZCxcXG4tLVxcbm1tL21hZHZpc2UuYy0zOTgtXFx0XFx0aWYgKGlzX2h1Z2VfemVyb19wbWQob3JpZ19wbWQpKVxcbm1tL21hZHZpc2UuYzozOTk6XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG5tbS9tYWR2aXNlLmMtNDAwLVxcbi0tXFxubW0vbWFkdmlzZS5jLTQwMy1cXHRcXHRcXHRcXHRcXHQhcG1kX2lzX2RldmljZV9wcml2YXRlX2VudHJ5KG9yaWdfcG1kKSk7XFxubW0vbWFkdmlzZS5jOjQwNDpcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbm1tL21hZHZpc2UuYy00MDUtXFx0XFx0fVxcbi0tXFxubW0vbWFkdmlzZS5jLTQwOS1cXHRcXHRpZiAoZm9saW9faXNfem9uZV9kZXZpY2UoZm9saW8pKVxcbm1tL21hZHZpc2UuYzo0MTA6XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG5tbS9tYWR2aXNlLmMtNDExLVxcbi0tXFxubW0vbWFkdmlzZS5jLTQxMy1cXHRcXHRpZiAoZm9saW9fbWF5YmVfbWFwcGVkX3NoYXJlZChmb2xpbykpXFxubW0vbWFkdmlzZS5jOjQxNDpcXHRcXHRcXHRnb3RvIGh1Z2VfdW5sb2NrO1xcbm1tL21hZHZpc2UuYy00MTUtXFxubW0vbWFkdmlzZS5jLTQxNi1cXHRcXHRpZiAocGFnZW91dF9hbm9uX29ubHlfZmlsdGVyIFxcdTAwMjZcXHUwMDI2ICFmb2xpb190ZXN0X2Fub24oZm9saW8pKVxcbm1tL21hZHZpc2UuYzo0MTc6XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG5tbS9tYWR2aXNlLmMtNDE4LVxcbi0tXFxubW0vbWFkdmlzZS5jLTQyMi1cXHRcXHRcXHRpZiAoIWZvbGlvX3RyeWxvY2soZm9saW8pKVxcbm1tL21hZHZpc2UuYzo0MjM6XFx0XFx0XFx0XFx0Z290byBodWdlX3VubG9jaztcXG5tbS9tYWR2aXNlLmMtNDI0LVxcdFxcdFxcdGZvbGlvX2dldChmb2xpbyk7XFxuLS1cXG5tbS9tYWR2aXNlLmMtNDU0LVxcdFxcdFxcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xcbm1tL21hZHZpc2UuYzo0NTU6aHVnZV91bmxvY2s6XFxubW0vbWFkdmlzZS5jLTQ1Ni1cXHRcXHRzcGluX3VubG9jayhwdGwpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0xMlQxMTo1MTowMi43ODQzMTQ1NjNaIiwiU2VxIjozOSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjgtZmxhc2giLCJEdXJhdGlvbiI6MjA1MTY1MzU3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHN1bW1hcnksIGFzIHRob3VnaCBJJ20gdGhpbmtpbmcgdGhyb3VnaCB0aGlzIG15c2VsZjpcblxuKipRdWljayBDaGVjayBvbiBgaHVnZV91bmxvY2tgKipcblxuT2theSwgc28gYGh1Z2VfdW5sb2NrYCBpcyBkZWFkIHNpbXBsZS4gSXQgbG9va3MgbGlrZSBpdCBqdXN0IGNhbGxzIGBzcGluX3VubG9ja2Agb24gdGhlIHBhc3NlZCBpbiBwcm90ZWN0aW9uIGxvY2sgKGBwdGxgKSBhbmQgdGhlbiByZXR1cm5zIDAuIFRoYXTigJlzIGl0LiBOb3csIGp1c3QgdG8gYmUgY29tcGxldGVseSBzdXJlIEnigJltIG5vdCBtaXNzaW5nIGFueXRoaW5nIHN1YnRsZSwgSSBzaG91bGQgcHJvYmFibHkgY2hlY2sgdGhhdCB0aGUgc3Vycm91bmRpbmcgY29kZSBtYWtlcyBzZW5zZSBvZiB0aGF0IHJldHVybiB2YWx1ZS4gTGV0IG1lIGp1c3QgZ2xhbmNlIGF0IGxpbmVzIDQ1NS00NTkgdG8gbWFrZSBzdXJlIGl0J3MgZG9pbmcgd2hhdCBJIHRoaW5rIGl0IGlzLiBJIGNhbid0IHRoaW5rIG9mIGFueSBvYnZpb3VzIGlzc3VlcywgYnV0IGl0J3MgYWx3YXlzIGdvb2QgdG8gYmUgdGhvcm91Z2ggd2l0aCBsb3ctbGV2ZWwgbG9ja2luZyBjb2RlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo2NTY3LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NDgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMTJUMTE6NTE6MDQuODM1OTcyMjE5WiIsIlNlcSI6NDAsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMzNTEzMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9tYWR2aXNlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogNDUwLFxuICBcIkxpbmVDb3VudFwiOiAxNVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNDUwOlxcdFxcdFxcdFxcdFxcdGVsc2VcXG4gNDUxOlxcdFxcdFxcdFxcdFxcdFxcdGxpc3RfYWRkKFxcdTAwMjZmb2xpby1cXHUwMDNlbHJ1LCBcXHUwMDI2Zm9saW9fbGlzdCk7XFxuIDQ1MjpcXHRcXHRcXHRcXHR9XFxuIDQ1MzpcXHRcXHRcXHR9IGVsc2VcXG4gNDU0OlxcdFxcdFxcdFxcdGZvbGlvX2RlYWN0aXZhdGUoZm9saW8pO1xcbiA0NTU6XFx0aHVnZV91bmxvY2s6XFxuIDQ1NjpcXHRcXHRcXHRzcGluX3VubG9jayhwdGwpO1xcbiA0NTc6XFx0XFx0XFx0aWYgKHBhZ2VvdXQpXFxuIDQ1ODpcXHRcXHRcXHRcXHRyZWNsYWltX3BhZ2VzKFxcdTAwMjZmb2xpb19saXN0KTtcXG4gNDU5OlxcdFxcdFxcdHJldHVybiAwO1xcbiA0NjA6XFx0XFx0fVxcbiA0NjE6XFx0XFxuIDQ2MjpcXHRyZWd1bGFyX2ZvbGlvOlxcbiA0NjM6XFx0I2VuZGlmXFxuIDQ2NDpcXHRcXHR0bGJfY2hhbmdlX3BhZ2Vfc2l6ZSh0bGIsIFBBR0VfU0laRSk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUxOjA0LjgzNjMxMTcyOVoiLCJTZXEiOjQxLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuOC1mbGFzaCIsIkR1cmF0aW9uIjoxNzkxMzgxODc3MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIE1hZHZpc2UgRm9saW8gTG9ja2luZyBDaGFuZ2UqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNoYW5nZSBpbiBgbW0vbWFkdmlzZS5jYCwgYW5kIGl0J3MgbWFraW5nIGEgc3BlY2lmaWMgb3B0aW1pemF0aW9uIGluIHRoZSBsb2NraW5nIHN0cmF0ZWd5LiAgUHJldmlvdXNseSwgd2UgaGFkIHRoaXMgc2VxdWVuY2U6IGBmb2xpb19nZXRgLCBgc3Bpbl91bmxvY2socHRsKWAsIGBmb2xpb19sb2NrYCwgYHNwbGl0X2ZvbGlvYCwgYGZvbGlvX3VubG9ja2AsIGBmb2xpb19wdXRgLiBOb3csIHRoZSBgZm9saW9fbG9ja2AgaXMgcmVwbGFjZWQgd2l0aCBgZm9saW9fdHJ5bG9ja2Agd2hpbGUgc3RpbGwgaG9sZGluZyBgcHRsYC4gSWYgYGZvbGlvX3RyeWxvY2tgIGZhaWxzLCB3ZSBiYWlsIG91dCB1c2luZyBgZ290byBodWdlX3VubG9ja2AgYWZ0ZXIgcmVsZWFzaW5nIGBwdGxgLiBJZiBgZm9saW9fdHJ5bG9ja2Agc3VjY2VlZHMsIHdlIHRha2UgYSByZWZlcmVuY2UsIHJlbGVhc2UgYHB0bGAsIGNhbGwgYHNwbGl0X2ZvbGlvYCwgYW5kIHByb2NlZWQgYXMgYmVmb3JlLlxuXG5Ob3csIHRoZSBpbXBvcnRhbnQgcXVlc3Rpb24sIGFzIGFsd2F5czogZG9lcyB0aGlzIGludHJvZHVjZSBhbnkgdW5pbml0aWFsaXplZCBtZW1vcnkgaXNzdWVzPyBJJ20gdGhpbmtpbmcgYWJvdXQgaXQsIGFuZCBubywgaXQgZG9lc24ndCBzZWVtIGxpa2UgaXQuIEkgc2VlIG5vIG5ldyBhbGxvY2F0aW9ucyBvbiB0aGUgc3RhY2sgb3IgaGVhcC4gVGhlcmUncyBubyBkYXRhIGJlaW5nIGNvcGllZCB0byB1c2Vyc3BhY2UsIG1lYW5pbmcgbm8gcmlzayBvZiBrZXJuZWwgaW5mb3JtYXRpb24gbGVha3MuIEkgY2FuJ3QgZmluZCBhbnkgaW5zdGFuY2VzIG9mIHVuaW5pdGlhbGl6ZWQgZmllbGRzIGJlaW5nIHJlYWQgb3IgdmFyaWFibGVzIGJlaW5nIHJlYWQgdW5pbml0aWFsaXplZC4gSXQncyBzb2xlbHkgcGFnZSB0YWJsZSBhbmQgZm9saW8gbG9ja2luZyBsb2dpYyB3aXRoaW4gdGhlIGNvbnRleHQgb2YgYE1BRFZfQ09MRGAgYW5kIGBNQURWX1BBR0VPVVRgLiBUaGlzIGlzIHJlYWxseSBhbGwgYWJvdXQgc3luY2hyb25pemF0aW9uLlxuXG5Ob3csIGxldCdzIHN0ZXAgYmFjayBhbmQgY29uc2lkZXIgdGhlIEtNU0FOIHF1ZXN0aW9uLiAgUmVtZW1iZXIgdGhlIHJ1bGU6IHdlICpkb24ndCogcnVuIEtNU0FOIGlmIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMgY2FuIGNhdGNoIHRoZSBidWdzLiAgV2UgbmVlZCBLTVNBTiBvbmx5IGlmIHdlIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSByaXNrcyB0aGF0IEtNU0FOICp1bmlxdWVseSogZGV0ZWN0cy4gIFNvLCB3aGF0IGFyZSB0aGUgcG90ZW50aWFsIGJ1Z3MgaGVyZT8gV2VsbCwgaXQncyBwcmV0dHkgbXVjaCBhbGwgYWJvdXQgbG9ja2luZywgcG90ZW50aWFsIHJhY2UgY29uZGl0aW9ucywgb3IgcmVmZXJlbmNlIGNvdW50aW5nIGlzc3Vlcy4gIEFuZCwgdGhvc2UgYXJlICpleGFjdGx5KiB3aGF0IExPQ0tERVAgYW5kIEtBU0FOIChhbmQgdGhlIHJlZmNvdW50IGNoZWNrZXJzKSBhcmUgZGVzaWduZWQgdG8gZGV0ZWN0LlxuXG5TbywgYWNjb3JkaW5nIHRvIHRoZSBjcml0ZXJpYTogdGhlIGNvZGUgY2hhbmdlIGlzbid0IHRvdWNoaW5nIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgbWVtb3J5LiBJdCdzIHN0cmljdGx5IGFib3V0IGxvY2tpbmcgYW5kIHN5bmNocm9uaXphdGlvbi4gQWxzbywgYWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyBhcmUgZnVsbHkgemVyb2VkIG9yIGluaXRpYWxpemVkIGFuZCB0aGVyZSBpcyBubyByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblRoZXJlZm9yZSwgYE5lZWRzS01TQU5gIGlzIGRlZmluaXRlbHkgYGZhbHNlYC5cblxuU28sIHRoZSByZWFzb25pbmcgSSB3b3VsZCBwdXQgZm9yd2FyZCBpcyB0aGlzOiBUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIGZvbGlvIGxvY2tpbmcgaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYC4gU3BlY2lmaWNhbGx5LCBpdCByZXBsYWNlcyBhIGJsb2NraW5nIGBmb2xpb19sb2NrKClgIGFmdGVyIGRyb3BwaW5nIHRoZSBwYWdlIHRhYmxlIGxvY2sgKGBwdGxgKSB3aXRoIGEgYGZvbGlvX3RyeWxvY2soKWAgYmVmb3JlIGRyb3BwaW5nIGBwdGxgLCBhbmQgaXQganVtcHMgdG8gYGh1Z2VfdW5sb2NrYCBvbiBmYWlsdXJlLiBUaGUgbWVtb3J5IHNhZmV0eSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UgaXMgbWluaW1hbCBiZWNhdXNlIGl0IHJlbGF0ZXMgZXhjbHVzaXZlbHkgdG8gc3luY2hyb25pemF0aW9uIGFuZCB0aGUgcGFnZS10YWJsZS9mb2xpbyBsaWZlY3ljbGUgbWFuYWdlbWVudCBvZiB0aGUgbWFkdmlzZSBvcGVyYXRpb25zIChgTUFEVl9DT0xEYCAvIGBNQURWX1BBR0VPVVRgKS4gIFRoZXJlIGFyZSBubyBpbnRyb2R1Y2VkIHJpc2tzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBvciBhbnkgaW5mbyBsZWFrcy4gIEFueSBwb3RlbnRpYWwgaXNzdWVzIHdvdWxkIGJlIHJlbGF0ZWQgdG8gbG9ja2luZywgcmFjZXMsIG9yIHJlZmVyZW5jZSBjb3VudGluZywgd2hpY2ggYXJlIGFsbCBhZGVxdWF0ZWx5IGFkZHJlc3NlZCBieSBMT0NLREVQLCBLQVNBTiwgYW5kIHRoZSByZWZjb3VudCBjaGVja2Vycy4gTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MDAxLCJPdXRwdXRUb2tlbnMiOjIxNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjgxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTEyVDExOjUxOjIyLjc1MDEzNTg1MVoiLCJTZXEiOjQyLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjM2MTAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgZm9jdXNlZCBvbiBsb2NraW5nLCBzeW5jaHJvbml6YXRpb24sIGFuZCBmb2xpbyBzcGxpdHRpbmcgY29udHJvbCBmbG93IGR1cmluZyBgTUFEVl9DT0xEYCAvIGBNQURWX1BBR0VPVVRgIG9wZXJhdGlvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMsIGFuZCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBwYWdlIHJlZmNvdW50IGlzc3VlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgZm9saW8gbG9ja2luZyBzeW5jaHJvbml6YXRpb24gaW4gYG1hZHZpc2VfY29sZF9vcl9wYWdlb3V0X3B0ZV9yYW5nZSgpYCB3aXRoaW4gYG1tL21hZHZpc2UuY2AuIFNwZWNpZmljYWxseSwgaXQgcmVwbGFjZXMgYSBibG9ja2luZyBgZm9saW9fbG9jaygpYCB0YWtlbiBhZnRlciBkcm9wcGluZyB0aGUgcGFnZSB0YWJsZSBsb2NrIChgcHRsYCkgd2l0aCBhIG5vbi1ibG9ja2luZyBgZm9saW9fdHJ5bG9jaygpYCB1bmRlciBgcHRsYCwgYnJhbmNoaW5nIHRvIGBodWdlX3VubG9ja2AgaWYgbG9ja2luZyBmYWlscy5cXG5cXG5UaGlzIGNoYW5nZSBpcyBwdXJlbHkgZm9jdXNlZCBvbiBsb2NraW5nLCBzeW5jaHJvbml6YXRpb24sIGFuZCBmb2xpbyBzcGxpdHRpbmcgY29udHJvbCBmbG93IGR1cmluZyBgTUFEVl9DT0xEYCAvIGBNQURWX1BBR0VPVVRgIG9wZXJhdGlvbnMuIEl0IGRvZXMgbm90IGludHJvZHVjZSBvciBtb2RpZnkgYW55IHN0YWNrL2hlYXAgYWxsb2NhdGlvbnMsIGRvZXMgbm90IGV4cG9zZSBvciByZWFkIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhbHRlciBidWZmZXIgYm91bmRzIG9yIGxlbmd0aHMsIGFuZCBkb2VzIG5vdCBjb3B5IGtlcm5lbCBkYXRhIHRvIHVzZXIgc3BhY2UuIEFueSBjb25jdXJyZW5jeSBvciBwYWdlIHJlZmNvdW50IGlzc3VlcyB3b3VsZCBmYWxsIHVuZGVyIExPQ0tERVAgb3IgS0FTQU4gcmF0aGVyIHRoYW4gS01TQU4uIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowlcrbn[1] Phase: Succeeded StartedAt: 2026-09-12 11:51:33 +0000 UTC FinishedAt: 2026-09-12 11:51:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-12 11:51:33 +0000 UTC FinishedAt: 2026-09-12 11:51:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2] Phase: Succeeded StartedAt: 2026-09-12 11:51:33 +0000 UTC FinishedAt: 2026-09-12 15:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-09-12 11:51:33 +0000 UTC FinishedAt: 2026-09-12 15:47:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","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-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-09-12 11:51:33 +0000 UTC FinishedAt: 2026-09-12 11:51:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-09-12 11:51:33 +0000 UTC FinishedAt: 2026-09-12 11:51:38 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"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-workflowlcrbn/series-workflowlcrbn-convert-artifact-3709403473/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-09-12 11:51:43 +0000 UTC FinishedAt: 2026-09-12 12:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-09-12 11:51:43 +0000 UTC FinishedAt: 2026-09-12 12:08:00 +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:*ec9723be-6248-413a-b5c8-99716a7fca73,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-workflowlcrbn/series-workflowlcrbn-convert-artifact-3709403473/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": "0ba1ed63-2acc-4dc5-ac85-ddf15fc5a024", "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-workflowlcrbn/series-workflowlcrbn-build-action-2283379455/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-09-12 11:51:43 +0000 UTC FinishedAt: 2026-09-12 12:07:50 +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:*ec9723be-6248-413a-b5c8-99716a7fca73,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-workflowlcrbn/series-workflowlcrbn-convert-artifact-3709403473/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": "0ba1ed63-2acc-4dc5-ac85-ddf15fc5a024", "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-workflowlcrbn/series-workflowlcrbn-build-action-2283379455/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-09-12 12:08:00 +0000 UTC FinishedAt: 2026-09-12 12:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-09-12 12:08:00 +0000 UTC FinishedAt: 2026-09-12 12:08:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-09-12 12:08:00 +0000 UTC FinishedAt: 2026-09-12 12:08:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-09-12 12:08:00 +0000 UTC FinishedAt: 2026-09-12 12:08:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","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-workflowlcrbn/series-workflowlcrbn-convert-artifact-3676317476/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-09-12 12:08:10 +0000 UTC FinishedAt: 2026-09-12 12:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-09-12 12:08:10 +0000 UTC FinishedAt: 2026-09-12 12:09:53 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ba1ed63-2acc-4dc5-ac85-ddf15fc5a024,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-workflowlcrbn/series-workflowlcrbn-build-action-2283379455/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-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-09-12 12:10:03 +0000 UTC FinishedAt: 2026-09-12 12:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-09-12 12:10:03 +0000 UTC FinishedAt: 2026-09-12 12:10:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-09-12 12:10:03 +0000 UTC FinishedAt: 2026-09-12 12:26:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-09-12 12:10:03 +0000 UTC FinishedAt: 2026-09-12 12:26:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ec9723be-6248-413a-b5c8-99716a7fca73,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-workflowlcrbn/series-workflowlcrbn-convert-artifact-3676317476/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": "540d3d07-d752-4275-8f9c-c443e1c251a7", "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-workflowlcrbn/series-workflowlcrbn-build-action-828284336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-09-12 12:10:03 +0000 UTC FinishedAt: 2026-09-12 12:25:58 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:findings,Default:nil,Value:*true,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:test-name,Default:nil,Value:*[KASAN] Build Patched,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:smoke-build,Default:nil,Value:*false,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:session-id,Default:nil,Value:*ec9723be-6248-413a-b5c8-99716a7fca73,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-workflowlcrbn/series-workflowlcrbn-convert-artifact-3676317476/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": "540d3d07-d752-4275-8f9c-c443e1c251a7", "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-workflowlcrbn/series-workflowlcrbn-build-action-828284336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-09-12 12:26:08 +0000 UTC FinishedAt: 2026-09-12 12:26:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-09-12 12:26:08 +0000 UTC FinishedAt: 2026-09-12 12:26:08 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-09-12 12:26:08 +0000 UTC FinishedAt: 2026-09-12 12:29:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-09-12 12:26:08 +0000 UTC FinishedAt: 2026-09-12 12:29:45 +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:*540d3d07-d752-4275-8f9c-c443e1c251a7,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-workflowlcrbn/series-workflowlcrbn-build-action-828284336/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-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-09-12 12:29:55 +0000 UTC FinishedAt: 2026-09-12 15:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-09-12 12:29:55 +0000 UTC FinishedAt: 2026-09-12 15:47:05 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"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:*0ba1ed63-2acc-4dc5-ac85-ddf15fc5a024,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*540d3d07-d752-4275-8f9c-c443e1c251a7,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-workflowlcrbn/series-workflowlcrbn-build-action-2283379455/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-workflowlcrbn/series-workflowlcrbn-build-action-828284336/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-09-12 12:29:55 +0000 UTC FinishedAt: 2026-09-12 12:30:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-09-12 12:29:55 +0000 UTC FinishedAt: 2026-09-12 12:30:00 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"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-workflowlcrbn/series-workflowlcrbn-convert-artifact-3298872493/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-09-12 12:29:55 +0000 UTC FinishedAt: 2026-09-12 12:29:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-09-12 12:29:55 +0000 UTC FinishedAt: 2026-09-12 12:29:55 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-09-12 12:29:56 +0000 UTC FinishedAt: 2026-09-12 12:29:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-09-12 12:30:06 +0000 UTC FinishedAt: 2026-09-12 15:47:05 +0000 UTC Input: nil Output: nil --------- Name: series-workflowlcrbn[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"base_commit":"9958290885035431e2494159f555e332c3c14906","base_tree":"mm-new","bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["madvise_cold_or_pageout_pte_range","madvise_cold","madvise_pageout"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9958290885035431e2494159f555e332c3c14906","config_name":"upstream-apparmor-kasan.config","enable_configs":["TRANSPARENT_HUGEPAGE","ADVISE_SYSCALLS"],"series_id":"96ff506a-b89e-4c9a-8572-bf809b140f6c","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-09-12 12:30:06 +0000 UTC FinishedAt: 2026-09-12 15:46:55 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*0ba1ed63-2acc-4dc5-ac85-ddf15fc5a024,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*540d3d07-d752-4275-8f9c-c443e1c251a7,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-workflowlcrbn/series-workflowlcrbn-build-action-2283379455/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-workflowlcrbn/series-workflowlcrbn-build-action-828284336/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-workflowlcrbn/series-workflowlcrbn-convert-artifact-3298872493/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,}