Name: series-workflowvsrnp Phase: Succeeded StartedAt: 2026-09-01 22:50:31 +0000 UTC FinishedAt: 2026-09-02 02:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[0] Phase: Succeeded StartedAt: 2026-09-01 22:50:31 +0000 UTC FinishedAt: 2026-09-01 23:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[0].run-triage Phase: Succeeded StartedAt: 2026-09-01 22:50:31 +0000 UTC FinishedAt: 2026-09-01 23:08:42 +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": "9d3d3356faf028769b5856809ee0965b34c85539", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "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": "9d3d3356faf028769b5856809ee0965b34c85539", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "bc9adb52-797a-4433-88a5-e3c4bb3fe34b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_start", "damon_commit_ctx", "damon_set_schemes", "damon_new_scheme" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIChgaWYgKCFxdW90YS1cdTAwM2Vlc3opIHJldHVybiBmYWxzZTtgKSBpbiBgZGFtb3NfcXVvdGFfaXNfZnVsbCgpYCBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoYGVzemApIGlzIHplcm8uIFRoaXMgaXMgYSBwdXJlbHkgaW50ZXJuYWwgbG9naWMgY2hhbmdlIHdpdGhpbiBEQU1PTiYjMzk7cyBxdW90YSBlbmZvcmNlbWVudCBtZWNoYW5pc20uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24gb3IgYnVmZmVyIGhhbmRsaW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkYW1vc19xdW90YV9pc19mdWxsKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJldHVybiBmYWxzZSB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIGZ1bmN0aW9uYWxseSBhbHRlcnMgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIHJlZ2lvbiBhcHBsaWNhdGlvbiBiZWhhdmlvciBpbiB0aGUgREFNT04gbWVtb3J5IG1vbml0b3Jpbmcgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgc3lzZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZDU2ZmFmOGZmMDU0OWI0ODdjYTIzMGRjMjk5ZmFjZTUzZTNiN2EzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMzowNzoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjUzY2YzMmYxZDUxNWMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI1NjAsNiAmIzQzOzI1NjAsOCBAQCBzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4ge1xuIFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFxdW90YS1cdTAwM2Vlc3opXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRhbW9zX3F1b3RhX2lzX2Z1bGwoKSBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIChlc3opIGlzIHplcm8uIFRoaXMgZnVuY3Rpb25hbGx5IGFsdGVycyBEQU1PUyBxdW90YSBlbmZvcmNlbWVudCBhbmQgcmVnaW9uIGFwcGxpY2F0aW9uIGJlaGF2aW9yIGluIHRoZSBEQU1PTiBtZW1vcnkgbW9uaXRvcmluZyBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgY29uZmlndXJhYmxlIHZpYSBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVkNTZmYWY4ZmYwNTQ5YjQ4N2NhMjMwZGMyOTlmYWNlNTNlM2I3YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA3OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjAuLjUzY2YzMmYxZDUxNWMgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTI1NjAsNiAmIzQzOzI1NjAsOCBAQCBzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsCiB7CiAJaWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKQogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghcXVvdGEtJmd0O2VzeikKJiM0MzsJCXJldHVybiBmYWxzZTsKIAlpZiAocXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzeikKIAkJcmV0dXJuIHRydWU7CiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBhIERBTU9OIFBhdGNoKioKCk9rYXksIHNvIEkgc2VlIGEgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGdldCBmYW1pbGlhciB3aXRoIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI1NjAg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gTGV0IG1lIGdyYWIgdGhlIHJlbGV2YW50IGNvZGUgYmxvY2ssIGFuZCBJIHRoaW5rIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgd2lsbCBiZSB0aGUgYmVzdCB0b29sIGZvciB0aGUgam9iIGRlcGVuZGluZyBvbiBteSBleGFjdCBuZWVkcy4gYHJlYWQtZmlsZWAgdG8gZ2V0IGEgcXVpY2sgbG9jYWwgbG9vaywgYGdyZXBwZXJgIGlmIEkgbmVlZCB0byBxdWlja2x5IHNlYXJjaCBvciBmaWx0ZXIuIE9uY2UgSSYjMzk7dmUgZ290IHRoYXQgbGluZSBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvbnRleHQsIEkgY2FuIHN0YXJ0IHRvIGFuYWx5emUgdGhlIHBhdGNoIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTUwOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzs9IHN6X3JlZ2lvbjtcbjI1NTE6XHRcdGVsc2VcbjI1NTI6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiAmIzQzOz0gc3pfYXBwbGllZCAmIzQzOyBtdWx0X2ZyYWMoXG4yNTUzOlx0XHRcdFx0XHQoc3pfcmVnaW9uIC0gc3pfYXBwbGllZCksXG4yNTU0Olx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9udW0sXG4yNTU1Olx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XG4yNTU2Olx0fVxuMjU1NzpcdFxuMjU1ODpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjI1NTk6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjU2MDpcdHtcbjI1NjE6XHRcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbjI1NjI6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjU2MzpcdFx0aWYgKCFxdW90YS1cdTAwM2Vlc3opXG4yNTY0Olx0XHRcdHJldHVybiBmYWxzZTtcbjI1NjU6XHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6KVxuMjU2NjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjI1Njc6XHRcdC8qXG4yNTY4Olx0XHQgKiBEQU1PUyBhY3Rpb24gaXMgYXBwbGllZCBwZXIgcmVnaW9uLCBzbyBcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xuMjU2OTpcdFx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXG4yNTcwOlx0XHQgKi9cbjI1NzE6XHRcdHJldHVybiBxdW90YS1cdTAwM2Vlc3ogLSBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xuMjU3MjpcdH1cbjI1NzM6XHRcbjI1NzQ6XHRzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbjI1NzU6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxuMjU3NjpcdHtcbjI1Nzc6XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjU3ODpcdFx0dW5zaWduZWQgbG9uZyBzeiA9IGRhbW9uX3N6X3JlZ2lvbihyKTtcbjI1Nzk6XHRcdHN0cnVjdCB0aW1lc3BlYzY0IGJlZ2luLCBlbmQ7XG4yNTgwOlx0XHR1bnNpZ25lZCBsb25nIHN6X2FwcGxpZWQgPSAwO1xuMjU4MTpcdFx0dW5zaWduZWQgbG9uZyBzel9vcHNfZmlsdGVyX3Bhc3NlZCA9IDA7XG4yNTgyOlx0XHQvKlxuMjU4MzpcdFx0ICogV2UgcGxhbiB0byBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHQgcGVyIGtkYW1vbmQsIGFzIERBTU9OIHN5c2ZzXG4yNTg0Olx0XHQgKiBpbXBsaWVzIHdpdGggJiMzOTtucl9jb250ZXh0cyYjMzk7IGZpbGUuICBOZXZlcnRoZWxlc3MsIG9ubHkgc2luZ2xlIGNvbnRleHRcbjI1ODU6XHRcdCAqIHBlciBrZGFtb25kIGlzIHN1cHBvcnRlZCBmb3Igbm93LiAgU28sIHdlIGNhbiBzaW1wbHkgdXNlICYjMzk7MCYjMzk7IGNvbnRleHRcbjI1ODY6XHRcdCAqIGluZGV4IGhlcmUuXG4yNTg3Olx0XHQgKi9cbjI1ODg6XHRcdHVuc2lnbmVkIGludCBjaWR4ID0gMDtcbjI1ODk6XHRcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XHRcdC8qIHNjaGVtZXMgaXRlcmF0b3IgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBEQU1PTiBhbmQgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIERBTU9OIGFuZCB0aGlzIGBkYW1vc19xdW90YV9pc19mdWxsYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBEQU1PTiAqaXMqIGV4YWN0bHksIGZyb20gYSBoaWdoLWxldmVsIHBlcnNwZWN0aXZlLiBUaGVuLCBJIG5lZWQgdG8gc2VlIGhvdyBhbmQgd2hlcmUgdGhpcyBxdW90YSBjaGVjayBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgREFNT04gY29udGV4dC4KClRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBoZXJlIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIGZvY3VzIG15IHNlYXJjaCBvbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGl0c2VsZi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGlyZWN0IHVzZXMuIFRoZW4sIGlmIHRoYXQmIzM5O3Mgbm90IGVub3VnaCwgSSYjMzk7bGwgbmVlZCB0byBleHBhbmQgdGhlIHNlYXJjaCB0byBmaW5kIGNhbGxlcnMgb2YgdGhlIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIHdpbGwgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byBpdHMgcm9sZSB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yayBhbmQgZGF0YSBmbG93cy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHF1b3RhIHJlbGF0ZXMgdG8gREFNT04mIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBpbnRlcmFjdGlvbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19xdW90YV9pc19mdWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI1NDE9c3RhdGljIHZvaWQgZGFtb3NfY2hhcmdlX3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4tLVxubW0vZGFtb24vY29yZS5jLTI1NTctXG5tbS9kYW1vbi9jb3JlLmM6MjU1ODpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG5tbS9kYW1vbi9jb3JlLmMtMjU1OS1cdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNTc0PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNjMxLVx0XHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcbm1tL2RhbW9uL2NvcmUuYzoyNjMyOlx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xubW0vZGFtb24vY29yZS5jLTI2MzMtXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjY0ND1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2NTktXHRcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xubW0vZGFtb24vY29yZS5jOjI2NjA6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTI2NjEtXHRcdFx0Y29udGludWU7XG4tLVxubW0vZGFtb24vY29yZS5jPTMxNDA9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE2Mi1cdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xubW0vZGFtb24vY29yZS5jOjMxNjM6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTMxNjQtXHRcdFx0cy1cdTAwM2VzdGF0LnF0X2V4Y2VlZHMmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PUyBRdW90YSBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uIGxvY2F0ZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmVjYWxsIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbi4gSSBiZWxpZXZlIGl0IHdhcyBzb21ldGhpbmcgbGlrZSB0aGlzOgoKYGBgYwpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsCgkJdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KQp7CglpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpCgkJcmV0dXJuIGZhbHNlOwoJaWYgKHF1b3RhLSZndDtjaGFyZ2VkX3N6ICZndDs9IHF1b3RhLSZndDtlc3opCgkJcmV0dXJuIHRydWU7CgkvKgoJICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gJmx0O21pbl9yZWdpb25fc3ogcmVtYWluaW5nCgkgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC4KCSAqLwoJcmV0dXJuIHF1b3RhLSZndDtlc3ogLSBxdW90YS0mZ3Q7Y2hhcmdlZF9zeiAmbHQ7IG1pbl9yZWdpb25fc3o7Cn0KYGBgCgpOb3csIGhvbGQgb24uIEkgc2VlIHNvbWV0aGluZyB0aGF0JiMzOTtzIG1ha2luZyBtZSB1bmVhc3kuIFdoYXQgaGFwcGVucyBpZiBgcXVvdGEtJmd0O2VzemAgKHRoZSAqZXhwZWN0ZWQqIHNpemUpIGlzIGFjdHVhbGx5IHplcm8/IElmIGBxdW90YS0mZ3Q7ZXN6YCBpcyB6ZXJvLCBhbmQsIHBvdGVudGlhbGx5LCBgcXVvdGEtJmd0O2NoYXJnZWRfc3pgIGlzIHplcm8gYXMgd2VsbCwgdGhlbiB0aGUgY29uZGl0aW9uIGBxdW90YS0mZ3Q7Y2hhcmdlZF9zeiAmZ3Q7PSBxdW90YS0mZ3Q7ZXN6YCB3b3VsZCBldmFsdWF0ZSB0byB0cnVlLCBhcyB6ZXJvIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLiBUaGF0IHNlZW1zLi4uIG9kZC4gV2h5IHdvdWxkIGBlc3pgIGJlIHplcm8gd2hlbiB0aGUgcXVvdGEgaXMgc3VwcG9zZWRseSBzZXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoYXQgbWlnaHQgb2NjdXIuIFRoZSBjb2RlIHN1Z2dlc3RzIHRoYXQgYGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSlgIHdvdWxkIHJldHVybiB0cnVlIGV2ZW4gd2hlbiBgZXN6YCBpcyB6ZXJvLCBzbyB0aGF0IG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gSSBuZWVkIHRvIHRyYWNlIGhvdyBgZXN6YCBpcyBjYWxjdWxhdGVkIHRvIHNlZSBpZiB0aGlzIGlzIGFuIGV4cGVjdGVkIHNjZW5hcmlvIG9yIGEgYnVnLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGRhbW9zX3F1b3RhX2lzX3NldGAgYW5kIGhvdyB0aGUgcXVvdGEmIzM5O3MgYGVzemAgaXMgaW5pdGlhbGl6ZWQgb3IgdXBkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19xdW90YV9pc19zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjI3Nj1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTIyOTEtLypcbm1tL2RhbW9uL2NvcmUuYzoyMjkyOiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXG5tbS9kYW1vbi9jb3JlLmMtMjI5My0gKiBAcXVvdGE6XHRUaGUgcXVvdGEgdG8gY2hlY2suXG4tLVxubW0vZGFtb24vY29yZS5jLTIyOTYtICovXG5tbS9kYW1vbi9jb3JlLmM6MjI5NzpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbm1tL2RhbW9uL2NvcmUuYy0yMjk4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjMwMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMwNy1cbm1tL2RhbW9uL2NvcmUuYzoyMzA4Olx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcdTAwMjZzLVx1MDAzZXF1b3RhKSB8fCAhYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbm1tL2RhbW9uL2NvcmUuYy0yMzA5LVx0XHRyZXR1cm4gcmV0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNTU4PXN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjU2MC17XG5tbS9kYW1vbi9jb3JlLmM6MjU2MTpcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbm1tL2RhbW9uL2NvcmUuYy0yNTYyLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZGFtb24vY29yZS5jPTI1NzQ9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2MTEtXHRpZiAoYy1cdTAwM2VvcHMuYXBwbHlfc2NoZW1lKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjYxMjpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXHUwMDI2XHUwMDI2XG5tbS9kYW1vbi9jb3JlLmMtMjYxMy1cdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzsgc3ogXHUwMDNlIHF1b3RhLVx1MDAzZWVzeikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgcGxheWluZyB0aGUgcm9sZSBvZiBzb21lb25lIHRob3JvdWdobHkgZmFtaWxpYXIgd2l0aCB0aGUga2VybmVsIGFuZCBEQU1PTjoKCioqRXhhbWluaW5nIERBTU9OIENvcmUgQ29kZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBEQU1PTiYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdGllcy4gVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWUgY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgZGF0YSBhY2Nlc3MgbW9uaXRvciYjMzk7cyBpbnRlcm5hbCB3b3JraW5ncy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGlzb2xhdGluZyBsaW5lcyBhcm91bmQgMjI5MC0yMzIwIGFuZCAzMTQwLTMxODAuIFRoZXNlIHNwZWNpZmljIGxpbmUgcmFuZ2VzIGFyZSBsaWtlbHkgaGludGluZyBhdCB0aGUgcGFydHMgb2YgdGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIG1lbW9yeSBhY2Nlc3MgcGF0dGVybiBkZXRlY3Rpb24gb3IgcGVyaGFwcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvcmUgREFNT04gZGF0YSBzdHJ1Y3R1cmVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZW0gdG8gbXkgZXhpc3RpbmcgbWVudGFsIG1vZGVsIG9mIGhvdyBEQU1PTiBvcGVyYXRlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYXJvdW5kIGhvdyBtZW1vcnkgcmVnaW9ucyBhcmUgaGFuZGxlZCwgZGF0YSBhZ2dyZWdhdGlvbiwgb3IgdGhlIHN0cmF0ZWdpZXMgREFNT04gZW1wbG95cyBmb3IgaXRzIHNhbXBsaW5nIGFuZCBhbmFseXNpcyB0byBpZGVudGlmeSBob3RzcG90cyBvciBjb2xkIHNwb3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI5MDpcdFxuMjI5MTpcdC8qXG4yMjkyOlx0ICogZGFtb3NfcXVvdGFfaXNfc2V0KCkgLSBSZXR1cm4gaWYgdGhlIGdpdmVuIHF1b3RhIGlzIGFjdHVhbGx5IHNldC5cbjIyOTM6XHQgKiBAcXVvdGE6XHRUaGUgcXVvdGEgdG8gY2hlY2suXG4yMjk0Olx0ICpcbjIyOTU6XHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1b3RhIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxuMjI5NjpcdCAqL1xuMjI5NzpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuMjI5ODpcdHtcbjIyOTk6XHRcdHJldHVybiBxdW90YS1cdTAwM2Vlc3ogfHwgcXVvdGEtXHUwMDNlc3ogfHwgcXVvdGEtXHUwMDNlbXMgfHxcbjIzMDA6XHRcdFx0IWRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHF1b3RhKTtcbjIzMDE6XHR9XG4yMzAyOlx0XG4yMzAzOlx0c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4yMzA0Olx0XHRcdHN0cnVjdCBkYW1vcyAqcylcbjIzMDU6XHR7XG4yMzA2Olx0XHRib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpO1xuMjMwNzpcdFxuMjMwODpcdFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcdTAwMjZzLVx1MDAzZXF1b3RhKSB8fCAhYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbjIzMDk6XHRcdFx0cmV0dXJuIHJldDtcbjIzMTA6XHRcbjIzMTE6XHRcdHJldHVybiBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpIFx1MDAzZT0gcy1cdTAwM2VxdW90YS5taW5fc2NvcmU7XG4yMzEyOlx0fVxuMjMxMzpcdFxuMjMxNDpcdC8qXG4yMzE1Olx0ICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXG4yMzE2Olx0ICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXG4yMzE3Olx0ICogQHQ6XHRUaGUgdGFyZ2V0IG9mIHRoZSByZWdpb24uXG4yMzE4Olx0ICogQHJwOlx0VGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi5cbjIzMTk6XHQgKiBAczpcdFRoZSBzY2hlbWUgdG8gYmUgYXBwbGllZC5cbjIzMjA6XHQgKiBAbWluX3JlZ2lvbl9zejpcdG1pbmltdW0gcmVnaW9uIHNpemUuXG4yMzIxOlx0ICpcbjIzMjI6XHQgKiBJZiBhIHF1b3RhIG9mIGEgc2NoZW1lIGhhcyBleGNlZWRlZCBpbiBhIHF1b3RhIGNoYXJnZSB3aW5kb3csIHRoZSBzY2hlbWUmIzM5O3NcbjIzMjM6XHQgKiBhY3Rpb24gd291bGQgYXBwbGllZCB0byBvbmx5IGEgcGFydCBvZiB0aGUgdGFyZ2V0IGFjY2VzcyBwYXR0ZXJuIGZ1bGZpbGxpbmdcbjIzMjQ6XHQgKiByZWdpb25zLiAgVG8gYXZvaWQgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gb25seSBhbHJlYWR5IGFwcGxpZWRcbjIzMjU6XHQgKiByZWdpb25zLCBEQU1PTiBza2lwcyBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byB0aGUgcmVnaW9ucyB0aGF0IGNoYXJnZWRcbjIzMjY6XHQgKiBpbiB0aGUgcHJldmlvdXMgY2hhcmdlIHdpbmRvdy5cbjIzMjc6XHQgKlxuMjMyODpcdCAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkIG9yIG5vdCBmb3IgdGhlXG4yMzI5Olx0ICogcmVhc29uLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydCBvZiB0aGUgcmVnaW9uIGhhcyBwcmV2aW91c2x5IGNoYXJnZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFF1b3RhIFNpemUgYW5kIERBTU9OIFF1b3RhIE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGRpZyBpbnRvIHRoaXMgYHF1b3RhLSZndDtlc3pgIGFuZCBob3cgYGRhbW9zX3F1b3RhX2lzX3NldGAgaW50ZXJhY3RzIHdpdGggaXQuIGBkYW1vc19xdW90YV9pc19zZXQocXVvdGEpYCBzZWVtcyB0byBoaW5nZSBvbiB3aGV0aGVyIGBxdW90YS0mZ3Q7ZXN6YCwgYHF1b3RhLSZndDtzemAsIGBxdW90YS0mZ3Q7bXNgLCBvciBhbnkgcXVvdGEgZ29hbHMgYXJlIGFjdGl2ZSwgcmlnaHQ/IFNvLCBpdCBib2lscyBkb3duIHRvOiBpcyAqYW55dGhpbmcqIHJlbGF0ZWQgdG8gdGhlIHF1b3RhIGFjdGl2ZWx5IGNvbmZpZ3VyZWQ/IEFoLCByaWdodCwgYHF1b3RhLSZndDtlc3pgIGlzIHRoZSAqZWZmZWN0aXZlKiBxdW90YSBzaXplLCBpbiBieXRlcy4KCk5vdywgaWYgZWl0aGVyIGBxdW90YS0mZ3Q7c3pgIG9yIGBxdW90YS0mZ3Q7bXNgIG9yIHRoZSBxdW90YSBnb2FscyBhcmUgc2V0LCBidXQgYHF1b3RhLSZndDtlc3pgIGhhc24mIzM5O3QgYmVlbiBwcm9wZXJseSBjYWxjdWxhdGVkIHlldCwgb3IgaXQmIzM5O3MganVzdCB6ZXJvLi4uIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgcHJvYmFibHkgbGVhZHMgdG8gc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2UgYmVoYXZpb3JzLiBJIHNob3VsZCBwcm9iYWJseSBiZSBwcmVwYXJlZCB0byBnbyBsb29raW5nIGZvciB0aG9zZSBsYXRlci4KCk9rYXksIEkgbmVlZCB0byBjaGVjayBob3cgYGRhbW9zX2FkanVzdF9xdW90YWAgd29ya3MsIHdoaWNoIEkgYmVsaWV2ZSBpcyBhcm91bmQgbGluZSAzMTQwIGluIGBtbS9kYW1vbi9jb3JlLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE0MDpcdHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMTQxOlx0e1xuMzE0MjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMTQzOlx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzE0NDpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjMxNDU6XHRcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xuMzE0NjpcdFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xuMzE0NzpcdFxuMzE0ODpcdFx0aWYgKCFxdW90YS1cdTAwM2VtcyBcdTAwMjZcdTAwMjYgIXF1b3RhLVx1MDAzZXN6IFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSlcbjMxNDk6XHRcdFx0cmV0dXJuO1xuMzE1MDpcdFxuMzE1MTpcdFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xuMzE1MjpcdFx0aWYgKCFxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6IFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tKSB7XG4zMTUzOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG4zMTU0Olx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMTU1Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzE1NjpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMTU3Olx0XHR9XG4zMTU4Olx0XG4zMTU5Olx0XHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cbjMxNjA6XHRcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbjMxNjE6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSAmIzQzO1xuMzE2MjpcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG4zMTYzOlx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzE2NDpcdFx0XHRcdHMtXHUwMDNlc3RhdC5xdF9leGNlZWRzJiM0MzsmIzQzOztcbjMxNjU6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMxNjY6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMxNjc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMTY4Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzE2OTpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMTcwOlx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMTcxOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcbjMxNzI6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzE3MzpcdFx0fVxuMzE3NDpcdFxuMzE3NTpcdFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuMzE3NjpcdFx0XHRyZXR1cm47XG4zMTc3Olx0XG4zMTc4Olx0XHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cbjMxNzk6XHRcdG1lbXNldChjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxuMzE4MDpcdFx0XHRcdHNpemVvZigqYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKlxuMzE4MTpcdFx0XHRcdChEQU1PU19NQVhfU0NPUkUgJiM0MzsgMSkpO1xuMzE4MjpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjMxODM6XHRcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbjMxODQ6XHRcdFx0XHRpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpKVxuMzE4NTpcdFx0XHRcdFx0Y29udGludWU7XG4zMTg2Olx0XHRcdFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcbjMxODc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMzE4ODpcdFx0XHRcdHNjb3JlID0gYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcbjMxODk6XHRcdFx0XHRjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSAmIzQzOz1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMwMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFF1b3RhIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhcm91bmQgZWRnZSBjYXNlcyB3aXRoIHRoZSBxdW90YSBzaXplIChgcXVvdGEtJmd0O2VzemApLiBXaGF0IGhhcHBlbnMgaWYgaXQmIzM5O3MgemVybz8gRm9yIGV4YW1wbGUsIGJlZm9yZSBhbnkgY2hhcmdlIHdpbmRvdywgb3IgaWYgaXQmIzM5O3MgZXhwbGljaXRseSBzZXQgdG8gemVybywgb3IgZXZlbiBpZiB0aGUgb3ZlcmFsbCBxdW90YSBzaXplIChgcXVvdGEtJmd0O3N6YCkgaXMgemVyby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIHF1b3RhIGlzIGRlZmluZWQgKG1heWJlIGBxdW90YS0mZ3Q7bXNgIG9yIGBxdW90YS0mZ3Q7Z29hbHNgIGFyZSBzZXQpLCBidXQgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGhhc24mIzM5O3QgcnVuIHlldCwgb3IgaWYgYHF1b3RhLSZndDtlc3pgIHN0aWxsIGV2YWx1YXRlcyB0byB6ZXJvIGV2ZW4gYWZ0ZXIgc29tZSBzZXR1cC4gVGhlIGNvcmUgb2YgbXkgd29ycnkgaXMgdGhpcyBgcXVvdGEtJmd0O2VzeiA9PSAwYCBjYXNlLgoKUHJldmlvdXNseSwgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIHNlZW1lZCB0byBoYXZlIGEgcHJvYmxlbSBoZXJlLiBJdCBjaGVja2VkIGBpZiAocXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzeilgLCBhbmQgaWYgYHF1b3RhLSZndDtlc3pgIHdhcyB6ZXJvLCB0aGlzIHdvdWxkIGJlY29tZSBgMCAmZ3Q7PSAwYCwgd2hpY2ggaXMgdHJ1ZSEgVGhhdCBtZWFucyBpZiBgcXVvdGEtJmd0O2VzemAgd2FzIHplcm8sIGl0IHdvdWxkIGluY29ycmVjdGx5IHJlcG9ydCB0aGUgcXVvdGEgYXMgZnVsbC4KCkJ1dCB3YWl0LCB3aHkgaXMgYCFxdW90YS0mZ3Q7ZXN6YCBmYWxzZSB3aGVuIGBxdW90YS0mZ3Q7ZXN6YCBpcyB6ZXJvPyBJcyB0aGUgcXVvdGEgZnVsbCwgb3IgaXMgaXQgemVybywgbWVhbmluZyBubyBxdW90YSBsaW1pdCwgb3Igbm90IGV2ZW4gaW5pdGlhbGl6ZWQ/CgpJZiBgcXVvdGEtJmd0O2VzemAgaXMgemVybywgdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIGlzIGVzc2VudGlhbGx5IHplcm8gYnl0ZXMuIFRoaXMgY291bGQgbWVhbiBubyBzaXplIGxpbWl0IGlzIHNldDsgcGVyaGFwcyBvbmx5IHRpbWUgbGltaXRzIGFwcGx5LCBvciB0aGUgcXVvdGEganVzdCBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgeWV0LgoKVGhpcyBtYXR0ZXJzIGJlY2F1c2UgaW4gYGRhbW9zX2FwcGx5X3NjaGVtZWAgb3IgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIHJldHVybmluZyB0cnVlIHdvdWxkIHByZXZlbnQgc2NoZW1lcyBmcm9tIGJlaW5nIGFwcGxpZWQsIG9yIGNvdWxkIGNhdXNlIGBxdF9leGNlZWRzYCB0byBpbmNyZW1lbnQgZXZlbiB3aXRoIGEgY2hhcmdlZCBzaXplIG9mIHplcm8uIFRoYXQmIzM5O3MgYSBzZXJpb3VzIGJ1ZyEKClNvLCB0aGUgcGF0Y2ggY2xhcmlmaWVzIHRoaXM6IGl0IG5vdyBjaGVja3MgaWYgYGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSlgIGJlZm9yZSBjaGVja2luZyBmb3IgYSB6ZXJvIHNpemUsIGVuc3VyaW5nIHdlIGRvbiYjMzk7dCB0cmVhdCBhIHplcm8tc2l6ZSBxdW90YSBhcyBmdWxsIHVubGVzcyBpdCYjMzk7cyBhY3R1YWxseSBiZWVuIGNvbmZpZ3VyZWQuIEl0IG5vdyByZXR1cm5zIGZhbHNlIGlmIGAhcXVvdGEtJmd0O2VzemAKClRoYXQgcmVzb2x2ZXMgdGhlIHF1b3RhIGlzc3VlLCBzbyBJJiMzOTttIGhhcHB5LgoKKipEQU1PTiBSZWFjaGFiaWxpdHkgYW5kIENvbnRleHQqKgoKT2theSwgc2VwYXJhdGUgdG9waWMuIElzIERBTU9OIGl0c2VsZiByb2J1c3Q/IElzIGl0IHN0YW5kYXJkLCBlYXNpbHkgZnV6emVkIGluIHRoZSB1c3VhbCBMaW51eCBrZXJuZWwgZW52aXJvbm1lbnRzPwoKWWVzLCBEQU1PTiBpcyBjb3JlIE1NIGNvZGUhIEl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBtbS9kYW1vbi9gLCBhIGZpcnN0LWNsYXNzIGNpdGl6ZW4gb2YgdGhlIExpbnV4IGtlcm5lbC4gSXQmIzM5O3MgY29uZmlndXJhYmxlIHRocm91Z2ggc3RhbmRhcmQgaW50ZXJmYWNlcyBsaWtlIHN5c2ZzIChgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW5gKSwgZGVidWdmcywgYW5kIGBzeXNfZGFtb25gLiBTbyBpdCYjMzk7cyByZWFkaWx5IGFjY2Vzc2libGUgYW5kIHRlc3RhYmxlLiBBIHF1aWNrIGNoZWNrIG9mIEtjb25maWcgY29uZmlybXMgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjM1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmaWxlczoKCioqQ2hlY2tpbmcgaW4gb24gRGFtb24mIzM5O3MgV29yayoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGNvb2tpbmcgd2l0aCB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGFtb24gKERBTU9OKSBjb2RlLiBJIHNob3VsZCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBtbS9kYW1vbi9NYWtlZmlsZWAgYW5kIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gVGhlIGBNYWtlZmlsZWAgd2lsbCB0ZWxsIG1lIGhvdyB0aGUgREFNT04gY29kZSBpcyBiZWluZyBidWlsdCBhbmQgbGlua2VkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGZsYWdzLCBzcGVjaWZpYyBzb3VyY2UgZmlsZSBpbmNsdXNpb25zLCBhbmQgYW55IHVudXN1YWwgYnVpbGQgY29uZmlndXJhdGlvbnMuCgpUaGVuLCBJJiMzOTtsbCBtb3ZlIG92ZXIgdG8gdGhlIGBLY29uZmlnYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIERBTU9OIGxpdmUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkL2Rpc2FibGVkLCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSwgYW5kIHdoYXQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWxsb3cuIFRoZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBpbiBLY29uZmlnIGFyZSBhbHNvIG9mIGludGVyZXN0LiBBcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgcHJlc2VudCBmb3IgREFNT04gdG8gZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBEQU1PTiYjMzk7cyBjdXJyZW50IHN0YXRlIGFuZCBhbnkgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBtYWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVsYXRpb25zaGlwcyBhbmQgZGVwZW5kZW5jaWVzIHN1cnJvdW5kaW5nIHRoZSBEQU1PTiBmZWF0dXJlcywgbGlrZSBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGFuZCB0aGUgYWRkcmVzcy1zcGFjZS1zcGVjaWZpYyBvcHRpb25zOiBgQ09ORklHX0RBTU9OX1BBRERSYCBhbmQgYENPTkZJR19EQU1PTl9WQUREUmAuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGFsbCB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgb3IgbXV0dWFsbHkgZXhjbHVzaXZlLCBhbmQgaG93IHRoZSBmZWF0dXJlIGZsYWdzIGltcGFjdCBlYWNoIG90aGVyLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgYSBnaXZlbiBmZWF0dXJlIGFuZCBmb3IgcG90ZW50aWFsbHkgZGVidWdnaW5nIGFueSBjb25maWd1cmF0aW9uIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIHdoZW4gd29ya2luZyB3aXRoIERBTU9OLiBUaGlzIGFsc28gaGVscHMgaW4gYnVpbGRpbmcgdXAgYSBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiAgMjE6XHRcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbiAgMjI6XHRcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcbiAgMjc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyODpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAyOTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIEkgc2VlIHRoYXQgYGNvcmUuY2AgaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaGUga2V5IHNlZW1zIHRvIGJlIGBDT05GSUdfREFNT05gLiBUaGUgYG9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGNvcmUub2Agb3IgdGhlIGBvYmoteSA6PSBjb3JlLm9gIHdpdGhpbiBgbW0vZGFtb24vTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQgYGNvcmUuY2AgaXMgb25seSBpbmNsdWRlZCB3aGVuIGBDT05GSUdfREFNT05gIGlzIGVuYWJsZWQgZHVyaW5nIHRoZSBjb25maWd1cmF0aW9uIHN0YWdlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdXJ0aGVyIHRvIHNlZSBob3cgYENPTkZJR19EQU1PTmAgaXRzZWxmIGlzIGRlZmluZWQgYW5kIHNldC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtbS9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcyBgZGFtb25gIGNvbXBvbmVudC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBNYWtlZmlsZSBpcyBwcm9jZXNzZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBgQ09ORklHX0RBTU9OYCBpcyBldmFsdWF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTM1PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgJiM0Mzs9IGRlYnVnX3BhZ2VfcmVmLm9cbm1tL01ha2VmaWxlOjEzNjpvYmotJChDT05GSUdfREFNT04pICYjNDM7PSBkYW1vbi9cbm1tL01ha2VmaWxlLTEzNy1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDk2CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQU1PTiBRdW90YSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcXVvdGEgaW1wbGljYXRpb25zIHdpdGhpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uIOKAkyB0aGF0IHN0YXRpYyBoZWxwZXIgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGluIHJlbGF0aW9uIHRvIHRoaXMgY2hhbmdlLgoKRmlyc3QsIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMuIEkmIzM5O20gbG9va2luZyBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgb3IgY2FsbGVycyB0aGF0IGV2ZW50dWFsbHkgbGVhZCB0byBgZGFtb3NfcXVvdGFfaXNfZnVsbGAsIG9yIGFjdHVhbGx5IGRyaXZlIHRoZSBEQU1PTiBvcGVyYXRpb25zLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBtYXBwaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIHF1b3RhIGNoZWNraW5nLgoKTmV4dCwgSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2NvcGUuIEkmIzM5O2xsIGV4YW1pbmUgYW55IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSwgZXNwZWNpYWxseSB3aXRoaW4gYGNvcmUuY2AsIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgZGlyZWN0bHkgY2FsbCwgb3IgaW5kaXJlY3RseSBpbmZsdWVuY2UsIHRoZSBzY2hlbWUgaGFuZGxpbmcgbG9naWMuCgpGaW5hbGx5LCBJIHdhbnQgYSBtb3JlIGNvbXByZWhlbnNpdmUgbGlzdCB3aXRoaW4gYGNvcmUuY2AuIEkmIzM5O2xsIHNlYXJjaCBmb3IgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgYW5kIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBvciBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2UgYW4gZW50cnkgcG9pbnQgZm9yIERBTU9OLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB3aGVyZSBxdW90YSBjaGVja3MgYXJlIHBlcmZvcm1lZCBhbmQgaG93IHRoZXkgaW1wYWN0IERBTU9OJiMzOTtzIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fZG9fYXBwbHlfc2NoZW1lc3xkYW1vc19hZGp1c3RfcXVvdGF8a2RhbW9uZF9mbnxkYW1vbl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzUtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXG5tbS9kYW1vbi9jb3JlLmM6MTAzNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwMzctICpcbm1tL2RhbW9uL2NvcmUuYy0xMDM4LSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxubW0vZGFtb24vY29yZS5jOjEwMzk6ICogc2V0dXAgb2YgZGFtb25fY3R4IGJlZm9yZSBjYWxsaW5nIGRhbW9uX3N0YXJ0KCkuICBTb21lIG9mIHRoZSBBUEkgY2FsbGVyc1xubW0vZGFtb24vY29yZS5jLTEwNDAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXG5tbS9kYW1vbi9jb3JlLmM6MTA0MTogKiBvbmxpbmUgcGFyYW1ldGVycyB1cGRhdGVzLiAgRmluYWxseSwga2RhbW9uZF9mbigpIGl0c2VsZiB1c2UgdGhpcyBmb3Jcbm1tL2RhbW9uL2NvcmUuYy0xMDQyLSAqIGFwcGx5aW5nIGF1dG8tdHVuZWQgbW9uaXRvcmluZyBpbnRlcnZhbHMuXG4tLVxubW0vZGFtb24vY29yZS5jPTEwNDg9aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwNzQtXHQvKlxubW0vZGFtb24vY29yZS5jOjEwNzU6XHQgKiBuZXh0X2ludGVydmFsc190dW5lX3NpcyB3aWxsIGJlIHVwZGF0ZWQgaW5zaWRlIGtkYW1vbmRfZm4oKS5cbm1tL2RhbW9uL2NvcmUuYy0xMDc2LVx0ICovXG4tLVxubW0vZGFtb24vY29yZS5jPTE5MDU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fYXBwbHlfbWluX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTI0LVxubW0vZGFtb24vY29yZS5jOjE5MjU6c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xubW0vZGFtb24vY29yZS5jLTE5MjYtXG5tbS9kYW1vbi9jb3JlLmMtMTkyNy0vKlxubW0vZGFtb24vY29yZS5jOjE5Mjg6ICogX19kYW1vbl9zdGFydCgpIC0gU3RhcnRzIG1vbml0b3Jpbmcgd2l0aCBnaXZlbiBjb250ZXh0LlxubW0vZGFtb24vY29yZS5jLTE5MjktICogQGN0eDpcdG1vbml0b3JpbmcgY29udGV4dFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTM0LSAqL1xubW0vZGFtb24vY29yZS5jOjE5MzU6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0xOTM2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk0Mi1cdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZWtkYW1vbmRfc3RhcnRlZCk7XG5tbS9kYW1vbi9jb3JlLmM6MTk0MzpcdFx0Y3R4LVx1MDAzZWtkYW1vbmQgPSBrdGhyZWFkX3J1bihrZGFtb25kX2ZuLCBjdHgsIFwmIzM0O2tkYW1vbmQuJWRcJiMzNDssXG5tbS9kYW1vbi9jb3JlLmMtMTk0NC1cdFx0XHRcdG5yX3J1bm5pbmdfY3R4cyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTU5LS8qKlxubW0vZGFtb24vY29yZS5jOjE5NjA6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG5tbS9kYW1vbi9jb3JlLmMtMTk2MS0gKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTY4LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxubW0vZGFtb24vY29yZS5jOjE5Njk6ICogJiMzOTtkYW1vbl9zdGFydCgpJiMzOTsgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XG5tbS9kYW1vbi9jb3JlLmMtMTk3MC0gKiByZXR1cm5zIC1FQlVTWS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTE5NzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTk5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMDAwOlx0XHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTIwMDEtXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTIwMzk9dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA0My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2N0eHM7IGkmIzQzOyYjNDM7KVxubW0vZGFtb24vY29yZS5jOjIwNDQ6XHRcdC8qIG5yX3J1bm5pbmdfY3R4cyBpcyBkZWNyZW1lbnRlZCBpbiBrZGFtb25kX2ZuICovXG5tbS9kYW1vbi9jb3JlLmMtMjA0NS1cdFx0X19kYW1vbl9zdG9wKGN0eHNbaV0pO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDcwPWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwOTctICpcbm1tL2RhbW9uL2NvcmUuYzoyMDk4OiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG5tbS9kYW1vbi9jb3JlLmMtMjA5OS0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjEwNj1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNTItICpcbm1tL2RhbW9uL2NvcmUuYzoyMTUzOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG5tbS9kYW1vbi9jb3JlLmMtMjE1NC0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjU3ND1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY0My1cbm1tL2RhbW9uL2NvcmUuYzoyNjQ0OnN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0yNjQ1LVx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjY5Nj1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjcwMy1cbm1tL2RhbW9uL2NvcmUuYzoyNzA0Olx0XHRkYW1vbl9kb19hcHBseV9zY2hlbWVzKGMsIHQsIHIpO1xubW0vZGFtb24vY29yZS5jLTI3MDUtXHRcdC8qXG4tLVxubW0vZGFtb24vY29yZS5jPTMxMjY9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzEzOS1cbm1tL2RhbW9uL2NvcmUuYzozMTQwOnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzE0MS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMyMjE9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyMzYtXG5tbS9kYW1vbi9jb3JlLmM6MzIzNzpcdFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTMyMzgtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTM3MzI9c3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTM3NTMtICovXG5tbS9kYW1vbi9jb3JlLmM6Mzc1NDpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbm1tL2RhbW9uL2NvcmUuYy0zNzU1LXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDIyOlx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIzLVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzMwPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM0Mi1cbm1tL2RhbW9uL3JlY2xhaW0uYzozNDM6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vcmVjbGFpbS5jLTM0NC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZkYW1vbl9zdGF0X2NvbnRleHQsIDEsIHRydWUpO1xubW0vZGFtb24vc3RhdC5jLTIxNC1cdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjI2Ny1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjI2ODpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xubW0vZGFtb24vc3lzZnMuYy0yMjY5LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNjM1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjYxLSAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE2NjI6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXCYjMzQ7bW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlXCYjMzQ7KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2NjMtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTIwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gS2VybmVsIE1vZHVsZSBFeGFtaW5hdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgREFNT04ga2VybmVsIG1vZHVsZSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHksIHBhcnRpY3VsYXJseSBob3cgdGhlIGRhdGEgYWNjZXNzIG1vbml0b3Igb3BlcmF0ZXMuIEZpcnN0LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYGtkYW1vbmRfZm5gIOKAkyB0aGF0JiMzOTtzIHRoZSBtYWluIERBTU9OIGtlcm5lbCB0aHJlYWQsIHJpZ2h0PyBJIHdhbnQgdG8gZW5zdXJlIEkgZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgaW4gdGhlIG1vbml0b3JpbmcgcHJvY2Vzcy4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgYXQgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYHN5c2ZzLmNgLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgZXhwb3NlZCBhcyBpdHMgbWFpbiBBUEkgZnVuY3Rpb25zPyBJIGhhdmUgYSBmZWVsaW5nIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgY2FsbHMgdG8gYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBhbmQgYGRhbW9uX3N5c2ZzX2NtZF9yZXF1ZXN0YC4gVGhvc2Ugc2hvdWxkIGJlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBmb3Igc3RhcnRpbmcsIGNvbW1pdHRpbmcgY29udGV4dHMsIHNldHRpbmcgc2NoZW1lcywgYW5kIGhhbmRsaW5nIHN5c2ZzIGNvbW1hbmRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgQVBJcyBhbmQgYGtkYW1vbmRfZm5gLiBGaW5hbGx5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZXhwb3J0ZWQgc3ltYm9scyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2Ag4oCTIGEgcXVpY2sgY2hlY2sgdG8gdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW50ZW50aW9uYWxseSBleHBvc2VkIHRvIHRoZSB3aWRlciBrZXJuZWwgYW5kIHRvIGV4dGVybmFsIG1vZHVsZXMuIFRoYXQgbGlzdCBvZiBzeW1ib2xzIHNob3VsZCByb3VuZCBvdXQgbXkgb3ZlcnZpZXcgb2YgdGhlIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBkYW1vbl98XnZvaWQgZGFtb25ffF5zdHJ1Y3QgLiogXFwqZGFtb25fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz01MD1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MC0gKi9cbm1tL2RhbW9uL2NvcmUuYzo3MTppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXG5tbS9kYW1vbi9jb3JlLmMtNzIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzo5ODppbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxubW0vZGFtb24vY29yZS5jLTk5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEzLVxubW0vZGFtb24vY29yZS5jOjExNDpzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbm1tL2RhbW9uL2NvcmUuYy0xMTUtXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXG4tLVxubW0vZGFtb24vY29yZS5jLTEyOC1cbm1tL2RhbW9uL2NvcmUuYzoxMjk6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0xMzAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzk9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQzLVxubW0vZGFtb24vY29yZS5jOjE0NDp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTQ1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTUwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9udGhfZmlsdGVyKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG4tLVxubW0vZGFtb24vY29yZS5jLTE2MS1cbm1tL2RhbW9uL2NvcmUuYzoxNjI6c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbm1tL2RhbW9uL2NvcmUuYy0xNjMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzQtXG5tbS9kYW1vbi9jb3JlLmM6MTc1OnZvaWQgZGFtb25fYWRkX3Byb2JlKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSlcbm1tL2RhbW9uL2NvcmUuYy0xNzYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTg9c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyNy0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMjg6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbm1tL2RhbW9uL2NvcmUuYy0zMjkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz00NDU9c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0Nzg6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTY2OT1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTY4MS1cbm1tL2RhbW9uL2NvcmUuYzo2ODI6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbm1tL2RhbW9uL2NvcmUuYy02ODMtXHRcdFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz03MjQ9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MzQtXG5tbS9kYW1vbi9jb3JlLmM6NzM1OnZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy03MzYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz03NDY9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NTAtXG5tbS9kYW1vbi9jb3JlLmM6NzUxOnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTc1Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTc3NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo3NzY6c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxubW0vZGFtb24vY29yZS5jLTc3Ny17XG4tLVxubW0vZGFtb24vY29yZS5jLTc5Mi1cbm1tL2RhbW9uL2NvcmUuYzo3OTM6dm9pZCBkYW1vbl9hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy03OTQte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04MDM9c3RhdGljIHZvaWQgZGFtb25fZGVsX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy04MDctXG5tbS9kYW1vbi9jb3JlLmM6ODA4OnZvaWQgZGFtb25fZnJlZV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy04MDkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04MTYtXG5tbS9kYW1vbi9jb3JlLmM6ODE3OnZvaWQgZGFtb25fZGVzdHJveV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTgxOC17XG4tLVxubW0vZGFtb24vY29yZS5jPTgyNz11bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy04MzEtXG5tbS9kYW1vbi9jb3JlLmM6ODMyOnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbm1tL2RhbW9uL2NvcmUuYy04MzMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04NzI9c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODc5LVxubW0vZGFtb24vY29yZS5jOjg4MDp2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy04ODEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwNDctICovXG5tbS9kYW1vbi9jb3JlLmM6MTA0ODppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbm1tL2RhbW9uL2NvcmUuYy0xMDQ5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA5NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMDk2OnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxubW0vZGFtb24vY29yZS5jLTEwOTctXHRcdFx0c3NpemVfdCBucl9zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODA5PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODM3LSAqL1xubW0vZGFtb24vY29yZS5jOjE4Mzg6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTgzOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTE4NTctICovXG5tbS9kYW1vbi9jb3JlLmM6MTg1ODppbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtMTg1OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTczLSAqL1xubW0vZGFtb24vY29yZS5jOjE5NzQ6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwMTk9c3RhdGljIHZvaWQgX19kYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAzOC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXG5tbS9kYW1vbi9jb3JlLmMtMjA0MC17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwNTQ9Ym9vbCBkYW1vbl9pc19ydW5uaW5nKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA2OS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDcwOmludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjA3MS17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMDUtICovXG5tbS9kYW1vbi9jb3JlLmM6MjEwNjppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG5tbS9kYW1vbi9jb3JlLmMtMjEwNy17XG4tLVxubW0vZGFtb24vY29yZS5jPTM5NTI9c3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk4My0gKi9cbm1tL2RhbW9uL2NvcmUuYzozOTg0OmludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0zOTg1LVx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMDgtICovXG5tbS9kYW1vbi9jb3JlLmM6NDAwOTp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcbm1tL2RhbW9uL2NvcmUuYy00MDEwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MzIKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIERBTU9OIGFuYWx5c2lzIGFyZSBjbGVhcmx5IGRlZmluZWQ6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9jb21taXRfY3R4YCwgYW5kIGBkYW1vbl9uZXdfc2NoZW1lYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBlbnRyeSBwb2ludHMgb3IgY3JpdGljYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIGZyYW1ld29yay4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGVzZS4KCk5vdywgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIGhhdmUgaWRlbnRpZmllZCBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1ZBRERSYCBhcyBpbXBvcnRhbnQgY29uZmlndXJhdGlvbnMgdG8gY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZywgc28gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGluIGBtbS9kYW1vbi9LY29uZmlnYCBmb3Igb3RoZXIgcmVsYXRlZCBkZXBlbmRlbmNpZXMuCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSwgYERBTU9OYCBpdHNlbGYgZG9lc24mIzM5O3QgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIHdoaWNoIHNlZW1zIHNlbnNpYmxlIGZvciBhIHRvcC1sZXZlbCBtZW51IGl0ZW0uICBgREFNT05fU1lTRlNgIGlzIGNvbnRpbmdlbnQgb24gYm90aCBgREFNT05gIGFuZCBgU1lTRlNgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGZvciBlbmFibGluZyBzeXN0ZW0gZmlsZS1iYXNlZCBhY2Nlc3MuIFRoZW4sIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9WQUREUmAgZGVwZW5kIG9uIGBEQU1PTmAgYW5kIGBNTVVgLiBUaGlzIG1ha2VzIGxvZ2ljYWwgc2Vuc2UgYXMgd2VsbCwgbWFwcGluZyBwaHlzaWNhbCBvciB2aXJ0dWFsIGFkZHJlc3NlcyBpcyBvbmx5IHBvc3NpYmxlIGlmIERBTU9OIGlzIGVuYWJsZWQgYW5kIGFuIE1NVSBpcyBwcmVzZW50LiBJIGFsc28gbmVlZCB0byBub3RlIGBEQU1PTl9SRUNMQUlNYCBkZXBlbmRzIG9uIGBEQU1PTiAmYW1wOyZhbXA7IERBTU9OX1BBRERSYCBhbmQgYERBTU9OX0xSVV9TT1JUYCBkZXBlbmRzIG9uIGBEQU1PTiAmYW1wOyZhbXA7IERBTU9OX1BBRERSYCwgYnV0LCB0aG9zZSBhcmUgc2Vjb25kYXJ5IGZvciBub3cuCgpUaGUgbWFpbiBxdWVzdGlvbiBpcywgc2hvdWxkIEkgbWFyayB0aGlzIHBhdGNoIGFzIHdvcnRoIGZ1enppbmc/IFRoZSBtb2RpZmljYXRpb24gdG8gYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGlzIGEgY3JpdGljYWwgZml4LCBzcGVjaWZpY2FsbHkgaW4gdGhlIERBTU9OIE9wZXJhdGlvbiBTY2hlbWVzIChEQU1PUykgcXVvdGEgbWFuYWdlbWVudC4gSXQgZGlyZWN0bHkgaW1wYWN0cyBob3cgREFNT04gZGV0ZXJtaW5lcyB3aGV0aGVyIGEgcXVvdGEgaXMgZXhoYXVzdGVkIG9yIGZ1bGwgd2hlbiB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgaXMgemVyby4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBjb3JlIGZ1bmN0aW9uYWxpdHksIGFuZCBzaW5jZSBpdCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIHN5c2ZzLCByZWNsYW1hdGlvbiwgYW5kIG1vbml0b3JpbmcgQVBJcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIHNpZ25pZmljYW50IGVub3VnaCwgYW5kIHRoZSBpbXBhY3QgaXMgaW1wb3J0YW50IGVub3VnaCwgc28gSSYjMzk7bGwgbWFyayBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpUaGVyZWZvcmUsIEkgY2FuIG5vdyBhc3NlbWJsZSBteSBjb25jbHVzaW9uczoKCiogICBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgYEZvY3VzU3ltYm9sczogWyYjMzQ7ZGFtb25fc3RhcnQmIzM0OywgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0RBTU9OJiMzNDssICYjMzQ7REFNT05fU1lTRlMmIzM0OywgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LCAmIzM0O0RBTU9OX1ZBRERSJiMzNDtdYAoqICAgYFJlYXNvbmluZzogQ29yZSBmdW5jdGlvbmFsIGZpeCBpbiBEQU1PUyBxdW90YSBtYW5hZ2VtZW50LCByZWFjaGFibGUgdmlhIHVzZXJzcGFjZSBEQU1PTiBBUElzLmAKCkZpbmFsbHksIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX25ld19zY2hlbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGFtb3NfcXVvdGFfaXNfZnVsbCgpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgKGVzeikgaXMgemVyby4gVGhpcyBmdW5jdGlvbmFsbHkgYWx0ZXJzIERBTU9TIHF1b3RhIGVuZm9yY2VtZW50IGFuZCByZWdpb24gYXBwbGljYXRpb24gYmVoYXZpb3IgaW4gdGhlIERBTU9OIG1lbW9yeSBtb25pdG9yaW5nIHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBjb25maWd1cmFibGUgdmlhIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkYW1vc19xdW90YV9pc19mdWxsKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJldHVybiBmYWxzZSB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIGZ1bmN0aW9uYWxseSBhbHRlcnMgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIHJlZ2lvbiBhcHBsaWNhdGlvbiBiZWhhdmlvciBpbiB0aGUgREFNT04gbWVtb3J5IG1vbml0b3Jpbmcgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgc3lzZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGBpZiAoIXF1b3RhLVx1MDAzZWVzeikgcmV0dXJuIGZhbHNlO2ApIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGluIG1tL2RhbW9uL2NvcmUuYyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIChgZXN6YCkgaXMgemVyby4gVGhpcyBpcyBhIHB1cmVseSBpbnRlcm5hbCBsb2dpYyBjaGFuZ2Ugd2l0aGluIERBTU9OJiMzOTtzIHF1b3RhIGVuZm9yY2VtZW50IG1lY2hhbmlzbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFmZmVjdCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbiBvciBidWZmZXIgaGFuZGxpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVkNTZmYWY4ZmYwNTQ5YjQ4N2NhMjMwZGMyOTlmYWNlNTNlM2I3YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA3OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjAuLjUzY2YzMmYxZDUxNWMgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTI1NjAsNiAmIzQzOzI1NjAsOCBAQCBzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsCiB7CiAJaWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKQogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghcXVvdGEtJmd0O2VzeikKJiM0MzsJCXJldHVybiBmYWxzZTsKIAlpZiAocXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzeikKIAkJcmV0dXJuIHRydWU7CiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gQ29yZSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdG8gcmV2aWV3LCBhbmQgdGhlIGNydWNpYWwgYXJlYSBhcHBlYXJzIHRvIGJlIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbml0aWFsIG1vdmUgaXMgdG8gemVybyBpbiBvbiB0aGF0IGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGNvbnRleHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBicmluZyB1cCB0aGUgZmlsZSB0byByZXZpZXcgaXQgYW5kIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMuCgpJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGxpbmUgMjU2MCBhbmQgaXRzIGltbWVkaWF0ZSB2aWNpbml0eS4gSSYjMzk7bGwgdXNlIGEgYHJlYWQtZmlsZWAgY29tbWFuZCwgb3Igc29tZXRoaW5nIHNpbWlsYXIgaW4gbXkgcHJlZmVycmVkIGVudmlyb25tZW50LCB0byBnZXQgYSBjbGVhciB2aWV3IG9mIHRoYXQgc2VjdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGRldGVybWluZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1NDA6XHRcbjI1NDE6XHRzdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjI1NDI6XHRcdFx0dW5zaWduZWQgbG9uZyBzel9yZWdpb24sIHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZClcbjI1NDM6XHR7XG4yNTQ0Olx0XHQvKlxuMjU0NTpcdFx0ICogc3pfYXBwbGllZCBjb3VsZCBiZSBiaWdnZXIgdGhhbiBzel9yZWdpb24sIGRlcGVuZGluZyBvbiBvcHNcbjI1NDY6XHRcdCAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhY3Rpb24sIGUuZy4sIGRhbW9zX3BhX3BhZ2VvdXQoKS4gIENoYXJnZSBvbmx5XG4yNTQ3Olx0XHQgKiB0aGUgcmVnaW9uIHNpemUgaW4gdGhlIGNhc2UuXG4yNTQ4Olx0XHQgKi9cbjI1NDk6XHRcdGlmICghcXVvdGEtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20gfHwgc3pfYXBwbGllZCBcdTAwM2Ugc3pfcmVnaW9uKVxuMjU1MDpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ICYjNDM7PSBzel9yZWdpb247XG4yNTUxOlx0XHRlbHNlXG4yNTUyOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzs9IHN6X2FwcGxpZWQgJiM0MzsgbXVsdF9mcmFjKFxuMjU1MzpcdFx0XHRcdFx0KHN6X3JlZ2lvbiAtIHN6X2FwcGxpZWQpLFxuMjU1NDpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlZmFpbF9jaGFyZ2VfbnVtLFxuMjU1NTpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xuMjU1NjpcdH1cbjI1NTc6XHRcbjI1NTg6XHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4yNTU5Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbjI1NjA6XHR7XG4yNTYxOlx0XHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4yNTYyOlx0XHRcdHJldHVybiBmYWxzZTtcbjI1NjM6XHRcdGlmICghcXVvdGEtXHUwMDNlZXN6KVxuMjU2NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yNTY1Olx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcbjI1NjY6XHRcdFx0cmV0dXJuIHRydWU7XG4yNTY3Olx0XHQvKlxuMjU2ODpcdFx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXHUwMDNjbWluX3JlZ2lvbl9zeiByZW1haW5pbmdcbjI1Njk6XHRcdCAqIHF1b3RhIG1lYW5zIHRoZSBxdW90YSBpcyBlZmZlY3RpdmVseSBmdWxsLlxuMjU3MDpcdFx0ICovXG4yNTcxOlx0XHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zejtcbjI1NzI6XHR9XG4yNTczOlx0XG4yNTc0Olx0c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNTc1Olx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcbjI1NzY6XHR7XG4yNTc3Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbjI1Nzg6XHRcdHVuc2lnbmVkIGxvbmcgc3ogPSBkYW1vbl9zel9yZWdpb24ocik7XG4yNTc5Olx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBiZWdpbiwgZW5kO1xuMjU4MDpcdFx0dW5zaWduZWQgbG9uZyBzel9hcHBsaWVkID0gMDtcbjI1ODE6XHRcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQgPSAwO1xuMjU4MjpcdFx0LypcbjI1ODM6XHRcdCAqIFdlIHBsYW4gdG8gc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0IHBlciBrZGFtb25kLCBhcyBEQU1PTiBzeXNmc1xuMjU4NDpcdFx0ICogaW1wbGllcyB3aXRoICYjMzk7bnJfY29udGV4dHMmIzM5OyBmaWxlLiAgTmV2ZXJ0aGVsZXNzLCBvbmx5IHNpbmdsZSBjb250ZXh0XG4yNTg1Olx0XHQgKiBwZXIga2RhbW9uZCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gIFNvLCB3ZSBjYW4gc2ltcGx5IHVzZSAmIzM5OzAmIzM5OyBjb250ZXh0XG4yNTg2Olx0XHQgKiBpbmRleCBoZXJlLlxuMjU4NzpcdFx0ICovXG4yNTg4Olx0XHR1bnNpZ25lZCBpbnQgY2lkeCA9IDA7XG4yNTg5Olx0XHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1x0XHQvKiBzY2hlbWVzIGl0ZXJhdG9yICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKWAgYW5kIGBlc3pgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZWlyIGltcGxlbWVudGF0aW9uIGFuZCBob3cgdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGxvZ2ljIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBxdW90YSBzZXR0aW5nLCB3aGljaCBpcyBrZXkuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBsaW5lcyBsZWFkaW5nIHVwIHRvIHRoZSBjYWxscywgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBIb3BlZnVsbHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgcmV2ZWFscyB0aGUgaW50ZW50aW9uIGFuZCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3F1b3RhX2lzX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yMjc2PXN0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI5MS0vKlxubW0vZGFtb24vY29yZS5jOjIyOTI6ICogZGFtb3NfcXVvdGFfaXNfc2V0KCkgLSBSZXR1cm4gaWYgdGhlIGdpdmVuIHF1b3RhIGlzIGFjdHVhbGx5IHNldC5cbm1tL2RhbW9uL2NvcmUuYy0yMjkzLSAqIEBxdW90YTpcdFRoZSBxdW90YSB0byBjaGVjay5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI5Ni0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMjk3OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxubW0vZGFtb24vY29yZS5jLTIyOTgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMzAzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMzA3LVxubW0vZGFtb24vY29yZS5jOjIzMDg6XHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxubW0vZGFtb24vY29yZS5jLTIzMDktXHRcdHJldHVybiByZXQ7XG4tLVxubW0vZGFtb24vY29yZS5jPTI1NTg9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNTYwLXtcbm1tL2RhbW9uL2NvcmUuYzoyNTYxOlx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxubW0vZGFtb24vY29yZS5jLTI1NjItXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjU3ND1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjYxMS1cdGlmIChjLVx1MDAzZW9wcy5hcHBseV9zY2hlbWUpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNjEyOlx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSBcdTAwMjZcdTAwMjZcbm1tL2RhbW9uL2NvcmUuYy0yNjEzLVx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiAmIzQzOyBzeiBcdTAwM2UgcXVvdGEtXHUwMDNlZXN6KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGRhbW9zX3F1b3RhX2lzX3NldGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkYW1vc19xdW90YV9pc19zZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSBxdW90YSBpcywgd2VsbCwgKnNldCouIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHJldmlldyB0aGUgY29kZSB0byBpZGVudGlmeSB0aGUga2V5IHZhcmlhYmxlcyBvciBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgcmVmZXJlbmNpbmcuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHVuZGVybHlpbmcgbG9naWMg4oCTIGlzIGl0IGNoZWNraW5nIGEgY29uZmlndXJhdGlvbiBmaWxlLCBxdWVyeWluZyBhIGRhdGFiYXNlLCBvciBwZXJoYXBzIHJlbHlpbmcgb24gc29tZSBpbnRlcm5hbCBzdGF0ZT8gSXMgaXQgY2hlY2tpbmcgZm9yIGEgc3BlY2lmaWMgdmFsdWUgb3IgYSByYW5nZT8gQW55IGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVkZ2UgY2FzZXMuIE1vcmUgaW1wb3J0YW50bHksIGhvdyByb2J1c3QgaXMgdGhpcyBpbXBsZW1lbnRhdGlvbj8gSXMgdGhlcmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nPyBXaGF0IGhhcHBlbnMgaWYgdGhlIHNvdXJjZSBkYXRhIGlzIHVuYXZhaWxhYmxlIG9yIGNvcnJ1cHRlZD8gV2hhdCYjMzk7cyB0aGUgaW1wYWN0IG9uIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gaWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIHVuZXhwZWN0ZWQgdmFsdWUsIGFuZCBpcyB0aGVyZSBhbnkgbG9nZ2luZyB0byB0cmFjayBpdHMgYmVoYXZpb3VyPyBUaGUgZ29hbCBpcyB0byB2ZXJpZnkgaWYgaXQgaXMgYWxpZ25lZCB3aXRoIHRoZSBleHBlY3RhdGlvbnMsIGFuZCBpdHMgYmVoYXZpb3VyIHVuZGVyIG5vcm1hbCBhbmQgZXhjZXB0aW9uYWwgY2lyY3Vtc3RhbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyOTA6XHRcbjIyOTE6XHQvKlxuMjI5MjpcdCAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXG4yMjkzOlx0ICogQHF1b3RhOlx0VGhlIHF1b3RhIHRvIGNoZWNrLlxuMjI5NDpcdCAqXG4yMjk1Olx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdW90YSBpcyBzZXQsIGZhbHNlIG90aGVyd2lzZS5cbjIyOTY6XHQgKi9cbjIyOTc6XHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbjIyOTg6XHR7XG4yMjk5Olx0XHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IHx8IHF1b3RhLVx1MDAzZXN6IHx8IHF1b3RhLVx1MDAzZW1zIHx8XG4yMzAwOlx0XHRcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XG4yMzAxOlx0fVxuMjMwMjpcdFxuMjMwMzpcdHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuMjMwNDpcdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4yMzA1Olx0e1xuMjMwNjpcdFx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcbjIzMDc6XHRcbjIzMDg6XHRcdGlmICghcmV0IHx8ICFkYW1vc19xdW90YV9pc19zZXQoXHUwMDI2cy1cdTAwM2VxdW90YSkgfHwgIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG4yMzA5Olx0XHRcdHJldHVybiByZXQ7XG4yMzEwOlx0XG4yMzExOlx0XHRyZXR1cm4gYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcdTAwM2U9IHMtXHUwMDNlcXVvdGEubWluX3Njb3JlO1xuMjMxMjpcdH1cbjIzMTM6XHRcbjIzMTQ6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQU1PTiBRdW90YSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBxdW90YSBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIHNjZW5hcmlvLiBJdCBzZWVtcyB3ZSBoYXZlIGEgc2l0dWF0aW9uIHdoZXJlIGBxdW90YS0mZ3Q7ZXN6YCBtaWdodCBiZSB6ZXJvLCBidXQgYGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSlgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyBmb3IgbWUgYmVjYXVzZSwgY29uY2VwdHVhbGx5LCBpZiB0aGUgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSBpcyB6ZXJvLCBob3cgY2FuIHRoZSBxdW90YSAqYmUqIHNldCwgcmlnaHQ/CgpUaGUgb3JpZ2luYWwgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uIGhhZCBhIHBvdGVudGlhbCBidWcuIFdpdGggYHF1b3RhLSZndDtlc3pgIGF0IHplcm8gYW5kLCBsZXQmIzM5O3Mgc2F5LCBgcXVvdGEtJmd0O2NoYXJnZWRfc3pgIGFsc28gemVybywgdGhlIGNvbmRpdGlvbiBgcXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzemAgd291bGQgZXZhbHVhdGUgdG8gYHRydWVgLCBpbmNvcnJlY3RseSBtYXJraW5nIHRoZSBxdW90YSBhcyBmdWxsLiBFc3NlbnRpYWxseSwgaXQgd2FzIHRyaWdnZXJpbmcgYSAmIzM0O2Z1bGwmIzM0OyBzdGF0ZSBldmVuIHdoZW4gbm8gcXVvdGEgd2FzIGFjdHVhbGx5IGVzdGFibGlzaGVkLiBPciBhdCBsZWFzdCwgbm90IGNhbGN1bGF0ZWQgeWV0LgoKVGhlIHBhdGNoJiMzOTtzIGFkZGl0aW9uLCBzcGVjaWZpY2FsbHkgYGlmICghcXVvdGEtJmd0O2VzeikgcmV0dXJuIGZhbHNlO2AsIHRhY2tsZXMgdGhpcyBoZWFkLW9uLiBJdCYjMzk7cyBhIGNsZWFuLCBsb2dpY2FsIGNoZWNrLiBJZiBgZXN6YCBpcyB6ZXJvLCB3ZSAqa25vdyogdGhlIHF1b3RhIGlzbiYjMzk7dCBmdWxsLCBzbyB3ZSBzaG9ydC1jaXJjdWl0IHRoZSBmdW5jdGlvbiYjMzk7cyBldmFsdWF0aW9uLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGZpeC4KCk5vdywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSB1c3VhbCBzdXNwZWN0cyB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcHJvYmxlbXMuIEl0JiMzOTtzIHN0cmljdGx5IGEgbG9naWNhbCBjaGVjayB3aXRoaW4gREFNT04mIzM5O3MgcXVvdGEgdHJhY2tpbmcuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIChubyBgY29weV90b191c2VyYCBjYWxscyksIG9yIGFsdGVyYXRpb25zIHRvIGJ1ZmZlciBzaXplcyBvciBib3VuZGFyaWVzLiBUaGlzIGNoZWNrIGRvZXNuJiMzOTt0IHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBxdW90YS0mZ3Q7ZXN6YCwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IGRhbW9zX3F1b3RhYCBzdHJ1Y3R1cmUsIGFuZCBpdCYjMzk7cyBhbGxvY2F0ZWQvaW5pdGlhbGl6ZWQgZHVyaW5nIERBTU9OIHNldHVwLiBTbywgaXQmIzM5O3MgcHJldHR5IHNlbGYgY29udGFpbmVkLgoKQWxsIGluIGFsbCwgdGhpcyBsb29rcyBsaWtlIGEgc291bmQsIHRhcmdldGVkIGZpeCBmb3IgYSBsb2dpY2FsIGluY29uc2lzdGVuY3kgaW4gdGhlIHF1b3RhIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkYW1vc19xdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTYwPWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNzMtLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTc0OiAqIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIC0gREFNT1Mgc2NoZW1lIHF1b3RhIGF1dG8tdHVuaW5nIGdvYWwuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTc1LSAqIEBtZXRyaWM6XHRcdE1ldHJpYyB0byBiZSB1c2VkIGZvciByZXByZXNlbnRpbmcgdGhlIGdvYWwuXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5NS0gKi9cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxOTY6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5Ny1cdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0yMjE9ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjI2LS8qKlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjIyNzogKiBzdHJ1Y3QgZGFtb3NfcXVvdGEgLSBDb250cm9scyB0aGUgYWdncmVzc2l2ZW5lc3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMjgtICogQHJlc2V0X2ludGVydmFsOlx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjczLSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjI3NDpzdHJ1Y3QgZGFtb3NfcXVvdGEge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTI3NS1cdHVuc2lnbmVkIGxvbmcgcmVzZXRfaW50ZXJ2YWw7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTMzOT1zdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTM2NC0gKiBkZXRlcm1pbmVkIHRoZSByZWdpb24gYXMgZWxpZ2libGUgdG8gYXBwbHkgdGhlIGFjdGlvbi4gIFRoZSBhY2Nlc3MgcGF0dGVyblxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjM2NTogKiAoXHUwMDI2c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKSwgcXVvdGFzIChcdTAwMjZzdHJ1Y3QgZGFtb3NfcXVvdGEpLCB3YXRlcm1hcmtzXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzY2LSAqIChcdTAwMjZzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcykgYW5kIGZpbHRlcnMgKFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIpIHRoYXQgaGFuZGxlZFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD01NTU9c3RydWN0IGRhbW9zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNTU4LVx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cztcbmluY2x1ZGUvbGludXgvZGFtb24uaDo1NTk6XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNTYwLVx0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDM4PXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZik7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAzOS1cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDQwOnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDQxLVx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDQyLVx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0Mzp2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDQ6dm9pZCBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDUtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA0Nj1zdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDQ4LVx0XHRcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXMsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0OTpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTAtXHRcdFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3MgKndtYXJrcyxcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA1Mz12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA1NDppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMxOQoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBRdW90YSBQYXRjaCoqCgpPa2F5LCB0aGlzIGlzIGFib3V0IGFzIGNsZWFuIGFuZCBzaW1wbGUgYXMgaXQgZ2V0cy4gVGhlIHBhdGNoIGlzIGluY3JlZGlibHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBqdXN0IGEgc2luZ2xlIGNoZWNrLCBgaWYgKCFxdW90YS0mZ3Q7ZXN6KSByZXR1cm4gZmFsc2U7YCwgd2l0aGluIHRoZSBgZGFtb3NfcXVvdGFfaXNfZnVsbCgpYCBmdW5jdGlvbi4gVGhpcyBpcyBncmVhdDsgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MgYXQgYWxsLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIG5vIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha3MsIG5vIG5ldyBhbGxvY2F0aW9ucyB0aGF0IG5lZWQgc2NydXRpbnksIGFuZCBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBjb3B5aW5nIHRoYXQgd291bGQgd2FycmFudCBleHRyYSBhdHRlbnRpb24uIEhvbmVzdGx5LCB0aGlzIGlzIGFsbW9zdCBib3JpbmcgaW4gaXRzIGxhY2sgb2YgY29tcGxleGl0eSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIQoKU3RhbmRhcmQgdGVzdGluZyBwcm90b2NvbHMgYW5kIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGlzIGNoYW5nZS4gVGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIGVxdWF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgcGF0Y2g7IGl0JiMzOTtzIG92ZXJraWxsIGdpdmVuIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9uLgoKVGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIHByb3ZpZGUgYSBjb25jaXNlIGFuZCB1bmRlcnN0YW5kYWJsZSBleHBsYW5hdGlvbi4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGUgZGVzY3JpcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYGlmICghcXVvdGEtXHUwMDNlZXN6KSByZXR1cm4gZmFsc2U7YCkgaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgaW4gbW0vZGFtb24vY29yZS5jIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgKGBlc3pgKSBpcyB6ZXJvLiBUaGlzIGlzIGEgcHVyZWx5IGludGVybmFsIGxvZ2ljIGNoYW5nZSB3aXRoaW4gREFNT04mIzM5O3MgcXVvdGEgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGJ1ZmZlciBoYW5kbGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYGlmICghcXVvdGEtXHUwMDNlZXN6KSByZXR1cm4gZmFsc2U7YCkgaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgaW4gbW0vZGFtb24vY29yZS5jIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgKGBlc3pgKSBpcyB6ZXJvLiBUaGlzIGlzIGEgcHVyZWx5IGludGVybmFsIGxvZ2ljIGNoYW5nZSB3aXRoaW4gREFNT04mIzM5O3MgcXVvdGEgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGJ1ZmZlciBoYW5kbGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjMuMjUwNDUyNzI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5NDM1OTY0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYGlmICghcXVvdGEtXFx1MDAzZWVzeikgcmV0dXJuIGZhbHNlO2ApIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGluIG1tL2RhbW9uL2NvcmUuYyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIChgZXN6YCkgaXMgemVyby4gVGhpcyBpcyBhIHB1cmVseSBpbnRlcm5hbCBsb2dpYyBjaGFuZ2Ugd2l0aGluIERBTU9OJ3MgcXVvdGEgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGJ1ZmZlciBoYW5kbGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkYW1vc19xdW90YV9pc19mdWxsKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJldHVybiBmYWxzZSB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIGZ1bmN0aW9uYWxseSBhbHRlcnMgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIHJlZ2lvbiBhcHBsaWNhdGlvbiBiZWhhdmlvciBpbiB0aGUgREFNT04gbWVtb3J5IG1vbml0b3Jpbmcgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjIzLjI1MDQ1NzY4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4ODE1ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWQ1NmZhZjhmZjA1NDliNDg3Y2EyMzBkYzI5OWZhY2U1M2UzYjdhM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA3OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjUzY2YzMmYxZDUxNWMgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTI1NjAsNiArMjU2MCw4IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4ge1xcbiBcXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKCFxdW90YS1cXHUwMDNlZXN6KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6KVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjMuNzE5OTU1Njg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0OTI4Njk3MTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fbmV3X3NjaGVtZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRhbW9zX3F1b3RhX2lzX2Z1bGwoKSBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIChlc3opIGlzIHplcm8uIFRoaXMgZnVuY3Rpb25hbGx5IGFsdGVycyBEQU1PUyBxdW90YSBlbmZvcmNlbWVudCBhbmQgcmVnaW9uIGFwcGxpY2F0aW9uIGJlaGF2aW9yIGluIHRoZSBEQU1PTiBtZW1vcnkgbW9uaXRvcmluZyBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgY29uZmlndXJhYmxlIHZpYSBzeXNmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWQ1NmZhZjhmZjA1NDliNDg3Y2EyMzBkYzI5OWZhY2U1M2UzYjdhM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjM6MDc6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjUzY2YzMmYxZDUxNWMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI1NjAsNiArMjU2MCw4IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbiB7XG4gXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghcXVvdGEtXHUwMDNlZXN6KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjMuNzE5OTU3MjM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYwOTAwNzAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZS4gVGltZSB0byBnZXQgZmFtaWxpYXIgd2l0aCB3aGF0J3MgYmVpbmcgY2hhbmdlZC4gSSdsbCBoZWFkIG92ZXIgdG8gdGhhdCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjU2MCDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIExldCBtZSBncmFiIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLCBhbmQgSSB0aGluayBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHdpbGwgYmUgdGhlIGJlc3QgdG9vbCBmb3IgdGhlIGpvYiBkZXBlbmRpbmcgb24gbXkgZXhhY3QgbmVlZHMuIGByZWFkLWZpbGVgIHRvIGdldCBhIHF1aWNrIGxvY2FsIGxvb2ssIGBncmVwcGVyYCBpZiBJIG5lZWQgdG8gcXVpY2tseSBzZWFyY2ggb3IgZmlsdGVyLiBPbmNlIEkndmUgZ290IHRoYXQgbGluZSBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvbnRleHQsIEkgY2FuIHN0YXJ0IHRvIGFuYWx5emUgdGhlIHBhdGNoIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzoyOC4zMjg5NjYwNzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NTA6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogKz0gc3pfcmVnaW9uO1xcbjI1NTE6XFx0XFx0ZWxzZVxcbjI1NTI6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogKz0gc3pfYXBwbGllZCArIG11bHRfZnJhYyhcXG4yNTUzOlxcdFxcdFxcdFxcdFxcdChzel9yZWdpb24gLSBzel9hcHBsaWVkKSxcXG4yNTU0OlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9udW0sXFxuMjU1NTpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xcbjI1NTY6XFx0fVxcbjI1NTc6XFx0XFxuMjU1ODpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuMjU1OTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuMjU2MDpcXHR7XFxuMjU2MTpcXHRcXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXFxuMjU2MjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjU2MzpcXHRcXHRpZiAoIXF1b3RhLVxcdTAwM2Vlc3opXFxuMjU2NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjU2NTpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeilcXG4yNTY2OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI1Njc6XFx0XFx0LypcXG4yNTY4OlxcdFxcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFxcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xcbjI1Njk6XFx0XFx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXFxuMjU3MDpcXHRcXHQgKi9cXG4yNTcxOlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xcbjI1NzI6XFx0fVxcbjI1NzM6XFx0XFxuMjU3NDpcXHRzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNTc1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcXG4yNTc2OlxcdHtcXG4yNTc3OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjU3ODpcXHRcXHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xcbjI1Nzk6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgYmVnaW4sIGVuZDtcXG4yNTgwOlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCA9IDA7XFxuMjU4MTpcXHRcXHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkID0gMDtcXG4yNTgyOlxcdFxcdC8qXFxuMjU4MzpcXHRcXHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcXG4yNTg0OlxcdFxcdCAqIGltcGxpZXMgd2l0aCAnbnJfY29udGV4dHMnIGZpbGUuICBOZXZlcnRoZWxlc3MsIG9ubHkgc2luZ2xlIGNvbnRleHRcXG4yNTg1OlxcdFxcdCAqIHBlciBrZGFtb25kIGlzIHN1cHBvcnRlZCBmb3Igbm93LiAgU28sIHdlIGNhbiBzaW1wbHkgdXNlICcwJyBjb250ZXh0XFxuMjU4NjpcXHRcXHQgKiBpbmRleCBoZXJlLlxcbjI1ODc6XFx0XFx0ICovXFxuMjU4ODpcXHRcXHR1bnNpZ25lZCBpbnQgY2lkeCA9IDA7XFxuMjU4OTpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1xcdFxcdC8qIHNjaGVtZXMgaXRlcmF0b3IgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjguMzI5MTI3NzMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcyNjYxODQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIERBTU9OIGFuZCBgZGFtb3NfcXVvdGFfaXNfZnVsbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIERBTU9OIGFuZCB0aGlzIGBkYW1vc19xdW90YV9pc19mdWxsYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBEQU1PTiAqaXMqIGV4YWN0bHksIGZyb20gYSBoaWdoLWxldmVsIHBlcnNwZWN0aXZlLiBUaGVuLCBJIG5lZWQgdG8gc2VlIGhvdyBhbmQgd2hlcmUgdGhpcyBxdW90YSBjaGVjayBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgREFNT04gY29udGV4dC5cblxuVGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGhlcmUgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSdsbCBmb2N1cyBteSBzZWFyY2ggb24gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGl0c2VsZi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGlyZWN0IHVzZXMuIFRoZW4sIGlmIHRoYXQncyBub3QgZW5vdWdoLCBJJ2xsIG5lZWQgdG8gZXhwYW5kIHRoZSBzZWFyY2ggdG8gZmluZCBjYWxsZXJzIG9mIHRoZSBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCdzIGJlaW5nICpjYWxsZWQqIHdpbGwgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byBpdHMgcm9sZSB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yayBhbmQgZGF0YSBmbG93cy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHF1b3RhIHJlbGF0ZXMgdG8gREFNT04ncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgaW50ZXJhY3Rpb25zIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjMzLjA1NTc0ODA2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEyMDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19xdW90YV9pc19mdWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNTQxPXN0YXRpYyB2b2lkIGRhbW9zX2NoYXJnZV9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI1NTctXFxubW0vZGFtb24vY29yZS5jOjI1NTg6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbm1tL2RhbW9uL2NvcmUuYy0yNTU5LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTc0PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2MzEtXFx0XFx0ZGFtb3NfY2hhcmdlX3F1b3RhKHF1b3RhLCBzeiwgc3pfYXBwbGllZCk7XFxubW0vZGFtb24vY29yZS5jOjI2MzI6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxubW0vZGFtb24vY29yZS5jLTI2MzMtXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IHQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY0ND1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjY1OS1cXHRcXHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjY2MDpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTI2NjEtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzE0MD1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNjItXFx0XFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMTYzOlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG5tbS9kYW1vbi9jb3JlLmMtMzE2NC1cXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MzMuMTAzODc0MDcxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAzMDc4NDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9TIFF1b3RhIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uIGxvY2F0ZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmVjYWxsIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbi4gSSBiZWxpZXZlIGl0IHdhcyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuXG5gYGBjXG5zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG5cdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxue1xuXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcblx0XHRyZXR1cm4gdHJ1ZTtcblx0Lypcblx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXHUwMDNjbWluX3JlZ2lvbl9zeiByZW1haW5pbmdcblx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXG5cdCAqL1xuXHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zejtcbn1cbmBgYFxuXG5Ob3csIGhvbGQgb24uIEkgc2VlIHNvbWV0aGluZyB0aGF0J3MgbWFraW5nIG1lIHVuZWFzeS4gV2hhdCBoYXBwZW5zIGlmIGBxdW90YS1cdTAwM2Vlc3pgICh0aGUgKmV4cGVjdGVkKiBzaXplKSBpcyBhY3R1YWxseSB6ZXJvPyBJZiBgcXVvdGEtXHUwMDNlZXN6YCBpcyB6ZXJvLCBhbmQsIHBvdGVudGlhbGx5LCBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgaXMgemVybyBhcyB3ZWxsLCB0aGVuIHRoZSBjb25kaXRpb24gYHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3pgIHdvdWxkIGV2YWx1YXRlIHRvIHRydWUsIGFzIHplcm8gaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uIFRoYXQgc2VlbXMuLi4gb2RkLiBXaHkgd291bGQgYGVzemAgYmUgemVybyB3aGVuIHRoZSBxdW90YSBpcyBzdXBwb3NlZGx5IHNldD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhhdCBtaWdodCBvY2N1ci4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhhdCBgZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKWAgd291bGQgcmV0dXJuIHRydWUgZXZlbiB3aGVuIGBlc3pgIGlzIHplcm8sIHNvIHRoYXQgbmVlZHMgdG8gYmUgY2xhcmlmaWVkLiBJIG5lZWQgdG8gdHJhY2UgaG93IGBlc3pgIGlzIGNhbGN1bGF0ZWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gZXhwZWN0ZWQgc2NlbmFyaW8gb3IgYSBidWcuIEknbGwgbmVlZCB0byBsb29rIGF0IGBkYW1vc19xdW90YV9pc19zZXRgIGFuZCBob3cgdGhlIHF1b3RhJ3MgYGVzemAgaXMgaW5pdGlhbGl6ZWQgb3IgdXBkYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzozNy4xMzQ2NjEyMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzNjcwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfaXNfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yMjc2PXN0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjkxLS8qXFxubW0vZGFtb24vY29yZS5jOjIyOTI6ICogZGFtb3NfcXVvdGFfaXNfc2V0KCkgLSBSZXR1cm4gaWYgdGhlIGdpdmVuIHF1b3RhIGlzIGFjdHVhbGx5IHNldC5cXG5tbS9kYW1vbi9jb3JlLmMtMjI5My0gKiBAcXVvdGE6XFx0VGhlIHF1b3RhIHRvIGNoZWNrLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyOTYtICovXFxubW0vZGFtb24vY29yZS5jOjIyOTc6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxubW0vZGFtb24vY29yZS5jLTIyOTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIzMDM9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMwNy1cXG5tbS9kYW1vbi9jb3JlLmM6MjMwODpcXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFxcdTAwMjZzLVxcdTAwM2VxdW90YSkgfHwgIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMzA5LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjU1OD1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjU2MC17XFxubW0vZGFtb24vY29yZS5jOjI1NjE6XFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxcbm1tL2RhbW9uL2NvcmUuYy0yNTYyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTc0PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2MTEtXFx0aWYgKGMtXFx1MDAzZW9wcy5hcHBseV9zY2hlbWUpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjYxMjpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2RhbW9uL2NvcmUuYy0yNjEzLVxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ICsgc3ogXFx1MDAzZSBxdW90YS1cXHUwMDNlZXN6KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjM3LjE5MDAzMzYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5NDY3OTgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgcGxheWluZyB0aGUgcm9sZSBvZiBzb21lb25lIHRob3JvdWdobHkgZmFtaWxpYXIgd2l0aCB0aGUga2VybmVsIGFuZCBEQU1PTjpcblxuKipFeGFtaW5pbmcgREFNT04gQ29yZSBDb2RlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBEQU1PTidzIGNvcmUgZnVuY3Rpb25hbGl0aWVzLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc3VzcGVjdCBJJ20gZGVhbGluZyB3aXRoIHNvbWUgY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgZGF0YSBhY2Nlc3MgbW9uaXRvcidzIGludGVybmFsIHdvcmtpbmdzLiBMZXQncyBzdGFydCBieSBpc29sYXRpbmcgbGluZXMgYXJvdW5kIDIyOTAtMjMyMCBhbmQgMzE0MC0zMTgwLiBUaGVzZSBzcGVjaWZpYyBsaW5lIHJhbmdlcyBhcmUgbGlrZWx5IGhpbnRpbmcgYXQgdGhlIHBhcnRzIG9mIHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBtZW1vcnkgYWNjZXNzIHBhdHRlcm4gZGV0ZWN0aW9uIG9yIHBlcmhhcHMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb3JlIERBTU9OIGRhdGEgc3RydWN0dXJlcy4gVGltZSB0byBkaWcgaW4gYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGVtIHRvIG15IGV4aXN0aW5nIG1lbnRhbCBtb2RlbCBvZiBob3cgREFNT04gb3BlcmF0ZXMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYXJvdW5kIGhvdyBtZW1vcnkgcmVnaW9ucyBhcmUgaGFuZGxlZCwgZGF0YSBhZ2dyZWdhdGlvbiwgb3IgdGhlIHN0cmF0ZWdpZXMgREFNT04gZW1wbG95cyBmb3IgaXRzIHNhbXBsaW5nIGFuZCBhbmFseXNpcyB0byBpZGVudGlmeSBob3RzcG90cyBvciBjb2xkIHNwb3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MzkuNzg0NzE2MjQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI5MDpcXHRcXG4yMjkxOlxcdC8qXFxuMjI5MjpcXHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxcbjIyOTM6XFx0ICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4yMjk0OlxcdCAqXFxuMjI5NTpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1b3RhIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbjIyOTY6XFx0ICovXFxuMjI5NzpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4yMjk4OlxcdHtcXG4yMjk5OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IHx8IHF1b3RhLVxcdTAwM2VzeiB8fCBxdW90YS1cXHUwMDNlbXMgfHxcXG4yMzAwOlxcdFxcdFxcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XFxuMjMwMTpcXHR9XFxuMjMwMjpcXHRcXG4yMzAzOlxcdHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbjIzMDQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbjIzMDU6XFx0e1xcbjIzMDY6XFx0XFx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcXG4yMzA3OlxcdFxcbjIzMDg6XFx0XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4yMzA5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjMxMDpcXHRcXG4yMzExOlxcdFxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxuMjMxMjpcXHR9XFxuMjMxMzpcXHRcXG4yMzE0OlxcdC8qXFxuMjMxNTpcXHQgKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2ZcXG4yMzE2OlxcdCAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxcbjIzMTc6XFx0ICogQHQ6XFx0VGhlIHRhcmdldCBvZiB0aGUgcmVnaW9uLlxcbjIzMTg6XFx0ICogQHJwOlxcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXFxuMjMxOTpcXHQgKiBAczpcXHRUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuXFxuMjMyMDpcXHQgKiBAbWluX3JlZ2lvbl9zejpcXHRtaW5pbXVtIHJlZ2lvbiBzaXplLlxcbjIzMjE6XFx0ICpcXG4yMzIyOlxcdCAqIElmIGEgcXVvdGEgb2YgYSBzY2hlbWUgaGFzIGV4Y2VlZGVkIGluIGEgcXVvdGEgY2hhcmdlIHdpbmRvdywgdGhlIHNjaGVtZSdzXFxuMjMyMzpcXHQgKiBhY3Rpb24gd291bGQgYXBwbGllZCB0byBvbmx5IGEgcGFydCBvZiB0aGUgdGFyZ2V0IGFjY2VzcyBwYXR0ZXJuIGZ1bGZpbGxpbmdcXG4yMzI0OlxcdCAqIHJlZ2lvbnMuICBUbyBhdm9pZCBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byBvbmx5IGFscmVhZHkgYXBwbGllZFxcbjIzMjU6XFx0ICogcmVnaW9ucywgREFNT04gc2tpcHMgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gdGhlIHJlZ2lvbnMgdGhhdCBjaGFyZ2VkXFxuMjMyNjpcXHQgKiBpbiB0aGUgcHJldmlvdXMgY2hhcmdlIHdpbmRvdy5cXG4yMzI3OlxcdCAqXFxuMjMyODpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGdpdmVuIHJlZ2lvbiBzaG91bGQgYmUgc2tpcHBlZCBvciBub3QgZm9yIHRoZVxcbjIzMjk6XFx0ICogcmVhc29uLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydCBvZiB0aGUgcmVnaW9uIGhhcyBwcmV2aW91c2x5IGNoYXJnZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjM5Ljc4NDg4NTY1NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjkzMjc0OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBRdW90YSBTaXplIGFuZCBEQU1PTiBRdW90YSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgZGlnIGludG8gdGhpcyBgcXVvdGEtXHUwMDNlZXN6YCBhbmQgaG93IGBkYW1vc19xdW90YV9pc19zZXRgIGludGVyYWN0cyB3aXRoIGl0LiBgZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKWAgc2VlbXMgdG8gaGluZ2Ugb24gd2hldGhlciBgcXVvdGEtXHUwMDNlZXN6YCwgYHF1b3RhLVx1MDAzZXN6YCwgYHF1b3RhLVx1MDAzZW1zYCwgb3IgYW55IHF1b3RhIGdvYWxzIGFyZSBhY3RpdmUsIHJpZ2h0PyBTbywgaXQgYm9pbHMgZG93biB0bzogaXMgKmFueXRoaW5nKiByZWxhdGVkIHRvIHRoZSBxdW90YSBhY3RpdmVseSBjb25maWd1cmVkPyBBaCwgcmlnaHQsIGBxdW90YS1cdTAwM2Vlc3pgIGlzIHRoZSAqZWZmZWN0aXZlKiBxdW90YSBzaXplLCBpbiBieXRlcy5cblxuTm93LCBpZiBlaXRoZXIgYHF1b3RhLVx1MDAzZXN6YCBvciBgcXVvdGEtXHUwMDNlbXNgIG9yIHRoZSBxdW90YSBnb2FscyBhcmUgc2V0LCBidXQgYHF1b3RhLVx1MDAzZWVzemAgaGFzbid0IGJlZW4gcHJvcGVybHkgY2FsY3VsYXRlZCB5ZXQsIG9yIGl0J3MganVzdCB6ZXJvLi4uIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCBwcm9iYWJseSBsZWFkcyB0byBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZSBiZWhhdmlvcnMuIEkgc2hvdWxkIHByb2JhYmx5IGJlIHByZXBhcmVkIHRvIGdvIGxvb2tpbmcgZm9yIHRob3NlIGxhdGVyLlxuXG5Pa2F5LCBJIG5lZWQgdG8gY2hlY2sgaG93IGBkYW1vc19hZGp1c3RfcXVvdGFgIHdvcmtzLCB3aGljaCBJIGJlbGlldmUgaXMgYXJvdW5kIGxpbmUgMzE0MCBpbiBgbW0vZGFtb24vY29yZS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAyMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjQzLjA3ODE2MjkyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNDA6XFx0c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4zMTQxOlxcdHtcXG4zMTQyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMzE0MzpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbjMxNDQ6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4zMTQ1OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xcbjMxNDY6XFx0XFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xcbjMxNDc6XFx0XFxuMzE0ODpcXHRcXHRpZiAoIXF1b3RhLVxcdTAwM2VtcyBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZXN6IFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnF1b3RhLVxcdTAwM2Vnb2FscykpXFxuMzE0OTpcXHRcXHRcXHRyZXR1cm47XFxuMzE1MDpcXHRcXG4zMTUxOlxcdFxcdC8qIEZpcnN0IGNoYXJnZSB3aW5kb3cgKi9cXG4zMTUyOlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogXFx1MDAyNlxcdTAwMjYgIXF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20pIHtcXG4zMTUzOlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xcbjMxNTQ6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4zMTU1OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMxNTY6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMTU3OlxcdFxcdH1cXG4zMTU4OlxcdFxcbjMxNTk6XFx0XFx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXFxuMzE2MDpcXHRcXHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tLFxcbjMxNjE6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSArXFxuMzE2MjpcXHRcXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVxcdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XFxuMzE2MzpcXHRcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMzE2NDpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG4zMTY1OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICs9IHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6O1xcbjMxNjY6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzE2NzpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxuMzE2ODpcXHRcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG4zMTY5OlxcdFxcdFxcdFxcdGNhY2hlZF9lc3ogPSBxdW90YS1cXHUwMDNlZXN6O1xcbjMxNzA6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4zMTcxOlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcXG4zMTcyOlxcdFxcdFxcdFxcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XFxuMzE3MzpcXHRcXHR9XFxuMzE3NDpcXHRcXG4zMTc1OlxcdFxcdGlmICghYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxuMzE3NjpcXHRcXHRcXHRyZXR1cm47XFxuMzE3NzpcXHRcXG4zMTc4OlxcdFxcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xcbjMxNzk6XFx0XFx0bWVtc2V0KGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxcbjMxODA6XFx0XFx0XFx0XFx0c2l6ZW9mKCpjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKlxcbjMxODE6XFx0XFx0XFx0XFx0KERBTU9TX01BWF9TQ09SRSArIDEpKTtcXG4zMTgyOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzE4MzpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbjMxODQ6XFx0XFx0XFx0XFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcXG4zMTg1OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMxODY6XFx0XFx0XFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4zMTg3OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMxODg6XFx0XFx0XFx0XFx0c2NvcmUgPSBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcXG4zMTg5OlxcdFxcdFxcdFxcdGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSArPVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzo0My4wNzgzNDY1NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQxODY5NTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFF1b3RhIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYXJvdW5kIGVkZ2UgY2FzZXMgd2l0aCB0aGUgcXVvdGEgc2l6ZSAoYHF1b3RhLVx1MDAzZWVzemApLiBXaGF0IGhhcHBlbnMgaWYgaXQncyB6ZXJvPyBGb3IgZXhhbXBsZSwgYmVmb3JlIGFueSBjaGFyZ2Ugd2luZG93LCBvciBpZiBpdCdzIGV4cGxpY2l0bHkgc2V0IHRvIHplcm8sIG9yIGV2ZW4gaWYgdGhlIG92ZXJhbGwgcXVvdGEgc2l6ZSAoYHF1b3RhLVx1MDAzZXN6YCkgaXMgemVyby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBxdW90YSBpcyBkZWZpbmVkIChtYXliZSBgcXVvdGEtXHUwMDNlbXNgIG9yIGBxdW90YS1cdTAwM2Vnb2Fsc2AgYXJlIHNldCksIGJ1dCB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24gaGFzbid0IHJ1biB5ZXQsIG9yIGlmIGBxdW90YS1cdTAwM2Vlc3pgIHN0aWxsIGV2YWx1YXRlcyB0byB6ZXJvIGV2ZW4gYWZ0ZXIgc29tZSBzZXR1cC4gVGhlIGNvcmUgb2YgbXkgd29ycnkgaXMgdGhpcyBgcXVvdGEtXHUwMDNlZXN6ID09IDBgIGNhc2UuXG5cblByZXZpb3VzbHksIGBkYW1vc19xdW90YV9pc19mdWxsYCBzZWVtZWQgdG8gaGF2ZSBhIHByb2JsZW0gaGVyZS4gSXQgY2hlY2tlZCBgaWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opYCwgYW5kIGlmIGBxdW90YS1cdTAwM2Vlc3pgIHdhcyB6ZXJvLCB0aGlzIHdvdWxkIGJlY29tZSBgMCBcdTAwM2U9IDBgLCB3aGljaCBpcyB0cnVlISBUaGF0IG1lYW5zIGlmIGBxdW90YS1cdTAwM2Vlc3pgIHdhcyB6ZXJvLCBpdCB3b3VsZCBpbmNvcnJlY3RseSByZXBvcnQgdGhlIHF1b3RhIGFzIGZ1bGwuXG5cbkJ1dCB3YWl0LCB3aHkgaXMgYCFxdW90YS1cdTAwM2Vlc3pgIGZhbHNlIHdoZW4gYHF1b3RhLVx1MDAzZWVzemAgaXMgemVybz8gSXMgdGhlIHF1b3RhIGZ1bGwsIG9yIGlzIGl0IHplcm8sIG1lYW5pbmcgbm8gcXVvdGEgbGltaXQsIG9yIG5vdCBldmVuIGluaXRpYWxpemVkP1xuXG5JZiBgcXVvdGEtXHUwMDNlZXN6YCBpcyB6ZXJvLCB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgaXMgZXNzZW50aWFsbHkgemVybyBieXRlcy4gVGhpcyBjb3VsZCBtZWFuIG5vIHNpemUgbGltaXQgaXMgc2V0OyBwZXJoYXBzIG9ubHkgdGltZSBsaW1pdHMgYXBwbHksIG9yIHRoZSBxdW90YSBqdXN0IGlzbid0IGluaXRpYWxpemVkIHlldC5cblxuVGhpcyBtYXR0ZXJzIGJlY2F1c2UgaW4gYGRhbW9zX2FwcGx5X3NjaGVtZWAgb3IgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIHJldHVybmluZyB0cnVlIHdvdWxkIHByZXZlbnQgc2NoZW1lcyBmcm9tIGJlaW5nIGFwcGxpZWQsIG9yIGNvdWxkIGNhdXNlIGBxdF9leGNlZWRzYCB0byBpbmNyZW1lbnQgZXZlbiB3aXRoIGEgY2hhcmdlZCBzaXplIG9mIHplcm8uIFRoYXQncyBhIHNlcmlvdXMgYnVnIVxuXG5TbywgdGhlIHBhdGNoIGNsYXJpZmllcyB0aGlzOiBpdCBub3cgY2hlY2tzIGlmIGBkYW1vc19xdW90YV9pc19zZXQocXVvdGEpYCBiZWZvcmUgY2hlY2tpbmcgZm9yIGEgemVybyBzaXplLCBlbnN1cmluZyB3ZSBkb24ndCB0cmVhdCBhIHplcm8tc2l6ZSBxdW90YSBhcyBmdWxsIHVubGVzcyBpdCdzIGFjdHVhbGx5IGJlZW4gY29uZmlndXJlZC4gSXQgbm93IHJldHVybnMgZmFsc2UgaWYgYCFxdW90YS1cdTAwM2Vlc3pgXG5cblRoYXQgcmVzb2x2ZXMgdGhlIHF1b3RhIGlzc3VlLCBzbyBJJ20gaGFwcHkuXG5cbioqREFNT04gUmVhY2hhYmlsaXR5IGFuZCBDb250ZXh0KipcblxuT2theSwgc2VwYXJhdGUgdG9waWMuIElzIERBTU9OIGl0c2VsZiByb2J1c3Q/IElzIGl0IHN0YW5kYXJkLCBlYXNpbHkgZnV6emVkIGluIHRoZSB1c3VhbCBMaW51eCBrZXJuZWwgZW52aXJvbm1lbnRzP1xuXG5ZZXMsIERBTU9OIGlzIGNvcmUgTU0gY29kZSEgSXQncyByaWdodCB0aGVyZSBpbiBgbW0vZGFtb24vYCwgYSBmaXJzdC1jbGFzcyBjaXRpemVuIG9mIHRoZSBMaW51eCBrZXJuZWwuIEl0J3MgY29uZmlndXJhYmxlIHRocm91Z2ggc3RhbmRhcmQgaW50ZXJmYWNlcyBsaWtlIHN5c2ZzIChgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW5gKSwgZGVidWdmcywgYW5kIGBzeXNfZGFtb25gLiBTbyBpdCdzIHJlYWRpbHkgYWNjZXNzaWJsZSBhbmQgdGVzdGFibGUuIEEgcXVpY2sgY2hlY2sgb2YgS2NvbmZpZyBjb25maXJtcyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMwMiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjQ4LjQ5NzA0NTE3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NDg1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6NDguNTQ2Njk4NDkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MjY2NTUxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZpbGVzOlxuXG4qKkNoZWNraW5nIGluIG9uIERhbW9uJ3MgV29yayoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBjb29raW5nIHdpdGggdGhlIE1lbW9yeSBNYW5hZ2VtZW50IERhbW9uIChEQU1PTikgY29kZS4gSSBzaG91bGQgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgbW0vZGFtb24vTWFrZWZpbGVgIGFuZCBgbW0vZGFtb24vS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoZSBgTWFrZWZpbGVgIHdpbGwgdGVsbCBtZSBob3cgdGhlIERBTU9OIGNvZGUgaXMgYmVpbmcgYnVpbHQgYW5kIGxpbmtlZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGZsYWdzLCBzcGVjaWZpYyBzb3VyY2UgZmlsZSBpbmNsdXNpb25zLCBhbmQgYW55IHVudXN1YWwgYnVpbGQgY29uZmlndXJhdGlvbnMuXG5cblRoZW4sIEknbGwgbW92ZSBvdmVyIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBEQU1PTiBsaXZlLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkL2Rpc2FibGVkLCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSwgYW5kIHdoYXQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWxsb3cuIFRoZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBpbiBLY29uZmlnIGFyZSBhbHNvIG9mIGludGVyZXN0LiBBcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgcHJlc2VudCBmb3IgREFNT04gdG8gZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBEQU1PTidzIGN1cnJlbnQgc3RhdGUgYW5kIGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzo1MS4wNzMzNTY2NTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6NTEuMDczNDE4NzM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxOTY1MzAxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkV4YW1pbmluZyB0aGUgREFNT04gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVsYXRpb25zaGlwcyBhbmQgZGVwZW5kZW5jaWVzIHN1cnJvdW5kaW5nIHRoZSBEQU1PTiBmZWF0dXJlcywgbGlrZSBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGFuZCB0aGUgYWRkcmVzcy1zcGFjZS1zcGVjaWZpYyBvcHRpb25zOiBgQ09ORklHX0RBTU9OX1BBRERSYCBhbmQgYENPTkZJR19EQU1PTl9WQUREUmAuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhbGwgdGhlc2Ugb3B0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlciBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIG9yIG11dHVhbGx5IGV4Y2x1c2l2ZSwgYW5kIGhvdyB0aGUgZmVhdHVyZSBmbGFncyBpbXBhY3QgZWFjaCBvdGhlci4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEgZ2l2ZW4gZmVhdHVyZSBhbmQgZm9yIHBvdGVudGlhbGx5IGRlYnVnZ2luZyBhbnkgY29uZmlndXJhdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSB3aGVuIHdvcmtpbmcgd2l0aCBEQU1PTi4gVGhpcyBhbHNvIGhlbHBzIGluIGJ1aWxkaW5nIHVwIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6NTcuMjY5OTUxNzc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIERBTU9OXFxuICAgNjpcXHRcXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcXG4gICA5OlxcdFxcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXFxuICAxMDpcXHRcXHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXFxuICAxMzpcXHRcXHQgIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxuICAyMDpcXHRcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbiAgMjE6XFx0XFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbiAgMjI6XFx0XFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbiAgMjc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgMjk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICAzNDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBEQU1PTl9WQUREUlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbiAgNTc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA1OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgNjA6XFx0XFx0aGVscFxcbiAgNjE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgNjQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgREFNT05fU1lTRlNcXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gIDcxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDcyOlxcdFxcdGhlbHBcXG4gIDczOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxuICA3NDpcXHRcXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDc5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA4MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjU3LjI3MDAzNDc1NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE1NTk2MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIEkgc2VlIHRoYXQgYGNvcmUuY2AgaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaGUga2V5IHNlZW1zIHRvIGJlIGBDT05GSUdfREFNT05gLiBUaGUgYG9iai0kKENPTkZJR19EQU1PTikgKz0gY29yZS5vYCBvciB0aGUgYG9iai15IDo9IGNvcmUub2Agd2l0aGluIGBtbS9kYW1vbi9NYWtlZmlsZWAgY29uZmlybXMgdGhhdCBgY29yZS5jYCBpcyBvbmx5IGluY2x1ZGVkIHdoZW4gYENPTkZJR19EQU1PTmAgaXMgZW5hYmxlZCBkdXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gc3RhZ2UuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1cnRoZXIgdG8gc2VlIGhvdyBgQ09ORklHX0RBTU9OYCBpdHNlbGYgaXMgZGVmaW5lZCBhbmQgc2V0LiBMZXQncyBkaWcgaW50byBgbW0vTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBjb250cm9sIHRoaXMgYGRhbW9uYCBjb21wb25lbnQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBNYWtlZmlsZSBpcyBwcm9jZXNzZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBgQ09ORklHX0RBTU9OYCBpcyBldmFsdWF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDg0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzo1OS40ODU2MzMyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MDkxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTM1PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgKz0gZGVidWdfcGFnZV9yZWYub1xcbm1tL01ha2VmaWxlOjEzNjpvYmotJChDT05GSUdfREFNT04pICs9IGRhbW9uL1xcbm1tL01ha2VmaWxlLTEzNy1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICs9IHVzZXJjb3B5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6NTkuNTMzMTQ4NzY2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MzUxMzg0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OIFF1b3RhIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcXVvdGEgaW1wbGljYXRpb25zIHdpdGhpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uIOKAkyB0aGF0IHN0YXRpYyBoZWxwZXIgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGluIHJlbGF0aW9uIHRvIHRoaXMgY2hhbmdlLlxuXG5GaXJzdCwgSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBJJ20gbG9va2luZyBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgb3IgY2FsbGVycyB0aGF0IGV2ZW50dWFsbHkgbGVhZCB0byBgZGFtb3NfcXVvdGFfaXNfZnVsbGAsIG9yIGFjdHVhbGx5IGRyaXZlIHRoZSBEQU1PTiBvcGVyYXRpb25zLiBFc3NlbnRpYWxseSwgSSdtIG1hcHBpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gcXVvdGEgY2hlY2tpbmcuXG5cbk5leHQsIEknbGwgYnJvYWRlbiB0aGUgc2NvcGUuIEknbGwgZXhhbWluZSBhbnkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LCBlc3BlY2lhbGx5IHdpdGhpbiBgY29yZS5jYCwgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBkaXJlY3RseSBjYWxsLCBvciBpbmRpcmVjdGx5IGluZmx1ZW5jZSwgdGhlIHNjaGVtZSBoYW5kbGluZyBsb2dpYy5cblxuRmluYWxseSwgSSB3YW50IGEgbW9yZSBjb21wcmVoZW5zaXZlIGxpc3Qgd2l0aGluIGBjb3JlLmNgLiBJJ2xsIHNlYXJjaCBmb3IgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgYW5kIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBvciBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2UgYW4gZW50cnkgcG9pbnQgZm9yIERBTU9OLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB3aGVyZSBxdW90YSBjaGVja3MgYXJlIHBlcmZvcm1lZCBhbmQgaG93IHRoZXkgaW1wYWN0IERBTU9OJ3Mgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5NiwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODowMy4xNjgyODkzODFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjY4NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2RvX2FwcGx5X3NjaGVtZXN8ZGFtb3NfYWRqdXN0X3F1b3RhfGtkYW1vbmRfZm58ZGFtb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDM1LSAqIGJlIGNhbGxlZCBmcm9tIGEgc2FmZSBjb250ZXh0cy4gIFN1Y2ggY29udGV4dHMgaW5jbHVkZSBkYW1vbl9jdHggc2V0dXAgdGltZVxcbm1tL2RhbW9uL2NvcmUuYzoxMDM2OiAqIHdoaWxlIHRoZSBrZGFtb25kIGlzIG5vdCB5ZXQgc3RhcnRlZCwgYW5kIGluc2lkZSBvZiBrZGFtb25kX2ZuKCkuXFxubW0vZGFtb24vY29yZS5jLTEwMzctICpcXG5tbS9kYW1vbi9jb3JlLmMtMTAzOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcXG5tbS9kYW1vbi9jb3JlLmM6MTAzOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jLTEwNDAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxcbm1tL2RhbW9uL2NvcmUuYy0xMDQyLSAqIGFwcGx5aW5nIGF1dG8tdHVuZWQgbW9uaXRvcmluZyBpbnRlcnZhbHMuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTA0OD1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDc0LVxcdC8qXFxubW0vZGFtb24vY29yZS5jOjEwNzU6XFx0ICogbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXMgd2lsbCBiZSB1cGRhdGVkIGluc2lkZSBrZGFtb25kX2ZuKCkuXFxubW0vZGFtb24vY29yZS5jLTEwNzYtXFx0ICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyNC1cXG5tbS9kYW1vbi9jb3JlLmM6MTkyNTpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxubW0vZGFtb24vY29yZS5jLTE5MjYtXFxubW0vZGFtb24vY29yZS5jLTE5MjctLypcXG5tbS9kYW1vbi9jb3JlLmM6MTkyODogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTE5MjktICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTM0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTM1OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTE5MzYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NDItXFx0XFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTk0MzpcXHRcXHRjdHgtXFx1MDAzZWtkYW1vbmQgPSBrdGhyZWFkX3J1bihrZGFtb25kX2ZuLCBjdHgsIFxcXCJrZGFtb25kLiVkXFxcIixcXG5tbS9kYW1vbi9jb3JlLmMtMTk0NC1cXHRcXHRcXHRcXHRucl9ydW5uaW5nX2N0eHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NTktLyoqXFxubW0vZGFtb24vY29yZS5jOjE5NjA6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxubW0vZGFtb24vY29yZS5jLTE5NjEtICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk2OC0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcXG5tbS9kYW1vbi9jb3JlLmM6MTk2OTogKiAnZGFtb25fc3RhcnQoKScgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XFxubW0vZGFtb24vY29yZS5jLTE5NzAtICogcmV0dXJucyAtRUJVU1kuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTk3NDppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk5OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIwMDA6XFx0XFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjAwMS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzk9dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspXFxubW0vZGFtb24vY29yZS5jOjIwNDQ6XFx0XFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjA0NS1cXHRcXHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjA3MD1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwOTctICpcXG5tbS9kYW1vbi9jb3JlLmM6MjA5ODogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMDk5LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIxMDY9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNTItICpcXG5tbS9kYW1vbi9jb3JlLmM6MjE1MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMTU0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI1NzQ9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjY0My1cXG5tbS9kYW1vbi9jb3JlLmM6MjY0NDpzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jLTI2NDUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjk2PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3MDMtXFxubW0vZGFtb24vY29yZS5jOjI3MDQ6XFx0XFx0ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhjLCB0LCByKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjcwNS1cXHRcXHQvKlxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxMjY9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTM5LVxcbm1tL2RhbW9uL2NvcmUuYzozMTQwOnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMxNDEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyMjE9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzIzNi1cXG5tbS9kYW1vbi9jb3JlLmM6MzIzNzpcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTMyMzgtXFx0fVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM3MzI9c3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc1My0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mzc1NDpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG5tbS9kYW1vbi9jb3JlLmMtMzc1NS17XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIxLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDIyOlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIzLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzMwPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQyLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDM6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTM0NC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yMTItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vc3RhdC5jOjIxMzpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjE0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyNjctXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjI2ODpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjY5LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNjM1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2NjEtICogVGhpcyB0ZXN0cyB0aGUgaW52YXJpYW50IGludHJvZHVjZWQgYnk6XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE2NjI6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXFxcIm1tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVxcXCIpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2NjMtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjAzLjIxNzU2Mzk5N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjgyNTY0ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIEtlcm5lbCBNb2R1bGUgRXhhbWluYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgREFNT04ga2VybmVsIG1vZHVsZSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHksIHBhcnRpY3VsYXJseSBob3cgdGhlIGRhdGEgYWNjZXNzIG1vbml0b3Igb3BlcmF0ZXMuIEZpcnN0LCBJJ20gemVyb2luZyBpbiBvbiBga2RhbW9uZF9mbmAg4oCTIHRoYXQncyB0aGUgbWFpbiBEQU1PTiBrZXJuZWwgdGhyZWFkLCByaWdodD8gSSB3YW50IHRvIGVuc3VyZSBJIGZ1bGx5IGdyYXNwIGl0cyByb2xlIGluIHRoZSBtb25pdG9yaW5nIHByb2Nlc3MuIFRoZW4sIEkgbmVlZCB0byBsb29rIGF0IGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBzeXNmcy5jYC4gTGV0J3Mgc2VlLi4uIHdoYXQncyBleHBvc2VkIGFzIGl0cyBtYWluIEFQSSBmdW5jdGlvbnM/IEkgaGF2ZSBhIGZlZWxpbmcgSSdsbCBiZSBsb29raW5nIGF0IGNhbGxzIHRvIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9zeXNmc19jbWRfcmVxdWVzdGAuIFRob3NlIHNob3VsZCBiZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgZm9yIHN0YXJ0aW5nLCBjb21taXR0aW5nIGNvbnRleHRzLCBzZXR0aW5nIHNjaGVtZXMsIGFuZCBoYW5kbGluZyBzeXNmcyBjb21tYW5kcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIEFQSXMgYW5kIGBrZGFtb25kX2ZuYC4gRmluYWxseSwgbGV0J3MgY29uZmlybSB0aGUgZXhwb3J0ZWQgc3ltYm9scyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2Ag4oCTIGEgcXVpY2sgY2hlY2sgdG8gdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW50ZW50aW9uYWxseSBleHBvc2VkIHRvIHRoZSB3aWRlciBrZXJuZWwgYW5kIHRvIGV4dGVybmFsIG1vZHVsZXMuIFRoYXQgbGlzdCBvZiBzeW1ib2xzIHNob3VsZCByb3VuZCBvdXQgbXkgb3ZlcnZpZXcgb2YgdGhlIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MjAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODowNy41MDAxMzA5NTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDM3MDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZGFtb25ffF52b2lkIGRhbW9uX3xec3RydWN0IC4qIFxcXFwqZGFtb25fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NTA9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NzE6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxcbm1tL2RhbW9uL2NvcmUuYy03Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTctICovXFxubW0vZGFtb24vY29yZS5jOjk4OmludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxubW0vZGFtb24vY29yZS5jLTk5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTMtXFxubW0vZGFtb24vY29yZS5jOjExNDpzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG5tbS9kYW1vbi9jb3JlLmMtMTE1LVxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI4LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjk6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTMwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzk9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDMtXFxubW0vZGFtb24vY29yZS5jOjE0NDp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXFxubW0vZGFtb24vY29yZS5jLTE0NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTUwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9udGhfZmlsdGVyKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTYxLVxcbm1tL2RhbW9uL2NvcmUuYzoxNjI6c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtMTYzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzQtXFxubW0vZGFtb24vY29yZS5jOjE3NTp2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXFxubW0vZGFtb24vY29yZS5jLTE3Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzE4PXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyNy0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzI4OnN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxubW0vZGFtb24vY29yZS5jLTMyOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDQ1PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDc4OmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbm1tL2RhbW9uL2NvcmUuYy00NzktXFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTY2OT1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjgxLVxcbm1tL2RhbW9uL2NvcmUuYzo2ODI6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG5tbS9kYW1vbi9jb3JlLmMtNjgzLVxcdFxcdFxcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03MjQ9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTczNC1cXG5tbS9kYW1vbi9jb3JlLmM6NzM1OnZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtNzM2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03NDY9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc1MC1cXG5tbS9kYW1vbi9jb3JlLmM6NzUxOnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy03NTIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTc3NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6Nzc2OnN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25ld190YXJnZXQodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtNzc3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTItXFxubW0vZGFtb24vY29yZS5jOjc5Mzp2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy03OTQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTgwMz1zdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODA3LVxcbm1tL2RhbW9uL2NvcmUuYzo4MDg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy04MDkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTgxNi1cXG5tbS9kYW1vbi9jb3JlLmM6ODE3OnZvaWQgZGFtb25fZGVzdHJveV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04MTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTgyNz11bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzMS1cXG5tbS9kYW1vbi9jb3JlLmM6ODMyOnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtODMzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04NzI9c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NzktXFxubW0vZGFtb24vY29yZS5jOjg4MDp2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtODgxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTA0ODppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA5NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTA5Njp2b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcXG5tbS9kYW1vbi9jb3JlLmMtMTA5Ny1cXHRcXHRcXHRzc2l6ZV90IG5yX3NjaGVtZXMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTgwOT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODM3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxODM4OmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xODM5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODU3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxODU4OmludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtMTg1OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTk1Nz1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTk3NDppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjAxOT1zdGF0aWMgdm9pZCBfX2RhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwMzgtICovXFxubW0vZGFtb24vY29yZS5jOjIwMzk6dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcXG5tbS9kYW1vbi9jb3JlLmMtMjA0MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjA1ND1ib29sIGRhbW9uX2lzX3J1bm5pbmcoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNjktICovXFxubW0vZGFtb24vY29yZS5jOjIwNzA6aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMjA3MS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjEwNS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjEwNjppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxubW0vZGFtb24vY29yZS5jLTIxMDcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM5NTI9c3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTgzLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozOTg0OmludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmMtMzk4NS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwMDgtICovXFxubW0vZGFtb24vY29yZS5jOjQwMDk6dm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpXFxubW0vZGFtb24vY29yZS5jLTQwMTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODowNy41NDkxNzM0MDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM4MTc0MTAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgREFNT04gYW5hbHlzaXMgYXJlIGNsZWFybHkgZGVmaW5lZDogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBhbmQgYGRhbW9uX25ld19zY2hlbWVgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBvciBjcml0aWNhbCBmdW5jdGlvbnMgd2l0aGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgZnJhbWV3b3JrLiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhlc2UuXG5cbk5vdywgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIGhhdmUgaWRlbnRpZmllZCBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1ZBRERSYCBhcyBpbXBvcnRhbnQgY29uZmlndXJhdGlvbnMgdG8gY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLCBzbyBJJ2xsIGRvdWJsZS1jaGVjayBpbiBgbW0vZGFtb24vS2NvbmZpZ2AgZm9yIG90aGVyIHJlbGF0ZWQgZGVwZW5kZW5jaWVzLlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSwgYERBTU9OYCBpdHNlbGYgZG9lc24ndCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgd2hpY2ggc2VlbXMgc2Vuc2libGUgZm9yIGEgdG9wLWxldmVsIG1lbnUgaXRlbS4gIGBEQU1PTl9TWVNGU2AgaXMgY29udGluZ2VudCBvbiBib3RoIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIGVuYWJsaW5nIHN5c3RlbSBmaWxlLWJhc2VkIGFjY2Vzcy4gVGhlbiwgYERBTU9OX1BBRERSYCBhbmQgYERBTU9OX1ZBRERSYCBkZXBlbmQgb24gYERBTU9OYCBhbmQgYE1NVWAuIFRoaXMgbWFrZXMgbG9naWNhbCBzZW5zZSBhcyB3ZWxsLCBtYXBwaW5nIHBoeXNpY2FsIG9yIHZpcnR1YWwgYWRkcmVzc2VzIGlzIG9ubHkgcG9zc2libGUgaWYgREFNT04gaXMgZW5hYmxlZCBhbmQgYW4gTU1VIGlzIHByZXNlbnQuIEkgYWxzbyBuZWVkIHRvIG5vdGUgYERBTU9OX1JFQ0xBSU1gIGRlcGVuZHMgb24gYERBTU9OIFx1MDAyNlx1MDAyNiBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9MUlVfU09SVGAgZGVwZW5kcyBvbiBgREFNT04gXHUwMDI2XHUwMDI2IERBTU9OX1BBRERSYCwgYnV0LCB0aG9zZSBhcmUgc2Vjb25kYXJ5IGZvciBub3cuXG5cblRoZSBtYWluIHF1ZXN0aW9uIGlzLCBzaG91bGQgSSBtYXJrIHRoaXMgcGF0Y2ggYXMgd29ydGggZnV6emluZz8gVGhlIG1vZGlmaWNhdGlvbiB0byBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgaXMgYSBjcml0aWNhbCBmaXgsIHNwZWNpZmljYWxseSBpbiB0aGUgREFNT04gT3BlcmF0aW9uIFNjaGVtZXMgKERBTU9TKSBxdW90YSBtYW5hZ2VtZW50LiBJdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBEQU1PTiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBxdW90YSBpcyBleGhhdXN0ZWQgb3IgZnVsbCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gY29yZSBmdW5jdGlvbmFsaXR5LCBhbmQgc2luY2UgaXQgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBzeXNmcywgcmVjbGFtYXRpb24sIGFuZCBtb25pdG9yaW5nIEFQSXMsIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGNoYW5nZSBpcyBzaWduaWZpY2FudCBlbm91Z2gsIGFuZCB0aGUgaW1wYWN0IGlzIGltcG9ydGFudCBlbm91Z2gsIHNvIEknbGwgbWFyayBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cblRoZXJlZm9yZSwgSSBjYW4gbm93IGFzc2VtYmxlIG15IGNvbmNsdXNpb25zOlxuXG4qICAgYFdvcnRoRnV6emluZzogdHJ1ZWBcbiogICBgRm9jdXNTeW1ib2xzOiBbXCJkYW1vbl9zdGFydFwiLCBcImRhbW9uX2NvbW1pdF9jdHhcIiwgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLCBcImRhbW9uX25ld19zY2hlbWVcIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtcIkRBTU9OXCIsIFwiREFNT05fU1lTRlNcIiwgXCJEQU1PTl9QQUREUlwiLCBcIkRBTU9OX1ZBRERSXCJdYFxuKiAgIGBSZWFzb25pbmc6IENvcmUgZnVuY3Rpb25hbCBmaXggaW4gREFNT1MgcXVvdGEgbWFuYWdlbWVudCwgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgREFNT04gQVBJcy5gXG5cbkZpbmFsbHksIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDMyLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODoxMi45MzA5MTY5NzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAwNzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkYW1vc19xdW90YV9pc19mdWxsKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJldHVybiBmYWxzZSB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIGZ1bmN0aW9uYWxseSBhbHRlcnMgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIHJlZ2lvbiBhcHBsaWNhdGlvbiBiZWhhdmlvciBpbiB0aGUgREFNT04gbWVtb3J5IG1vbml0b3Jpbmcgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkYW1vc19xdW90YV9pc19mdWxsKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJldHVybiBmYWxzZSB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIGZ1bmN0aW9uYWxseSBhbHRlcnMgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIHJlZ2lvbiBhcHBsaWNhdGlvbiBiZWhhdmlvciBpbiB0aGUgREFNT04gbWVtb3J5IG1vbml0b3Jpbmcgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjEzLjAwNjkzMTUzOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxODcxMDU1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODoxMy4wMDczNzQyNTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODE4NjY1Nzc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIChgaWYgKCFxdW90YS1cXHUwMDNlZXN6KSByZXR1cm4gZmFsc2U7YCkgaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgaW4gbW0vZGFtb24vY29yZS5jIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgKGBlc3pgKSBpcyB6ZXJvLiBUaGlzIGlzIGEgcHVyZWx5IGludGVybmFsIGxvZ2ljIGNoYW5nZSB3aXRoaW4gREFNT04ncyBxdW90YSBlbmZvcmNlbWVudCBtZWNoYW5pc20uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24gb3IgYnVmZmVyIGhhbmRsaW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVkNTZmYWY4ZmYwNTQ5YjQ4N2NhMjMwZGMyOTlmYWNlNTNlM2I3YTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA3OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi41M2NmMzJmMWQ1MTVjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNTYwLDYgKzI1NjAsOCBAQCBzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4ge1xuIFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIXF1b3RhLVx1MDAzZWVzeilcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjEzLjAwNzM3Njc1N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDU5OTcyMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gQ29yZSoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIHRvIHJldmlldywgYW5kIHRoZSBjcnVjaWFsIGFyZWEgYXBwZWFycyB0byBiZSBpbiBgbW0vZGFtb24vY29yZS5jYC4gTXkgaW5pdGlhbCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gdGhhdCBmaWxlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGNvbnRleHQsIHNvIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gYnJpbmcgdXAgdGhlIGZpbGUgdG8gcmV2aWV3IGl0IGFuZCB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb25zLlxuXG5JJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSAyNTYwIGFuZCBpdHMgaW1tZWRpYXRlIHZpY2luaXR5LiBJJ2xsIHVzZSBhIGByZWFkLWZpbGVgIGNvbW1hbmQsIG9yIHNvbWV0aGluZyBzaW1pbGFyIGluIG15IHByZWZlcnJlZCBlbnZpcm9ubWVudCwgdG8gZ2V0IGEgY2xlYXIgdmlldyBvZiB0aGF0IHNlY3Rpb24gYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjE4LjQ2NzM1MjgxNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NDA6XFx0XFxuMjU0MTpcXHRzdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4yNTQyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCB1bnNpZ25lZCBsb25nIHN6X2FwcGxpZWQpXFxuMjU0MzpcXHR7XFxuMjU0NDpcXHRcXHQvKlxcbjI1NDU6XFx0XFx0ICogc3pfYXBwbGllZCBjb3VsZCBiZSBiaWdnZXIgdGhhbiBzel9yZWdpb24sIGRlcGVuZGluZyBvbiBvcHNcXG4yNTQ2OlxcdFxcdCAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhY3Rpb24sIGUuZy4sIGRhbW9zX3BhX3BhZ2VvdXQoKS4gIENoYXJnZSBvbmx5XFxuMjU0NzpcXHRcXHQgKiB0aGUgcmVnaW9uIHNpemUgaW4gdGhlIGNhc2UuXFxuMjU0ODpcXHRcXHQgKi9cXG4yNTQ5OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWZhaWxfY2hhcmdlX2Rlbm9tIHx8IHN6X2FwcGxpZWQgXFx1MDAzZSBzel9yZWdpb24pXFxuMjU1MDpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArPSBzel9yZWdpb247XFxuMjU1MTpcXHRcXHRlbHNlXFxuMjU1MjpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArPSBzel9hcHBsaWVkICsgbXVsdF9mcmFjKFxcbjI1NTM6XFx0XFx0XFx0XFx0XFx0KHN6X3JlZ2lvbiAtIHN6X2FwcGxpZWQpLFxcbjI1NTQ6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWZhaWxfY2hhcmdlX251bSxcXG4yNTU1OlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XFxuMjU1NjpcXHR9XFxuMjU1NzpcXHRcXG4yNTU4OlxcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4yNTU5OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNTYwOlxcdHtcXG4yNTYxOlxcdFxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG4yNTYyOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yNTYzOlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWVzeilcXG4yNTY0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yNTY1OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6KVxcbjI1NjY6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjU2NzpcXHRcXHQvKlxcbjI1Njg6XFx0XFx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXFx1MDAzY21pbl9yZWdpb25fc3ogcmVtYWluaW5nXFxuMjU2OTpcXHRcXHQgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC5cXG4yNTcwOlxcdFxcdCAqL1xcbjI1NzE6XFx0XFx0cmV0dXJuIHF1b3RhLVxcdTAwM2Vlc3ogLSBxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNjIG1pbl9yZWdpb25fc3o7XFxuMjU3MjpcXHR9XFxuMjU3MzpcXHRcXG4yNTc0OlxcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI1NzU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbjI1NzY6XFx0e1xcbjI1Nzc6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNTc4OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3ogPSBkYW1vbl9zel9yZWdpb24ocik7XFxuMjU3OTpcXHRcXHRzdHJ1Y3QgdGltZXNwZWM2NCBiZWdpbiwgZW5kO1xcbjI1ODA6XFx0XFx0dW5zaWduZWQgbG9uZyBzel9hcHBsaWVkID0gMDtcXG4yNTgxOlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQgPSAwO1xcbjI1ODI6XFx0XFx0LypcXG4yNTgzOlxcdFxcdCAqIFdlIHBsYW4gdG8gc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0IHBlciBrZGFtb25kLCBhcyBEQU1PTiBzeXNmc1xcbjI1ODQ6XFx0XFx0ICogaW1wbGllcyB3aXRoICducl9jb250ZXh0cycgZmlsZS4gIE5ldmVydGhlbGVzcywgb25seSBzaW5nbGUgY29udGV4dFxcbjI1ODU6XFx0XFx0ICogcGVyIGtkYW1vbmQgaXMgc3VwcG9ydGVkIGZvciBub3cuICBTbywgd2UgY2FuIHNpbXBseSB1c2UgJzAnIGNvbnRleHRcXG4yNTg2OlxcdFxcdCAqIGluZGV4IGhlcmUuXFxuMjU4NzpcXHRcXHQgKi9cXG4yNTg4OlxcdFxcdHVuc2lnbmVkIGludCBjaWR4ID0gMDtcXG4yNTg5OlxcdFxcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XFx0XFx0Lyogc2NoZW1lcyBpdGVyYXRvciAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODoxOC40Njc1MjUzMzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwMDkwNzcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBkYW1vc19xdW90YV9pc19zZXQocXVvdGEpYCBhbmQgYGVzemAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlaXIgaW1wbGVtZW50YXRpb24gYW5kIGhvdyB0aGV5IGFyZSB1c2VkIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBsb2dpYyBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgcXVvdGEgc2V0dGluZywgd2hpY2ggaXMga2V5LiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBsaW5lcyBsZWFkaW5nIHVwIHRvIHRoZSBjYWxscywgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBIb3BlZnVsbHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgcmV2ZWFscyB0aGUgaW50ZW50aW9uIGFuZCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjIxLjE2ODQzNjI4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEwOTI0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfaXNfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yMjc2PXN0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjkxLS8qXFxubW0vZGFtb24vY29yZS5jOjIyOTI6ICogZGFtb3NfcXVvdGFfaXNfc2V0KCkgLSBSZXR1cm4gaWYgdGhlIGdpdmVuIHF1b3RhIGlzIGFjdHVhbGx5IHNldC5cXG5tbS9kYW1vbi9jb3JlLmMtMjI5My0gKiBAcXVvdGE6XFx0VGhlIHF1b3RhIHRvIGNoZWNrLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyOTYtICovXFxubW0vZGFtb24vY29yZS5jOjIyOTc6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxubW0vZGFtb24vY29yZS5jLTIyOTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIzMDM9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMwNy1cXG5tbS9kYW1vbi9jb3JlLmM6MjMwODpcXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFxcdTAwMjZzLVxcdTAwM2VxdW90YSkgfHwgIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMzA5LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjU1OD1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjU2MC17XFxubW0vZGFtb24vY29yZS5jOjI1NjE6XFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxcbm1tL2RhbW9uL2NvcmUuYy0yNTYyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTc0PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2MTEtXFx0aWYgKGMtXFx1MDAzZW9wcy5hcHBseV9zY2hlbWUpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjYxMjpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2RhbW9uL2NvcmUuYy0yNjEzLVxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ICsgc3ogXFx1MDAzZSBxdW90YS1cXHUwMDNlZXN6KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjIxLjM0OTUzNDk0NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE0MTM2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGRhbW9zX3F1b3RhX2lzX3NldGAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRhbW9zX3F1b3RhX2lzX3NldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhIHF1b3RhIGlzLCB3ZWxsLCAqc2V0Ki4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIHRvIGlkZW50aWZ5IHRoZSBrZXkgdmFyaWFibGVzIG9yIGRhdGEgc3RydWN0dXJlcyBpdCdzIHJlZmVyZW5jaW5nLiBJJ20gbG9va2luZyBmb3IgdGhlIHVuZGVybHlpbmcgbG9naWMg4oCTIGlzIGl0IGNoZWNraW5nIGEgY29uZmlndXJhdGlvbiBmaWxlLCBxdWVyeWluZyBhIGRhdGFiYXNlLCBvciBwZXJoYXBzIHJlbHlpbmcgb24gc29tZSBpbnRlcm5hbCBzdGF0ZT8gSXMgaXQgY2hlY2tpbmcgZm9yIGEgc3BlY2lmaWMgdmFsdWUgb3IgYSByYW5nZT8gQW55IGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVkZ2UgY2FzZXMuIE1vcmUgaW1wb3J0YW50bHksIGhvdyByb2J1c3QgaXMgdGhpcyBpbXBsZW1lbnRhdGlvbj8gSXMgdGhlcmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nPyBXaGF0IGhhcHBlbnMgaWYgdGhlIHNvdXJjZSBkYXRhIGlzIHVuYXZhaWxhYmxlIG9yIGNvcnJ1cHRlZD8gV2hhdCdzIHRoZSBpbXBhY3Qgb24gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gdW5leHBlY3RlZCB2YWx1ZSwgYW5kIGlzIHRoZXJlIGFueSBsb2dnaW5nIHRvIHRyYWNrIGl0cyBiZWhhdmlvdXI/IFRoZSBnb2FsIGlzIHRvIHZlcmlmeSBpZiBpdCBpcyBhbGlnbmVkIHdpdGggdGhlIGV4cGVjdGF0aW9ucywgYW5kIGl0cyBiZWhhdmlvdXIgdW5kZXIgbm9ybWFsIGFuZCBleGNlcHRpb25hbCBjaXJjdW1zdGFuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDg6MjMuNDYzNjc0OTA0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI5MDpcXHRcXG4yMjkxOlxcdC8qXFxuMjI5MjpcXHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxcbjIyOTM6XFx0ICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4yMjk0OlxcdCAqXFxuMjI5NTpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1b3RhIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbjIyOTY6XFx0ICovXFxuMjI5NzpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4yMjk4OlxcdHtcXG4yMjk5OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IHx8IHF1b3RhLVxcdTAwM2VzeiB8fCBxdW90YS1cXHUwMDNlbXMgfHxcXG4yMzAwOlxcdFxcdFxcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XFxuMjMwMTpcXHR9XFxuMjMwMjpcXHRcXG4yMzAzOlxcdHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbjIzMDQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbjIzMDU6XFx0e1xcbjIzMDY6XFx0XFx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcXG4yMzA3OlxcdFxcbjIzMDg6XFx0XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4yMzA5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjMxMDpcXHRcXG4yMzExOlxcdFxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxuMjMxMjpcXHR9XFxuMjMxMzpcXHRcXG4yMzE0OlxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjIzLjQ2Mzg4NzQ2NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzYwNjM0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTiBRdW90YSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gcXVvdGEgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBzY2VuYXJpby4gSXQgc2VlbXMgd2UgaGF2ZSBhIHNpdHVhdGlvbiB3aGVyZSBgcXVvdGEtXHUwMDNlZXN6YCBtaWdodCBiZSB6ZXJvLCBidXQgYGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSlgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyBmb3IgbWUgYmVjYXVzZSwgY29uY2VwdHVhbGx5LCBpZiB0aGUgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSBpcyB6ZXJvLCBob3cgY2FuIHRoZSBxdW90YSAqYmUqIHNldCwgcmlnaHQ/XG5cblRoZSBvcmlnaW5hbCBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgZnVuY3Rpb24gaGFkIGEgcG90ZW50aWFsIGJ1Zy4gV2l0aCBgcXVvdGEtXHUwMDNlZXN6YCBhdCB6ZXJvIGFuZCwgbGV0J3Mgc2F5LCBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgYWxzbyB6ZXJvLCB0aGUgY29uZGl0aW9uIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6YCB3b3VsZCBldmFsdWF0ZSB0byBgdHJ1ZWAsIGluY29ycmVjdGx5IG1hcmtpbmcgdGhlIHF1b3RhIGFzIGZ1bGwuIEVzc2VudGlhbGx5LCBpdCB3YXMgdHJpZ2dlcmluZyBhIFwiZnVsbFwiIHN0YXRlIGV2ZW4gd2hlbiBubyBxdW90YSB3YXMgYWN0dWFsbHkgZXN0YWJsaXNoZWQuIE9yIGF0IGxlYXN0LCBub3QgY2FsY3VsYXRlZCB5ZXQuXG5cblRoZSBwYXRjaCdzIGFkZGl0aW9uLCBzcGVjaWZpY2FsbHkgYGlmICghcXVvdGEtXHUwMDNlZXN6KSByZXR1cm4gZmFsc2U7YCwgdGFja2xlcyB0aGlzIGhlYWQtb24uIEl0J3MgYSBjbGVhbiwgbG9naWNhbCBjaGVjay4gSWYgYGVzemAgaXMgemVybywgd2UgKmtub3cqIHRoZSBxdW90YSBpc24ndCBmdWxsLCBzbyB3ZSBzaG9ydC1jaXJjdWl0IHRoZSBmdW5jdGlvbidzIGV2YWx1YXRpb24uIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgZml4LlxuXG5Ob3csIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBJIG5lZWQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgdXN1YWwgc3VzcGVjdHMgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcHJvYmxlbXMuIEl0J3Mgc3RyaWN0bHkgYSBsb2dpY2FsIGNoZWNrIHdpdGhpbiBEQU1PTidzIHF1b3RhIHRyYWNraW5nLiBJJ20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIChubyBgY29weV90b191c2VyYCBjYWxscyksIG9yIGFsdGVyYXRpb25zIHRvIGJ1ZmZlciBzaXplcyBvciBib3VuZGFyaWVzLiBUaGlzIGNoZWNrIGRvZXNuJ3QgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgcXVvdGEtXHUwMDNlZXN6YCwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IGRhbW9zX3F1b3RhYCBzdHJ1Y3R1cmUsIGFuZCBpdCdzIGFsbG9jYXRlZC9pbml0aWFsaXplZCBkdXJpbmcgREFNT04gc2V0dXAuIFNvLCBpdCdzIHByZXR0eSBzZWxmIGNvbnRhaW5lZC5cblxuQWxsIGluIGFsbCwgdGhpcyBsb29rcyBsaWtlIGEgc291bmQsIHRhcmdldGVkIGZpeCBmb3IgYSBsb2dpY2FsIGluY29uc2lzdGVuY3kgaW4gdGhlIHF1b3RhIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODoyNy44MjQ1MjY3MDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTc5MDUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZGFtb3NfcXVvdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xNjA9ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTczLS8qKlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxNzQ6ICogc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgLSBEQU1PUyBzY2hlbWUgcXVvdGEgYXV0by10dW5pbmcgZ29hbC5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTc1LSAqIEBtZXRyaWM6XFx0XFx0TWV0cmljIHRvIGJlIHVzZWQgZm9yIHJlcHJlc2VudGluZyB0aGUgZ29hbC5cXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xOTUtICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE5NjpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5Ny1cXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD0yMjE9ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMjYtLyoqXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjIyNzogKiBzdHJ1Y3QgZGFtb3NfcXVvdGEgLSBDb250cm9scyB0aGUgYWdncmVzc2l2ZW5lc3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjI4LSAqIEByZXNldF9pbnRlcnZhbDpcXHRDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTI3My0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6Mjc0OnN0cnVjdCBkYW1vc19xdW90YSB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTI3NS1cXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTMzOT1zdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzY0LSAqIGRldGVybWluZWQgdGhlIHJlZ2lvbiBhcyBlbGlnaWJsZSB0byBhcHBseSB0aGUgYWN0aW9uLiAgVGhlIGFjY2VzcyBwYXR0ZXJuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjM2NTogKiAoXFx1MDAyNnN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiksIHF1b3RhcyAoXFx1MDAyNnN0cnVjdCBkYW1vc19xdW90YSksIHdhdGVybWFya3NcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzY2LSAqIChcXHUwMDI2c3RydWN0IGRhbW9zX3dhdGVybWFya3MpIGFuZCBmaWx0ZXJzIChcXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlcikgdGhhdCBoYW5kbGVkXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9NTU1PXN0cnVjdCBkYW1vcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNTU4LVxcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXM7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjU1OTpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU2MC1cXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3M7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAzOD12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDM5LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDQwOnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0MS1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0Mi1cXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDM6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0NDp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDUtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNDY9c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDQ4LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXMsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDk6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1MC1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNTM9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDU0OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDg6MjguMTQ0MzI2NzJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0OTY3OTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBRdW90YSBQYXRjaCoqXG5cbk9rYXksIHRoaXMgaXMgYWJvdXQgYXMgY2xlYW4gYW5kIHNpbXBsZSBhcyBpdCBnZXRzLiBUaGUgcGF0Y2ggaXMgaW5jcmVkaWJseSBzdHJhaWdodGZvcndhcmQg4oCTIGp1c3QgYSBzaW5nbGUgY2hlY2ssIGBpZiAoIXF1b3RhLVx1MDAzZWVzeikgcmV0dXJuIGZhbHNlO2AsIHdpdGhpbiB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgZnVuY3Rpb24uIFRoaXMgaXMgZ3JlYXQ7IEknbSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MgYXQgYWxsLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIG5vIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha3MsIG5vIG5ldyBhbGxvY2F0aW9ucyB0aGF0IG5lZWQgc2NydXRpbnksIGFuZCBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBjb3B5aW5nIHRoYXQgd291bGQgd2FycmFudCBleHRyYSBhdHRlbnRpb24uIEhvbmVzdGx5LCB0aGlzIGlzIGFsbW9zdCBib3JpbmcgaW4gaXRzIGxhY2sgb2YgY29tcGxleGl0eSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIVxuXG5TdGFuZGFyZCB0ZXN0aW5nIHByb3RvY29scyBhbmQgS0FTQU4gc2hvdWxkIGJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoaXMgY2hhbmdlLiBUaGVyZSdzIGFic29sdXRlbHkgbm8gbmVlZCB0byBicmluZyBLTVNBTiBpbnRvIHRoZSBlcXVhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoOyBpdCdzIG92ZXJraWxsIGdpdmVuIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9uLlxuXG5UaW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgcHJvdmlkZSBhIGNvbmNpc2UgYW5kIHVuZGVyc3RhbmRhYmxlIGV4cGxhbmF0aW9uLiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoZSBkZXNjcmlwdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMxOSwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODozMS4xOTQwMDg4NDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYGlmICghcXVvdGEtXFx1MDAzZWVzeikgcmV0dXJuIGZhbHNlO2ApIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGluIG1tL2RhbW9uL2NvcmUuYyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIChgZXN6YCkgaXMgemVyby4gVGhpcyBpcyBhIHB1cmVseSBpbnRlcm5hbCBsb2dpYyBjaGFuZ2Ugd2l0aGluIERBTU9OJ3MgcXVvdGEgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGJ1ZmZlciBoYW5kbGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGBpZiAoIXF1b3RhLVxcdTAwM2Vlc3opIHJldHVybiBmYWxzZTtgKSBpbiBgZGFtb3NfcXVvdGFfaXNfZnVsbCgpYCBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoYGVzemApIGlzIHplcm8uIFRoaXMgaXMgYSBwdXJlbHkgaW50ZXJuYWwgbG9naWMgY2hhbmdlIHdpdGhpbiBEQU1PTidzIHF1b3RhIGVuZm9yY2VtZW50IG1lY2hhbmlzbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFmZmVjdCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbiBvciBidWZmZXIgaGFuZGxpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvsrnp[0].run-triage(0) Phase: Succeeded StartedAt: 2026-09-01 22:50:31 +0000 UTC FinishedAt: 2026-09-01 23:08: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": "9d3d3356faf028769b5856809ee0965b34c85539", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "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": "9d3d3356faf028769b5856809ee0965b34c85539", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "DAMON", "DAMON_SYSFS", "DAMON_PADDR", "DAMON_VADDR" ], "series_id": "bc9adb52-797a-4433-88a5-e3c4bb3fe34b" }, "track": "KASAN", "fuzz": { "focus": null, "focus_symbols": [ "damon_start", "damon_commit_ctx", "damon_set_schemes", "damon_new_scheme" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": true, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MW08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDsKICBdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIChgaWYgKCFxdW90YS1cdTAwM2Vlc3opIHJldHVybiBmYWxzZTtgKSBpbiBgZGFtb3NfcXVvdGFfaXNfZnVsbCgpYCBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoYGVzemApIGlzIHplcm8uIFRoaXMgaXMgYSBwdXJlbHkgaW50ZXJuYWwgbG9naWMgY2hhbmdlIHdpdGhpbiBEQU1PTiYjMzk7cyBxdW90YSBlbmZvcmNlbWVudCBtZWNoYW5pc20uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24gb3IgYnVmZmVyIGhhbmRsaW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiBmYWxzZSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkYW1vc19xdW90YV9pc19mdWxsKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJldHVybiBmYWxzZSB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIGZ1bmN0aW9uYWxseSBhbHRlcnMgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIHJlZ2lvbiBhcHBsaWNhdGlvbiBiZWhhdmlvciBpbiB0aGUgREFNT04gbWVtb3J5IG1vbml0b3Jpbmcgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgc3lzZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCA1ZDU2ZmFmOGZmMDU0OWI0ODdjYTIzMGRjMjk5ZmFjZTUzZTNiN2EzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFR1ZSBTZXAgMSAyMzowNzoyMiAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjUzY2YzMmYxZDUxNWMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI1NjAsNiAmIzQzOzI1NjAsOCBAQCBzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4ge1xuIFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4mIzQzO1x0aWYgKCFxdW90YS1cdTAwM2Vlc3opXG4mIzQzO1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmNvcmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0RBTU9OJiMzNDssCiAgICAmIzM0O0RBTU9OX1NZU0ZTJiMzNDssCiAgICAmIzM0O0RBTU9OX1BBRERSJiMzNDssCiAgICAmIzM0O0RBTU9OX1ZBRERSJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7ZGFtb25fc3RhcnQmIzM0OywKICAgICYjMzQ7ZGFtb25fY29tbWl0X2N0eCYjMzQ7LAogICAgJiMzNDtkYW1vbl9zZXRfc2NoZW1lcyYjMzQ7LAogICAgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIGRhbW9zX3F1b3RhX2lzX2Z1bGwoKSBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIChlc3opIGlzIHplcm8uIFRoaXMgZnVuY3Rpb25hbGx5IGFsdGVycyBEQU1PUyBxdW90YSBlbmZvcmNlbWVudCBhbmQgcmVnaW9uIGFwcGxpY2F0aW9uIGJlaGF2aW9yIGluIHRoZSBEQU1PTiBtZW1vcnkgbW9uaXRvcmluZyBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgY29uZmlndXJhYmxlIHZpYSBzeXNmcy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVkNTZmYWY4ZmYwNTQ5YjQ4N2NhMjMwZGMyOTlmYWNlNTNlM2I3YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA3OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjAuLjUzY2YzMmYxZDUxNWMgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTI1NjAsNiAmIzQzOzI1NjAsOCBAQCBzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsCiB7CiAJaWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKQogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghcXVvdGEtJmd0O2VzeikKJiM0MzsJCXJldHVybiBmYWxzZTsKIAlpZiAocXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzeikKIAkJcmV0dXJuIHRydWU7CiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjA0NQoJCQkJCQkJb3V0cHV0OiAzNwoJCQkJCQkJdGhvdWdodHM6IDUyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjoKCioqSW52ZXN0aWdhdGluZyBhIERBTU9OIFBhdGNoKioKCk9rYXksIHNvIEkgc2VlIGEgcGF0Y2ggaXMgdG91Y2hpbmcgYG1tL2RhbW9uL2NvcmUuY2AuIE15IGluaXRpYWwgcmVhY3Rpb24gaXMgdG8gZGl2ZSByaWdodCBpbnRvIHRoZSBjb2RlLiBUaW1lIHRvIGdldCBmYW1pbGlhciB3aXRoIHdoYXQmIzM5O3MgYmVpbmcgY2hhbmdlZC4gSSYjMzk7bGwgaGVhZCBvdmVyIHRvIHRoYXQgZmlsZSwgc3BlY2lmaWNhbGx5IGFyb3VuZCBsaW5lIDI1NjAg4oCTIHRoYXQmIzM5O3Mgb2Z0ZW4gYSBnb29kIHN0YXJ0aW5nIHBvaW50IHRvIHVuZGVyc3RhbmQgdGhlIGNvbnRleHQgb2YgdGhlIGNoYW5nZS4gTGV0IG1lIGdyYWIgdGhlIHJlbGV2YW50IGNvZGUgYmxvY2ssIGFuZCBJIHRoaW5rIGVpdGhlciBgcmVhZC1maWxlYCBvciBgZ3JlcHBlcmAgd2lsbCBiZSB0aGUgYmVzdCB0b29sIGZvciB0aGUgam9iIGRlcGVuZGluZyBvbiBteSBleGFjdCBuZWVkcy4gYHJlYWQtZmlsZWAgdG8gZ2V0IGEgcXVpY2sgbG9jYWwgbG9vaywgYGdyZXBwZXJgIGlmIEkgbmVlZCB0byBxdWlja2x5IHNlYXJjaCBvciBmaWx0ZXIuIE9uY2UgSSYjMzk7dmUgZ290IHRoYXQgbGluZSBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvbnRleHQsIEkgY2FuIHN0YXJ0IHRvIGFuYWx5emUgdGhlIHBhdGNoIHByb3Blcmx5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMjU1MCwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsyNTUwOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzs9IHN6X3JlZ2lvbjtcbjI1NTE6XHRcdGVsc2VcbjI1NTI6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiAmIzQzOz0gc3pfYXBwbGllZCAmIzQzOyBtdWx0X2ZyYWMoXG4yNTUzOlx0XHRcdFx0XHQoc3pfcmVnaW9uIC0gc3pfYXBwbGllZCksXG4yNTU0Olx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9udW0sXG4yNTU1Olx0XHRcdFx0XHRxdW90YS1cdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XG4yNTU2Olx0fVxuMjU1NzpcdFxuMjU1ODpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjI1NTk6XHRcdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuMjU2MDpcdHtcbjI1NjE6XHRcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbjI1NjI6XHRcdFx0cmV0dXJuIGZhbHNlO1xuMjU2MzpcdFx0aWYgKCFxdW90YS1cdTAwM2Vlc3opXG4yNTY0Olx0XHRcdHJldHVybiBmYWxzZTtcbjI1NjU6XHRcdGlmIChxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6KVxuMjU2NjpcdFx0XHRyZXR1cm4gdHJ1ZTtcbjI1Njc6XHRcdC8qXG4yNTY4Olx0XHQgKiBEQU1PUyBhY3Rpb24gaXMgYXBwbGllZCBwZXIgcmVnaW9uLCBzbyBcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xuMjU2OTpcdFx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXG4yNTcwOlx0XHQgKi9cbjI1NzE6XHRcdHJldHVybiBxdW90YS1cdTAwM2Vlc3ogLSBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xuMjU3MjpcdH1cbjI1NzM6XHRcbjI1NzQ6XHRzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbjI1NzU6XHRcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxuMjU3NjpcdHtcbjI1Nzc6XHRcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcdTAwMjZzLVx1MDAzZXF1b3RhO1xuMjU3ODpcdFx0dW5zaWduZWQgbG9uZyBzeiA9IGRhbW9uX3N6X3JlZ2lvbihyKTtcbjI1Nzk6XHRcdHN0cnVjdCB0aW1lc3BlYzY0IGJlZ2luLCBlbmQ7XG4yNTgwOlx0XHR1bnNpZ25lZCBsb25nIHN6X2FwcGxpZWQgPSAwO1xuMjU4MTpcdFx0dW5zaWduZWQgbG9uZyBzel9vcHNfZmlsdGVyX3Bhc3NlZCA9IDA7XG4yNTgyOlx0XHQvKlxuMjU4MzpcdFx0ICogV2UgcGxhbiB0byBzdXBwb3J0IG11bHRpcGxlIGNvbnRleHQgcGVyIGtkYW1vbmQsIGFzIERBTU9OIHN5c2ZzXG4yNTg0Olx0XHQgKiBpbXBsaWVzIHdpdGggJiMzOTtucl9jb250ZXh0cyYjMzk7IGZpbGUuICBOZXZlcnRoZWxlc3MsIG9ubHkgc2luZ2xlIGNvbnRleHRcbjI1ODU6XHRcdCAqIHBlciBrZGFtb25kIGlzIHN1cHBvcnRlZCBmb3Igbm93LiAgU28sIHdlIGNhbiBzaW1wbHkgdXNlICYjMzk7MCYjMzk7IGNvbnRleHRcbjI1ODY6XHRcdCAqIGluZGV4IGhlcmUuXG4yNTg3Olx0XHQgKi9cbjI1ODg6XHRcdHVuc2lnbmVkIGludCBjaWR4ID0gMDtcbjI1ODk6XHRcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XHRcdC8qIHNjaGVtZXMgaXRlcmF0b3IgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyOTQwCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqSW52ZXN0aWdhdGluZyBEQU1PTiBhbmQgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgKioKCkFscmlnaHQsIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIERBTU9OIGFuZCB0aGlzIGBkYW1vc19xdW90YV9pc19mdWxsYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBEQU1PTiAqaXMqIGV4YWN0bHksIGZyb20gYSBoaWdoLWxldmVsIHBlcnNwZWN0aXZlLiBUaGVuLCBJIG5lZWQgdG8gc2VlIGhvdyBhbmQgd2hlcmUgdGhpcyBxdW90YSBjaGVjayBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgREFNT04gY29udGV4dC4KClRoZSBtb3N0IGVmZmljaWVudCBhcHByb2FjaCBoZXJlIGlzIHRvIGdvIHN0cmFpZ2h0IHRvIHRoZSBzb3VyY2UuIEkmIzM5O2xsIGZvY3VzIG15IHNlYXJjaCBvbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LiBJJiMzOTtsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGl0c2VsZi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGlyZWN0IHVzZXMuIFRoZW4sIGlmIHRoYXQmIzM5O3Mgbm90IGVub3VnaCwgSSYjMzk7bGwgbmVlZCB0byBleHBhbmQgdGhlIHNlYXJjaCB0byBmaW5kIGNhbGxlcnMgb2YgdGhlIGZ1bmN0aW9uLiBVbmRlcnN0YW5kaW5nIHdoZXJlIGl0JiMzOTtzIGJlaW5nICpjYWxsZWQqIHdpbGwgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byBpdHMgcm9sZSB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yayBhbmQgZGF0YSBmbG93cy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHF1b3RhIHJlbGF0ZXMgdG8gREFNT04mIzM5O3MgY29yZSBmdW5jdGlvbmFsaXR5LiBJJiMzOTttIGV4cGVjdGluZyB0byBmaW5kIHNvbWUgY3J1Y2lhbCBpbnRlcmFjdGlvbnMgaGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19xdW90YV9pc19mdWxsJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jPTI1NDE9c3RhdGljIHZvaWQgZGFtb3NfY2hhcmdlX3F1b3RhKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4tLVxubW0vZGFtb24vY29yZS5jLTI1NTctXG5tbS9kYW1vbi9jb3JlLmM6MjU1ODpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG5tbS9kYW1vbi9jb3JlLmMtMjU1OS1cdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNTc0PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNjMxLVx0XHRkYW1vc19jaGFyZ2VfcXVvdGEocXVvdGEsIHN6LCBzel9hcHBsaWVkKTtcbm1tL2RhbW9uL2NvcmUuYzoyNjMyOlx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cdTAwM2VtaW5fcmVnaW9uX3N6KSkge1xubW0vZGFtb24vY29yZS5jLTI2MzMtXHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlX3RhcmdldF9mcm9tID0gdDtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjY0ND1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2NTktXHRcdC8qIENoZWNrIHRoZSBxdW90YSAqL1xubW0vZGFtb24vY29yZS5jOjI2NjA6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTI2NjEtXHRcdFx0Y29udGludWU7XG4tLVxubW0vZGFtb24vY29yZS5jPTMxNDA9c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzE2Mi1cdFx0XHRcdG1zZWNzX3RvX2ppZmZpZXMocXVvdGEtXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xubW0vZGFtb24vY29yZS5jOjMxNjM6XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxubW0vZGFtb24vY29yZS5jLTMxNjQtXHRcdFx0cy1cdTAwM2VzdGF0LnF0X2V4Y2VlZHMmIzQzOyYjNDM7O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM3NTkKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiAzMDQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBEQU1PUyBRdW90YSBGdW5jdGlvbioqCgpPa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uIGxvY2F0ZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmVjYWxsIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbi4gSSBiZWxpZXZlIGl0IHdhcyBzb21ldGhpbmcgbGlrZSB0aGlzOgoKYGBgYwpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsCgkJdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KQp7CglpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpCgkJcmV0dXJuIGZhbHNlOwoJaWYgKHF1b3RhLSZndDtjaGFyZ2VkX3N6ICZndDs9IHF1b3RhLSZndDtlc3opCgkJcmV0dXJuIHRydWU7CgkvKgoJICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gJmx0O21pbl9yZWdpb25fc3ogcmVtYWluaW5nCgkgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC4KCSAqLwoJcmV0dXJuIHF1b3RhLSZndDtlc3ogLSBxdW90YS0mZ3Q7Y2hhcmdlZF9zeiAmbHQ7IG1pbl9yZWdpb25fc3o7Cn0KYGBgCgpOb3csIGhvbGQgb24uIEkgc2VlIHNvbWV0aGluZyB0aGF0JiMzOTtzIG1ha2luZyBtZSB1bmVhc3kuIFdoYXQgaGFwcGVucyBpZiBgcXVvdGEtJmd0O2VzemAgKHRoZSAqZXhwZWN0ZWQqIHNpemUpIGlzIGFjdHVhbGx5IHplcm8/IElmIGBxdW90YS0mZ3Q7ZXN6YCBpcyB6ZXJvLCBhbmQsIHBvdGVudGlhbGx5LCBgcXVvdGEtJmd0O2NoYXJnZWRfc3pgIGlzIHplcm8gYXMgd2VsbCwgdGhlbiB0aGUgY29uZGl0aW9uIGBxdW90YS0mZ3Q7Y2hhcmdlZF9zeiAmZ3Q7PSBxdW90YS0mZ3Q7ZXN6YCB3b3VsZCBldmFsdWF0ZSB0byB0cnVlLCBhcyB6ZXJvIGlzIGdyZWF0ZXIgdGhhbiBvciBlcXVhbCB0byB6ZXJvLiBUaGF0IHNlZW1zLi4uIG9kZC4gV2h5IHdvdWxkIGBlc3pgIGJlIHplcm8gd2hlbiB0aGUgcXVvdGEgaXMgc3VwcG9zZWRseSBzZXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIHRoYXQgbWlnaHQgb2NjdXIuIFRoZSBjb2RlIHN1Z2dlc3RzIHRoYXQgYGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSlgIHdvdWxkIHJldHVybiB0cnVlIGV2ZW4gd2hlbiBgZXN6YCBpcyB6ZXJvLCBzbyB0aGF0IG5lZWRzIHRvIGJlIGNsYXJpZmllZC4gSSBuZWVkIHRvIHRyYWNlIGhvdyBgZXN6YCBpcyBjYWxjdWxhdGVkIHRvIHNlZSBpZiB0aGlzIGlzIGFuIGV4cGVjdGVkIHNjZW5hcmlvIG9yIGEgYnVnLiBJJiMzOTtsbCBuZWVkIHRvIGxvb2sgYXQgYGRhbW9zX3F1b3RhX2lzX3NldGAgYW5kIGhvdyB0aGUgcXVvdGEmIzM5O3MgYGVzemAgaXMgaW5pdGlhbGl6ZWQgb3IgdXBkYXRlZC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtkYW1vc19xdW90YV9pc19zZXQmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDttbS9kYW1vbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmM9MjI3Nj1zdGF0aWMgYm9vbCBfX2RhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLCBzdHJ1Y3QgZGFtb3MgKnMsXG4tLVxubW0vZGFtb24vY29yZS5jLTIyOTEtLypcbm1tL2RhbW9uL2NvcmUuYzoyMjkyOiAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXG5tbS9kYW1vbi9jb3JlLmMtMjI5My0gKiBAcXVvdGE6XHRUaGUgcXVvdGEgdG8gY2hlY2suXG4tLVxubW0vZGFtb24vY29yZS5jLTIyOTYtICovXG5tbS9kYW1vbi9jb3JlLmM6MjI5NzpzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbm1tL2RhbW9uL2NvcmUuYy0yMjk4LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjMwMz1zdGF0aWMgYm9vbCBkYW1vc192YWxpZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3JlZ2lvbiAqcixcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjMwNy1cbm1tL2RhbW9uL2NvcmUuYzoyMzA4Olx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcdTAwMjZzLVx1MDAzZXF1b3RhKSB8fCAhYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbm1tL2RhbW9uL2NvcmUuYy0yMzA5LVx0XHRyZXR1cm4gcmV0O1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yNTU4PXN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjU2MC17XG5tbS9kYW1vbi9jb3JlLmM6MjU2MTpcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcbm1tL2RhbW9uL2NvcmUuYy0yNTYyLVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxubW0vZGFtb24vY29yZS5jPTI1NzQ9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4tLVxubW0vZGFtb24vY29yZS5jLTI2MTEtXHRpZiAoYy1cdTAwM2VvcHMuYXBwbHlfc2NoZW1lKSB7XG5tbS9kYW1vbi9jb3JlLmM6MjYxMjpcdFx0aWYgKGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkgXHUwMDI2XHUwMDI2XG5tbS9kYW1vbi9jb3JlLmMtMjYxMy1cdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzsgc3ogXHUwMDNlIHF1b3RhLVx1MDAzZWVzeikge1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDUwNDMKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBIZXJlJiMzOTtzIGhvdyBJJiMzOTtkIGFwcHJvYWNoIHRoaXMgdGFzaywgcGxheWluZyB0aGUgcm9sZSBvZiBzb21lb25lIHRob3JvdWdobHkgZmFtaWxpYXIgd2l0aCB0aGUga2VybmVsIGFuZCBEQU1PTjoKCioqRXhhbWluaW5nIERBTU9OIENvcmUgQ29kZSoqCgpBbHJpZ2h0LCBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHdpdGhpbiBEQU1PTiYjMzk7cyBjb3JlIGZ1bmN0aW9uYWxpdGllcy4gVG8gZ2V0IGEgYmV0dGVyIHVuZGVyc3RhbmRpbmcsIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgYnkgc2NydXRpbml6aW5nIHRoZSBgbW0vZGFtb24vY29yZS5jYCBmaWxlLiBHaXZlbiB0aGUgY29udGV4dCwgSSBzdXNwZWN0IEkmIzM5O20gZGVhbGluZyB3aXRoIHNvbWUgY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgZGF0YSBhY2Nlc3MgbW9uaXRvciYjMzk7cyBpbnRlcm5hbCB3b3JraW5ncy4gTGV0JiMzOTtzIHN0YXJ0IGJ5IGlzb2xhdGluZyBsaW5lcyBhcm91bmQgMjI5MC0yMzIwIGFuZCAzMTQwLTMxODAuIFRoZXNlIHNwZWNpZmljIGxpbmUgcmFuZ2VzIGFyZSBsaWtlbHkgaGludGluZyBhdCB0aGUgcGFydHMgb2YgdGhlIGNvZGUgcmVzcG9uc2libGUgZm9yIG1hbmFnaW5nIG1lbW9yeSBhY2Nlc3MgcGF0dGVybiBkZXRlY3Rpb24gb3IgcGVyaGFwcyB0aGUgaW1wbGVtZW50YXRpb24gb2YgdGhlIGNvcmUgREFNT04gZGF0YSBzdHJ1Y3R1cmVzLiBUaW1lIHRvIGRpZyBpbiBhbmQgY3Jvc3MtcmVmZXJlbmNlIHRoZW0gdG8gbXkgZXhpc3RpbmcgbWVudGFsIG1vZGVsIG9mIGhvdyBEQU1PTiBvcGVyYXRlcy4gSSYjMzk7bGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYXJvdW5kIGhvdyBtZW1vcnkgcmVnaW9ucyBhcmUgaGFuZGxlZCwgZGF0YSBhZ2dyZWdhdGlvbiwgb3IgdGhlIHN0cmF0ZWdpZXMgREFNT04gZW1wbG95cyBmb3IgaXRzIHNhbXBsaW5nIGFuZCBhbmFseXNpcyB0byBpZGVudGlmeSBob3RzcG90cyBvciBjb2xkIHNwb3RzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDIyOTAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNDAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MjI5MDpcdFxuMjI5MTpcdC8qXG4yMjkyOlx0ICogZGFtb3NfcXVvdGFfaXNfc2V0KCkgLSBSZXR1cm4gaWYgdGhlIGdpdmVuIHF1b3RhIGlzIGFjdHVhbGx5IHNldC5cbjIyOTM6XHQgKiBAcXVvdGE6XHRUaGUgcXVvdGEgdG8gY2hlY2suXG4yMjk0Olx0ICpcbjIyOTU6XHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1b3RhIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxuMjI5NjpcdCAqL1xuMjI5NzpcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxuMjI5ODpcdHtcbjIyOTk6XHRcdHJldHVybiBxdW90YS1cdTAwM2Vlc3ogfHwgcXVvdGEtXHUwMDNlc3ogfHwgcXVvdGEtXHUwMDNlbXMgfHxcbjIzMDA6XHRcdFx0IWRhbW9zX3F1b3RhX2dvYWxzX2VtcHR5KHF1b3RhKTtcbjIzMDE6XHR9XG4yMzAyOlx0XG4yMzAzOlx0c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXG4yMzA0Olx0XHRcdHN0cnVjdCBkYW1vcyAqcylcbjIzMDU6XHR7XG4yMzA2Olx0XHRib29sIHJldCA9IF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpO1xuMjMwNzpcdFxuMjMwODpcdFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcdTAwMjZzLVx1MDAzZXF1b3RhKSB8fCAhYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcbjIzMDk6XHRcdFx0cmV0dXJuIHJldDtcbjIzMTA6XHRcbjIzMTE6XHRcdHJldHVybiBjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKGMsIHIsIHMpIFx1MDAzZT0gcy1cdTAwM2VxdW90YS5taW5fc2NvcmU7XG4yMzEyOlx0fVxuMjMxMzpcdFxuMjMxNDpcdC8qXG4yMzE1Olx0ICogZGFtb3Nfc2tpcF9jaGFyZ2VkX3JlZ2lvbigpIC0gQ2hlY2sgaWYgdGhlIGdpdmVuIHJlZ2lvbiBvciBzdGFydGluZyBwYXJ0IG9mXG4yMzE2Olx0ICogaXQgaXMgYWxyZWFkeSBjaGFyZ2VkIGZvciB0aGUgREFNT1MgcXVvdGEuXG4yMzE3Olx0ICogQHQ6XHRUaGUgdGFyZ2V0IG9mIHRoZSByZWdpb24uXG4yMzE4Olx0ICogQHJwOlx0VGhlIHBvaW50ZXIgdG8gdGhlIHJlZ2lvbi5cbjIzMTk6XHQgKiBAczpcdFRoZSBzY2hlbWUgdG8gYmUgYXBwbGllZC5cbjIzMjA6XHQgKiBAbWluX3JlZ2lvbl9zejpcdG1pbmltdW0gcmVnaW9uIHNpemUuXG4yMzIxOlx0ICpcbjIzMjI6XHQgKiBJZiBhIHF1b3RhIG9mIGEgc2NoZW1lIGhhcyBleGNlZWRlZCBpbiBhIHF1b3RhIGNoYXJnZSB3aW5kb3csIHRoZSBzY2hlbWUmIzM5O3NcbjIzMjM6XHQgKiBhY3Rpb24gd291bGQgYXBwbGllZCB0byBvbmx5IGEgcGFydCBvZiB0aGUgdGFyZ2V0IGFjY2VzcyBwYXR0ZXJuIGZ1bGZpbGxpbmdcbjIzMjQ6XHQgKiByZWdpb25zLiAgVG8gYXZvaWQgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gb25seSBhbHJlYWR5IGFwcGxpZWRcbjIzMjU6XHQgKiByZWdpb25zLCBEQU1PTiBza2lwcyBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byB0aGUgcmVnaW9ucyB0aGF0IGNoYXJnZWRcbjIzMjY6XHQgKiBpbiB0aGUgcHJldmlvdXMgY2hhcmdlIHdpbmRvdy5cbjIzMjc6XHQgKlxuMjMyODpcdCAqIFRoaXMgZnVuY3Rpb24gY2hlY2tzIGlmIGEgZ2l2ZW4gcmVnaW9uIHNob3VsZCBiZSBza2lwcGVkIG9yIG5vdCBmb3IgdGhlXG4yMzI5Olx0ICogcmVhc29uLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydCBvZiB0aGUgcmVnaW9uIGhhcyBwcmV2aW91c2x5IGNoYXJnZWQsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwMjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFF1b3RhIFNpemUgYW5kIERBTU9OIFF1b3RhIE1hbmFnZW1lbnQqKgoKT2theSwgbGV0JiMzOTtzIGRpZyBpbnRvIHRoaXMgYHF1b3RhLSZndDtlc3pgIGFuZCBob3cgYGRhbW9zX3F1b3RhX2lzX3NldGAgaW50ZXJhY3RzIHdpdGggaXQuIGBkYW1vc19xdW90YV9pc19zZXQocXVvdGEpYCBzZWVtcyB0byBoaW5nZSBvbiB3aGV0aGVyIGBxdW90YS0mZ3Q7ZXN6YCwgYHF1b3RhLSZndDtzemAsIGBxdW90YS0mZ3Q7bXNgLCBvciBhbnkgcXVvdGEgZ29hbHMgYXJlIGFjdGl2ZSwgcmlnaHQ/IFNvLCBpdCBib2lscyBkb3duIHRvOiBpcyAqYW55dGhpbmcqIHJlbGF0ZWQgdG8gdGhlIHF1b3RhIGFjdGl2ZWx5IGNvbmZpZ3VyZWQ/IEFoLCByaWdodCwgYHF1b3RhLSZndDtlc3pgIGlzIHRoZSAqZWZmZWN0aXZlKiBxdW90YSBzaXplLCBpbiBieXRlcy4KCk5vdywgaWYgZWl0aGVyIGBxdW90YS0mZ3Q7c3pgIG9yIGBxdW90YS0mZ3Q7bXNgIG9yIHRoZSBxdW90YSBnb2FscyBhcmUgc2V0LCBidXQgYHF1b3RhLSZndDtlc3pgIGhhc24mIzM5O3QgYmVlbiBwcm9wZXJseSBjYWxjdWxhdGVkIHlldCwgb3IgaXQmIzM5O3MganVzdCB6ZXJvLi4uIHRoYXQmIzM5O3Mgd2hlcmUgdGhpbmdzIGdldCBpbnRlcmVzdGluZyBhbmQgcHJvYmFibHkgbGVhZHMgdG8gc29tZSBpbnRlcmVzdGluZyBlZGdlIGNhc2UgYmVoYXZpb3JzLiBJIHNob3VsZCBwcm9iYWJseSBiZSBwcmVwYXJlZCB0byBnbyBsb29raW5nIGZvciB0aG9zZSBsYXRlci4KCk9rYXksIEkgbmVlZCB0byBjaGVjayBob3cgYGRhbW9zX2FkanVzdF9xdW90YWAgd29ya3MsIHdoaWNoIEkgYmVsaWV2ZSBpcyBhcm91bmQgbGluZSAzMTQwIGluIGBtbS9kYW1vbi9jb3JlLmNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMxNDAsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogNTAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzE0MDpcdHN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG4zMTQxOlx0e1xuMzE0MjpcdFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFx1MDAyNnMtXHUwMDNlcXVvdGE7XG4zMTQzOlx0XHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xuMzE0NDpcdFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcbjMxNDU6XHRcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xuMzE0NjpcdFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xuMzE0NzpcdFxuMzE0ODpcdFx0aWYgKCFxdW90YS1cdTAwM2VtcyBcdTAwMjZcdTAwMjYgIXF1b3RhLVx1MDAzZXN6IFx1MDAyNlx1MDAyNiBsaXN0X2VtcHR5KFx1MDAyNnF1b3RhLVx1MDAzZWdvYWxzKSlcbjMxNDk6XHRcdFx0cmV0dXJuO1xuMzE1MDpcdFxuMzE1MTpcdFx0LyogRmlyc3QgY2hhcmdlIHdpbmRvdyAqL1xuMzE1MjpcdFx0aWYgKCFxdW90YS1cdTAwM2V0b3RhbF9jaGFyZ2VkX3N6IFx1MDAyNlx1MDAyNiAhcXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tKSB7XG4zMTUzOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XG4zMTU0Olx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMTU1Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzE1NjpcdFx0XHRcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XG4zMTU3Olx0XHR9XG4zMTU4Olx0XG4zMTU5Olx0XHQvKiBOZXcgY2hhcmdlIHdpbmRvdyBzdGFydHMgKi9cbjMxNjA6XHRcdGlmICghdGltZV9pbl9yYW5nZV9vcGVuKGppZmZpZXMsIHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSxcbjMxNjE6XHRcdFx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfZnJvbSAmIzQzO1xuMzE2MjpcdFx0XHRcdFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XG4zMTYzOlx0XHRcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVx1MDAzZW1pbl9yZWdpb25fc3opKVxuMzE2NDpcdFx0XHRcdHMtXHUwMDNlc3RhdC5xdF9leGNlZWRzJiM0MzsmIzQzOztcbjMxNjU6XHRcdFx0cXVvdGEtXHUwMDNldG90YWxfY2hhcmdlZF9zeiAmIzQzOz0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zejtcbjMxNjY6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9mcm9tID0gamlmZmllcztcbjMxNjc6XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiA9IDA7XG4zMTY4Olx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxuMzE2OTpcdFx0XHRcdGNhY2hlZF9lc3ogPSBxdW90YS1cdTAwM2Vlc3o7XG4zMTcwOlx0XHRcdGRhbW9zX3NldF9lZmZlY3RpdmVfcXVvdGEoYywgcyk7XG4zMTcxOlx0XHRcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFx1MDAyNlx1MDAyNiBxdW90YS1cdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcbjMxNzI6XHRcdFx0XHRkYW1vc190cmFjZV9lc3ooYywgcywgcXVvdGEpO1xuMzE3MzpcdFx0fVxuMzE3NDpcdFxuMzE3NTpcdFx0aWYgKCFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxuMzE3NjpcdFx0XHRyZXR1cm47XG4zMTc3Olx0XG4zMTc4Olx0XHQvKiBGaWxsIHVwIHRoZSBzY29yZSBoaXN0b2dyYW0gKi9cbjMxNzk6XHRcdG1lbXNldChjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxuMzE4MDpcdFx0XHRcdHNpemVvZigqYy1cdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKlxuMzE4MTpcdFx0XHRcdChEQU1PU19NQVhfU0NPUkUgJiM0MzsgMSkpO1xuMzE4MjpcdFx0ZGFtb25fZm9yX2VhY2hfdGFyZ2V0KHQsIGMpIHtcbjMxODM6XHRcdFx0ZGFtb25fZm9yX2VhY2hfcmVnaW9uKHIsIHQpIHtcbjMxODQ6XHRcdFx0XHRpZiAoIV9fZGFtb3NfdmFsaWRfdGFyZ2V0KHIsIHMsIGMpKVxuMzE4NTpcdFx0XHRcdFx0Y29udGludWU7XG4zMTg2Olx0XHRcdFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcbjMxODc6XHRcdFx0XHRcdGNvbnRpbnVlO1xuMzE4ODpcdFx0XHRcdHNjb3JlID0gYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcbjMxODk6XHRcdFx0XHRjLVx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSAmIzQzOz1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzMwMgoJCQkJCQkJb3V0cHV0OiAyNwoJCQkJCQkJdGhvdWdodHM6IDU2MwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIFF1b3RhIExvZ2ljKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIE15IGluaXRpYWwgY29uY2VybiBpcyBhcm91bmQgZWRnZSBjYXNlcyB3aXRoIHRoZSBxdW90YSBzaXplIChgcXVvdGEtJmd0O2VzemApLiBXaGF0IGhhcHBlbnMgaWYgaXQmIzM5O3MgemVybz8gRm9yIGV4YW1wbGUsIGJlZm9yZSBhbnkgY2hhcmdlIHdpbmRvdywgb3IgaWYgaXQmIzM5O3MgZXhwbGljaXRseSBzZXQgdG8gemVybywgb3IgZXZlbiBpZiB0aGUgb3ZlcmFsbCBxdW90YSBzaXplIChgcXVvdGEtJmd0O3N6YCkgaXMgemVyby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLgoKVGhlbiB0aGVyZSYjMzk7cyB0aGUgc2NlbmFyaW8gd2hlcmUgdGhlIHF1b3RhIGlzIGRlZmluZWQgKG1heWJlIGBxdW90YS0mZ3Q7bXNgIG9yIGBxdW90YS0mZ3Q7Z29hbHNgIGFyZSBzZXQpLCBidXQgdGhlIGBkYW1vc19hZGp1c3RfcXVvdGFgIGZ1bmN0aW9uIGhhc24mIzM5O3QgcnVuIHlldCwgb3IgaWYgYHF1b3RhLSZndDtlc3pgIHN0aWxsIGV2YWx1YXRlcyB0byB6ZXJvIGV2ZW4gYWZ0ZXIgc29tZSBzZXR1cC4gVGhlIGNvcmUgb2YgbXkgd29ycnkgaXMgdGhpcyBgcXVvdGEtJmd0O2VzeiA9PSAwYCBjYXNlLgoKUHJldmlvdXNseSwgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIHNlZW1lZCB0byBoYXZlIGEgcHJvYmxlbSBoZXJlLiBJdCBjaGVja2VkIGBpZiAocXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzeilgLCBhbmQgaWYgYHF1b3RhLSZndDtlc3pgIHdhcyB6ZXJvLCB0aGlzIHdvdWxkIGJlY29tZSBgMCAmZ3Q7PSAwYCwgd2hpY2ggaXMgdHJ1ZSEgVGhhdCBtZWFucyBpZiBgcXVvdGEtJmd0O2VzemAgd2FzIHplcm8sIGl0IHdvdWxkIGluY29ycmVjdGx5IHJlcG9ydCB0aGUgcXVvdGEgYXMgZnVsbC4KCkJ1dCB3YWl0LCB3aHkgaXMgYCFxdW90YS0mZ3Q7ZXN6YCBmYWxzZSB3aGVuIGBxdW90YS0mZ3Q7ZXN6YCBpcyB6ZXJvPyBJcyB0aGUgcXVvdGEgZnVsbCwgb3IgaXMgaXQgemVybywgbWVhbmluZyBubyBxdW90YSBsaW1pdCwgb3Igbm90IGV2ZW4gaW5pdGlhbGl6ZWQ/CgpJZiBgcXVvdGEtJmd0O2VzemAgaXMgemVybywgdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIGlzIGVzc2VudGlhbGx5IHplcm8gYnl0ZXMuIFRoaXMgY291bGQgbWVhbiBubyBzaXplIGxpbWl0IGlzIHNldDsgcGVyaGFwcyBvbmx5IHRpbWUgbGltaXRzIGFwcGx5LCBvciB0aGUgcXVvdGEganVzdCBpc24mIzM5O3QgaW5pdGlhbGl6ZWQgeWV0LgoKVGhpcyBtYXR0ZXJzIGJlY2F1c2UgaW4gYGRhbW9zX2FwcGx5X3NjaGVtZWAgb3IgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIHJldHVybmluZyB0cnVlIHdvdWxkIHByZXZlbnQgc2NoZW1lcyBmcm9tIGJlaW5nIGFwcGxpZWQsIG9yIGNvdWxkIGNhdXNlIGBxdF9leGNlZWRzYCB0byBpbmNyZW1lbnQgZXZlbiB3aXRoIGEgY2hhcmdlZCBzaXplIG9mIHplcm8uIFRoYXQmIzM5O3MgYSBzZXJpb3VzIGJ1ZyEKClNvLCB0aGUgcGF0Y2ggY2xhcmlmaWVzIHRoaXM6IGl0IG5vdyBjaGVja3MgaWYgYGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSlgIGJlZm9yZSBjaGVja2luZyBmb3IgYSB6ZXJvIHNpemUsIGVuc3VyaW5nIHdlIGRvbiYjMzk7dCB0cmVhdCBhIHplcm8tc2l6ZSBxdW90YSBhcyBmdWxsIHVubGVzcyBpdCYjMzk7cyBhY3R1YWxseSBiZWVuIGNvbmZpZ3VyZWQuIEl0IG5vdyByZXR1cm5zIGZhbHNlIGlmIGAhcXVvdGEtJmd0O2VzemAKClRoYXQgcmVzb2x2ZXMgdGhlIHF1b3RhIGlzc3VlLCBzbyBJJiMzOTttIGhhcHB5LgoKKipEQU1PTiBSZWFjaGFiaWxpdHkgYW5kIENvbnRleHQqKgoKT2theSwgc2VwYXJhdGUgdG9waWMuIElzIERBTU9OIGl0c2VsZiByb2J1c3Q/IElzIGl0IHN0YW5kYXJkLCBlYXNpbHkgZnV6emVkIGluIHRoZSB1c3VhbCBMaW51eCBrZXJuZWwgZW52aXJvbm1lbnRzPwoKWWVzLCBEQU1PTiBpcyBjb3JlIE1NIGNvZGUhIEl0JiMzOTtzIHJpZ2h0IHRoZXJlIGluIGBtbS9kYW1vbi9gLCBhIGZpcnN0LWNsYXNzIGNpdGl6ZW4gb2YgdGhlIExpbnV4IGtlcm5lbC4gSXQmIzM5O3MgY29uZmlndXJhYmxlIHRocm91Z2ggc3RhbmRhcmQgaW50ZXJmYWNlcyBsaWtlIHN5c2ZzIChgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW5gKSwgZGVidWdmcywgYW5kIGBzeXNfZGFtb25gLiBTbyBpdCYjMzk7cyByZWFkaWx5IGFjY2Vzc2libGUgYW5kIHRlc3RhYmxlLiBBIHF1aWNrIGNoZWNrIG9mIEtjb25maWcgY29uZmlybXMgaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBEQU1PTiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWc9Mz1tZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbm1tL2RhbW9uL0tjb25maWctNC1cbm1tL2RhbW9uL0tjb25maWc6NTpjb25maWcgREFNT05cbm1tL2RhbW9uL0tjb25maWctNi1cdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy0xNC1cbm1tL2RhbW9uL0tjb25maWc6MTU6Y29uZmlnIERBTU9OX0RFQlVHX1NBTklUWVxubW0vZGFtb24vS2NvbmZpZy0xNi1cdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTI1LVxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxubW0vZGFtb24vS2NvbmZpZy0yNy1cdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctMzctXG5tbS9kYW1vbi9LY29uZmlnOjM4OmNvbmZpZyBEQU1PTl9WQUREUlxubW0vZGFtb24vS2NvbmZpZy0zOS1cdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy00Ni1cbm1tL2RhbW9uL0tjb25maWc6NDc6Y29uZmlnIERBTU9OX1BBRERSXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVx0Ym9vbCBcJiMzNDtEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy01NS1cbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNTctXHRib29sIFwmIzM0O1Rlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuLS1cbm1tL2RhbW9uL0tjb25maWctNjctXG5tbS9kYW1vbi9LY29uZmlnOjY4OmNvbmZpZyBEQU1PTl9TWVNGU1xubW0vZGFtb24vS2NvbmZpZy02OS1cdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy03NS1cbm1tL2RhbW9uL0tjb25maWc6NzY6Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1Rcbm1tL2RhbW9uL0tjb25maWctNzctXHRib29sIFwmIzM0O1Rlc3QgZm9yIGRhbW9uIHN5c2ZzIGludGVyZmFjZVwmIzM0OyBpZiAhS1VOSVRfQUxMX1RFU1RTXG4tLVxubW0vZGFtb24vS2NvbmZpZy04Ny1cbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cbm1tL2RhbW9uL0tjb25maWctODktXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXCYjMzQ7XG4tLVxubW0vZGFtb24vS2NvbmZpZy05OS1cbm1tL2RhbW9uL0tjb25maWc6MTAwOmNvbmZpZyBEQU1PTl9MUlVfU09SVFxubW0vZGFtb24vS2NvbmZpZy0xMDEtXHRib29sIFwmIzM0O0J1aWxkIERBTU9OLWJhc2VkIExSVS1saXN0cyBzb3J0aW5nIChEQU1PTl9MUlVfU09SVClcJiMzNDtcbi0tXG5tbS9kYW1vbi9LY29uZmlnLTEwNy1cbm1tL2RhbW9uL0tjb25maWc6MTA4OmNvbmZpZyBEQU1PTl9TVEFUXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cdGJvb2wgXCYjMzQ7QnVpbGQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBzdGF0IChEQU1PTl9TVEFUKVwmIzM0O1xuLS1cbm1tL2RhbW9uL0tjb25maWctMTE1LVxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXG5tbS9kYW1vbi9LY29uZmlnLTExNy1cdGJvb2wgXCYjMzQ7RW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5MjM1CgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogMjIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSBmaWxlczoKCioqQ2hlY2tpbmcgaW4gb24gRGFtb24mIzM5O3MgV29yayoqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0JiMzOTtzIGNvb2tpbmcgd2l0aCB0aGUgTWVtb3J5IE1hbmFnZW1lbnQgRGFtb24gKERBTU9OKSBjb2RlLiBJIHNob3VsZCBzdGFydCBieSB0YWtpbmcgYSBsb29rIGF0IGBtbS9kYW1vbi9NYWtlZmlsZWAgYW5kIGBtbS9kYW1vbi9LY29uZmlnYC4gVGhvc2UgYXJlIHRoZSB1c3VhbCBzdXNwZWN0cy4gVGhlIGBNYWtlZmlsZWAgd2lsbCB0ZWxsIG1lIGhvdyB0aGUgREFNT04gY29kZSBpcyBiZWluZyBidWlsdCBhbmQgbGlua2VkLCB3aGF0IGRlcGVuZGVuY2llcyBpdCBoYXMsIGFuZCB3aGVyZSBpdCBmaXRzIGludG8gdGhlIGJyb2FkZXIga2VybmVsIGJ1aWxkIHByb2Nlc3MuIEkmIzM5O2xsIGJlIGxvb2tpbmcgZm9yIGZsYWdzLCBzcGVjaWZpYyBzb3VyY2UgZmlsZSBpbmNsdXNpb25zLCBhbmQgYW55IHVudXN1YWwgYnVpbGQgY29uZmlndXJhdGlvbnMuCgpUaGVuLCBJJiMzOTtsbCBtb3ZlIG92ZXIgdG8gdGhlIGBLY29uZmlnYCBmaWxlLiBUaGlzIGlzIHdoZXJlIHRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgZm9yIERBTU9OIGxpdmUuIEkmIzM5O2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkL2Rpc2FibGVkLCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSwgYW5kIHdoYXQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWxsb3cuIFRoZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBpbiBLY29uZmlnIGFyZSBhbHNvIG9mIGludGVyZXN0LiBBcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgcHJlc2VudCBmb3IgREFNT04gdG8gZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBEQU1PTiYjMzk7cyBjdXJyZW50IHN0YXRlIGFuZCBhbnkgY2hhbmdlcyB0aGF0IGhhdmUgYmVlbiBtYWRlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMSwKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgICAxOlx0IyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuICAgMjpcdFxuICAgMzpcdG9iai15XHRcdFx0XHQ6PSBjb3JlLm9cbiAgIDQ6XHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cbiAgIDU6XHRvYmotJChDT05GSUdfREFNT05fUEFERFIpXHQmIzQzOz0gb3BzLWNvbW1vbi5vIHBhZGRyLm9cbiAgIDY6XHRvYmotJChDT05GSUdfREFNT05fU1lTRlMpXHQmIzQzOz0gc3lzZnMtY29tbW9uLm8gc3lzZnMtc2NoZW1lcy5vIHN5c2ZzLm9cbiAgIDc6XHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xuICAgODpcdG9iai0kKENPTkZJR19EQU1PTl9MUlVfU09SVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIGxydV9zb3J0Lm9cbiAgIDk6XHRvYmotJChDT05GSUdfREFNT05fU1RBVClcdCYjNDM7PSBtb2R1bGVzLWNvbW1vbi5vIHN0YXQub1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE3LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NzU5CgkJCQkJCQlvdXRwdXQ6IDMzCgkJCQkJCQl0aG91Z2h0czogNTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcy4KCioqRXhhbWluaW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uIExhbmRzY2FwZSoqCgpSaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVsYXRpb25zaGlwcyBhbmQgZGVwZW5kZW5jaWVzIHN1cnJvdW5kaW5nIHRoZSBEQU1PTiBmZWF0dXJlcywgbGlrZSBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGFuZCB0aGUgYWRkcmVzcy1zcGFjZS1zcGVjaWZpYyBvcHRpb25zOiBgQ09ORklHX0RBTU9OX1BBRERSYCBhbmQgYENPTkZJR19EQU1PTl9WQUREUmAuIEkmIzM5O2xsIHN0YXJ0IGJ5IGNoZWNraW5nIHRoZSBgbW0vZGFtb24vS2NvbmZpZ2AgZmlsZS4gVGhhdCYjMzk7cyB0aGUgZ28tdG8gcGxhY2UgZm9yIHVuZGVyc3RhbmRpbmcgaG93IGFsbCB0aGVzZSBvcHRpb25zIHJlbGF0ZSB0byBlYWNoIG90aGVyIGluIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCBvdGhlciBjb25maWd1cmF0aW9ucyBhcmUgcmVxdWlyZWQgb3IgbXV0dWFsbHkgZXhjbHVzaXZlLCBhbmQgaG93IHRoZSBmZWF0dXJlIGZsYWdzIGltcGFjdCBlYWNoIG90aGVyLiBUaGlzIGlzIGNydWNpYWwgZm9yIHVuZGVyc3RhbmRpbmcgdGhlIGltcGFjdCBvZiBlbmFibGluZyBvciBkaXNhYmxpbmcgYSBnaXZlbiBmZWF0dXJlIGFuZCBmb3IgcG90ZW50aWFsbHkgZGVidWdnaW5nIGFueSBjb25maWd1cmF0aW9uIGlzc3VlcyB0aGF0IG1pZ2h0IGFyaXNlIHdoZW4gd29ya2luZyB3aXRoIERBTU9OLiBUaGlzIGFsc28gaGVscHMgaW4gYnVpbGRpbmcgdXAgYSBtZW50YWwgbW9kZWwgb2YgdGhlIG92ZXJhbGwgYXJjaGl0ZWN0dXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O21tL2RhbW9uL0tjb25maWcmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDgwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcbiAgIDI6XHRcbiAgIDM6XHRtZW51IFwmIzM0O0RhdGEgQWNjZXNzIE1vbml0b3JpbmdcJiMzNDtcbiAgIDQ6XHRcbiAgIDU6XHRjb25maWcgREFNT05cbiAgIDY6XHRcdGJvb2wgXCYjMzQ7REFNT046IERhdGEgQWNjZXNzIE1vbml0b3JpbmcgRnJhbWV3b3JrXCYjMzQ7XG4gICA3Olx0XHRoZWxwXG4gICA4Olx0XHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcbiAgIDk6XHRcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXG4gIDEwOlx0XHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXG4gIDExOlx0XG4gIDEyOlx0XHQgIFNlZSBodHRwczovL3d3dy5rZXJuZWwub3JnL2RvYy9odG1sL2xhdGVzdC9tbS9kYW1vbi9pbmRleC5odG1sIGZvclxuICAxMzpcdFx0ICBtb3JlIGluZm9ybWF0aW9uLlxuICAxNDpcdFxuICAxNTpcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcbiAgMTY6XHRcdGJvb2wgXCYjMzQ7Q2hlY2sgc2FuaXR5IG9mIERBTU9OIGNvZGVcJiMzNDtcbiAgMTc6XHRcdGRlcGVuZHMgb24gREFNT05cbiAgMTg6XHRcdGhlbHBcbiAgMTk6XHRcdCAgVGhpcyBlbmFibGVzIGFkZGl0aW9uYWwgREFNT04gZGVidWdnaW5nLXB1cnBvc2Ugc2FuaXR5IGNoZWNrcyBpblxuICAyMDpcdFx0ICBEQU1PTiBjb2RlLiAgVGhpcyBjYW4gYmUgdXNlZnVsIGZvciBmaW5kaW5nIGJ1Z3MsIGJ1dCBpbXBvc2VcbiAgMjE6XHRcdCAgYWRkaXRpb25hbCBvdmVyaGVhZC4gIFRoaXMgaXMgdGhlcmVmb3JlIHJlY29tbWVuZGVkIHRvIGJlIGVuYWJsZWQgb25cbiAgMjI6XHRcdCAgb25seSBkZXZlbG9wbWVudCBhbmQgdGVzdCBzZXR1cHMuXG4gIDIzOlx0XG4gIDI0Olx0XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4gIDI1Olx0XG4gIDI2Olx0Y29uZmlnIERBTU9OX0tVTklUX1RFU1RcbiAgMjc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb25cJiMzNDsgaWYgIUtVTklUX0FMTF9URVNUU1xuICAyODpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgS1VOSVQ9eVxuICAyOTpcdFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcbiAgMzA6XHRcdGhlbHBcbiAgMzE6XHRcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDMyOlx0XG4gIDMzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICAzNDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgMzU6XHRcbiAgMzY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgMzc6XHRcbiAgMzg6XHRjb25maWcgREFNT05fVkFERFJcbiAgMzk6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXCYjMzQ7XG4gIDQwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBNTVVcbiAgNDE6XHRcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xuICA0MjpcdFx0ZGVmYXVsdCBEQU1PTlxuICA0MzpcdFx0aGVscFxuICA0NDpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXG4gIDQ1Olx0XHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cbiAgNDY6XHRcbiAgNDc6XHRjb25maWcgREFNT05fUEFERFJcbiAgNDg6XHRcdGJvb2wgXCYjMzQ7RGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZVwmIzM0O1xuICA0OTpcdFx0ZGVwZW5kcyBvbiBEQU1PTiBcdTAwMjZcdTAwMjYgTU1VXG4gIDUwOlx0XHRzZWxlY3QgUEFHRV9JRExFX0ZMQUdcbiAgNTE6XHRcdGRlZmF1bHQgREFNT05cbiAgNTI6XHRcdGhlbHBcbiAgNTM6XHRcdCAgVGhpcyBidWlsZHMgdGhlIGRlZmF1bHQgZGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciBEQU1PTlxuICA1NDpcdFx0ICB0aGF0IHdvcmtzIGZvciB0aGUgcGh5c2ljYWwgYWRkcmVzcyBzcGFjZS5cbiAgNTU6XHRcbiAgNTY6XHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxuICA1NzpcdFx0Ym9vbCBcJiMzNDtUZXN0IGZvciBEQU1PTiBvcGVyYXRpb25zXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNTg6XHRcdGRlcGVuZHMgb24gREFNT05fVkFERFIgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNTk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDYwOlx0XHRoZWxwXG4gIDYxOlx0XHQgIFRoaXMgYnVpbGRzIHRoZSBEQU1PTiB2aXJ0dWFsIGFkZHJlc3NlcyBvcGVyYXRpb25zIEt1bml0IHRlc3Qgc3VpdGUuXG4gIDYyOlx0XG4gIDYzOlx0XHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxuICA2NDpcdFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cbiAgNjU6XHRcbiAgNjY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgTi5cbiAgNjc6XHRcbiAgNjg6XHRjb25maWcgREFNT05fU1lTRlNcbiAgNjk6XHRcdGJvb2wgXCYjMzQ7REFNT04gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7XG4gIDcwOlx0XHRkZXBlbmRzIG9uIERBTU9OIFx1MDAyNlx1MDAyNiBTWVNGU1xuICA3MTpcdFx0ZGVmYXVsdCBEQU1PTlxuICA3MjpcdFx0aGVscFxuICA3MzpcdFx0ICBUaGlzIGJ1aWxkcyB0aGUgc3lzZnMgaW50ZXJmYWNlIGZvciBEQU1PTi4gIFRoZSB1c2VyIHNwYWNlIGNhbiB1c2VcbiAgNzQ6XHRcdCAgdGhlIGludGVyZmFjZSBmb3IgYXJiaXRyYXJ5IGRhdGEgYWNjZXNzIG1vbml0b3JpbmcuXG4gIDc1Olx0XG4gIDc2Olx0Y29uZmlnIERBTU9OX1NZU0ZTX0tVTklUX1RFU1RcbiAgNzc6XHRcdGJvb2wgXCYjMzQ7VGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXCYjMzQ7IGlmICFLVU5JVF9BTExfVEVTVFNcbiAgNzg6XHRcdGRlcGVuZHMgb24gREFNT05fU1lTRlMgXHUwMDI2XHUwMDI2IEtVTklUPXlcbiAgNzk6XHRcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXG4gIDgwOlx0XHRoZWxwXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDg0CgkJCQkJCQlvdXRwdXQ6IDI1CgkJCQkJCQl0aG91Z2h0czogODcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZToKCioqQW5hbHl6aW5nIHRoZSBEQU1PTiBDb25maWd1cmF0aW9uKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBob3cgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIEkgc2VlIHRoYXQgYGNvcmUuY2AgaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaGUga2V5IHNlZW1zIHRvIGJlIGBDT05GSUdfREFNT05gLiBUaGUgYG9iai0kKENPTkZJR19EQU1PTikgJiM0Mzs9IGNvcmUub2Agb3IgdGhlIGBvYmoteSA6PSBjb3JlLm9gIHdpdGhpbiBgbW0vZGFtb24vTWFrZWZpbGVgIGNvbmZpcm1zIHRoYXQgYGNvcmUuY2AgaXMgb25seSBpbmNsdWRlZCB3aGVuIGBDT05GSUdfREFNT05gIGlzIGVuYWJsZWQgZHVyaW5nIHRoZSBjb25maWd1cmF0aW9uIHN0YWdlLiBJIG5lZWQgdG8gdHJhY2UgdGhpcyBmdXJ0aGVyIHRvIHNlZSBob3cgYENPTkZJR19EQU1PTmAgaXRzZWxmIGlzIGRlZmluZWQgYW5kIHNldC4gTGV0JiMzOTtzIGRpZyBpbnRvIGBtbS9NYWtlZmlsZWAgdG8gdW5kZXJzdGFuZCB0aGUgY29uZGl0aW9ucyB0aGF0IGNvbnRyb2wgdGhpcyBgZGFtb25gIGNvbXBvbmVudC4gSSYjMzk7bGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBNYWtlZmlsZSBpcyBwcm9jZXNzZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBgQ09ORklHX0RBTU9OYCBpcyBldmFsdWF0ZWQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGUmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7bW0vTWFrZWZpbGU9MTM1PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgJiM0Mzs9IGRlYnVnX3BhZ2VfcmVmLm9cbm1tL01ha2VmaWxlOjEzNjpvYmotJChDT05GSUdfREFNT04pICYjNDM7PSBkYW1vbi9cbm1tL01ha2VmaWxlLTEzNy1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICYjNDM7PSB1c2VyY29weS5vXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExNDk2CgkJCQkJCQlvdXRwdXQ6IDUxCgkJCQkJCQl0aG91Z2h0czogMTQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQU1PTiBRdW90YSBNYW5hZ2VtZW50KioKCk9rYXksIGxldCYjMzk7cyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcXVvdGEgaW1wbGljYXRpb25zIHdpdGhpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uIOKAkyB0aGF0IHN0YXRpYyBoZWxwZXIgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGluIHJlbGF0aW9uIHRvIHRoaXMgY2hhbmdlLgoKRmlyc3QsIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMuIEkmIzM5O20gbG9va2luZyBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgb3IgY2FsbGVycyB0aGF0IGV2ZW50dWFsbHkgbGVhZCB0byBgZGFtb3NfcXVvdGFfaXNfZnVsbGAsIG9yIGFjdHVhbGx5IGRyaXZlIHRoZSBEQU1PTiBvcGVyYXRpb25zLiBFc3NlbnRpYWxseSwgSSYjMzk7bSBtYXBwaW5nIHRoZSBkZXBlbmRlbmNpZXMgYW5kIGNvbnRyb2wgZmxvdyByZWxhdGVkIHRvIHF1b3RhIGNoZWNraW5nLgoKTmV4dCwgSSYjMzk7bGwgYnJvYWRlbiB0aGUgc2NvcGUuIEkmIzM5O2xsIGV4YW1pbmUgYW55IGZ1bmN0aW9ucyB3aXRoaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSwgZXNwZWNpYWxseSB3aXRoaW4gYGNvcmUuY2AsIHRvIGZpZ3VyZSBvdXQgd2hhdCBmdW5jdGlvbnMgZGlyZWN0bHkgY2FsbCwgb3IgaW5kaXJlY3RseSBpbmZsdWVuY2UsIHRoZSBzY2hlbWUgaGFuZGxpbmcgbG9naWMuCgpGaW5hbGx5LCBJIHdhbnQgYSBtb3JlIGNvbXByZWhlbnNpdmUgbGlzdCB3aXRoaW4gYGNvcmUuY2AuIEkmIzM5O2xsIHNlYXJjaCBmb3IgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgYW5kIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBvciBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2UgYW4gZW50cnkgcG9pbnQgZm9yIERBTU9OLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB3aGVyZSBxdW90YSBjaGVja3MgYXJlIHBlcmZvcm1lZCBhbmQgaG93IHRoZXkgaW1wYWN0IERBTU9OJiMzOTtzIG9wZXJhdGlvbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMi8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7ZGFtb25fZG9fYXBwbHlfc2NoZW1lc3xkYW1vc19hZGp1c3RfcXVvdGF8a2RhbW9uZF9mbnxkYW1vbl9zdGFydCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwMzUtICogYmUgY2FsbGVkIGZyb20gYSBzYWZlIGNvbnRleHRzLiAgU3VjaCBjb250ZXh0cyBpbmNsdWRlIGRhbW9uX2N0eCBzZXR1cCB0aW1lXG5tbS9kYW1vbi9jb3JlLmM6MTAzNjogKiB3aGlsZSB0aGUga2RhbW9uZCBpcyBub3QgeWV0IHN0YXJ0ZWQsIGFuZCBpbnNpZGUgb2Yga2RhbW9uZF9mbigpLlxubW0vZGFtb24vY29yZS5jLTEwMzctICpcbm1tL2RhbW9uL2NvcmUuYy0xMDM4LSAqIEluIGRldGFpbCwgYWxsIERBTU9OIEFQSSBjYWxsZXJzIGRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiBmb3IgaW5pdGlhbFxubW0vZGFtb24vY29yZS5jOjEwMzk6ICogc2V0dXAgb2YgZGFtb25fY3R4IGJlZm9yZSBjYWxsaW5nIGRhbW9uX3N0YXJ0KCkuICBTb21lIG9mIHRoZSBBUEkgY2FsbGVyc1xubW0vZGFtb24vY29yZS5jLTEwNDAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cdTAwM2UgZGFtb25fY29tbWl0KCkgZm9yXG5tbS9kYW1vbi9jb3JlLmM6MTA0MTogKiBvbmxpbmUgcGFyYW1ldGVycyB1cGRhdGVzLiAgRmluYWxseSwga2RhbW9uZF9mbigpIGl0c2VsZiB1c2UgdGhpcyBmb3Jcbm1tL2RhbW9uL2NvcmUuYy0xMDQyLSAqIGFwcGx5aW5nIGF1dG8tdHVuZWQgbW9uaXRvcmluZyBpbnRlcnZhbHMuXG4tLVxubW0vZGFtb24vY29yZS5jPTEwNDg9aW50IGRhbW9uX3NldF9hdHRycyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwNzQtXHQvKlxubW0vZGFtb24vY29yZS5jOjEwNzU6XHQgKiBuZXh0X2ludGVydmFsc190dW5lX3NpcyB3aWxsIGJlIHVwZGF0ZWQgaW5zaWRlIGtkYW1vbmRfZm4oKS5cbm1tL2RhbW9uL2NvcmUuYy0xMDc2LVx0ICovXG4tLVxubW0vZGFtb24vY29yZS5jPTE5MDU9c3RhdGljIHVuc2lnbmVkIGxvbmcgZGFtb25fYXBwbHlfbWluX25yX3JlZ2lvbnMoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTI0LVxubW0vZGFtb24vY29yZS5jOjE5MjU6c3RhdGljIGludCBrZGFtb25kX2ZuKHZvaWQgKmRhdGEpO1xubW0vZGFtb24vY29yZS5jLTE5MjYtXG5tbS9kYW1vbi9jb3JlLmMtMTkyNy0vKlxubW0vZGFtb24vY29yZS5jOjE5Mjg6ICogX19kYW1vbl9zdGFydCgpIC0gU3RhcnRzIG1vbml0b3Jpbmcgd2l0aCBnaXZlbiBjb250ZXh0LlxubW0vZGFtb24vY29yZS5jLTE5MjktICogQGN0eDpcdG1vbml0b3JpbmcgY29udGV4dFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTM0LSAqL1xubW0vZGFtb24vY29yZS5jOjE5MzU6c3RhdGljIGludCBfX2RhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy0xOTM2LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk0Mi1cdFx0cmVpbml0X2NvbXBsZXRpb24oXHUwMDI2Y3R4LVx1MDAzZWtkYW1vbmRfc3RhcnRlZCk7XG5tbS9kYW1vbi9jb3JlLmM6MTk0MzpcdFx0Y3R4LVx1MDAzZWtkYW1vbmQgPSBrdGhyZWFkX3J1bihrZGFtb25kX2ZuLCBjdHgsIFwmIzM0O2tkYW1vbmQuJWRcJiMzNDssXG5tbS9kYW1vbi9jb3JlLmMtMTk0NC1cdFx0XHRcdG5yX3J1bm5pbmdfY3R4cyk7XG4tLVxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTU5LS8qKlxubW0vZGFtb24vY29yZS5jOjE5NjA6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXG5tbS9kYW1vbi9jb3JlLmMtMTk2MS0gKiBAY3R4czpcdGFuIGFycmF5IG9mIHRoZSBwb2ludGVycyBmb3IgY29udGV4dHMgdG8gc3RhcnQgbW9uaXRvcmluZ1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTY4LSAqIEBleGNsdXNpdmUgaXMgdHJ1ZSBhbmQgYSBncm91cCBvZiB0aHJlYWRzIHRoYXQgY3JlYXRlZCBieSBvdGhlclxubW0vZGFtb24vY29yZS5jOjE5Njk6ICogJiMzOTtkYW1vbl9zdGFydCgpJiMzOTsgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XG5tbS9kYW1vbi9jb3JlLmMtMTk3MC0gKiByZXR1cm5zIC1FQlVTWS5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxOTc0OmludCBkYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMsIGJvb2wgZXhjbHVzaXZlKVxubW0vZGFtb24vY29yZS5jLTE5NzUte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTk5LVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgbnJfY3R4czsgaSYjNDM7JiM0MzspIHtcbm1tL2RhbW9uL2NvcmUuYzoyMDAwOlx0XHRlcnIgPSBfX2RhbW9uX3N0YXJ0KGN0eHNbaV0pO1xubW0vZGFtb24vY29yZS5jLTIwMDEtXHRcdGlmIChlcnIpXG4tLVxubW0vZGFtb24vY29yZS5jPTIwMzk9dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA0My1cdGZvciAoaSA9IDA7IGkgXHUwMDNjIG5yX2N0eHM7IGkmIzQzOyYjNDM7KVxubW0vZGFtb24vY29yZS5jOjIwNDQ6XHRcdC8qIG5yX3J1bm5pbmdfY3R4cyBpcyBkZWNyZW1lbnRlZCBpbiBrZGFtb25kX2ZuICovXG5tbS9kYW1vbi9jb3JlLmMtMjA0NS1cdFx0X19kYW1vbl9zdG9wKGN0eHNbaV0pO1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMDcwPWludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTIwOTctICpcbm1tL2RhbW9uL2NvcmUuYzoyMDk4OiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG5tbS9kYW1vbi9jb3JlLmMtMjA5OS0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjEwNj1pbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG4tLVxubW0vZGFtb24vY29yZS5jLTIxNTItICpcbm1tL2RhbW9uL2NvcmUuYzoyMTUzOiAqIE5vdGUgdGhhdCB0aGlzIGZ1bmN0aW9uIHNob3VsZCBiZSBjYWxsZWQgb25seSBhZnRlciBkYW1vbl9zdGFydCgpIHdpdGggdGhlXG5tbS9kYW1vbi9jb3JlLmMtMjE1NC0gKiBAY3R4IGhhcyBzdWNjZWVkZWQuICBPdGhlcndpc2UsIHRoaXMgZnVuY3Rpb24gY291bGQgZmFsbCBpbnRvIGFuIGluZGVmaW5pdGVcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjU3ND1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjY0My1cbm1tL2RhbW9uL2NvcmUuYzoyNjQ0OnN0YXRpYyB2b2lkIGRhbW9uX2RvX2FwcGx5X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqYyxcbm1tL2RhbW9uL2NvcmUuYy0yNjQ1LVx0XHRcdFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjY5Nj1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjcwMy1cbm1tL2RhbW9uL2NvcmUuYzoyNzA0Olx0XHRkYW1vbl9kb19hcHBseV9zY2hlbWVzKGMsIHQsIHIpO1xubW0vZGFtb24vY29yZS5jLTI3MDUtXHRcdC8qXG4tLVxubW0vZGFtb24vY29yZS5jPTMxMjY9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzEzOS1cbm1tL2RhbW9uL2NvcmUuYzozMTQwOnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXG5tbS9kYW1vbi9jb3JlLmMtMzE0MS17XG4tLVxubW0vZGFtb24vY29yZS5jPTMyMjE9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyMzYtXG5tbS9kYW1vbi9jb3JlLmM6MzIzNzpcdFx0ZGFtb3NfYWRqdXN0X3F1b3RhKGMsIHMpO1xubW0vZGFtb24vY29yZS5jLTMyMzgtXHR9XG4tLVxubW0vZGFtb24vY29yZS5jPTM3MzI9c3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG4tLVxubW0vZGFtb24vY29yZS5jLTM3NTMtICovXG5tbS9kYW1vbi9jb3JlLmM6Mzc1NDpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcbm1tL2RhbW9uL2NvcmUuYy0zNzU1LXtcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcbi0tXG5tbS9kYW1vbi9scnVfc29ydC5jLTQyMS1cbm1tL2RhbW9uL2xydV9zb3J0LmM6NDIyOlx0ZXJyID0gZGFtb25fc3RhcnQoXHUwMDI2Y3R4LCAxLCB0cnVlKTtcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIzLVx0aWYgKGVycilcbi0tXG5tbS9kYW1vbi9yZWNsYWltLmM9MzMwPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXG4tLVxubW0vZGFtb24vcmVjbGFpbS5jLTM0Mi1cbm1tL2RhbW9uL3JlY2xhaW0uYzozNDM6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZjdHgsIDEsIHRydWUpO1xubW0vZGFtb24vcmVjbGFpbS5jLTM0NC1cdGlmIChlcnIpXG4tLVxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcbi0tXG5tbS9kYW1vbi9zdGF0LmMtMjEyLVx0XHRyZXR1cm4gLUVOT01FTTtcbm1tL2RhbW9uL3N0YXQuYzoyMTM6XHRlcnIgPSBkYW1vbl9zdGFydChcdTAwMjZkYW1vbl9zdGF0X2NvbnRleHQsIDEsIHRydWUpO1xubW0vZGFtb24vc3RhdC5jLTIxNC1cdGlmIChlcnIpIHtcbi0tXG5tbS9kYW1vbi9zeXNmcy5jPTIyNDM9c3RhdGljIGludCBkYW1vbl9zeXNmc190dXJuX2RhbW9uX29uKHN0cnVjdCBkYW1vbl9zeXNmc19rZGFtb25kICprZGFtb25kKVxuLS1cbm1tL2RhbW9uL3N5c2ZzLmMtMjI2Ny1cdH1cbm1tL2RhbW9uL3N5c2ZzLmM6MjI2ODpcdGVyciA9IGRhbW9uX3N0YXJ0KFx1MDAyNmN0eCwgMSwgZmFsc2UpO1xubW0vZGFtb24vc3lzZnMuYy0yMjY5LVx0aWYgKGVycikge1xuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNjM1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaC0xNjYxLSAqIFRoaXMgdGVzdHMgdGhlIGludmFyaWFudCBpbnRyb2R1Y2VkIGJ5OlxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE2NjI6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXCYjMzQ7bW0vZGFtb24vY29yZTogZml4IGRhbW9zX3dhbGsoKSB2cyBrZGFtb25kX2ZuKCkgZXhpdCByYWNlXCYjMzQ7KVxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2NjMtICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NTIwCgkJCQkJCQlvdXRwdXQ6IDQ1CgkJCQkJCQl0aG91Z2h0czogOTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqREFNT04gS2VybmVsIE1vZHVsZSBFeGFtaW5hdGlvbioqCgpPa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgREFNT04ga2VybmVsIG1vZHVsZSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHksIHBhcnRpY3VsYXJseSBob3cgdGhlIGRhdGEgYWNjZXNzIG1vbml0b3Igb3BlcmF0ZXMuIEZpcnN0LCBJJiMzOTttIHplcm9pbmcgaW4gb24gYGtkYW1vbmRfZm5gIOKAkyB0aGF0JiMzOTtzIHRoZSBtYWluIERBTU9OIGtlcm5lbCB0aHJlYWQsIHJpZ2h0PyBJIHdhbnQgdG8gZW5zdXJlIEkgZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgaW4gdGhlIG1vbml0b3JpbmcgcHJvY2Vzcy4gVGhlbiwgSSBuZWVkIHRvIGxvb2sgYXQgYW55IG5vbi1zdGF0aWMgZnVuY3Rpb25zIHdpdGhpbiBgbW0vZGFtb24vY29yZS5jYCBhbmQgYHN5c2ZzLmNgLiBMZXQmIzM5O3Mgc2VlLi4uIHdoYXQmIzM5O3MgZXhwb3NlZCBhcyBpdHMgbWFpbiBBUEkgZnVuY3Rpb25zPyBJIGhhdmUgYSBmZWVsaW5nIEkmIzM5O2xsIGJlIGxvb2tpbmcgYXQgY2FsbHMgdG8gYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBgZGFtb25fc2V0X3NjaGVtZXNgLCBhbmQgYGRhbW9uX3N5c2ZzX2NtZF9yZXF1ZXN0YC4gVGhvc2Ugc2hvdWxkIGJlIGNyaXRpY2FsIGVudHJ5IHBvaW50cyBmb3Igc3RhcnRpbmcsIGNvbW1pdHRpbmcgY29udGV4dHMsIHNldHRpbmcgc2NoZW1lcywgYW5kIGhhbmRsaW5nIHN5c2ZzIGNvbW1hbmRzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gdGhvc2UgQVBJcyBhbmQgYGtkYW1vbmRfZm5gLiBGaW5hbGx5LCBsZXQmIzM5O3MgY29uZmlybSB0aGUgZXhwb3J0ZWQgc3ltYm9scyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2Ag4oCTIGEgcXVpY2sgY2hlY2sgdG8gdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW50ZW50aW9uYWxseSBleHBvc2VkIHRvIHRoZSB3aWRlciBrZXJuZWwgYW5kIHRvIGV4dGVybmFsIG1vZHVsZXMuIFRoYXQgbGlzdCBvZiBzeW1ib2xzIHNob3VsZCByb3VuZCBvdXQgbXkgb3ZlcnZpZXcgb2YgdGhlIG1vZHVsZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7XmludCBkYW1vbl98XnZvaWQgZGFtb25ffF5zdHJ1Y3QgLiogXFwqZGFtb25fJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7bW0vZGFtb24vY29yZS5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz01MD1ib29sIGRhbW9uX2lzX3JlZ2lzdGVyZWRfb3BzKGVudW0gZGFtb25fb3BzX2lkIGlkKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MC0gKi9cbm1tL2RhbW9uL2NvcmUuYzo3MTppbnQgZGFtb25fcmVnaXN0ZXJfb3BzKHN0cnVjdCBkYW1vbl9vcGVyYXRpb25zICpvcHMpXG5tbS9kYW1vbi9jb3JlLmMtNzIte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy05Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzo5ODppbnQgZGFtb25fc2VsZWN0X29wcyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIGVudW0gZGFtb25fb3BzX2lkIGlkKVxubW0vZGFtb24vY29yZS5jLTk5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTEzLVxubW0vZGFtb24vY29yZS5jOjExNDpzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcbm1tL2RhbW9uL2NvcmUuYy0xMTUtXHRcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXG4tLVxubW0vZGFtb24vY29yZS5jLTEyOC1cbm1tL2RhbW9uL2NvcmUuYzoxMjk6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbm1tL2RhbW9uL2NvcmUuYy0xMzAte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMzk9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTQzLVxubW0vZGFtb24vY29yZS5jOjE0NDp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXG5tbS9kYW1vbi9jb3JlLmMtMTQ1LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MTUwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9udGhfZmlsdGVyKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXG4tLVxubW0vZGFtb24vY29yZS5jLTE2MS1cbm1tL2RhbW9uL2NvcmUuYzoxNjI6c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcbm1tL2RhbW9uL2NvcmUuYy0xNjMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xNzQtXG5tbS9kYW1vbi9jb3JlLmM6MTc1OnZvaWQgZGFtb25fYWRkX3Byb2JlKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3Byb2JlICpwcm9iZSlcbm1tL2RhbW9uL2NvcmUuYy0xNzYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0zMTg9c3RhdGljIHZvaWQgZGFtb25fdmVyaWZ5X25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXG4tLVxubW0vZGFtb24vY29yZS5jLTMyNy0gKi9cbm1tL2RhbW9uL2NvcmUuYzozMjg6c3RydWN0IGRhbW9uX3JlZ2lvbiAqZGFtb25fbmV3X3JlZ2lvbih1bnNpZ25lZCBsb25nIHN0YXJ0LCB1bnNpZ25lZCBsb25nIGVuZClcbm1tL2RhbW9uL2NvcmUuYy0zMjkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz00NDU9c3RhdGljIGludCBkYW1vbl9maWxsX3JlZ2lvbnNfaG9sZXMoc3RydWN0IGRhbW9uX3JlZ2lvbiAqZmlyc3QsXG4tLVxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cbm1tL2RhbW9uL2NvcmUuYzo0Nzg6aW50IGRhbW9uX3NldF9yZWdpb25zKHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsIHN0cnVjdCBkYW1vbl9hZGRyX3JhbmdlICpyYW5nZXMsXG5tbS9kYW1vbi9jb3JlLmMtNDc5LVx0XHR1bnNpZ25lZCBpbnQgbnJfcmFuZ2VzLCB1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXG4tLVxubW0vZGFtb24vY29yZS5jPTY2OT1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXG4tLVxubW0vZGFtb24vY29yZS5jLTY4MS1cbm1tL2RhbW9uL2NvcmUuYzo2ODI6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcbm1tL2RhbW9uL2NvcmUuYy02ODMtXHRcdFx0ZW51bSBkYW1vc19hY3Rpb24gYWN0aW9uLFxuLS1cbm1tL2RhbW9uL2NvcmUuYz03MjQ9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03MzQtXG5tbS9kYW1vbi9jb3JlLmM6NzM1OnZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcbm1tL2RhbW9uL2NvcmUuYy03MzYte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz03NDY9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYy03NTAtXG5tbS9kYW1vbi9jb3JlLmM6NzUxOnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxubW0vZGFtb24vY29yZS5jLTc1Mi17XG4tLVxubW0vZGFtb24vY29yZS5jLTc3NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzo3NzY6c3RydWN0IGRhbW9uX3RhcmdldCAqZGFtb25fbmV3X3RhcmdldCh2b2lkKVxubW0vZGFtb24vY29yZS5jLTc3Ny17XG4tLVxubW0vZGFtb24vY29yZS5jLTc5Mi1cbm1tL2RhbW9uL2NvcmUuYzo3OTM6dm9pZCBkYW1vbl9hZGRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy03OTQte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04MDM9c3RhdGljIHZvaWQgZGFtb25fZGVsX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy04MDctXG5tbS9kYW1vbi9jb3JlLmM6ODA4OnZvaWQgZGFtb25fZnJlZV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdClcbm1tL2RhbW9uL2NvcmUuYy04MDkte1xuLS1cbm1tL2RhbW9uL2NvcmUuYy04MTYtXG5tbS9kYW1vbi9jb3JlLmM6ODE3OnZvaWQgZGFtb25fZGVzdHJveV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxubW0vZGFtb24vY29yZS5jLTgxOC17XG4tLVxubW0vZGFtb24vY29yZS5jPTgyNz11bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy04MzEtXG5tbS9kYW1vbi9jb3JlLmM6ODMyOnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcbm1tL2RhbW9uL2NvcmUuYy04MzMte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz04NzI9c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtODc5LVxubW0vZGFtb24vY29yZS5jOjg4MDp2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbm1tL2RhbW9uL2NvcmUuYy04ODEte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXG4tLVxubW0vZGFtb24vY29yZS5jLTEwNDctICovXG5tbS9kYW1vbi9jb3JlLmM6MTA0ODppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcbm1tL2RhbW9uL2NvcmUuYy0xMDQ5LXtcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMTA5NS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoxMDk2OnZvaWQgZGFtb25fc2V0X3NjaGVtZXMoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb3MgKipzY2hlbWVzLFxubW0vZGFtb24vY29yZS5jLTEwOTctXHRcdFx0c3NpemVfdCBucl9zY2hlbWVzKVxuLS1cbm1tL2RhbW9uL2NvcmUuYz0xODA5PXN0YXRpYyBzdHJ1Y3QgZGFtb25fY3R4ICpkYW1vbl9uZXdfdGVzdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0KVxuLS1cbm1tL2RhbW9uL2NvcmUuYy0xODM3LSAqL1xubW0vZGFtb24vY29yZS5jOjE4Mzg6aW50IGRhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpXG5tbS9kYW1vbi9jb3JlLmMtMTgzOS17XG4tLVxubW0vZGFtb24vY29yZS5jLTE4NTctICovXG5tbS9kYW1vbi9jb3JlLmM6MTg1ODppbnQgZGFtb25fbnJfcnVubmluZ19jdHhzKHZvaWQpXG5tbS9kYW1vbi9jb3JlLmMtMTg1OS17XG4tLVxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xuLS1cbm1tL2RhbW9uL2NvcmUuYy0xOTczLSAqL1xubW0vZGFtb24vY29yZS5jOjE5NzQ6aW50IGRhbW9uX3N0YXJ0KHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cywgYm9vbCBleGNsdXNpdmUpXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwMTk9c3RhdGljIHZvaWQgX19kYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjAzOC0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDM5OnZvaWQgZGFtb25fc3RvcChzdHJ1Y3QgZGFtb25fY3R4ICoqY3R4cywgaW50IG5yX2N0eHMpXG5tbS9kYW1vbi9jb3JlLmMtMjA0MC17XG4tLVxubW0vZGFtb24vY29yZS5jPTIwNTQ9Ym9vbCBkYW1vbl9pc19ydW5uaW5nKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjA2OS0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMDcwOmludCBkYW1vbl9rZGFtb25kX3BpZChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXG5tbS9kYW1vbi9jb3JlLmMtMjA3MS17XG4tLVxubW0vZGFtb24vY29yZS5jLTIxMDUtICovXG5tbS9kYW1vbi9jb3JlLmM6MjEwNjppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXG5tbS9kYW1vbi9jb3JlLmMtMjEwNy17XG4tLVxubW0vZGFtb24vY29yZS5jPTM5NTI9c3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMzk4My0gKi9cbm1tL2RhbW9uL2NvcmUuYzozOTg0OmludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbm1tL2RhbW9uL2NvcmUuYy0zOTg1LVx0XHRcdHVuc2lnbmVkIGxvbmcgKnN0YXJ0LCB1bnNpZ25lZCBsb25nICplbmQsXG4tLVxubW0vZGFtb24vY29yZS5jLTQwMDgtICovXG5tbS9kYW1vbi9jb3JlLmM6NDAwOTp2b2lkIGRhbW9uX3VwZGF0ZV9yZWdpb25fYWNjZXNzX3JhdGUoc3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgYm9vbCBhY2Nlc3NlZClcbm1tL2RhbW9uL2NvcmUuYy00MDEwLXtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTc0MzIKCQkJCQkJCW91dHB1dDogMTU1CgkJCQkJCQl0aG91Z2h0czogNDEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkRBTU9OIENvbmZpZ3VyYXRpb24gYW5kIEZ1enppbmcgQW5hbHlzaXMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBmb2N1cyBzeW1ib2xzIGZvciB0aGlzIERBTU9OIGFuYWx5c2lzIGFyZSBjbGVhcmx5IGRlZmluZWQ6IGBkYW1vbl9zdGFydGAsIGBkYW1vbl9zZXRfc2NoZW1lc2AsIGBkYW1vbl9jb21taXRfY3R4YCwgYW5kIGBkYW1vbl9uZXdfc2NoZW1lYC4gVGhlc2Ugc2VlbSB0byBiZSB0aGUgY29yZSBlbnRyeSBwb2ludHMgb3IgY3JpdGljYWwgZnVuY3Rpb25zIHdpdGhpbiB0aGUgREFNT04gKERhdGEgQWNjZXNzIE1vbml0b3JpbmcpIGZyYW1ld29yay4gSSYjMzk7bGwgbmVlZCB0byBrZWVwIGFuIGV5ZSBvbiB0aGVzZS4KCk5vdywgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIGhhdmUgaWRlbnRpZmllZCBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1ZBRERSYCBhcyBpbXBvcnRhbnQgY29uZmlndXJhdGlvbnMgdG8gY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24mIzM5O3QgbWlzcyBhbnl0aGluZywgc28gSSYjMzk7bGwgZG91YmxlLWNoZWNrIGluIGBtbS9kYW1vbi9LY29uZmlnYCBmb3Igb3RoZXIgcmVsYXRlZCBkZXBlbmRlbmNpZXMuCgpBbHJpZ2h0LCBsb29raW5nIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSwgYERBTU9OYCBpdHNlbGYgZG9lc24mIzM5O3QgaGF2ZSBhbnkgZGVwZW5kZW5jaWVzIHdoaWNoIHNlZW1zIHNlbnNpYmxlIGZvciBhIHRvcC1sZXZlbCBtZW51IGl0ZW0uICBgREFNT05fU1lTRlNgIGlzIGNvbnRpbmdlbnQgb24gYm90aCBgREFNT05gIGFuZCBgU1lTRlNgLCB3aGljaCBtYWtlcyBwZXJmZWN0IHNlbnNlIGZvciBlbmFibGluZyBzeXN0ZW0gZmlsZS1iYXNlZCBhY2Nlc3MuIFRoZW4sIGBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9WQUREUmAgZGVwZW5kIG9uIGBEQU1PTmAgYW5kIGBNTVVgLiBUaGlzIG1ha2VzIGxvZ2ljYWwgc2Vuc2UgYXMgd2VsbCwgbWFwcGluZyBwaHlzaWNhbCBvciB2aXJ0dWFsIGFkZHJlc3NlcyBpcyBvbmx5IHBvc3NpYmxlIGlmIERBTU9OIGlzIGVuYWJsZWQgYW5kIGFuIE1NVSBpcyBwcmVzZW50LiBJIGFsc28gbmVlZCB0byBub3RlIGBEQU1PTl9SRUNMQUlNYCBkZXBlbmRzIG9uIGBEQU1PTiAmYW1wOyZhbXA7IERBTU9OX1BBRERSYCBhbmQgYERBTU9OX0xSVV9TT1JUYCBkZXBlbmRzIG9uIGBEQU1PTiAmYW1wOyZhbXA7IERBTU9OX1BBRERSYCwgYnV0LCB0aG9zZSBhcmUgc2Vjb25kYXJ5IGZvciBub3cuCgpUaGUgbWFpbiBxdWVzdGlvbiBpcywgc2hvdWxkIEkgbWFyayB0aGlzIHBhdGNoIGFzIHdvcnRoIGZ1enppbmc/IFRoZSBtb2RpZmljYXRpb24gdG8gYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGlzIGEgY3JpdGljYWwgZml4LCBzcGVjaWZpY2FsbHkgaW4gdGhlIERBTU9OIE9wZXJhdGlvbiBTY2hlbWVzIChEQU1PUykgcXVvdGEgbWFuYWdlbWVudC4gSXQgZGlyZWN0bHkgaW1wYWN0cyBob3cgREFNT04gZGV0ZXJtaW5lcyB3aGV0aGVyIGEgcXVvdGEgaXMgZXhoYXVzdGVkIG9yIGZ1bGwgd2hlbiB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgaXMgemVyby4gVGhhdCYjMzk7cyBhIGZ1bmRhbWVudGFsIGNoYW5nZSB0byBjb3JlIGZ1bmN0aW9uYWxpdHksIGFuZCBzaW5jZSBpdCBpcyBleHBvc2VkIHRvIHVzZXJzcGFjZSB0aHJvdWdoIHN5c2ZzLCByZWNsYW1hdGlvbiwgYW5kIG1vbml0b3JpbmcgQVBJcywgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLiBUaGUgY2hhbmdlIGlzIHNpZ25pZmljYW50IGVub3VnaCwgYW5kIHRoZSBpbXBhY3QgaXMgaW1wb3J0YW50IGVub3VnaCwgc28gSSYjMzk7bGwgbWFyayBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuCgpUaGVyZWZvcmUsIEkgY2FuIG5vdyBhc3NlbWJsZSBteSBjb25jbHVzaW9uczoKCiogICBgV29ydGhGdXp6aW5nOiB0cnVlYAoqICAgYEZvY3VzU3ltYm9sczogWyYjMzQ7ZGFtb25fc3RhcnQmIzM0OywgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywgJiMzNDtkYW1vbl9uZXdfc2NoZW1lJiMzNDtdYAoqICAgYEVuYWJsZUNvbmZpZ3M6IFsmIzM0O0RBTU9OJiMzNDssICYjMzQ7REFNT05fU1lTRlMmIzM0OywgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LCAmIzM0O0RBTU9OX1ZBRERSJiMzNDtdYAoqICAgYFJlYXNvbmluZzogQ29yZSBmdW5jdGlvbmFsIGZpeCBpbiBEQU1PUyBxdW90YSBtYW5hZ2VtZW50LCByZWFjaGFibGUgdmlhIHVzZXJzcGFjZSBEQU1PTiBBUElzLmAKCkZpbmFsbHksIEkmIzM5O20gcmVhZHkgdG8gY2FsbCBgc2V0LXJlc3VsdHNgLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnNldC1yZXN1bHRzPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7REFNT04mIzM0OywKICAgICYjMzQ7REFNT05fU1lTRlMmIzM0OywKICAgICYjMzQ7REFNT05fUEFERFImIzM0OywKICAgICYjMzQ7REFNT05fVkFERFImIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtkYW1vbl9zdGFydCYjMzQ7LAogICAgJiMzNDtkYW1vbl9jb21taXRfY3R4JiMzNDssCiAgICAmIzM0O2RhbW9uX3NldF9zY2hlbWVzJiMzNDssCiAgICAmIzM0O2RhbW9uX25ld19zY2hlbWUmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgZGFtb3NfcXVvdGFfaXNfZnVsbCgpIGluIG1tL2RhbW9uL2NvcmUuYyB0byByZXR1cm4gZmFsc2Ugd2hlbiB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgKGVzeikgaXMgemVyby4gVGhpcyBmdW5jdGlvbmFsbHkgYWx0ZXJzIERBTU9TIHF1b3RhIGVuZm9yY2VtZW50IGFuZCByZWdpb24gYXBwbGljYXRpb24gYmVoYXZpb3IgaW4gdGhlIERBTU9OIG1lbW9yeSBtb25pdG9yaW5nIHN1YnN5c3RlbSwgd2hpY2ggaXMgcmVhY2hhYmxlIGFuZCBjb25maWd1cmFibGUgdmlhIHN5c2ZzLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtEQU1PTiYjMzQ7LAogICAgJiMzNDtEQU1PTl9TWVNGUyYjMzQ7LAogICAgJiMzNDtEQU1PTl9QQUREUiYjMzQ7LAogICAgJiMzNDtEQU1PTl9WQUREUiYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2RhbW9uX3N0YXJ0JiMzNDssCiAgICAmIzM0O2RhbW9uX2NvbW1pdF9jdHgmIzM0OywKICAgICYjMzQ7ZGFtb25fc2V0X3NjaGVtZXMmIzM0OywKICAgICYjMzQ7ZGFtb25fbmV3X3NjaGVtZSYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyBkYW1vc19xdW90YV9pc19mdWxsKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJldHVybiBmYWxzZSB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIGZ1bmN0aW9uYWxseSBhbHRlcnMgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIHJlZ2lvbiBhcHBsaWNhdGlvbiBiZWhhdmlvciBpbiB0aGUgREFNT04gbWVtb3J5IG1vbml0b3Jpbmcgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgc3lzZnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5JZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Y29yZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGBpZiAoIXF1b3RhLVx1MDAzZWVzeikgcmV0dXJuIGZhbHNlO2ApIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGluIG1tL2RhbW9uL2NvcmUuYyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIChgZXN6YCkgaXMgemVyby4gVGhpcyBpcyBhIHB1cmVseSBpbnRlcm5hbCBsb2dpYyBjaGFuZ2Ugd2l0aGluIERBTU9OJiMzOTtzIHF1b3RhIGVuZm9yY2VtZW50IG1lY2hhbmlzbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFmZmVjdCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbiBvciBidWZmZXIgaGFuZGxpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIHNlY3VyaXR5IGVuZ2luZWVyIHNwZWNpYWxpemluZyBpbiBrZXJuZWwgbWVtb3J5CmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kCmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikKZnV6emluZyBzZXNzaW9uIGluIGFkZGl0aW9uIHRvIHN0YW5kYXJkIEtBU0FOIGZ1enppbmcuCgpDUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjoKLSBTdGFuZGFyZCBLQVNBTiBrZXJuZWwgYnVpbGRzICh1cHN0cmVhbS1hcHBhcm1vci1rYXNhbi5jb25maWcpIGFscmVhZHkgZW5hYmxlCiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOCiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUAogIChsb2NraW5nIGJ1Z3MgYW5kIGRlYWRsb2NrcyksIFVCLXNhbml0aXplcnMsIGFuZCBtZW1vcnkgY29ycnVwdGlvbiBjaGVja3MuCi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsCiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLgoKUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTiwKTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy4KQSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGluY3VycyBzaWduaWZpY2FudCByZXNvdXJjZSBjb3N0cy4gWW91IG11c3QgT05MWQpzZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrcwp0aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLgoKTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3QKdW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsCmEgcGF0Y2ggbWF5IGFsdGVyIGNvbnRyb2wgZmxvdywgYm91bmRzIGNoZWNraW5nLCBvciBkYXRhIGxlbmd0aCBjYWxjdWxhdGlvbnMgaW4gd2F5cwp0aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZwp1bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2wKZmxvdykuIERvIG5vdCBoZXNpdGF0ZSB0byB1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBpbnNwZWN0IHRoZSBzdXJyb3VuZGluZyBjb2RlLApjYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy4KClNldCBOZWVkc0tNU0FOPXRydWUgT05MWSBJRiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBvciBtb2RpZmllczoKMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2IKICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHMKICAgb3Igc3RydWN0dXJlIHBhZGRpbmcgbWlnaHQgbm90IGJlIGZ1bGx5IGluaXRpYWxpemVkL3plcm9lZC4KMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlcwogICBvciBzdHJ1Y3QgZmllbGRzLgozLiBBbGxvY2F0aW9uIG9yIGluaXRpYWxpemF0aW9uIG9mIGNvbXBsZXggZGF0YSBzdHJ1Y3R1cmVzIHdoZXJlIHVuaW5pdGlhbGl6ZWQgZmllbGRzCiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuCjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzCiAgIHVuaW5pdGlhbGl6ZWQgYnl0ZXMgb2YgZXhpc3RpbmcgYnVmZmVycy4KClNldCBOZWVkc0tNU0FOPWZhbHNlIElGOgotIFRoZSBjb2RlIGNoYW5nZXMgcHJpbWFyaWx5IHJpc2sgb3V0LW9mLWJvdW5kcyBhY2Nlc3MsIGFycmF5IG92ZXJmbG93cywgTlVMTCBwb2ludGVyCiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0CiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLgotIEFsbCBzdGFjay9oZWFwIHN0cnVjdHVyZXMgdG91Y2hlZCBvciBpbnRyb2R1Y2VkIGJ5IHRoZSBwYXRjaCBhcmUgZnVsbHkgemVyb2VkCiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLgotIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy4KClVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGUKZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IDVkNTZmYWY4ZmYwNTQ5YjQ4N2NhMjMwZGMyOTlmYWNlNTNlM2I3YTMKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA3OjIyIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jCmluZGV4IDY0NGRhZjVhMTY1NjAuLjUzY2YzMmYxZDUxNWMgMTAwNjQ0Ci0tLSBhL21tL2RhbW9uL2NvcmUuYwomIzQzOyYjNDM7JiM0MzsgYi9tbS9kYW1vbi9jb3JlLmMKQEAgLTI1NjAsNiAmIzQzOzI1NjAsOCBAQCBzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsCiB7CiAJaWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKQogCQlyZXR1cm4gZmFsc2U7CiYjNDM7CWlmICghcXVvdGEtJmd0O2VzeikKJiM0MzsJCXJldHVybiBmYWxzZTsKIAlpZiAocXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzeikKIAkJcmV0dXJuIHRydWU7CiAJLyoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDIwNDIKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiA0OQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhbmFseXNpcyBvZiB0aGUgc2l0dWF0aW9uOgoKKipEaXZpbmcgaW50byB0aGUgREFNT04gQ29yZSoqCgpPa2F5LCBzbyB3ZSYjMzk7dmUgZ290IGEgcGF0Y2ggdG8gcmV2aWV3LCBhbmQgdGhlIGNydWNpYWwgYXJlYSBhcHBlYXJzIHRvIGJlIGluIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbml0aWFsIG1vdmUgaXMgdG8gemVybyBpbiBvbiB0aGF0IGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGNvbnRleHQsIHNvIEkmIzM5O20gdGhpbmtpbmcgSSYjMzk7bGwgbmVlZCB0byBicmluZyB1cCB0aGUgZmlsZSB0byByZXZpZXcgaXQgYW5kIHVuZGVyc3RhbmQgdGhlIG1vZGlmaWNhdGlvbnMuCgpJJiMzOTttIHNwZWNpZmljYWxseSBpbnRlcmVzdGVkIGluIGxpbmUgMjU2MCBhbmQgaXRzIGltbWVkaWF0ZSB2aWNpbml0eS4gSSYjMzk7bGwgdXNlIGEgYHJlYWQtZmlsZWAgY29tbWFuZCwgb3Igc29tZXRoaW5nIHNpbWlsYXIgaW4gbXkgcHJlZmVycmVkIGVudmlyb25tZW50LCB0byBnZXQgYSBjbGVhciB2aWV3IG9mIHRoYXQgc2VjdGlvbiBhbmQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFRoYXQgc2hvdWxkIHByb3ZpZGUgdGhlIG5lY2Vzc2FyeSBjb250ZXh0IHRvIGRldGVybWluZSB0aGUgaW1wbGljYXRpb25zIG9mIHRoZSBwYXRjaC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zMC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyNTQwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzI1NDA6XHRcbjI1NDE6XHRzdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbjI1NDI6XHRcdFx0dW5zaWduZWQgbG9uZyBzel9yZWdpb24sIHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZClcbjI1NDM6XHR7XG4yNTQ0Olx0XHQvKlxuMjU0NTpcdFx0ICogc3pfYXBwbGllZCBjb3VsZCBiZSBiaWdnZXIgdGhhbiBzel9yZWdpb24sIGRlcGVuZGluZyBvbiBvcHNcbjI1NDY6XHRcdCAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhY3Rpb24sIGUuZy4sIGRhbW9zX3BhX3BhZ2VvdXQoKS4gIENoYXJnZSBvbmx5XG4yNTQ3Olx0XHQgKiB0aGUgcmVnaW9uIHNpemUgaW4gdGhlIGNhc2UuXG4yNTQ4Olx0XHQgKi9cbjI1NDk6XHRcdGlmICghcXVvdGEtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20gfHwgc3pfYXBwbGllZCBcdTAwM2Ugc3pfcmVnaW9uKVxuMjU1MDpcdFx0XHRxdW90YS1cdTAwM2VjaGFyZ2VkX3N6ICYjNDM7PSBzel9yZWdpb247XG4yNTUxOlx0XHRlbHNlXG4yNTUyOlx0XHRcdHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogJiM0Mzs9IHN6X2FwcGxpZWQgJiM0MzsgbXVsdF9mcmFjKFxuMjU1MzpcdFx0XHRcdFx0KHN6X3JlZ2lvbiAtIHN6X2FwcGxpZWQpLFxuMjU1NDpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlZmFpbF9jaGFyZ2VfbnVtLFxuMjU1NTpcdFx0XHRcdFx0cXVvdGEtXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xuMjU1NjpcdH1cbjI1NTc6XHRcbjI1NTg6XHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4yNTU5Olx0XHRcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcbjI1NjA6XHR7XG4yNTYxOlx0XHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4yNTYyOlx0XHRcdHJldHVybiBmYWxzZTtcbjI1NjM6XHRcdGlmICghcXVvdGEtXHUwMDNlZXN6KVxuMjU2NDpcdFx0XHRyZXR1cm4gZmFsc2U7XG4yNTY1Olx0XHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcbjI1NjY6XHRcdFx0cmV0dXJuIHRydWU7XG4yNTY3Olx0XHQvKlxuMjU2ODpcdFx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXHUwMDNjbWluX3JlZ2lvbl9zeiByZW1haW5pbmdcbjI1Njk6XHRcdCAqIHF1b3RhIG1lYW5zIHRoZSBxdW90YSBpcyBlZmZlY3RpdmVseSBmdWxsLlxuMjU3MDpcdFx0ICovXG4yNTcxOlx0XHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zejtcbjI1NzI6XHR9XG4yNTczOlx0XG4yNTc0Olx0c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXG4yNTc1Olx0XHRcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcbjI1NzY6XHR7XG4yNTc3Olx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhID0gXHUwMDI2cy1cdTAwM2VxdW90YTtcbjI1Nzg6XHRcdHVuc2lnbmVkIGxvbmcgc3ogPSBkYW1vbl9zel9yZWdpb24ocik7XG4yNTc5Olx0XHRzdHJ1Y3QgdGltZXNwZWM2NCBiZWdpbiwgZW5kO1xuMjU4MDpcdFx0dW5zaWduZWQgbG9uZyBzel9hcHBsaWVkID0gMDtcbjI1ODE6XHRcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQgPSAwO1xuMjU4MjpcdFx0LypcbjI1ODM6XHRcdCAqIFdlIHBsYW4gdG8gc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0IHBlciBrZGFtb25kLCBhcyBEQU1PTiBzeXNmc1xuMjU4NDpcdFx0ICogaW1wbGllcyB3aXRoICYjMzk7bnJfY29udGV4dHMmIzM5OyBmaWxlLiAgTmV2ZXJ0aGVsZXNzLCBvbmx5IHNpbmdsZSBjb250ZXh0XG4yNTg1Olx0XHQgKiBwZXIga2RhbW9uZCBpcyBzdXBwb3J0ZWQgZm9yIG5vdy4gIFNvLCB3ZSBjYW4gc2ltcGx5IHVzZSAmIzM5OzAmIzM5OyBjb250ZXh0XG4yNTg2Olx0XHQgKiBpbmRleCBoZXJlLlxuMjU4NzpcdFx0ICovXG4yNTg4Olx0XHR1bnNpZ25lZCBpbnQgY2lkeCA9IDA7XG4yNTg5Olx0XHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1x0XHQvKiBzY2hlbWVzIGl0ZXJhdG9yICovXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwNzgKCQkJCQkJCW91dHB1dDogMzIKCQkJCQkJCXRob3VnaHRzOiA0MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiBgZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKWAgYW5kIGBlc3pgLiBNeSBpbml0aWFsIGluc3RpbmN0IGlzIHRvIGNoZWNrIHRoZWlyIGltcGxlbWVudGF0aW9uIGFuZCBob3cgdGhleSBhcmUgdXNlZCB3aXRoaW4gdGhlIGBtbS9kYW1vbi9jb3JlLmNgIGZpbGUuIEkmIzM5O2xsIG5lZWQgdG8gdHJhY2UgdGhlIGxvZ2ljIG9mIHRoZXNlIGZ1bmN0aW9ucyB0byB1bmRlcnN0YW5kIHRoZSBxdW90YSBzZXR0aW5nLCB3aGljaCBpcyBrZXkuIEkmIzM5O20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBsaW5lcyBsZWFkaW5nIHVwIHRvIHRoZSBjYWxscywgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBIb3BlZnVsbHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgcmV2ZWFscyB0aGUgaW50ZW50aW9uIGFuZCBpbXBhY3QuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2RhbW9zX3F1b3RhX2lzX3NldCYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O21tL2RhbW9uJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O21tL2RhbW9uL2NvcmUuYz0yMjc2PXN0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI5MS0vKlxubW0vZGFtb24vY29yZS5jOjIyOTI6ICogZGFtb3NfcXVvdGFfaXNfc2V0KCkgLSBSZXR1cm4gaWYgdGhlIGdpdmVuIHF1b3RhIGlzIGFjdHVhbGx5IHNldC5cbm1tL2RhbW9uL2NvcmUuYy0yMjkzLSAqIEBxdW90YTpcdFRoZSBxdW90YSB0byBjaGVjay5cbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjI5Ni0gKi9cbm1tL2RhbW9uL2NvcmUuYzoyMjk3OnN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX3NldChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhKVxubW0vZGFtb24vY29yZS5jLTIyOTgte1xuLS1cbm1tL2RhbW9uL2NvcmUuYz0yMzAzPXN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yMzA3LVxubW0vZGFtb24vY29yZS5jOjIzMDg6XHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFx1MDAyNnMtXHUwMDNlcXVvdGEpIHx8ICFjLVx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxubW0vZGFtb24vY29yZS5jLTIzMDktXHRcdHJldHVybiByZXQ7XG4tLVxubW0vZGFtb24vY29yZS5jPTI1NTg9c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuLS1cbm1tL2RhbW9uL2NvcmUuYy0yNTYwLXtcbm1tL2RhbW9uL2NvcmUuYzoyNTYxOlx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxubW0vZGFtb24vY29yZS5jLTI1NjItXHRcdHJldHVybiBmYWxzZTtcbi0tXG5tbS9kYW1vbi9jb3JlLmM9MjU3ND1zdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcbi0tXG5tbS9kYW1vbi9jb3JlLmMtMjYxMS1cdGlmIChjLVx1MDAzZW9wcy5hcHBseV9zY2hlbWUpIHtcbm1tL2RhbW9uL2NvcmUuYzoyNjEyOlx0XHRpZiAoZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSBcdTAwMjZcdTAwMjZcbm1tL2RhbW9uL2NvcmUuYy0yNjEzLVx0XHRcdFx0cXVvdGEtXHUwMDNlY2hhcmdlZF9zeiAmIzQzOyBzeiBcdTAwM2UgcXVvdGEtXHUwMDNlZXN6KSB7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy43LWZsYXNoPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM4MjAKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAxNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBhdHRlbXB0IGF0IHN1bW1hcml6aW5nIHRoZSB0aG91Z2h0IHByb2Nlc3MsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYGRhbW9zX3F1b3RhX2lzX3NldGAgSW1wbGVtZW50YXRpb24qKgoKT2theSwgdGltZSB0byBkaXZlIGludG8gdGhlIGltcGxlbWVudGF0aW9uIG9mIGBkYW1vc19xdW90YV9pc19zZXRgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBleGFjdGx5IGhvdyB0aGlzIGZ1bmN0aW9uIGRldGVybWluZXMgaWYgYSBxdW90YSBpcywgd2VsbCwgKnNldCouIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBxdWlja2x5IHJldmlldyB0aGUgY29kZSB0byBpZGVudGlmeSB0aGUga2V5IHZhcmlhYmxlcyBvciBkYXRhIHN0cnVjdHVyZXMgaXQmIzM5O3MgcmVmZXJlbmNpbmcuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIHVuZGVybHlpbmcgbG9naWMg4oCTIGlzIGl0IGNoZWNraW5nIGEgY29uZmlndXJhdGlvbiBmaWxlLCBxdWVyeWluZyBhIGRhdGFiYXNlLCBvciBwZXJoYXBzIHJlbHlpbmcgb24gc29tZSBpbnRlcm5hbCBzdGF0ZT8gSXMgaXQgY2hlY2tpbmcgZm9yIGEgc3BlY2lmaWMgdmFsdWUgb3IgYSByYW5nZT8gQW55IGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVkZ2UgY2FzZXMuIE1vcmUgaW1wb3J0YW50bHksIGhvdyByb2J1c3QgaXMgdGhpcyBpbXBsZW1lbnRhdGlvbj8gSXMgdGhlcmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nPyBXaGF0IGhhcHBlbnMgaWYgdGhlIHNvdXJjZSBkYXRhIGlzIHVuYXZhaWxhYmxlIG9yIGNvcnJ1cHRlZD8gV2hhdCYjMzk7cyB0aGUgaW1wYWN0IG9uIHRoZSByZXN0IG9mIHRoZSBzeXN0ZW0gaWYgdGhpcyBmdW5jdGlvbiByZXR1cm5zIGFuIHVuZXhwZWN0ZWQgdmFsdWUsIGFuZCBpcyB0aGVyZSBhbnkgbG9nZ2luZyB0byB0cmFjayBpdHMgYmVoYXZpb3VyPyBUaGUgZ29hbCBpcyB0byB2ZXJpZnkgaWYgaXQgaXMgYWxpZ25lZCB3aXRoIHRoZSBleHBlY3RhdGlvbnMsIGFuZCBpdHMgYmVoYXZpb3VyIHVuZGVyIG5vcm1hbCBhbmQgZXhjZXB0aW9uYWwgY2lyY3Vtc3RhbmNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDttbS9kYW1vbi9jb3JlLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAyMjkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDI1Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzIyOTA6XHRcbjIyOTE6XHQvKlxuMjI5MjpcdCAqIGRhbW9zX3F1b3RhX2lzX3NldCgpIC0gUmV0dXJuIGlmIHRoZSBnaXZlbiBxdW90YSBpcyBhY3R1YWxseSBzZXQuXG4yMjkzOlx0ICogQHF1b3RhOlx0VGhlIHF1b3RhIHRvIGNoZWNrLlxuMjI5NDpcdCAqXG4yMjk1Olx0ICogUmV0dXJucyB0cnVlIGlmIHRoZSBxdW90YSBpcyBzZXQsIGZhbHNlIG90aGVyd2lzZS5cbjIyOTY6XHQgKi9cbjIyOTc6XHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcbjIyOTg6XHR7XG4yMjk5Olx0XHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IHx8IHF1b3RhLVx1MDAzZXN6IHx8IHF1b3RhLVx1MDAzZW1zIHx8XG4yMzAwOlx0XHRcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XG4yMzAxOlx0fVxuMjMwMjpcdFxuMjMwMzpcdHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxuMjMwNDpcdFx0XHRzdHJ1Y3QgZGFtb3MgKnMpXG4yMzA1Olx0e1xuMjMwNjpcdFx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcbjIzMDc6XHRcbjIzMDg6XHRcdGlmICghcmV0IHx8ICFkYW1vc19xdW90YV9pc19zZXQoXHUwMDI2cy1cdTAwM2VxdW90YSkgfHwgIWMtXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXG4yMzA5Olx0XHRcdHJldHVybiByZXQ7XG4yMzEwOlx0XG4yMzExOlx0XHRyZXR1cm4gYy1cdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcdTAwM2U9IHMtXHUwMDNlcXVvdGEubWluX3Njb3JlO1xuMjMxMjpcdH1cbjIzMTM6XHRcbjIzMTQ6XHQvKlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM1LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOS8wMSAyMzowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuNy1mbGFzaDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA0NDgyCgkJCQkJCQlvdXRwdXQ6IDMyCgkJCQkJCQl0aG91Z2h0czogNDQ0CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBEQU1PTiBRdW90YSBMb2dpYyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBEQU1PTiBxdW90YSBjb2RlIGFuZCB0cnlpbmcgdG8gdW5kZXJzdGFuZCBhIHNwZWNpZmljIHNjZW5hcmlvLiBJdCBzZWVtcyB3ZSBoYXZlIGEgc2l0dWF0aW9uIHdoZXJlIGBxdW90YS0mZ3Q7ZXN6YCBtaWdodCBiZSB6ZXJvLCBidXQgYGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSlgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyBmb3IgbWUgYmVjYXVzZSwgY29uY2VwdHVhbGx5LCBpZiB0aGUgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSBpcyB6ZXJvLCBob3cgY2FuIHRoZSBxdW90YSAqYmUqIHNldCwgcmlnaHQ/CgpUaGUgb3JpZ2luYWwgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uIGhhZCBhIHBvdGVudGlhbCBidWcuIFdpdGggYHF1b3RhLSZndDtlc3pgIGF0IHplcm8gYW5kLCBsZXQmIzM5O3Mgc2F5LCBgcXVvdGEtJmd0O2NoYXJnZWRfc3pgIGFsc28gemVybywgdGhlIGNvbmRpdGlvbiBgcXVvdGEtJmd0O2NoYXJnZWRfc3ogJmd0Oz0gcXVvdGEtJmd0O2VzemAgd291bGQgZXZhbHVhdGUgdG8gYHRydWVgLCBpbmNvcnJlY3RseSBtYXJraW5nIHRoZSBxdW90YSBhcyBmdWxsLiBFc3NlbnRpYWxseSwgaXQgd2FzIHRyaWdnZXJpbmcgYSAmIzM0O2Z1bGwmIzM0OyBzdGF0ZSBldmVuIHdoZW4gbm8gcXVvdGEgd2FzIGFjdHVhbGx5IGVzdGFibGlzaGVkLiBPciBhdCBsZWFzdCwgbm90IGNhbGN1bGF0ZWQgeWV0LgoKVGhlIHBhdGNoJiMzOTtzIGFkZGl0aW9uLCBzcGVjaWZpY2FsbHkgYGlmICghcXVvdGEtJmd0O2VzeikgcmV0dXJuIGZhbHNlO2AsIHRhY2tsZXMgdGhpcyBoZWFkLW9uLiBJdCYjMzk7cyBhIGNsZWFuLCBsb2dpY2FsIGNoZWNrLiBJZiBgZXN6YCBpcyB6ZXJvLCB3ZSAqa25vdyogdGhlIHF1b3RhIGlzbiYjMzk7dCBmdWxsLCBzbyB3ZSBzaG9ydC1jaXJjdWl0IHRoZSBmdW5jdGlvbiYjMzk7cyBldmFsdWF0aW9uLiBUaGlzIHNlZW1zIGxpa2UgYSByZWFzb25hYmxlIGZpeC4KCk5vdywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgZmllbGQsIEkgbmVlZCB0byBxdWlja2x5IHJ1biB0aHJvdWdoIHRoZSB1c3VhbCBzdXNwZWN0cyB0byBlbnN1cmUgdGhpcyBjaGFuZ2UgZG9lc24mIzM5O3QgaW50cm9kdWNlIGFueSBuZXcgcHJvYmxlbXMuIEl0JiMzOTtzIHN0cmljdGx5IGEgbG9naWNhbCBjaGVjayB3aXRoaW4gREFNT04mIzM5O3MgcXVvdGEgdHJhY2tpbmcuIEkmIzM5O20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIChubyBgY29weV90b191c2VyYCBjYWxscyksIG9yIGFsdGVyYXRpb25zIHRvIGJ1ZmZlciBzaXplcyBvciBib3VuZGFyaWVzLiBUaGlzIGNoZWNrIGRvZXNuJiMzOTt0IHJlYWQgYW55IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzLiBXZSYjMzk7cmUgZGVhbGluZyB3aXRoIGBxdW90YS0mZ3Q7ZXN6YCwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IGRhbW9zX3F1b3RhYCBzdHJ1Y3R1cmUsIGFuZCBpdCYjMzk7cyBhbGxvY2F0ZWQvaW5pdGlhbGl6ZWQgZHVyaW5nIERBTU9OIHNldHVwLiBTbywgaXQmIzM5O3MgcHJldHR5IHNlbGYgY29udGFpbmVkLgoKQWxsIGluIGFsbCwgdGhpcyBsb29rcyBsaWtlIGEgc291bmQsIHRhcmdldGVkIGZpeCBmb3IgYSBsb2dpY2FsIGluY29uc2lzdGVuY3kgaW4gdGhlIHF1b3RhIG1hbmFnZW1lbnQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0cnVjdCBkYW1vc19xdW90YSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2luY2x1ZGUvbGludXgvZGFtb24uaCYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTYwPWVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMge1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xNzMtLyoqXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTc0OiAqIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsIC0gREFNT1Mgc2NoZW1lIHF1b3RhIGF1dG8tdHVuaW5nIGdvYWwuXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTc1LSAqIEBtZXRyaWM6XHRcdE1ldHJpYyB0byBiZSB1c2VkIGZvciByZXByZXNlbnRpbmcgdGhlIGdvYWwuXG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5NS0gKi9cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxOTY6c3RydWN0IGRhbW9zX3F1b3RhX2dvYWwge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5Ny1cdGVudW0gZGFtb3NfcXVvdGFfZ29hbF9tZXRyaWMgbWV0cmljO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0yMjE9ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjI2LS8qKlxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjIyNzogKiBzdHJ1Y3QgZGFtb3NfcXVvdGEgLSBDb250cm9scyB0aGUgYWdncmVzc2l2ZW5lc3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMjgtICogQHJlc2V0X2ludGVydmFsOlx0Q2hhcmdlIHJlc2V0IGludGVydmFsIGluIG1pbGxpc2Vjb25kcy5cbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjczLSAqL1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjI3NDpzdHJ1Y3QgZGFtb3NfcXVvdGEge1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTI3NS1cdHVuc2lnbmVkIGxvbmcgcmVzZXRfaW50ZXJ2YWw7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTMzOT1zdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB7XG4tLVxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTM2NC0gKiBkZXRlcm1pbmVkIHRoZSByZWdpb24gYXMgZWxpZ2libGUgdG8gYXBwbHkgdGhlIGFjdGlvbi4gIFRoZSBhY2Nlc3MgcGF0dGVyblxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjM2NTogKiAoXHUwMDI2c3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuKSwgcXVvdGFzIChcdTAwMjZzdHJ1Y3QgZGFtb3NfcXVvdGEpLCB3YXRlcm1hcmtzXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzY2LSAqIChcdTAwMjZzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcykgYW5kIGZpbHRlcnMgKFx1MDAyNnN0cnVjdCBkYW1vc19maWx0ZXIpIHRoYXQgaGFuZGxlZFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD01NTU9c3RydWN0IGRhbW9zIHtcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNTU4LVx0dW5zaWduZWQgbG9uZyBhcHBseV9pbnRlcnZhbF91cztcbmluY2x1ZGUvbGludXgvZGFtb24uaDo1NTk6XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNTYwLVx0c3RydWN0IGRhbW9zX3dhdGVybWFya3Mgd21hcmtzO1xuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaD0xMDM4PXZvaWQgZGFtb3NfZGVzdHJveV9maWx0ZXIoc3RydWN0IGRhbW9zX2ZpbHRlciAqZik7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTAzOS1cbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDQwOnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDQxLVx0XHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDQyLVx0XHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0Mzp2b2lkIGRhbW9zX2FkZF9xdW90YV9nb2FsKHN0cnVjdCBkYW1vc19xdW90YSAqcSwgc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmcpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDQ6dm9pZCBkYW1vc19kZXN0cm95X3F1b3RhX2dvYWwoc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgKmdvYWwpO1xuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDUtXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA0Nj1zdHJ1Y3QgZGFtb3MgKmRhbW9uX25ld19zY2hlbWUoc3RydWN0IGRhbW9zX2FjY2Vzc19wYXR0ZXJuICpwYXR0ZXJuLFxuLS1cbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDQ4LVx0XHRcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXMsXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0OTpcdFx0XHRzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNTAtXHRcdFx0c3RydWN0IGRhbW9zX3dhdGVybWFya3MgKndtYXJrcyxcbi0tXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTA1Mz12b2lkIGRhbW9uX2Rlc3Ryb3lfc2NoZW1lKHN0cnVjdCBkYW1vcyAqcyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA1NDppbnQgZGFtb3NfY29tbWl0X3F1b3RhX2dvYWxzKHN0cnVjdCBkYW1vc19xdW90YSAqZHN0LCBzdHJ1Y3QgZGFtb3NfcXVvdGEgKnNyYyk7XG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1NS1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8zPC90ZD4KCQkJPHRkPjIwMjYvMDkvMDEgMjM6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjctZmxhc2g8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMxOQoJCQkJCQkJb3V0cHV0OiAxMzgKCQkJCQkJCXRob3VnaHRzOiA5MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBc3Nlc3NtZW50IG9mIHRoZSBRdW90YSBQYXRjaCoqCgpPa2F5LCB0aGlzIGlzIGFib3V0IGFzIGNsZWFuIGFuZCBzaW1wbGUgYXMgaXQgZ2V0cy4gVGhlIHBhdGNoIGlzIGluY3JlZGlibHkgc3RyYWlnaHRmb3J3YXJkIOKAkyBqdXN0IGEgc2luZ2xlIGNoZWNrLCBgaWYgKCFxdW90YS0mZ3Q7ZXN6KSByZXR1cm4gZmFsc2U7YCwgd2l0aGluIHRoZSBgZGFtb3NfcXVvdGFfaXNfZnVsbCgpYCBmdW5jdGlvbi4gVGhpcyBpcyBncmVhdDsgSSYjMzk7bSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MgYXQgYWxsLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIG5vIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha3MsIG5vIG5ldyBhbGxvY2F0aW9ucyB0aGF0IG5lZWQgc2NydXRpbnksIGFuZCBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBjb3B5aW5nIHRoYXQgd291bGQgd2FycmFudCBleHRyYSBhdHRlbnRpb24uIEhvbmVzdGx5LCB0aGlzIGlzIGFsbW9zdCBib3JpbmcgaW4gaXRzIGxhY2sgb2YgY29tcGxleGl0eSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIQoKU3RhbmRhcmQgdGVzdGluZyBwcm90b2NvbHMgYW5kIEtBU0FOIHNob3VsZCBiZSBtb3JlIHRoYW4gc3VmZmljaWVudCB0byB2YWxpZGF0ZSB0aGlzIGNoYW5nZS4gVGhlcmUmIzM5O3MgYWJzb2x1dGVseSBubyBuZWVkIHRvIGJyaW5nIEtNU0FOIGludG8gdGhlIGVxdWF0aW9uIGZvciB0aGlzIHBhcnRpY3VsYXIgcGF0Y2g7IGl0JiMzOTtzIG92ZXJraWxsIGdpdmVuIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9uLgoKVGltZSB0byBjYWxsIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgYW5kIHByb3ZpZGUgYSBjb25jaXNlIGFuZCB1bmRlcnN0YW5kYWJsZSBleHBsYW5hdGlvbi4gTm8gbmVlZCB0byBvdmVyY29tcGxpY2F0ZSB0aGUgZGVzY3JpcHRpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzgvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA5LzAxIDIzOjA4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYGlmICghcXVvdGEtXHUwMDNlZXN6KSByZXR1cm4gZmFsc2U7YCkgaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgaW4gbW0vZGFtb24vY29yZS5jIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgKGBlc3pgKSBpcyB6ZXJvLiBUaGlzIGlzIGEgcHVyZWx5IGludGVybmFsIGxvZ2ljIGNoYW5nZSB3aXRoaW4gREFNT04mIzM5O3MgcXVvdGEgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGJ1ZmZlciBoYW5kbGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYGlmICghcXVvdGEtXHUwMDNlZXN6KSByZXR1cm4gZmFsc2U7YCkgaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgaW4gbW0vZGFtb24vY29yZS5jIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgKGBlc3pgKSBpcyB6ZXJvLiBUaGlzIGlzIGEgcHVyZWx5IGludGVybmFsIGxvZ2ljIGNoYW5nZSB3aXRoaW4gREFNT04mIzM5O3MgcXVvdGEgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGJ1ZmZlciBoYW5kbGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjMuMjUwNDUyNzI0WiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Njc5NDM1OTY0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIlxuICBdLFxuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYGlmICghcXVvdGEtXFx1MDAzZWVzeikgcmV0dXJuIGZhbHNlO2ApIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGluIG1tL2RhbW9uL2NvcmUuYyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIChgZXN6YCkgaXMgemVyby4gVGhpcyBpcyBhIHB1cmVseSBpbnRlcm5hbCBsb2dpYyBjaGFuZ2Ugd2l0aGluIERBTU9OJ3MgcXVvdGEgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGJ1ZmZlciBoYW5kbGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkYW1vc19xdW90YV9pc19mdWxsKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJldHVybiBmYWxzZSB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIGZ1bmN0aW9uYWxseSBhbHRlcnMgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIHJlZ2lvbiBhcHBsaWNhdGlvbiBiZWhhdmlvciBpbiB0aGUgREFNT04gbWVtb3J5IG1vbml0b3Jpbmcgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjIzLjI1MDQ1NzY4NFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4ODE1ODM1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNWQ1NmZhZjhmZjA1NDliNDg3Y2EyMzBkYzI5OWZhY2U1M2UzYjdhM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA3OjIyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL21tL2RhbW9uL2NvcmUuYyBiL21tL2RhbW9uL2NvcmUuY1xcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjUzY2YzMmYxZDUxNWMgMTAwNjQ0XFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXFxuKysrIGIvbW0vZGFtb24vY29yZS5jXFxuQEAgLTI1NjAsNiArMjU2MCw4IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4ge1xcbiBcXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXFxuIFxcdFxcdHJldHVybiBmYWxzZTtcXG4rXFx0aWYgKCFxdW90YS1cXHUwMDNlZXN6KVxcbitcXHRcXHRyZXR1cm4gZmFsc2U7XFxuIFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6KVxcbiBcXHRcXHRyZXR1cm4gdHJ1ZTtcXG4gXFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjMuNzE5OTU1Njg5WiIsIlNlcSI6MiwiTmVzdGluZyI6MSwiVHlwZSI6ImFnZW50IiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjo0OTI4Njk3MTQ3OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJEQU1PTlwiLFxuICAgIFwiREFNT05fU1lTRlNcIixcbiAgICBcIkRBTU9OX1BBRERSXCIsXG4gICAgXCJEQU1PTl9WQUREUlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImRhbW9uX3N0YXJ0XCIsXG4gICAgXCJkYW1vbl9jb21taXRfY3R4XCIsXG4gICAgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLFxuICAgIFwiZGFtb25fbmV3X3NjaGVtZVwiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIGRhbW9zX3F1b3RhX2lzX2Z1bGwoKSBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gcmV0dXJuIGZhbHNlIHdoZW4gdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIChlc3opIGlzIHplcm8uIFRoaXMgZnVuY3Rpb25hbGx5IGFsdGVycyBEQU1PUyBxdW90YSBlbmZvcmNlbWVudCBhbmQgcmVnaW9uIGFwcGxpY2F0aW9uIGJlaGF2aW9yIGluIHRoZSBEQU1PTiBtZW1vcnkgbW9uaXRvcmluZyBzdWJzeXN0ZW0sIHdoaWNoIGlzIHJlYWNoYWJsZSBhbmQgY29uZmlndXJhYmxlIHZpYSBzeXNmcy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiWW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuXG5Zb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZVxuaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLlxuXG5JTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW5cbnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseVxudXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy5cblxuUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczpcbi0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy5cbi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuXG4tIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy5cbi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLFxuICBldmVuIHdoZW4gdXRpbGl6aW5nIHNvZnR3YXJlLWVtdWxhdGVkIGhhcmR3YXJlIChlLmcuLCB1c2IgZ2FkZ2V0LCBtYWM4MDIxMV9od3NpbSkuXG4tIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLFxuICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS5cbi0gRHJpdmVyIC5yZW1vdmUsIC5zaHV0ZG93biwgb3IgcGNpX3VucmVnaXN0ZXJfZHJpdmVyIHRlYXJkb3duIGNhbGxiYWNrcyAoZS5nLiwgaWdiX3JlbW92ZSlcbiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLlxuXG5JZiBpdCBtb2RpZmllcyByZWFjaGFibGUgY29yZSBrZXJuZWwgbG9naWMsIGRyaXZlcnMsIG9yIGFyY2hpdGVjdHVyZXMsIHVzZSB5b3VyIGNvZGUgc2VhcmNoXG50b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS5cblxuV2hlbiByZXR1cm5pbmcgV29ydGhGdXp6aW5nPXRydWUsIHlvdSBNVVNUIEFMU086XG4xLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLlxuICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuXG4gICBQcmVmZXIgbm9uLXN0YXRpYywgbm9uLWlubGluZWQgQVBJIGVudHJ5cG9pbnQgZnVuY3Rpb25zIG92ZXIgaW50ZXJuYWwgc3RhdGljIGhlbHBlciBmdW5jdGlvbnNcbiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBBbHNvIGNoZWNrIFwiZGVwZW5kcyBvblwiIGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlnc1xuICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzXG4gICBvdXRwdXQgYXJyYXksIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgNWQ1NmZhZjhmZjA1NDliNDg3Y2EyMzBkYzI5OWZhY2U1M2UzYjdhM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBUdWUgU2VwIDEgMjM6MDc6MjIgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9tbS9kYW1vbi9jb3JlLmMgYi9tbS9kYW1vbi9jb3JlLmNcbmluZGV4IDY0NGRhZjVhMTY1NjAuLjUzY2YzMmYxZDUxNWMgMTAwNjQ0XG4tLS0gYS9tbS9kYW1vbi9jb3JlLmNcbisrKyBiL21tL2RhbW9uL2NvcmUuY1xuQEAgLTI1NjAsNiArMjU2MCw4IEBAIHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcbiB7XG4gXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG4gXHRcdHJldHVybiBmYWxzZTtcbitcdGlmICghcXVvdGEtXHUwMDNlZXN6KVxuK1x0XHRyZXR1cm4gZmFsc2U7XG4gXHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcbiBcdFx0cmV0dXJuIHRydWU7XG4gXHQvKlxuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjMuNzE5OTU3MjM5WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDYwOTAwNzAyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHNpdHVhdGlvbjpcblxuKipJbnZlc3RpZ2F0aW5nIGEgREFNT04gUGF0Y2gqKlxuXG5Pa2F5LCBzbyBJIHNlZSBhIHBhdGNoIGlzIHRvdWNoaW5nIGBtbS9kYW1vbi9jb3JlLmNgLiBNeSBpbml0aWFsIHJlYWN0aW9uIGlzIHRvIGRpdmUgcmlnaHQgaW50byB0aGUgY29kZS4gVGltZSB0byBnZXQgZmFtaWxpYXIgd2l0aCB3aGF0J3MgYmVpbmcgY2hhbmdlZC4gSSdsbCBoZWFkIG92ZXIgdG8gdGhhdCBmaWxlLCBzcGVjaWZpY2FsbHkgYXJvdW5kIGxpbmUgMjU2MCDigJMgdGhhdCdzIG9mdGVuIGEgZ29vZCBzdGFydGluZyBwb2ludCB0byB1bmRlcnN0YW5kIHRoZSBjb250ZXh0IG9mIHRoZSBjaGFuZ2UuIExldCBtZSBncmFiIHRoZSByZWxldmFudCBjb2RlIGJsb2NrLCBhbmQgSSB0aGluayBlaXRoZXIgYHJlYWQtZmlsZWAgb3IgYGdyZXBwZXJgIHdpbGwgYmUgdGhlIGJlc3QgdG9vbCBmb3IgdGhlIGpvYiBkZXBlbmRpbmcgb24gbXkgZXhhY3QgbmVlZHMuIGByZWFkLWZpbGVgIHRvIGdldCBhIHF1aWNrIGxvY2FsIGxvb2ssIGBncmVwcGVyYCBpZiBJIG5lZWQgdG8gcXVpY2tseSBzZWFyY2ggb3IgZmlsdGVyLiBPbmNlIEkndmUgZ290IHRoYXQgbGluZSBhbmQgaXRzIHN1cnJvdW5kaW5nIGNvbnRleHQsIEkgY2FuIHN0YXJ0IHRvIGFuYWx5emUgdGhlIHBhdGNoIHByb3Blcmx5LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMDQ1LCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTIsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzoyOC4zMjg5NjYwNzFaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNTk1NjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NTAsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NTA6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogKz0gc3pfcmVnaW9uO1xcbjI1NTE6XFx0XFx0ZWxzZVxcbjI1NTI6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogKz0gc3pfYXBwbGllZCArIG11bHRfZnJhYyhcXG4yNTUzOlxcdFxcdFxcdFxcdFxcdChzel9yZWdpb24gLSBzel9hcHBsaWVkKSxcXG4yNTU0OlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9udW0sXFxuMjU1NTpcXHRcXHRcXHRcXHRcXHRxdW90YS1cXHUwMDNlZmFpbF9jaGFyZ2VfZGVub20pO1xcbjI1NTY6XFx0fVxcbjI1NTc6XFx0XFxuMjU1ODpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuMjU1OTpcXHRcXHRcXHR1bnNpZ25lZCBsb25nIG1pbl9yZWdpb25fc3opXFxuMjU2MDpcXHR7XFxuMjU2MTpcXHRcXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXFxuMjU2MjpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjU2MzpcXHRcXHRpZiAoIXF1b3RhLVxcdTAwM2Vlc3opXFxuMjU2NDpcXHRcXHRcXHRyZXR1cm4gZmFsc2U7XFxuMjU2NTpcXHRcXHRpZiAocXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzZT0gcXVvdGEtXFx1MDAzZWVzeilcXG4yNTY2OlxcdFxcdFxcdHJldHVybiB0cnVlO1xcbjI1Njc6XFx0XFx0LypcXG4yNTY4OlxcdFxcdCAqIERBTU9TIGFjdGlvbiBpcyBhcHBsaWVkIHBlciByZWdpb24sIHNvIFxcdTAwM2NtaW5fcmVnaW9uX3N6IHJlbWFpbmluZ1xcbjI1Njk6XFx0XFx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXFxuMjU3MDpcXHRcXHQgKi9cXG4yNTcxOlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IC0gcXVvdGEtXFx1MDAzZWNoYXJnZWRfc3ogXFx1MDAzYyBtaW5fcmVnaW9uX3N6O1xcbjI1NzI6XFx0fVxcbjI1NzM6XFx0XFxuMjU3NDpcXHRzdGF0aWMgdm9pZCBkYW1vc19hcHBseV9zY2hlbWUoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4yNTc1OlxcdFxcdFxcdHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcylcXG4yNTc2OlxcdHtcXG4yNTc3OlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMjU3ODpcXHRcXHR1bnNpZ25lZCBsb25nIHN6ID0gZGFtb25fc3pfcmVnaW9uKHIpO1xcbjI1Nzk6XFx0XFx0c3RydWN0IHRpbWVzcGVjNjQgYmVnaW4sIGVuZDtcXG4yNTgwOlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfYXBwbGllZCA9IDA7XFxuMjU4MTpcXHRcXHR1bnNpZ25lZCBsb25nIHN6X29wc19maWx0ZXJfcGFzc2VkID0gMDtcXG4yNTgyOlxcdFxcdC8qXFxuMjU4MzpcXHRcXHQgKiBXZSBwbGFuIHRvIHN1cHBvcnQgbXVsdGlwbGUgY29udGV4dCBwZXIga2RhbW9uZCwgYXMgREFNT04gc3lzZnNcXG4yNTg0OlxcdFxcdCAqIGltcGxpZXMgd2l0aCAnbnJfY29udGV4dHMnIGZpbGUuICBOZXZlcnRoZWxlc3MsIG9ubHkgc2luZ2xlIGNvbnRleHRcXG4yNTg1OlxcdFxcdCAqIHBlciBrZGFtb25kIGlzIHN1cHBvcnRlZCBmb3Igbm93LiAgU28sIHdlIGNhbiBzaW1wbHkgdXNlICcwJyBjb250ZXh0XFxuMjU4NjpcXHRcXHQgKiBpbmRleCBoZXJlLlxcbjI1ODc6XFx0XFx0ICovXFxuMjU4ODpcXHRcXHR1bnNpZ25lZCBpbnQgY2lkeCA9IDA7XFxuMjU4OTpcXHRcXHRzdHJ1Y3QgZGFtb3MgKnNpdGVyO1xcdFxcdC8qIHNjaGVtZXMgaXRlcmF0b3IgKi9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MjguMzI5MTI3NzMxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDcyNjYxODQ3MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipJbnZlc3RpZ2F0aW5nIERBTU9OIGFuZCBgZGFtb3NfcXVvdGFfaXNfZnVsbGAqKlxuXG5BbHJpZ2h0LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIERBTU9OIGFuZCB0aGlzIGBkYW1vc19xdW90YV9pc19mdWxsYCBmdW5jdGlvbi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIGZpZ3VyZSBvdXQgd2hhdCBEQU1PTiAqaXMqIGV4YWN0bHksIGZyb20gYSBoaWdoLWxldmVsIHBlcnNwZWN0aXZlLiBUaGVuLCBJIG5lZWQgdG8gc2VlIGhvdyBhbmQgd2hlcmUgdGhpcyBxdW90YSBjaGVjayBpcyBiZWluZyB1c2VkIHdpdGhpbiB0aGUgREFNT04gY29udGV4dC5cblxuVGhlIG1vc3QgZWZmaWNpZW50IGFwcHJvYWNoIGhlcmUgaXMgdG8gZ28gc3RyYWlnaHQgdG8gdGhlIHNvdXJjZS4gSSdsbCBmb2N1cyBteSBzZWFyY2ggb24gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeS4gSSdsbCBzdGFydCB3aXRoIGEgc3RyYWlnaHRmb3J3YXJkIHNlYXJjaCBmb3IgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGl0c2VsZi4gVGhhdCBzaG91bGQgZ2l2ZSBtZSB0aGUgZGlyZWN0IHVzZXMuIFRoZW4sIGlmIHRoYXQncyBub3QgZW5vdWdoLCBJJ2xsIG5lZWQgdG8gZXhwYW5kIHRoZSBzZWFyY2ggdG8gZmluZCBjYWxsZXJzIG9mIHRoZSBmdW5jdGlvbi4gVW5kZXJzdGFuZGluZyB3aGVyZSBpdCdzIGJlaW5nICpjYWxsZWQqIHdpbGwgZ2l2ZSBtZSBtb3JlIGluc2lnaHQgaW50byBpdHMgcm9sZSB3aXRoaW4gdGhlIERBTU9OIGZyYW1ld29yayBhbmQgZGF0YSBmbG93cy4gVGhhdCBzaG91bGQgZ2l2ZSBtZSBhIHNvbGlkIGdyYXNwIG9uIGhvdyB0aGlzIHF1b3RhIHJlbGF0ZXMgdG8gREFNT04ncyBjb3JlIGZ1bmN0aW9uYWxpdHkuIEknbSBleHBlY3RpbmcgdG8gZmluZCBzb21lIGNydWNpYWwgaW50ZXJhY3Rpb25zIGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI5NDAsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjMzLjA1NTc0ODA2NFoiLCJTZXEiOjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODEyMDkyNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJkYW1vc19xdW90YV9pc19mdWxsXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yNTQxPXN0YXRpYyB2b2lkIGRhbW9zX2NoYXJnZV9xdW90YShzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI1NTctXFxubW0vZGFtb24vY29yZS5jOjI1NTg6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfZnVsbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnF1b3RhLFxcbm1tL2RhbW9uL2NvcmUuYy0yNTU5LVxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTc0PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2MzEtXFx0XFx0ZGFtb3NfY2hhcmdlX3F1b3RhKHF1b3RhLCBzeiwgc3pfYXBwbGllZCk7XFxubW0vZGFtb24vY29yZS5jOjI2MzI6XFx0XFx0aWYgKGRhbW9zX3F1b3RhX2lzX2Z1bGwocXVvdGEsIGMtXFx1MDAzZW1pbl9yZWdpb25fc3opKSB7XFxubW0vZGFtb24vY29yZS5jLTI2MzMtXFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZV90YXJnZXRfZnJvbSA9IHQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjY0ND1zdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjY1OS1cXHRcXHQvKiBDaGVjayB0aGUgcXVvdGEgKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjY2MDpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxubW0vZGFtb24vY29yZS5jLTI2NjEtXFx0XFx0XFx0Y29udGludWU7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzE0MD1zdGF0aWMgdm9pZCBkYW1vc19hZGp1c3RfcXVvdGEoc3RydWN0IGRhbW9uX2N0eCAqYywgc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMxNjItXFx0XFx0XFx0XFx0bXNlY3NfdG9famlmZmllcyhxdW90YS1cXHUwMDNlcmVzZXRfaW50ZXJ2YWwpKSkge1xcbm1tL2RhbW9uL2NvcmUuYzozMTYzOlxcdFxcdGlmIChkYW1vc19xdW90YV9pc19mdWxsKHF1b3RhLCBjLVxcdTAwM2VtaW5fcmVnaW9uX3N6KSlcXG5tbS9kYW1vbi9jb3JlLmMtMzE2NC1cXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MzMuMTAzODc0MDcxWiIsIlNlcSI6NywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NDAzMDc4NDY2MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIERBTU9TIFF1b3RhIEZ1bmN0aW9uKipcblxuT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uIGxvY2F0ZWQgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjaGFuZ2UuIE15IGZpcnN0IHRob3VnaHQgaXMgdG8gcmVjYWxsIHRoZSBwcmV2aW91cyBpbXBsZW1lbnRhdGlvbi4gSSBiZWxpZXZlIGl0IHdhcyBzb21ldGhpbmcgbGlrZSB0aGlzOlxuXG5gYGBjXG5zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG5cdFx0dW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxue1xuXHRpZiAoIWRhbW9zX3F1b3RhX2lzX3NldChxdW90YSkpXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHRpZiAocXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2U9IHF1b3RhLVx1MDAzZWVzeilcblx0XHRyZXR1cm4gdHJ1ZTtcblx0Lypcblx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXHUwMDNjbWluX3JlZ2lvbl9zeiByZW1haW5pbmdcblx0ICogcXVvdGEgbWVhbnMgdGhlIHF1b3RhIGlzIGVmZmVjdGl2ZWx5IGZ1bGwuXG5cdCAqL1xuXHRyZXR1cm4gcXVvdGEtXHUwMDNlZXN6IC0gcXVvdGEtXHUwMDNlY2hhcmdlZF9zeiBcdTAwM2MgbWluX3JlZ2lvbl9zejtcbn1cbmBgYFxuXG5Ob3csIGhvbGQgb24uIEkgc2VlIHNvbWV0aGluZyB0aGF0J3MgbWFraW5nIG1lIHVuZWFzeS4gV2hhdCBoYXBwZW5zIGlmIGBxdW90YS1cdTAwM2Vlc3pgICh0aGUgKmV4cGVjdGVkKiBzaXplKSBpcyBhY3R1YWxseSB6ZXJvPyBJZiBgcXVvdGEtXHUwMDNlZXN6YCBpcyB6ZXJvLCBhbmQsIHBvdGVudGlhbGx5LCBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgaXMgemVybyBhcyB3ZWxsLCB0aGVuIHRoZSBjb25kaXRpb24gYHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3pgIHdvdWxkIGV2YWx1YXRlIHRvIHRydWUsIGFzIHplcm8gaXMgZ3JlYXRlciB0aGFuIG9yIGVxdWFsIHRvIHplcm8uIFRoYXQgc2VlbXMuLi4gb2RkLiBXaHkgd291bGQgYGVzemAgYmUgemVybyB3aGVuIHRoZSBxdW90YSBpcyBzdXBwb3NlZGx5IHNldD8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggdGhhdCBtaWdodCBvY2N1ci4gVGhlIGNvZGUgc3VnZ2VzdHMgdGhhdCBgZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKWAgd291bGQgcmV0dXJuIHRydWUgZXZlbiB3aGVuIGBlc3pgIGlzIHplcm8sIHNvIHRoYXQgbmVlZHMgdG8gYmUgY2xhcmlmaWVkLiBJIG5lZWQgdG8gdHJhY2UgaG93IGBlc3pgIGlzIGNhbGN1bGF0ZWQgdG8gc2VlIGlmIHRoaXMgaXMgYW4gZXhwZWN0ZWQgc2NlbmFyaW8gb3IgYSBidWcuIEknbGwgbmVlZCB0byBsb29rIGF0IGBkYW1vc19xdW90YV9pc19zZXRgIGFuZCBob3cgdGhlIHF1b3RhJ3MgYGVzemAgaXMgaW5pdGlhbGl6ZWQgb3IgdXBkYXRlZC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzc1OSwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjMwNCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzozNy4xMzQ2NjEyMDRaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTUzNjcwNDYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfaXNfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yMjc2PXN0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjkxLS8qXFxubW0vZGFtb24vY29yZS5jOjIyOTI6ICogZGFtb3NfcXVvdGFfaXNfc2V0KCkgLSBSZXR1cm4gaWYgdGhlIGdpdmVuIHF1b3RhIGlzIGFjdHVhbGx5IHNldC5cXG5tbS9kYW1vbi9jb3JlLmMtMjI5My0gKiBAcXVvdGE6XFx0VGhlIHF1b3RhIHRvIGNoZWNrLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyOTYtICovXFxubW0vZGFtb24vY29yZS5jOjIyOTc6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxubW0vZGFtb24vY29yZS5jLTIyOTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIzMDM9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMwNy1cXG5tbS9kYW1vbi9jb3JlLmM6MjMwODpcXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFxcdTAwMjZzLVxcdTAwM2VxdW90YSkgfHwgIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMzA5LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjU1OD1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjU2MC17XFxubW0vZGFtb24vY29yZS5jOjI1NjE6XFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxcbm1tL2RhbW9uL2NvcmUuYy0yNTYyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTc0PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2MTEtXFx0aWYgKGMtXFx1MDAzZW9wcy5hcHBseV9zY2hlbWUpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjYxMjpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2RhbW9uL2NvcmUuYy0yNjEzLVxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ICsgc3ogXFx1MDAzZSBxdW90YS1cXHUwMDNlZXN6KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjM3LjE5MDAzMzYxWiIsIlNlcSI6OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjU5NDY3OTgyNCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUncyBob3cgSSdkIGFwcHJvYWNoIHRoaXMgdGFzaywgcGxheWluZyB0aGUgcm9sZSBvZiBzb21lb25lIHRob3JvdWdobHkgZmFtaWxpYXIgd2l0aCB0aGUga2VybmVsIGFuZCBEQU1PTjpcblxuKipFeGFtaW5pbmcgREFNT04gQ29yZSBDb2RlKipcblxuQWxyaWdodCwgSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB3aGF0J3MgaGFwcGVuaW5nIHdpdGhpbiBEQU1PTidzIGNvcmUgZnVuY3Rpb25hbGl0aWVzLiBUbyBnZXQgYSBiZXR0ZXIgdW5kZXJzdGFuZGluZywgSSdtIGdvaW5nIHRvIHN0YXJ0IGJ5IHNjcnV0aW5pemluZyB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gR2l2ZW4gdGhlIGNvbnRleHQsIEkgc3VzcGVjdCBJJ20gZGVhbGluZyB3aXRoIHNvbWUgY3JpdGljYWwgYXNwZWN0cyBvZiB0aGUgZGF0YSBhY2Nlc3MgbW9uaXRvcidzIGludGVybmFsIHdvcmtpbmdzLiBMZXQncyBzdGFydCBieSBpc29sYXRpbmcgbGluZXMgYXJvdW5kIDIyOTAtMjMyMCBhbmQgMzE0MC0zMTgwLiBUaGVzZSBzcGVjaWZpYyBsaW5lIHJhbmdlcyBhcmUgbGlrZWx5IGhpbnRpbmcgYXQgdGhlIHBhcnRzIG9mIHRoZSBjb2RlIHJlc3BvbnNpYmxlIGZvciBtYW5hZ2luZyBtZW1vcnkgYWNjZXNzIHBhdHRlcm4gZGV0ZWN0aW9uIG9yIHBlcmhhcHMgdGhlIGltcGxlbWVudGF0aW9uIG9mIHRoZSBjb3JlIERBTU9OIGRhdGEgc3RydWN0dXJlcy4gVGltZSB0byBkaWcgaW4gYW5kIGNyb3NzLXJlZmVyZW5jZSB0aGVtIHRvIG15IGV4aXN0aW5nIG1lbnRhbCBtb2RlbCBvZiBob3cgREFNT04gb3BlcmF0ZXMuIEknbGwgYmUgbG9va2luZyBmb3IgY2x1ZXMgYXJvdW5kIGhvdyBtZW1vcnkgcmVnaW9ucyBhcmUgaGFuZGxlZCwgZGF0YSBhZ2dyZWdhdGlvbiwgb3IgdGhlIHN0cmF0ZWdpZXMgREFNT04gZW1wbG95cyBmb3IgaXRzIHNhbXBsaW5nIGFuZCBhbmFseXNpcyB0byBpZGVudGlmeSBob3RzcG90cyBvciBjb2xkIHNwb3RzLlxuXG5cbiIsIklucHV0VG9rZW5zIjo1MDQzLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6MzkuNzg0NzE2MjQ0WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjE2NzIwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI5MCxcbiAgXCJMaW5lQ291bnRcIjogNDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI5MDpcXHRcXG4yMjkxOlxcdC8qXFxuMjI5MjpcXHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxcbjIyOTM6XFx0ICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4yMjk0OlxcdCAqXFxuMjI5NTpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1b3RhIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbjIyOTY6XFx0ICovXFxuMjI5NzpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4yMjk4OlxcdHtcXG4yMjk5OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IHx8IHF1b3RhLVxcdTAwM2VzeiB8fCBxdW90YS1cXHUwMDNlbXMgfHxcXG4yMzAwOlxcdFxcdFxcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XFxuMjMwMTpcXHR9XFxuMjMwMjpcXHRcXG4yMzAzOlxcdHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbjIzMDQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbjIzMDU6XFx0e1xcbjIzMDY6XFx0XFx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcXG4yMzA3OlxcdFxcbjIzMDg6XFx0XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4yMzA5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjMxMDpcXHRcXG4yMzExOlxcdFxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxuMjMxMjpcXHR9XFxuMjMxMzpcXHRcXG4yMzE0OlxcdC8qXFxuMjMxNTpcXHQgKiBkYW1vc19za2lwX2NoYXJnZWRfcmVnaW9uKCkgLSBDaGVjayBpZiB0aGUgZ2l2ZW4gcmVnaW9uIG9yIHN0YXJ0aW5nIHBhcnQgb2ZcXG4yMzE2OlxcdCAqIGl0IGlzIGFscmVhZHkgY2hhcmdlZCBmb3IgdGhlIERBTU9TIHF1b3RhLlxcbjIzMTc6XFx0ICogQHQ6XFx0VGhlIHRhcmdldCBvZiB0aGUgcmVnaW9uLlxcbjIzMTg6XFx0ICogQHJwOlxcdFRoZSBwb2ludGVyIHRvIHRoZSByZWdpb24uXFxuMjMxOTpcXHQgKiBAczpcXHRUaGUgc2NoZW1lIHRvIGJlIGFwcGxpZWQuXFxuMjMyMDpcXHQgKiBAbWluX3JlZ2lvbl9zejpcXHRtaW5pbXVtIHJlZ2lvbiBzaXplLlxcbjIzMjE6XFx0ICpcXG4yMzIyOlxcdCAqIElmIGEgcXVvdGEgb2YgYSBzY2hlbWUgaGFzIGV4Y2VlZGVkIGluIGEgcXVvdGEgY2hhcmdlIHdpbmRvdywgdGhlIHNjaGVtZSdzXFxuMjMyMzpcXHQgKiBhY3Rpb24gd291bGQgYXBwbGllZCB0byBvbmx5IGEgcGFydCBvZiB0aGUgdGFyZ2V0IGFjY2VzcyBwYXR0ZXJuIGZ1bGZpbGxpbmdcXG4yMzI0OlxcdCAqIHJlZ2lvbnMuICBUbyBhdm9pZCBhcHBseWluZyB0aGUgc2NoZW1lIGFjdGlvbiB0byBvbmx5IGFscmVhZHkgYXBwbGllZFxcbjIzMjU6XFx0ICogcmVnaW9ucywgREFNT04gc2tpcHMgYXBwbHlpbmcgdGhlIHNjaGVtZSBhY3Rpb24gdG8gdGhlIHJlZ2lvbnMgdGhhdCBjaGFyZ2VkXFxuMjMyNjpcXHQgKiBpbiB0aGUgcHJldmlvdXMgY2hhcmdlIHdpbmRvdy5cXG4yMzI3OlxcdCAqXFxuMjMyODpcXHQgKiBUaGlzIGZ1bmN0aW9uIGNoZWNrcyBpZiBhIGdpdmVuIHJlZ2lvbiBzaG91bGQgYmUgc2tpcHBlZCBvciBub3QgZm9yIHRoZVxcbjIzMjk6XFx0ICogcmVhc29uLiAgSWYgb25seSB0aGUgc3RhcnRpbmcgcGFydCBvZiB0aGUgcmVnaW9uIGhhcyBwcmV2aW91c2x5IGNoYXJnZWQsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjM5Ljc4NDg4NTY1NFoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjozMjkzMjc0OTAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBRdW90YSBTaXplIGFuZCBEQU1PTiBRdW90YSBNYW5hZ2VtZW50KipcblxuT2theSwgbGV0J3MgZGlnIGludG8gdGhpcyBgcXVvdGEtXHUwMDNlZXN6YCBhbmQgaG93IGBkYW1vc19xdW90YV9pc19zZXRgIGludGVyYWN0cyB3aXRoIGl0LiBgZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKWAgc2VlbXMgdG8gaGluZ2Ugb24gd2hldGhlciBgcXVvdGEtXHUwMDNlZXN6YCwgYHF1b3RhLVx1MDAzZXN6YCwgYHF1b3RhLVx1MDAzZW1zYCwgb3IgYW55IHF1b3RhIGdvYWxzIGFyZSBhY3RpdmUsIHJpZ2h0PyBTbywgaXQgYm9pbHMgZG93biB0bzogaXMgKmFueXRoaW5nKiByZWxhdGVkIHRvIHRoZSBxdW90YSBhY3RpdmVseSBjb25maWd1cmVkPyBBaCwgcmlnaHQsIGBxdW90YS1cdTAwM2Vlc3pgIGlzIHRoZSAqZWZmZWN0aXZlKiBxdW90YSBzaXplLCBpbiBieXRlcy5cblxuTm93LCBpZiBlaXRoZXIgYHF1b3RhLVx1MDAzZXN6YCBvciBgcXVvdGEtXHUwMDNlbXNgIG9yIHRoZSBxdW90YSBnb2FscyBhcmUgc2V0LCBidXQgYHF1b3RhLVx1MDAzZWVzemAgaGFzbid0IGJlZW4gcHJvcGVybHkgY2FsY3VsYXRlZCB5ZXQsIG9yIGl0J3MganVzdCB6ZXJvLi4uIHRoYXQncyB3aGVyZSB0aGluZ3MgZ2V0IGludGVyZXN0aW5nIGFuZCBwcm9iYWJseSBsZWFkcyB0byBzb21lIGludGVyZXN0aW5nIGVkZ2UgY2FzZSBiZWhhdmlvcnMuIEkgc2hvdWxkIHByb2JhYmx5IGJlIHByZXBhcmVkIHRvIGdvIGxvb2tpbmcgZm9yIHRob3NlIGxhdGVyLlxuXG5Pa2F5LCBJIG5lZWQgdG8gY2hlY2sgaG93IGBkYW1vc19hZGp1c3RfcXVvdGFgIHdvcmtzLCB3aGljaCBJIGJlbGlldmUgaXMgYXJvdW5kIGxpbmUgMzE0MCBpbiBgbW0vZGFtb24vY29yZS5jYC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjAyMCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE1MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjQzLjA3ODE2MjkyNVoiLCJTZXEiOjEyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODIxMzAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMxNDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMxNDA6XFx0c3RhdGljIHZvaWQgZGFtb3NfYWRqdXN0X3F1b3RhKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcylcXG4zMTQxOlxcdHtcXG4zMTQyOlxcdFxcdHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEgPSBcXHUwMDI2cy1cXHUwMDNlcXVvdGE7XFxuMzE0MzpcXHRcXHRzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0O1xcbjMxNDQ6XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqcjtcXG4zMTQ1OlxcdFxcdHVuc2lnbmVkIGxvbmcgY3VtdWxhdGVkX3N6LCBjYWNoZWRfZXN6O1xcbjMxNDY6XFx0XFx0dW5zaWduZWQgaW50IHNjb3JlLCBtYXhfc2NvcmUgPSAwO1xcbjMxNDc6XFx0XFxuMzE0ODpcXHRcXHRpZiAoIXF1b3RhLVxcdTAwM2VtcyBcXHUwMDI2XFx1MDAyNiAhcXVvdGEtXFx1MDAzZXN6IFxcdTAwMjZcXHUwMDI2IGxpc3RfZW1wdHkoXFx1MDAyNnF1b3RhLVxcdTAwM2Vnb2FscykpXFxuMzE0OTpcXHRcXHRcXHRyZXR1cm47XFxuMzE1MDpcXHRcXG4zMTUxOlxcdFxcdC8qIEZpcnN0IGNoYXJnZSB3aW5kb3cgKi9cXG4zMTUyOlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZXRvdGFsX2NoYXJnZWRfc3ogXFx1MDAyNlxcdTAwMjYgIXF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20pIHtcXG4zMTUzOlxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX2Zyb20gPSBqaWZmaWVzO1xcbjMxNTQ6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4zMTU1OlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpKVxcbjMxNTY6XFx0XFx0XFx0XFx0ZGFtb3NfdHJhY2VfZXN6KGMsIHMsIHF1b3RhKTtcXG4zMTU3OlxcdFxcdH1cXG4zMTU4OlxcdFxcbjMxNTk6XFx0XFx0LyogTmV3IGNoYXJnZSB3aW5kb3cgc3RhcnRzICovXFxuMzE2MDpcXHRcXHRpZiAoIXRpbWVfaW5fcmFuZ2Vfb3BlbihqaWZmaWVzLCBxdW90YS1cXHUwMDNlY2hhcmdlZF9mcm9tLFxcbjMxNjE6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSArXFxuMzE2MjpcXHRcXHRcXHRcXHRcXHRtc2Vjc190b19qaWZmaWVzKHF1b3RhLVxcdTAwM2VyZXNldF9pbnRlcnZhbCkpKSB7XFxuMzE2MzpcXHRcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfZnVsbChxdW90YSwgYy1cXHUwMDNlbWluX3JlZ2lvbl9zeikpXFxuMzE2NDpcXHRcXHRcXHRcXHRzLVxcdTAwM2VzdGF0LnF0X2V4Y2VlZHMrKztcXG4zMTY1OlxcdFxcdFxcdHF1b3RhLVxcdTAwM2V0b3RhbF9jaGFyZ2VkX3N6ICs9IHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6O1xcbjMxNjY6XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWNoYXJnZWRfZnJvbSA9IGppZmZpZXM7XFxuMzE2NzpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiA9IDA7XFxuMzE2ODpcXHRcXHRcXHRpZiAodHJhY2VfZGFtb3NfZXN6X2VuYWJsZWQoKSlcXG4zMTY5OlxcdFxcdFxcdFxcdGNhY2hlZF9lc3ogPSBxdW90YS1cXHUwMDNlZXN6O1xcbjMxNzA6XFx0XFx0XFx0ZGFtb3Nfc2V0X2VmZmVjdGl2ZV9xdW90YShjLCBzKTtcXG4zMTcxOlxcdFxcdFxcdGlmICh0cmFjZV9kYW1vc19lc3pfZW5hYmxlZCgpIFxcdTAwMjZcXHUwMDI2IHF1b3RhLVxcdTAwM2Vlc3ogIT0gY2FjaGVkX2VzeilcXG4zMTcyOlxcdFxcdFxcdFxcdGRhbW9zX3RyYWNlX2VzeihjLCBzLCBxdW90YSk7XFxuMzE3MzpcXHRcXHR9XFxuMzE3NDpcXHRcXG4zMTc1OlxcdFxcdGlmICghYy1cXHUwMDNlb3BzLmdldF9zY2hlbWVfc2NvcmUpXFxuMzE3NjpcXHRcXHRcXHRyZXR1cm47XFxuMzE3NzpcXHRcXG4zMTc4OlxcdFxcdC8qIEZpbGwgdXAgdGhlIHNjb3JlIGhpc3RvZ3JhbSAqL1xcbjMxNzk6XFx0XFx0bWVtc2V0KGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtLCAwLFxcbjMxODA6XFx0XFx0XFx0XFx0c2l6ZW9mKCpjLVxcdTAwM2VyZWdpb25zX3Njb3JlX2hpc3RvZ3JhbSkgKlxcbjMxODE6XFx0XFx0XFx0XFx0KERBTU9TX01BWF9TQ09SRSArIDEpKTtcXG4zMTgyOlxcdFxcdGRhbW9uX2Zvcl9lYWNoX3RhcmdldCh0LCBjKSB7XFxuMzE4MzpcXHRcXHRcXHRkYW1vbl9mb3JfZWFjaF9yZWdpb24ociwgdCkge1xcbjMxODQ6XFx0XFx0XFx0XFx0aWYgKCFfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKSlcXG4zMTg1OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMxODY6XFx0XFx0XFx0XFx0aWYgKGRhbW9zX2NvcmVfZmlsdGVyX291dChjLCB0LCByLCBzKSlcXG4zMTg3OlxcdFxcdFxcdFxcdFxcdGNvbnRpbnVlO1xcbjMxODg6XFx0XFx0XFx0XFx0c2NvcmUgPSBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKTtcXG4zMTg5OlxcdFxcdFxcdFxcdGMtXFx1MDAzZXJlZ2lvbnNfc2NvcmVfaGlzdG9ncmFtW3Njb3JlXSArPVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzo0My4wNzgzNDY1NzVaIiwiU2VxIjoxMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTQxODY5NTMyMiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIFF1b3RhIExvZ2ljKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGNvbmNlcm4gaXMgYXJvdW5kIGVkZ2UgY2FzZXMgd2l0aCB0aGUgcXVvdGEgc2l6ZSAoYHF1b3RhLVx1MDAzZWVzemApLiBXaGF0IGhhcHBlbnMgaWYgaXQncyB6ZXJvPyBGb3IgZXhhbXBsZSwgYmVmb3JlIGFueSBjaGFyZ2Ugd2luZG93LCBvciBpZiBpdCdzIGV4cGxpY2l0bHkgc2V0IHRvIHplcm8sIG9yIGV2ZW4gaWYgdGhlIG92ZXJhbGwgcXVvdGEgc2l6ZSAoYHF1b3RhLVx1MDAzZXN6YCkgaXMgemVyby4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGlzLlxuXG5UaGVuIHRoZXJlJ3MgdGhlIHNjZW5hcmlvIHdoZXJlIHRoZSBxdW90YSBpcyBkZWZpbmVkIChtYXliZSBgcXVvdGEtXHUwMDNlbXNgIG9yIGBxdW90YS1cdTAwM2Vnb2Fsc2AgYXJlIHNldCksIGJ1dCB0aGUgYGRhbW9zX2FkanVzdF9xdW90YWAgZnVuY3Rpb24gaGFzbid0IHJ1biB5ZXQsIG9yIGlmIGBxdW90YS1cdTAwM2Vlc3pgIHN0aWxsIGV2YWx1YXRlcyB0byB6ZXJvIGV2ZW4gYWZ0ZXIgc29tZSBzZXR1cC4gVGhlIGNvcmUgb2YgbXkgd29ycnkgaXMgdGhpcyBgcXVvdGEtXHUwMDNlZXN6ID09IDBgIGNhc2UuXG5cblByZXZpb3VzbHksIGBkYW1vc19xdW90YV9pc19mdWxsYCBzZWVtZWQgdG8gaGF2ZSBhIHByb2JsZW0gaGVyZS4gSXQgY2hlY2tlZCBgaWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opYCwgYW5kIGlmIGBxdW90YS1cdTAwM2Vlc3pgIHdhcyB6ZXJvLCB0aGlzIHdvdWxkIGJlY29tZSBgMCBcdTAwM2U9IDBgLCB3aGljaCBpcyB0cnVlISBUaGF0IG1lYW5zIGlmIGBxdW90YS1cdTAwM2Vlc3pgIHdhcyB6ZXJvLCBpdCB3b3VsZCBpbmNvcnJlY3RseSByZXBvcnQgdGhlIHF1b3RhIGFzIGZ1bGwuXG5cbkJ1dCB3YWl0LCB3aHkgaXMgYCFxdW90YS1cdTAwM2Vlc3pgIGZhbHNlIHdoZW4gYHF1b3RhLVx1MDAzZWVzemAgaXMgemVybz8gSXMgdGhlIHF1b3RhIGZ1bGwsIG9yIGlzIGl0IHplcm8sIG1lYW5pbmcgbm8gcXVvdGEgbGltaXQsIG9yIG5vdCBldmVuIGluaXRpYWxpemVkP1xuXG5JZiBgcXVvdGEtXHUwMDNlZXN6YCBpcyB6ZXJvLCB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgaXMgZXNzZW50aWFsbHkgemVybyBieXRlcy4gVGhpcyBjb3VsZCBtZWFuIG5vIHNpemUgbGltaXQgaXMgc2V0OyBwZXJoYXBzIG9ubHkgdGltZSBsaW1pdHMgYXBwbHksIG9yIHRoZSBxdW90YSBqdXN0IGlzbid0IGluaXRpYWxpemVkIHlldC5cblxuVGhpcyBtYXR0ZXJzIGJlY2F1c2UgaW4gYGRhbW9zX2FwcGx5X3NjaGVtZWAgb3IgYGRhbW9uX2RvX2FwcGx5X3NjaGVtZXNgLCB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIHJldHVybmluZyB0cnVlIHdvdWxkIHByZXZlbnQgc2NoZW1lcyBmcm9tIGJlaW5nIGFwcGxpZWQsIG9yIGNvdWxkIGNhdXNlIGBxdF9leGNlZWRzYCB0byBpbmNyZW1lbnQgZXZlbiB3aXRoIGEgY2hhcmdlZCBzaXplIG9mIHplcm8uIFRoYXQncyBhIHNlcmlvdXMgYnVnIVxuXG5TbywgdGhlIHBhdGNoIGNsYXJpZmllcyB0aGlzOiBpdCBub3cgY2hlY2tzIGlmIGBkYW1vc19xdW90YV9pc19zZXQocXVvdGEpYCBiZWZvcmUgY2hlY2tpbmcgZm9yIGEgemVybyBzaXplLCBlbnN1cmluZyB3ZSBkb24ndCB0cmVhdCBhIHplcm8tc2l6ZSBxdW90YSBhcyBmdWxsIHVubGVzcyBpdCdzIGFjdHVhbGx5IGJlZW4gY29uZmlndXJlZC4gSXQgbm93IHJldHVybnMgZmFsc2UgaWYgYCFxdW90YS1cdTAwM2Vlc3pgXG5cblRoYXQgcmVzb2x2ZXMgdGhlIHF1b3RhIGlzc3VlLCBzbyBJJ20gaGFwcHkuXG5cbioqREFNT04gUmVhY2hhYmlsaXR5IGFuZCBDb250ZXh0KipcblxuT2theSwgc2VwYXJhdGUgdG9waWMuIElzIERBTU9OIGl0c2VsZiByb2J1c3Q/IElzIGl0IHN0YW5kYXJkLCBlYXNpbHkgZnV6emVkIGluIHRoZSB1c3VhbCBMaW51eCBrZXJuZWwgZW52aXJvbm1lbnRzP1xuXG5ZZXMsIERBTU9OIGlzIGNvcmUgTU0gY29kZSEgSXQncyByaWdodCB0aGVyZSBpbiBgbW0vZGFtb24vYCwgYSBmaXJzdC1jbGFzcyBjaXRpemVuIG9mIHRoZSBMaW51eCBrZXJuZWwuIEl0J3MgY29uZmlndXJhYmxlIHRocm91Z2ggc3RhbmRhcmQgaW50ZXJmYWNlcyBsaWtlIHN5c2ZzIChgL3N5cy9rZXJuZWwvbW0vZGFtb24vYWRtaW5gKSwgZGVidWdmcywgYW5kIGBzeXNfZGFtb25gLiBTbyBpdCdzIHJlYWRpbHkgYWNjZXNzaWJsZSBhbmQgdGVzdGFibGUuIEEgcXVpY2sgY2hlY2sgb2YgS2NvbmZpZyBjb25maXJtcyBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NzMwMiwiT3V0cHV0VG9rZW5zIjoyNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU2MywiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjQ4LjQ5NzA0NTE3N1oiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk2NDg1MzYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIERBTU9OXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL0tjb25maWc9Mz1tZW51IFxcXCJEYXRhIEFjY2VzcyBNb25pdG9yaW5nXFxcIlxcbm1tL2RhbW9uL0tjb25maWctNC1cXG5tbS9kYW1vbi9LY29uZmlnOjU6Y29uZmlnIERBTU9OXFxubW0vZGFtb24vS2NvbmZpZy02LVxcdGJvb2wgXFxcIkRBTU9OOiBEYXRhIEFjY2VzcyBNb25pdG9yaW5nIEZyYW1ld29ya1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMTQtXFxubW0vZGFtb24vS2NvbmZpZzoxNTpjb25maWcgREFNT05fREVCVUdfU0FOSVRZXFxubW0vZGFtb24vS2NvbmZpZy0xNi1cXHRib29sIFxcXCJDaGVjayBzYW5pdHkgb2YgREFNT04gY29kZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMjUtXFxubW0vZGFtb24vS2NvbmZpZzoyNjpjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctMjctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctMzctXFxubW0vZGFtb24vS2NvbmZpZzozODpjb25maWcgREFNT05fVkFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTM5LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlc1xcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNDYtXFxubW0vZGFtb24vS2NvbmZpZzo0Nzpjb25maWcgREFNT05fUEFERFJcXG5tbS9kYW1vbi9LY29uZmlnLTQ4LVxcdGJvb2wgXFxcIkRhdGEgYWNjZXNzIG1vbml0b3Jpbmcgb3BlcmF0aW9ucyBmb3IgdGhlIHBoeXNpY2FsIGFkZHJlc3Mgc3BhY2VcXFwiXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTU1LVxcbm1tL2RhbW9uL0tjb25maWc6NTY6Y29uZmlnIERBTU9OX1ZBRERSX0tVTklUX1RFU1RcXG5tbS9kYW1vbi9LY29uZmlnLTU3LVxcdGJvb2wgXFxcIlRlc3QgZm9yIERBTU9OIG9wZXJhdGlvbnNcXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNjctXFxubW0vZGFtb24vS2NvbmZpZzo2ODpjb25maWcgREFNT05fU1lTRlNcXG5tbS9kYW1vbi9LY29uZmlnLTY5LVxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4tLVxcbm1tL2RhbW9uL0tjb25maWctNzUtXFxubW0vZGFtb24vS2NvbmZpZzo3Njpjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbm1tL2RhbW9uL0tjb25maWctNzctXFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuLS1cXG5tbS9kYW1vbi9LY29uZmlnLTg3LVxcbm1tL2RhbW9uL0tjb25maWc6ODg6Y29uZmlnIERBTU9OX1JFQ0xBSU1cXG5tbS9kYW1vbi9LY29uZmlnLTg5LVxcdGJvb2wgXFxcIkJ1aWxkIERBTU9OLWJhc2VkIHJlY2xhaW0gKERBTU9OX1JFQ0xBSU0pXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy05OS1cXG5tbS9kYW1vbi9LY29uZmlnOjEwMDpjb25maWcgREFNT05fTFJVX1NPUlRcXG5tbS9kYW1vbi9LY29uZmlnLTEwMS1cXHRib29sIFxcXCJCdWlsZCBEQU1PTi1iYXNlZCBMUlUtbGlzdHMgc29ydGluZyAoREFNT05fTFJVX1NPUlQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMDctXFxubW0vZGFtb24vS2NvbmZpZzoxMDg6Y29uZmlnIERBTU9OX1NUQVRcXG5tbS9kYW1vbi9LY29uZmlnLTEwOS1cXHRib29sIFxcXCJCdWlsZCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIHN0YXQgKERBTU9OX1NUQVQpXFxcIlxcbi0tXFxubW0vZGFtb24vS2NvbmZpZy0xMTUtXFxubW0vZGFtb24vS2NvbmZpZzoxMTY6Y29uZmlnIERBTU9OX1NUQVRfRU5BQkxFRF9ERUZBVUxUXFxubW0vZGFtb24vS2NvbmZpZy0xMTctXFx0Ym9vbCBcXFwiRW5hYmxlIERBTU9OX1NUQVQgYnkgZGVmYXVsdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6NDguNTQ2Njk4NDkzWiIsIlNlcSI6MTUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjI1MjY2NTUxODEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIGZpbGVzOlxuXG4qKkNoZWNraW5nIGluIG9uIERhbW9uJ3MgV29yayoqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IGEgaGFuZGxlIG9uIHdoYXQncyBjb29raW5nIHdpdGggdGhlIE1lbW9yeSBNYW5hZ2VtZW50IERhbW9uIChEQU1PTikgY29kZS4gSSBzaG91bGQgc3RhcnQgYnkgdGFraW5nIGEgbG9vayBhdCBgbW0vZGFtb24vTWFrZWZpbGVgIGFuZCBgbW0vZGFtb24vS2NvbmZpZ2AuIFRob3NlIGFyZSB0aGUgdXN1YWwgc3VzcGVjdHMuIFRoZSBgTWFrZWZpbGVgIHdpbGwgdGVsbCBtZSBob3cgdGhlIERBTU9OIGNvZGUgaXMgYmVpbmcgYnVpbHQgYW5kIGxpbmtlZCwgd2hhdCBkZXBlbmRlbmNpZXMgaXQgaGFzLCBhbmQgd2hlcmUgaXQgZml0cyBpbnRvIHRoZSBicm9hZGVyIGtlcm5lbCBidWlsZCBwcm9jZXNzLiBJJ2xsIGJlIGxvb2tpbmcgZm9yIGZsYWdzLCBzcGVjaWZpYyBzb3VyY2UgZmlsZSBpbmNsdXNpb25zLCBhbmQgYW55IHVudXN1YWwgYnVpbGQgY29uZmlndXJhdGlvbnMuXG5cblRoZW4sIEknbGwgbW92ZSBvdmVyIHRvIHRoZSBgS2NvbmZpZ2AgZmlsZS4gVGhpcyBpcyB3aGVyZSB0aGUgY29uZmlndXJhdGlvbiBvcHRpb25zIGZvciBEQU1PTiBsaXZlLiBJJ2xsIG5lZWQgdG8gc2VlIGhvdyB0aGUgZmVhdHVyZSBpcyBlbmFibGVkL2Rpc2FibGVkLCB3aGF0IHRoZSBkZWZhdWx0IHNldHRpbmdzIGFyZSwgYW5kIHdoYXQgdGhlIGF2YWlsYWJsZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgYWxsb3cuIFRoZSBkZXBlbmRlbmNpZXMgZGVmaW5lZCBpbiBLY29uZmlnIGFyZSBhbHNvIG9mIGludGVyZXN0LiBBcmUgdGhlcmUgYW55IG90aGVyIGtlcm5lbCBmZWF0dXJlcyB0aGF0IG5lZWQgdG8gYmUgcHJlc2VudCBmb3IgREFNT04gdG8gZnVuY3Rpb24/IEFyZSB0aGVyZSBhbnkgc3VidGxlIGltcGxpY2F0aW9ucyBvZiB2YXJpb3VzIGNvbmZpZ3VyYXRpb25zIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IFRoYXQgc2hvdWxkIGdpdmUgbWUgYSBzb2xpZCBzdGFydGluZyBwb2ludCBmb3IgdW5kZXJzdGFuZGluZyBEQU1PTidzIGN1cnJlbnQgc3RhdGUgYW5kIGFueSBjaGFuZ2VzIHRoYXQgaGF2ZSBiZWVuIG1hZGUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkyMzUsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzo1MS4wNzMzNTY2NTRaIiwiU2VxIjoxNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjA4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vTWFrZWZpbGVcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHRcXG4gICAzOlxcdG9iai15XFx0XFx0XFx0XFx0Oj0gY29yZS5vXFxuICAgNDpcXHRvYmotJChDT05GSUdfREFNT05fVkFERFIpXFx0Kz0gb3BzLWNvbW1vbi5vIHZhZGRyLm9cXG4gICA1OlxcdG9iai0kKENPTkZJR19EQU1PTl9QQUREUilcXHQrPSBvcHMtY29tbW9uLm8gcGFkZHIub1xcbiAgIDY6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NZU0ZTKVxcdCs9IHN5c2ZzLWNvbW1vbi5vIHN5c2ZzLXNjaGVtZXMubyBzeXNmcy5vXFxuICAgNzpcXHRvYmotJChDT05GSUdfREFNT05fUkVDTEFJTSlcXHQrPSBtb2R1bGVzLWNvbW1vbi5vIHJlY2xhaW0ub1xcbiAgIDg6XFx0b2JqLSQoQ09ORklHX0RBTU9OX0xSVV9TT1JUKVxcdCs9IG1vZHVsZXMtY29tbW9uLm8gbHJ1X3NvcnQub1xcbiAgIDk6XFx0b2JqLSQoQ09ORklHX0RBTU9OX1NUQVQpXFx0Kz0gbW9kdWxlcy1jb21tb24ubyBzdGF0Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6NTEuMDczNDE4NzM0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjYxOTY1MzAxMTIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCdzIGRpdmUgaW50byB0aGlzLlxuXG4qKkV4YW1pbmluZyB0aGUgREFNT04gQ29uZmlndXJhdGlvbiBMYW5kc2NhcGUqKlxuXG5SaWdodCwgc28gSSBuZWVkIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgcmVsYXRpb25zaGlwcyBhbmQgZGVwZW5kZW5jaWVzIHN1cnJvdW5kaW5nIHRoZSBEQU1PTiBmZWF0dXJlcywgbGlrZSBgQ09ORklHX0RBTU9OYCwgYENPTkZJR19EQU1PTl9TWVNGU2AsIGFuZCB0aGUgYWRkcmVzcy1zcGFjZS1zcGVjaWZpYyBvcHRpb25zOiBgQ09ORklHX0RBTU9OX1BBRERSYCBhbmQgYENPTkZJR19EQU1PTl9WQUREUmAuIEknbGwgc3RhcnQgYnkgY2hlY2tpbmcgdGhlIGBtbS9kYW1vbi9LY29uZmlnYCBmaWxlLiBUaGF0J3MgdGhlIGdvLXRvIHBsYWNlIGZvciB1bmRlcnN0YW5kaW5nIGhvdyBhbGwgdGhlc2Ugb3B0aW9ucyByZWxhdGUgdG8gZWFjaCBvdGhlciBpbiB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byBmaWd1cmUgb3V0IHdoYXQgb3RoZXIgY29uZmlndXJhdGlvbnMgYXJlIHJlcXVpcmVkIG9yIG11dHVhbGx5IGV4Y2x1c2l2ZSwgYW5kIGhvdyB0aGUgZmVhdHVyZSBmbGFncyBpbXBhY3QgZWFjaCBvdGhlci4gVGhpcyBpcyBjcnVjaWFsIGZvciB1bmRlcnN0YW5kaW5nIHRoZSBpbXBhY3Qgb2YgZW5hYmxpbmcgb3IgZGlzYWJsaW5nIGEgZ2l2ZW4gZmVhdHVyZSBhbmQgZm9yIHBvdGVudGlhbGx5IGRlYnVnZ2luZyBhbnkgY29uZmlndXJhdGlvbiBpc3N1ZXMgdGhhdCBtaWdodCBhcmlzZSB3aGVuIHdvcmtpbmcgd2l0aCBEQU1PTi4gVGhpcyBhbHNvIGhlbHBzIGluIGJ1aWxkaW5nIHVwIGEgbWVudGFsIG1vZGVsIG9mIHRoZSBvdmVyYWxsIGFyY2hpdGVjdHVyZS5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc1OSwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjUzLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6NTcuMjY5OTUxNzc2WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNDQ5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcIm1tL2RhbW9uL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogMSxcbiAgXCJMaW5lQ291bnRcIjogODBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9ubHlcXG4gICAyOlxcdFxcbiAgIDM6XFx0bWVudSBcXFwiRGF0YSBBY2Nlc3MgTW9uaXRvcmluZ1xcXCJcXG4gICA0OlxcdFxcbiAgIDU6XFx0Y29uZmlnIERBTU9OXFxuICAgNjpcXHRcXHRib29sIFxcXCJEQU1PTjogRGF0YSBBY2Nlc3MgTW9uaXRvcmluZyBGcmFtZXdvcmtcXFwiXFxuICAgNzpcXHRcXHRoZWxwXFxuICAgODpcXHRcXHQgIFRoaXMgYnVpbGRzIGEgZnJhbWV3b3JrIHRoYXQgYWxsb3dzIGtlcm5lbCBzdWJzeXN0ZW1zIHRvIG1vbml0b3JcXG4gICA5OlxcdFxcdCAgYWNjZXNzIGZyZXF1ZW5jeSBvZiBlYWNoIG1lbW9yeSByZWdpb24uIFRoZSBpbmZvcm1hdGlvbiBjYW4gYmUgdXNlZnVsXFxuICAxMDpcXHRcXHQgIGZvciBwZXJmb3JtYW5jZS1jZW50cmljIERSQU0gbGV2ZWwgbWVtb3J5IG1hbmFnZW1lbnQuXFxuICAxMTpcXHRcXG4gIDEyOlxcdFxcdCAgU2VlIGh0dHBzOi8vd3d3Lmtlcm5lbC5vcmcvZG9jL2h0bWwvbGF0ZXN0L21tL2RhbW9uL2luZGV4Lmh0bWwgZm9yXFxuICAxMzpcXHRcXHQgIG1vcmUgaW5mb3JtYXRpb24uXFxuICAxNDpcXHRcXG4gIDE1OlxcdGNvbmZpZyBEQU1PTl9ERUJVR19TQU5JVFlcXG4gIDE2OlxcdFxcdGJvb2wgXFxcIkNoZWNrIHNhbml0eSBvZiBEQU1PTiBjb2RlXFxcIlxcbiAgMTc6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTlxcbiAgMTg6XFx0XFx0aGVscFxcbiAgMTk6XFx0XFx0ICBUaGlzIGVuYWJsZXMgYWRkaXRpb25hbCBEQU1PTiBkZWJ1Z2dpbmctcHVycG9zZSBzYW5pdHkgY2hlY2tzIGluXFxuICAyMDpcXHRcXHQgIERBTU9OIGNvZGUuICBUaGlzIGNhbiBiZSB1c2VmdWwgZm9yIGZpbmRpbmcgYnVncywgYnV0IGltcG9zZVxcbiAgMjE6XFx0XFx0ICBhZGRpdGlvbmFsIG92ZXJoZWFkLiAgVGhpcyBpcyB0aGVyZWZvcmUgcmVjb21tZW5kZWQgdG8gYmUgZW5hYmxlZCBvblxcbiAgMjI6XFx0XFx0ICBvbmx5IGRldmVsb3BtZW50IGFuZCB0ZXN0IHNldHVwcy5cXG4gIDIzOlxcdFxcbiAgMjQ6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgMjU6XFx0XFxuICAyNjpcXHRjb25maWcgREFNT05fS1VOSVRfVEVTVFxcbiAgMjc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb25cXFwiIGlmICFLVU5JVF9BTExfVEVTVFNcXG4gIDI4OlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgS1VOSVQ9eVxcbiAgMjk6XFx0XFx0ZGVmYXVsdCBLVU5JVF9BTExfVEVTVFNcXG4gIDMwOlxcdFxcdGhlbHBcXG4gIDMxOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIERBTU9OIEt1bml0IHRlc3Qgc3VpdGUuXFxuICAzMjpcXHRcXG4gIDMzOlxcdFxcdCAgRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gS1VuaXQgYW5kIHVuaXQgdGVzdHMgaW4gZ2VuZXJhbCwgcGxlYXNlIHJlZmVyXFxuICAzNDpcXHRcXHQgIHRvIHRoZSBLVW5pdCBkb2N1bWVudGF0aW9uLlxcbiAgMzU6XFx0XFxuICAzNjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuICAzNzpcXHRcXG4gIDM4OlxcdGNvbmZpZyBEQU1PTl9WQUREUlxcbiAgMzk6XFx0XFx0Ym9vbCBcXFwiRGF0YSBhY2Nlc3MgbW9uaXRvcmluZyBvcGVyYXRpb25zIGZvciB2aXJ0dWFsIGFkZHJlc3Mgc3BhY2VzXFxcIlxcbiAgNDA6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDQxOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNDI6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNDM6XFx0XFx0aGVscFxcbiAgNDQ6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA0NTpcXHRcXHQgIHRoYXQgd29yayBmb3IgdmlydHVhbCBhZGRyZXNzIHNwYWNlcy5cXG4gIDQ2OlxcdFxcbiAgNDc6XFx0Y29uZmlnIERBTU9OX1BBRERSXFxuICA0ODpcXHRcXHRib29sIFxcXCJEYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlXFxcIlxcbiAgNDk6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTiBcXHUwMDI2XFx1MDAyNiBNTVVcXG4gIDUwOlxcdFxcdHNlbGVjdCBQQUdFX0lETEVfRkxBR1xcbiAgNTE6XFx0XFx0ZGVmYXVsdCBEQU1PTlxcbiAgNTI6XFx0XFx0aGVscFxcbiAgNTM6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgZGVmYXVsdCBkYXRhIGFjY2VzcyBtb25pdG9yaW5nIG9wZXJhdGlvbnMgZm9yIERBTU9OXFxuICA1NDpcXHRcXHQgIHRoYXQgd29ya3MgZm9yIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHNwYWNlLlxcbiAgNTU6XFx0XFxuICA1NjpcXHRjb25maWcgREFNT05fVkFERFJfS1VOSVRfVEVTVFxcbiAgNTc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgREFNT04gb3BlcmF0aW9uc1xcXCIgaWYgIUtVTklUX0FMTF9URVNUU1xcbiAgNTg6XFx0XFx0ZGVwZW5kcyBvbiBEQU1PTl9WQUREUiBcXHUwMDI2XFx1MDAyNiBLVU5JVD15XFxuICA1OTpcXHRcXHRkZWZhdWx0IEtVTklUX0FMTF9URVNUU1xcbiAgNjA6XFx0XFx0aGVscFxcbiAgNjE6XFx0XFx0ICBUaGlzIGJ1aWxkcyB0aGUgREFNT04gdmlydHVhbCBhZGRyZXNzZXMgb3BlcmF0aW9ucyBLdW5pdCB0ZXN0IHN1aXRlLlxcbiAgNjI6XFx0XFxuICA2MzpcXHRcXHQgIEZvciBtb3JlIGluZm9ybWF0aW9uIG9uIEtVbml0IGFuZCB1bml0IHRlc3RzIGluIGdlbmVyYWwsIHBsZWFzZSByZWZlclxcbiAgNjQ6XFx0XFx0ICB0byB0aGUgS1VuaXQgZG9jdW1lbnRhdGlvbi5cXG4gIDY1OlxcdFxcbiAgNjY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcbiAgNjc6XFx0XFxuICA2ODpcXHRjb25maWcgREFNT05fU1lTRlNcXG4gIDY5OlxcdFxcdGJvb2wgXFxcIkRBTU9OIHN5c2ZzIGludGVyZmFjZVxcXCJcXG4gIDcwOlxcdFxcdGRlcGVuZHMgb24gREFNT04gXFx1MDAyNlxcdTAwMjYgU1lTRlNcXG4gIDcxOlxcdFxcdGRlZmF1bHQgREFNT05cXG4gIDcyOlxcdFxcdGhlbHBcXG4gIDczOlxcdFxcdCAgVGhpcyBidWlsZHMgdGhlIHN5c2ZzIGludGVyZmFjZSBmb3IgREFNT04uICBUaGUgdXNlciBzcGFjZSBjYW4gdXNlXFxuICA3NDpcXHRcXHQgIHRoZSBpbnRlcmZhY2UgZm9yIGFyYml0cmFyeSBkYXRhIGFjY2VzcyBtb25pdG9yaW5nLlxcbiAgNzU6XFx0XFxuICA3NjpcXHRjb25maWcgREFNT05fU1lTRlNfS1VOSVRfVEVTVFxcbiAgNzc6XFx0XFx0Ym9vbCBcXFwiVGVzdCBmb3IgZGFtb24gc3lzZnMgaW50ZXJmYWNlXFxcIiBpZiAhS1VOSVRfQUxMX1RFU1RTXFxuICA3ODpcXHRcXHRkZXBlbmRzIG9uIERBTU9OX1NZU0ZTIFxcdTAwMjZcXHUwMDI2IEtVTklUPXlcXG4gIDc5OlxcdFxcdGRlZmF1bHQgS1VOSVRfQUxMX1RFU1RTXFxuICA4MDpcXHRcXHRoZWxwXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA3OjU3LjI3MDAzNDc1NloiLCJTZXEiOjE5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMjE1NTk2MTgzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBJIHdlcmUgYW5hbHl6aW5nIHRoaXMgY29kZTpcblxuKipBbmFseXppbmcgdGhlIERBTU9OIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCBob3cgdGhlIERhdGEgQWNjZXNzIE1vbml0b3IgKERBTU9OKSBpcyBpbnRlZ3JhdGVkIGludG8gdGhlIGJ1aWxkIHByb2Nlc3MuIEkgc2VlIHRoYXQgYGNvcmUuY2AgaW4gdGhlIGBtbS9kYW1vbi9gIGRpcmVjdG9yeSBpcyBjb25kaXRpb25hbGx5IGNvbXBpbGVkLiBUaGUga2V5IHNlZW1zIHRvIGJlIGBDT05GSUdfREFNT05gLiBUaGUgYG9iai0kKENPTkZJR19EQU1PTikgKz0gY29yZS5vYCBvciB0aGUgYG9iai15IDo9IGNvcmUub2Agd2l0aGluIGBtbS9kYW1vbi9NYWtlZmlsZWAgY29uZmlybXMgdGhhdCBgY29yZS5jYCBpcyBvbmx5IGluY2x1ZGVkIHdoZW4gYENPTkZJR19EQU1PTmAgaXMgZW5hYmxlZCBkdXJpbmcgdGhlIGNvbmZpZ3VyYXRpb24gc3RhZ2UuIEkgbmVlZCB0byB0cmFjZSB0aGlzIGZ1cnRoZXIgdG8gc2VlIGhvdyBgQ09ORklHX0RBTU9OYCBpdHNlbGYgaXMgZGVmaW5lZCBhbmQgc2V0LiBMZXQncyBkaWcgaW50byBgbW0vTWFrZWZpbGVgIHRvIHVuZGVyc3RhbmQgdGhlIGNvbmRpdGlvbnMgdGhhdCBjb250cm9sIHRoaXMgYGRhbW9uYCBjb21wb25lbnQuIEknbGwgbmVlZCB0byBmaWd1cmUgb3V0IHdoZW4gdGhpcyBzZWN0aW9uIG9mIHRoZSBNYWtlZmlsZSBpcyBwcm9jZXNzZWQgYW5kIHVuZGVyIHdoYXQgY29uZGl0aW9ucyBgQ09ORklHX0RBTU9OYCBpcyBldmFsdWF0ZWQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDg0LCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowNzo1OS40ODU2MzMyN1oiLCJTZXEiOjIwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDc1MDkxODYsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vTWFrZWZpbGVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vTWFrZWZpbGU9MTM1PW9iai0kKENPTkZJR19ERUJVR19QQUdFX1JFRikgKz0gZGVidWdfcGFnZV9yZWYub1xcbm1tL01ha2VmaWxlOjEzNjpvYmotJChDT05GSUdfREFNT04pICs9IGRhbW9uL1xcbm1tL01ha2VmaWxlLTEzNy1vYmotJChDT05GSUdfSEFSREVORURfVVNFUkNPUFkpICs9IHVzZXJjb3B5Lm9cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDc6NTkuNTMzMTQ4NzY2WiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy43LWZsYXNoIiwiRHVyYXRpb24iOjM2MzUxMzg0MDUsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIERBTU9OIFF1b3RhIE1hbmFnZW1lbnQqKlxuXG5Pa2F5LCBsZXQncyBkaXZlIGluLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgcXVvdGEgaW1wbGljYXRpb25zIHdpdGhpbiBEQU1PTiwgc3BlY2lmaWNhbGx5IGFyb3VuZCB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGxgIGZ1bmN0aW9uIOKAkyB0aGF0IHN0YXRpYyBoZWxwZXIgaW4gYG1tL2RhbW9uL2NvcmUuY2AuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpZGVudGlmeSB0aGUgY3J1Y2lhbCBzeW1ib2xzIHRvIGZvY3VzIG9uIGluIHJlbGF0aW9uIHRvIHRoaXMgY2hhbmdlLlxuXG5GaXJzdCwgSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBjYWxsIHBhdGhzLiBJJ20gbG9va2luZyBmb3Igbm9uLXN0YXRpYyBlbnRyeSBwb2ludHMgb3IgY2FsbGVycyB0aGF0IGV2ZW50dWFsbHkgbGVhZCB0byBgZGFtb3NfcXVvdGFfaXNfZnVsbGAsIG9yIGFjdHVhbGx5IGRyaXZlIHRoZSBEQU1PTiBvcGVyYXRpb25zLiBFc3NlbnRpYWxseSwgSSdtIG1hcHBpbmcgdGhlIGRlcGVuZGVuY2llcyBhbmQgY29udHJvbCBmbG93IHJlbGF0ZWQgdG8gcXVvdGEgY2hlY2tpbmcuXG5cbk5leHQsIEknbGwgYnJvYWRlbiB0aGUgc2NvcGUuIEknbGwgZXhhbWluZSBhbnkgZnVuY3Rpb25zIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2AgZGlyZWN0b3J5LCBlc3BlY2lhbGx5IHdpdGhpbiBgY29yZS5jYCwgdG8gZmlndXJlIG91dCB3aGF0IGZ1bmN0aW9ucyBkaXJlY3RseSBjYWxsLCBvciBpbmRpcmVjdGx5IGluZmx1ZW5jZSwgdGhlIHNjaGVtZSBoYW5kbGluZyBsb2dpYy5cblxuRmluYWxseSwgSSB3YW50IGEgbW9yZSBjb21wcmVoZW5zaXZlIGxpc3Qgd2l0aGluIGBjb3JlLmNgLiBJJ2xsIHNlYXJjaCBmb3IgZnVuY3Rpb25zIHRoYXQgY2FsbCBgZGFtb25fZG9fYXBwbHlfc2NoZW1lc2AgYW5kIGBkYW1vc19hZGp1c3RfcXVvdGFgLCBvciBhbnl0aGluZyB0aGF0IGxvb2tzIGxpa2UgYW4gZW50cnkgcG9pbnQgZm9yIERBTU9OLiBUaGlzIHNob3VsZCBnaXZlIG1lIGEgY29tcGxldGUgcGljdHVyZSBvZiB3aGVyZSBxdW90YSBjaGVja3MgYXJlIHBlcmZvcm1lZCBhbmQgaG93IHRoZXkgaW1wYWN0IERBTU9OJ3Mgb3BlcmF0aW9uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTQ5NiwiT3V0cHV0VG9rZW5zIjo1MSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODowMy4xNjgyODkzODFaIiwiU2VxIjoyMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MjY4NzY2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImRhbW9uX2RvX2FwcGx5X3NjaGVtZXN8ZGFtb3NfYWRqdXN0X3F1b3RhfGtkYW1vbmRfZm58ZGFtb25fc3RhcnRcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwibW0vZGFtb25cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwibW0vZGFtb24vY29yZS5jPTEwMTM9c3RhdGljIGJvb2wgZGFtb25fdmFsaWRfaW50ZXJ2YWxzX2dvYWwoc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDM1LSAqIGJlIGNhbGxlZCBmcm9tIGEgc2FmZSBjb250ZXh0cy4gIFN1Y2ggY29udGV4dHMgaW5jbHVkZSBkYW1vbl9jdHggc2V0dXAgdGltZVxcbm1tL2RhbW9uL2NvcmUuYzoxMDM2OiAqIHdoaWxlIHRoZSBrZGFtb25kIGlzIG5vdCB5ZXQgc3RhcnRlZCwgYW5kIGluc2lkZSBvZiBrZGFtb25kX2ZuKCkuXFxubW0vZGFtb24vY29yZS5jLTEwMzctICpcXG5tbS9kYW1vbi9jb3JlLmMtMTAzOC0gKiBJbiBkZXRhaWwsIGFsbCBEQU1PTiBBUEkgY2FsbGVycyBkaXJlY3RseSBjYWxsIHRoaXMgZnVuY3Rpb24gZm9yIGluaXRpYWxcXG5tbS9kYW1vbi9jb3JlLmM6MTAzOTogKiBzZXR1cCBvZiBkYW1vbl9jdHggYmVmb3JlIGNhbGxpbmcgZGFtb25fc3RhcnQoKS4gIFNvbWUgb2YgdGhlIEFQSSBjYWxsZXJzXFxubW0vZGFtb24vY29yZS5jLTEwNDAtICogYWxzbyBpbmRpcmVjdGx5IGNhbGwgdGhpcyBmdW5jdGlvbiB2aWEgZGFtb25fY2FsbCgpIC1cXHUwMDNlIGRhbW9uX2NvbW1pdCgpIGZvclxcbm1tL2RhbW9uL2NvcmUuYzoxMDQxOiAqIG9ubGluZSBwYXJhbWV0ZXJzIHVwZGF0ZXMuICBGaW5hbGx5LCBrZGFtb25kX2ZuKCkgaXRzZWxmIHVzZSB0aGlzIGZvclxcbm1tL2RhbW9uL2NvcmUuYy0xMDQyLSAqIGFwcGx5aW5nIGF1dG8tdHVuZWQgbW9uaXRvcmluZyBpbnRlcnZhbHMuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTA0OD1pbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMDc0LVxcdC8qXFxubW0vZGFtb24vY29yZS5jOjEwNzU6XFx0ICogbmV4dF9pbnRlcnZhbHNfdHVuZV9zaXMgd2lsbCBiZSB1cGRhdGVkIGluc2lkZSBrZGFtb25kX2ZuKCkuXFxubW0vZGFtb24vY29yZS5jLTEwNzYtXFx0ICovXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTkwNT1zdGF0aWMgdW5zaWduZWQgbG9uZyBkYW1vbl9hcHBseV9taW5fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTkyNC1cXG5tbS9kYW1vbi9jb3JlLmM6MTkyNTpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSk7XFxubW0vZGFtb24vY29yZS5jLTE5MjYtXFxubW0vZGFtb24vY29yZS5jLTE5MjctLypcXG5tbS9kYW1vbi9jb3JlLmM6MTkyODogKiBfX2RhbW9uX3N0YXJ0KCkgLSBTdGFydHMgbW9uaXRvcmluZyB3aXRoIGdpdmVuIGNvbnRleHQuXFxubW0vZGFtb24vY29yZS5jLTE5MjktICogQGN0eDpcXHRtb25pdG9yaW5nIGNvbnRleHRcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xOTM0LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxOTM1OnN0YXRpYyBpbnQgX19kYW1vbl9zdGFydChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxubW0vZGFtb24vY29yZS5jLTE5MzYte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NDItXFx0XFx0cmVpbml0X2NvbXBsZXRpb24oXFx1MDAyNmN0eC1cXHUwMDNla2RhbW9uZF9zdGFydGVkKTtcXG5tbS9kYW1vbi9jb3JlLmM6MTk0MzpcXHRcXHRjdHgtXFx1MDAzZWtkYW1vbmQgPSBrdGhyZWFkX3J1bihrZGFtb25kX2ZuLCBjdHgsIFxcXCJrZGFtb25kLiVkXFxcIixcXG5tbS9kYW1vbi9jb3JlLmMtMTk0NC1cXHRcXHRcXHRcXHRucl9ydW5uaW5nX2N0eHMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTE5NTc9c3RhdGljIGludCBfX2RhbW9uX2NvbW1pdF9jdHgoc3RydWN0IGRhbW9uX2N0eCAqZHN0LCBzdHJ1Y3QgZGFtb25fY3R4ICpzcmMpO1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTE5NTktLyoqXFxubW0vZGFtb24vY29yZS5jOjE5NjA6ICogZGFtb25fc3RhcnQoKSAtIFN0YXJ0cyB0aGUgbW9uaXRvcmluZ3MgZm9yIGEgZ2l2ZW4gZ3JvdXAgb2YgY29udGV4dHMuXFxubW0vZGFtb24vY29yZS5jLTE5NjEtICogQGN0eHM6XFx0YW4gYXJyYXkgb2YgdGhlIHBvaW50ZXJzIGZvciBjb250ZXh0cyB0byBzdGFydCBtb25pdG9yaW5nXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk2OC0gKiBAZXhjbHVzaXZlIGlzIHRydWUgYW5kIGEgZ3JvdXAgb2YgdGhyZWFkcyB0aGF0IGNyZWF0ZWQgYnkgb3RoZXJcXG5tbS9kYW1vbi9jb3JlLmM6MTk2OTogKiAnZGFtb25fc3RhcnQoKScgY2FsbCBpcyBjdXJyZW50bHkgcnVubmluZywgdGhpcyBmdW5jdGlvbiBkb2VzIG5vdGhpbmcgYnV0XFxubW0vZGFtb24vY29yZS5jLTE5NzAtICogcmV0dXJucyAtRUJVU1kuXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTk3NDppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk5OS1cXHRmb3IgKGkgPSAwOyBpIFxcdTAwM2MgbnJfY3R4czsgaSsrKSB7XFxubW0vZGFtb24vY29yZS5jOjIwMDA6XFx0XFx0ZXJyID0gX19kYW1vbl9zdGFydChjdHhzW2ldKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjAwMS1cXHRcXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIwMzk9dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMDQzLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBucl9jdHhzOyBpKyspXFxubW0vZGFtb24vY29yZS5jOjIwNDQ6XFx0XFx0LyogbnJfcnVubmluZ19jdHhzIGlzIGRlY3JlbWVudGVkIGluIGtkYW1vbmRfZm4gKi9cXG5tbS9kYW1vbi9jb3JlLmMtMjA0NS1cXHRcXHRfX2RhbW9uX3N0b3AoY3R4c1tpXSk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjA3MD1pbnQgZGFtb25fa2RhbW9uZF9waWQoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwOTctICpcXG5tbS9kYW1vbi9jb3JlLmM6MjA5ODogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMDk5LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTIxMDY9aW50IGRhbW9uX2NhbGwoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fY2FsbF9jb250cm9sICpjb250cm9sKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIxNTItICpcXG5tbS9kYW1vbi9jb3JlLmM6MjE1MzogKiBOb3RlIHRoYXQgdGhpcyBmdW5jdGlvbiBzaG91bGQgYmUgY2FsbGVkIG9ubHkgYWZ0ZXIgZGFtb25fc3RhcnQoKSB3aXRoIHRoZVxcbm1tL2RhbW9uL2NvcmUuYy0yMTU0LSAqIEBjdHggaGFzIHN1Y2NlZWRlZC4gIE90aGVyd2lzZSwgdGhpcyBmdW5jdGlvbiBjb3VsZCBmYWxsIGludG8gYW4gaW5kZWZpbml0ZVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTI1NzQ9c3RhdGljIHZvaWQgZGFtb3NfYXBwbHlfc2NoZW1lKHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl90YXJnZXQgKnQsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjY0My1cXG5tbS9kYW1vbi9jb3JlLmM6MjY0NDpzdGF0aWMgdm9pZCBkYW1vbl9kb19hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMsXFxubW0vZGFtb24vY29yZS5jLTI2NDUtXFx0XFx0XFx0XFx0ICAgc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNjk2PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI3MDMtXFxubW0vZGFtb24vY29yZS5jOjI3MDQ6XFx0XFx0ZGFtb25fZG9fYXBwbHlfc2NoZW1lcyhjLCB0LCByKTtcXG5tbS9kYW1vbi9jb3JlLmMtMjcwNS1cXHRcXHQvKlxcbi0tXFxubW0vZGFtb24vY29yZS5jPTMxMjY9c3RhdGljIHZvaWQgZGFtb3NfdHJhY2VfZXN6KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zMTM5LVxcbm1tL2RhbW9uL2NvcmUuYzozMTQwOnN0YXRpYyB2b2lkIGRhbW9zX2FkanVzdF9xdW90YShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb3MgKnMpXFxubW0vZGFtb24vY29yZS5jLTMxNDEte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTMyMjE9c3RhdGljIHZvaWQga2RhbW9uZF9hcHBseV9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzIzNi1cXG5tbS9kYW1vbi9jb3JlLmM6MzIzNzpcXHRcXHRkYW1vc19hZGp1c3RfcXVvdGEoYywgcyk7XFxubW0vZGFtb24vY29yZS5jLTMyMzgtXFx0fVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTM3MzI9c3RhdGljIHZvaWQga2RhbW9uZF9pbml0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMzc1My0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6Mzc1NDpzdGF0aWMgaW50IGtkYW1vbmRfZm4odm9pZCAqZGF0YSlcXG5tbS9kYW1vbi9jb3JlLmMtMzc1NS17XFxuLS1cXG5tbS9kYW1vbi9scnVfc29ydC5jPTQwOT1zdGF0aWMgaW50IGRhbW9uX2xydV9zb3J0X3R1cm4oYm9vbCBvbilcXG4tLVxcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIxLVxcbm1tL2RhbW9uL2xydV9zb3J0LmM6NDIyOlxcdGVyciA9IGRhbW9uX3N0YXJ0KFxcdTAwMjZjdHgsIDEsIHRydWUpO1xcbm1tL2RhbW9uL2xydV9zb3J0LmMtNDIzLVxcdGlmIChlcnIpXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmM9MzMwPXN0YXRpYyBpbnQgZGFtb25fcmVjbGFpbV90dXJuKGJvb2wgb24pXFxuLS1cXG5tbS9kYW1vbi9yZWNsYWltLmMtMzQyLVxcbm1tL2RhbW9uL3JlY2xhaW0uYzozNDM6XFx0ZXJyID0gZGFtb25fc3RhcnQoXFx1MDAyNmN0eCwgMSwgdHJ1ZSk7XFxubW0vZGFtb24vcmVjbGFpbS5jLTM0NC1cXHRpZiAoZXJyKVxcbi0tXFxubW0vZGFtb24vc3RhdC5jPTIwMD1zdGF0aWMgaW50IGRhbW9uX3N0YXRfc3RhcnQodm9pZClcXG4tLVxcbm1tL2RhbW9uL3N0YXQuYy0yMTItXFx0XFx0cmV0dXJuIC1FTk9NRU07XFxubW0vZGFtb24vc3RhdC5jOjIxMzpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2ZGFtb25fc3RhdF9jb250ZXh0LCAxLCB0cnVlKTtcXG5tbS9kYW1vbi9zdGF0LmMtMjE0LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3N5c2ZzLmM9MjI0Mz1zdGF0aWMgaW50IGRhbW9uX3N5c2ZzX3R1cm5fZGFtb25fb24oc3RydWN0IGRhbW9uX3N5c2ZzX2tkYW1vbmQgKmtkYW1vbmQpXFxuLS1cXG5tbS9kYW1vbi9zeXNmcy5jLTIyNjctXFx0fVxcbm1tL2RhbW9uL3N5c2ZzLmM6MjI2ODpcXHRlcnIgPSBkYW1vbl9zdGFydChcXHUwMDI2Y3R4LCAxLCBmYWxzZSk7XFxubW0vZGFtb24vc3lzZnMuYy0yMjY5LVxcdGlmIChlcnIpIHtcXG4tLVxcbm1tL2RhbW9uL3Rlc3RzL2NvcmUta3VuaXQuaD0xNjM1PXN0YXRpYyB2b2lkIGRhbW9uX3Rlc3RfaXNfbGFzdF9yZWdpb24oc3RydWN0IGt1bml0ICp0ZXN0KVxcbi0tXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2NjEtICogVGhpcyB0ZXN0cyB0aGUgaW52YXJpYW50IGludHJvZHVjZWQgYnk6XFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oOjE2NjI6ICogY29tbWl0IDMzYzNmNmMyYjQ4YyAoXFxcIm1tL2RhbW9uL2NvcmU6IGZpeCBkYW1vc193YWxrKCkgdnMga2RhbW9uZF9mbigpIGV4aXQgcmFjZVxcXCIpXFxubW0vZGFtb24vdGVzdHMvY29yZS1rdW5pdC5oLTE2NjMtICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjAzLjIxNzU2Mzk5N1oiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MjgyNTY0ODU2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRBTU9OIEtlcm5lbCBNb2R1bGUgRXhhbWluYXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgREFNT04ga2VybmVsIG1vZHVsZSBjb2RlLiBJIG5lZWQgdG8gcmVmcmVzaCBteSB1bmRlcnN0YW5kaW5nIG9mIGl0cyBjb3JlIGZ1bmN0aW9uYWxpdHksIHBhcnRpY3VsYXJseSBob3cgdGhlIGRhdGEgYWNjZXNzIG1vbml0b3Igb3BlcmF0ZXMuIEZpcnN0LCBJJ20gemVyb2luZyBpbiBvbiBga2RhbW9uZF9mbmAg4oCTIHRoYXQncyB0aGUgbWFpbiBEQU1PTiBrZXJuZWwgdGhyZWFkLCByaWdodD8gSSB3YW50IHRvIGVuc3VyZSBJIGZ1bGx5IGdyYXNwIGl0cyByb2xlIGluIHRoZSBtb25pdG9yaW5nIHByb2Nlc3MuIFRoZW4sIEkgbmVlZCB0byBsb29rIGF0IGFueSBub24tc3RhdGljIGZ1bmN0aW9ucyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AgYW5kIGBzeXNmcy5jYC4gTGV0J3Mgc2VlLi4uIHdoYXQncyBleHBvc2VkIGFzIGl0cyBtYWluIEFQSSBmdW5jdGlvbnM/IEkgaGF2ZSBhIGZlZWxpbmcgSSdsbCBiZSBsb29raW5nIGF0IGNhbGxzIHRvIGBkYW1vbl9zdGFydGAsIGBkYW1vbl9jb21taXRfY3R4YCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYW5kIGBkYW1vbl9zeXNmc19jbWRfcmVxdWVzdGAuIFRob3NlIHNob3VsZCBiZSBjcml0aWNhbCBlbnRyeSBwb2ludHMgZm9yIHN0YXJ0aW5nLCBjb21taXR0aW5nIGNvbnRleHRzLCBzZXR0aW5nIHNjaGVtZXMsIGFuZCBoYW5kbGluZyBzeXNmcyBjb21tYW5kcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHRob3NlIEFQSXMgYW5kIGBrZGFtb25kX2ZuYC4gRmluYWxseSwgbGV0J3MgY29uZmlybSB0aGUgZXhwb3J0ZWQgc3ltYm9scyB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2Ag4oCTIGEgcXVpY2sgY2hlY2sgdG8gdmVyaWZ5IHdoaWNoIGZ1bmN0aW9ucyBhcmUgaW50ZW50aW9uYWxseSBleHBvc2VkIHRvIHRoZSB3aWRlciBrZXJuZWwgYW5kIHRvIGV4dGVybmFsIG1vZHVsZXMuIFRoYXQgbGlzdCBvZiBzeW1ib2xzIHNob3VsZCByb3VuZCBvdXQgbXkgb3ZlcnZpZXcgb2YgdGhlIG1vZHVsZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTQ1MjAsIk91dHB1dFRva2VucyI6NDUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODowNy41MDAxMzA5NTNaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ5MDM3MDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcIl5pbnQgZGFtb25ffF52b2lkIGRhbW9uX3xec3RydWN0IC4qIFxcXFwqZGFtb25fXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uL2NvcmUuY1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJtbS9kYW1vbi9jb3JlLmM9NTA9Ym9vbCBkYW1vbl9pc19yZWdpc3RlcmVkX29wcyhlbnVtIGRhbW9uX29wc19pZCBpZClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03MC0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NzE6aW50IGRhbW9uX3JlZ2lzdGVyX29wcyhzdHJ1Y3QgZGFtb25fb3BlcmF0aW9ucyAqb3BzKVxcbm1tL2RhbW9uL2NvcmUuYy03Mi17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtOTctICovXFxubW0vZGFtb24vY29yZS5jOjk4OmludCBkYW1vbl9zZWxlY3Rfb3BzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgZW51bSBkYW1vbl9vcHNfaWQgaWQpXFxubW0vZGFtb24vY29yZS5jLTk5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xMTMtXFxubW0vZGFtb24vY29yZS5jOjExNDpzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9uZXdfZmlsdGVyKGVudW0gZGFtb25fZmlsdGVyX3R5cGUgdHlwZSxcXG5tbS9kYW1vbi9jb3JlLmMtMTE1LVxcdFxcdGJvb2wgbWF0Y2hpbmcsIGJvb2wgYWxsb3cpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTI4LVxcbm1tL2RhbW9uL2NvcmUuYzoxMjk6dm9pZCBkYW1vbl9hZGRfZmlsdGVyKHN0cnVjdCBkYW1vbl9wcm9iZSAqcCwgc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG5tbS9kYW1vbi9jb3JlLmMtMTMwLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMzk9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9maWx0ZXIoc3RydWN0IGRhbW9uX2ZpbHRlciAqZilcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNDMtXFxubW0vZGFtb24vY29yZS5jOjE0NDp2b2lkIGRhbW9uX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vbl9maWx0ZXIgKmYpXFxubW0vZGFtb24vY29yZS5jLTE0NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTUwPXN0YXRpYyBzdHJ1Y3QgZGFtb25fZmlsdGVyICpkYW1vbl9udGhfZmlsdGVyKGludCBuLCBzdHJ1Y3QgZGFtb25fcHJvYmUgKnApXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTYxLVxcbm1tL2RhbW9uL2NvcmUuYzoxNjI6c3RydWN0IGRhbW9uX3Byb2JlICpkYW1vbl9uZXdfcHJvYmUodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtMTYzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xNzQtXFxubW0vZGFtb24vY29yZS5jOjE3NTp2b2lkIGRhbW9uX2FkZF9wcm9iZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9wcm9iZSAqcHJvYmUpXFxubW0vZGFtb24vY29yZS5jLTE3Ni17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MzE4PXN0YXRpYyB2b2lkIGRhbW9uX3ZlcmlmeV9uZXdfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnQsIHVuc2lnbmVkIGxvbmcgZW5kKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTMyNy0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MzI4OnN0cnVjdCBkYW1vbl9yZWdpb24gKmRhbW9uX25ld19yZWdpb24odW5zaWduZWQgbG9uZyBzdGFydCwgdW5zaWduZWQgbG9uZyBlbmQpXFxubW0vZGFtb24vY29yZS5jLTMyOS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9NDQ1PXN0YXRpYyBpbnQgZGFtb25fZmlsbF9yZWdpb25zX2hvbGVzKHN0cnVjdCBkYW1vbl9yZWdpb24gKmZpcnN0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQ3Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6NDc4OmludCBkYW1vbl9zZXRfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LCBzdHJ1Y3QgZGFtb25fYWRkcl9yYW5nZSAqcmFuZ2VzLFxcbm1tL2RhbW9uL2NvcmUuYy00NzktXFx0XFx0dW5zaWduZWQgaW50IG5yX3JhbmdlcywgdW5zaWduZWQgbG9uZyBtaW5fcmVnaW9uX3N6KVxcbi0tXFxubW0vZGFtb24vY29yZS5jPTY2OT1zdGF0aWMgc3RydWN0IGRhbW9zX3F1b3RhICpkYW1vc19xdW90YV9pbml0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtNjgxLVxcbm1tL2RhbW9uL2NvcmUuYzo2ODI6c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG5tbS9kYW1vbi9jb3JlLmMtNjgzLVxcdFxcdFxcdGVudW0gZGFtb3NfYWN0aW9uIGFjdGlvbixcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03MjQ9c3RhdGljIHZvaWQgZGFtb3Nfc2V0X25leHRfYXBwbHlfc2lzKHN0cnVjdCBkYW1vcyAqcywgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTczNC1cXG5tbS9kYW1vbi9jb3JlLmM6NzM1OnZvaWQgZGFtb25fYWRkX3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vcyAqcylcXG5tbS9kYW1vbi9jb3JlLmMtNzM2LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz03NDY9c3RhdGljIHZvaWQgZGFtb25fZnJlZV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTc1MC1cXG5tbS9kYW1vbi9jb3JlLmM6NzUxOnZvaWQgZGFtb25fZGVzdHJveV9zY2hlbWUoc3RydWN0IGRhbW9zICpzKVxcbm1tL2RhbW9uL2NvcmUuYy03NTIte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTc3NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6Nzc2OnN0cnVjdCBkYW1vbl90YXJnZXQgKmRhbW9uX25ld190YXJnZXQodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtNzc3LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy03OTItXFxubW0vZGFtb24vY29yZS5jOjc5Mzp2b2lkIGRhbW9uX2FkZF90YXJnZXQoc3RydWN0IGRhbW9uX2N0eCAqY3R4LCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy03OTQte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTgwMz1zdGF0aWMgdm9pZCBkYW1vbl9kZWxfdGFyZ2V0KHN0cnVjdCBkYW1vbl90YXJnZXQgKnQpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtODA3LVxcbm1tL2RhbW9uL2NvcmUuYzo4MDg6dm9pZCBkYW1vbl9mcmVlX3RhcmdldChzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbm1tL2RhbW9uL2NvcmUuYy04MDkte1xcbi0tXFxubW0vZGFtb24vY29yZS5jLTgxNi1cXG5tbS9kYW1vbi9jb3JlLmM6ODE3OnZvaWQgZGFtb25fZGVzdHJveV90YXJnZXQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCwgc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbm1tL2RhbW9uL2NvcmUuYy04MTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTgyNz11bnNpZ25lZCBpbnQgZGFtb25fbnJfcmVnaW9ucyhzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTgzMS1cXG5tbS9kYW1vbi9jb3JlLmM6ODMyOnN0cnVjdCBkYW1vbl9jdHggKmRhbW9uX25ld19jdHgodm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtODMzLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz04NzI9c3RhdGljIHZvaWQgZGFtb25fZGVzdHJveV90YXJnZXRzKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy04NzktXFxubW0vZGFtb24vY29yZS5jOjg4MDp2b2lkIGRhbW9uX2Rlc3Ryb3lfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtODgxLXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0xMDEzPXN0YXRpYyBib29sIGRhbW9uX3ZhbGlkX2ludGVydmFsc19nb2FsKHN0cnVjdCBkYW1vbl9hdHRycyAqYXR0cnMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA0Ny0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTA0ODppbnQgZGFtb25fc2V0X2F0dHJzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9uX2F0dHJzICphdHRycylcXG5tbS9kYW1vbi9jb3JlLmMtMTA0OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTA5NS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTA5Njp2b2lkIGRhbW9uX3NldF9zY2hlbWVzKHN0cnVjdCBkYW1vbl9jdHggKmN0eCwgc3RydWN0IGRhbW9zICoqc2NoZW1lcyxcXG5tbS9kYW1vbi9jb3JlLmMtMTA5Ny1cXHRcXHRcXHRzc2l6ZV90IG5yX3NjaGVtZXMpXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTgwOT1zdGF0aWMgc3RydWN0IGRhbW9uX2N0eCAqZGFtb25fbmV3X3Rlc3RfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdClcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODM3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxODM4OmludCBkYW1vbl9jb21taXRfY3R4KHN0cnVjdCBkYW1vbl9jdHggKmRzdCwgc3RydWN0IGRhbW9uX2N0eCAqc3JjKVxcbm1tL2RhbW9uL2NvcmUuYy0xODM5LXtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0xODU3LSAqL1xcbm1tL2RhbW9uL2NvcmUuYzoxODU4OmludCBkYW1vbl9ucl9ydW5uaW5nX2N0eHModm9pZClcXG5tbS9kYW1vbi9jb3JlLmMtMTg1OS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MTk1Nz1zdGF0aWMgaW50IF9fZGFtb25fY29tbWl0X2N0eChzdHJ1Y3QgZGFtb25fY3R4ICpkc3QsIHN0cnVjdCBkYW1vbl9jdHggKnNyYyk7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMTk3My0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MTk3NDppbnQgZGFtb25fc3RhcnQoc3RydWN0IGRhbW9uX2N0eCAqKmN0eHMsIGludCBucl9jdHhzLCBib29sIGV4Y2x1c2l2ZSlcXG5tbS9kYW1vbi9jb3JlLmMtMTk3NS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjAxOT1zdGF0aWMgdm9pZCBfX2RhbW9uX3N0b3Aoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwMzgtICovXFxubW0vZGFtb24vY29yZS5jOjIwMzk6dm9pZCBkYW1vbl9zdG9wKHN0cnVjdCBkYW1vbl9jdHggKipjdHhzLCBpbnQgbnJfY3R4cylcXG5tbS9kYW1vbi9jb3JlLmMtMjA0MC17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjA1ND1ib29sIGRhbW9uX2lzX3J1bm5pbmcoc3RydWN0IGRhbW9uX2N0eCAqY3R4KVxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIwNjktICovXFxubW0vZGFtb24vY29yZS5jOjIwNzA6aW50IGRhbW9uX2tkYW1vbmRfcGlkKHN0cnVjdCBkYW1vbl9jdHggKmN0eClcXG5tbS9kYW1vbi9jb3JlLmMtMjA3MS17XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjEwNS0gKi9cXG5tbS9kYW1vbi9jb3JlLmM6MjEwNjppbnQgZGFtb25fY2FsbChzdHJ1Y3QgZGFtb25fY3R4ICpjdHgsIHN0cnVjdCBkYW1vbl9jYWxsX2NvbnRyb2wgKmNvbnRyb2wpXFxubW0vZGFtb24vY29yZS5jLTIxMDcte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTM5NTI9c3RhdGljIGJvb2wgZGFtb25fZmluZF9zeXN0ZW1fcmFtc19yYW5nZSh1bnNpZ25lZCBsb25nICpzdGFydCxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0zOTgzLSAqL1xcbm1tL2RhbW9uL2NvcmUuYzozOTg0OmludCBkYW1vbl9zZXRfcmVnaW9uX3N5c3RlbV9yYW1zX2RlZmF1bHQoc3RydWN0IGRhbW9uX3RhcmdldCAqdCxcXG5tbS9kYW1vbi9jb3JlLmMtMzk4NS1cXHRcXHRcXHR1bnNpZ25lZCBsb25nICpzdGFydCwgdW5zaWduZWQgbG9uZyAqZW5kLFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTQwMDgtICovXFxubW0vZGFtb24vY29yZS5jOjQwMDk6dm9pZCBkYW1vbl91cGRhdGVfcmVnaW9uX2FjY2Vzc19yYXRlKHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIGJvb2wgYWNjZXNzZWQpXFxubW0vZGFtb24vY29yZS5jLTQwMTAte1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODowNy41NDkxNzM0MDlaIiwiU2VxIjoyNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6NTM4MTc0MTAyMywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEQU1PTiBDb25maWd1cmF0aW9uIGFuZCBGdXp6aW5nIEFuYWx5c2lzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIGZvY3VzIHN5bWJvbHMgZm9yIHRoaXMgREFNT04gYW5hbHlzaXMgYXJlIGNsZWFybHkgZGVmaW5lZDogYGRhbW9uX3N0YXJ0YCwgYGRhbW9uX3NldF9zY2hlbWVzYCwgYGRhbW9uX2NvbW1pdF9jdHhgLCBhbmQgYGRhbW9uX25ld19zY2hlbWVgLiBUaGVzZSBzZWVtIHRvIGJlIHRoZSBjb3JlIGVudHJ5IHBvaW50cyBvciBjcml0aWNhbCBmdW5jdGlvbnMgd2l0aGluIHRoZSBEQU1PTiAoRGF0YSBBY2Nlc3MgTW9uaXRvcmluZykgZnJhbWV3b3JrLiBJJ2xsIG5lZWQgdG8ga2VlcCBhbiBleWUgb24gdGhlc2UuXG5cbk5vdywgb24gdG8gdGhlIGNvbmZpZ3VyYXRpb24gcmVxdWlyZW1lbnRzLiBJIGhhdmUgaWRlbnRpZmllZCBgREFNT05gLCBgREFNT05fU1lTRlNgLCBgREFNT05fUEFERFJgLCBhbmQgYERBTU9OX1ZBRERSYCBhcyBpbXBvcnRhbnQgY29uZmlndXJhdGlvbnMgdG8gY2hlY2suIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBtaXNzIGFueXRoaW5nLCBzbyBJJ2xsIGRvdWJsZS1jaGVjayBpbiBgbW0vZGFtb24vS2NvbmZpZ2AgZm9yIG90aGVyIHJlbGF0ZWQgZGVwZW5kZW5jaWVzLlxuXG5BbHJpZ2h0LCBsb29raW5nIGF0IHRoZSBgS2NvbmZpZ2AgZmlsZSwgYERBTU9OYCBpdHNlbGYgZG9lc24ndCBoYXZlIGFueSBkZXBlbmRlbmNpZXMgd2hpY2ggc2VlbXMgc2Vuc2libGUgZm9yIGEgdG9wLWxldmVsIG1lbnUgaXRlbS4gIGBEQU1PTl9TWVNGU2AgaXMgY29udGluZ2VudCBvbiBib3RoIGBEQU1PTmAgYW5kIGBTWVNGU2AsIHdoaWNoIG1ha2VzIHBlcmZlY3Qgc2Vuc2UgZm9yIGVuYWJsaW5nIHN5c3RlbSBmaWxlLWJhc2VkIGFjY2Vzcy4gVGhlbiwgYERBTU9OX1BBRERSYCBhbmQgYERBTU9OX1ZBRERSYCBkZXBlbmQgb24gYERBTU9OYCBhbmQgYE1NVWAuIFRoaXMgbWFrZXMgbG9naWNhbCBzZW5zZSBhcyB3ZWxsLCBtYXBwaW5nIHBoeXNpY2FsIG9yIHZpcnR1YWwgYWRkcmVzc2VzIGlzIG9ubHkgcG9zc2libGUgaWYgREFNT04gaXMgZW5hYmxlZCBhbmQgYW4gTU1VIGlzIHByZXNlbnQuIEkgYWxzbyBuZWVkIHRvIG5vdGUgYERBTU9OX1JFQ0xBSU1gIGRlcGVuZHMgb24gYERBTU9OIFx1MDAyNlx1MDAyNiBEQU1PTl9QQUREUmAgYW5kIGBEQU1PTl9MUlVfU09SVGAgZGVwZW5kcyBvbiBgREFNT04gXHUwMDI2XHUwMDI2IERBTU9OX1BBRERSYCwgYnV0LCB0aG9zZSBhcmUgc2Vjb25kYXJ5IGZvciBub3cuXG5cblRoZSBtYWluIHF1ZXN0aW9uIGlzLCBzaG91bGQgSSBtYXJrIHRoaXMgcGF0Y2ggYXMgd29ydGggZnV6emluZz8gVGhlIG1vZGlmaWNhdGlvbiB0byBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgaXMgYSBjcml0aWNhbCBmaXgsIHNwZWNpZmljYWxseSBpbiB0aGUgREFNT04gT3BlcmF0aW9uIFNjaGVtZXMgKERBTU9TKSBxdW90YSBtYW5hZ2VtZW50LiBJdCBkaXJlY3RseSBpbXBhY3RzIGhvdyBEQU1PTiBkZXRlcm1pbmVzIHdoZXRoZXIgYSBxdW90YSBpcyBleGhhdXN0ZWQgb3IgZnVsbCB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSBpcyB6ZXJvLiBUaGF0J3MgYSBmdW5kYW1lbnRhbCBjaGFuZ2UgdG8gY29yZSBmdW5jdGlvbmFsaXR5LCBhbmQgc2luY2UgaXQgaXMgZXhwb3NlZCB0byB1c2Vyc3BhY2UgdGhyb3VnaCBzeXNmcywgcmVjbGFtYXRpb24sIGFuZCBtb25pdG9yaW5nIEFQSXMsIGRlZmluaXRlbHkgd29ydGggZnV6emluZy4gVGhlIGNoYW5nZSBpcyBzaWduaWZpY2FudCBlbm91Z2gsIGFuZCB0aGUgaW1wYWN0IGlzIGltcG9ydGFudCBlbm91Z2gsIHNvIEknbGwgbWFyayBgV29ydGhGdXp6aW5nID0gdHJ1ZWAuXG5cblRoZXJlZm9yZSwgSSBjYW4gbm93IGFzc2VtYmxlIG15IGNvbmNsdXNpb25zOlxuXG4qICAgYFdvcnRoRnV6emluZzogdHJ1ZWBcbiogICBgRm9jdXNTeW1ib2xzOiBbXCJkYW1vbl9zdGFydFwiLCBcImRhbW9uX2NvbW1pdF9jdHhcIiwgXCJkYW1vbl9zZXRfc2NoZW1lc1wiLCBcImRhbW9uX25ld19zY2hlbWVcIl1gXG4qICAgYEVuYWJsZUNvbmZpZ3M6IFtcIkRBTU9OXCIsIFwiREFNT05fU1lTRlNcIiwgXCJEQU1PTl9QQUREUlwiLCBcIkRBTU9OX1ZBRERSXCJdYFxuKiAgIGBSZWFzb25pbmc6IENvcmUgZnVuY3Rpb25hbCBmaXggaW4gREFNT1MgcXVvdGEgbWFuYWdlbWVudCwgcmVhY2hhYmxlIHZpYSB1c2Vyc3BhY2UgREFNT04gQVBJcy5gXG5cbkZpbmFsbHksIEknbSByZWFkeSB0byBjYWxsIGBzZXQtcmVzdWx0c2AuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NDMyLCJPdXRwdXRUb2tlbnMiOjE1NSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxMiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODoxMi45MzA5MTY5NzJaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3NjAwNzM1NiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkYW1vc19xdW90YV9pc19mdWxsKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJldHVybiBmYWxzZSB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIGZ1bmN0aW9uYWxseSBhbHRlcnMgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIHJlZ2lvbiBhcHBsaWNhdGlvbiBiZWhhdmlvciBpbiB0aGUgREFNT04gbWVtb3J5IG1vbml0b3Jpbmcgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiREFNT05cIixcbiAgICBcIkRBTU9OX1NZU0ZTXCIsXG4gICAgXCJEQU1PTl9QQUREUlwiLFxuICAgIFwiREFNT05fVkFERFJcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJkYW1vbl9zdGFydFwiLFxuICAgIFwiZGFtb25fY29tbWl0X2N0eFwiLFxuICAgIFwiZGFtb25fc2V0X3NjaGVtZXNcIixcbiAgICBcImRhbW9uX25ld19zY2hlbWVcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyBkYW1vc19xdW90YV9pc19mdWxsKCkgaW4gbW0vZGFtb24vY29yZS5jIHRvIHJldHVybiBmYWxzZSB3aGVuIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoZXN6KSBpcyB6ZXJvLiBUaGlzIGZ1bmN0aW9uYWxseSBhbHRlcnMgREFNT1MgcXVvdGEgZW5mb3JjZW1lbnQgYW5kIHJlZ2lvbiBhcHBsaWNhdGlvbiBiZWhhdmlvciBpbiB0aGUgREFNT04gbWVtb3J5IG1vbml0b3Jpbmcgc3Vic3lzdGVtLCB3aGljaCBpcyByZWFjaGFibGUgYW5kIGNvbmZpZ3VyYWJsZSB2aWEgc3lzZnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjEzLjAwNjkzMTUzOFoiLCJTZXEiOjI3LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTgxODcxMDU1MjEsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODoxMy4wMDczNzQyNTdaIiwiU2VxIjoyOCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiY29yZSIsIkR1cmF0aW9uIjoxODE4NjY1Nzc5MiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggYWRkcyBhIGNoZWNrIChgaWYgKCFxdW90YS1cXHUwMDNlZXN6KSByZXR1cm4gZmFsc2U7YCkgaW4gYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgaW4gbW0vZGFtb24vY29yZS5jIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZWZmZWN0aXZlIHF1b3RhIHNpemUgKGBlc3pgKSBpcyB6ZXJvLiBUaGlzIGlzIGEgcHVyZWx5IGludGVybmFsIGxvZ2ljIGNoYW5nZSB3aXRoaW4gREFNT04ncyBxdW90YSBlbmZvcmNlbWVudCBtZWNoYW5pc20uIEl0IGRvZXMgbm90IGludHJvZHVjZSwgcmVhZCwgb3IgZXhwb3NlIHVuaW5pdGlhbGl6ZWQgbWVtb3J5LCBkb2VzIG5vdCBhZmZlY3QgZGF0YSBzdHJ1Y3R1cmVzIGNvcGllZCB0byB1c2VyIHNwYWNlLCBhbmQgZG9lcyBub3QgYWx0ZXIgbWVtb3J5IGFsbG9jYXRpb24gb3IgYnVmZmVyIGhhbmRsaW5nLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyBub3Qgd2FycmFudGVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBzZWN1cml0eSBlbmdpbmVlciBzcGVjaWFsaXppbmcgaW4ga2VybmVsIG1lbW9yeVxuZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmRcbmRldGVybWluZSBpZiB0aGUgY29kZSBjaGFuZ2VzIGp1c3RpZnkgc3Bhd25pbmcgYSBkZWRpY2F0ZWQgS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcilcbmZ1enppbmcgc2Vzc2lvbiBpbiBhZGRpdGlvbiB0byBzdGFuZGFyZCBLQVNBTiBmdXp6aW5nLlxuXG5DUklUSUNBTCBESVNUSU5DVElPTiBCRVRXRUVOIEtBU0FOIEFORCBLTVNBTjpcbi0gU3RhbmRhcmQgS0FTQU4ga2VybmVsIGJ1aWxkcyAodXBzdHJlYW0tYXBwYXJtb3Ita2FzYW4uY29uZmlnKSBhbHJlYWR5IGVuYWJsZVxuICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU5cbiAgKG91dC1vZi1ib3VuZHMgYWNjZXNzZXMsIHVzZS1hZnRlci1mcmVlLCBkb3VibGUgZnJlZSwgaW52YWxpZCBmcmVlKSwgTE9DS0RFUFxuICAobG9ja2luZyBidWdzIGFuZCBkZWFkbG9ja3MpLCBVQi1zYW5pdGl6ZXJzLCBhbmQgbWVtb3J5IGNvcnJ1cHRpb24gY2hlY2tzLlxuLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCxcbiAgb3IgcGFnZSBhbGxvY2F0aW9ucykgYW5kIGtlcm5lbC10by11c2VyIG1lbW9yeSBpbmZvLWxlYWtzLlxuXG5SdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLFxuTE9DS0RFUCwgT1IgT1RIRVIgU1RBTkRBUkQgQlVHIERFVEVDVE9SUy5cbkEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpbmN1cnMgc2lnbmlmaWNhbnQgcmVzb3VyY2UgY29zdHMuIFlvdSBtdXN0IE9OTFlcbnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzXG50aGF0IGFyZSBkZXRlY3RlZCBPTkxZIGJ5IEtNU0FOLlxuXG5Mb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdFxudW5pbml0aWFsaXplZCBmaWVsZCBhY2Nlc3NlcyBvciBuZXcgYnVmZmVyIGFsbG9jYXRpb25zIGFyZSBhZGRlZCBpbiB0aGUgZGlmZiBpdHNlbGYsXG5hIHBhdGNoIG1heSBhbHRlciBjb250cm9sIGZsb3csIGJvdW5kcyBjaGVja2luZywgb3IgZGF0YSBsZW5ndGggY2FsY3VsYXRpb25zIGluIHdheXNcbnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nXG51bmluaXRpYWxpemVkIHN0YWNrL2hlYXAgbWVtb3J5IHRvIGJlIHJlYWQsIGNvcGllZCB0byB1c2VyIHNwYWNlLCBvciB1c2VkIGluIGNvbnRyb2xcbmZsb3cpLiBEbyBub3QgaGVzaXRhdGUgdG8gdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSxcbmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj10cnVlIE9OTFkgSUYgdGhlIHBhdGNoIGludHJvZHVjZXMgb3IgbW9kaWZpZXM6XG4xLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYlxuICAgYXR0cmlidXRlcywgaW9jdGwgb3V0cHV0IGFyZ3VtZW50cywgc29ja2V0IG9wdGlvbnMsIG9yIEJQRiBidWZmZXJzKSB3aGVyZSBmaWVsZHNcbiAgIG9yIHN0cnVjdHVyZSBwYWRkaW5nIG1pZ2h0IG5vdCBiZSBmdWxseSBpbml0aWFsaXplZC96ZXJvZWQuXG4yLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzXG4gICBvciBzdHJ1Y3QgZmllbGRzLlxuMy4gQWxsb2NhdGlvbiBvciBpbml0aWFsaXphdGlvbiBvZiBjb21wbGV4IGRhdGEgc3RydWN0dXJlcyB3aGVyZSB1bmluaXRpYWxpemVkIGZpZWxkc1xuICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy5cbjQuIEJvdW5kcyBjaGVja3MsIGxlbmd0aHMsIG9yIGxvZ2ljIGluIGEgd2F5IHRoYXQgYWxsb3dzIHN1cnJvdW5kaW5nIGNvZGUgdG8gYWNjZXNzXG4gICB1bmluaXRpYWxpemVkIGJ5dGVzIG9mIGV4aXN0aW5nIGJ1ZmZlcnMuXG5cblNldCBOZWVkc0tNU0FOPWZhbHNlIElGOlxuLSBUaGUgY29kZSBjaGFuZ2VzIHByaW1hcmlseSByaXNrIG91dC1vZi1ib3VuZHMgYWNjZXNzLCBhcnJheSBvdmVyZmxvd3MsIE5VTEwgcG9pbnRlclxuICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHRcbiAgYnkgS0FTQU4sIExPQ0tERVAsIG9yIHN0YW5kYXJkIGJ1ZyBkZXRlY3RvcnMpLlxuLSBBbGwgc3RhY2svaGVhcCBzdHJ1Y3R1cmVzIHRvdWNoZWQgb3IgaW50cm9kdWNlZCBieSB0aGUgcGF0Y2ggYXJlIGZ1bGx5IHplcm9lZFxuICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuXG4tIFRoZSBwYXRjaCBkb2VzIG5vdCBpbnRyb2R1Y2UgYW55IHJpc2sgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgdXNhZ2Ugb3IgaW5mby1sZWFrcy5cblxuVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZVxuZGV0YWlsZWQgS01TQU5SZWFzb25pbmcgY29udHJhc3RpbmcgS0FTQU4gdnMgS01TQU4gYXBwbGljYWJpbGl0eSBmb3IgdGhpcyBwYXRjaC5cblByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLlxuXG5cblVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuXG5JdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS5cbklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC5cbiIsIlByb21wdCI6IkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOlxuY29tbWl0IDVkNTZmYWY4ZmYwNTQ5YjQ4N2NhMjMwZGMyOTlmYWNlNTNlM2I3YTNcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXHUwMDNjdHJpYWdlQHN5emthbGxlci5jb21cdTAwM2VcbkRhdGU6ICAgVHVlIFNlcCAxIDIzOjA3OjIyIDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvbW0vZGFtb24vY29yZS5jIGIvbW0vZGFtb24vY29yZS5jXG5pbmRleCA2NDRkYWY1YTE2NTYwLi41M2NmMzJmMWQ1MTVjIDEwMDY0NFxuLS0tIGEvbW0vZGFtb24vY29yZS5jXG4rKysgYi9tbS9kYW1vbi9jb3JlLmNcbkBAIC0yNTYwLDYgKzI1NjAsOCBAQCBzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXG4ge1xuIFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxuIFx0XHRyZXR1cm4gZmFsc2U7XG4rXHRpZiAoIXF1b3RhLVx1MDAzZWVzeilcbitcdFx0cmV0dXJuIGZhbHNlO1xuIFx0aWYgKHF1b3RhLVx1MDAzZWNoYXJnZWRfc3ogXHUwMDNlPSBxdW90YS1cdTAwM2Vlc3opXG4gXHRcdHJldHVybiB0cnVlO1xuIFx0LypcbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjEzLjAwNzM3Njc1N1oiLCJTZXEiOjI5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo1NDU5OTcyMjY3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYW5hbHlzaXMgb2YgdGhlIHNpdHVhdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgREFNT04gQ29yZSoqXG5cbk9rYXksIHNvIHdlJ3ZlIGdvdCBhIHBhdGNoIHRvIHJldmlldywgYW5kIHRoZSBjcnVjaWFsIGFyZWEgYXBwZWFycyB0byBiZSBpbiBgbW0vZGFtb24vY29yZS5jYC4gTXkgaW5pdGlhbCBtb3ZlIGlzIHRvIHplcm8gaW4gb24gdGhhdCBmaWxlLiBJJ2xsIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2hhbmdlIGluIGNvbnRleHQsIHNvIEknbSB0aGlua2luZyBJJ2xsIG5lZWQgdG8gYnJpbmcgdXAgdGhlIGZpbGUgdG8gcmV2aWV3IGl0IGFuZCB1bmRlcnN0YW5kIHRoZSBtb2RpZmljYXRpb25zLlxuXG5JJ20gc3BlY2lmaWNhbGx5IGludGVyZXN0ZWQgaW4gbGluZSAyNTYwIGFuZCBpdHMgaW1tZWRpYXRlIHZpY2luaXR5LiBJJ2xsIHVzZSBhIGByZWFkLWZpbGVgIGNvbW1hbmQsIG9yIHNvbWV0aGluZyBzaW1pbGFyIGluIG15IHByZWZlcnJlZCBlbnZpcm9ubWVudCwgdG8gZ2V0IGEgY2xlYXIgdmlldyBvZiB0aGF0IHNlY3Rpb24gYW5kIHRoZSBzdXJyb3VuZGluZyBjb2RlLiBUaGF0IHNob3VsZCBwcm92aWRlIHRoZSBuZWNlc3NhcnkgY29udGV4dCB0byBkZXRlcm1pbmUgdGhlIGltcGxpY2F0aW9ucyBvZiB0aGUgcGF0Y2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjIwNDIsIk91dHB1dFRva2VucyI6MzcsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0OSwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjE4LjQ2NzM1MjgxNFoiLCJTZXEiOjMwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNzA2MjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwibW0vZGFtb24vY29yZS5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDI1NDAsXG4gIFwiTGluZUNvdW50XCI6IDUwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjI1NDA6XFx0XFxuMjU0MTpcXHRzdGF0aWMgdm9pZCBkYW1vc19jaGFyZ2VfcXVvdGEoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4yNTQyOlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfcmVnaW9uLCB1bnNpZ25lZCBsb25nIHN6X2FwcGxpZWQpXFxuMjU0MzpcXHR7XFxuMjU0NDpcXHRcXHQvKlxcbjI1NDU6XFx0XFx0ICogc3pfYXBwbGllZCBjb3VsZCBiZSBiaWdnZXIgdGhhbiBzel9yZWdpb24sIGRlcGVuZGluZyBvbiBvcHNcXG4yNTQ2OlxcdFxcdCAqIGltcGxlbWVudGF0aW9uIG9mIHRoZSBhY3Rpb24sIGUuZy4sIGRhbW9zX3BhX3BhZ2VvdXQoKS4gIENoYXJnZSBvbmx5XFxuMjU0NzpcXHRcXHQgKiB0aGUgcmVnaW9uIHNpemUgaW4gdGhlIGNhc2UuXFxuMjU0ODpcXHRcXHQgKi9cXG4yNTQ5OlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWZhaWxfY2hhcmdlX2Rlbm9tIHx8IHN6X2FwcGxpZWQgXFx1MDAzZSBzel9yZWdpb24pXFxuMjU1MDpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArPSBzel9yZWdpb247XFxuMjU1MTpcXHRcXHRlbHNlXFxuMjU1MjpcXHRcXHRcXHRxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiArPSBzel9hcHBsaWVkICsgbXVsdF9mcmFjKFxcbjI1NTM6XFx0XFx0XFx0XFx0XFx0KHN6X3JlZ2lvbiAtIHN6X2FwcGxpZWQpLFxcbjI1NTQ6XFx0XFx0XFx0XFx0XFx0cXVvdGEtXFx1MDAzZWZhaWxfY2hhcmdlX251bSxcXG4yNTU1OlxcdFxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VmYWlsX2NoYXJnZV9kZW5vbSk7XFxuMjU1NjpcXHR9XFxuMjU1NzpcXHRcXG4yNTU4OlxcdHN0YXRpYyBib29sIGRhbW9zX3F1b3RhX2lzX2Z1bGwoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG4yNTU5OlxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbWluX3JlZ2lvbl9zeilcXG4yNTYwOlxcdHtcXG4yNTYxOlxcdFxcdGlmICghZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSlcXG4yNTYyOlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yNTYzOlxcdFxcdGlmICghcXVvdGEtXFx1MDAzZWVzeilcXG4yNTY0OlxcdFxcdFxcdHJldHVybiBmYWxzZTtcXG4yNTY1OlxcdFxcdGlmIChxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNlPSBxdW90YS1cXHUwMDNlZXN6KVxcbjI1NjY6XFx0XFx0XFx0cmV0dXJuIHRydWU7XFxuMjU2NzpcXHRcXHQvKlxcbjI1Njg6XFx0XFx0ICogREFNT1MgYWN0aW9uIGlzIGFwcGxpZWQgcGVyIHJlZ2lvbiwgc28gXFx1MDAzY21pbl9yZWdpb25fc3ogcmVtYWluaW5nXFxuMjU2OTpcXHRcXHQgKiBxdW90YSBtZWFucyB0aGUgcXVvdGEgaXMgZWZmZWN0aXZlbHkgZnVsbC5cXG4yNTcwOlxcdFxcdCAqL1xcbjI1NzE6XFx0XFx0cmV0dXJuIHF1b3RhLVxcdTAwM2Vlc3ogLSBxdW90YS1cXHUwMDNlY2hhcmdlZF9zeiBcXHUwMDNjIG1pbl9yZWdpb25fc3o7XFxuMjU3MjpcXHR9XFxuMjU3MzpcXHRcXG4yNTc0OlxcdHN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbjI1NzU6XFx0XFx0XFx0c3RydWN0IGRhbW9uX3JlZ2lvbiAqciwgc3RydWN0IGRhbW9zICpzKVxcbjI1NzY6XFx0e1xcbjI1Nzc6XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSA9IFxcdTAwMjZzLVxcdTAwM2VxdW90YTtcXG4yNTc4OlxcdFxcdHVuc2lnbmVkIGxvbmcgc3ogPSBkYW1vbl9zel9yZWdpb24ocik7XFxuMjU3OTpcXHRcXHRzdHJ1Y3QgdGltZXNwZWM2NCBiZWdpbiwgZW5kO1xcbjI1ODA6XFx0XFx0dW5zaWduZWQgbG9uZyBzel9hcHBsaWVkID0gMDtcXG4yNTgxOlxcdFxcdHVuc2lnbmVkIGxvbmcgc3pfb3BzX2ZpbHRlcl9wYXNzZWQgPSAwO1xcbjI1ODI6XFx0XFx0LypcXG4yNTgzOlxcdFxcdCAqIFdlIHBsYW4gdG8gc3VwcG9ydCBtdWx0aXBsZSBjb250ZXh0IHBlciBrZGFtb25kLCBhcyBEQU1PTiBzeXNmc1xcbjI1ODQ6XFx0XFx0ICogaW1wbGllcyB3aXRoICducl9jb250ZXh0cycgZmlsZS4gIE5ldmVydGhlbGVzcywgb25seSBzaW5nbGUgY29udGV4dFxcbjI1ODU6XFx0XFx0ICogcGVyIGtkYW1vbmQgaXMgc3VwcG9ydGVkIGZvciBub3cuICBTbywgd2UgY2FuIHNpbXBseSB1c2UgJzAnIGNvbnRleHRcXG4yNTg2OlxcdFxcdCAqIGluZGV4IGhlcmUuXFxuMjU4NzpcXHRcXHQgKi9cXG4yNTg4OlxcdFxcdHVuc2lnbmVkIGludCBjaWR4ID0gMDtcXG4yNTg5OlxcdFxcdHN0cnVjdCBkYW1vcyAqc2l0ZXI7XFx0XFx0Lyogc2NoZW1lcyBpdGVyYXRvciAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODoxOC40Njc1MjUzMzRaIiwiU2VxIjozMSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MjcwMDkwNzcyNSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIGBkYW1vc19xdW90YV9pc19zZXQocXVvdGEpYCBhbmQgYGVzemAuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8gY2hlY2sgdGhlaXIgaW1wbGVtZW50YXRpb24gYW5kIGhvdyB0aGV5IGFyZSB1c2VkIHdpdGhpbiB0aGUgYG1tL2RhbW9uL2NvcmUuY2AgZmlsZS4gSSdsbCBuZWVkIHRvIHRyYWNlIHRoZSBsb2dpYyBvZiB0aGVzZSBmdW5jdGlvbnMgdG8gdW5kZXJzdGFuZCB0aGUgcXVvdGEgc2V0dGluZywgd2hpY2ggaXMga2V5LiBJJ20gZ29pbmcgdG8gc2NhbiB0aGUgY29kZSB3aXRoaW4gYG1tL2RhbW9uL2NvcmUuY2AsIHNwZWNpZmljYWxseSBsb29raW5nIGF0IHRoZSBsaW5lcyBsZWFkaW5nIHVwIHRvIHRoZSBjYWxscywgdG8gZ2V0IHRoZSBjb21wbGV0ZSBwaWN0dXJlLiBIb3BlZnVsbHkgdGhlIHN1cnJvdW5kaW5nIGNvZGUgcmV2ZWFscyB0aGUgaW50ZW50aW9uIGFuZCBpbXBhY3QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjMwNzgsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0MCwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjIxLjE2ODQzNjI4WiIsIlNlcSI6MzIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxODEwOTI0MjcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiZGFtb3NfcXVvdGFfaXNfc2V0XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcIm1tL2RhbW9uXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcIm1tL2RhbW9uL2NvcmUuYz0yMjc2PXN0YXRpYyBib29sIF9fZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsIHN0cnVjdCBkYW1vcyAqcyxcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYy0yMjkxLS8qXFxubW0vZGFtb24vY29yZS5jOjIyOTI6ICogZGFtb3NfcXVvdGFfaXNfc2V0KCkgLSBSZXR1cm4gaWYgdGhlIGdpdmVuIHF1b3RhIGlzIGFjdHVhbGx5IHNldC5cXG5tbS9kYW1vbi9jb3JlLmMtMjI5My0gKiBAcXVvdGE6XFx0VGhlIHF1b3RhIHRvIGNoZWNrLlxcbi0tXFxubW0vZGFtb24vY29yZS5jLTIyOTYtICovXFxubW0vZGFtb24vY29yZS5jOjIyOTc6c3RhdGljIGJvb2wgZGFtb3NfcXVvdGFfaXNfc2V0KHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEpXFxubW0vZGFtb24vY29yZS5jLTIyOTgte1xcbi0tXFxubW0vZGFtb24vY29yZS5jPTIzMDM9c3RhdGljIGJvb2wgZGFtb3NfdmFsaWRfdGFyZ2V0KHN0cnVjdCBkYW1vbl9jdHggKmMsIHN0cnVjdCBkYW1vbl9yZWdpb24gKnIsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjMwNy1cXG5tbS9kYW1vbi9jb3JlLmM6MjMwODpcXHRpZiAoIXJldCB8fCAhZGFtb3NfcXVvdGFfaXNfc2V0KFxcdTAwMjZzLVxcdTAwM2VxdW90YSkgfHwgIWMtXFx1MDAzZW9wcy5nZXRfc2NoZW1lX3Njb3JlKVxcbm1tL2RhbW9uL2NvcmUuYy0yMzA5LVxcdFxcdHJldHVybiByZXQ7XFxuLS1cXG5tbS9kYW1vbi9jb3JlLmM9MjU1OD1zdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19mdWxsKHN0cnVjdCBkYW1vc19xdW90YSAqcXVvdGEsXFxuLS1cXG5tbS9kYW1vbi9jb3JlLmMtMjU2MC17XFxubW0vZGFtb24vY29yZS5jOjI1NjE6XFx0aWYgKCFkYW1vc19xdW90YV9pc19zZXQocXVvdGEpKVxcbm1tL2RhbW9uL2NvcmUuYy0yNTYyLVxcdFxcdHJldHVybiBmYWxzZTtcXG4tLVxcbm1tL2RhbW9uL2NvcmUuYz0yNTc0PXN0YXRpYyB2b2lkIGRhbW9zX2FwcGx5X3NjaGVtZShzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fdGFyZ2V0ICp0LFxcbi0tXFxubW0vZGFtb24vY29yZS5jLTI2MTEtXFx0aWYgKGMtXFx1MDAzZW9wcy5hcHBseV9zY2hlbWUpIHtcXG5tbS9kYW1vbi9jb3JlLmM6MjYxMjpcXHRcXHRpZiAoZGFtb3NfcXVvdGFfaXNfc2V0KHF1b3RhKSBcXHUwMDI2XFx1MDAyNlxcbm1tL2RhbW9uL2NvcmUuYy0yNjEzLVxcdFxcdFxcdFxcdHF1b3RhLVxcdTAwM2VjaGFyZ2VkX3N6ICsgc3ogXFx1MDAzZSBxdW90YS1cXHUwMDNlZXN6KSB7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjIxLjM0OTUzNDk0NloiLCJTZXEiOjMzLCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjoyMTE0MTM2NjY4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYGRhbW9zX3F1b3RhX2lzX3NldGAgSW1wbGVtZW50YXRpb24qKlxuXG5Pa2F5LCB0aW1lIHRvIGRpdmUgaW50byB0aGUgaW1wbGVtZW50YXRpb24gb2YgYGRhbW9zX3F1b3RhX2lzX3NldGAuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGV4YWN0bHkgaG93IHRoaXMgZnVuY3Rpb24gZGV0ZXJtaW5lcyBpZiBhIHF1b3RhIGlzLCB3ZWxsLCAqc2V0Ki4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHF1aWNrbHkgcmV2aWV3IHRoZSBjb2RlIHRvIGlkZW50aWZ5IHRoZSBrZXkgdmFyaWFibGVzIG9yIGRhdGEgc3RydWN0dXJlcyBpdCdzIHJlZmVyZW5jaW5nLiBJJ20gbG9va2luZyBmb3IgdGhlIHVuZGVybHlpbmcgbG9naWMg4oCTIGlzIGl0IGNoZWNraW5nIGEgY29uZmlndXJhdGlvbiBmaWxlLCBxdWVyeWluZyBhIGRhdGFiYXNlLCBvciBwZXJoYXBzIHJlbHlpbmcgb24gc29tZSBpbnRlcm5hbCBzdGF0ZT8gSXMgaXQgY2hlY2tpbmcgZm9yIGEgc3BlY2lmaWMgdmFsdWUgb3IgYSByYW5nZT8gQW55IGNvbmRpdGlvbmFsIHN0YXRlbWVudHMgYXJlIGdvaW5nIHRvIGJlIGNyaXRpY2FsIHRvIHVuZGVyc3RhbmRpbmcgdGhlIGVkZ2UgY2FzZXMuIE1vcmUgaW1wb3J0YW50bHksIGhvdyByb2J1c3QgaXMgdGhpcyBpbXBsZW1lbnRhdGlvbj8gSXMgdGhlcmUgcHJvcGVyIGVycm9yIGhhbmRsaW5nPyBXaGF0IGhhcHBlbnMgaWYgdGhlIHNvdXJjZSBkYXRhIGlzIHVuYXZhaWxhYmxlIG9yIGNvcnJ1cHRlZD8gV2hhdCdzIHRoZSBpbXBhY3Qgb24gdGhlIHJlc3Qgb2YgdGhlIHN5c3RlbSBpZiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYW4gdW5leHBlY3RlZCB2YWx1ZSwgYW5kIGlzIHRoZXJlIGFueSBsb2dnaW5nIHRvIHRyYWNrIGl0cyBiZWhhdmlvdXI/IFRoZSBnb2FsIGlzIHRvIHZlcmlmeSBpZiBpdCBpcyBhbGlnbmVkIHdpdGggdGhlIGV4cGVjdGF0aW9ucywgYW5kIGl0cyBiZWhhdmlvdXIgdW5kZXIgbm9ybWFsIGFuZCBleGNlcHRpb25hbCBjaXJjdW1zdGFuY2VzLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODIwLCJPdXRwdXRUb2tlbnMiOjM3LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDg6MjMuNDYzNjc0OTA0WiIsIlNlcSI6MzQsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxMDEwMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJtbS9kYW1vbi9jb3JlLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMjI5MCxcbiAgXCJMaW5lQ291bnRcIjogMjVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMjI5MDpcXHRcXG4yMjkxOlxcdC8qXFxuMjI5MjpcXHQgKiBkYW1vc19xdW90YV9pc19zZXQoKSAtIFJldHVybiBpZiB0aGUgZ2l2ZW4gcXVvdGEgaXMgYWN0dWFsbHkgc2V0LlxcbjIyOTM6XFx0ICogQHF1b3RhOlxcdFRoZSBxdW90YSB0byBjaGVjay5cXG4yMjk0OlxcdCAqXFxuMjI5NTpcXHQgKiBSZXR1cm5zIHRydWUgaWYgdGhlIHF1b3RhIGlzIHNldCwgZmFsc2Ugb3RoZXJ3aXNlLlxcbjIyOTY6XFx0ICovXFxuMjI5NzpcXHRzdGF0aWMgYm9vbCBkYW1vc19xdW90YV9pc19zZXQoc3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSlcXG4yMjk4OlxcdHtcXG4yMjk5OlxcdFxcdHJldHVybiBxdW90YS1cXHUwMDNlZXN6IHx8IHF1b3RhLVxcdTAwM2VzeiB8fCBxdW90YS1cXHUwMDNlbXMgfHxcXG4yMzAwOlxcdFxcdFxcdCFkYW1vc19xdW90YV9nb2Fsc19lbXB0eShxdW90YSk7XFxuMjMwMTpcXHR9XFxuMjMwMjpcXHRcXG4yMzAzOlxcdHN0YXRpYyBib29sIGRhbW9zX3ZhbGlkX3RhcmdldChzdHJ1Y3QgZGFtb25fY3R4ICpjLCBzdHJ1Y3QgZGFtb25fcmVnaW9uICpyLFxcbjIzMDQ6XFx0XFx0XFx0c3RydWN0IGRhbW9zICpzKVxcbjIzMDU6XFx0e1xcbjIzMDY6XFx0XFx0Ym9vbCByZXQgPSBfX2RhbW9zX3ZhbGlkX3RhcmdldChyLCBzLCBjKTtcXG4yMzA3OlxcdFxcbjIzMDg6XFx0XFx0aWYgKCFyZXQgfHwgIWRhbW9zX3F1b3RhX2lzX3NldChcXHUwMDI2cy1cXHUwMDNlcXVvdGEpIHx8ICFjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZSlcXG4yMzA5OlxcdFxcdFxcdHJldHVybiByZXQ7XFxuMjMxMDpcXHRcXG4yMzExOlxcdFxcdHJldHVybiBjLVxcdTAwM2VvcHMuZ2V0X3NjaGVtZV9zY29yZShjLCByLCBzKSBcXHUwMDNlPSBzLVxcdTAwM2VxdW90YS5taW5fc2NvcmU7XFxuMjMxMjpcXHR9XFxuMjMxMzpcXHRcXG4yMzE0OlxcdC8qXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA5LTAxVDIzOjA4OjIzLjQ2Mzg4NzQ2NFoiLCJTZXEiOjM1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuNy1mbGFzaCIsIkR1cmF0aW9uIjo0MzYwNjM0NjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyBEQU1PTiBRdW90YSBMb2dpYyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgREFNT04gcXVvdGEgY29kZSBhbmQgdHJ5aW5nIHRvIHVuZGVyc3RhbmQgYSBzcGVjaWZpYyBzY2VuYXJpby4gSXQgc2VlbXMgd2UgaGF2ZSBhIHNpdHVhdGlvbiB3aGVyZSBgcXVvdGEtXHUwMDNlZXN6YCBtaWdodCBiZSB6ZXJvLCBidXQgYGRhbW9zX3F1b3RhX2lzX3NldChxdW90YSlgIGlzIHRydWUuIFRoYXQgaW1tZWRpYXRlbHkgcmFpc2VzIGEgZmxhZyBmb3IgbWUgYmVjYXVzZSwgY29uY2VwdHVhbGx5LCBpZiB0aGUgZWZmZWN0aXZlIHNpemUgKGBlc3pgKSBpcyB6ZXJvLCBob3cgY2FuIHRoZSBxdW90YSAqYmUqIHNldCwgcmlnaHQ/XG5cblRoZSBvcmlnaW5hbCBgZGFtb3NfcXVvdGFfaXNfZnVsbGAgZnVuY3Rpb24gaGFkIGEgcG90ZW50aWFsIGJ1Zy4gV2l0aCBgcXVvdGEtXHUwMDNlZXN6YCBhdCB6ZXJvIGFuZCwgbGV0J3Mgc2F5LCBgcXVvdGEtXHUwMDNlY2hhcmdlZF9zemAgYWxzbyB6ZXJvLCB0aGUgY29uZGl0aW9uIGBxdW90YS1cdTAwM2VjaGFyZ2VkX3N6IFx1MDAzZT0gcXVvdGEtXHUwMDNlZXN6YCB3b3VsZCBldmFsdWF0ZSB0byBgdHJ1ZWAsIGluY29ycmVjdGx5IG1hcmtpbmcgdGhlIHF1b3RhIGFzIGZ1bGwuIEVzc2VudGlhbGx5LCBpdCB3YXMgdHJpZ2dlcmluZyBhIFwiZnVsbFwiIHN0YXRlIGV2ZW4gd2hlbiBubyBxdW90YSB3YXMgYWN0dWFsbHkgZXN0YWJsaXNoZWQuIE9yIGF0IGxlYXN0LCBub3QgY2FsY3VsYXRlZCB5ZXQuXG5cblRoZSBwYXRjaCdzIGFkZGl0aW9uLCBzcGVjaWZpY2FsbHkgYGlmICghcXVvdGEtXHUwMDNlZXN6KSByZXR1cm4gZmFsc2U7YCwgdGFja2xlcyB0aGlzIGhlYWQtb24uIEl0J3MgYSBjbGVhbiwgbG9naWNhbCBjaGVjay4gSWYgYGVzemAgaXMgemVybywgd2UgKmtub3cqIHRoZSBxdW90YSBpc24ndCBmdWxsLCBzbyB3ZSBzaG9ydC1jaXJjdWl0IHRoZSBmdW5jdGlvbidzIGV2YWx1YXRpb24uIFRoaXMgc2VlbXMgbGlrZSBhIHJlYXNvbmFibGUgZml4LlxuXG5Ob3csIGFzIGFuIGV4cGVydCBpbiB0aGlzIGZpZWxkLCBJIG5lZWQgdG8gcXVpY2tseSBydW4gdGhyb3VnaCB0aGUgdXN1YWwgc3VzcGVjdHMgdG8gZW5zdXJlIHRoaXMgY2hhbmdlIGRvZXNuJ3QgaW50cm9kdWNlIGFueSBuZXcgcHJvYmxlbXMuIEl0J3Mgc3RyaWN0bHkgYSBsb2dpY2FsIGNoZWNrIHdpdGhpbiBEQU1PTidzIHF1b3RhIHRyYWNraW5nLiBJJ20gbm90IHNlZWluZyBhbnkgcmVkIGZsYWdzIHJlZ2FyZGluZyB1bmluaXRpYWxpemVkIG1lbW9yeSwgcG90ZW50aWFsIGluZm9ybWF0aW9uIGxlYWtzIChubyBgY29weV90b191c2VyYCBjYWxscyksIG9yIGFsdGVyYXRpb25zIHRvIGJ1ZmZlciBzaXplcyBvciBib3VuZGFyaWVzLiBUaGlzIGNoZWNrIGRvZXNuJ3QgcmVhZCBhbnkgdW5pbml0aWFsaXplZCB2YXJpYWJsZXMuIFdlJ3JlIGRlYWxpbmcgd2l0aCBgcXVvdGEtXHUwMDNlZXN6YCwgd2hpY2ggaXMgYSB3ZWxsLWRlZmluZWQgZmllbGQgd2l0aGluIHRoZSBgc3RydWN0IGRhbW9zX3F1b3RhYCBzdHJ1Y3R1cmUsIGFuZCBpdCdzIGFsbG9jYXRlZC9pbml0aWFsaXplZCBkdXJpbmcgREFNT04gc2V0dXAuIFNvLCBpdCdzIHByZXR0eSBzZWxmIGNvbnRhaW5lZC5cblxuQWxsIGluIGFsbCwgdGhpcyBsb29rcyBsaWtlIGEgc291bmQsIHRhcmdldGVkIGZpeCBmb3IgYSBsb2dpY2FsIGluY29uc2lzdGVuY3kgaW4gdGhlIHF1b3RhIG1hbmFnZW1lbnQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ0ODIsIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDQsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODoyNy44MjQ1MjY3MDRaIiwiU2VxIjozNiwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjMxOTc5MDUzNiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdHJ1Y3QgZGFtb3NfcXVvdGFcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiaW5jbHVkZS9saW51eC9kYW1vbi5oXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImluY2x1ZGUvbGludXgvZGFtb24uaD0xNjA9ZW51bSBkYW1vc19xdW90YV9nb2FsX21ldHJpYyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTczLS8qKlxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxNzQ6ICogc3RydWN0IGRhbW9zX3F1b3RhX2dvYWwgLSBEQU1PUyBzY2hlbWUgcXVvdGEgYXV0by10dW5pbmcgZ29hbC5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTc1LSAqIEBtZXRyaWM6XFx0XFx0TWV0cmljIHRvIGJlIHVzZWQgZm9yIHJlcHJlc2VudGluZyB0aGUgZ29hbC5cXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xOTUtICovXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjE5NjpzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTE5Ny1cXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYztcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaD0yMjE9ZW51bSBkYW1vc19xdW90YV9nb2FsX3R1bmVyIHtcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0yMjYtLyoqXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjIyNzogKiBzdHJ1Y3QgZGFtb3NfcXVvdGEgLSBDb250cm9scyB0aGUgYWdncmVzc2l2ZW5lc3Mgb2YgdGhlIGdpdmVuIHNjaGVtZS5cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMjI4LSAqIEByZXNldF9pbnRlcnZhbDpcXHRDaGFyZ2UgcmVzZXQgaW50ZXJ2YWwgaW4gbWlsbGlzZWNvbmRzLlxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTI3My0gKi9cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6Mjc0OnN0cnVjdCBkYW1vc19xdW90YSB7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTI3NS1cXHR1bnNpZ25lZCBsb25nIHJlc2V0X2ludGVydmFsO1xcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTMzOT1zdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzY0LSAqIGRldGVybWluZWQgdGhlIHJlZ2lvbiBhcyBlbGlnaWJsZSB0byBhcHBseSB0aGUgYWN0aW9uLiAgVGhlIGFjY2VzcyBwYXR0ZXJuXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjM2NTogKiAoXFx1MDAyNnN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiksIHF1b3RhcyAoXFx1MDAyNnN0cnVjdCBkYW1vc19xdW90YSksIHdhdGVybWFya3NcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMzY2LSAqIChcXHUwMDI2c3RydWN0IGRhbW9zX3dhdGVybWFya3MpIGFuZCBmaWx0ZXJzIChcXHUwMDI2c3RydWN0IGRhbW9zX2ZpbHRlcikgdGhhdCBoYW5kbGVkXFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9NTU1PXN0cnVjdCBkYW1vcyB7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtNTU4LVxcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXM7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjU1OTpcXHRzdHJ1Y3QgZGFtb3NfcXVvdGEgcXVvdGE7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTU2MC1cXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyB3bWFya3M7XFxuLS1cXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg9MTAzOD12b2lkIGRhbW9zX2Rlc3Ryb3lfZmlsdGVyKHN0cnVjdCBkYW1vc19maWx0ZXIgKmYpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDM5LVxcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDQwOnN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpkYW1vc19uZXdfcXVvdGFfZ29hbChcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0MS1cXHRcXHRlbnVtIGRhbW9zX3F1b3RhX2dvYWxfbWV0cmljIG1ldHJpYyxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA0Mi1cXHRcXHR1bnNpZ25lZCBsb25nIHRhcmdldF92YWx1ZSk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDM6dm9pZCBkYW1vc19hZGRfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGEgKnEsIHN0cnVjdCBkYW1vc19xdW90YV9nb2FsICpnKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmg6MTA0NDp2b2lkIGRhbW9zX2Rlc3Ryb3lfcXVvdGFfZ29hbChzdHJ1Y3QgZGFtb3NfcXVvdGFfZ29hbCAqZ29hbCk7XFxuaW5jbHVkZS9saW51eC9kYW1vbi5oLTEwNDUtXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNDY9c3RydWN0IGRhbW9zICpkYW1vbl9uZXdfc2NoZW1lKHN0cnVjdCBkYW1vc19hY2Nlc3NfcGF0dGVybiAqcGF0dGVybixcXG4tLVxcbmluY2x1ZGUvbGludXgvZGFtb24uaC0xMDQ4LVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgYXBwbHlfaW50ZXJ2YWxfdXMsXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oOjEwNDk6XFx0XFx0XFx0c3RydWN0IGRhbW9zX3F1b3RhICpxdW90YSxcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1MC1cXHRcXHRcXHRzdHJ1Y3QgZGFtb3Nfd2F0ZXJtYXJrcyAqd21hcmtzLFxcbi0tXFxuaW5jbHVkZS9saW51eC9kYW1vbi5oPTEwNTM9dm9pZCBkYW1vbl9kZXN0cm95X3NjaGVtZShzdHJ1Y3QgZGFtb3MgKnMpO1xcbmluY2x1ZGUvbGludXgvZGFtb24uaDoxMDU0OmludCBkYW1vc19jb21taXRfcXVvdGFfZ29hbHMoc3RydWN0IGRhbW9zX3F1b3RhICpkc3QsIHN0cnVjdCBkYW1vc19xdW90YSAqc3JjKTtcXG5pbmNsdWRlL2xpbnV4L2RhbW9uLmgtMTA1NS1cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDktMDFUMjM6MDg6MjguMTQ0MzI2NzJaIiwiU2VxIjozNywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjctZmxhc2giLCJEdXJhdGlvbiI6MzA0OTY3OTI1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBBc3Nlc3NtZW50IG9mIHRoZSBRdW90YSBQYXRjaCoqXG5cbk9rYXksIHRoaXMgaXMgYWJvdXQgYXMgY2xlYW4gYW5kIHNpbXBsZSBhcyBpdCBnZXRzLiBUaGUgcGF0Y2ggaXMgaW5jcmVkaWJseSBzdHJhaWdodGZvcndhcmQg4oCTIGp1c3QgYSBzaW5nbGUgY2hlY2ssIGBpZiAoIXF1b3RhLVx1MDAzZWVzeikgcmV0dXJuIGZhbHNlO2AsIHdpdGhpbiB0aGUgYGRhbW9zX3F1b3RhX2lzX2Z1bGwoKWAgZnVuY3Rpb24uIFRoaXMgaXMgZ3JlYXQ7IEknbSBub3Qgc2VlaW5nIGFueSByZWQgZmxhZ3MgYXQgYWxsLiBObyB1bmluaXRpYWxpemVkIG1lbW9yeSBpc3N1ZXMsIG5vIHBvdGVudGlhbCBmb3IgaW5mb3JtYXRpb24gbGVha3MsIG5vIG5ldyBhbGxvY2F0aW9ucyB0aGF0IG5lZWQgc2NydXRpbnksIGFuZCBubyBjaGFuZ2VzIHRvIGJ1ZmZlciBjb3B5aW5nIHRoYXQgd291bGQgd2FycmFudCBleHRyYSBhdHRlbnRpb24uIEhvbmVzdGx5LCB0aGlzIGlzIGFsbW9zdCBib3JpbmcgaW4gaXRzIGxhY2sgb2YgY29tcGxleGl0eSwgd2hpY2ggaXMgYSBnb29kIHRoaW5nIVxuXG5TdGFuZGFyZCB0ZXN0aW5nIHByb3RvY29scyBhbmQgS0FTQU4gc2hvdWxkIGJlIG1vcmUgdGhhbiBzdWZmaWNpZW50IHRvIHZhbGlkYXRlIHRoaXMgY2hhbmdlLiBUaGVyZSdzIGFic29sdXRlbHkgbm8gbmVlZCB0byBicmluZyBLTVNBTiBpbnRvIHRoZSBlcXVhdGlvbiBmb3IgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoOyBpdCdzIG92ZXJraWxsIGdpdmVuIHRoZSBzY29wZSBvZiB0aGUgbW9kaWZpY2F0aW9uLlxuXG5UaW1lIHRvIGNhbGwgdGhlIGBzZXQtcmVzdWx0c2AgdG9vbCBhbmQgcHJvdmlkZSBhIGNvbmNpc2UgYW5kIHVuZGVyc3RhbmRhYmxlIGV4cGxhbmF0aW9uLiBObyBuZWVkIHRvIG92ZXJjb21wbGljYXRlIHRoZSBkZXNjcmlwdGlvbi5cblxuXG4iLCJJbnB1dFRva2VucyI6NjMxOSwiT3V0cHV0VG9rZW5zIjoxMzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5MiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOS0wMVQyMzowODozMS4xOTQwMDg4NDlaIiwiU2VxIjozOCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMTUyMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGFkZHMgYSBjaGVjayAoYGlmICghcXVvdGEtXFx1MDAzZWVzeikgcmV0dXJuIGZhbHNlO2ApIGluIGBkYW1vc19xdW90YV9pc19mdWxsKClgIGluIG1tL2RhbW9uL2NvcmUuYyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGVmZmVjdGl2ZSBxdW90YSBzaXplIChgZXN6YCkgaXMgemVyby4gVGhpcyBpcyBhIHB1cmVseSBpbnRlcm5hbCBsb2dpYyBjaGFuZ2Ugd2l0aGluIERBTU9OJ3MgcXVvdGEgZW5mb3JjZW1lbnQgbWVjaGFuaXNtLiBJdCBkb2VzIG5vdCBpbnRyb2R1Y2UsIHJlYWQsIG9yIGV4cG9zZSB1bmluaXRpYWxpemVkIG1lbW9yeSwgZG9lcyBub3QgYWZmZWN0IGRhdGEgc3RydWN0dXJlcyBjb3BpZWQgdG8gdXNlciBzcGFjZSwgYW5kIGRvZXMgbm90IGFsdGVyIG1lbW9yeSBhbGxvY2F0aW9uIG9yIGJ1ZmZlciBoYW5kbGluZy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgbm90IHdhcnJhbnRlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBhZGRzIGEgY2hlY2sgKGBpZiAoIXF1b3RhLVxcdTAwM2Vlc3opIHJldHVybiBmYWxzZTtgKSBpbiBgZGFtb3NfcXVvdGFfaXNfZnVsbCgpYCBpbiBtbS9kYW1vbi9jb3JlLmMgdG8gaGFuZGxlIGNhc2VzIHdoZXJlIHRoZSBlZmZlY3RpdmUgcXVvdGEgc2l6ZSAoYGVzemApIGlzIHplcm8uIFRoaXMgaXMgYSBwdXJlbHkgaW50ZXJuYWwgbG9naWMgY2hhbmdlIHdpdGhpbiBEQU1PTidzIHF1b3RhIGVuZm9yY2VtZW50IG1lY2hhbmlzbS4gSXQgZG9lcyBub3QgaW50cm9kdWNlLCByZWFkLCBvciBleHBvc2UgdW5pbml0aWFsaXplZCBtZW1vcnksIGRvZXMgbm90IGFmZmVjdCBkYXRhIHN0cnVjdHVyZXMgY29waWVkIHRvIHVzZXIgc3BhY2UsIGFuZCBkb2VzIG5vdCBhbHRlciBtZW1vcnkgYWxsb2NhdGlvbiBvciBidWZmZXIgaGFuZGxpbmcuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIG5vdCB3YXJyYW50ZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiBmYWxzZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+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-workflowvsrnp[1] Phase: Succeeded StartedAt: 2026-09-01 23:08:42 +0000 UTC FinishedAt: 2026-09-01 23:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-09-01 23:08:42 +0000 UTC FinishedAt: 2026-09-01 23:08:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2] Phase: Succeeded StartedAt: 2026-09-01 23:08:42 +0000 UTC FinishedAt: 2026-09-02 02:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:08:42 +0000 UTC FinishedAt: 2026-09-02 02:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},"patched":{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:08:42 +0000 UTC FinishedAt: 2026-09-01 23:08:52 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:08:42 +0000 UTC FinishedAt: 2026-09-01 23:08:46 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"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-workflowvsrnp/series-workflowvsrnp-convert-artifact-3041746206/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:08:52 +0000 UTC FinishedAt: 2026-09-01 23:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:08:52 +0000 UTC FinishedAt: 2026-09-01 23:25:02 +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:*952362e5-d4c2-4320-81cf-cb0f6cd65363,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-workflowvsrnp/series-workflowvsrnp-convert-artifact-3041746206/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": "cc0477a3-ec09-48ec-aac2-51c57786e68a", "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-workflowvsrnp/series-workflowvsrnp-build-action-3550159364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:08:52 +0000 UTC FinishedAt: 2026-09-01 23:24:52 +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:*952362e5-d4c2-4320-81cf-cb0f6cd65363,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-workflowvsrnp/series-workflowvsrnp-convert-artifact-3041746206/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": "cc0477a3-ec09-48ec-aac2-51c57786e68a", "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-workflowvsrnp/series-workflowvsrnp-build-action-3550159364/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:25:02 +0000 UTC FinishedAt: 2026-09-01 23:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:25:02 +0000 UTC FinishedAt: 2026-09-01 23:25:02 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:25:02 +0000 UTC FinishedAt: 2026-09-01 23:25:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:25:02 +0000 UTC FinishedAt: 2026-09-01 23:25:07 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-workflowvsrnp/series-workflowvsrnp-convert-artifact-3567191505/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:25:13 +0000 UTC FinishedAt: 2026-09-01 23:26:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:25:13 +0000 UTC FinishedAt: 2026-09-01 23:26:41 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cc0477a3-ec09-48ec-aac2-51c57786e68a,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-workflowvsrnp/series-workflowvsrnp-build-action-3550159364/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-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:26:51 +0000 UTC FinishedAt: 2026-09-01 23:26:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:26:51 +0000 UTC FinishedAt: 2026-09-01 23:26:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:26:51 +0000 UTC FinishedAt: 2026-09-01 23:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:26:51 +0000 UTC FinishedAt: 2026-09-01 23:44:09 +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:*952362e5-d4c2-4320-81cf-cb0f6cd65363,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-workflowvsrnp/series-workflowvsrnp-convert-artifact-3567191505/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": "807b098b-7d53-42f1-aa4a-fd711be85e84", "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-workflowvsrnp/series-workflowvsrnp-build-action-3920161693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:26:51 +0000 UTC FinishedAt: 2026-09-01 23:43:59 +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:*952362e5-d4c2-4320-81cf-cb0f6cd65363,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-workflowvsrnp/series-workflowvsrnp-convert-artifact-3567191505/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": "807b098b-7d53-42f1-aa4a-fd711be85e84", "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-workflowvsrnp/series-workflowvsrnp-build-action-3920161693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:44:09 +0000 UTC FinishedAt: 2026-09-01 23:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:44:09 +0000 UTC FinishedAt: 2026-09-01 23:44:09 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:44:09 +0000 UTC FinishedAt: 2026-09-01 23:46:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:44:09 +0000 UTC FinishedAt: 2026-09-01 23:45:54 +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:*807b098b-7d53-42f1-aa4a-fd711be85e84,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-workflowvsrnp/series-workflowvsrnp-build-action-3920161693/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-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:46:03 +0000 UTC FinishedAt: 2026-09-02 02:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:46:03 +0000 UTC FinishedAt: 2026-09-02 02:47:23 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"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:*cc0477a3-ec09-48ec-aac2-51c57786e68a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*807b098b-7d53-42f1-aa4a-fd711be85e84,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-workflowvsrnp/series-workflowvsrnp-build-action-3550159364/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-workflowvsrnp/series-workflowvsrnp-build-action-3920161693/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:46:03 +0000 UTC FinishedAt: 2026-09-01 23:46:13 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:46:03 +0000 UTC FinishedAt: 2026-09-01 23:46:10 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"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-workflowvsrnp/series-workflowvsrnp-convert-artifact-3273091334/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:46:03 +0000 UTC FinishedAt: 2026-09-01 23:46:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:46:03 +0000 UTC FinishedAt: 2026-09-01 23:46:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:46:03 +0000 UTC FinishedAt: 2026-09-01 23:46:03 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:46:13 +0000 UTC FinishedAt: 2026-09-02 02:47:23 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvsrnp[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"","tree_name":"mm-new","tree_url":"https://kernel.googlesource.com/pub/scm/linux/kernel/git/akpm/mm.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":null,"focus_symbols":["damon_start","damon_commit_ctx","damon_set_schemes","damon_new_scheme"],"skip_cover_check":true},patched:{"arch":"amd64","commit_hash":"9d3d3356faf028769b5856809ee0965b34c85539","config_name":"upstream-apparmor-kasan.config","enable_configs":["DAMON","DAMON_SYSFS","DAMON_PADDR","DAMON_VADDR"],"series_id":"bc9adb52-797a-4433-88a5-e3c4bb3fe34b","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-01 23:46:13 +0000 UTC FinishedAt: 2026-09-02 02:47:13 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*cc0477a3-ec09-48ec-aac2-51c57786e68a,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*807b098b-7d53-42f1-aa4a-fd711be85e84,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-workflowvsrnp/series-workflowvsrnp-build-action-3550159364/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-workflowvsrnp/series-workflowvsrnp-build-action-3920161693/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-workflowvsrnp/series-workflowvsrnp-convert-artifact-3273091334/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,}