Name: series-workflowtnzrh Phase: Succeeded StartedAt: 2026-08-26 19:05:45 +0000 UTC FinishedAt: 2026-08-26 23:12:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[0] Phase: Succeeded StartedAt: 2026-08-26 19:05:45 +0000 UTC FinishedAt: 2026-08-26 19:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[0].run-triage Phase: Succeeded StartedAt: 2026-08-26 19:05:45 +0000 UTC FinishedAt: 2026-08-26 19:11:10 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_HYPERV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_HYPERV" ], "series_id": "317cb3df-628c-4e00-80de-a530c076e805" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_hv_set_msr_common", "kvm_hv_process_stimers" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2h2X3NldF9tc3JfY29tbW9uJiMzNDssCiAgICAmIzM0O2t2bV9odl9wcm9jZXNzX3N0aW1lcnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5LiBTcGVjaWZpY2FsbHksIGBodl9oZHJgIGlzIGFuIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGUuIFRoZSBjb2RlIHNldHMgYSBzaW5nbGUgYml0ZmllbGQgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMWAsIGxlYXZpbmcgdGhlIHJlbWFpbmluZyA3IGJpdHMgb2YgdGhlIGBtZXNzYWdlX2ZsYWdzYCBieXRlIHVuaW5pdGlhbGl6ZWQuIFRoaXMgYnl0ZSBpcyB0aGVuIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5IHZpYSBga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSgpYCwgd2hpY2ggaW50ZXJuYWxseSB1c2VzIGBfX2NvcHlfdG9fdXNlcigpYCB0byB3cml0ZSB0byB0aGUgdXNlcnNwYWNlLW1hcHBlZCBndWVzdCBtZW1vcnkuIFRoaXMgbGVha3MgNyBiaXRzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGRvZXMgbm90IGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB0aGlzIGV4YWN0IGNsYXNzIG9mIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIHN5bnRoZXRpYyB0aW1lciBtZXNzYWdlIGRlbGl2ZXJ5IGxvZ2ljIGluIEtWTSBieSBjbGVhcmluZyBhIG1lc3NhZ2UgZmxhZyBiZWZvcmUgc2V0dGluZyBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgZ3Vlc3QgTVNSIHdyaXRlcyBhbmQgdGltZXIgZXhwaXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYmU2MDk3MTliYTU4OWY0YWZhM2U1NzZkZWY3NWMyMjE2N2ViMGIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDc6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2h5cGVydi5jIGIvYXJjaC94ODYva3ZtL2h5cGVydi5jXG5pbmRleCA2MDQ2NTFjYjI3Mzk5Li44ZDI2NjlkOGVmMzQ3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2h5cGVydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbkBAIC04MDIsNyAmIzQzOzgwMiw5IEBAIHN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG4gXHRcdGlmIChub19yZXRyeSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRcdGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO1xuIFx0XHRodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7XG4mIzQzO1xuIFx0XHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNmh2X2hkci5tZXNzYWdlX2ZsYWdzLFxuIFx0XHRcdFx0XHQgICAgICBtc2dfb2ZmICYjNDM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2h2X3NldF9tc3JfY29tbW9uJiMzNDssCiAgICAmIzM0O2t2bV9odl9wcm9jZXNzX3N0aW1lcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEh5cGVyLVYgc3ludGhldGljIHRpbWVyIG1lc3NhZ2UgZGVsaXZlcnkgbG9naWMgaW4gS1ZNIGJ5IGNsZWFyaW5nIGEgbWVzc2FnZSBmbGFnIGJlZm9yZSBzZXR0aW5nIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBndWVzdCBNU1Igd3JpdGVzIGFuZCB0aW1lciBleHBpcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNiZTYwOTcxOWJhNTg5ZjRhZmEzZTU3NmRlZjc1YzIyMTY3ZWIwYjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxOTowNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9oeXBlcnYuYyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuYwppbmRleCA2MDQ2NTFjYjI3Mzk5Li44ZDI2NjlkOGVmMzQ3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2h5cGVydi5jCkBAIC04MDIsNyAmIzQzOzgwMiw5IEBAIHN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsCiAJCWlmIChub19yZXRyeSkKIAkJCXJldHVybiAwOwogCiYjNDM7CQlodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4ID0gMDsKIAkJaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxOwomIzQzOwogCQlyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sCiAJCQkJCSAgICAgICZhbXA7aHZfaGRyLm1lc3NhZ2VfZmxhZ3MsCiAJCQkJCSAgICAgIG1zZ19vZmYgJiM0MzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBIeXBlci1WIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNgLiBJdCYjMzk7cyBhIHByZXR0eSBmb2N1c2VkIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgc3luaWNfZGVsaXZlcl9tc2dgLiBUaGUgY29yZSBvZiB0aGUgYWx0ZXJhdGlvbiBzZWVtcyB0byBiZSBpbnNlcnRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO2AgKmJlZm9yZSogc2V0dGluZyBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgS1ZNIEh5cGVyLVYgZW11bGF0aW9uIGxheWVyLiBUaGF0ICYjMzQ7YXN1OCA9IDAmIzM0OyBsaWtlbHkgcmVsYXRlcyB0byBzb21lIHNwZWNpZmljIGZlYXR1cmUgb3Igc3RhdGUgZmxhZywgYW5kIGl0cyBwbGFjZW1lbnQgKmJlZm9yZSogdGhlIGBtc2dfcGVuZGluZ2AgYml0IGlzIHNldCBpcyBjcnVjaWFsLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSHlwZXItViBTeW5JQyBpbnRlcnJ1cHRzIGFyZSBkZWxpdmVyZWQgd2l0aGluIEtWTSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MuYXN1OGAgYWN0dWFsbHkgKm1lYW5zKiBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIG1lc3NhZ2UgZGVsaXZlcnkgcHJvY2Vzcy4gVGhlIG9yZGVyaW5nIGNoYW5nZSBoYXMgdG8gYmUgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGVpdGhlciBpbml0aWFsaXphdGlvbiBvciBkZWFjdGl2YXRpb24gb2YgdGhlIG1lc3NhZ2UgZmVhdHVyZS4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gYm90aCBgc3luaWNfZGVsaXZlcl9tc2dgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBodl9oZHIubWVzc2FnZV9mbGFnc2AgdG8gZ3Jhc3AgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeW5pY19kZWxpdmVyX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzY4PXN0YXRpYyBpbnQgc3RpbWVyX2dldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCAqcGNvdW50KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Nzc0OnN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzc1LVx0XHRcdCAgICAgc3RydWN0IGh2X21lc3NhZ2UgKnNyY19tc2csIGJvb2wgbm9fcmV0cnkpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTgzMz1zdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cdHBheWxvYWQtXHUwMDNlZGVsaXZlcnlfdGltZSA9IGdldF90aW1lX3JlZl9jb3VudGVyKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NDg6XHRyZXR1cm4gc3luaWNfZGVsaXZlcl9tc2codG9faHZfc3luaWModmNwdSksXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVx0XHRcdFx0IHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHgsIG1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgYSBIeXBlci1WIFRpbWVyIEludGVyYWN0aW9uKioKCkFscmlnaHQsIHNvIGBzdGltZXJfc2VuZF9tc2dgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCYjMzk7cyB0ZWxsaW5nIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSHlwZXItViBzeW50aGV0aWMgdGltZXJzLiBUaGlzIHJpbmdzIGEgYmVsbDsgSSYjMzk7dmUgaGFkIHRvIGRlYnVnIHRoZXNlIGludGVyYWN0aW9ucyBiZWZvcmUuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hvIGVsc2UgaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBvdmVydmlldywgdG8gYXNzZXNzIHRoZSBwb2ludHMgb2YgZW50cnkuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHRpbWVyIHN1YnN5c3RlbSBvZiBIeXBlci1WLiBXaGVyZSBkb2VzIHRoZSB3b3JrIG9yaWdpbmF0ZSwgYW5kIHdoZXJlIGRvZXMgaXQgZ28gZnJvbSBoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5bmljX2RlbGl2ZXJfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzY4PXN0YXRpYyBpbnQgc3RpbWVyX2dldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCAqcGNvdW50KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Nzc0OnN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzc1LVx0XHRcdCAgICAgc3RydWN0IGh2X21lc3NhZ2UgKnNyY19tc2csIGJvb2wgbm9fcmV0cnkpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTgzMz1zdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cdHBheWxvYWQtXHUwMDNlZGVsaXZlcnlfdGltZSA9IGdldF90aW1lX3JlZl9jb3VudGVyKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NDg6XHRyZXR1cm4gc3luaWNfZGVsaXZlcl9tc2codG9faHZfc3luaWModmNwdSksXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVx0XHRcdFx0IHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHgsIG1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgc3RpbWVyX3NlbmRfbXNnYCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYHN0aW1lcl9zZW5kX21zZ2AsIGFuZCBpdCBzZWVtcyBsaWtlIGEgY29yZSBwaWVjZSBvZiB0aGUgdGltaW5nIG1lY2hhbmlzbS4gVGhlIGltbWVkaWF0ZSBjb250ZXh0IHRlbGxzIG1lIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gb25lIHBsYWNlOiBgc3RpbWVyX3NlbmRfbXNnYC4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBidXQgbm90IG5lY2Vzc2FyaWx5IGEgcmVkIGZsYWcgeWV0LiBUbyB0cnVseSB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdmVyaWZ5IHRoaXMgaW5pdGlhbCBhc3N1bXB0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgKnNvdXJjZSogb2YgdGhlIGNhbGwuIEkgbXVzdCBiZSBzdXJlIGBzdGltZXJfc2VuZF9tc2dgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSB3aXRoaW4gYHN0aW1lcl9zZW5kX21zZ2AuIElmIHRoaXMgaXMgaW5jb3JyZWN0LCBteSBhbmFseXNpcyB3aWxsIGZhaWwuIElmIHRoaXMgaXMgY29ycmVjdCwgSSBoYXZlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHByb2NlZWQgd2l0aCB0aGUgYW5hbHlzaXMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGluIGFuZCBpZGVudGlmeWluZyBhbGwgY2FsbGVycyB0byBgc3RpbWVyX3NlbmRfbXNnYC4gVGhpcyYjMzk7bGwgZWl0aGVyIGNvbmZpcm0gbXkgaW5pdGlhbCBpbmZvcm1hdGlvbiBvciBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyB3aWRlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgbmV4dCBhcHByb3ByaWF0ZSBzdGVwcyBpbiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGltZXJfc2VuZF9tc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYz03NzQ9c3RhdGljIGludCBzeW5pY19kZWxpdmVyX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljLCB1MzIgc2ludCxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODMyLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjgzMzpzdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODM0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9ODY2PXN0YXRpYyB2b2lkIHN0aW1lcl9leHBpcmF0aW9uKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODcxLVx0aWYgKCFkaXJlY3QpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODcyOlx0XHRyID0gc3RpbWVyX3NlbmRfbXNnKHN0aW1lcik7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODczLVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyB0aGUgYHN0aW1lcl9leHBpcmF0aW9uYCBDYWxsZXIqKgoKT2theSwgc28gYHN0aW1lcl9leHBpcmF0aW9uYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBpbml0aWF0aW5nIHRoaXMgY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB3aGV0aGVyIGBzdGltZXJfc2VuZF9tc2dgIG9yIGBzdGltZXJfZXhwaXJhdGlvbmAgdGhlbXNlbHZlcyBhcmUgZXh0ZXJuYWxseSB2aXNpYmxlLCBtZWFuaW5nIGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJJiMzOTtkIGNoZWNrOyB0aGF0JiMzOTtsbCBuYXJyb3cgZG93biBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBiZSBpbnRlZ3JhdGVkIG9yIHV0aWxpemVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gS25vd2luZyB0aGF0IGV4cG9ydCBzdGF0dXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsIGZsb3cgYW5kIG92ZXJhbGwgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGltZXJfZXhwaXJhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jPTg1Mz1zdGF0aWMgaW50IHN0aW1lcl9ub3RpZnlfZGlyZWN0KHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODY1LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjg2NjpzdGF0aWMgdm9pZCBzdGltZXJfZXhwaXJhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODY3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODc0LVx0XHRyID0gc3RpbWVyX25vdGlmeV9kaXJlY3Qoc3RpbWVyKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NzU6XHR0cmFjZV9rdm1faHZfc3RpbWVyX2V4cGlyYXRpb24oaHZfc3RpbWVyX3RvX3ZjcHUoc3RpbWVyKS1cdTAwM2V2Y3B1X2lkLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg3Ni1cdFx0XHRcdCAgICAgICBzdGltZXItXHUwMDNlaW5kZXgsIGRpcmVjdCwgcik7XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTg4ND12b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy05MDMtXHRcdFx0XHRcdGlmICh0aW1lX25vdyBcdTAwM2U9IGV4cF90aW1lKVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjkwNDpcdFx0XHRcdFx0XHRzdGltZXJfZXhwaXJhdGlvbihzdGltZXIpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTkwNS1cdFx0XHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaD0xNDA4PVRSQUNFX0VWRU5UKGt2bV9odl9zdGltZXJfY2FsbGJhY2ssXG4tLVxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMTQyNi0vKlxuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTQyNzogKiBUcmFjZXBvaW50IGZvciBzdGltZXJfZXhwaXJhdGlvbi5cbmFyY2gveDg2L2t2bS90cmFjZS5oLTE0MjgtICovXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaDoxNDI5OlRSQUNFX0VWRU5UKGt2bV9odl9zdGltZXJfZXhwaXJhdGlvbixcbmFyY2gveDg2L2t2bS90cmFjZS5oLTE0MzAtXHRUUF9QUk9UTyhpbnQgdmNwdV9pZCwgaW50IHRpbWVyX2luZGV4LCBpbnQgZGlyZWN0LCBpbnQgbXNnX3NlbmRfcmVzdWx0KSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgVGltZXIgSGFuZGxpbmcgaW4gS1ZNLUhWKioKCk9rYXksIHNvIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBjdXJyZW50bHkgaW4gZm9jdXMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyBsZWFkaW5nICp0byogdGhpcyBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZmluZCBpdHMgY2FsbGVycy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdobyYjMzk7cyByZXNwb25zaWJsZSBmb3IgaW52b2tpbmcgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIHRvIGdyYXNwIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IHRpbWVycyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIEtWTS1IViBlbnZpcm9ubWVudC4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGV4cG9zZSB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyB0aW1lciBwcm9jZXNzaW5nIGlzIGluaXRpYXRlZCwgaGVscGluZyBtZSB0byBhbmFseXplIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiBhbmQgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSB1bmRlcnN0b29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faHZfcHJvY2Vzc19zdGltZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9ODY2PXN0YXRpYyB2b2lkIHN0aW1lcl9leHBpcmF0aW9uKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODgzLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjg4NDp2b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg4NS17XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5oPTI2Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2h2X2ludnRzY19zdXBwcmVzc2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMjg0LVxuYXJjaC94ODYva3ZtL2h5cGVydi5oOjI4NTp2b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODYtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTgwNTE9c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODE5OS1cdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfSFZfU1RJTUVSLCB2Y3B1KSlcbmFyY2gveDg2L2t2bS94ODYuYzo4MjAwOlx0XHRcdGt2bV9odl9wcm9jZXNzX3N0aW1lcnModmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODIwMS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFRpbWVyIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBmdW5jdGlvbi4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGB2Y3B1X2VudGVyX2d1ZXN0YCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBjcml0aWNhbCBjb3JlIEtWTSBsb2dpYyDigJMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdmVyeSBmdW5kYW1lbnRhbCBleGVjdXRpb24gZmxvdyBoZXJlLiBUaGlzIGlzbiYjMzk7dCBzb21lIG9ic2N1cmUgaGVscGVyIGZ1bmN0aW9uOyB0aGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgdmlydHVhbGl6YXRpb24gcHJvY2Vzcy4KCk5vdywgdGhlIHBhdGNoJiMzOTtzIG1vZGlmaWNhdGlvbiBvZiBgc3luaWNfZGVsaXZlcl9tc2dgIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBjbGVhcmluZyBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MuYXN1OGAgYmVmb3JlIHNldHRpbmcgYG1zZ19wZW5kaW5nYC4gVGhhdCYjMzk7cyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UsIG5vIGRvdWJ0IGFib3V0IGl0LiBXZSYjMzk7cmUgZGlyZWN0bHkgYWx0ZXJpbmcgdGhlIG1lc3NhZ2luZyBiZWhhdmlvciwgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGhvdyB0aGUgaHlwZXJ2aXNvciBpbnRlcmFjdHMgd2l0aCB0aGUgZ3Vlc3QmIzM5O3MgdGltZXJzLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMgYWJvdXQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93LgoKQmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWMgaW1wYWN0cyBvZiBjbGVhcmluZyBgYXN1OGAsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcuIEl0IGlzIHZpdGFsIHRvIGRldGVybWluZSBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIEtWTSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBhbmQgb3BlcmF0aW9uYWwgaW1wbGljYXRpb25zIGJlZm9yZSBldmFsdWF0aW5nIHRoZSBwYXRjaCYjMzk7cyBwb3RlbnRpYWwgcmlzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4OTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIEtWTSBhbmQgSHlwZXItViBJbnRlcnBsYXkqKgoKQWxyaWdodCwgdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBpcyBgS1ZNX0hZUEVSVmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIGluIG9uIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoYXQgcGFydGljdWxhciBzZXR0aW5nLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgaXQgZW5hYmxlcy4gU28sIG15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSB4ODYgS1ZNIGNvbmZpZ3VyYXRpb25zIGxpdmUsIGFuZCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgYEtWTV9IWVBFUlZgIGlzIGRlZmluZWQgYW5kIGRvY3VtZW50ZWQgdGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoYXQgZmlsZS4gVGhpcyBpcyBteSBnby10byBhcHByb2FjaC4gTG9jYXRpbmcgd2hlcmUgc29tZXRoaW5nIGlzIGRlZmluZWQgd2lsbCBxdWlja2x5IHlpZWxkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0hZUEVSViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4Mz1jb25maWcgS1ZNX1NNTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI0NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgS1ZNX0hZUEVSVmAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBLVk1fSFlQRVJWYCB0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBzeXN0ZW0sIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlIGRvZXMgaXQgc2l0PyBXaGF0IGRvZXMgaXQgcmVseSBvbj8gV2hhdCBvdGhlciBjb21wb25lbnRzIGRvZXMgaXQgbmVlZCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFRoaXMgaXMgYWxsIGFib3V0IG1hcHBpbmcgb3V0IGl0cyByb2xlIGFuZCB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVncmF0aW9uIG9yIGNvbmZsaWN0LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgYmVmb3JlIEkgY2FuIGV2ZW4gc3RhcnQgdG8gdHJvdWJsZXNob290IG9yIG9wdGltaXplIGFueXRoaW5nLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdCAgZmlybXdhcmUgdG8gaW1wbGVtZW50IFVFRkkgc2VjdXJlIGJvb3QuXG4gMTkxOlx0XG4gMTkyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTkzOlx0XG4gMTk0Olx0Y29uZmlnIEtWTV9IWVBFUlZcbiAxOTU6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4gMTk2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiAxOTc6XHRcdGRlZmF1bHQgeVxuIDE5ODpcdFx0aGVscFxuIDE5OTpcdFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgZW11bGF0aW5nIE1pY3Jvc29mdCBIeXBlci1WLiAgVGhpcyBhbGxvd3MgS1ZNXG4gMjAwOlx0XHQgIHRvIGV4cG9zZSBhIHN1YnNldCBvZiB0aGUgcGFyYXZpcnR1YWxpemVkIGludGVyZmFjZXMgZGVmaW5lZCBpbiB0aGVcbiAyMDE6XHRcdCAgSHlwZXItViBIeXBlcnZpc29yIFRvcC1MZXZlbCBGdW5jdGlvbmFsIFNwZWNpZmljYXRpb24gKFRMRlMpOlxuIDIwMjpcdFx0ICBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy92aXJ0dWFsaXphdGlvbi9oeXBlci12LW9uLXdpbmRvd3MvcmVmZXJlbmNlL3RsZnNcbiAyMDM6XHRcdCAgVGhlc2UgaW50ZXJmYWNlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBjb3JyZWN0IGFuZCBwZXJmb3JtYW50IGZ1bmN0aW9uaW5nXG4gMjA0Olx0XHQgIG9mIFdpbmRvd3MgYW5kIEh5cGVyLVYgZ3Vlc3RzIG9uIEtWTS5cbiAyMDU6XHRcbiAyMDY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7WVwmIzM0Oy5cbiAyMDc6XHRcbiAyMDg6XHRjb25maWcgS1ZNX1hFTlxuIDIwOTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzU1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNLUh5cGVyViBUaW1lciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBjaGFpbi4gVGhpcyBgS1ZNX1g4NmAgZmVhdHVyZSwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyByZWxhdGVkIHRvIHg4NiB2aXJ0dWFsaXphdGlvbiwgaGluZ2VzIG9uIGBLVk1gIGl0c2VsZi4gVGhlcmVmb3JlLCB0byBlbnN1cmUgZXZlcnl0aGluZyBmdW5jdGlvbnMgYXMgaW50ZW5kZWQsIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYm90aCBgS1ZNYCBhbmQgYEtWTV9IWVBFUlZgIGVuYWJsZWQuIFRoYXQgc2VlbXMgbG9naWNhbC4KCk5vdywgZGlnZ2luZyBkZWVwZXIsIEkgc2VlIGEgcGF0dGVybiBpbiBzb21lIGZ1bmN0aW9uIHJlbGF0aW9uc2hpcHMuIFRoZSBgc3luaWNfZGVsaXZlcl9tc2dgIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcsIGJ1dCBub3QgdW51c3VhbC4gVGhlbiwgbG9va2luZyBhdCBpdHMgY2FsbGVyLCBgc3RpbWVyX3NlbmRfbXNnYCwgSSBzZWUgaXQmIzM5O3MgYWxzbyBzdGF0aWMuIEFscmlnaHQuIERpZ2dpbmcgZGVlcGVyIGFnYWluLCBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBjYWxsaW5nIGBzdGltZXJfc2VuZF9tc2dgLCBgc3RpbWVyX2V4cGlyYXRpb25gLCBpcyBhbHNvIHN0YXRpYy4gT2theS4gTm90ZWQuCgpIb3dldmVyLCB0aGUgZmluYWwgY2FsbGVyIGluIHRoYXQgcGF0aCwgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgLCBpcyAqZXhwb3J0ZWQqLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgc2NvcGUuIEFoLCBub3cgdGhpcyBpcyB0aGUgaW50ZXJlc3Rpbmcgb25lLiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGF0IG1ha2VzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaW50ZXJuYWwgYW5kIGV4dGVybmFsIGNvZGUuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBpbnRlcmFjdGlvbiBpcyBtYWRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYz04NjY9c3RhdGljIHZvaWQgc3RpbWVyX2V4cGlyYXRpb24oc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04ODMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODg0OnZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODg1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg9MjYyPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHZfaW52dHNjX3N1cHByZXNzZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODQtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6Mjg1OnZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5oLTI4Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBFbnRyeSBQb2ludHMgZm9yIEh5cGVyLVYgVGltZXIgYW5kIFN5bklDIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBhcyBhIGtleSBlbnRyeSBwb2ludCBmb3IgdGhlIEh5cGVyLVYgdGltZXIgaGFuZGxpbmcuIFRoYXQgZmVlbHMgcmlnaHQsIGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBhcmUgdGhlcmUgYW55ICpvdGhlciogZW50cnkgcG9pbnRzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IG90aGVyIHBvdGVudGlhbCB3YXlzIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGltZXJzIG9yIHRoZSBTeW5JQyBjb3VsZCBiZSB0cmlnZ2VyZWQgb3IgaGFuZGxlZC4KCkhtbSwgd2FpdCwgSSB0aG91Z2h0IGBzeW5pY19kZWxpdmVyX21zZ2AgaGFkIGEgY29ubmVjdGlvbiB0aHJvdWdoIGBrdm1faHZfc3luaWNfc2VuZF9lb2lgLCBidXQgbm93IEkmIzM5O20gdGhpbmtpbmcgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIERpZCBJIG1ha2UgYSBtaXN0YWtlPyBMZXQgbWUgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgd2l0aCBgZ3JlcGAuIE9rYXksIHNvIGEgcXVpY2sgYGdyZXBgIGNvbmZpcm1zIGBzeW5pY19kZWxpdmVyX21zZ2AgKmlzKiBhY3R1YWxseSBvbmx5IGNhbGxlZCBmcm9tIGBzdGltZXJfc2VuZF9tc2dgLiBSaWdodCwgbGV0JiMzOTtzIGRvdWJsZSBjaGVjayB0aGF0LCBhbmQgbWFrZSBzdXJlIHRoYXQmIzM5O3MgdGhlIG9ubHkgY2FsbCBsb2NhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnkgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5bmljX2RlbGl2ZXJfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzY4PXN0YXRpYyBpbnQgc3RpbWVyX2dldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCAqcGNvdW50KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Nzc0OnN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzc1LVx0XHRcdCAgICAgc3RydWN0IGh2X21lc3NhZ2UgKnNyY19tc2csIGJvb2wgbm9fcmV0cnkpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTgzMz1zdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cdHBheWxvYWQtXHUwMDNlZGVsaXZlcnlfdGltZSA9IGdldF90aW1lX3JlZl9jb3VudGVyKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NDg6XHRyZXR1cm4gc3luaWNfZGVsaXZlcl9tc2codG9faHZfc3luaWModmNwdSksXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVx0XHRcdFx0IHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHgsIG1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGltaW5nIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSB0aW1pbmcgbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgcmVsYXRlZCB0byBgc3RpbWVyX3NlbmRfbXNnYC4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY29yZSBmdW5jdGlvbiBoZXJlLiBMb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoLCBpdCBhcHBlYXJzIHRoYXQgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHRoaXMgdGltaW5nIGxvZ2ljLiBOb3csIGEgcmVkIGZsYWcganVzdCB3ZW50IHVwIOKAkyBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AgaXMgY2FsbGVkIGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgLiBUaGF0JiMzOTtzIGEgKnZlcnkqIGhvdCBwYXRoLCBtZWFuaW5nIGFueSBpbmVmZmljaWVuY3kgaGVyZSB3aWxsIGhhdmUgYSBodWdlIHBlcmZvcm1hbmNlIGltcGFjdC4gV2UgbmVlZCB0byBiZSBjYXJlZnVsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnJlcXVlbmN5IG9mIHRoaXMgY2hlY2sgaXMgcmlnaHQuCgpJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIG90aGVyIHBvdGVudGlhbCB0cmlnZ2Vycy4gSSBuZWVkIHRvIGZpbmQgYWxsIHRoZSB3YXlzIGBLVk1fUkVRX0hWX1NUSU1FUmAgZ2V0cyBzZXQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlIGFuZCBpZGVudGlmeSBvdGhlciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgcmVxdWVzdCBmbGFnIGlzIGJlaW5nIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1JFUV9IVl9TVElNRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYz01OTc9c3RhdGljIHZvaWQgc3RpbWVyX21hcmtfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTYwMi1cdHNldF9iaXQoc3RpbWVyLVx1MDAzZWluZGV4LCB2Y3B1LVx1MDAzZWFyY2guaHlwZXJ2LVx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NjAzOlx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX0hWX1NUSU1FUiwgdmNwdSk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjA0LVx0aWYgKHZjcHVfa2ljaylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODA1MT1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MTk0LVx0XHQvKlxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxOTU6XHRcdCAqIEtWTV9SRVFfSFZfU1RJTUVSIGhhcyB0byBiZSBwcm9jZXNzZWQgYWZ0ZXJcbmFyY2gveDg2L2t2bS94ODYuYy04MTk2LVx0XHQgKiBLVk1fUkVRX0NMT0NLX1VQREFURSwgYmVjYXVzZSBIeXBlci1WIFN5bklDIHRpbWVyc1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MTk4LVx0XHQgKi9cbmFyY2gveDg2L2t2bS94ODYuYzo4MTk5Olx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9IVl9TVElNRVIsIHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyMDAtXHRcdFx0a3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyh2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHN0aW1lcl9tYXJrX3BlbmRpbmdgIENhbGxlcnMqKgoKT2theSwgc28gYHN0aW1lcl9tYXJrX3BlbmRpbmdgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHNldHMgdGhlICYjMzQ7cGVuZGluZyYjMzQ7IGZsYWcuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBteSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgc3RpbWVyX21hcmtfcGVuZGluZ2AuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCAqd2hlcmUqIHRoaXMgZmxhZyBpcyBzZXQgaXMgYWJzb2x1dGVseSBjcnVjaWFsLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSB0aW1lciBpcyBjb25zaWRlcmVkIHBlbmRpbmcuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGxvZ2ljIHRoYXQgdHJpZ2dlcnMgdGhpcyBzdGF0ZSBjaGFuZ2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHRpbWVyIGV4cGlyeSwgdXNlciBpbnRlcmFjdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSB0aG9yb3VnaCBjYWxsIGdyYXBoIGFuYWx5c2lzIHdpbGwgcmV2ZWFsIHRoZSBjb250ZXh0cyB0aGF0IGluZmx1ZW5jZSB0aW1lciBiZWhhdmlvci4gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDtwZW5kaW5nJiMzNDsgc3RhdGUgaXMgY3JpdGljYWwgdG8gdHJvdWJsZXNob290aW5nIHRpbWluZyBpc3N1ZXMgYW5kIHBvdGVudGlhbGx5IG9wdGltaXppbmcgdGltZXIgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBjYWxsZXIgYW5hbHlzaXMgd2l0aCB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RpbWVyX21hcmtfcGVuZGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jLTY0LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjY1OnN0YXRpYyB2b2lkIHN0aW1lcl9tYXJrX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTY2LVx0XHRcdFx0Ym9vbCB2Y3B1X2tpY2spO1xuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0yMjU9c3RhdGljIHZvaWQga3ZtX2h2X25vdGlmeV9hY2tlZF9zaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHNpbnQpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI0MC1cdFx0ICAgIHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHggPT0gc2ludClcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyNDE6XHRcdFx0c3RpbWVyX21hcmtfcGVuZGluZyhzdGltZXIsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNDItXHR9XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTU3OD1zdGF0aWMgdTY0IGdldF90aW1lX3JlZl9jb3VudGVyKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNTk2LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjU5NzpzdGF0aWMgdm9pZCBzdGltZXJfbWFya19wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcixcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy01OTgtXHRcdFx0XHRib29sIHZjcHVfa2ljaylcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NjIxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBzdGltZXJfdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy02MjctXHRcdFx0XHQgICAgIHN0aW1lci1cdTAwM2VpbmRleCk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NjI4Olx0c3RpbWVyX21hcmtfcGVuZGluZyhzdGltZXIsIHRydWUpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTYyOS1cbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NjUwPXN0YXRpYyBpbnQgc3RpbWVyX3N0YXJ0KHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjg4LVx0XHQgKi9cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo2ODk6XHRcdHN0aW1lcl9tYXJrX3BlbmRpbmcoc3RpbWVyLCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjkwLVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzAzPXN0YXRpYyBpbnQgc3RpbWVyX3NldF9jb25maWcoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCB1NjQgY29uZmlnLFxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03MjktXHRpZiAoc3RpbWVyLVx1MDAzZWNvbmZpZy5lbmFibGUpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NzMwOlx0XHRzdGltZXJfbWFya19wZW5kaW5nKHN0aW1lciwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTczMS1cbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzM1PXN0YXRpYyBpbnQgc3RpbWVyX3NldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCBjb3VudCxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzU2LVx0aWYgKHN0aW1lci1cdTAwM2Vjb25maWcuZW5hYmxlKVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjc1NzpcdFx0c3RpbWVyX21hcmtfcGVuZGluZyhzdGltZXIsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlcnJ1cHQgVHJpZ2dlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlc2UgZnVuY3Rpb25zIOKAkyBga3ZtX2h2X25vdGlmeV9hY2tlZF9zaW50YCwgYHN0aW1lcl90aW1lcl9jYWxsYmFja2AsIGBzdGltZXJfc3RhcnRgLCBgc3RpbWVyX3NldF9jb25maWdgLCBhbmQgYHN0aW1lcl9zZXRfY291bnRgIOKAkyBzZWVtIHRvIGJlIHRoZSBwb3RlbnRpYWwgY3VscHJpdHMgZm9yIHRyaWdnZXJpbmcgdGhpcyBpbnRlcnJ1cHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwYXRoIG9mIGV4ZWN1dGlvbiBoZXJlLgoKU3BlY2lmaWNhbGx5LCBgc3RpbWVyX3NldF9jb25maWdgIGFuZCBgc3RpbWVyX3NldF9jb3VudGAgYXJlIGNhbGxlZCBpbiByZXNwb25zZSB0byB0aGUgZ3Vlc3Qgd3JpdGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBNU1JzLCB3aGljaCBpbW1lZGlhdGVseSBkcmF3cyBteSBhdHRlbnRpb24uIFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIGFyZWEgdG8gZm9jdXMgb24gZm9yIGNvbnRyb2wuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHN0aW1lcl9zZXRfY29uZmlnYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUsIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0aW1lcl9zZXRfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NjUwPXN0YXRpYyBpbnQgc3RpbWVyX3N0YXJ0KHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzAyLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjcwMzpzdGF0aWMgaW50IHN0aW1lcl9zZXRfY29uZmlnKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lciwgdTY0IGNvbmZpZyxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03MDQtXHRcdFx0ICAgICBib29sIGhvc3QpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTcxOS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo3MjA6XHR0cmFjZV9rdm1faHZfc3RpbWVyX3NldF9jb25maWcoaHZfc3RpbWVyX3RvX3ZjcHUoc3RpbWVyKS1cdTAwM2V2Y3B1X2lkLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTcyMS1cdFx0XHRcdCAgICAgICBzdGltZXItXHUwMDNlaW5kZXgsIGNvbmZpZywgaG9zdCk7XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTE1NDM9c3RhdGljIGludCBrdm1faHZfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhLCBib29sIGhvc3QpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE2MjgtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTYyOTpcdFx0cmV0dXJuIHN0aW1lcl9zZXRfY29uZmlnKHRvX2h2X3N0aW1lcih2Y3B1LCB0aW1lcl9pbmRleCksXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTYzMC1cdFx0XHRcdFx0IGRhdGEsIGhvc3QpO1xuLS1cbmFyY2gveDg2L2t2bS90cmFjZS5oPTEyNzk9VFJBQ0VfRVZFTlQoa3ZtX2h2X3N5bmljX3NldF9tc3IsXG4tLVxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMTMwMS0vKlxuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTMwMjogKiBUcmFjZXBvaW50IGZvciBzdGltZXJfc2V0X2NvbmZpZy5cbmFyY2gveDg2L2t2bS90cmFjZS5oLTEzMDMtICovXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaDoxMzA0OlRSQUNFX0VWRU5UKGt2bV9odl9zdGltZXJfc2V0X2NvbmZpZyxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTEzMDUtXHRUUF9QUk9UTyhpbnQgdmNwdV9pZCwgaW50IHRpbWVyX2luZGV4LCB1NjQgY29uZmlnLCBib29sIGhvc3QpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgYGt2bV9odl9zZXRfbXNyYCBmdW5jdGlvbiwgdGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIGZvY3VzIG9uLiBJdCBnZXRzIGNhbGxlZCB3aGVuIGEgZ3Vlc3QgVk0gdXNlcyBgV1JNU1JgIHRvIHdyaXRlIHRvIEh5cGVyLVYgTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXJzLCBzbywgeWVzLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29kZSBwYXRoIGZyb20gd2l0aGluIHRoZSBndWVzdC4gVGhhdCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYWJzb2x1dGVseS4gVGhlIGd1ZXN0LWNvbnRyb2xsZWQgaW5wdXRzIGFyZSB0aGUga2V5LgoKTGV0JiMzOTtzIGRyaWxsIGRvd24gYSBiaXQgZGVlcGVyLiBTaW5jZSBJJiMzOTttIGZ1enppbmcsIG15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIGBrdm1faHZfc2V0X21zcmAgYW5kIGFsc28gYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIHRvIHNlZSBob3cgdGhvc2Ugd29yayB3aXRoIHRoZSBNU1Igc2V0dGluZy4KCk5leHQgc3RlcCwgY2hlY2sgaWYgYGt2bV9odl9zZXRfbXNyYCBpcyBleHBvcnRlZCBvciBpZiBpdCYjMzk7cyBzdGF0aWMuIFRoYXQgd2lsbCBpbXBhY3QgbXkgYXBwcm9hY2ggdG8gaW5zdHJ1bWVudGF0aW9uLiBHb3R0YSBkZXRlcm1pbmUgYWNjZXNzIG1ldGhvZHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBrdm1faHZfc2V0X21zciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jPTEzODc9dm9pZCBrdm1faHZfeHNhdmVzX3hzYXZlY19tYXliZV93YXJuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTM5OS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNDAwOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3JfcHcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNDAxLVx0XHRcdCAgICAgYm9vbCBob3N0KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNTM0PXN0YXRpYyB1NjQgY3VycmVudF90YXNrX3J1bnRpbWVfMTAwbnModm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTU0Mi1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNTQzOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE1NDQte1xuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNzExPXN0YXRpYyBpbnQga3ZtX2h2X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhLFxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzc1LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3NzY6aW50IGt2bV9odl9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhLCBib29sIGhvc3QpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc3Ny17XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5oPTE5Mz1zdGF0aWMgaW5saW5lIHUzMiBrdm1faHZfZ2V0X3ZwaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0xOTktXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6MjAwOmludCBrdm1faHZfc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yMDEtaW50IGt2bV9odl9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCAqcGRhdGEsIGJvb2wgaG9zdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTI1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBNU1IgU2V0dGluZyBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV9odl9zZXRfbXNyX2NvbW1vbmAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGguIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGtub3cgaWYgYGt2bV9odl9zZXRfbXNyYCBjYWxscyBpdC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBLbm93aW5nIHRoZSBjYWxsZXItY2FsbGVlIHJlbGF0aW9uc2hpcHMgaXMgZnVuZGFtZW50YWwgdG8gZ3Jhc3BpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHJvbGUgaW4gdGhlIGxhcmdlciBLVk0gaHlwZXJ2aXNvciBjb250ZXh0LCBhbmQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9odl9zZXRfbXNyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYz0xMzg3PXZvaWQga3ZtX2h2X3hzYXZlc194c2F2ZWNfbWF5YmVfd2FybihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTEzOTktXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTQwMDpzdGF0aWMgaW50IGt2bV9odl9zZXRfbXNyX3B3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTQwMS1cdFx0XHQgICAgIGJvb2wgaG9zdClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTUzND1zdGF0aWMgdTY0IGN1cnJlbnRfdGFza19ydW50aW1lXzEwMG5zKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE1NDItXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTU0MzpzdGF0aWMgaW50IGt2bV9odl9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsIGJvb2wgaG9zdClcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNTQ0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTcxMT1zdGF0aWMgaW50IGt2bV9odl9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc3NS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzc2OmludCBrdm1faHZfc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3Nzcte1xuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzg5LVx0XHRtdXRleF9sb2NrKFx1MDAyNmh2LVx1MDAzZWh2X2xvY2spO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3OTA6XHRcdHIgPSBrdm1faHZfc2V0X21zcl9wdyh2Y3B1LCBtc3IsIGRhdGEsIGhvc3QpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3OTEtXHRcdG11dGV4X3VubG9jayhcdTAwMjZodi1cdTAwM2Vodl9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc5My1cdH0gZWxzZVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3OTQ6XHRcdHJldHVybiBrdm1faHZfc2V0X21zcih2Y3B1LCBtc3IsIGRhdGEsIGhvc3QpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3OTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgwMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIeXBlci1WIE1TUiBTZXR0aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBrdm1faHZfc2V0X21zcl9jb21tb25gICpkb2VzKiBpbmRlZWQgY2FsbCBga3ZtX2h2X3NldF9tc3JgLiBUaGF0JiMzOTtzIGEgc29saWQgcG9pbnQgdG8gZm9jdXMgb247IGBrdm1faHZfc2V0X21zcl9jb21tb25gIGxvb2tzIGxpa2UgYSBrZXkgc3ltYm9sIHRvIGRpdmUgaW50by4gR2l2ZW4gaXRzIHJvbGUgaW4gc2V0dGluZyBNU1JzLCBpdCBwcm9iYWJseSBoYXMgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMuIEkgYWxzbyB3YW50IHRvIGtlZXAgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIGluIG1pbmQg4oCTIGl0JiMzOTtzIGFub3RoZXIgYXJlYSB3aGVyZSBIeXBlci1WIGludGVyYWN0aW9ucyBvY2N1ci4KCk5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSB0aGUgY2FsbGVycyBvZiBga3ZtX2h2X3NldF9tc3JfY29tbW9uYC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBpbGx1bWluYXRlIGl0cyBicm9hZGVyIGNvbnRleHQgYW5kIHJldmVhbCB3aGF0IHRyaWdnZXJzIHRoZXNlIE1TUiBzZXR0aW5ncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsZ3JhcGggcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2h2X3NldF9tc3JfY29tbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTcxMT1zdGF0aWMgaW50IGt2bV9odl9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc3NS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzc2OmludCBrdm1faHZfc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3Nzcte1xuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuaD0xOTM9c3RhdGljIGlubGluZSB1MzIga3ZtX2h2X2dldF92cGluZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMTk5LVxuYXJjaC94ODYva3ZtL2h5cGVydi5oOjIwMDppbnQga3ZtX2h2X3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsIGJvb2wgaG9zdCk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMjAxLWludCBrdm1faHZfZ2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhLCBib29sIGhvc3QpO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3ODEtXHRjYXNlIEhWX1g2NF9NU1JfVFNDX0lOVkFSSUFOVF9DT05UUk9MOlxuYXJjaC94ODYva3ZtL21zcnMuYzoxNzgyOlx0XHRyZXR1cm4ga3ZtX2h2X3NldF9tc3JfY29tbW9uKHZjcHUsIG1zciwgZGF0YSxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc4My1cdFx0XHRcdFx0ICAgICBtc3JfaW5mby1cdTAwM2Vob3N0X2luaXRpYXRlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEh5cGVyLVYgTVNSIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBga3ZtX3NldF9tc3JfY29tbW9uYCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgY2FsbGVyIGhlcmUuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgYGt2bV9odl9zZXRfbXNyX2NvbW1vbmAgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBpbnZlc3RpZ2F0aW9uLgoKTGV0IG1lIHN1bW1hcml6ZSB0aGUgaW5pdGlhbCBmaW5kaW5nczogaXQgbG9va3MgbGlrZSB0aGlzIGFyZWEgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBhbmQgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIGBrdm1faHZfc2V0X21zcl9jb21tb25gIGFuZCBhbHNvIG9uIHRoZSBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AgZnVuY3Rpb24uIFRoZSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgYXJlIGBLVk1gIGFuZCBgS1ZNX0hZUEVSVmAuCgpOb3csIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSXQgc2VlbXMgYEtWTV9YODZgIGV4aXN0cyBhcyBhIGBkZWZfdHJpc3RhdGVgLCBidXQgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IHNlbGVjdGFibGUgYnkgdGhlIHVzZXIsIGRlcGVuZGluZyBpbnN0ZWFkIG9uIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYC4gSSYjMzk7bGwgd2FudCB0byBjaGVjayBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZvciB0aGUgc3BlY2lmaWMgaW1wbGljYXRpb25zIG9mIGBLVk1fWDg2YCBhbmQgaG93IGl0cyBkZXBlbmRhbmNpZXMgbWlnaHQgaW1wYWN0IG91ciBmdXp6aW5nIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1g4NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMTEKCQkJCQkJCW91dHB1dDogMTE1CgkJCQkJCQl0aG91Z2h0czogMjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh5cGVyLVYgU3ludGhldGljIFRpbWVyIFBhdGNoKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggcmVsYXRlZCB0byBIeXBlci1WIHN5bnRoZXRpYyB0aW1lcnMuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBLVk0sIEkgc2hvdWxkIHByb2JhYmx5IGVuc3VyZSB0aGF0IHdlIGhhdmUgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBlbmFibGVkLCBhbHRob3VnaCBzeXprYWxsZXIgdXN1YWxseSBoYW5kbGVzIHRob3NlLiBGb3IgdGhpcyBpbml0aWFsIHNldHVwLCBJJiMzOTtsbCBsaXN0IGBLVk1gIGFuZCBgS1ZNX0hZUEVSVmAgc3BlY2lmaWNhbGx5LCB0byBiZSBzYWZlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiBgc3luaWNfZGVsaXZlcl9tc2dgLiBJIHF1aWNrbHkgc2VlIHRoYXQgYHN0aW1lcl9zZW5kX21zZ2AgY2FsbHMgaXQsIGBzdGltZXJfc2VuZF9tc2dgIGlzIHRyaWdnZXJlZCBieSBgc3RpbWVyX2V4cGlyYXRpb25gLCB3aGljaCwgaW4gdHVybiwgaXMgaW52b2tlZCBieSBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AuIEFuZCBmaW5hbGx5LCBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AgaXMgY2FsbGVkIGJ5IGB2Y3B1X2VudGVyX2d1ZXN0YC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgS1ZNIGd1ZXN0IGV4ZWN1dGlvbiBwYXRoLCBzbyB0aGF0IGNvbmZpcm1zIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuCgpUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIGBzeW5pY19kZWxpdmVyX21zZ2AsIGNsZWFyaW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4YCBiZWZvcmUgc2V0dGluZyBgbXNnX3BlbmRpbmdgLiBUaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBIeXBlci1WIHN5bnRoZXRpYyB0aW1lciBtZXNzYWdlIGRlbGl2ZXJ5IG1lY2hhbmlzbS4gSXQmIzM5O3MgYSBwZXJmZWN0IGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBpdCBhbHRlcnMgYSBjb3JlIG1lc3NhZ2UgaGFuZGxpbmcgcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBmbGFnIHRoaXMgYXMgaGlnaC1wcmlvcml0eSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzIGluIG1lc3NhZ2UgaGFuZGxpbmcuCgpUaW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2h2X3NldF9tc3JfY29tbW9uJiMzNDssCiAgICAmIzM0O2t2bV9odl9wcm9jZXNzX3N0aW1lcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEh5cGVyLVYgc3ludGhldGljIHRpbWVyIG1lc3NhZ2UgZGVsaXZlcnkgbG9naWMgaW4gS1ZNIGJ5IGNsZWFyaW5nIGEgbWVzc2FnZSBmbGFnIGJlZm9yZSBzZXR0aW5nIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBndWVzdCBNU1Igd3JpdGVzIGFuZCB0aW1lciBleHBpcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faHZfc2V0X21zcl9jb21tb24mIzM0OywKICAgICYjMzQ7a3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBzeW50aGV0aWMgdGltZXIgbWVzc2FnZSBkZWxpdmVyeSBsb2dpYyBpbiBLVk0gYnkgY2xlYXJpbmcgYSBtZXNzYWdlIGZsYWcgYmVmb3JlIHNldHRpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgdGhhdCBoYW5kbGVzIGd1ZXN0IE1TUiB3cml0ZXMgYW5kIHRpbWVyIGV4cGlyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluZm9ybWF0aW9uIGxlYWsgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgd3JpdHRlbiB0byBndWVzdCBtZW1vcnkuIFNwZWNpZmljYWxseSwgYGh2X2hkcmAgaXMgYW4gdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZS4gVGhlIGNvZGUgc2V0cyBhIHNpbmdsZSBiaXRmaWVsZCBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxYCwgbGVhdmluZyB0aGUgcmVtYWluaW5nIDcgYml0cyBvZiB0aGUgYG1lc3NhZ2VfZmxhZ3NgIGJ5dGUgdW5pbml0aWFsaXplZC4gVGhpcyBieXRlIGlzIHRoZW4gd3JpdHRlbiB0byBndWVzdCBtZW1vcnkgdmlhIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKClgLCB3aGljaCBpbnRlcm5hbGx5IHVzZXMgYF9fY29weV90b191c2VyKClgIHRvIHdyaXRlIHRvIHRoZSB1c2Vyc3BhY2UtbWFwcGVkIGd1ZXN0IG1lbW9yeS4gVGhpcyBsZWFrcyA3IGJpdHMgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHRoaXMgZXhhY3QgY2xhc3Mgb2YgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2JlNjA5NzE5YmE1ODlmNGFmYTNlNTc2ZGVmNzVjMjIxNjdlYjBiMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE5OjA3OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2h5cGVydi5jIGIvYXJjaC94ODYva3ZtL2h5cGVydi5jCmluZGV4IDYwNDY1MWNiMjczOTkuLjhkMjY2OWQ4ZWYzNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9oeXBlcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMKQEAgLTgwMiw3ICYjNDM7ODAyLDkgQEAgc3RhdGljIGludCBzeW5pY19kZWxpdmVyX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljLCB1MzIgc2ludCwKIAkJaWYgKG5vX3JldHJ5KQogCQkJcmV0dXJuIDA7CiAKJiM0MzsJCWh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwOwogCQlodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7CiYjNDM7CiAJCXIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHZjcHUsIG1zZ19wYWdlX2dmbiwKIAkJCQkJICAgICAgJmFtcDtodl9oZHIubWVzc2FnZV9mbGFncywKIAkJCQkJICAgICAgbXNnX29mZiAmIzQzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlIGNoYW5nZSwgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJpZW5jZWQga2VybmVsIGRldmVsb3BlcjoKCioqSW52ZXN0aWdhdGluZyBhIEh5cGVyLVYgS1ZNIFBhdGNoKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgcGF0Y2ggaW4gYGFyY2gveDg2L2t2bS9oeXBlcnYuY2AuIFJpZ2h0IGF3YXksIHRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBLVk0gYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEh5cGVyLVYgZmVhdHVyZXMgb24geDg2IGhhcmR3YXJlLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIHRoYXQgYXJlIGJlaW5nIGV4YW1pbmVkIGFyZSBmcm9tIHRoZSBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3NgIHN0cnVjdHVyZS4gIFRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW5zZXJ0aW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4ID0gMDtgICpiZWZvcmUqIHNldHRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMTtgLiBUaGF0IHN1Z2dlc3RzIHNvbWUgdGltaW5nIGRlcGVuZGVuY3kgb3IgYW4gaW5pdGlhbGl6YXRpb24gaXNzdWUuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgaG9zdCBpbnRlcmFjdHMgd2l0aCB0aGUgZ3Vlc3QmIzM5O3MgSHlwZXItViBjb21wb25lbnRzIGFuZCBhIG1lc3NhZ2Ugc2lnbmFsaW5nIG1lY2hhbmlzbS4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoeSAqdGhpcyogc3BlY2lmaWMgb3JkZXI/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/ICBJcyBgYXN1OGAgc3VwcG9zZWQgdG8gYmUgemVyb2VkIG91dCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzPyBJcyB0aGlzIGEgcmFjZSBjb25kaXRpb24gZml4LCBhIGJ1ZyBpbiB0aGUgb3JpZ2luYWwgZGVzaWduLCBvciBhbiBvcHRpbWl6YXRpb24/ICBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIHRoaXMgY29kZSBpcyBpbiwgdGhlIGRhdGEgaXQmIzM5O3MgbWFuaXB1bGF0aW5nLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBIeXBlci1WIEtWTSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgdGhlIGBhc3U4YCBmaWVsZCBzaWduaWZpZXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIGZpeCwgb3IgYSBjaGFuZ2UgaW4gdGhlIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeW5pY19kZWxpdmVyX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzY4PXN0YXRpYyBpbnQgc3RpbWVyX2dldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCAqcGNvdW50KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Nzc0OnN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzc1LVx0XHRcdCAgICAgc3RydWN0IGh2X21lc3NhZ2UgKnNyY19tc2csIGJvb2wgbm9fcmV0cnkpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTgzMz1zdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cdHBheWxvYWQtXHUwMDNlZGVsaXZlcnlfdGltZSA9IGdldF90aW1lX3JlZl9jb3VudGVyKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NDg6XHRyZXR1cm4gc3luaWNfZGVsaXZlcl9tc2codG9faHZfc3luaWModmNwdSksXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVx0XHRcdFx0IHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHgsIG1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHN5bmljX2RlbGl2ZXJfbXNnYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYHN5bmljX2RlbGl2ZXJfbXNnYCBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyBpbiBgYXJjaC94ODYva3ZtL2h5cGVydi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBIeXBlci1WIGludGVncmF0aW9uIG9uIHg4Niwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIGNvbnRleHQuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIG1lY2hhbmlzbSBmb3IgZGVsaXZlcmluZyBtZXNzYWdlcyBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgdmlhIHRoZSBTeW5JQyBpbnRlcmZhY2UuIEdpdmVuIHRoZSBmaWxlbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlIHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2UgYW5kIHJlc3BvbnNpdmVuZXNzIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVzc2FnZXMgYXJlIHN0cnVjdHVyZWQsIGhvdyB0aGV5JiMzOTtyZSBxdWV1ZWQsIHdoZXJlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgYXJlIGxvY2F0ZWQuIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCwgY3JpdGljYWwgc3R1ZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzc0Olx0c3RhdGljIGludCBzeW5pY19kZWxpdmVyX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljLCB1MzIgc2ludCxcbiA3NzU6XHRcdFx0XHQgICAgIHN0cnVjdCBodl9tZXNzYWdlICpzcmNfbXNnLCBib29sIG5vX3JldHJ5KVxuIDc3NjpcdHtcbiA3Nzc6XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGh2X3N5bmljX3RvX3ZjcHUoc3luaWMpO1xuIDc3ODpcdFx0aW50IG1zZ19vZmYgPSBvZmZzZXRvZihzdHJ1Y3QgaHZfbWVzc2FnZV9wYWdlLCBzaW50X21lc3NhZ2Vbc2ludF0pO1xuIDc3OTpcdFx0Z2ZuX3QgbXNnX3BhZ2VfZ2ZuO1xuIDc4MDpcdFx0c3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyIGh2X2hkcjtcbiA3ODE6XHRcdGludCByO1xuIDc4MjpcdFxuIDc4MzpcdFx0aWYgKCEoc3luaWMtXHUwMDNlbXNnX3BhZ2UgXHUwMDI2IEhWX1NZTklDX1NJTVBfRU5BQkxFKSlcbiA3ODQ6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gNzg1Olx0XG4gNzg2Olx0XHRtc2dfcGFnZV9nZm4gPSBzeW5pYy1cdTAwM2Vtc2dfcGFnZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiA3ODc6XHRcbiA3ODg6XHRcdC8qXG4gNzg5Olx0XHQgKiBTdHJpY3RseSBmb2xsb3dpbmcgdGhlIHNwZWMtbWFuZGF0ZWQgb3JkZXJpbmcgd291bGQgYXNzdW1lIHNldHRpbmdcbiA3OTA6XHRcdCAqIC5tc2dfcGVuZGluZyBiZWZvcmUgY2hlY2tpbmcgLm1lc3NhZ2VfdHlwZS4gIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb25cbiA3OTE6XHRcdCAqIGlzIG9ubHkgY2FsbGVkIGluIHZjcHUgY29udGV4dCBzbyB0aGUgZW50aXJlIHVwZGF0ZSBpcyBhdG9taWMgZnJvbVxuIDc5MjpcdFx0ICogZ3Vlc3QgUE9WIGFuZCB0aHVzIHRoZSBleGFjdCBvcmRlciBoZXJlIGRvZXNuJiMzOTt0IG1hdHRlci5cbiA3OTM6XHRcdCAqL1xuIDc5NDpcdFx0ciA9IGt2bV92Y3B1X3JlYWRfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sIFx1MDAyNmh2X2hkci5tZXNzYWdlX3R5cGUsXG4gNzk1Olx0XHRcdFx0XHQgICAgIG1zZ19vZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGh2X21lc3NhZ2UsXG4gNzk2Olx0XHRcdFx0XHRcdFx0XHRoZWFkZXIubWVzc2FnZV90eXBlKSxcbiA3OTc6XHRcdFx0XHRcdCAgICAgc2l6ZW9mKGh2X2hkci5tZXNzYWdlX3R5cGUpKTtcbiA3OTg6XHRcdGlmIChyIFx1MDAzYyAwKVxuIDc5OTpcdFx0XHRyZXR1cm4gcjtcbiA4MDA6XHRcbiA4MDE6XHRcdGlmIChodl9oZHIubWVzc2FnZV90eXBlICE9IEhWTVNHX05PTkUpIHtcbiA4MDI6XHRcdFx0aWYgKG5vX3JldHJ5KVxuIDgwMzpcdFx0XHRcdHJldHVybiAwO1xuIDgwNDpcdFxuIDgwNTpcdFx0XHRodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4ID0gMDtcbiA4MDY6XHRcdFx0aHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxO1xuIDgwNzpcdFxuIDgwODpcdFx0XHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sXG4gODA5Olx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmh2X2hkci5tZXNzYWdlX2ZsYWdzLFxuIDgxMDpcdFx0XHRcdFx0XHQgICAgICBtc2dfb2ZmICYjNDM7XG4gODExOlx0XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodl9tZXNzYWdlLFxuIDgxMjpcdFx0XHRcdFx0XHRcdCAgICAgICBoZWFkZXIubWVzc2FnZV9mbGFncyksXG4gODEzOlx0XHRcdFx0XHRcdCAgICAgIHNpemVvZihodl9oZHIubWVzc2FnZV9mbGFncykpO1xuIDgxNDpcdFx0XHRpZiAociBcdTAwM2MgMClcbiA4MTU6XHRcdFx0XHRyZXR1cm4gcjtcbiA4MTY6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gODE3Olx0XHR9XG4gODE4Olx0XG4gODE5Olx0XHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sIHNyY19tc2csIG1zZ19vZmYsXG4gODIwOlx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3JjX21zZy1cdTAwM2VoZWFkZXIpICYjNDM7XG4gODIxOlx0XHRcdFx0XHQgICAgICBzcmNfbXNnLVx1MDAzZWhlYWRlci5wYXlsb2FkX3NpemUpO1xuIDgyMjpcdFx0aWYgKHIgXHUwMDNjIDApXG4gODIzOlx0XHRcdHJldHVybiByO1xuIDgyNDpcdFxuIDgyNTpcdFx0ciA9IHN5bmljX3NldF9pcnEoc3luaWMsIHNpbnQpO1xuIDgyNjpcdFx0aWYgKHIgXHUwMDNjIDApXG4gODI3Olx0XHRcdHJldHVybiByO1xuIDgyODpcdFx0aWYgKHIgPT0gMClcbiA4Mjk6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODMwOlx0XHRyZXR1cm4gMDtcbiA4MzE6XHR9XG4gODMyOlx0XG4gODMzOlx0c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxuIDgzNDpcdHtcbiA4MzU6XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGh2X3N0aW1lcl90b192Y3B1KHN0aW1lcik7XG4gODM2Olx0XHRzdHJ1Y3QgaHZfbWVzc2FnZSAqbXNnID0gXHUwMDI2c3RpbWVyLVx1MDAzZW1zZztcbiA4Mzc6XHRcdHN0cnVjdCBodl90aW1lcl9tZXNzYWdlX3BheWxvYWQgKnBheWxvYWQgPVxuIDgzODpcdFx0XHRcdChzdHJ1Y3QgaHZfdGltZXJfbWVzc2FnZV9wYXlsb2FkICopXHUwMDI2bXNnLVx1MDAzZXUucGF5bG9hZDtcbiA4Mzk6XHRcbiA4NDA6XHRcdC8qXG4gODQxOlx0XHQgKiBUbyBhdm9pZCBwaWxpbmcgdXAgcGVyaW9kaWMgdGlja3MsIGRvbiYjMzk7dCByZXRyeSBtZXNzYWdlXG4gODQyOlx0XHQgKiBkZWxpdmVyeSBmb3IgdGhlbSAod2l0aGluIFwmIzM0O2xhenlcJiMzNDsgbG9zdCB0aWNrcyBwb2xpY3kpLlxuIDg0MzpcdFx0ICovXG4gODQ0Olx0XHRib29sIG5vX3JldHJ5ID0gc3RpbWVyLVx1MDAzZWNvbmZpZy5wZXJpb2RpYztcbiA4NDU6XHRcbiA4NDY6XHRcdHBheWxvYWQtXHUwMDNlZXhwaXJhdGlvbl90aW1lID0gc3RpbWVyLVx1MDAzZWV4cF90aW1lO1xuIDg0NzpcdFx0cGF5bG9hZC1cdTAwM2VkZWxpdmVyeV90aW1lID0gZ2V0X3RpbWVfcmVmX2NvdW50ZXIodmNwdS1cdTAwM2Vrdm0pO1xuIDg0ODpcdFx0cmV0dXJuIHN5bmljX2RlbGl2ZXJfbXNnKHRvX2h2X3N5bmljKHZjcHUpLFxuIDg0OTpcdFx0XHRcdFx0IHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHgsIG1zZyxcbiA4NTA6XHRcdFx0XHRcdCBub19yZXRyeSk7XG4gODUxOlx0fVxuIDg1MjpcdFxuIDg1MzpcdHN0YXRpYyBpbnQgc3RpbWVyX25vdGlmeV9kaXJlY3Qoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxuIDg1NDpcdHtcbiA4NTU6XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGh2X3N0aW1lcl90b192Y3B1KHN0aW1lcik7XG4gODU2Olx0XHRzdHJ1Y3Qga3ZtX2xhcGljX2lycSBpcnEgPSB7XG4gODU3Olx0XHRcdC5kZWxpdmVyeV9tb2RlID0gQVBJQ19ETV9GSVhFRCxcbiA4NTg6XHRcdFx0LnZlY3RvciA9IHN0aW1lci1cdTAwM2Vjb25maWcuYXBpY192ZWN0b3JcbiA4NTk6XHRcdH07XG4gODYwOlx0XG4gODYxOlx0XHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxuIDg2MjpcdFx0XHRyZXR1cm4gIWt2bV9hcGljX3NldF9pcnEodmNwdSwgXHUwMDI2aXJxLCBOVUxMKTtcbiA4NjM6XHRcdHJldHVybiAwO1xuIDg2NDpcdH1cbiA4NjU6XHRcbiA4NjY6XHRzdGF0aWMgdm9pZCBzdGltZXJfZXhwaXJhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG4gODY3Olx0e1xuIDg2ODpcdFx0aW50IHIsIGRpcmVjdCA9IHN0aW1lci1cdTAwM2Vjb25maWcuZGlyZWN0X21vZGU7XG4gODY5Olx0XG4gODcwOlx0XHRzdGltZXItXHUwMDNlbXNnX3BlbmRpbmcgPSB0cnVlO1xuIDg3MTpcdFx0aWYgKCFkaXJlY3QpXG4gODcyOlx0XHRcdHIgPSBzdGltZXJfc2VuZF9tc2coc3RpbWVyKTtcbiA4NzM6XHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY0NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSHlwZXItViBNZXNzYWdlIEhlYWRlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgc2VlbWluZ2x5IHNtYWxsIGNoYW5nZSwgYWRkaW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4ID0gMDtgIGJlZm9yZSBzZXR0aW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7YC4gVGhhdCBzZWVtcyBiZW5pZ24gb24gdGhlIHN1cmZhY2UsIGJ1dCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBzZWUgYGh2X2hkcmAgaXMgYSBsb2NhbCB2YXJpYWJsZSBvbiB0aGUgc3RhY2ssIGRlZmluZWQgYXMgYSBgc3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgZGlyZWN0bHkgc2V0IHRoZSBgbXNnX3BlbmRpbmdgIGJpdCB3aXRoaW4gYG1lc3NhZ2VfZmxhZ3NgIHdpdGhvdXQgYW55IHByaW9yIGluaXRpYWxpemF0aW9uLiBTaW5jZSBgaHZfaGRyYCBpcyB1bmluaXRpYWxpemVkLCBhbGwgdGhlIG90aGVyIGJpdHMgd2l0aGluIGBtZXNzYWdlX2ZsYWdzYCB3ZXJlIGVzc2VudGlhbGx5IGdhcmJhZ2Ug4oCTIHJhbmRvbSBiaXRzIGZyb20gdGhlIHN0YWNrLgoKVGhlbiwgYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VgIGNvbWVzIGludG8gcGxheS4gSXQgd3JpdGVzIGBzaXplb2YoaHZfaGRyLm1lc3NhZ2VfZmxhZ3MpYCBieXRlcyB0byB0aGUgZ3Vlc3QgcGFnZS4gVGhpcyBpcyB3aGVyZSBpdCBjbGlja3M6ICp1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB3YXMgYmVpbmcgd3JpdHRlbiB0byBndWVzdCBtZW1vcnkhKiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBpbmZvLWxlYWsuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGlzc3VlIHRoYXQgdG9vbHMgbGlrZSBLTVNBTiBhcmUgZGVzaWduZWQgdG8gY2F0Y2gg4oCTIGRldGVjdGluZyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBmbGFnZ2luZyBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2Ugb3IgdGhlIGd1ZXN0LgoKV2FpdCwgZG9lcyBLTVNBTiB0cmFjayB3cml0ZXMgdG8gKmd1ZXN0KiBtZW1vcnk/IFRoYXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24gaGVyZS4gYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VgIGlzIHdyaXRpbmcgdG8gZ3Vlc3QgbWVtb3J5LCBidXQgZ3Vlc3QgbWVtb3J5IGlzIHVsdGltYXRlbHkgbWFuYWdlZCBieSB1c2Vyc3BhY2UgKGxpa2UgUUVNVSkgYW5kIG1hcHBlZCBpbnRvIHRoZSBrZXJuZWwsIG9yIGl0JiMzOTtzIGEgY29weS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgS01TQU4mIzM5O3MgaW5zdHJ1bWVudGF0aW9uIGlzIHRyaWdnZXJlZCBieSB3cml0ZXMgdG8gbWVtb3J5IG1hcHBlZCBmcm9tIHVzZXJzcGFjZSBpbnRvIGtlcm5lbCBzcGFjZSwgb3IgaXMgaXQgb25seSBsb29raW5nIGZvciBkYXRhIGxlYWtzIGZyb20gdGhlIGtlcm5lbCBpdHNlbGY/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZWAgaXMgY292ZXJlZCBieSBLTVNBTi4KCkFscmlnaHQsIEkgbmVlZCB0byBjaGVjayBga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZWAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9Nzc0PXN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTgwNy1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4MDg6XHRcdHIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHZjcHUsIG1zZ19wYWdlX2dmbixcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04MDktXHRcdFx0XHRcdCAgICAgIFx1MDAyNmh2X2hkci5tZXNzYWdlX2ZsYWdzLFxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04MTgtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODE5Olx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UodmNwdSwgbXNnX3BhZ2VfZ2ZuLCBzcmNfbXNnLCBtc2dfb2ZmLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTgyMC1cdFx0XHRcdCAgICAgIHNpemVvZihzcmNfbXNnLVx1MDAzZWhlYWRlcikgJiM0Mztcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU1Njg9c3RhdGljIGlubGluZSB2b2lkIG5lc3RlZF9yZWxlYXNlX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NTg1LVx0LyogRmx1c2ggVk1DUzEyIHRvIGd1ZXN0IG1lbW9yeSAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1NTg2Olx0a3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NTg3LVx0XHRcdFx0ICB2bXgtXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE0NDk9aW50IGt2bV92Y3B1X3JlYWRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHZvaWQgKmRhdGEsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ1MC1cdFx0XHR1bnNpZ25lZCBsb25nIGxlbik7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ1MTppbnQga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgY29uc3Qgdm9pZCAqZGF0YSxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDUyLVx0XHRcdCAgICAgIGludCBvZmZzZXQsIGludCBsZW4pO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MzMyMD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3dyaXRlX2d1ZXN0X3BhZ2UpO1xudmlydC9rdm0va3ZtX21haW4uYy0zMzIxLVxudmlydC9rdm0va3ZtX21haW4uYzozMzIyOmludCBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLFxudmlydC9rdm0va3ZtX21haW4uYy0zMzIzLVx0XHRcdCAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBvZmZzZXQsIGludCBsZW4pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMzI4LX1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MzMyOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzMzAtXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMzUyPWludCBrdm1fdmNwdV93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgY29uc3Qgdm9pZCAqZGF0YSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzNjAtXHR3aGlsZSAoKHNlZyA9IG5leHRfc2VnbWVudChsZW4sIG9mZnNldCkpICE9IDApIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzM2MTpcdFx0cmV0ID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBnZm4sIGRhdGEsIG9mZnNldCwgc2VnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzM2Mi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMzMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gS1ZNIFBhZ2UgV3JpdGUgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IEtWTSBoYW5kbGVzIHdyaXRpbmcgdG8gZ3Vlc3QgcGFnZXMuIE15IGZvY3VzIG5hdHVyYWxseSBnb2VzIHRvIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhcyB0aGUgbmFtZSBpdHNlbGYgaW1wbGllcywgaXQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgZ3Vlc3Qgd2hlbiBtb2RpZnlpbmcgbWVtb3J5LiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBjb21wbGV4aXR5IGhlcmUg4oCTIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlciAoVExCKSBpbnZhbGlkYXRpb25zLCBwb3RlbnRpYWwgVk0gZXhpdHMsIGFuZCBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgZ3Vlc3QgcGFnZSBtb2RpZmljYXRpb24gdGFrZXMgcGxhY2UsIGFuZCBJIGFudGljaXBhdGUgc2VlaW5nIGEgbG90IG9mIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCBhY2Nlc3MgY2hlY2tzLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGl0IG1ha2VzIGRpcmVjdCBjYWxscyB0byBoYXJkd2FyZSBvciBpZiB0aGVyZSBhcmUgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIHByZXNlbnQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGxvdyBsZXZlbCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzIyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMjI6XHRpbnQga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbixcbjMzMjM6XHRcdFx0XHQgICAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxuMzMyNDpcdHtcbjMzMjU6XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pO1xuMzMyNjpcdFxuMzMyNzpcdFx0cmV0dXJuIF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2UodmNwdS1cdTAwM2Vrdm0sIHNsb3QsIGdmbiwgZGF0YSwgb2Zmc2V0LCBsZW4pO1xuMzMyODpcdH1cbjMzMjk6XHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSk7XG4zMzMwOlx0XG4zMzMxOlx0aW50IGt2bV93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgY29uc3Qgdm9pZCAqZGF0YSxcbjMzMzI6XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuMzMzMzpcdHtcbjMzMzQ6XHRcdGdmbl90IGdmbiA9IGdwYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbjMzMzU6XHRcdGludCBzZWc7XG4zMzM2Olx0XHRpbnQgb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZ3BhKTtcbjMzMzc6XHRcdGludCByZXQ7XG4zMzM4Olx0XG4zMzM5Olx0XHR3aGlsZSAoKHNlZyA9IG5leHRfc2VnbWVudChsZW4sIG9mZnNldCkpICE9IDApIHtcbjMzNDA6XHRcdFx0cmV0ID0ga3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoa3ZtLCBnZm4sIGRhdGEsIG9mZnNldCwgc2VnKTtcbjMzNDE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAwMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2VgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZWAsIGVoPyBUaGF0IGZ1bmN0aW9uIGNhbGwgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgd2UmIzM5O3JlIHB1c2hpbmcgZGF0YSBpbnRvIGEgZ3Vlc3QgVk0mIzM5O3MgbWVtb3J5IHNwYWNlLCBpc24mIzM5O3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdmFyaW91cyBjb250ZXh0cyB3aGVyZSB0aGlzIHdvdWxkIGJlIGNhbGxlZDogdmlydGlvIGRldmljZXMsIGRpcmVjdCBtZW1vcnkgYWNjZXNzIG9wZXJhdGlvbnMsIHNoYXJlZCBtZW1vcnkgYXJyYW5nZW1lbnRzLCBsaWtlbHkgYW55dGhpbmcgdGhhdCByZXF1aXJlcyBtb2RpZnlpbmcgdGhlIGd1ZXN0JiMzOTtzIHBoeXNpY2FsIG1lbW9yeSBkaXJlY3RseSBmcm9tIHRoZSBob3N0LgoKRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBXcml0aW5nIHRvIGd1ZXN0IG1lbW9yeSBpcyBhIHByaXZpbGVnZWQgb3BlcmF0aW9uLiBJZiB0aGlzIHJvdXRpbmUgaXMgZmxhd2VkLCBpdOKAmXMgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvciBmb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIEhvdyBhcmUgd2UgdmFsaWRhdGluZyB0aGUgc291cmNlIG9mIHRoZSBkYXRhPyBBcmUgdGhlcmUgY2hlY2tzIG9uIHRoZSB0YXJnZXQgYWRkcmVzcyByYW5nZSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzPyBJcyB0aGVyZSBwcm9wZXIgaXNvbGF0aW9uPyBUaGlzIGlzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gbWFuaWZlc3QsIHNvIHNlY3VyaXR5IGlzIHBhcmFtb3VudC4KCk5vdywgcGVyZm9ybWFuY2UuIFRoYXTigJlzIGFsd2F5cyB0aGUga2lja2VyIHdpdGggS1ZNLiBXcml0aW5nIGEgZ3Vlc3QgcGFnZSBpbnZvbHZlcyB0cmFuc2l0aW9uaW5nIGJldHdlZW4gaG9zdCBhbmQgZ3Vlc3QgY29udGV4dHMsIHBvdGVudGlhbGx5IFRMQiBmbHVzaGVzLCBhbmQgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudCBvdmVyaGVhZC4gV2UgbmVlZCB0byBkaXNzZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBpZGVudGlmeSBhbnkgYm90dGxlbmVja3MuIElzIGl0IHBhZ2UtYWxpZ25lZD8gQXJlIHRoZXJlIGNvcHkgb3B0aW1pemF0aW9ucyBpbnZvbHZlZCwgb3IgYXJlIHdlIHN0dWNrIHdpdGggYnl0ZS1ieS1ieXRlIGNvcGllcyB0aGF0IGFyZSBzbG93IGFzIG1vbGFzc2VzPyBXaGF0IGFib3V0IHRoZSBtZW1vcnkgbW9kZWw/IEFyZSB3ZSBkZWFsaW5nIHdpdGggY2FjaGUgY29oZXJlbmN5IGlzc3Vlcywgb3IgYXJlIHdlIHRha2luZyB0aGUgYXBwcm9wcmlhdGUgcHJlY2F1dGlvbnM/IFdoYXQgYWJvdXQgdGhlIGF0b21pY2l0eSBvZiB0aGUgb3BlcmF0aW9uPyBJcyBpdCBhIHNpbmdsZSBvcGVyYXRpb24sIG9yIHNldmVyYWwgc21hbGxlciBvcGVyYXRpb25zIHRoYXQsIGlmIGludGVycnVwdGVkLCBjb3VsZCBsZWF2ZSB0aGUgZ3Vlc3QgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlPwoKTmV4dCwgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHdyaXRlIGZhaWxzPyBEb2VzIHRoZSBmdW5jdGlvbiByZXR1cm4gYSBjbGVhciBlcnJvciBjb2RlPyBIb3cgYXJlIHRoZXNlIGVycm9ycyBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrLCBhbmQgd2hhdCBpcyB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2U/IEFyZSB0aGVyZSBtZWNoYW5pc21zIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZ3Vlc3QgcGFnZSBtaWdodCBiZSBsb2NrZWQgb3Igb3RoZXJ3aXNlIHVuYXZhaWxhYmxlPwoKSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBhbnkgbG9ja2luZyBwcmltaXRpdmVzIGludm9sdmVkLiBJZiB3ZSYjMzk7cmUgbm90IGNhcmVmdWwgd2l0aCBzeW5jaHJvbml6YXRpb24sIHdlIGNvdWxkIGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3Igb3RoZXIgbmFzdHkgY29uY3VycmVuY3kgYnVncy4gVW5kZXJzdGFuZGluZyB0aGUgbG9jayBvcmRlciBhbmQgYW55IGFzc29jaWF0ZWQgY29udGVudGlvbiBpcyBjcnVjaWFsLgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIGFuc3dlciB0aGVzZSBxdWVzdGlvbnMgdG8gZm9ybSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHBlcnNwZWN0aXZlIGlzIHRvIHNlZWsgb3V0IHBvdGVudGlhbCBzZWN1cml0eSBwaXRmYWxscywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCB0aGUgaGFuZGxpbmcgb2YgY29uY3VycmVuY3kgYW5kIGVycm9yIHNjZW5hcmlvcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHdvcmtpbmdzIGlzIGVzc2VudGlhbCBmb3IgdGhlIHN0YWJpbGl0eSBhbmQgaW50ZWdyaXR5IG9mIHRoZSBlbnRpcmUgdmlydHVhbGl6ZWQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2t2bV93cml0ZV9ndWVzdF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTMyOTA9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV92Y3B1X3JlYWRfZ3Vlc3RfYXRvbWljKTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMyOTItLyogQ29weSBAbGVuIGJ5dGVzIGZyb20gQGRhdGEgaW50byBndWVzdCBtZW1vcnkgYXQgJiMzOTsoQGdmbiAqIFBBR0VfU0laRSkgJiM0MzsgQG9mZnNldCYjMzk7ICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMyOTM6c3RhdGljIGludCBfX2t2bV93cml0ZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzI5NC1cdFx0XHRcdCAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwgZ2ZuX3QgZ2ZuLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MzMxMz1pbnQga3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMzE3LVxudmlydC9rdm0va3ZtX21haW4uYzozMzE4Olx0cmV0dXJuIF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoa3ZtLCBzbG90LCBnZm4sIGRhdGEsIG9mZnNldCwgbGVuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzMxOS19XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMzIyPWludCBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzMyNi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MzMyNzpcdHJldHVybiBfX2t2bV93cml0ZV9ndWVzdF9wYWdlKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIGRhdGEsIG9mZnNldCwgbGVuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzMyOC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBfX2t2bV93cml0ZV9ndWVzdF9wYWdlYCBmdW5jdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBjb21wbGV4aXR5IGhlcmUsIGdpdmVuIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB3cml0aW5nIHRvIGd1ZXN0IG1lbW9yeSBmcm9tIHRoZSBob3N0LCB3aGljaCBpcyBhIGNvcmUgcGFydCBvZiBLVk0mIzM5O3MgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoZSBrZXkgY2hhbGxlbmdlcyByZXZvbHZlIGFyb3VuZCBtZW1vcnkgbWFwcGluZywgcHJvdGVjdGlvbiwgYW5kIGVuc3VyaW5nIGNvbnNpc3RlbmN5LiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZXNlIGFzcGVjdHMgYW5kIHdoaWNoIG9wdGltaXphdGlvbnMgYXJlIHVzZWQuCgoqKkFuYWx5emluZyBgX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZWAqKgoKU28sIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHRoZSB0cmFuc2ZlciBpdHNlbGYuIEltbWVkaWF0ZWx5LCBJIHdhbnQgdG8gc2VlOgoKKiAgICoqQWRkcmVzcyBUcmFuc2xhdGlvbiBhbmQgVmFsaWRhdGlvbjoqKiBIb3cgZG9lcyBpdCB0cmFuc2xhdGUgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKEdQQSkgdG8gYSBob3N0IHZpcnR1YWwgYWRkcmVzcyAoSFZBKT8gSXMgdGhlcmUgYSBUTEIgbG9va3VwLCBvciBkaXJlY3QgbWFuaXB1bGF0aW9uPyBXaGF0IGFyZSB0aGUgY2hlY2tzIGluIHBsYWNlIHRvIGVuc3VyZSB0aGUgR1BBIGlzIHZhbGlkLCBtYXBwZWQsIGFuZCB0aGF0IHRoZSBndWVzdCBoYXMgd3JpdGUgcGVybWlzc2lvbnM/IERvZXMgaXQgaGFuZGxlIGRpZmZlcmVudCBtZW1vcnkgbW9kZWxzIHN1Y2ggYXMgTU1JTyBvciBQSU8/IEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgc29waGlzdGljYXRlZCBjaGVja3MgdG8gYXZvaWQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoqICAgKipEYXRhIFRyYW5zZmVyIE1lY2hhbmlzbToqKiBJcyBpdCBhIGRpcmVjdCBtZW1vcnkgY29weSAoYG1lbWNweWApPyBEb2VzIGl0IHVzZSBETUEgb3Igc29tZSBvdGhlciBvcHRpbWl6ZWQgYXBwcm9hY2ggZm9yIGxhcmdlciB0cmFuc2ZlcnM/IEFyZSB0aGVyZSBjb25zaWRlcmF0aW9ucyBmb3IgQ1BVIGNhY2hlIGNvaGVyZW5jeT8gSG93IGFyZSBwb3RlbnRpYWwgcGFnZSBmYXVsdHMgaGFuZGxlZD8KKiAgICoqUHJvdGVjdGlvbiBNZWNoYW5pc21zOioqIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgbWVjaGFuaXNtcyB1c2VkIHRvIGVuc3VyZSB0aGUgZ3Vlc3QgZG9lc24mIzM5O3QgYWNjaWRlbnRhbGx5IChvciBtYWxpY2lvdXNseSkgY29ycnVwdCBob3N0IG1lbW9yeSwgb3IgYW5vdGhlciBndWVzdCYjMzk7cyBtZW1vcnkuIEFyZSB0aGVyZSBzaGFkb3cgcGFnZSB0YWJsZXMsIG1lbW9yeSBiYXJyaWVycywgb3Igb3RoZXIgdGVjaG5pcXVlcyBlbXBsb3llZD8gSG93IGlzIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGltcGxlbWVudGVkPwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlcmUmIzM5O3MgYW4gZXJyb3IgZHVyaW5nIHRoZSB3cml0ZSwgc3VjaCBhcyBhIGhhcmR3YXJlIGZhdWx0LCBhIHBhZ2UgZmF1bHQsIG9yIGFuIGFjY2VzcyB2aW9sYXRpb24/IElzIGl0IGhhbmRsZWQgd2l0aGluIHRoZSBmdW5jdGlvbiwgb3IgYXJlIGVycm9ycyBwcm9wYWdhdGVkPyBXaGF0JiMzOTtzIHRoZSBlcnJvciByZWNvdmVyeSBzdHJhdGVneT8KCkkmIzM5O20gZXhwZWN0aW5nIHNvbWUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGZvciBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBjb3JyZWN0bmVzcy4gSSYjMzk7bSBrZWVuIHRvIGV4YW1pbmUgYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgaXQgYXBwbGllcy4gVGhpcyB3b3VsZCBiZSBhIGdyZWF0IHdheSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgdW5kZXJwaW5uaW5ncyBvZiBLVk0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyOTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI5MzpcdHN0YXRpYyBpbnQgX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4zMjk0Olx0XHRcdFx0XHQgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsIGdmbl90IGdmbixcbjMyOTU6XHRcdFx0XHQgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgaW50IG9mZnNldCwgaW50IGxlbilcbjMyOTY6XHR7XG4zMjk3Olx0XHRpbnQgcjtcbjMyOTg6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbjMyOTk6XHRcbjMzMDA6XHRcdGlmIChXQVJOX09OX09OQ0Uob2Zmc2V0ICYjNDM7IGxlbiBcdTAwM2UgUEFHRV9TSVpFKSlcbjMzMDE6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMzAyOlx0XG4zMzAzOlx0XHRhZGRyID0gZ2ZuX3RvX2h2YV9tZW1zbG90KG1lbXNsb3QsIGdmbik7XG4zMzA0Olx0XHRpZiAoa3ZtX2lzX2Vycm9yX2h2YShhZGRyKSlcbjMzMDU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMzA2Olx0XHRyID0gX19jb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYWRkciAmIzQzOyBvZmZzZXQsIGRhdGEsIGxlbik7XG4zMzA3Olx0XHRpZiAocilcbjMzMDg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMzA5Olx0XHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XG4zMzEwOlx0XHRyZXR1cm4gMDtcbjMzMTE6XHR9XG4zMzEyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NDkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW5mb3JtYXRpb24gTGVhayoqCgpPa2F5LCBzbyBgX19jb3B5X3RvX3VzZXJgLi4uIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHdlIHVzZSB0byB3cml0ZSBzdHVmZiBpbnRvIHRoZSBndWVzdCYjMzk7cyBtZW1vcnkgc3BhY2UsIHJpZ2h0PyBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQgaWYgd2UmIzM5O3JlIHdyaXRpbmcgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgd2l0aCB0aGF0IGZ1bmN0aW9uLCB3ZSYjMzk7dmUgZ290IGEgZGVmaW5pdGUgaW5mby1sZWFrIHNjZW5hcmlvIG9uIG91ciBoYW5kcy4gVGhlIGd1ZXN0JiMzOTtzIG1lbW9yeSBpcyBtYXBwZWQgZGlyZWN0bHkgaW50byBRRU1VJiMzOTtzIHVzZXJzcGFjZSwgc28gd2hhdGV2ZXIgd2UgcHV0IHRoZXJlLCB0aGUgZ3Vlc3QgY2FuIHJlYWQuIEtNU0FOIGlzLCBvZiBjb3Vyc2UsIHRoZSBwZXJmZWN0IHRvb2wgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgdnVsbmVyYWJpbGl0aWVzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBleGFjdGx5IHRoZSBwcm9ibGVtIGl0IHdhcyBkZXNpZ25lZCBmb3IuCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGUgc3RydWN0dXJlcyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IGBodl9tZXNzYWdlX2hlYWRlcmAgYW5kIGBodl9tZXNzYWdlX2ZsYWdzYC4gR290dGEgbWFrZSBzdXJlIHRoZSBkYXRhIGlzIGJlaW5nIGNvbnN0cnVjdGVkIGFuZCBoYW5kbGVkIGFzIGV4cGVjdGVkIHdpdGhpbiB0aG9zZSBzdHJ1Y3R1cmVzIHRvIHZlcmlmeSB0aGUgbGVhayBpcyBvY2N1cmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaHZfbWVzc2FnZV9mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNjIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogYG1lc3NhZ2VfZmxhZ3NgIEh1bnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1lc3NhZ2UgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8ganVtcCByaWdodCBpbnRvIHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4geW91JiMzOTtyZSBkZWFsaW5nIHdpdGggZGVmaW5pdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbiBhIGNvZGViYXNlLCBlc3BlY2lhbGx5IHdoZW4geW91JiMzOTtyZSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBzb3VuZHMgbGlrZSBhbiBlbnVtZXJhdGlvbiBvciBhIHNldCBvZiBjb25zdGFudHMuIGBpbmNsdWRlL2AgaXMgd2hlcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGFyZSB0eXBpY2FsbHkgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGhlYWRlciBmaWxlIHRoYXQgZGVmaW5lcyBgbWVzc2FnZV9mbGFnc2AsIG1heWJlIGFzIGEgYml0ZmllbGQgb3IgYW4gZW51bS4gTGV0JiMzOTtzIGdldCB0byBpdCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc3NhZ2VfZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2h5cGVydi9odmdka19taW5pLmg9NzY0PXVuaW9uIGh2X3N5bmljX3NpbXAge1xuLS1cbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaC03NzItXG5pbmNsdWRlL2h5cGVydi9odmdka19taW5pLmg6NzczOnVuaW9uIGh2X21lc3NhZ2VfZmxhZ3Mge1xuaW5jbHVkZS9oeXBlcnYvaHZnZGtfbWluaS5oLTc3NC1cdHU4IGFzdTg7XG4tLVxuaW5jbHVkZS9oeXBlcnYvaHZnZGtfbWluaS5oPTc4MT1zdHJ1Y3QgaHZfbWVzc2FnZV9oZWFkZXIge1xuLS1cbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaC03ODMtXHR1OCBwYXlsb2FkX3NpemU7XG5pbmNsdWRlL2h5cGVydi9odmdka19taW5pLmg6Nzg0Olx0dW5pb24gaHZfbWVzc2FnZV9mbGFncyBtZXNzYWdlX2ZsYWdzO1xuaW5jbHVkZS9oeXBlcnYvaHZnZGtfbWluaS5oLTc4NS1cdHU4IHJlc2VydmVkWzJdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSFZHREsgTWluaWRyaXZlciBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIEhWR0RLIG1pbmlkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNzczIG9mIGBpbmNsdWRlL2h5cGVydi9odmdka19taW5pLmhgLiBLbm93aW5nIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgSFZHREssIGFuZCB3aGF0IHRoaXMgcGFydCBvZiB0aGUgaGVhZGVyIGxpa2VseSBwZXJ0YWlucyB0bywgdGhpcyBsaW5lIG51bWJlciBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgb3IgaW52ZXN0aWdhdGluZy4gR2l2ZW4gdGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUgaW5jbHVkZSBmaWxlLCBpdCYjMzk7cyBsaWtlbHkgZGVmaW5pbmcgc29tZSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmUgb3IgY29uc3RhbnQgcmVsYXRlZCB0byB0aGUgZ3Vlc3QgdmlydHVhbCBkZXZpY2UuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBtaW5pZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoeXBlcnZpc29yIGhlcmUuIFRoaXMgbWlnaHQgYmUgYSBkZWZpbml0aW9uIGZvciBhIHBhY2tldCBmb3JtYXQsIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGRldmljZSBjb250cm9sLCBvciBwZXJoYXBzIGV2ZW4gYW4gaW50ZXJydXB0IHZlY3Rvci4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIGNyaXRpY2FsIGZvciB0aGUgZ3Vlc3QtdG8taG9zdCBjb21tdW5pY2F0aW9uIG9yIGRldmljZSBlbnVtZXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzczOlx0dW5pb24gaHZfbWVzc2FnZV9mbGFncyB7XG4gNzc0Olx0XHR1OCBhc3U4O1xuIDc3NTpcdFx0c3RydWN0IHtcbiA3NzY6XHRcdFx0dTggbXNnX3BlbmRpbmcgOiAxO1xuIDc3NzpcdFx0XHR1OCByZXNlcnZlZCA6IDc7XG4gNzc4Olx0XHR9IF9fcGFja2VkO1xuIDc3OTpcdH07XG4gNzgwOlx0XG4gNzgxOlx0c3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyIHtcbiA3ODI6XHRcdHUzMiBtZXNzYWdlX3R5cGU7XG4gNzgzOlx0XHR1OCBwYXlsb2FkX3NpemU7XG4gNzg0Olx0XHR1bmlvbiBodl9tZXNzYWdlX2ZsYWdzIG1lc3NhZ2VfZmxhZ3M7XG4gNzg1Olx0XHR1OCByZXNlcnZlZFsyXTtcbiA3ODY6XHRcdHVuaW9uIHtcbiA3ODc6XHRcdFx0dTY0IHNlbmRlcjtcbiA3ODg6XHRcdFx0dW5pb24gaHZfcG9ydF9pZCBwb3J0O1xuIDc4OTpcdFx0fTtcbiA3OTA6XHR9IF9fcGFja2VkO1xuIDc5MTpcdFxuIDc5MjpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk2CgkJCQkJCQlvdXRwdXQ6IDIwMwoJCQkJCQkJdGhvdWdodHM6IDk3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBJbmZvLUxlYWsgaW4gSHlwZXItViBNZXNzYWdlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGBodl9tZXNzYWdlX2ZsYWdzYCB1bmlvbiwgaXQmIzM5O3MgYSBgdTggYXN1OGAgYW5kIGEgYml0ZmllbGQgYG1zZ19wZW5kaW5nOjFgLCBgcmVzZXJ2ZWQ6N2AuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgc2V0dGluZyBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxO2AsIGJ1dCB0aGUgb3RoZXIgNyBiaXRzIG9mIHRoZSBgbWVzc2FnZV9mbGFnc2AgYnl0ZSAoYHJlc2VydmVkYCkgd2VyZSB1bmluaXRpYWxpemVkIGJlY2F1c2UgYGh2X2hkcmAgd2FzIGFuIHVuaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGUgb24gdGhlIHN0YWNrLiBFc3NlbnRpYWxseSwgYSBieXRlIHdhcyBiZWluZyBwYXJ0aWFsbHkgd3JpdHRlbiB0by4gVGhlbiBga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZWAgd3JpdGVzIHRoaXMgc2luZ2xlIGJ5dGUgdG8gZ3Vlc3QgbWVtb3J5LgoKVGhpcyBtZWFucyB3ZSYjMzk7cmUgbGVha2luZyA3IGJpdHMgb2YgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZGlyZWN0bHkgdG8gdGhlIGd1ZXN0IHNwYWNlLiBJdCYjMzk7cyBhIGNsYXNzaWMgaW5mby1sZWFrLCBhbmQgYSBuYXN0eSBvbmUgYXQgdGhhdCEgTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBLQVNBTiB3b24mIzM5O3QgY2F0Y2ggdGhpcy4gS0FTQU4gZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGZsYWcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgbGlrZSB0aGlzIG9uZS4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCAqZG9lcyouIEtNU0FOIGlzIHRoZSB0b29sIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdGhlc2Ugc2NlbmFyaW9zLgoKU28sIGxldCYjMzk7cyBjb25maXJtIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gdGhlIGBzeW5pY19kZWxpdmVyX21zZ2AgZnVuY3Rpb24sIHRoZSBgaHZfaGRyYCBzdHJ1Y3QgaXMgZGVjbGFyZWQgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIFdlIHRoZW4gcmVhZCBgaHZfaGRyLm1lc3NhZ2VfdHlwZWAgZnJvbSBndWVzdCBtZW1vcnkgdXNpbmcgYGt2bV92Y3B1X3JlYWRfZ3Vlc3RfcGFnZWAgdG8gaW5pdGlhbGl6ZSB0aG9zZSA0IGJ5dGVzLiBBZnRlciB0aGF0LCB3ZSBzZXQgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMWAuIFRoaXMgc2V0cyBvbmx5IG9uZSBiaXQsIGxlYXZpbmcgdGhlIG90aGVyIDcgYml0cyBvZiBgbWVzc2FnZV9mbGFnc2AgdW5pbml0aWFsaXplZC4gYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VgIHRoZW4gd3JpdGVzIHRoaXMgc2luZ2xlIGJ5dGUgb2YgYG1lc3NhZ2VfZmxhZ3NgIHRvIGd1ZXN0IG1lbW9yeS4KClNpbmNlIHRoZSBndWVzdCBtZW1vcnkgaXMgbWFwcGVkIHRvIHVzZXJzcGFjZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggUUVNVSwgdGhpcyBiZWNvbWVzIGFuIGluZm8tbGVhayEgVGhlIHdyaXRlIG9wZXJhdGlvbiB3aWxsIHRyaWdnZXIgYF9fY29weV90b191c2VyYCwgd2hpY2ggS01TQU4gd2lsbCBjYXRjaC4KClRoaXMgZGVmaW5pdGl2ZWx5IG1lYW5zIGBOZWVkc0tNU0FOYCBpcyB0cnVlLgoKSW4gYSBudXRzaGVsbCwgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYW4gaW5mb3JtYXRpb24gbGVhayB2dWxuZXJhYmlsaXR5LiBUaGUgb3JpZ2luYWwgY29kZSBpbmFkdmVydGVudGx5IHdyb3RlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5ICg3IGJpdHMpIHRvIGd1ZXN0IG1lbW9yeSB3aGVuIHdyaXRpbmcgYSBzcGVjaWZpYyBtZXNzYWdlIGhlYWRlciwgYmVjYXVzZSB3ZSB3ZXJlIG9ubHkgcGFydGlhbGx5IGluaXRpYWxpemluZyB0aGUgYG1lc3NhZ2VfZmxhZ3NgIGJ5dGUuIFRoaXMgdW5pbml0aWFsaXplZCBkYXRhLCBsZWFraW5nIHRvIHVzZXJzcGFjZSwgaXMgc29tZXRoaW5nIEtNU0FOIGV4Y2VscyBhdCBjYXRjaGluZywgYW5kIHNvIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGluaXRpYWxpemluZyB0aGUgZW50aXJlIGJ5dGUgYmVmb3JlIHNldHRpbmcgYW55IGJpdGZpZWxkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBgaHZfaGRyYCBpcyBhbiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlLiBUaGUgY29kZSBzZXRzIGEgc2luZ2xlIGJpdGZpZWxkIGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDFgLCBsZWF2aW5nIHRoZSByZW1haW5pbmcgNyBiaXRzIG9mIHRoZSBgbWVzc2FnZV9mbGFnc2AgYnl0ZSB1bmluaXRpYWxpemVkLiBUaGlzIGJ5dGUgaXMgdGhlbiB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeSB2aWEgYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UoKWAsIHdoaWNoIGludGVybmFsbHkgdXNlcyBgX19jb3B5X3RvX3VzZXIoKWAgdG8gd3JpdGUgdG8gdGhlIHVzZXJzcGFjZS1tYXBwZWQgZ3Vlc3QgbWVtb3J5LiBUaGlzIGxlYWtzIDcgYml0cyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBtZW1vcnkgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdGhpcyBleGFjdCBjbGFzcyBvZiBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBgaHZfaGRyYCBpcyBhbiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlLiBUaGUgY29kZSBzZXRzIGEgc2luZ2xlIGJpdGZpZWxkIGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDFgLCBsZWF2aW5nIHRoZSByZW1haW5pbmcgNyBiaXRzIG9mIHRoZSBgbWVzc2FnZV9mbGFnc2AgYnl0ZSB1bmluaXRpYWxpemVkLiBUaGlzIGJ5dGUgaXMgdGhlbiB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeSB2aWEgYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UoKWAsIHdoaWNoIGludGVybmFsbHkgdXNlcyBgX19jb3B5X3RvX3VzZXIoKWAgdG8gd3JpdGUgdG8gdGhlIHVzZXJzcGFjZS1tYXBwZWQgZ3Vlc3QgbWVtb3J5LiBUaGlzIGxlYWtzIDcgYml0cyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBtZW1vcnkgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdGhpcyBleGFjdCBjbGFzcyBvZiBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzowMy42MDg3MDQ0NThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ3ODIzMzYwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2h2X3NldF9tc3JfY29tbW9uXCIsXG4gICAgXCJrdm1faHZfcHJvY2Vzc19zdGltZXJzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5LiBTcGVjaWZpY2FsbHksIGBodl9oZHJgIGlzIGFuIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGUuIFRoZSBjb2RlIHNldHMgYSBzaW5nbGUgYml0ZmllbGQgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMWAsIGxlYXZpbmcgdGhlIHJlbWFpbmluZyA3IGJpdHMgb2YgdGhlIGBtZXNzYWdlX2ZsYWdzYCBieXRlIHVuaW5pdGlhbGl6ZWQuIFRoaXMgYnl0ZSBpcyB0aGVuIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5IHZpYSBga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSgpYCwgd2hpY2ggaW50ZXJuYWxseSB1c2VzIGBfX2NvcHlfdG9fdXNlcigpYCB0byB3cml0ZSB0byB0aGUgdXNlcnNwYWNlLW1hcHBlZCBndWVzdCBtZW1vcnkuIFRoaXMgbGVha3MgNyBiaXRzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGRvZXMgbm90IGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB0aGlzIGV4YWN0IGNsYXNzIG9mIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEh5cGVyLVYgc3ludGhldGljIHRpbWVyIG1lc3NhZ2UgZGVsaXZlcnkgbG9naWMgaW4gS1ZNIGJ5IGNsZWFyaW5nIGEgbWVzc2FnZSBmbGFnIGJlZm9yZSBzZXR0aW5nIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBndWVzdCBNU1Igd3JpdGVzIGFuZCB0aW1lciBleHBpcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6MDMuNjA4NzA4ODA4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3MzI0Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2JlNjA5NzE5YmE1ODlmNGFmYTNlNTc2ZGVmNzVjMjIxNjdlYjBiMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxOTowNzowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcXG5pbmRleCA2MDQ2NTFjYjI3Mzk5Li44ZDI2NjlkOGVmMzQ3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xcbkBAIC04MDIsNyArODAyLDkgQEAgc3RhdGljIGludCBzeW5pY19kZWxpdmVyX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljLCB1MzIgc2ludCxcXG4gXFx0XFx0aWYgKG5vX3JldHJ5KVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdFxcdGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO1xcbiBcXHRcXHRodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7XFxuK1xcbiBcXHRcXHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZodl9oZHIubWVzc2FnZV9mbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgbXNnX29mZiArXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjA1LjAxNjY3MDE4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2OTIzNTA4MDA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faHZfc2V0X21zcl9jb21tb25cIixcbiAgICBcImt2bV9odl9wcm9jZXNzX3N0aW1lcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBzeW50aGV0aWMgdGltZXIgbWVzc2FnZSBkZWxpdmVyeSBsb2dpYyBpbiBLVk0gYnkgY2xlYXJpbmcgYSBtZXNzYWdlIGZsYWcgYmVmb3JlIHNldHRpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgdGhhdCBoYW5kbGVzIGd1ZXN0IE1TUiB3cml0ZXMgYW5kIHRpbWVyIGV4cGlyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYmU2MDk3MTliYTU4OWY0YWZhM2U1NzZkZWY3NWMyMjE2N2ViMGIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDc6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbmluZGV4IDYwNDY1MWNiMjczOTkuLjhkMjY2OWQ4ZWYzNDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuQEAgLTgwMiw3ICs4MDIsOSBAQCBzdGF0aWMgaW50IHN5bmljX2RlbGl2ZXJfbXNnKHN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWMsIHUzMiBzaW50LFxuIFx0XHRpZiAobm9fcmV0cnkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4rXHRcdGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO1xuIFx0XHRodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7XG4rXG4gXHRcdHIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHZjcHUsIG1zZ19wYWdlX2dmbixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2aHZfaGRyLm1lc3NhZ2VfZmxhZ3MsXG4gXHRcdFx0XHRcdCAgICAgIG1zZ19vZmYgK1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6MDUuMDE2NjcxNDU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2MjA4Njc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBIeXBlci1WIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgYXJjaC94ODYva3ZtL2h5cGVydi5jYC4gSXQncyBhIHByZXR0eSBmb2N1c2VkIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgc3luaWNfZGVsaXZlcl9tc2dgLiBUaGUgY29yZSBvZiB0aGUgYWx0ZXJhdGlvbiBzZWVtcyB0byBiZSBpbnNlcnRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO2AgKmJlZm9yZSogc2V0dGluZyBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgS1ZNIEh5cGVyLVYgZW11bGF0aW9uIGxheWVyLiBUaGF0IFwiYXN1OCA9IDBcIiBsaWtlbHkgcmVsYXRlcyB0byBzb21lIHNwZWNpZmljIGZlYXR1cmUgb3Igc3RhdGUgZmxhZywgYW5kIGl0cyBwbGFjZW1lbnQgKmJlZm9yZSogdGhlIGBtc2dfcGVuZGluZ2AgYml0IGlzIHNldCBpcyBjcnVjaWFsLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBIeXBlci1WIFN5bklDIGludGVycnVwdHMgYXJlIGRlbGl2ZXJlZCB3aXRoaW4gS1ZNLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4YCBhY3R1YWxseSAqbWVhbnMqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgbWVzc2FnZSBkZWxpdmVyeSBwcm9jZXNzLiBUaGUgb3JkZXJpbmcgY2hhbmdlIGhhcyB0byBiZSBzaWduaWZpY2FudC4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBlaXRoZXIgaW5pdGlhbGl6YXRpb24gb3IgZGVhY3RpdmF0aW9uIG9mIHRoZSBtZXNzYWdlIGZlYXR1cmUuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGJvdGggYHN5bmljX2RlbGl2ZXJfbXNnYCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3NgIHRvIGdyYXNwIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjA5Ljc3ODc2MDI1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwNTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeW5pY19kZWxpdmVyX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jPTc2OD1zdGF0aWMgaW50IHN0aW1lcl9nZXRfY291bnQoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCB1NjQgKnBjb3VudClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjc3NDpzdGF0aWMgaW50IHN5bmljX2RlbGl2ZXJfbXNnKHN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWMsIHUzMiBzaW50LFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHZfbWVzc2FnZSAqc3JjX21zZywgYm9vbCBub19yZXRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz04MzM9c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cXHRwYXlsb2FkLVxcdTAwM2VkZWxpdmVyeV90aW1lID0gZ2V0X3RpbWVfcmVmX2NvdW50ZXIodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODQ4OlxcdHJldHVybiBzeW5pY19kZWxpdmVyX21zZyh0b19odl9zeW5pYyh2Y3B1KSxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVxcdFxcdFxcdFxcdCBzdGltZXItXFx1MDAzZWNvbmZpZy5zaW50eCwgbXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzowOS44MjcxNjgwMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc0MDQyMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBhIEh5cGVyLVYgVGltZXIgSW50ZXJhY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBgc3RpbWVyX3NlbmRfbXNnYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQncyB0ZWxsaW5nIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBIeXBlci1WIHN5bnRoZXRpYyB0aW1lcnMuIFRoaXMgcmluZ3MgYSBiZWxsOyBJJ3ZlIGhhZCB0byBkZWJ1ZyB0aGVzZSBpbnRlcmFjdGlvbnMgYmVmb3JlLiBNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzLCBcIk9rYXksIHdobyBlbHNlIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ20gbG9va2luZyBmb3IgYSBjbGVhciBvdmVydmlldywgdG8gYXNzZXNzIHRoZSBwb2ludHMgb2YgZW50cnkuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHRpbWVyIHN1YnN5c3RlbSBvZiBIeXBlci1WLiBXaGVyZSBkb2VzIHRoZSB3b3JrIG9yaWdpbmF0ZSwgYW5kIHdoZXJlIGRvZXMgaXQgZ28gZnJvbSBoZXJlP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6MTMuNzAxMjExODA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODk2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5bmljX2RlbGl2ZXJfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jPTc2OD1zdGF0aWMgaW50IHN0aW1lcl9nZXRfY291bnQoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCB1NjQgKnBjb3VudClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjc3NDpzdGF0aWMgaW50IHN5bmljX2RlbGl2ZXJfbXNnKHN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWMsIHUzMiBzaW50LFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHZfbWVzc2FnZSAqc3JjX21zZywgYm9vbCBub19yZXRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz04MzM9c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cXHRwYXlsb2FkLVxcdTAwM2VkZWxpdmVyeV90aW1lID0gZ2V0X3RpbWVfcmVmX2NvdW50ZXIodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODQ4OlxcdHJldHVybiBzeW5pY19kZWxpdmVyX21zZyh0b19odl9zeW5pYyh2Y3B1KSxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVxcdFxcdFxcdFxcdCBzdGltZXItXFx1MDAzZWNvbmZpZy5zaW50eCwgbXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzoxMy43NDkxMTA2ODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE3OTcyNzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgc3RpbWVyX3NlbmRfbXNnYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGBzdGltZXJfc2VuZF9tc2dgLCBhbmQgaXQgc2VlbXMgbGlrZSBhIGNvcmUgcGllY2Ugb2YgdGhlIHRpbWluZyBtZWNoYW5pc20uIFRoZSBpbW1lZGlhdGUgY29udGV4dCB0ZWxscyBtZSBpdCdzIG9ubHkgY2FsbGVkIGZyb20gb25lIHBsYWNlOiBgc3RpbWVyX3NlbmRfbXNnYC4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSByZWQgZmxhZyB5ZXQuIFRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3QsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB2ZXJpZnkgdGhpcyBpbml0aWFsIGFzc3VtcHRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoZSAqc291cmNlKiBvZiB0aGUgY2FsbC4gSSBtdXN0IGJlIHN1cmUgYHN0aW1lcl9zZW5kX21zZ2AgaXMgKm9ubHkqIGNhbGxlZCBmcm9tIHdpdGhpbiBgc3RpbWVyX3NlbmRfbXNnYC4gSWYgdGhpcyBpcyBpbmNvcnJlY3QsIG15IGFuYWx5c2lzIHdpbGwgZmFpbC4gSWYgdGhpcyBpcyBjb3JyZWN0LCBJIGhhdmUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gcHJvY2VlZCB3aXRoIHRoZSBhbmFseXNpcy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbiBhbmQgaWRlbnRpZnlpbmcgYWxsIGNhbGxlcnMgdG8gYHN0aW1lcl9zZW5kX21zZ2AuIFRoaXMnbGwgZWl0aGVyIGNvbmZpcm0gbXkgaW5pdGlhbCBpbmZvcm1hdGlvbiBvciBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyB3aWRlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgbmV4dCBhcHByb3ByaWF0ZSBzdGVwcyBpbiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjQ1LjkyODgzOTU2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY2MTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGltZXJfc2VuZF9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9Nzc0PXN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODMyLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4MzM6c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04MzQte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTg2Nj1zdGF0aWMgdm9pZCBzdGltZXJfZXhwaXJhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODcxLVxcdGlmICghZGlyZWN0KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NzI6XFx0XFx0ciA9IHN0aW1lcl9zZW5kX21zZyhzdGltZXIpO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04NzMtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo0NS45NzM1MDMxNzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk2NzcyODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgc3RpbWVyX2V4cGlyYXRpb25gIENhbGxlcioqXG5cbk9rYXksIHNvIGBzdGltZXJfZXhwaXJhdGlvbmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBpbml0aWF0aW5nIHRoaXMgY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB3aGV0aGVyIGBzdGltZXJfc2VuZF9tc2dgIG9yIGBzdGltZXJfZXhwaXJhdGlvbmAgdGhlbXNlbHZlcyBhcmUgZXh0ZXJuYWxseSB2aXNpYmxlLCBtZWFuaW5nIGV4cG9ydGVkLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEknZCBjaGVjazsgdGhhdCdsbCBuYXJyb3cgZG93biBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBiZSBpbnRlZ3JhdGVkIG9yIHV0aWxpemVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gS25vd2luZyB0aGF0IGV4cG9ydCBzdGF0dXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsIGZsb3cgYW5kIG92ZXJhbGwgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6NDkuMTcwMjc4MDI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk4NjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGltZXJfZXhwaXJhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz04NTM9c3RhdGljIGludCBzdGltZXJfbm90aWZ5X2RpcmVjdChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODY1LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NjY6c3RhdGljIHZvaWQgc3RpbWVyX2V4cGlyYXRpb24oc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04Njcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg3NC1cXHRcXHRyID0gc3RpbWVyX25vdGlmeV9kaXJlY3Qoc3RpbWVyKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODc1OlxcdHRyYWNlX2t2bV9odl9zdGltZXJfZXhwaXJhdGlvbihodl9zdGltZXJfdG9fdmNwdShzdGltZXIpLVxcdTAwM2V2Y3B1X2lkLFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04NzYtXFx0XFx0XFx0XFx0ICAgICAgIHN0aW1lci1cXHUwMDNlaW5kZXgsIGRpcmVjdCwgcik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9ODg0PXZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtOTAzLVxcdFxcdFxcdFxcdFxcdGlmICh0aW1lX25vdyBcXHUwMDNlPSBleHBfdGltZSlcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6OTA0OlxcdFxcdFxcdFxcdFxcdFxcdHN0aW1lcl9leHBpcmF0aW9uKHN0aW1lcik7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTkwNS1cXHRcXHRcXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaD0xNDA4PVRSQUNFX0VWRU5UKGt2bV9odl9zdGltZXJfY2FsbGJhY2ssXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaC0xNDI2LS8qXFxuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTQyNzogKiBUcmFjZXBvaW50IGZvciBzdGltZXJfZXhwaXJhdGlvbi5cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaC0xNDI4LSAqL1xcbmFyY2gveDg2L2t2bS90cmFjZS5oOjE0Mjk6VFJBQ0VfRVZFTlQoa3ZtX2h2X3N0aW1lcl9leHBpcmF0aW9uLFxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTE0MzAtXFx0VFBfUFJPVE8oaW50IHZjcHVfaWQsIGludCB0aW1lcl9pbmRleCwgaW50IGRpcmVjdCwgaW50IG1zZ19zZW5kX3Jlc3VsdCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjQ5LjIxNTI2ODYxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQyNDQ3ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFRpbWVyIEhhbmRsaW5nIGluIEtWTS1IVioqXG5cbk9rYXksIHNvIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGN1cnJlbnRseSBpbiBmb2N1cy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgbGVhZGluZyAqdG8qIHRoaXMgZnVuY3Rpb24sIHNwZWNpZmljYWxseSwgSSB3YW50IHRvIGZpbmQgaXRzIGNhbGxlcnMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdobydzIHJlc3BvbnNpYmxlIGZvciBpbnZva2luZyBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgdGltZXJzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgS1ZNLUhWIGVudmlyb25tZW50LiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgZXhwb3NlIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIHRpbWVyIHByb2Nlc3NpbmcgaXMgaW5pdGlhdGVkLCBoZWxwaW5nIG1lIHRvIGFuYWx5emUgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFuZCBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIHRvIGJlIHVuZGVyc3Rvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo1My4xNTc3MTg3MjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzI3NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9odl9wcm9jZXNzX3N0aW1lcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9ODY2PXN0YXRpYyB2b2lkIHN0aW1lcl9leHBpcmF0aW9uKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04ODMtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjg4NDp2b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04ODUte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oPTI2Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2h2X2ludnRzY19zdXBwcmVzc2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODQtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oOjI4NTp2b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMjg2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTgwNTE9c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MTk5LVxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0hWX1NUSU1FUiwgdmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgyMDA6XFx0XFx0XFx0a3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODIwMS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6NTMuMjA0NDQ5MTE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODAwNTY1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gVGltZXIgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBmdW5jdGlvbi4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCB3aXRoaW4gYHZjcHVfZW50ZXJfZ3Vlc3RgIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGNyaXRpY2FsIGNvcmUgS1ZNIGxvZ2ljIOKAkyB3ZSdyZSB0YWxraW5nIGFib3V0IHZlcnkgZnVuZGFtZW50YWwgZXhlY3V0aW9uIGZsb3cgaGVyZS4gVGhpcyBpc24ndCBzb21lIG9ic2N1cmUgaGVscGVyIGZ1bmN0aW9uOyB0aGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgdmlydHVhbGl6YXRpb24gcHJvY2Vzcy5cblxuTm93LCB0aGUgcGF0Y2gncyBtb2RpZmljYXRpb24gb2YgYHN5bmljX2RlbGl2ZXJfbXNnYCBpcyBpbnRlcmVzdGluZy4gSXQncyBjbGVhcmluZyBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MuYXN1OGAgYmVmb3JlIHNldHRpbmcgYG1zZ19wZW5kaW5nYC4gVGhhdCdzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSwgbm8gZG91YnQgYWJvdXQgaXQuIFdlJ3JlIGRpcmVjdGx5IGFsdGVyaW5nIHRoZSBtZXNzYWdpbmcgYmVoYXZpb3IsIHBvdGVudGlhbGx5IGltcGFjdGluZyBob3cgdGhlIGh5cGVydmlzb3IgaW50ZXJhY3RzIHdpdGggdGhlIGd1ZXN0J3MgdGltZXJzLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMgYWJvdXQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93LlxuXG5CZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpYyBpbXBhY3RzIG9mIGNsZWFyaW5nIGBhc3U4YCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gSXQgaXMgdml0YWwgdG8gZGV0ZXJtaW5lIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGFuZCBvcGVyYXRpb25hbCBpbXBsaWNhdGlvbnMgYmVmb3JlIGV2YWx1YXRpbmcgdGhlIHBhdGNoJ3MgcG90ZW50aWFsIHJpc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo1Ny41ODQ1MDg2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NjA5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjU3LjYzMDA3NTU4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ5Nzk2MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIGFuZCBIeXBlci1WIEludGVycGxheSoqXG5cbkFscmlnaHQsIHRoZSBjb25maWcgaW4gcXVlc3Rpb24gaXMgYEtWTV9IWVBFUlZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGF0IHBhcnRpY3VsYXIgc2V0dGluZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IGl0IGVuYWJsZXMuIFNvLCBteSBpbnN0aW5jdCBpcyB0byBjaGVjayBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSB4ODYgS1ZNIGNvbmZpZ3VyYXRpb25zIGxpdmUsIGFuZCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCBgS1ZNX0hZUEVSVmAgaXMgZGVmaW5lZCBhbmQgZG9jdW1lbnRlZCB0aGVyZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGF0IGZpbGUuIFRoaXMgaXMgbXkgZ28tdG8gYXBwcm9hY2guIExvY2F0aW5nIHdoZXJlIHNvbWV0aGluZyBpcyBkZWZpbmVkIHdpbGwgcXVpY2tseSB5aWVsZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjAxLjI3OTg3NDYyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1OTQxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9IWVBFUlZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTgzPWNvbmZpZyBLVk1fU01NXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MDEuMzI1NDczOTk0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTI1OTUxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgS1ZNX0hZUEVSVmAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgS1ZNX0hZUEVSVmAgdGhpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgc3lzdGVtLCBpdHMgZGVwZW5kZW5jaWVzLiBXaGVyZSBkb2VzIGl0IHNpdD8gV2hhdCBkb2VzIGl0IHJlbHkgb24/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBkb2VzIGl0IG5lZWQgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBUaGlzIGlzIGFsbCBhYm91dCBtYXBwaW5nIG91dCBpdHMgcm9sZSBhbmQgdW5kZXJzdGFuZGluZyBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlZ3JhdGlvbiBvciBjb25mbGljdC4gVGltZSB0byBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIGJlZm9yZSBJIGNhbiBldmVuIHN0YXJ0IHRvIHRyb3VibGVzaG9vdCBvciBvcHRpbWl6ZSBhbnl0aGluZy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjQ2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MDUuNzc4MDcxMjY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHQgIGZpcm13YXJlIHRvIGltcGxlbWVudCBVRUZJIHNlY3VyZSBib290LlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE5MzpcXHRcXG4gMTk0OlxcdGNvbmZpZyBLVk1fSFlQRVJWXFxuIDE5NTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuIDE5NjpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG4gMTk3OlxcdFxcdGRlZmF1bHQgeVxcbiAxOTg6XFx0XFx0aGVscFxcbiAxOTk6XFx0XFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgZW11bGF0aW5nIE1pY3Jvc29mdCBIeXBlci1WLiAgVGhpcyBhbGxvd3MgS1ZNXFxuIDIwMDpcXHRcXHQgIHRvIGV4cG9zZSBhIHN1YnNldCBvZiB0aGUgcGFyYXZpcnR1YWxpemVkIGludGVyZmFjZXMgZGVmaW5lZCBpbiB0aGVcXG4gMjAxOlxcdFxcdCAgSHlwZXItViBIeXBlcnZpc29yIFRvcC1MZXZlbCBGdW5jdGlvbmFsIFNwZWNpZmljYXRpb24gKFRMRlMpOlxcbiAyMDI6XFx0XFx0ICBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy92aXJ0dWFsaXphdGlvbi9oeXBlci12LW9uLXdpbmRvd3MvcmVmZXJlbmNlL3RsZnNcXG4gMjAzOlxcdFxcdCAgVGhlc2UgaW50ZXJmYWNlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBjb3JyZWN0IGFuZCBwZXJmb3JtYW50IGZ1bmN0aW9uaW5nXFxuIDIwNDpcXHRcXHQgIG9mIFdpbmRvd3MgYW5kIEh5cGVyLVYgZ3Vlc3RzIG9uIEtWTS5cXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiWVxcXCIuXFxuIDIwNzpcXHRcXG4gMjA4OlxcdGNvbmZpZyBLVk1fWEVOXFxuIDIwOTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MDUuNzc4MTUzNjM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMjQ2OTgyNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNLUh5cGVyViBUaW1lciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGRlcGVuZGVuY3kgY2hhaW4uIFRoaXMgYEtWTV9YODZgIGZlYXR1cmUsIHdoaWNoIEknbSBhc3N1bWluZyBpcyByZWxhdGVkIHRvIHg4NiB2aXJ0dWFsaXphdGlvbiwgaGluZ2VzIG9uIGBLVk1gIGl0c2VsZi4gVGhlcmVmb3JlLCB0byBlbnN1cmUgZXZlcnl0aGluZyBmdW5jdGlvbnMgYXMgaW50ZW5kZWQsIHdlJ3JlIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBib3RoIGBLVk1gIGFuZCBgS1ZNX0hZUEVSVmAgZW5hYmxlZC4gVGhhdCBzZWVtcyBsb2dpY2FsLlxuXG5Ob3csIGRpZ2dpbmcgZGVlcGVyLCBJIHNlZSBhIHBhdHRlcm4gaW4gc29tZSBmdW5jdGlvbiByZWxhdGlvbnNoaXBzLiBUaGUgYHN5bmljX2RlbGl2ZXJfbXNnYCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLCBidXQgbm90IHVudXN1YWwuIFRoZW4sIGxvb2tpbmcgYXQgaXRzIGNhbGxlciwgYHN0aW1lcl9zZW5kX21zZ2AsIEkgc2VlIGl0J3MgYWxzbyBzdGF0aWMuIEFscmlnaHQuIERpZ2dpbmcgZGVlcGVyIGFnYWluLCBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBjYWxsaW5nIGBzdGltZXJfc2VuZF9tc2dgLCBgc3RpbWVyX2V4cGlyYXRpb25gLCBpcyBhbHNvIHN0YXRpYy4gT2theS4gTm90ZWQuXG5cbkhvd2V2ZXIsIHRoZSBmaW5hbCBjYWxsZXIgaW4gdGhhdCBwYXRoLCBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AsIGlzICpleHBvcnRlZCosIHdoaWNoIG1lYW5zIGl0J3MgYWNjZXNzaWJsZSBvdXRzaWRlIHRoZSBjdXJyZW50IHNjb3BlLiBBaCwgbm93IHRoaXMgaXMgdGhlIGludGVyZXN0aW5nIG9uZS4gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSBvbmUgdGhhdCBtYWtlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGludGVybmFsIGFuZCBleHRlcm5hbCBjb2RlLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgaW50ZXJhY3Rpb24gaXMgbWFkZS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODoyNi4wMjUxMzkyNzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjUyOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz04NjY9c3RhdGljIHZvaWQgc3RpbWVyX2V4cGlyYXRpb24oc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg4My1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODg0OnZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg4NS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg9MjYyPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHZfaW52dHNjX3N1cHByZXNzZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oLTI4NC1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6Mjg1OnZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjI2LjA3MDc5NzY1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYzMTU4NTUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgSHlwZXItViBUaW1lciBhbmQgU3luSUMgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBhcyBhIGtleSBlbnRyeSBwb2ludCBmb3IgdGhlIEh5cGVyLVYgdGltZXIgaGFuZGxpbmcuIFRoYXQgZmVlbHMgcmlnaHQsIGl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IG90aGVyIHBvdGVudGlhbCB3YXlzIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGltZXJzIG9yIHRoZSBTeW5JQyBjb3VsZCBiZSB0cmlnZ2VyZWQgb3IgaGFuZGxlZC5cblxuSG1tLCB3YWl0LCBJIHRob3VnaHQgYHN5bmljX2RlbGl2ZXJfbXNnYCBoYWQgYSBjb25uZWN0aW9uIHRocm91Z2ggYGt2bV9odl9zeW5pY19zZW5kX2VvaWAsIGJ1dCBub3cgSSdtIHRoaW5raW5nIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIERpZCBJIG1ha2UgYSBtaXN0YWtlPyBMZXQgbWUgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgd2l0aCBgZ3JlcGAuIE9rYXksIHNvIGEgcXVpY2sgYGdyZXBgIGNvbmZpcm1zIGBzeW5pY19kZWxpdmVyX21zZ2AgKmlzKiBhY3R1YWxseSBvbmx5IGNhbGxlZCBmcm9tIGBzdGltZXJfc2VuZF9tc2dgLiBSaWdodCwgbGV0J3MgZG91YmxlIGNoZWNrIHRoYXQsIGFuZCBtYWtlIHN1cmUgdGhhdCdzIHRoZSBvbmx5IGNhbGwgbG9jYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTowMy43MDIzODY4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgxMTUyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3luaWNfZGVsaXZlcl9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzY4PXN0YXRpYyBpbnQgc3RpbWVyX2dldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCAqcGNvdW50KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTc3My1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Nzc0OnN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTc3NS1cXHRcXHRcXHQgICAgIHN0cnVjdCBodl9tZXNzYWdlICpzcmNfbXNnLCBib29sIG5vX3JldHJ5KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTgzMz1zdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ3LVxcdHBheWxvYWQtXFx1MDAzZWRlbGl2ZXJ5X3RpbWUgPSBnZXRfdGltZV9yZWZfY291bnRlcih2Y3B1LVxcdTAwM2Vrdm0pO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NDg6XFx0cmV0dXJuIHN5bmljX2RlbGl2ZXJfbXNnKHRvX2h2X3N5bmljKHZjcHUpLFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04NDktXFx0XFx0XFx0XFx0IHN0aW1lci1cXHUwMDNlY29uZmlnLnNpbnR4LCBtc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjAzLjgwMDUwNjgxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg5NzkyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVGltaW5nIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgdGltaW5nIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHJlbGF0ZWQgdG8gYHN0aW1lcl9zZW5kX21zZ2AuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gaGVyZS4gTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgaXQgYXBwZWFycyB0aGF0IGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCB0byB0aGlzIHRpbWluZyBsb2dpYy4gTm93LCBhIHJlZCBmbGFnIGp1c3Qgd2VudCB1cCDigJMgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIGlzIGNhbGxlZCBmcm9tIGB2Y3B1X2VudGVyX2d1ZXN0YC4gVGhhdCdzIGEgKnZlcnkqIGhvdCBwYXRoLCBtZWFuaW5nIGFueSBpbmVmZmljaWVuY3kgaGVyZSB3aWxsIGhhdmUgYSBodWdlIHBlcmZvcm1hbmNlIGltcGFjdC4gV2UgbmVlZCB0byBiZSBjYXJlZnVsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnJlcXVlbmN5IG9mIHRoaXMgY2hlY2sgaXMgcmlnaHQuXG5cbkkgc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgb3RoZXIgcG90ZW50aWFsIHRyaWdnZXJzLiBJIG5lZWQgdG8gZmluZCBhbGwgdGhlIHdheXMgYEtWTV9SRVFfSFZfU1RJTUVSYCBnZXRzIHNldCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGUgYW5kIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gTGV0J3Mgc2VlIGhvdyB0aGF0IHJlcXVlc3QgZmxhZyBpcyBiZWluZyBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTowNy43OTAzMDI4NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDQ3MDg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUkVRX0hWX1NUSU1FUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz01OTc9c3RhdGljIHZvaWQgc3RpbWVyX21hcmtfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjAyLVxcdHNldF9iaXQoc3RpbWVyLVxcdTAwM2VpbmRleCwgdmNwdS1cXHUwMDNlYXJjaC5oeXBlcnYtXFx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjYwMzpcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfSFZfU1RJTUVSLCB2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjA0LVxcdGlmICh2Y3B1X2tpY2spXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODA1MT1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxOTQtXFx0XFx0LypcXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODE5NTpcXHRcXHQgKiBLVk1fUkVRX0hWX1NUSU1FUiBoYXMgdG8gYmUgcHJvY2Vzc2VkIGFmdGVyXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxOTYtXFx0XFx0ICogS1ZNX1JFUV9DTE9DS19VUERBVEUsIGJlY2F1c2UgSHlwZXItViBTeW5JQyB0aW1lcnNcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MTk4LVxcdFxcdCAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzo4MTk5OlxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0hWX1NUSU1FUiwgdmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyMDAtXFx0XFx0XFx0a3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyh2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MDguMjQwNzc3OTUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxOTkxNzI2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHN0aW1lcl9tYXJrX3BlbmRpbmdgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBgc3RpbWVyX21hcmtfcGVuZGluZ2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgc2V0cyB0aGUgXCJwZW5kaW5nXCIgZmxhZy4gVGhhdCdzIHRoZSBrZXkuIE5vdywgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgYHN0aW1lcl9tYXJrX3BlbmRpbmdgLiBVbmRlcnN0YW5kaW5nIGhvdyBhbmQgKndoZXJlKiB0aGlzIGZsYWcgaXMgc2V0IGlzIGFic29sdXRlbHkgY3J1Y2lhbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgdGltZXIgaXMgY29uc2lkZXJlZCBwZW5kaW5nLiBJJ20gbG9va2luZyBmb3IgdGhlIGxvZ2ljIHRoYXQgdHJpZ2dlcnMgdGhpcyBzdGF0ZSBjaGFuZ2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHRpbWVyIGV4cGlyeSwgdXNlciBpbnRlcmFjdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSB0aG9yb3VnaCBjYWxsIGdyYXBoIGFuYWx5c2lzIHdpbGwgcmV2ZWFsIHRoZSBjb250ZXh0cyB0aGF0IGluZmx1ZW5jZSB0aW1lciBiZWhhdmlvci4gVW5kZXJzdGFuZGluZyB0aGUgXCJwZW5kaW5nXCIgc3RhdGUgaXMgY3JpdGljYWwgdG8gdHJvdWJsZXNob290aW5nIHRpbWluZyBpc3N1ZXMgYW5kIHBvdGVudGlhbGx5IG9wdGltaXppbmcgdGltZXIgdXNhZ2UuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIGNhbGxlciBhbmFseXNpcyB3aXRoIHRoZSBmdW5jdGlvbidzIGludGVybmFsIGltcGxlbWVudGF0aW9uIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIGluIHRoZSBzeXN0ZW0uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjE0LjQzOTk1NjQ3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTc0ODUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGltZXJfbWFya19wZW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jLTY0LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo2NTpzdGF0aWMgdm9pZCBzdGltZXJfbWFya19wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcixcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjYtXFx0XFx0XFx0XFx0Ym9vbCB2Y3B1X2tpY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIyNT1zdGF0aWMgdm9pZCBrdm1faHZfbm90aWZ5X2Fja2VkX3NpbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc2ludClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNDAtXFx0XFx0ICAgIHN0aW1lci1cXHUwMDNlY29uZmlnLnNpbnR4ID09IHNpbnQpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI0MTpcXHRcXHRcXHRzdGltZXJfbWFya19wZW5kaW5nKHN0aW1lciwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNDItXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTU3OD1zdGF0aWMgdTY0IGdldF90aW1lX3JlZl9jb3VudGVyKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy01OTYtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjU5NzpzdGF0aWMgdm9pZCBzdGltZXJfbWFya19wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcixcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNTk4LVxcdFxcdFxcdFxcdGJvb2wgdmNwdV9raWNrKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTYyMT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgc3RpbWVyX3RpbWVyX2NhbGxiYWNrKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy02MjctXFx0XFx0XFx0XFx0ICAgICBzdGltZXItXFx1MDAzZWluZGV4KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NjI4OlxcdHN0aW1lcl9tYXJrX3BlbmRpbmcoc3RpbWVyLCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjI5LVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTY1MD1zdGF0aWMgaW50IHN0aW1lcl9zdGFydChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjg4LVxcdFxcdCAqL1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo2ODk6XFx0XFx0c3RpbWVyX21hcmtfcGVuZGluZyhzdGltZXIsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjkwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTcwMz1zdGF0aWMgaW50IHN0aW1lcl9zZXRfY29uZmlnKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lciwgdTY0IGNvbmZpZyxcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03MjktXFx0aWYgKHN0aW1lci1cXHUwMDNlY29uZmlnLmVuYWJsZSlcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NzMwOlxcdFxcdHN0aW1lcl9tYXJrX3BlbmRpbmcoc3RpbWVyLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTczMS1cXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz03MzU9c3RhdGljIGludCBzdGltZXJfc2V0X2NvdW50KHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lciwgdTY0IGNvdW50LFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTc1Ni1cXHRpZiAoc3RpbWVyLVxcdTAwM2Vjb25maWcuZW5hYmxlKVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo3NTc6XFx0XFx0c3RpbWVyX21hcmtfcGVuZGluZyhzdGltZXIsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOToxNC41Mjk3MDkyNzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMzEwNjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEludGVycnVwdCBUcmlnZ2VycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlc2UgZnVuY3Rpb25zIOKAkyBga3ZtX2h2X25vdGlmeV9hY2tlZF9zaW50YCwgYHN0aW1lcl90aW1lcl9jYWxsYmFja2AsIGBzdGltZXJfc3RhcnRgLCBgc3RpbWVyX3NldF9jb25maWdgLCBhbmQgYHN0aW1lcl9zZXRfY291bnRgIOKAkyBzZWVtIHRvIGJlIHRoZSBwb3RlbnRpYWwgY3VscHJpdHMgZm9yIHRyaWdnZXJpbmcgdGhpcyBpbnRlcnJ1cHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwYXRoIG9mIGV4ZWN1dGlvbiBoZXJlLlxuXG5TcGVjaWZpY2FsbHksIGBzdGltZXJfc2V0X2NvbmZpZ2AgYW5kIGBzdGltZXJfc2V0X2NvdW50YCBhcmUgY2FsbGVkIGluIHJlc3BvbnNlIHRvIHRoZSBndWVzdCB3cml0aW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIE1TUnMsIHdoaWNoIGltbWVkaWF0ZWx5IGRyYXdzIG15IGF0dGVudGlvbi4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgYXJlYSB0byBmb2N1cyBvbiBmb3IgY29udHJvbC4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBzdGltZXJfc2V0X2NvbmZpZ2AgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUsIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDU0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MTguODMyODE4Mzg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjkxNTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGltZXJfc2V0X2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz02NTA9c3RhdGljIGludCBzdGltZXJfc3RhcnQoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTcwMi1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NzAzOnN0YXRpYyBpbnQgc3RpbWVyX3NldF9jb25maWcoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCB1NjQgY29uZmlnLFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03MDQtXFx0XFx0XFx0ICAgICBib29sIGhvc3QpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzE5LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo3MjA6XFx0dHJhY2Vfa3ZtX2h2X3N0aW1lcl9zZXRfY29uZmlnKGh2X3N0aW1lcl90b192Y3B1KHN0aW1lciktXFx1MDAzZXZjcHVfaWQsXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTcyMS1cXHRcXHRcXHRcXHQgICAgICAgc3RpbWVyLVxcdTAwM2VpbmRleCwgY29uZmlnLCBob3N0KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNTQzPXN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE2MjgtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE2Mjk6XFx0XFx0cmV0dXJuIHN0aW1lcl9zZXRfY29uZmlnKHRvX2h2X3N0aW1lcih2Y3B1LCB0aW1lcl9pbmRleCksXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE2MzAtXFx0XFx0XFx0XFx0XFx0IGRhdGEsIGhvc3QpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3RyYWNlLmg9MTI3OT1UUkFDRV9FVkVOVChrdm1faHZfc3luaWNfc2V0X21zcixcXG4tLVxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTEzMDEtLypcXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaDoxMzAyOiAqIFRyYWNlcG9pbnQgZm9yIHN0aW1lcl9zZXRfY29uZmlnLlxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTEzMDMtICovXFxuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTMwNDpUUkFDRV9FVkVOVChrdm1faHZfc3RpbWVyX3NldF9jb25maWcsXFxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMTMwNS1cXHRUUF9QUk9UTyhpbnQgdmNwdV9pZCwgaW50IHRpbWVyX2luZGV4LCB1NjQgY29uZmlnLCBib29sIGhvc3QpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOToxOC45Mjk3Mzc1ODNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgxNjk0MjIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBga3ZtX2h2X3NldF9tc3JgIGZ1bmN0aW9uLCB0aGF0J3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byBmb2N1cyBvbi4gSXQgZ2V0cyBjYWxsZWQgd2hlbiBhIGd1ZXN0IFZNIHVzZXMgYFdSTVNSYCB0byB3cml0ZSB0byBIeXBlci1WIE1vZGVsLVNwZWNpZmljIFJlZ2lzdGVycywgc28sIHllcywgdGhhdCdzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29kZSBwYXRoIGZyb20gd2l0aGluIHRoZSBndWVzdC4gVGhhdCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYWJzb2x1dGVseS4gVGhlIGd1ZXN0LWNvbnRyb2xsZWQgaW5wdXRzIGFyZSB0aGUga2V5LlxuXG5MZXQncyBkcmlsbCBkb3duIGEgYml0IGRlZXBlci4gU2luY2UgSSdtIGZ1enppbmcsIG15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIGBrdm1faHZfc2V0X21zcmAgYW5kIGFsc28gYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIHRvIHNlZSBob3cgdGhvc2Ugd29yayB3aXRoIHRoZSBNU1Igc2V0dGluZy5cblxuTmV4dCBzdGVwLCBjaGVjayBpZiBga3ZtX2h2X3NldF9tc3JgIGlzIGV4cG9ydGVkIG9yIGlmIGl0J3Mgc3RhdGljLiBUaGF0IHdpbGwgaW1wYWN0IG15IGFwcHJvYWNoIHRvIGluc3RydW1lbnRhdGlvbi4gR290dGEgZGV0ZXJtaW5lIGFjY2VzcyBtZXRob2RzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkzOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOToyMy43NDY2ODE1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1MDE1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGt2bV9odl9zZXRfbXNyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jPTEzODc9dm9pZCBrdm1faHZfeHNhdmVzX3hzYXZlY19tYXliZV93YXJuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xMzk5LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNDAwOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3JfcHcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTQwMS1cXHRcXHRcXHQgICAgIGJvb2wgaG9zdClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNTM0PXN0YXRpYyB1NjQgY3VycmVudF90YXNrX3J1bnRpbWVfMTAwbnModm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNTQyLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNTQzOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNTQ0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNzExPXN0YXRpYyBpbnQga3ZtX2h2X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhLFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3NzUtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3NzY6aW50IGt2bV9odl9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhLCBib29sIGhvc3QpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3Nzcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oPTE5Mz1zdGF0aWMgaW5saW5lIHUzMiBrdm1faHZfZ2V0X3ZwaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oLTE5OS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6MjAwOmludCBrdm1faHZfc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMjAxLWludCBrdm1faHZfZ2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhLCBib29sIGhvc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOToyMy44MzAxOTA4MzlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxOTIwNTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBNU1IgU2V0dGluZyBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrdm1faHZfc2V0X21zcl9jb21tb25gLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIGdyYXBoLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBrbm93IGlmIGBrdm1faHZfc2V0X21zcmAgY2FsbHMgaXQuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gS25vd2luZyB0aGUgY2FsbGVyLWNhbGxlZSByZWxhdGlvbnNoaXBzIGlzIGZ1bmRhbWVudGFsIHRvIGdyYXNwaW5nIHRoZSBmdW5jdGlvbidzIHJvbGUgaW4gdGhlIGxhcmdlciBLVk0gaHlwZXJ2aXNvciBjb250ZXh0LCBhbmQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTI1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MzAuMjQ5Mzk3ODAzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjY1MjYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faHZfc2V0X21zclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jPTEzODc9dm9pZCBrdm1faHZfeHNhdmVzX3hzYXZlY19tYXliZV93YXJuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xMzk5LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNDAwOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3JfcHcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTQwMS1cXHRcXHRcXHQgICAgIGJvb2wgaG9zdClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNTM0PXN0YXRpYyB1NjQgY3VycmVudF90YXNrX3J1bnRpbWVfMTAwbnModm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNTQyLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNTQzOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNTQ0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNzExPXN0YXRpYyBpbnQga3ZtX2h2X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhLFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3NzUtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3NzY6aW50IGt2bV9odl9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhLCBib29sIGhvc3QpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3Nzcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3ODktXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2aHYtXFx1MDAzZWh2X2xvY2spO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzkwOlxcdFxcdHIgPSBrdm1faHZfc2V0X21zcl9wdyh2Y3B1LCBtc3IsIGRhdGEsIGhvc3QpO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzkxLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aHYtXFx1MDAzZWh2X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3OTMtXFx0fSBlbHNlXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3OTQ6XFx0XFx0cmV0dXJuIGt2bV9odl9zZXRfbXNyKHZjcHUsIG1zciwgZGF0YSwgaG9zdCk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3OTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTozMC4zNDIwNTQ4ODJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwNzMyNzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHlwZXItViBNU1IgU2V0dGluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGt2bV9odl9zZXRfbXNyX2NvbW1vbmAgKmRvZXMqIGluZGVlZCBjYWxsIGBrdm1faHZfc2V0X21zcmAuIFRoYXQncyBhIHNvbGlkIHBvaW50IHRvIGZvY3VzIG9uOyBga3ZtX2h2X3NldF9tc3JfY29tbW9uYCBsb29rcyBsaWtlIGEga2V5IHN5bWJvbCB0byBkaXZlIGludG8uIEdpdmVuIGl0cyByb2xlIGluIHNldHRpbmcgTVNScywgaXQgcHJvYmFibHkgaGFzIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zLiBJIGFsc28gd2FudCB0byBrZWVwIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBpbiBtaW5kIOKAkyBpdCdzIGFub3RoZXIgYXJlYSB3aGVyZSBIeXBlci1WIGludGVyYWN0aW9ucyBvY2N1ci5cblxuTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBhbmFseXplIHRoZSBjYWxsZXJzIG9mIGBrdm1faHZfc2V0X21zcl9jb21tb25gLiBVbmRlcnN0YW5kaW5nIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aWxsIGlsbHVtaW5hdGUgaXRzIGJyb2FkZXIgY29udGV4dCBhbmQgcmV2ZWFsIHdoYXQgdHJpZ2dlcnMgdGhlc2UgTVNSIHNldHRpbmdzLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbGdyYXBoIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODAyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MzQuOTQ5Mzg0MTIzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDY0MTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faHZfc2V0X21zcl9jb21tb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTcxMT1zdGF0aWMgaW50IGt2bV9odl9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSxcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzc1LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzc2OmludCBrdm1faHZfc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzc3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuaD0xOTM9c3RhdGljIGlubGluZSB1MzIga3ZtX2h2X2dldF92cGluZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0xOTktXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oOjIwMDppbnQga3ZtX2h2X3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsIGJvb2wgaG9zdCk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5oLTIwMS1pbnQga3ZtX2h2X2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSwgYm9vbCBob3N0KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc4MS1cXHRjYXNlIEhWX1g2NF9NU1JfVFNDX0lOVkFSSUFOVF9DT05UUk9MOlxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTc4MjpcXHRcXHRyZXR1cm4ga3ZtX2h2X3NldF9tc3JfY29tbW9uKHZjcHUsIG1zciwgZGF0YSxcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3ODMtXFx0XFx0XFx0XFx0XFx0ICAgICBtc3JfaW5mby1cXHUwMDNlaG9zdF9pbml0aWF0ZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTozNS4wNDQwMzEzNzFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY1NDM0NDAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBIeXBlci1WIE1TUiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrdm1fc2V0X21zcl9jb21tb25gIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgdGhlIGNhbGxlciBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIGBrdm1faHZfc2V0X21zcl9jb21tb25gIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5MZXQgbWUgc3VtbWFyaXplIHRoZSBpbml0aWFsIGZpbmRpbmdzOiBpdCBsb29rcyBsaWtlIHRoaXMgYXJlYSBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIGFuZCB0aGUgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gYGt2bV9odl9zZXRfbXNyX2NvbW1vbmAgYW5kIGFsc28gb24gdGhlIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBmdW5jdGlvbi4gVGhlIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBhcmUgYEtWTWAgYW5kIGBLVk1fSFlQRVJWYC5cblxuTm93LCBJIHNob3VsZCBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGBLVk1fWDg2YCBleGlzdHMgYXMgYSBgZGVmX3RyaXN0YXRlYCwgYnV0IGl0J3Mgbm90IGRpcmVjdGx5IHNlbGVjdGFibGUgYnkgdGhlIHVzZXIsIGRlcGVuZGluZyBpbnN0ZWFkIG9uIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYC4gSSdsbCB3YW50IHRvIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZm9yIHRoZSBzcGVjaWZpYyBpbXBsaWNhdGlvbnMgb2YgYEtWTV9YODZgIGFuZCBob3cgaXRzIGRlcGVuZGFuY2llcyBtaWdodCBpbXBhY3Qgb3VyIGZ1enppbmcgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjI2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjQyLjY5ODM3OTYxN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4MzkzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9YODZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6NDIuNzY0MjI0NDY2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzQ1Mzc2MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh5cGVyLVYgU3ludGhldGljIFRpbWVyIFBhdGNoKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gSHlwZXItViBzeW50aGV0aWMgdGltZXJzLiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBLVk0sIEkgc2hvdWxkIHByb2JhYmx5IGVuc3VyZSB0aGF0IHdlIGhhdmUgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBlbmFibGVkLCBhbHRob3VnaCBzeXprYWxsZXIgdXN1YWxseSBoYW5kbGVzIHRob3NlLiBGb3IgdGhpcyBpbml0aWFsIHNldHVwLCBJJ2xsIGxpc3QgYEtWTWAgYW5kIGBLVk1fSFlQRVJWYCBzcGVjaWZpY2FsbHksIHRvIGJlIHNhZmUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYHN5bmljX2RlbGl2ZXJfbXNnYC4gSSBxdWlja2x5IHNlZSB0aGF0IGBzdGltZXJfc2VuZF9tc2dgIGNhbGxzIGl0LCBgc3RpbWVyX3NlbmRfbXNnYCBpcyB0cmlnZ2VyZWQgYnkgYHN0aW1lcl9leHBpcmF0aW9uYCwgd2hpY2gsIGluIHR1cm4sIGlzIGludm9rZWQgYnkgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgLiBBbmQgZmluYWxseSwgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIGlzIGNhbGxlZCBieSBgdmNwdV9lbnRlcl9ndWVzdGAuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgS1ZNIGd1ZXN0IGV4ZWN1dGlvbiBwYXRoLCBzbyB0aGF0IGNvbmZpcm1zIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuXG5cblRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgYHN5bmljX2RlbGl2ZXJfbXNnYCwgY2xlYXJpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdThgIGJlZm9yZSBzZXR0aW5nIGBtc2dfcGVuZGluZ2AuIFRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEh5cGVyLVYgc3ludGhldGljIHRpbWVyIG1lc3NhZ2UgZGVsaXZlcnkgbWVjaGFuaXNtLiBJdCdzIGEgcGVyZmVjdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQgYWx0ZXJzIGEgY29yZSBtZXNzYWdlIGhhbmRsaW5nIHByb2Nlc3MuIEknbSBnb2luZyB0byBmbGFnIHRoaXMgYXMgaGlnaC1wcmlvcml0eSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzIGluIG1lc3NhZ2UgaGFuZGxpbmcuXG5cblRpbWUgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIxMSwiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6NTQuMTA5NjA0Mjc2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTQzMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faHZfc2V0X21zcl9jb21tb25cIixcbiAgICBcImt2bV9odl9wcm9jZXNzX3N0aW1lcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBzeW50aGV0aWMgdGltZXIgbWVzc2FnZSBkZWxpdmVyeSBsb2dpYyBpbiBLVk0gYnkgY2xlYXJpbmcgYSBtZXNzYWdlIGZsYWcgYmVmb3JlIHNldHRpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgdGhhdCBoYW5kbGVzIGd1ZXN0IE1TUiB3cml0ZXMgYW5kIHRpbWVyIGV4cGlyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0hZUEVSVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9odl9zZXRfbXNyX2NvbW1vblwiLFxuICAgIFwia3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIHN5bnRoZXRpYyB0aW1lciBtZXNzYWdlIGRlbGl2ZXJ5IGxvZ2ljIGluIEtWTSBieSBjbGVhcmluZyBhIG1lc3NhZ2UgZmxhZyBiZWZvcmUgc2V0dGluZyBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgZ3Vlc3QgTVNSIHdyaXRlcyBhbmQgdGltZXIgZXhwaXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjU0LjI1MTc1NDQ3NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMzkyNzMyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTo1NC4yNTIyMTE0NTRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQxMzg4MTA4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluZm9ybWF0aW9uIGxlYWsgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgd3JpdHRlbiB0byBndWVzdCBtZW1vcnkuIFNwZWNpZmljYWxseSwgYGh2X2hkcmAgaXMgYW4gdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZS4gVGhlIGNvZGUgc2V0cyBhIHNpbmdsZSBiaXRmaWVsZCBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxYCwgbGVhdmluZyB0aGUgcmVtYWluaW5nIDcgYml0cyBvZiB0aGUgYG1lc3NhZ2VfZmxhZ3NgIGJ5dGUgdW5pbml0aWFsaXplZC4gVGhpcyBieXRlIGlzIHRoZW4gd3JpdHRlbiB0byBndWVzdCBtZW1vcnkgdmlhIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKClgLCB3aGljaCBpbnRlcm5hbGx5IHVzZXMgYF9fY29weV90b191c2VyKClgIHRvIHdyaXRlIHRvIHRoZSB1c2Vyc3BhY2UtbWFwcGVkIGd1ZXN0IG1lbW9yeS4gVGhpcyBsZWFrcyA3IGJpdHMgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHRoaXMgZXhhY3QgY2xhc3Mgb2YgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYmU2MDk3MTliYTU4OWY0YWZhM2U1NzZkZWY3NWMyMjE2N2ViMGIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDc6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbmluZGV4IDYwNDY1MWNiMjczOTkuLjhkMjY2OWQ4ZWYzNDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuQEAgLTgwMiw3ICs4MDIsOSBAQCBzdGF0aWMgaW50IHN5bmljX2RlbGl2ZXJfbXNnKHN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWMsIHUzMiBzaW50LFxuIFx0XHRpZiAobm9fcmV0cnkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4rXHRcdGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO1xuIFx0XHRodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7XG4rXG4gXHRcdHIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHZjcHUsIG1zZ19wYWdlX2dmbixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2aHZfaGRyLm1lc3NhZ2VfZmxhZ3MsXG4gXHRcdFx0XHRcdCAgICAgIG1zZ19vZmYgK1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6NTQuMjUyMjEyMzE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyOTM5NzYzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSBjaGFuZ2UsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIGV4cGVyaWVuY2VkIGtlcm5lbCBkZXZlbG9wZXI6XG5cbioqSW52ZXN0aWdhdGluZyBhIEh5cGVyLVYgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhlcmUncyBhIHBhdGNoIGluIGBhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBLVk0gYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEh5cGVyLVYgZmVhdHVyZXMgb24geDg2IGhhcmR3YXJlLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIHRoYXQgYXJlIGJlaW5nIGV4YW1pbmVkIGFyZSBmcm9tIHRoZSBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3NgIHN0cnVjdHVyZS4gIFRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW5zZXJ0aW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4ID0gMDtgICpiZWZvcmUqIHNldHRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMTtgLiBUaGF0IHN1Z2dlc3RzIHNvbWUgdGltaW5nIGRlcGVuZGVuY3kgb3IgYW4gaW5pdGlhbGl6YXRpb24gaXNzdWUuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBob3N0IGludGVyYWN0cyB3aXRoIHRoZSBndWVzdCdzIEh5cGVyLVYgY29tcG9uZW50cyBhbmQgYSBtZXNzYWdlIHNpZ25hbGluZyBtZWNoYW5pc20uXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoeSAqdGhpcyogc3BlY2lmaWMgb3JkZXI/IFdoYXQncyB0aGUgY29udGV4dD8gIElzIGBhc3U4YCBzdXBwb3NlZCB0byBiZSB6ZXJvZWQgb3V0IHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXM/IElzIHRoaXMgYSByYWNlIGNvbmRpdGlvbiBmaXgsIGEgYnVnIGluIHRoZSBvcmlnaW5hbCBkZXNpZ24sIG9yIGFuIG9wdGltaXphdGlvbj8gIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiB0aGlzIGNvZGUgaXMgaW4sIHRoZSBkYXRhIGl0J3MgbWFuaXB1bGF0aW5nLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBIeXBlci1WIEtWTSBpbXBsZW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgd2hhdCB0aGUgYGFzdThgIGZpZWxkIHNpZ25pZmllcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgZml4LCBvciBhIGNoYW5nZSBpbiB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eS4gSSdsbCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6NTkuNTQ2MTkwNzE1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTg4MTIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeW5pY19kZWxpdmVyX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jPTc2OD1zdGF0aWMgaW50IHN0aW1lcl9nZXRfY291bnQoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCB1NjQgKnBjb3VudClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjc3NDpzdGF0aWMgaW50IHN5bmljX2RlbGl2ZXJfbXNnKHN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWMsIHUzMiBzaW50LFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHZfbWVzc2FnZSAqc3JjX21zZywgYm9vbCBub19yZXRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz04MzM9c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cXHRwYXlsb2FkLVxcdTAwM2VkZWxpdmVyeV90aW1lID0gZ2V0X3RpbWVfcmVmX2NvdW50ZXIodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODQ4OlxcdHJldHVybiBzeW5pY19kZWxpdmVyX21zZyh0b19odl9zeW5pYyh2Y3B1KSxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVxcdFxcdFxcdFxcdCBzdGltZXItXFx1MDAzZWNvbmZpZy5zaW50eCwgbXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTo1OS42NDIwNzc3ODNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5MTQxMTMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgc3luaWNfZGVsaXZlcl9tc2dgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBzeW5pY19kZWxpdmVyX21zZ2AgZnVuY3Rpb24uIExldCdzIHNlZS4uLiBpdCdzIGluIGBhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggSHlwZXItViBpbnRlZ3JhdGlvbiBvbiB4ODYsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEtWTSBjb250ZXh0LiBUaGlzIG1lYW5zIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIG1lY2hhbmlzbSBmb3IgZGVsaXZlcmluZyBtZXNzYWdlcyBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgdmlhIHRoZSBTeW5JQyBpbnRlcmZhY2UuIEdpdmVuIHRoZSBmaWxlbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIGlzIGEgY3JpdGljYWwgcGllY2UgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBhbmQgcmVzcG9uc2l2ZW5lc3Mgd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZXNzYWdlcyBhcmUgc3RydWN0dXJlZCwgaG93IHRoZXkncmUgcXVldWVkLCB3aGVyZSB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIGFyZSBsb2NhdGVkLiBUaGlzIGlzIHRoZSBsb3ctbGV2ZWwsIGNyaXRpY2FsIHN0dWZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzcyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6MDMuMjMzNDkyMDZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzc0OlxcdHN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXFxuIDc3NTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBodl9tZXNzYWdlICpzcmNfbXNnLCBib29sIG5vX3JldHJ5KVxcbiA3NzY6XFx0e1xcbiA3Nzc6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaHZfc3luaWNfdG9fdmNwdShzeW5pYyk7XFxuIDc3ODpcXHRcXHRpbnQgbXNnX29mZiA9IG9mZnNldG9mKHN0cnVjdCBodl9tZXNzYWdlX3BhZ2UsIHNpbnRfbWVzc2FnZVtzaW50XSk7XFxuIDc3OTpcXHRcXHRnZm5fdCBtc2dfcGFnZV9nZm47XFxuIDc4MDpcXHRcXHRzdHJ1Y3QgaHZfbWVzc2FnZV9oZWFkZXIgaHZfaGRyO1xcbiA3ODE6XFx0XFx0aW50IHI7XFxuIDc4MjpcXHRcXG4gNzgzOlxcdFxcdGlmICghKHN5bmljLVxcdTAwM2Vtc2dfcGFnZSBcXHUwMDI2IEhWX1NZTklDX1NJTVBfRU5BQkxFKSlcXG4gNzg0OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA3ODU6XFx0XFxuIDc4NjpcXHRcXHRtc2dfcGFnZV9nZm4gPSBzeW5pYy1cXHUwMDNlbXNnX3BhZ2UgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzg3OlxcdFxcbiA3ODg6XFx0XFx0LypcXG4gNzg5OlxcdFxcdCAqIFN0cmljdGx5IGZvbGxvd2luZyB0aGUgc3BlYy1tYW5kYXRlZCBvcmRlcmluZyB3b3VsZCBhc3N1bWUgc2V0dGluZ1xcbiA3OTA6XFx0XFx0ICogLm1zZ19wZW5kaW5nIGJlZm9yZSBjaGVja2luZyAubWVzc2FnZV90eXBlLiAgSG93ZXZlciwgdGhpcyBmdW5jdGlvblxcbiA3OTE6XFx0XFx0ICogaXMgb25seSBjYWxsZWQgaW4gdmNwdSBjb250ZXh0IHNvIHRoZSBlbnRpcmUgdXBkYXRlIGlzIGF0b21pYyBmcm9tXFxuIDc5MjpcXHRcXHQgKiBndWVzdCBQT1YgYW5kIHRodXMgdGhlIGV4YWN0IG9yZGVyIGhlcmUgZG9lc24ndCBtYXR0ZXIuXFxuIDc5MzpcXHRcXHQgKi9cXG4gNzk0OlxcdFxcdHIgPSBrdm1fdmNwdV9yZWFkX2d1ZXN0X3BhZ2UodmNwdSwgbXNnX3BhZ2VfZ2ZuLCBcXHUwMDI2aHZfaGRyLm1lc3NhZ2VfdHlwZSxcXG4gNzk1OlxcdFxcdFxcdFxcdFxcdCAgICAgbXNnX29mZiArIG9mZnNldG9mKHN0cnVjdCBodl9tZXNzYWdlLFxcbiA3OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0aGVhZGVyLm1lc3NhZ2VfdHlwZSksXFxuIDc5NzpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihodl9oZHIubWVzc2FnZV90eXBlKSk7XFxuIDc5ODpcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuIDc5OTpcXHRcXHRcXHRyZXR1cm4gcjtcXG4gODAwOlxcdFxcbiA4MDE6XFx0XFx0aWYgKGh2X2hkci5tZXNzYWdlX3R5cGUgIT0gSFZNU0dfTk9ORSkge1xcbiA4MDI6XFx0XFx0XFx0aWYgKG5vX3JldHJ5KVxcbiA4MDM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDgwNDpcXHRcXG4gODA1OlxcdFxcdFxcdGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO1xcbiA4MDY6XFx0XFx0XFx0aHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxO1xcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHRcXHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sXFxuIDgwOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2aHZfaGRyLm1lc3NhZ2VfZmxhZ3MsXFxuIDgxMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBtc2dfb2ZmICtcXG4gODExOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodl9tZXNzYWdlLFxcbiA4MTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGhlYWRlci5tZXNzYWdlX2ZsYWdzKSxcXG4gODEzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihodl9oZHIubWVzc2FnZV9mbGFncykpO1xcbiA4MTQ6XFx0XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbiA4MTU6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuIDgxNjpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gODE3OlxcdFxcdH1cXG4gODE4OlxcdFxcbiA4MTk6XFx0XFx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UodmNwdSwgbXNnX3BhZ2VfZ2ZuLCBzcmNfbXNnLCBtc2dfb2ZmLFxcbiA4MjA6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHNyY19tc2ctXFx1MDAzZWhlYWRlcikgK1xcbiA4MjE6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3JjX21zZy1cXHUwMDNlaGVhZGVyLnBheWxvYWRfc2l6ZSk7XFxuIDgyMjpcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuIDgyMzpcXHRcXHRcXHRyZXR1cm4gcjtcXG4gODI0OlxcdFxcbiA4MjU6XFx0XFx0ciA9IHN5bmljX3NldF9pcnEoc3luaWMsIHNpbnQpO1xcbiA4MjY6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbiA4Mjc6XFx0XFx0XFx0cmV0dXJuIHI7XFxuIDgyODpcXHRcXHRpZiAociA9PSAwKVxcbiA4Mjk6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDgzMDpcXHRcXHRyZXR1cm4gMDtcXG4gODMxOlxcdH1cXG4gODMyOlxcdFxcbiA4MzM6XFx0c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbiA4MzQ6XFx0e1xcbiA4MzU6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaHZfc3RpbWVyX3RvX3ZjcHUoc3RpbWVyKTtcXG4gODM2OlxcdFxcdHN0cnVjdCBodl9tZXNzYWdlICptc2cgPSBcXHUwMDI2c3RpbWVyLVxcdTAwM2Vtc2c7XFxuIDgzNzpcXHRcXHRzdHJ1Y3QgaHZfdGltZXJfbWVzc2FnZV9wYXlsb2FkICpwYXlsb2FkID1cXG4gODM4OlxcdFxcdFxcdFxcdChzdHJ1Y3QgaHZfdGltZXJfbWVzc2FnZV9wYXlsb2FkICopXFx1MDAyNm1zZy1cXHUwMDNldS5wYXlsb2FkO1xcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHQvKlxcbiA4NDE6XFx0XFx0ICogVG8gYXZvaWQgcGlsaW5nIHVwIHBlcmlvZGljIHRpY2tzLCBkb24ndCByZXRyeSBtZXNzYWdlXFxuIDg0MjpcXHRcXHQgKiBkZWxpdmVyeSBmb3IgdGhlbSAod2l0aGluIFxcXCJsYXp5XFxcIiBsb3N0IHRpY2tzIHBvbGljeSkuXFxuIDg0MzpcXHRcXHQgKi9cXG4gODQ0OlxcdFxcdGJvb2wgbm9fcmV0cnkgPSBzdGltZXItXFx1MDAzZWNvbmZpZy5wZXJpb2RpYztcXG4gODQ1OlxcdFxcbiA4NDY6XFx0XFx0cGF5bG9hZC1cXHUwMDNlZXhwaXJhdGlvbl90aW1lID0gc3RpbWVyLVxcdTAwM2VleHBfdGltZTtcXG4gODQ3OlxcdFxcdHBheWxvYWQtXFx1MDAzZWRlbGl2ZXJ5X3RpbWUgPSBnZXRfdGltZV9yZWZfY291bnRlcih2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA4NDg6XFx0XFx0cmV0dXJuIHN5bmljX2RlbGl2ZXJfbXNnKHRvX2h2X3N5bmljKHZjcHUpLFxcbiA4NDk6XFx0XFx0XFx0XFx0XFx0IHN0aW1lci1cXHUwMDNlY29uZmlnLnNpbnR4LCBtc2csXFxuIDg1MDpcXHRcXHRcXHRcXHRcXHQgbm9fcmV0cnkpO1xcbiA4NTE6XFx0fVxcbiA4NTI6XFx0XFxuIDg1MzpcXHRzdGF0aWMgaW50IHN0aW1lcl9ub3RpZnlfZGlyZWN0KHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcXG4gODU0OlxcdHtcXG4gODU1OlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGh2X3N0aW1lcl90b192Y3B1KHN0aW1lcik7XFxuIDg1NjpcXHRcXHRzdHJ1Y3Qga3ZtX2xhcGljX2lycSBpcnEgPSB7XFxuIDg1NzpcXHRcXHRcXHQuZGVsaXZlcnlfbW9kZSA9IEFQSUNfRE1fRklYRUQsXFxuIDg1ODpcXHRcXHRcXHQudmVjdG9yID0gc3RpbWVyLVxcdTAwM2Vjb25maWcuYXBpY192ZWN0b3JcXG4gODU5OlxcdFxcdH07XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdGlmIChsYXBpY19pbl9rZXJuZWwodmNwdSkpXFxuIDg2MjpcXHRcXHRcXHRyZXR1cm4gIWt2bV9hcGljX3NldF9pcnEodmNwdSwgXFx1MDAyNmlycSwgTlVMTCk7XFxuIDg2MzpcXHRcXHRyZXR1cm4gMDtcXG4gODY0OlxcdH1cXG4gODY1OlxcdFxcbiA4NjY6XFx0c3RhdGljIHZvaWQgc3RpbWVyX2V4cGlyYXRpb24oc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0aW50IHIsIGRpcmVjdCA9IHN0aW1lci1cXHUwMDNlY29uZmlnLmRpcmVjdF9tb2RlO1xcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHRzdGltZXItXFx1MDAzZW1zZ19wZW5kaW5nID0gdHJ1ZTtcXG4gODcxOlxcdFxcdGlmICghZGlyZWN0KVxcbiA4NzI6XFx0XFx0XFx0ciA9IHN0aW1lcl9zZW5kX21zZyhzdGltZXIpO1xcbiA4NzM6XFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDowMy4yMzM2ODYyOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDE5OTA4Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBIeXBlci1WIE1lc3NhZ2UgSGVhZGVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgYSBzZWVtaW5nbHkgc21hbGwgY2hhbmdlLCBhZGRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO2AgYmVmb3JlIHNldHRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMTtgLiBUaGF0IHNlZW1zIGJlbmlnbiBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIHNlZSBgaHZfaGRyYCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9uIHRoZSBzdGFjaywgZGVmaW5lZCBhcyBhIGBzdHJ1Y3QgaHZfbWVzc2FnZV9oZWFkZXJgLiBQcmV2aW91c2x5LCB0aGUgY29kZSBkaXJlY3RseSBzZXQgdGhlIGBtc2dfcGVuZGluZ2AgYml0IHdpdGhpbiBgbWVzc2FnZV9mbGFnc2Agd2l0aG91dCBhbnkgcHJpb3IgaW5pdGlhbGl6YXRpb24uIFNpbmNlIGBodl9oZHJgIGlzIHVuaW5pdGlhbGl6ZWQsIGFsbCB0aGUgb3RoZXIgYml0cyB3aXRoaW4gYG1lc3NhZ2VfZmxhZ3NgIHdlcmUgZXNzZW50aWFsbHkgZ2FyYmFnZSDigJMgcmFuZG9tIGJpdHMgZnJvbSB0aGUgc3RhY2suXG5cblRoZW4sIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCBjb21lcyBpbnRvIHBsYXkuIEl0IHdyaXRlcyBgc2l6ZW9mKGh2X2hkci5tZXNzYWdlX2ZsYWdzKWAgYnl0ZXMgdG8gdGhlIGd1ZXN0IHBhZ2UuIFRoaXMgaXMgd2hlcmUgaXQgY2xpY2tzOiAqdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgd2FzIGJlaW5nIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5ISogVGhhdCdzIGEgY2xhc3NpYyBpbmZvLWxlYWsuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGlzc3VlIHRoYXQgdG9vbHMgbGlrZSBLTVNBTiBhcmUgZGVzaWduZWQgdG8gY2F0Y2gg4oCTIGRldGVjdGluZyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBmbGFnZ2luZyBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2Ugb3IgdGhlIGd1ZXN0LlxuXG5XYWl0LCBkb2VzIEtNU0FOIHRyYWNrIHdyaXRlcyB0byAqZ3Vlc3QqIG1lbW9yeT8gVGhhdCdzIGEga2V5IHF1ZXN0aW9uIGhlcmUuIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCBpcyB3cml0aW5nIHRvIGd1ZXN0IG1lbW9yeSwgYnV0IGd1ZXN0IG1lbW9yeSBpcyB1bHRpbWF0ZWx5IG1hbmFnZWQgYnkgdXNlcnNwYWNlIChsaWtlIFFFTVUpIGFuZCBtYXBwZWQgaW50byB0aGUga2VybmVsLCBvciBpdCdzIGEgY29weS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgS01TQU4ncyBpbnN0cnVtZW50YXRpb24gaXMgdHJpZ2dlcmVkIGJ5IHdyaXRlcyB0byBtZW1vcnkgbWFwcGVkIGZyb20gdXNlcnNwYWNlIGludG8ga2VybmVsIHNwYWNlLCBvciBpcyBpdCBvbmx5IGxvb2tpbmcgZm9yIGRhdGEgbGVha3MgZnJvbSB0aGUga2VybmVsIGl0c2VsZj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCBpcyBjb3ZlcmVkIGJ5IEtNU0FOLlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VgLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjQ2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6MTAuNjUzNTk2ODk5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk5NzQ2MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz03NzQ9c3RhdGljIGludCBzeW5pY19kZWxpdmVyX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljLCB1MzIgc2ludCxcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04MDctXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjgwODpcXHRcXHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTgwOS1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2aHZfaGRyLm1lc3NhZ2VfZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODE4LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4MTk6XFx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UodmNwdSwgbXNnX3BhZ2VfZ2ZuLCBzcmNfbXNnLCBtc2dfb2ZmLFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04MjAtXFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHNyY19tc2ctXFx1MDAzZWhlYWRlcikgK1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01NTY4PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfcmVsZWFzZV92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NTg1LVxcdC8qIEZsdXNoIFZNQ1MxMiB0byBndWVzdCBtZW1vcnkgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU1ODY6XFx0a3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTU4Ny1cXHRcXHRcXHRcXHQgIHZteC1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNDQ5PWludCBrdm1fdmNwdV9yZWFkX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB2b2lkICpkYXRhLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDUwLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ1MTppbnQga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgY29uc3Qgdm9pZCAqZGF0YSxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ1Mi1cXHRcXHRcXHQgICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzMyMD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3dyaXRlX2d1ZXN0X3BhZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzMyMS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMzMjI6aW50IGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sXFxudmlydC9rdm0va3ZtX21haW4uYy0zMzIzLVxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBvZmZzZXQsIGludCBsZW4pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzMjgtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzMyOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMzMwLVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zMzUyPWludCBrdm1fdmNwdV93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgY29uc3Qgdm9pZCAqZGF0YSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzM2MC1cXHR3aGlsZSAoKHNlZyA9IG5leHRfc2VnbWVudChsZW4sIG9mZnNldCkpICE9IDApIHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMzNjE6XFx0XFx0cmV0ID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBnZm4sIGRhdGEsIG9mZnNldCwgc2VnKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzNjItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjEwOjEyLjc1MzM0NzUwN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODIzNzkwMjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gS1ZNIFBhZ2UgV3JpdGUgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgS1ZNIGhhbmRsZXMgd3JpdGluZyB0byBndWVzdCBwYWdlcy4gTXkgZm9jdXMgbmF0dXJhbGx5IGdvZXMgdG8gYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gSXQncyBhIGtleSBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgaXRzZWxmIGltcGxpZXMsIGl0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIGd1ZXN0IHdoZW4gbW9kaWZ5aW5nIG1lbW9yeS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBjb21wbGV4aXR5IGhlcmUg4oCTIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlciAoVExCKSBpbnZhbGlkYXRpb25zLCBwb3RlbnRpYWwgVk0gZXhpdHMsIGFuZCBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgZ3Vlc3QgcGFnZSBtb2RpZmljYXRpb24gdGFrZXMgcGxhY2UsIGFuZCBJIGFudGljaXBhdGUgc2VlaW5nIGEgbG90IG9mIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCBhY2Nlc3MgY2hlY2tzLiBJJ20ga2VlbiB0byBzZWUgaWYgaXQgbWFrZXMgZGlyZWN0IGNhbGxzIHRvIGhhcmR3YXJlIG9yIGlmIHRoZXJlIGFyZSBsYXllcnMgb2YgYWJzdHJhY3Rpb24gcHJlc2VudC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgbG93IGxldmVsIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDoxNy41NzcxNDA5MjVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMyMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMyMjpcXHRpbnQga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbixcXG4zMzIzOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBvZmZzZXQsIGludCBsZW4pXFxuMzMyNDpcXHR7XFxuMzMyNTpcXHRcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcXG4zMzI2OlxcdFxcbjMzMjc6XFx0XFx0cmV0dXJuIF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIGRhdGEsIG9mZnNldCwgbGVuKTtcXG4zMzI4OlxcdH1cXG4zMzI5OlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKTtcXG4zMzMwOlxcdFxcbjMzMzE6XFx0aW50IGt2bV93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgY29uc3Qgdm9pZCAqZGF0YSxcXG4zMzMyOlxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4zMzMzOlxcdHtcXG4zMzM0OlxcdFxcdGdmbl90IGdmbiA9IGdwYSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbjMzMzU6XFx0XFx0aW50IHNlZztcXG4zMzM2OlxcdFxcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShncGEpO1xcbjMzMzc6XFx0XFx0aW50IHJldDtcXG4zMzM4OlxcdFxcbjMzMzk6XFx0XFx0d2hpbGUgKChzZWcgPSBuZXh0X3NlZ21lbnQobGVuLCBvZmZzZXQpKSAhPSAwKSB7XFxuMzM0MDpcXHRcXHRcXHRyZXQgPSBrdm1fd3JpdGVfZ3Vlc3RfcGFnZShrdm0sIGdmbiwgZGF0YSwgb2Zmc2V0LCBzZWcpO1xcbjMzNDE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjEwOjE3LjU3NzYxODA4NVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODY5MTkxNDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZWAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2VgLCBlaD8gVGhhdCBmdW5jdGlvbiBjYWxsIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQncyB0aGUgY29yZSBvZiBob3cgd2UncmUgcHVzaGluZyBkYXRhIGludG8gYSBndWVzdCBWTSdzIG1lbW9yeSBzcGFjZSwgaXNuJ3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGNvbnRleHRzIHdoZXJlIHRoaXMgd291bGQgYmUgY2FsbGVkOiB2aXJ0aW8gZGV2aWNlcywgZGlyZWN0IG1lbW9yeSBhY2Nlc3Mgb3BlcmF0aW9ucywgc2hhcmVkIG1lbW9yeSBhcnJhbmdlbWVudHMsIGxpa2VseSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIG1vZGlmeWluZyB0aGUgZ3Vlc3QncyBwaHlzaWNhbCBtZW1vcnkgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdC5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBXcml0aW5nIHRvIGd1ZXN0IG1lbW9yeSBpcyBhIHByaXZpbGVnZWQgb3BlcmF0aW9uLiBJZiB0aGlzIHJvdXRpbmUgaXMgZmxhd2VkLCBpdOKAmXMgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvciBmb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIEhvdyBhcmUgd2UgdmFsaWRhdGluZyB0aGUgc291cmNlIG9mIHRoZSBkYXRhPyBBcmUgdGhlcmUgY2hlY2tzIG9uIHRoZSB0YXJnZXQgYWRkcmVzcyByYW5nZSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzPyBJcyB0aGVyZSBwcm9wZXIgaXNvbGF0aW9uPyBUaGlzIGlzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gbWFuaWZlc3QsIHNvIHNlY3VyaXR5IGlzIHBhcmFtb3VudC5cblxuTm93LCBwZXJmb3JtYW5jZS4gVGhhdOKAmXMgYWx3YXlzIHRoZSBraWNrZXIgd2l0aCBLVk0uIFdyaXRpbmcgYSBndWVzdCBwYWdlIGludm9sdmVzIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBob3N0IGFuZCBndWVzdCBjb250ZXh0cywgcG90ZW50aWFsbHkgVExCIGZsdXNoZXMsIGFuZCB2YXJpb3VzIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGltcGxlbWVudGF0aW9uIHRvIGlkZW50aWZ5IGFueSBib3R0bGVuZWNrcy4gSXMgaXQgcGFnZS1hbGlnbmVkPyBBcmUgdGhlcmUgY29weSBvcHRpbWl6YXRpb25zIGludm9sdmVkLCBvciBhcmUgd2Ugc3R1Y2sgd2l0aCBieXRlLWJ5LWJ5dGUgY29waWVzIHRoYXQgYXJlIHNsb3cgYXMgbW9sYXNzZXM/IFdoYXQgYWJvdXQgdGhlIG1lbW9yeSBtb2RlbD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjYWNoZSBjb2hlcmVuY3kgaXNzdWVzLCBvciBhcmUgd2UgdGFraW5nIHRoZSBhcHByb3ByaWF0ZSBwcmVjYXV0aW9ucz8gV2hhdCBhYm91dCB0aGUgYXRvbWljaXR5IG9mIHRoZSBvcGVyYXRpb24/IElzIGl0IGEgc2luZ2xlIG9wZXJhdGlvbiwgb3Igc2V2ZXJhbCBzbWFsbGVyIG9wZXJhdGlvbnMgdGhhdCwgaWYgaW50ZXJydXB0ZWQsIGNvdWxkIGxlYXZlIHRoZSBndWVzdCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGU/XG5cbk5leHQsIEkgbmVlZCB0byB0aGluayBhYm91dCBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSB3cml0ZSBmYWlscz8gRG9lcyB0aGUgZnVuY3Rpb24gcmV0dXJuIGEgY2xlYXIgZXJyb3IgY29kZT8gSG93IGFyZSB0aGVzZSBlcnJvcnMgcHJvcGFnYXRlZCB1cCB0aGUgY2FsbCBzdGFjaywgYW5kIHdoYXQgaXMgdGhlIGFwcHJvcHJpYXRlIHJlc3BvbnNlPyBBcmUgdGhlcmUgbWVjaGFuaXNtcyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGd1ZXN0IHBhZ2UgbWlnaHQgYmUgbG9ja2VkIG9yIG90aGVyd2lzZSB1bmF2YWlsYWJsZT9cblxuSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNhbGxpbmcgY29udmVudGlvbnMgYW5kIGFueSBsb2NraW5nIHByaW1pdGl2ZXMgaW52b2x2ZWQuIElmIHdlJ3JlIG5vdCBjYXJlZnVsIHdpdGggc3luY2hyb25pemF0aW9uLCB3ZSBjb3VsZCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIG90aGVyIG5hc3R5IGNvbmN1cnJlbmN5IGJ1Z3MuIFVuZGVyc3RhbmRpbmcgdGhlIGxvY2sgb3JkZXIgYW5kIGFueSBhc3NvY2lhdGVkIGNvbnRlbnRpb24gaXMgY3J1Y2lhbC5cblxuVWx0aW1hdGVseSwgSSBuZWVkIHRvIGFuc3dlciB0aGVzZSBxdWVzdGlvbnMgdG8gZm9ybSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHBlcnNwZWN0aXZlIGlzIHRvIHNlZWsgb3V0IHBvdGVudGlhbCBzZWN1cml0eSBwaXRmYWxscywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCB0aGUgaGFuZGxpbmcgb2YgY29uY3VycmVuY3kgYW5kIGVycm9yIHNjZW5hcmlvcy4gSXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBpdHMgd29ya2luZ3MgaXMgZXNzZW50aWFsIGZvciB0aGUgc3RhYmlsaXR5IGFuZCBpbnRlZ3JpdHkgb2YgdGhlIGVudGlyZSB2aXJ0dWFsaXplZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjEwOjIzLjQ0NjgxMTUwN1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwNTc1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MzI5MD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3ZjcHVfcmVhZF9ndWVzdF9hdG9taWMpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMjkyLS8qIENvcHkgQGxlbiBieXRlcyBmcm9tIEBkYXRhIGludG8gZ3Vlc3QgbWVtb3J5IGF0ICcoQGdmbiAqIFBBR0VfU0laRSkgKyBAb2Zmc2V0JyAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzI5MzpzdGF0aWMgaW50IF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzI5NC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsIGdmbl90IGdmbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzMxMz1pbnQga3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzMTctXFxudmlydC9rdm0va3ZtX21haW4uYzozMzE4OlxcdHJldHVybiBfX2t2bV93cml0ZV9ndWVzdF9wYWdlKGt2bSwgc2xvdCwgZ2ZuLCBkYXRhLCBvZmZzZXQsIGxlbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMzE5LX1cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzMyMj1pbnQga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzMyNi1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMzMjc6XFx0cmV0dXJuIF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIGRhdGEsIG9mZnNldCwgbGVuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzMjgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDoyMy41MjM4NzQ5MjZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2NTY3MDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2VgIGZ1bmN0aW9uLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgY29tcGxleGl0eSBoZXJlLCBnaXZlbiBpdCdzIGRlYWxpbmcgd2l0aCB3cml0aW5nIHRvIGd1ZXN0IG1lbW9yeSBmcm9tIHRoZSBob3N0LCB3aGljaCBpcyBhIGNvcmUgcGFydCBvZiBLVk0ncyBmdW5jdGlvbmFsaXR5LiBJIGtub3cgdGhlIGtleSBjaGFsbGVuZ2VzIHJldm9sdmUgYXJvdW5kIG1lbW9yeSBtYXBwaW5nLCBwcm90ZWN0aW9uLCBhbmQgZW5zdXJpbmcgY29uc2lzdGVuY3kuIFdlJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyB0aGVzZSBhc3BlY3RzIGFuZCB3aGljaCBvcHRpbWl6YXRpb25zIGFyZSB1c2VkLlxuXG4qKkFuYWx5emluZyBgX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZWAqKlxuXG5TbywgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHRyYW5zZmVyIGl0c2VsZi4gSW1tZWRpYXRlbHksIEkgd2FudCB0byBzZWU6XG5cbiogICAqKkFkZHJlc3MgVHJhbnNsYXRpb24gYW5kIFZhbGlkYXRpb246KiogSG93IGRvZXMgaXQgdHJhbnNsYXRlIHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIChHUEEpIHRvIGEgaG9zdCB2aXJ0dWFsIGFkZHJlc3MgKEhWQSk/IElzIHRoZXJlIGEgVExCIGxvb2t1cCwgb3IgZGlyZWN0IG1hbmlwdWxhdGlvbj8gV2hhdCBhcmUgdGhlIGNoZWNrcyBpbiBwbGFjZSB0byBlbnN1cmUgdGhlIEdQQSBpcyB2YWxpZCwgbWFwcGVkLCBhbmQgdGhhdCB0aGUgZ3Vlc3QgaGFzIHdyaXRlIHBlcm1pc3Npb25zPyBEb2VzIGl0IGhhbmRsZSBkaWZmZXJlbnQgbWVtb3J5IG1vZGVscyBzdWNoIGFzIE1NSU8gb3IgUElPPyBJJ20gZXhwZWN0aW5nIHNvbWUgc29waGlzdGljYXRlZCBjaGVja3MgdG8gYXZvaWQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuKiAgICoqRGF0YSBUcmFuc2ZlciBNZWNoYW5pc206KiogSXMgaXQgYSBkaXJlY3QgbWVtb3J5IGNvcHkgKGBtZW1jcHlgKT8gRG9lcyBpdCB1c2UgRE1BIG9yIHNvbWUgb3RoZXIgb3B0aW1pemVkIGFwcHJvYWNoIGZvciBsYXJnZXIgdHJhbnNmZXJzPyBBcmUgdGhlcmUgY29uc2lkZXJhdGlvbnMgZm9yIENQVSBjYWNoZSBjb2hlcmVuY3k/IEhvdyBhcmUgcG90ZW50aWFsIHBhZ2UgZmF1bHRzIGhhbmRsZWQ/XG4qICAgKipQcm90ZWN0aW9uIE1lY2hhbmlzbXM6KiogSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIG1lY2hhbmlzbXMgdXNlZCB0byBlbnN1cmUgdGhlIGd1ZXN0IGRvZXNuJ3QgYWNjaWRlbnRhbGx5IChvciBtYWxpY2lvdXNseSkgY29ycnVwdCBob3N0IG1lbW9yeSwgb3IgYW5vdGhlciBndWVzdCdzIG1lbW9yeS4gQXJlIHRoZXJlIHNoYWRvdyBwYWdlIHRhYmxlcywgbWVtb3J5IGJhcnJpZXJzLCBvciBvdGhlciB0ZWNobmlxdWVzIGVtcGxveWVkPyBIb3cgaXMgdGhlIHdyaXRlIHByb3RlY3Rpb24gaW1wbGVtZW50ZWQ/XG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlcmUncyBhbiBlcnJvciBkdXJpbmcgdGhlIHdyaXRlLCBzdWNoIGFzIGEgaGFyZHdhcmUgZmF1bHQsIGEgcGFnZSBmYXVsdCwgb3IgYW4gYWNjZXNzIHZpb2xhdGlvbj8gSXMgaXQgaGFuZGxlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLCBvciBhcmUgZXJyb3JzIHByb3BhZ2F0ZWQ/IFdoYXQncyB0aGUgZXJyb3IgcmVjb3Zlcnkgc3RyYXRlZ3k/XG5cbkknbSBleHBlY3Rpbmcgc29tZSBjYXJlZnVsIGNvbnNpZGVyYXRpb24gZm9yIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIGNvcnJlY3RuZXNzLiBJJ20ga2VlbiB0byBleGFtaW5lIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGl0IGFwcGxpZXMuIFRoaXMgd291bGQgYmUgYSBncmVhdCB3YXkgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHVuZGVycGlubmluZ3Mgb2YgS1ZNLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQ0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6MjguODg5NTQ4NTc2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyOTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyOTM6XFx0c3RhdGljIGludCBfX2t2bV93cml0ZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcXG4zMjk0OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwgZ2ZuX3QgZ2ZuLFxcbjMyOTU6XFx0XFx0XFx0XFx0ICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBvZmZzZXQsIGludCBsZW4pXFxuMzI5NjpcXHR7XFxuMzI5NzpcXHRcXHRpbnQgcjtcXG4zMjk4OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4zMjk5OlxcdFxcbjMzMDA6XFx0XFx0aWYgKFdBUk5fT05fT05DRShvZmZzZXQgKyBsZW4gXFx1MDAzZSBQQUdFX1NJWkUpKVxcbjMzMDE6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzMwMjpcXHRcXG4zMzAzOlxcdFxcdGFkZHIgPSBnZm5fdG9faHZhX21lbXNsb3QobWVtc2xvdCwgZ2ZuKTtcXG4zMzA0OlxcdFxcdGlmIChrdm1faXNfZXJyb3JfaHZhKGFkZHIpKVxcbjMzMDU6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzMwNjpcXHRcXHRyID0gX19jb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYWRkciArIG9mZnNldCwgZGF0YSwgbGVuKTtcXG4zMzA3OlxcdFxcdGlmIChyKVxcbjMzMDg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzMwOTpcXHRcXHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XFxuMzMxMDpcXHRcXHRyZXR1cm4gMDtcXG4zMzExOlxcdH1cXG4zMzEyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDoyOC44OTAxOTAwMzZaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwODYzODg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW5mb3JtYXRpb24gTGVhayoqXG5cbk9rYXksIHNvIGBfX2NvcHlfdG9fdXNlcmAuLi4gdGhhdCdzIHRoZSBmdW5jdGlvbiB3ZSB1c2UgdG8gd3JpdGUgc3R1ZmYgaW50byB0aGUgZ3Vlc3QncyBtZW1vcnkgc3BhY2UsIHJpZ2h0PyBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQgaWYgd2UncmUgd3JpdGluZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB3aXRoIHRoYXQgZnVuY3Rpb24sIHdlJ3ZlIGdvdCBhIGRlZmluaXRlIGluZm8tbGVhayBzY2VuYXJpbyBvbiBvdXIgaGFuZHMuIFRoZSBndWVzdCdzIG1lbW9yeSBpcyBtYXBwZWQgZGlyZWN0bHkgaW50byBRRU1VJ3MgdXNlcnNwYWNlLCBzbyB3aGF0ZXZlciB3ZSBwdXQgdGhlcmUsIHRoZSBndWVzdCBjYW4gcmVhZC4gS01TQU4gaXMsIG9mIGNvdXJzZSwgdGhlIHBlcmZlY3QgdG9vbCB0byBjYXRjaCB0aGVzZSB0eXBlcyBvZiB2dWxuZXJhYmlsaXRpZXMuIFdlJ3JlIGxvb2tpbmcgYXQgZXhhY3RseSB0aGUgcHJvYmxlbSBpdCB3YXMgZGVzaWduZWQgZm9yLlxuXG5Ob3csIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgYGh2X21lc3NhZ2VfaGVhZGVyYCBhbmQgYGh2X21lc3NhZ2VfZmxhZ3NgLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgYmVpbmcgY29uc3RydWN0ZWQgYW5kIGhhbmRsZWQgYXMgZXhwZWN0ZWQgd2l0aGluIHRob3NlIHN0cnVjdHVyZXMgdG8gdmVyaWZ5IHRoZSBsZWFrIGlzIG9jY3VyaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQ5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDozMy4yOTg4MzIyN1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MjU2NDIzOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGh2X21lc3NhZ2VfZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDozNi4xNDE0MDI4NjdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5MzQzMzE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IGBtZXNzYWdlX2ZsYWdzYCBIdW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1lc3NhZ2UgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8ganVtcCByaWdodCBpbnRvIHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeS4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiB5b3UncmUgZGVhbGluZyB3aXRoIGRlZmluaXRpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW4gYSBjb2RlYmFzZSwgZXNwZWNpYWxseSB3aGVuIHlvdSdyZSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBzb3VuZHMgbGlrZSBhbiBlbnVtZXJhdGlvbiBvciBhIHNldCBvZiBjb25zdGFudHMuIGBpbmNsdWRlL2AgaXMgd2hlcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGFyZSB0eXBpY2FsbHkgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgaGVhZGVyIGZpbGUgdGhhdCBkZWZpbmVzIGBtZXNzYWdlX2ZsYWdzYCwgbWF5YmUgYXMgYSBiaXRmaWVsZCBvciBhbiBlbnVtLiBMZXQncyBnZXQgdG8gaXQgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTYyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6MzkuNzM0ODM4Mzg0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUzNjAxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzc2FnZV9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2h5cGVydi9odmdka19taW5pLmg9NzY0PXVuaW9uIGh2X3N5bmljX3NpbXAge1xcbi0tXFxuaW5jbHVkZS9oeXBlcnYvaHZnZGtfbWluaS5oLTc3Mi1cXG5pbmNsdWRlL2h5cGVydi9odmdka19taW5pLmg6NzczOnVuaW9uIGh2X21lc3NhZ2VfZmxhZ3Mge1xcbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaC03NzQtXFx0dTggYXN1ODtcXG4tLVxcbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaD03ODE9c3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyIHtcXG4tLVxcbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaC03ODMtXFx0dTggcGF5bG9hZF9zaXplO1xcbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaDo3ODQ6XFx0dW5pb24gaHZfbWVzc2FnZV9mbGFncyBtZXNzYWdlX2ZsYWdzO1xcbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaC03ODUtXFx0dTggcmVzZXJ2ZWRbMl07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjEwOjM5LjkzMDIxMzIyMVoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY2NTU1MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIVkdESyBNaW5pZHJpdmVyIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBIVkdESyBtaW5pZHJpdmVyLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNzczIG9mIGBpbmNsdWRlL2h5cGVydi9odmdka19taW5pLmhgLiBLbm93aW5nIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgSFZHREssIGFuZCB3aGF0IHRoaXMgcGFydCBvZiB0aGUgaGVhZGVyIGxpa2VseSBwZXJ0YWlucyB0bywgdGhpcyBsaW5lIG51bWJlciBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLCBvciBpbnZlc3RpZ2F0aW5nLiBHaXZlbiB0aGUgbG9jYXRpb24gd2l0aGluIHRoZSBpbmNsdWRlIGZpbGUsIGl0J3MgbGlrZWx5IGRlZmluaW5nIHNvbWUgZnVuZGFtZW50YWwgc3RydWN0dXJlIG9yIGNvbnN0YW50IHJlbGF0ZWQgdG8gdGhlIGd1ZXN0IHZpcnR1YWwgZGV2aWNlLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBtaW5pZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoeXBlcnZpc29yIGhlcmUuIFRoaXMgbWlnaHQgYmUgYSBkZWZpbml0aW9uIGZvciBhIHBhY2tldCBmb3JtYXQsIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGRldmljZSBjb250cm9sLCBvciBwZXJoYXBzIGV2ZW4gYW4gaW50ZXJydXB0IHZlY3Rvci4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgY3JpdGljYWwgZm9yIHRoZSBndWVzdC10by1ob3N0IGNvbW11bmljYXRpb24gb3IgZGV2aWNlIGVudW1lcmF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6NDMuODk2NzcyMzg0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2h5cGVydi9odmdka19taW5pLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzczLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzczOlxcdHVuaW9uIGh2X21lc3NhZ2VfZmxhZ3Mge1xcbiA3NzQ6XFx0XFx0dTggYXN1ODtcXG4gNzc1OlxcdFxcdHN0cnVjdCB7XFxuIDc3NjpcXHRcXHRcXHR1OCBtc2dfcGVuZGluZyA6IDE7XFxuIDc3NzpcXHRcXHRcXHR1OCByZXNlcnZlZCA6IDc7XFxuIDc3ODpcXHRcXHR9IF9fcGFja2VkO1xcbiA3Nzk6XFx0fTtcXG4gNzgwOlxcdFxcbiA3ODE6XFx0c3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyIHtcXG4gNzgyOlxcdFxcdHUzMiBtZXNzYWdlX3R5cGU7XFxuIDc4MzpcXHRcXHR1OCBwYXlsb2FkX3NpemU7XFxuIDc4NDpcXHRcXHR1bmlvbiBodl9tZXNzYWdlX2ZsYWdzIG1lc3NhZ2VfZmxhZ3M7XFxuIDc4NTpcXHRcXHR1OCByZXNlcnZlZFsyXTtcXG4gNzg2OlxcdFxcdHVuaW9uIHtcXG4gNzg3OlxcdFxcdFxcdHU2NCBzZW5kZXI7XFxuIDc4ODpcXHRcXHRcXHR1bmlvbiBodl9wb3J0X2lkIHBvcnQ7XFxuIDc4OTpcXHRcXHR9O1xcbiA3OTA6XFx0fSBfX3BhY2tlZDtcXG4gNzkxOlxcdFxcbiA3OTI6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6NDMuODk2OTkzMzU0WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NDk0MDAwMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IEluZm8tTGVhayBpbiBIeXBlci1WIE1lc3NhZ2UgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIGBodl9tZXNzYWdlX2ZsYWdzYCB1bmlvbiwgaXQncyBhIGB1OCBhc3U4YCBhbmQgYSBiaXRmaWVsZCBgbXNnX3BlbmRpbmc6MWAsIGByZXNlcnZlZDo3YC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIHdhcyBzZXR0aW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7YCwgYnV0IHRoZSBvdGhlciA3IGJpdHMgb2YgdGhlIGBtZXNzYWdlX2ZsYWdzYCBieXRlIChgcmVzZXJ2ZWRgKSB3ZXJlIHVuaW5pdGlhbGl6ZWQgYmVjYXVzZSBgaHZfaGRyYCB3YXMgYW4gdW5pbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZSBvbiB0aGUgc3RhY2suIEVzc2VudGlhbGx5LCBhIGJ5dGUgd2FzIGJlaW5nIHBhcnRpYWxseSB3cml0dGVuIHRvLiBUaGVuIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCB3cml0ZXMgdGhpcyBzaW5nbGUgYnl0ZSB0byBndWVzdCBtZW1vcnkuXG5cblRoaXMgbWVhbnMgd2UncmUgbGVha2luZyA3IGJpdHMgb2YgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZGlyZWN0bHkgdG8gdGhlIGd1ZXN0IHNwYWNlLiBJdCdzIGEgY2xhc3NpYyBpbmZvLWxlYWssIGFuZCBhIG5hc3R5IG9uZSBhdCB0aGF0ISBOb3csIHRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IEtBU0FOIHdvbid0IGNhdGNoIHRoaXMuIEtBU0FOIGRvZXNuJ3QgZ2VuZXJhbGx5IGZsYWcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgbGlrZSB0aGlzIG9uZS4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCAqZG9lcyouIEtNU0FOIGlzIHRoZSB0b29sIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdGhlc2Ugc2NlbmFyaW9zLlxuXG5TbywgbGV0J3MgY29uZmlybSB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluIHRoZSBgc3luaWNfZGVsaXZlcl9tc2dgIGZ1bmN0aW9uLCB0aGUgYGh2X2hkcmAgc3RydWN0IGlzIGRlY2xhcmVkIG9uIHRoZSBzdGFjayB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBXZSB0aGVuIHJlYWQgYGh2X2hkci5tZXNzYWdlX3R5cGVgIGZyb20gZ3Vlc3QgbWVtb3J5IHVzaW5nIGBrdm1fdmNwdV9yZWFkX2d1ZXN0X3BhZ2VgIHRvIGluaXRpYWxpemUgdGhvc2UgNCBieXRlcy4gQWZ0ZXIgdGhhdCwgd2Ugc2V0IGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDFgLiBUaGlzIHNldHMgb25seSBvbmUgYml0LCBsZWF2aW5nIHRoZSBvdGhlciA3IGJpdHMgb2YgYG1lc3NhZ2VfZmxhZ3NgIHVuaW5pdGlhbGl6ZWQuIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCB0aGVuIHdyaXRlcyB0aGlzIHNpbmdsZSBieXRlIG9mIGBtZXNzYWdlX2ZsYWdzYCB0byBndWVzdCBtZW1vcnkuXG5cblNpbmNlIHRoZSBndWVzdCBtZW1vcnkgaXMgbWFwcGVkIHRvIHVzZXJzcGFjZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggUUVNVSwgdGhpcyBiZWNvbWVzIGFuIGluZm8tbGVhayEgVGhlIHdyaXRlIG9wZXJhdGlvbiB3aWxsIHRyaWdnZXIgYF9fY29weV90b191c2VyYCwgd2hpY2ggS01TQU4gd2lsbCBjYXRjaC5cblxuVGhpcyBkZWZpbml0aXZlbHkgbWVhbnMgYE5lZWRzS01TQU5gIGlzIHRydWUuXG5cbkluIGEgbnV0c2hlbGwsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZm9ybWF0aW9uIGxlYWsgdnVsbmVyYWJpbGl0eS4gVGhlIG9yaWdpbmFsIGNvZGUgaW5hZHZlcnRlbnRseSB3cm90ZSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSAoNyBiaXRzKSB0byBndWVzdCBtZW1vcnkgd2hlbiB3cml0aW5nIGEgc3BlY2lmaWMgbWVzc2FnZSBoZWFkZXIsIGJlY2F1c2Ugd2Ugd2VyZSBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXppbmcgdGhlIGBtZXNzYWdlX2ZsYWdzYCBieXRlLiBUaGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbGVha2luZyB0byB1c2Vyc3BhY2UsIGlzIHNvbWV0aGluZyBLTVNBTiBleGNlbHMgYXQgY2F0Y2hpbmcsIGFuZCBzbyBhIGRlZGljYXRlZCBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBpbml0aWFsaXppbmcgdGhlIGVudGlyZSBieXRlIGJlZm9yZSBzZXR0aW5nIGFueSBiaXRmaWVsZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk2LCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjEwOjU4LjM5MDk5NzQ0NloiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBgaHZfaGRyYCBpcyBhbiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlLiBUaGUgY29kZSBzZXRzIGEgc2luZ2xlIGJpdGZpZWxkIGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDFgLCBsZWF2aW5nIHRoZSByZW1haW5pbmcgNyBiaXRzIG9mIHRoZSBgbWVzc2FnZV9mbGFnc2AgYnl0ZSB1bmluaXRpYWxpemVkLiBUaGlzIGJ5dGUgaXMgdGhlbiB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeSB2aWEgYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UoKWAsIHdoaWNoIGludGVybmFsbHkgdXNlcyBgX19jb3B5X3RvX3VzZXIoKWAgdG8gd3JpdGUgdG8gdGhlIHVzZXJzcGFjZS1tYXBwZWQgZ3Vlc3QgbWVtb3J5LiBUaGlzIGxlYWtzIDcgYml0cyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBtZW1vcnkgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdGhpcyBleGFjdCBjbGFzcyBvZiBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluZm9ybWF0aW9uIGxlYWsgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgd3JpdHRlbiB0byBndWVzdCBtZW1vcnkuIFNwZWNpZmljYWxseSwgYGh2X2hkcmAgaXMgYW4gdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZS4gVGhlIGNvZGUgc2V0cyBhIHNpbmdsZSBiaXRmaWVsZCBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxYCwgbGVhdmluZyB0aGUgcmVtYWluaW5nIDcgYml0cyBvZiB0aGUgYG1lc3NhZ2VfZmxhZ3NgIGJ5dGUgdW5pbml0aWFsaXplZC4gVGhpcyBieXRlIGlzIHRoZW4gd3JpdHRlbiB0byBndWVzdCBtZW1vcnkgdmlhIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKClgLCB3aGljaCBpbnRlcm5hbGx5IHVzZXMgYF9fY29weV90b191c2VyKClgIHRvIHdyaXRlIHRvIHRoZSB1c2Vyc3BhY2UtbWFwcGVkIGd1ZXN0IG1lbW9yeS4gVGhpcyBsZWFrcyA3IGJpdHMgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHRoaXMgZXhhY3QgY2xhc3Mgb2YgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtnzrh[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-26 19:05:45 +0000 UTC FinishedAt: 2026-08-26 19:11:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_HYPERV" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "kvm-next", "tree_url": "https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/", "commit_hash": "76671054f9a1ff6abb976583cd8da37650acdc97", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM", "KVM_HYPERV" ], "series_id": "317cb3df-628c-4e00-80de-a530c076e805" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvm_hv_set_msr_common", "kvm_hv_process_stimers" ], "corpus_urls": [ "https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db" ], "skip_cover_check": false, "bug_title_re": "" }, "retest": null } ], "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+M208L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2h2X3NldF9tc3JfY29tbW9uJiMzNDssCiAgICAmIzM0O2t2bV9odl9wcm9jZXNzX3N0aW1lcnMmIzM0OwogIF0sCiAgJiMzNDtLTVNBTlJlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBmaXhlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5LiBTcGVjaWZpY2FsbHksIGBodl9oZHJgIGlzIGFuIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGUuIFRoZSBjb2RlIHNldHMgYSBzaW5nbGUgYml0ZmllbGQgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMWAsIGxlYXZpbmcgdGhlIHJlbWFpbmluZyA3IGJpdHMgb2YgdGhlIGBtZXNzYWdlX2ZsYWdzYCBieXRlIHVuaW5pdGlhbGl6ZWQuIFRoaXMgYnl0ZSBpcyB0aGVuIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5IHZpYSBga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSgpYCwgd2hpY2ggaW50ZXJuYWxseSB1c2VzIGBfX2NvcHlfdG9fdXNlcigpYCB0byB3cml0ZSB0byB0aGUgdXNlcnNwYWNlLW1hcHBlZCBndWVzdCBtZW1vcnkuIFRoaXMgbGVha3MgNyBiaXRzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGRvZXMgbm90IGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB0aGlzIGV4YWN0IGNsYXNzIG9mIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkLiYjMzQ7LAogICYjMzQ7TmVlZHNLTVNBTiYjMzQ7OiB0cnVlLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIHN5bnRoZXRpYyB0aW1lciBtZXNzYWdlIGRlbGl2ZXJ5IGxvZ2ljIGluIEtWTSBieSBjbGVhcmluZyBhIG1lc3NhZ2UgZmxhZyBiZWZvcmUgc2V0dGluZyBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgZ3Vlc3QgTVNSIHdyaXRlcyBhbmQgdGltZXIgZXhwaXJhdGlvbnMuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBjYmU2MDk3MTliYTU4OWY0YWZhM2U1NzZkZWY3NWMyMjE2N2ViMGIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDc6MDEgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2h5cGVydi5jIGIvYXJjaC94ODYva3ZtL2h5cGVydi5jXG5pbmRleCA2MDQ2NTFjYjI3Mzk5Li44ZDI2NjlkOGVmMzQ3IDEwMDY0NFxuLS0tIGEvYXJjaC94ODYva3ZtL2h5cGVydi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbkBAIC04MDIsNyAmIzQzOzgwMiw5IEBAIHN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG4gXHRcdGlmIChub19yZXRyeSlcbiBcdFx0XHRyZXR1cm4gMDtcbiBcbiYjNDM7XHRcdGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO1xuIFx0XHRodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7XG4mIzQzO1xuIFx0XHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sXG4gXHRcdFx0XHRcdCAgICAgIFx1MDAyNmh2X2hkci5tZXNzYWdlX2ZsYWdzLFxuIFx0XHRcdFx0XHQgICAgICBtc2dfb2ZmICYjNDM7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Mi8xPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+YWdlbnQ8L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+YmVzdC1leHBlbnNpdmU8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2h2X3NldF9tc3JfY29tbW9uJiMzNDssCiAgICAmIzM0O2t2bV9odl9wcm9jZXNzX3N0aW1lcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEh5cGVyLVYgc3ludGhldGljIHRpbWVyIG1lc3NhZ2UgZGVsaXZlcnkgbG9naWMgaW4gS1ZNIGJ5IGNsZWFyaW5nIGEgbWVzc2FnZSBmbGFnIGJlZm9yZSBzZXR0aW5nIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBndWVzdCBNU1Igd3JpdGVzIGFuZCB0aW1lciBleHBpcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkluc3RydWN0aW9uOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+WW91IGFyZSBhbiBleHBlcnQgTGludXgga2VybmVsIG1haW50YWluZXIuCllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lCmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC4KCklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpbgp5b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHkKdXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gZXhhbWluZSB0aGUgYWN0dWFsIHNvdXJjZSBjb2RlIGFuZCBjb25maXJtIGFueSBhc3N1bXB0aW9ucy4KClJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6Ci0gTW9kaWZpY2F0aW9ucyB0byBEb2N1bWVudGF0aW9uLywgS2NvbmZpZyBmaWxlcywgb3IgY29kZSBjb21tZW50cy4KLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy4KLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuCi0gQ29kZSBwYXRocyB0aGF0IGFyZSBpbXBvc3NpYmxlIHRvIHJlYWNoIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIEdDRSBvciBRRU1VLAogIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KLSBDb2RlIGluIHZlbmRvci1zcGVjaWZpYyBQQ0llIHN3aXRjaCwgU21hcnROSUMsIG9yIEdQVSBkcml2ZXJzIChlLmcuLCBtbHhzdywgcGRzX2NvcmUsIHFlZCwKICBpb25pYywgYW1kZ3B1KSB0aGF0IHJlcXVpcmUgcGh5c2ljYWwgUENJZSBoYXJkd2FyZSBjYXJkcyBub3QgZW11bGF0ZWQgaW4gc3RhbmRhcmQgUUVNVS4KLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKQogIHRoYXQgYXJlIGV4ZWN1dGVkIG9ubHkgZHVyaW5nIFBDSSBob3QtdW5wbHVnIG9yIHN5c2ZzIGRyaXZlciB1bmJpbmQgb3BlcmF0aW9ucy4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9ucwogICAod2hpY2ggYXJlIGlubGluZWQgYnkgdGhlIGNvbXBpbGVyIGFuZCBkbyBub3QgaGF2ZSBkaXN0aW5jdCBzeW1ib2wgYWRkcmVzc2VzKS4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgQWxzbyBjaGVjayAmIzM0O2RlcGVuZHMgb24mIzM0OyBsaW5lcyBpbiBLY29uZmlnIHRvIGluY2x1ZGUgYW55IG5vbi1zdGFuZGFyZCBwYXJlbnQgc3Vic3lzdGVtIGNvbmZpZ3MKICAgbmVlZGVkIGZvciBLYnVpbGQgdG8gY29tcGlsZSB0aGUgY29kZSBzdGF0aWNhbGx5IGludG8gdm1saW51eC4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzCiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGNiZTYwOTcxOWJhNTg5ZjRhZmEzZTU3NmRlZjc1YzIyMTY3ZWIwYjEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgV2VkIEF1ZyAyNiAxOTowNzowMSAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL2FyY2gveDg2L2t2bS9oeXBlcnYuYyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuYwppbmRleCA2MDQ2NTFjYjI3Mzk5Li44ZDI2NjlkOGVmMzQ3IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC94ODYva3ZtL2h5cGVydi5jCkBAIC04MDIsNyAmIzQzOzgwMiw5IEBAIHN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsCiAJCWlmIChub19yZXRyeSkKIAkJCXJldHVybiAwOwogCiYjNDM7CQlodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4ID0gMDsKIAkJaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxOwomIzQzOwogCQlyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sCiAJCQkJCSAgICAgICZhbXA7aHZfaGRyLm1lc3NhZ2VfZmxhZ3MsCiAJCQkJCSAgICAgIG1zZ19vZmYgJiM0MzsKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+My8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyNgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDEwNAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgdGhlIEtWTSBIeXBlci1WIFBhdGNoKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIHBhdGNoIHRoYXQgdHdlYWtzIGBhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNgLiBJdCYjMzk7cyBhIHByZXR0eSBmb2N1c2VkIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgc3luaWNfZGVsaXZlcl9tc2dgLiBUaGUgY29yZSBvZiB0aGUgYWx0ZXJhdGlvbiBzZWVtcyB0byBiZSBpbnNlcnRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO2AgKmJlZm9yZSogc2V0dGluZyBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgS1ZNIEh5cGVyLVYgZW11bGF0aW9uIGxheWVyLiBUaGF0ICYjMzQ7YXN1OCA9IDAmIzM0OyBsaWtlbHkgcmVsYXRlcyB0byBzb21lIHNwZWNpZmljIGZlYXR1cmUgb3Igc3RhdGUgZmxhZywgYW5kIGl0cyBwbGFjZW1lbnQgKmJlZm9yZSogdGhlIGBtc2dfcGVuZGluZ2AgYml0IGlzIHNldCBpcyBjcnVjaWFsLgoKR2l2ZW4gbXkgdW5kZXJzdGFuZGluZyBvZiBob3cgSHlwZXItViBTeW5JQyBpbnRlcnJ1cHRzIGFyZSBkZWxpdmVyZWQgd2l0aGluIEtWTSwgSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MuYXN1OGAgYWN0dWFsbHkgKm1lYW5zKiBpbiB0aGUgY29udGV4dCBvZiB0aGUgbGFyZ2VyIG1lc3NhZ2UgZGVsaXZlcnkgcHJvY2Vzcy4gVGhlIG9yZGVyaW5nIGNoYW5nZSBoYXMgdG8gYmUgc2lnbmlmaWNhbnQuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGVpdGhlciBpbml0aWFsaXphdGlvbiBvciBkZWFjdGl2YXRpb24gb2YgdGhlIG1lc3NhZ2UgZmVhdHVyZS4gSSBuZWVkIHRvIGRpdmUgZGVlcGVyIGludG8gYm90aCBgc3luaWNfZGVsaXZlcl9tc2dgIGFuZCwgbW9yZSBpbXBvcnRhbnRseSwgdGhlIGRlZmluaXRpb24gYW5kIHVzYWdlIG9mIGBodl9oZHIubWVzc2FnZV9mbGFnc2AgdG8gZ3Jhc3AgdGhlIGltcGFjdCBvZiB0aGlzIGNoYW5nZS4gSXQmIzM5O3MgdGltZSB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeW5pY19kZWxpdmVyX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzY4PXN0YXRpYyBpbnQgc3RpbWVyX2dldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCAqcGNvdW50KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Nzc0OnN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzc1LVx0XHRcdCAgICAgc3RydWN0IGh2X21lc3NhZ2UgKnNyY19tc2csIGJvb2wgbm9fcmV0cnkpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTgzMz1zdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cdHBheWxvYWQtXHUwMDNlZGVsaXZlcnlfdGltZSA9IGdldF90aW1lX3JlZl9jb3VudGVyKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NDg6XHRyZXR1cm4gc3luaWNfZGVsaXZlcl9tc2codG9faHZfc3luaWModmNwdSksXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVx0XHRcdFx0IHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHgsIG1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyNzg0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMzMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246CgoqKkludmVzdGlnYXRpbmcgYSBIeXBlci1WIFRpbWVyIEludGVyYWN0aW9uKioKCkFscmlnaHQsIHNvIGBzdGltZXJfc2VuZF9tc2dgLiBSaWdodCBvZmYgdGhlIGJhdCwgdGhhdCYjMzk7cyB0ZWxsaW5nIG1lIHdlJiMzOTtyZSBkZWFsaW5nIHdpdGggSHlwZXItViBzeW50aGV0aWMgdGltZXJzLiBUaGlzIHJpbmdzIGEgYmVsbDsgSSYjMzk7dmUgaGFkIHRvIGRlYnVnIHRoZXNlIGludGVyYWN0aW9ucyBiZWZvcmUuIE15IGltbWVkaWF0ZSBuZXh0IHRob3VnaHQgaXMsICYjMzQ7T2theSwgd2hvIGVsc2UgaXMgY2FsbGluZyB0aGlzIGZ1bmN0aW9uPyYjMzQ7IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBjYWxsIGdyYXBoIHRvIGdldCBhIGhhbmRsZSBvbiB0aGUgYmlnZ2VyIHBpY3R1cmUuIEkmIzM5O20gbG9va2luZyBmb3IgYSBjbGVhciBvdmVydmlldywgdG8gYXNzZXNzIHRoZSBwb2ludHMgb2YgZW50cnkuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHRpbWVyIHN1YnN5c3RlbSBvZiBIeXBlci1WLiBXaGVyZSBkb2VzIHRoZSB3b3JrIG9yaWdpbmF0ZSwgYW5kIHdoZXJlIGRvZXMgaXQgZ28gZnJvbSBoZXJlPwoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5bmljX2RlbGl2ZXJfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzY4PXN0YXRpYyBpbnQgc3RpbWVyX2dldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCAqcGNvdW50KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Nzc0OnN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzc1LVx0XHRcdCAgICAgc3RydWN0IGh2X21lc3NhZ2UgKnNyY19tc2csIGJvb2wgbm9fcmV0cnkpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTgzMz1zdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cdHBheWxvYWQtXHUwMDNlZGVsaXZlcnlfdGltZSA9IGdldF90aW1lX3JlZl9jb3VudGVyKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NDg6XHRyZXR1cm4gc3luaWNfZGVsaXZlcl9tc2codG9faHZfc3luaWModmNwdSksXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVx0XHRcdFx0IHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHgsIG1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD43LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzMzQxCgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjoKCioqSW52ZXN0aWdhdGluZyBgc3RpbWVyX3NlbmRfbXNnYCBVc2FnZSoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBmdW5jdGlvbiwgYHN0aW1lcl9zZW5kX21zZ2AsIGFuZCBpdCBzZWVtcyBsaWtlIGEgY29yZSBwaWVjZSBvZiB0aGUgdGltaW5nIG1lY2hhbmlzbS4gVGhlIGltbWVkaWF0ZSBjb250ZXh0IHRlbGxzIG1lIGl0JiMzOTtzIG9ubHkgY2FsbGVkIGZyb20gb25lIHBsYWNlOiBgc3RpbWVyX3NlbmRfbXNnYC4gVGhhdCYjMzk7cyBhIGxpdHRsZSB1bnVzdWFsLCBidXQgbm90IG5lY2Vzc2FyaWx5IGEgcmVkIGZsYWcgeWV0LiBUbyB0cnVseSB1bmRlcnN0YW5kIGl0cyByb2xlIGFuZCBwb3RlbnRpYWwgaW1wYWN0LCB0aGUgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gdmVyaWZ5IHRoaXMgaW5pdGlhbCBhc3N1bXB0aW9uLiBJIG5lZWQgdG8gY29uZmlybSB0aGUgKnNvdXJjZSogb2YgdGhlIGNhbGwuIEkgbXVzdCBiZSBzdXJlIGBzdGltZXJfc2VuZF9tc2dgIGlzICpvbmx5KiBjYWxsZWQgZnJvbSB3aXRoaW4gYHN0aW1lcl9zZW5kX21zZ2AuIElmIHRoaXMgaXMgaW5jb3JyZWN0LCBteSBhbmFseXNpcyB3aWxsIGZhaWwuIElmIHRoaXMgaXMgY29ycmVjdCwgSSBoYXZlIG1vcmUgaW5mb3JtYXRpb24gYWJvdXQgaG93IHRvIHByb2NlZWQgd2l0aCB0aGUgYW5hbHlzaXMuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGluIGFuZCBpZGVudGlmeWluZyBhbGwgY2FsbGVycyB0byBgc3RpbWVyX3NlbmRfbXNnYC4gVGhpcyYjMzk7bGwgZWl0aGVyIGNvbmZpcm0gbXkgaW5pdGlhbCBpbmZvcm1hdGlvbiBvciBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyB3aWRlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgbmV4dCBhcHByb3ByaWF0ZSBzdGVwcyBpbiBteSBhbmFseXNpcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD44LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGltZXJfc2VuZF9tc2cmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYz03NzQ9c3RhdGljIGludCBzeW5pY19kZWxpdmVyX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljLCB1MzIgc2ludCxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODMyLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjgzMzpzdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODM0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9ODY2PXN0YXRpYyB2b2lkIHN0aW1lcl9leHBpcmF0aW9uKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODcxLVx0aWYgKCFkaXJlY3QpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODcyOlx0XHRyID0gc3RpbWVyX3NlbmRfbXNnKHN0aW1lcik7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODczLVx0ZWxzZVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTMKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSBzdW1tYXJ5LCBhcyB0aG91Z2ggSSYjMzk7bSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczoKCioqSW52ZXN0aWdhdGluZyB0aGUgYHN0aW1lcl9leHBpcmF0aW9uYCBDYWxsZXIqKgoKT2theSwgc28gYHN0aW1lcl9leHBpcmF0aW9uYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBpbml0aWF0aW5nIHRoaXMgY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB3aGV0aGVyIGBzdGltZXJfc2VuZF9tc2dgIG9yIGBzdGltZXJfZXhwaXJhdGlvbmAgdGhlbXNlbHZlcyBhcmUgZXh0ZXJuYWxseSB2aXNpYmxlLCBtZWFuaW5nIGV4cG9ydGVkLiBUaGF0JiMzOTtzIHRoZSBmaXJzdCB0aGluZyBJJiMzOTtkIGNoZWNrOyB0aGF0JiMzOTtsbCBuYXJyb3cgZG93biBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBiZSBpbnRlZ3JhdGVkIG9yIHV0aWxpemVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gS25vd2luZyB0aGF0IGV4cG9ydCBzdGF0dXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsIGZsb3cgYW5kIG92ZXJhbGwgZGVzaWduLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdGltZXJfZXhwaXJhdGlvbiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jPTg1Mz1zdGF0aWMgaW50IHN0aW1lcl9ub3RpZnlfZGlyZWN0KHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODY1LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjg2NjpzdGF0aWMgdm9pZCBzdGltZXJfZXhwaXJhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODY3LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODc0LVx0XHRyID0gc3RpbWVyX25vdGlmeV9kaXJlY3Qoc3RpbWVyKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NzU6XHR0cmFjZV9rdm1faHZfc3RpbWVyX2V4cGlyYXRpb24oaHZfc3RpbWVyX3RvX3ZjcHUoc3RpbWVyKS1cdTAwM2V2Y3B1X2lkLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg3Ni1cdFx0XHRcdCAgICAgICBzdGltZXItXHUwMDNlaW5kZXgsIGRpcmVjdCwgcik7XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTg4ND12b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy05MDMtXHRcdFx0XHRcdGlmICh0aW1lX25vdyBcdTAwM2U9IGV4cF90aW1lKVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjkwNDpcdFx0XHRcdFx0XHRzdGltZXJfZXhwaXJhdGlvbihzdGltZXIpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTkwNS1cdFx0XHRcdH1cbi0tXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaD0xNDA4PVRSQUNFX0VWRU5UKGt2bV9odl9zdGltZXJfY2FsbGJhY2ssXG4tLVxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMTQyNi0vKlxuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTQyNzogKiBUcmFjZXBvaW50IGZvciBzdGltZXJfZXhwaXJhdGlvbi5cbmFyY2gveDg2L2t2bS90cmFjZS5oLTE0MjgtICovXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaDoxNDI5OlRSQUNFX0VWRU5UKGt2bV9odl9zdGltZXJfZXhwaXJhdGlvbixcbmFyY2gveDg2L2t2bS90cmFjZS5oLTE0MzAtXHRUUF9QUk9UTyhpbnQgdmNwdV9pZCwgaW50IHRpbWVyX2luZGV4LCBpbnQgZGlyZWN0LCBpbnQgbXNnX3NlbmRfcmVzdWx0KSxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY3MgoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDMzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246CgoqKkludmVzdGlnYXRpbmcgVGltZXIgSGFuZGxpbmcgaW4gS1ZNLUhWKioKCk9rYXksIHNvIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCYjMzk7cyBjdXJyZW50bHkgaW4gZm9jdXMuIE15IGltbWVkaWF0ZSBnb2FsIGlzIHRvIHVuZGVyc3RhbmQgaG93IGl0JiMzOTtzIGJlaW5nIHVzZWQuIEkgbmVlZCB0byB0cmFjZSB0aGUgY2FsbCBwYXRocyBsZWFkaW5nICp0byogdGhpcyBmdW5jdGlvbiwgc3BlY2lmaWNhbGx5LCBJIHdhbnQgdG8gZmluZCBpdHMgY2FsbGVycy4gSXQmIzM5O3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdobyYjMzk7cyByZXNwb25zaWJsZSBmb3IgaW52b2tpbmcgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIHRvIGdyYXNwIHRoZSBicm9hZGVyIHBpY3R1cmUgb2YgaG93IHRpbWVycyBhcmUgbWFuYWdlZCB3aXRoaW4gdGhlIEtWTS1IViBlbnZpcm9ubWVudC4gS25vd2luZyB0aGUgY2FsbGVycyB3aWxsIGV4cG9zZSB0aGUgY29udGV4dHMgaW4gd2hpY2ggdGhpcyB0aW1lciBwcm9jZXNzaW5nIGlzIGluaXRpYXRlZCwgaGVscGluZyBtZSB0byBhbmFseXplIHRoZSBmbG93IG9mIGV4ZWN1dGlvbiBhbmQgcG90ZW50aWFsIHN5bmNocm9uaXphdGlvbiBpc3N1ZXMsIHBlcmZvcm1hbmNlIGJvdHRsZW5lY2tzLCBvciBhbnkgZGVwZW5kZW5jaWVzIHRoYXQgbmVlZCB0byBiZSB1bmRlcnN0b29kLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowNzwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1faHZfcHJvY2Vzc19zdGltZXJzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9ODY2PXN0YXRpYyB2b2lkIHN0aW1lcl9leHBpcmF0aW9uKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODgzLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjg4NDp2b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg4NS17XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5oPTI2Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2h2X2ludnRzY19zdXBwcmVzc2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMjg0LVxuYXJjaC94ODYva3ZtL2h5cGVydi5oOjI4NTp2b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODYtXG4tLVxuYXJjaC94ODYva3ZtL3g4Ni5jPTgwNTE9c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmMtODE5OS1cdFx0aWYgKGt2bV9jaGVja19yZXF1ZXN0KEtWTV9SRVFfSFZfU1RJTUVSLCB2Y3B1KSlcbmFyY2gveDg2L2t2bS94ODYuYzo4MjAwOlx0XHRcdGt2bV9odl9wcm9jZXNzX3N0aW1lcnModmNwdSk7XG5hcmNoL3g4Ni9rdm0veDg2LmMtODIwMS0jZW5kaWZcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNTMxOQoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDg1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIFRpbWVyIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCB0aGlzIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBmdW5jdGlvbi4gVGhlIGZhY3QgdGhhdCBpdCYjMzk7cyBjYWxsZWQgd2l0aGluIGB2Y3B1X2VudGVyX2d1ZXN0YCBpbW1lZGlhdGVseSBmbGFncyBpdCBhcyBjcml0aWNhbCBjb3JlIEtWTSBsb2dpYyDigJMgd2UmIzM5O3JlIHRhbGtpbmcgYWJvdXQgdmVyeSBmdW5kYW1lbnRhbCBleGVjdXRpb24gZmxvdyBoZXJlLiBUaGlzIGlzbiYjMzk7dCBzb21lIG9ic2N1cmUgaGVscGVyIGZ1bmN0aW9uOyB0aGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgdmlydHVhbGl6YXRpb24gcHJvY2Vzcy4KCk5vdywgdGhlIHBhdGNoJiMzOTtzIG1vZGlmaWNhdGlvbiBvZiBgc3luaWNfZGVsaXZlcl9tc2dgIGlzIGludGVyZXN0aW5nLiBJdCYjMzk7cyBjbGVhcmluZyBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MuYXN1OGAgYmVmb3JlIHNldHRpbmcgYG1zZ19wZW5kaW5nYC4gVGhhdCYjMzk7cyBhICpmdW5jdGlvbmFsKiBjaGFuZ2UsIG5vIGRvdWJ0IGFib3V0IGl0LiBXZSYjMzk7cmUgZGlyZWN0bHkgYWx0ZXJpbmcgdGhlIG1lc3NhZ2luZyBiZWhhdmlvciwgcG90ZW50aWFsbHkgaW1wYWN0aW5nIGhvdyB0aGUgaHlwZXJ2aXNvciBpbnRlcmFjdHMgd2l0aCB0aGUgZ3Vlc3QmIzM5O3MgdGltZXJzLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMgYWJvdXQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93LgoKQmVmb3JlIGRpdmluZyBkZWVwZXIgaW50byB0aGUgc3BlY2lmaWMgaW1wYWN0cyBvZiBjbGVhcmluZyBgYXN1OGAsIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcuIEl0IGlzIHZpdGFsIHRvIGRldGVybWluZSBhbnkgcG90ZW50aWFsIGRlcGVuZGVuY2llcyB3aXRoaW4gdGhlIEtWTSBjb25maWd1cmF0aW9uLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgYXJjaGl0ZWN0dXJhbCBhbmQgb3BlcmF0aW9uYWwgaW1wbGljYXRpb25zIGJlZm9yZSBldmFsdWF0aW5nIHRoZSBwYXRjaCYjMzk7cyBwb3RlbnRpYWwgcmlzay4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDc8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVx0ZGVmX3RyaXN0YXRlIEtWTSBpZiAoS1ZNX0lOVEVMICE9IG4gfHwgS1ZNX0FNRCAhPSBuKVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTUxLVxuYXJjaC94ODYva3ZtL0tjb25maWc6NTI6Y29uZmlnIEtWTVxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXHR0cmlzdGF0ZSBcJiMzNDtLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIChLVk0pIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy02OC1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy03MC1cdGJvb2wgXCYjMzQ7Q29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctODItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo4Mzpjb25maWcgS1ZNX1NXX1BST1RFQ1RFRF9WTVxuYXJjaC94ODYva3ZtL0tjb25maWctODQtXHRib29sIFwmIzM0O0VuYWJsZSBzdXBwb3J0IGZvciBLVk0gc29mdHdhcmUtcHJvdGVjdGVkIFZNc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTk1LVxuYXJjaC94ODYva3ZtL0tjb25maWc6OTY6Y29uZmlnIEtWTV9JTlRFTFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIEludGVsIChhbmQgY29tcGF0aWJsZSkgcHJvY2Vzc29ycyBzdXBwb3J0XCYjMzQ7XG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTA2LVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEwOC0gICAgICAgIGJvb2wgXCYjMzQ7Q2hlY2sgdGhhdCBndWVzdHMgZG8gbm90IHJlY2VpdmUgI1ZFIGV4Y2VwdGlvbnNcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZz0xMjI9Y29uZmlnIFg4Nl9TR1hfS1ZNXG4tLVxuYXJjaC94ODYva3ZtL0tjb25maWctMTMzLVxuYXJjaC94ODYva3ZtL0tjb25maWc6MTM0OmNvbmZpZyBLVk1fSU5URUxfVERYXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXHRib29sIFwmIzM0O0ludGVsIFRydXN0IERvbWFpbiBFeHRlbnNpb25zIChURFgpIHN1cHBvcnRcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDUtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0Ny1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE1Njpjb25maWcgS1ZNX0FNRF9TRVZcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1Ny1cdGJvb2wgXCYjMzQ7QU1EIFNlY3VyZSBFbmNyeXB0ZWQgVmlydHVhbGl6YXRpb24gKFNFVikgc3VwcG9ydFwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE3Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE3Mzpjb25maWcgS1ZNX0lPQVBJQ1xuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVx0Ym9vbCBcJiMzNDtJL08gQVBJQywgUElDLCBhbmQgUElUIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4Mi1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxuYXJjaC94ODYva3ZtL0tjb25maWctMTg0LVx0Ym9vbCBcJiMzNDtTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblwmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMDctXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDg6Y29uZmlnIEtWTV9YRU5cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgWGVuIGh5cGVyY2FsbCBpbnRlcmZhY2VcJiMzNDtcbi0tXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTYtXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxOC1cdGJvb2wgXCYjMzQ7UHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1wmIzM0O1xuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMDpjb25maWcgS1ZNX0VYVEVSTkFMX1dSSVRFX1RSQUNLSU5HXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzEtXHRib29sXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMzItXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzM6Y29uZmlnIEtWTV9NQVhfTlJfVkNQVVNcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cdGludCBcJiMzNDtNYXhpbXVtIG51bWJlciBvZiB2Q1BVcyBwZXIgS1ZNIGd1ZXN0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA3PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDY4OTAKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAzOAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgYXNzdW1pbmcgSSYjMzk7bSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjoKCioqRGl2aW5nIGludG8gdGhlIEtWTSBhbmQgSHlwZXItViBJbnRlcnBsYXkqKgoKQWxyaWdodCwgdGhlIGNvbmZpZyBpbiBxdWVzdGlvbiBpcyBgS1ZNX0hZUEVSVmAuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0byBpbW1lZGlhdGVseSB6b29tIGluIG9uIHRoZSBzb3VyY2Ugb2YgdHJ1dGggZm9yIHRoYXQgcGFydGljdWxhciBzZXR0aW5nLiBTcGVjaWZpY2FsbHksIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBkZXBlbmRlbmNpZXMgYW5kIHdoYXQgaXQgZW5hYmxlcy4gU28sIG15IGluc3RpbmN0IGlzIHRvIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AuIFRoYXQmIzM5O3Mgd2hlcmUgYWxsIHRoZSB4ODYgS1ZNIGNvbmZpZ3VyYXRpb25zIGxpdmUsIGFuZCBpdCYjMzk7cyBoaWdobHkgbGlrZWx5IHRoYXQgYEtWTV9IWVBFUlZgIGlzIGRlZmluZWQgYW5kIGRvY3VtZW50ZWQgdGhlcmUuIEkmIzM5O20gZ29pbmcgdG8gc3RhcnQgZGlnZ2luZyBpbnRvIHRoYXQgZmlsZS4gVGhpcyBpcyBteSBnby10byBhcHByb2FjaC4gTG9jYXRpbmcgd2hlcmUgc29tZXRoaW5nIGlzIGRlZmluZWQgd2lsbCBxdWlja2x5IHlpZWxkIHRoZSBzdXJyb3VuZGluZyBjb250ZXh0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0hZUEVSViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4Mz1jb25maWcgS1ZNX1NNTVxuLS1cbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjE5NDpjb25maWcgS1ZNX0hZUEVSVlxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzI0NgoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6CgoqKkRpc3NlY3RpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgS1ZNX0hZUEVSVmAqKgoKT2theSwgc28gSSYjMzk7bSBkaXZpbmcgaW50byB0aGlzIGBLVk1fSFlQRVJWYCB0aGluZy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIHJlbGF0aW9uc2hpcCB0byB0aGUgYnJvYWRlciBzeXN0ZW0sIGl0cyBkZXBlbmRlbmNpZXMuIFdoZXJlIGRvZXMgaXQgc2l0PyBXaGF0IGRvZXMgaXQgcmVseSBvbj8gV2hhdCBvdGhlciBjb21wb25lbnRzIGRvZXMgaXQgbmVlZCB0byBmdW5jdGlvbiBjb3JyZWN0bHk/IFRoaXMgaXMgYWxsIGFib3V0IG1hcHBpbmcgb3V0IGl0cyByb2xlIGFuZCB1bmRlcnN0YW5kaW5nIGFueSBwb3RlbnRpYWwgcG9pbnRzIG9mIGludGVncmF0aW9uIG9yIGNvbmZsaWN0LiBUaW1lIHRvIHN0YXJ0IGRpZ2dpbmcgYW5kIHNlZSB3aGF0IHRoZSBjb2RlIHJldmVhbHMuIEkgbmVlZCBhIGNsZWFyIHBpY3R1cmUgYmVmb3JlIEkgY2FuIGV2ZW4gc3RhcnQgdG8gdHJvdWJsZXNob290IG9yIG9wdGltaXplIGFueXRoaW5nLiBMZXQmIzM5O3MgZ2V0IHRvIGl0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE4LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTkwLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAxOTA6XHRcdCAgZmlybXdhcmUgdG8gaW1wbGVtZW50IFVFRkkgc2VjdXJlIGJvb3QuXG4gMTkxOlx0XG4gMTkyOlx0XHQgIElmIHVuc3VyZSwgc2F5IFkuXG4gMTkzOlx0XG4gMTk0Olx0Y29uZmlnIEtWTV9IWVBFUlZcbiAxOTU6XHRcdGJvb2wgXCYjMzQ7U3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXCYjMzQ7XG4gMTk2Olx0XHRkZXBlbmRzIG9uIEtWTV9YODZcbiAxOTc6XHRcdGRlZmF1bHQgeVxuIDE5ODpcdFx0aGVscFxuIDE5OTpcdFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgZW11bGF0aW5nIE1pY3Jvc29mdCBIeXBlci1WLiAgVGhpcyBhbGxvd3MgS1ZNXG4gMjAwOlx0XHQgIHRvIGV4cG9zZSBhIHN1YnNldCBvZiB0aGUgcGFyYXZpcnR1YWxpemVkIGludGVyZmFjZXMgZGVmaW5lZCBpbiB0aGVcbiAyMDE6XHRcdCAgSHlwZXItViBIeXBlcnZpc29yIFRvcC1MZXZlbCBGdW5jdGlvbmFsIFNwZWNpZmljYXRpb24gKFRMRlMpOlxuIDIwMjpcdFx0ICBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy92aXJ0dWFsaXphdGlvbi9oeXBlci12LW9uLXdpbmRvd3MvcmVmZXJlbmNlL3RsZnNcbiAyMDM6XHRcdCAgVGhlc2UgaW50ZXJmYWNlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBjb3JyZWN0IGFuZCBwZXJmb3JtYW50IGZ1bmN0aW9uaW5nXG4gMjA0Olx0XHQgIG9mIFdpbmRvd3MgYW5kIEh5cGVyLVYgZ3Vlc3RzIG9uIEtWTS5cbiAyMDU6XHRcbiAyMDY6XHRcdCAgSWYgdW5zdXJlLCBzYXkgXCYjMzQ7WVwmIzM0Oy5cbiAyMDc6XHRcbiAyMDg6XHRjb25maWcgS1ZNX1hFTlxuIDIwOTpcdFx0Ym9vbCBcJiMzNDtTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA3NzU1CgkJCQkJCQlvdXRwdXQ6IDM5CgkJCQkJCQl0aG91Z2h0czogMTEyCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNLUh5cGVyViBUaW1lciBEZXBlbmRlbmNpZXMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgaW1tZWRpYXRlbHkgc2VlIGEgZGVwZW5kZW5jeSBjaGFpbi4gVGhpcyBgS1ZNX1g4NmAgZmVhdHVyZSwgd2hpY2ggSSYjMzk7bSBhc3N1bWluZyBpcyByZWxhdGVkIHRvIHg4NiB2aXJ0dWFsaXphdGlvbiwgaGluZ2VzIG9uIGBLVk1gIGl0c2VsZi4gVGhlcmVmb3JlLCB0byBlbnN1cmUgZXZlcnl0aGluZyBmdW5jdGlvbnMgYXMgaW50ZW5kZWQsIHdlJiMzOTtyZSBkZWZpbml0ZWx5IGdvaW5nIHRvIG5lZWQgYm90aCBgS1ZNYCBhbmQgYEtWTV9IWVBFUlZgIGVuYWJsZWQuIFRoYXQgc2VlbXMgbG9naWNhbC4KCk5vdywgZGlnZ2luZyBkZWVwZXIsIEkgc2VlIGEgcGF0dGVybiBpbiBzb21lIGZ1bmN0aW9uIHJlbGF0aW9uc2hpcHMuIFRoZSBgc3luaWNfZGVsaXZlcl9tc2dgIGZ1bmN0aW9uIGlzIGRlY2xhcmVkIGFzIHN0YXRpYy4gSW50ZXJlc3RpbmcsIGJ1dCBub3QgdW51c3VhbC4gVGhlbiwgbG9va2luZyBhdCBpdHMgY2FsbGVyLCBgc3RpbWVyX3NlbmRfbXNnYCwgSSBzZWUgaXQmIzM5O3MgYWxzbyBzdGF0aWMuIEFscmlnaHQuIERpZ2dpbmcgZGVlcGVyIGFnYWluLCBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBjYWxsaW5nIGBzdGltZXJfc2VuZF9tc2dgLCBgc3RpbWVyX2V4cGlyYXRpb25gLCBpcyBhbHNvIHN0YXRpYy4gT2theS4gTm90ZWQuCgpIb3dldmVyLCB0aGUgZmluYWwgY2FsbGVyIGluIHRoYXQgcGF0aCwgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgLCBpcyAqZXhwb3J0ZWQqLCB3aGljaCBtZWFucyBpdCYjMzk7cyBhY2Nlc3NpYmxlIG91dHNpZGUgdGhlIGN1cnJlbnQgc2NvcGUuIEFoLCBub3cgdGhpcyBpcyB0aGUgaW50ZXJlc3Rpbmcgb25lLiBUaGlzIGlzIHRoZSBlbnRyeSBwb2ludCwgdGhlIG9uZSB0aGF0IG1ha2VzIHRoZSBkaWZmZXJlbmNlIGJldHdlZW4gaW50ZXJuYWwgYW5kIGV4dGVybmFsIGNvZGUuIEkgbmVlZCB0byB0YWtlIGEgY2xvc2UgbG9vayBhdCBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AgYW5kIHVuZGVyc3RhbmQgaG93IHRoZSBpbnRlcmFjdGlvbiBpcyBtYWRlLiBMZXQmIzM5O3Mgc2VlIHdoYXQmIzM5O3MgaGFwcGVuaW5nIHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDt2b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYz04NjY9c3RhdGljIHZvaWQgc3RpbWVyX2V4cGlyYXRpb24oc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04ODMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODg0OnZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODg1LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg9MjYyPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHZfaW52dHNjX3N1cHByZXNzZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODQtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6Mjg1OnZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5oLTI4Ni1cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogODQ1NwoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDg4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYToKCioqQW5hbHl6aW5nIFBvdGVudGlhbCBFbnRyeSBQb2ludHMgZm9yIEh5cGVyLVYgVGltZXIgYW5kIFN5bklDIEludGVyYWN0aW9ucyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSBpZGVudGlmaWVkIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBhcyBhIGtleSBlbnRyeSBwb2ludCBmb3IgdGhlIEh5cGVyLVYgdGltZXIgaGFuZGxpbmcuIFRoYXQgZmVlbHMgcmlnaHQsIGl0JiMzOTtzIGEgZ29vZCBzdGFydGluZyBwb2ludC4gTm93LCBJIG5lZWQgdG8gbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nLCBhcmUgdGhlcmUgYW55ICpvdGhlciogZW50cnkgcG9pbnRzIHRoYXQgSSBzaG91bGQgYmUgYXdhcmUgb2Y/IEkmIzM5O20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IG90aGVyIHBvdGVudGlhbCB3YXlzIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGltZXJzIG9yIHRoZSBTeW5JQyBjb3VsZCBiZSB0cmlnZ2VyZWQgb3IgaGFuZGxlZC4KCkhtbSwgd2FpdCwgSSB0aG91Z2h0IGBzeW5pY19kZWxpdmVyX21zZ2AgaGFkIGEgY29ubmVjdGlvbiB0aHJvdWdoIGBrdm1faHZfc3luaWNfc2VuZF9lb2lgLCBidXQgbm93IEkmIzM5O20gdGhpbmtpbmcgdGhhdCYjMzk7cyBub3QgcXVpdGUgcmlnaHQuIERpZCBJIG1ha2UgYSBtaXN0YWtlPyBMZXQgbWUgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgd2l0aCBgZ3JlcGAuIE9rYXksIHNvIGEgcXVpY2sgYGdyZXBgIGNvbmZpcm1zIGBzeW5pY19kZWxpdmVyX21zZ2AgKmlzKiBhY3R1YWxseSBvbmx5IGNhbGxlZCBmcm9tIGBzdGltZXJfc2VuZF9tc2dgLiBSaWdodCwgbGV0JiMzOTtzIGRvdWJsZSBjaGVjayB0aGF0LCBhbmQgbWFrZSBzdXJlIHRoYXQmIzM5O3MgdGhlIG9ubHkgY2FsbCBsb2NhdGlvbi4gSSBuZWVkIHRvIG1ha2Ugc3VyZSBJIGRvbiYjMzk7dCBvdmVybG9vayBhbnkgaW50ZXJhY3Rpb24uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N5bmljX2RlbGl2ZXJfbXNnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzY4PXN0YXRpYyBpbnQgc3RpbWVyX2dldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCAqcGNvdW50KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Nzc0OnN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzc1LVx0XHRcdCAgICAgc3RydWN0IGh2X21lc3NhZ2UgKnNyY19tc2csIGJvb2wgbm9fcmV0cnkpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTgzMz1zdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cdHBheWxvYWQtXHUwMDNlZGVsaXZlcnlfdGltZSA9IGdldF90aW1lX3JlZl9jb3VudGVyKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NDg6XHRyZXR1cm4gc3luaWNfZGVsaXZlcl9tc2codG9faHZfc3luaWModmNwdSksXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVx0XHRcdFx0IHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHgsIG1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTE1NwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDk2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgVGltaW5nIE1lY2hhbmlzbSoqCgpPa2F5LCBzbyBJJiMzOTttIGZvY3VzaW5nIG9uIHRoZSB0aW1pbmcgbWVjaGFuaXNtLCBzcGVjaWZpY2FsbHkgdGhlIHBhcnQgcmVsYXRlZCB0byBgc3RpbWVyX3NlbmRfbXNnYC4gVGhhdCBzZWVtcyB0byBiZSB0aGUgY29yZSBmdW5jdGlvbiBoZXJlLiBMb29raW5nIGF0IHRoZSBjYWxsIGdyYXBoLCBpdCBhcHBlYXJzIHRoYXQgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIGlzIHRoZSBwcmltYXJ5IGVudHJ5IHBvaW50IHRvIHRoaXMgdGltaW5nIGxvZ2ljLiBOb3csIGEgcmVkIGZsYWcganVzdCB3ZW50IHVwIOKAkyBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AgaXMgY2FsbGVkIGZyb20gYHZjcHVfZW50ZXJfZ3Vlc3RgLiBUaGF0JiMzOTtzIGEgKnZlcnkqIGhvdCBwYXRoLCBtZWFuaW5nIGFueSBpbmVmZmljaWVuY3kgaGVyZSB3aWxsIGhhdmUgYSBodWdlIHBlcmZvcm1hbmNlIGltcGFjdC4gV2UgbmVlZCB0byBiZSBjYXJlZnVsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnJlcXVlbmN5IG9mIHRoaXMgY2hlY2sgaXMgcmlnaHQuCgpJIHNob3VsZCBhbHNvIGludmVzdGlnYXRlIG90aGVyIHBvdGVudGlhbCB0cmlnZ2Vycy4gSSBuZWVkIHRvIGZpbmQgYWxsIHRoZSB3YXlzIGBLVk1fUkVRX0hWX1NUSU1FUmAgZ2V0cyBzZXQgdG8gZnVsbHkgdW5kZXJzdGFuZCB0aGUgbGFuZHNjYXBlIGFuZCBpZGVudGlmeSBvdGhlciBwb3RlbnRpYWwgYm90dGxlbmVja3Mgb3Igb3B0aW1pemF0aW9uIG9wcG9ydHVuaXRpZXMuIExldCYjMzk7cyBzZWUgaG93IHRoYXQgcmVxdWVzdCBmbGFnIGlzIGJlaW5nIHNldC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7S1ZNX1JFUV9IVl9TVElNRVImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYz01OTc9c3RhdGljIHZvaWQgc3RpbWVyX21hcmtfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTYwMi1cdHNldF9iaXQoc3RpbWVyLVx1MDAzZWluZGV4LCB2Y3B1LVx1MDAzZWFyY2guaHlwZXJ2LVx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NjAzOlx0a3ZtX21ha2VfcmVxdWVzdChLVk1fUkVRX0hWX1NUSU1FUiwgdmNwdSk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjA0LVx0aWYgKHZjcHVfa2ljaylcbi0tXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODA1MT1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MTk0LVx0XHQvKlxuYXJjaC94ODYva3ZtL3g4Ni5jOjgxOTU6XHRcdCAqIEtWTV9SRVFfSFZfU1RJTUVSIGhhcyB0byBiZSBwcm9jZXNzZWQgYWZ0ZXJcbmFyY2gveDg2L2t2bS94ODYuYy04MTk2LVx0XHQgKiBLVk1fUkVRX0NMT0NLX1VQREFURSwgYmVjYXVzZSBIeXBlci1WIFN5bklDIHRpbWVyc1xuLS1cbmFyY2gveDg2L2t2bS94ODYuYy04MTk4LVx0XHQgKi9cbmFyY2gveDg2L2t2bS94ODYuYzo4MTk5Olx0XHRpZiAoa3ZtX2NoZWNrX3JlcXVlc3QoS1ZNX1JFUV9IVl9TVElNRVIsIHZjcHUpKVxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyMDAtXHRcdFx0a3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyh2Y3B1KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogOTkwOQoJCQkJCQkJb3V0cHV0OiAzNQoJCQkJCQkJdGhvdWdodHM6IDI2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2U6CgoqKkFuYWx5emluZyB0aGUgYHN0aW1lcl9tYXJrX3BlbmRpbmdgIENhbGxlcnMqKgoKT2theSwgc28gYHN0aW1lcl9tYXJrX3BlbmRpbmdgIGlzIHRoZSBmdW5jdGlvbiB0aGF0IHNldHMgdGhlICYjMzQ7cGVuZGluZyYjMzQ7IGZsYWcuIFRoYXQmIzM5O3MgdGhlIGtleS4gTm93LCBteSBuZXh0IG1vdmUgaXMgY2xlYXI6IEkgbmVlZCB0byBxdWlja2x5IGlkZW50aWZ5IGFsbCB0aGUgY2FsbCBzaXRlcyBvZiBgc3RpbWVyX21hcmtfcGVuZGluZ2AuIFVuZGVyc3RhbmRpbmcgaG93IGFuZCAqd2hlcmUqIHRoaXMgZmxhZyBpcyBzZXQgaXMgYWJzb2x1dGVseSBjcnVjaWFsLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNvbnRyb2wgZmxvdyB0byBkZXRlcm1pbmUgdGhlIGNvbmRpdGlvbnMgdW5kZXIgd2hpY2ggYSB0aW1lciBpcyBjb25zaWRlcmVkIHBlbmRpbmcuIEkmIzM5O20gbG9va2luZyBmb3IgdGhlIGxvZ2ljIHRoYXQgdHJpZ2dlcnMgdGhpcyBzdGF0ZSBjaGFuZ2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHRpbWVyIGV4cGlyeSwgdXNlciBpbnRlcmFjdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSB0aG9yb3VnaCBjYWxsIGdyYXBoIGFuYWx5c2lzIHdpbGwgcmV2ZWFsIHRoZSBjb250ZXh0cyB0aGF0IGluZmx1ZW5jZSB0aW1lciBiZWhhdmlvci4gVW5kZXJzdGFuZGluZyB0aGUgJiMzNDtwZW5kaW5nJiMzNDsgc3RhdGUgaXMgY3JpdGljYWwgdG8gdHJvdWJsZXNob290aW5nIHRpbWluZyBpc3N1ZXMgYW5kIHBvdGVudGlhbGx5IG9wdGltaXppbmcgdGltZXIgdXNhZ2UuIEkmIzM5O2xsIG5lZWQgdG8gY29ycmVsYXRlIHRoZSBjYWxsZXIgYW5hbHlzaXMgd2l0aCB0aGUgZnVuY3Rpb24mIzM5O3MgaW50ZXJuYWwgaW1wbGVtZW50YXRpb24gdG8gZnVsbHkgZ3Jhc3AgaXRzIHJvbGUgaW4gdGhlIHN5c3RlbS4gTGV0JiMzOTtzIGRpZyBpbi4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNi8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7c3RpbWVyX21hcmtfcGVuZGluZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jLTY0LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjY1OnN0YXRpYyB2b2lkIHN0aW1lcl9tYXJrX3BlbmRpbmcoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTY2LVx0XHRcdFx0Ym9vbCB2Y3B1X2tpY2spO1xuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0yMjU9c3RhdGljIHZvaWQga3ZtX2h2X25vdGlmeV9hY2tlZF9zaW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIHNpbnQpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTI0MC1cdFx0ICAgIHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHggPT0gc2ludClcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoyNDE6XHRcdFx0c3RpbWVyX21hcmtfcGVuZGluZyhzdGltZXIsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNDItXHR9XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTU3OD1zdGF0aWMgdTY0IGdldF90aW1lX3JlZl9jb3VudGVyKHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNTk2LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjU5NzpzdGF0aWMgdm9pZCBzdGltZXJfbWFya19wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcixcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy01OTgtXHRcdFx0XHRib29sIHZjcHVfa2ljaylcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NjIxPXN0YXRpYyBlbnVtIGhydGltZXJfcmVzdGFydCBzdGltZXJfdGltZXJfY2FsbGJhY2soc3RydWN0IGhydGltZXIgKnRpbWVyKVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy02MjctXHRcdFx0XHQgICAgIHN0aW1lci1cdTAwM2VpbmRleCk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NjI4Olx0c3RpbWVyX21hcmtfcGVuZGluZyhzdGltZXIsIHRydWUpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTYyOS1cbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NjUwPXN0YXRpYyBpbnQgc3RpbWVyX3N0YXJ0KHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjg4LVx0XHQgKi9cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo2ODk6XHRcdHN0aW1lcl9tYXJrX3BlbmRpbmcoc3RpbWVyLCBmYWxzZSk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjkwLVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzAzPXN0YXRpYyBpbnQgc3RpbWVyX3NldF9jb25maWcoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCB1NjQgY29uZmlnLFxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03MjktXHRpZiAoc3RpbWVyLVx1MDAzZWNvbmZpZy5lbmFibGUpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NzMwOlx0XHRzdGltZXJfbWFya19wZW5kaW5nKHN0aW1lciwgZmFsc2UpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTczMS1cbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzM1PXN0YXRpYyBpbnQgc3RpbWVyX3NldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCBjb3VudCxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzU2LVx0aWYgKHN0aW1lci1cdTAwM2Vjb25maWcuZW5hYmxlKVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjc1NzpcdFx0c3RpbWVyX21hcmtfcGVuZGluZyhzdGltZXIsIGZhbHNlKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NTgtXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDExMDU0CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogOTMKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIFBvdGVudGlhbCBJbnRlcnJ1cHQgVHJpZ2dlcnMqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlc2UgZnVuY3Rpb25zIOKAkyBga3ZtX2h2X25vdGlmeV9hY2tlZF9zaW50YCwgYHN0aW1lcl90aW1lcl9jYWxsYmFja2AsIGBzdGltZXJfc3RhcnRgLCBgc3RpbWVyX3NldF9jb25maWdgLCBhbmQgYHN0aW1lcl9zZXRfY291bnRgIOKAkyBzZWVtIHRvIGJlIHRoZSBwb3RlbnRpYWwgY3VscHJpdHMgZm9yIHRyaWdnZXJpbmcgdGhpcyBpbnRlcnJ1cHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwYXRoIG9mIGV4ZWN1dGlvbiBoZXJlLgoKU3BlY2lmaWNhbGx5LCBgc3RpbWVyX3NldF9jb25maWdgIGFuZCBgc3RpbWVyX3NldF9jb3VudGAgYXJlIGNhbGxlZCBpbiByZXNwb25zZSB0byB0aGUgZ3Vlc3Qgd3JpdGluZyB0byB0aGUgY29ycmVzcG9uZGluZyBNU1JzLCB3aGljaCBpbW1lZGlhdGVseSBkcmF3cyBteSBhdHRlbnRpb24uIFRoYXQgc2VlbXMgbGlrZSBhIHByaW1lIGFyZWEgdG8gZm9jdXMgb24gZm9yIGNvbnRyb2wuIExldCYjMzk7cyBzdGFydCBieSBkaWdnaW5nIGludG8gYHN0aW1lcl9zZXRfY29uZmlnYCBhbmQgc2VlIHdoYXQmIzM5O3MgZ29pbmcgb24gdGhlcmUsIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O3N0aW1lcl9zZXRfY29uZmlnJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NjUwPXN0YXRpYyBpbnQgc3RpbWVyX3N0YXJ0KHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzAyLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjcwMzpzdGF0aWMgaW50IHN0aW1lcl9zZXRfY29uZmlnKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lciwgdTY0IGNvbmZpZyxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03MDQtXHRcdFx0ICAgICBib29sIGhvc3QpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTcxOS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo3MjA6XHR0cmFjZV9rdm1faHZfc3RpbWVyX3NldF9jb25maWcoaHZfc3RpbWVyX3RvX3ZjcHUoc3RpbWVyKS1cdTAwM2V2Y3B1X2lkLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTcyMS1cdFx0XHRcdCAgICAgICBzdGltZXItXHUwMDNlaW5kZXgsIGNvbmZpZywgaG9zdCk7XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTE1NDM9c3RhdGljIGludCBrdm1faHZfc2V0X21zcihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhLCBib29sIGhvc3QpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE2MjgtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTYyOTpcdFx0cmV0dXJuIHN0aW1lcl9zZXRfY29uZmlnKHRvX2h2X3N0aW1lcih2Y3B1LCB0aW1lcl9pbmRleCksXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTYzMC1cdFx0XHRcdFx0IGRhdGEsIGhvc3QpO1xuLS1cbmFyY2gveDg2L2t2bS90cmFjZS5oPTEyNzk9VFJBQ0VfRVZFTlQoa3ZtX2h2X3N5bmljX3NldF9tc3IsXG4tLVxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMTMwMS0vKlxuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTMwMjogKiBUcmFjZXBvaW50IGZvciBzdGltZXJfc2V0X2NvbmZpZy5cbmFyY2gveDg2L2t2bS90cmFjZS5oLTEzMDMtICovXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaDoxMzA0OlRSQUNFX0VWRU5UKGt2bV9odl9zdGltZXJfc2V0X2NvbmZpZyxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTEzMDUtXHRUUF9QUk9UTyhpbnQgdmNwdV9pZCwgaW50IHRpbWVyX2luZGV4LCB1NjQgY29uZmlnLCBib29sIGhvc3QpLFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI5LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTkzOQoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDExNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqCgpPa2F5LCBzbyB0aGUgYGt2bV9odl9zZXRfbXNyYCBmdW5jdGlvbiwgdGhhdCYjMzk7cyB0aGUgZW50cnkgcG9pbnQgSSBuZWVkIHRvIGZvY3VzIG9uLiBJdCBnZXRzIGNhbGxlZCB3aGVuIGEgZ3Vlc3QgVk0gdXNlcyBgV1JNU1JgIHRvIHdyaXRlIHRvIEh5cGVyLVYgTW9kZWwtU3BlY2lmaWMgUmVnaXN0ZXJzLCBzbywgeWVzLCB0aGF0JiMzOTtzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29kZSBwYXRoIGZyb20gd2l0aGluIHRoZSBndWVzdC4gVGhhdCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYWJzb2x1dGVseS4gVGhlIGd1ZXN0LWNvbnRyb2xsZWQgaW5wdXRzIGFyZSB0aGUga2V5LgoKTGV0JiMzOTtzIGRyaWxsIGRvd24gYSBiaXQgZGVlcGVyLiBTaW5jZSBJJiMzOTttIGZ1enppbmcsIG15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIGBrdm1faHZfc2V0X21zcmAgYW5kIGFsc28gYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIHRvIHNlZSBob3cgdGhvc2Ugd29yayB3aXRoIHRoZSBNU1Igc2V0dGluZy4KCk5leHQgc3RlcCwgY2hlY2sgaWYgYGt2bV9odl9zZXRfbXNyYCBpcyBleHBvcnRlZCBvciBpZiBpdCYjMzk7cyBzdGF0aWMuIFRoYXQgd2lsbCBpbXBhY3QgbXkgYXBwcm9hY2ggdG8gaW5zdHJ1bWVudGF0aW9uLiBHb3R0YSBkZXRlcm1pbmUgYWNjZXNzIG1ldGhvZHMhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2ludCBrdm1faHZfc2V0X21zciYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jPTEzODc9dm9pZCBrdm1faHZfeHNhdmVzX3hzYXZlY19tYXliZV93YXJuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTM5OS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNDAwOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3JfcHcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNDAxLVx0XHRcdCAgICAgYm9vbCBob3N0KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNTM0PXN0YXRpYyB1NjQgY3VycmVudF90YXNrX3J1bnRpbWVfMTAwbnModm9pZClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTU0Mi1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNTQzOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE1NDQte1xuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNzExPXN0YXRpYyBpbnQga3ZtX2h2X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhLFxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzc1LVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3NzY6aW50IGt2bV9odl9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhLCBib29sIGhvc3QpXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc3Ny17XG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5oPTE5Mz1zdGF0aWMgaW5saW5lIHUzMiBrdm1faHZfZ2V0X3ZwaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0xOTktXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6MjAwOmludCBrdm1faHZfc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yMDEtaW50IGt2bV9odl9nZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCAqcGRhdGEsIGJvb2wgaG9zdCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTI1CgkJCQkJCQlvdXRwdXQ6IDQyCgkJCQkJCQl0aG91Z2h0czogNTEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyByZXF1ZXN0ZWQ6CgoqKkRlY29uc3RydWN0aW5nIHRoZSBNU1IgU2V0dGluZyBGdW5jdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgYGt2bV9odl9zZXRfbXNyX2NvbW1vbmAuIFRoZSBpbW1lZGlhdGUgcXVlc3Rpb24gaXMsIGhvdyBpcyB0aGlzIGZ1bmN0aW9uIGFjdHVhbGx5ICp1c2VkKj8gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNhbGwgZ3JhcGguIFNwZWNpZmljYWxseSwgSSB3YW50IHRvIGtub3cgaWYgYGt2bV9odl9zZXRfbXNyYCBjYWxscyBpdC4gVGhhdCBzZWVtcyBsaWtlIGEgbG9naWNhbCBwbGFjZSB0byBzdGFydCBkaWdnaW5nLiBLbm93aW5nIHRoZSBjYWxsZXItY2FsbGVlIHJlbGF0aW9uc2hpcHMgaXMgZnVuZGFtZW50YWwgdG8gZ3Jhc3BpbmcgdGhlIGZ1bmN0aW9uJiMzOTtzIHJvbGUgaW4gdGhlIGxhcmdlciBLVk0gaHlwZXJ2aXNvciBjb250ZXh0LCBhbmQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzIvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bV9odl9zZXRfbXNyJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYz0xMzg3PXZvaWQga3ZtX2h2X3hzYXZlc194c2F2ZWNfbWF5YmVfd2FybihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTEzOTktXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTQwMDpzdGF0aWMgaW50IGt2bV9odl9zZXRfbXNyX3B3KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTQwMS1cdFx0XHQgICAgIGJvb2wgaG9zdClcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTUzND1zdGF0aWMgdTY0IGN1cnJlbnRfdGFza19ydW50aW1lXzEwMG5zKHZvaWQpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE1NDItXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6MTU0MzpzdGF0aWMgaW50IGt2bV9odl9zZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsIGJvb2wgaG9zdClcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNTQ0LXtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTcxMT1zdGF0aWMgaW50IGt2bV9odl9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc3NS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzc2OmludCBrdm1faHZfc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3Nzcte1xuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzg5LVx0XHRtdXRleF9sb2NrKFx1MDAyNmh2LVx1MDAzZWh2X2xvY2spO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3OTA6XHRcdHIgPSBrdm1faHZfc2V0X21zcl9wdyh2Y3B1LCBtc3IsIGRhdGEsIGhvc3QpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3OTEtXHRcdG11dGV4X3VubG9jayhcdTAwMjZodi1cdTAwM2Vodl9sb2NrKTtcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc5My1cdH0gZWxzZVxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3OTQ6XHRcdHJldHVybiBrdm1faHZfc2V0X21zcih2Y3B1LCBtc3IsIGRhdGEsIGhvc3QpO1xuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3OTUtfVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzgwMgoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDg3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyBIeXBlci1WIE1TUiBTZXR0aW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGNvbmZpcm1lZCB0aGF0IGBrdm1faHZfc2V0X21zcl9jb21tb25gICpkb2VzKiBpbmRlZWQgY2FsbCBga3ZtX2h2X3NldF9tc3JgLiBUaGF0JiMzOTtzIGEgc29saWQgcG9pbnQgdG8gZm9jdXMgb247IGBrdm1faHZfc2V0X21zcl9jb21tb25gIGxvb2tzIGxpa2UgYSBrZXkgc3ltYm9sIHRvIGRpdmUgaW50by4gR2l2ZW4gaXRzIHJvbGUgaW4gc2V0dGluZyBNU1JzLCBpdCBwcm9iYWJseSBoYXMgc29tZSBpbnRlcmVzdGluZyBpbnRlcmFjdGlvbnMuIEkgYWxzbyB3YW50IHRvIGtlZXAgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIGluIG1pbmQg4oCTIGl0JiMzOTtzIGFub3RoZXIgYXJlYSB3aGVyZSBIeXBlci1WIGludGVyYWN0aW9ucyBvY2N1ci4KCk5vdywgbXkgbmV4dCBsb2dpY2FsIHN0ZXAgaXMgdG8gYW5hbHl6ZSB0aGUgY2FsbGVycyBvZiBga3ZtX2h2X3NldF9tc3JfY29tbW9uYC4gVW5kZXJzdGFuZGluZyB3aGVyZSB0aGlzIGZ1bmN0aW9uIGlzIGludm9rZWQgd2lsbCBpbGx1bWluYXRlIGl0cyBicm9hZGVyIGNvbnRleHQgYW5kIHJldmVhbCB3aGF0IHRyaWdnZXJzIHRoZXNlIE1TUiBzZXR0aW5ncy4gTGV0JiMzOTtzIHNlZSB3aGF0IHRoZSBjYWxsZ3JhcGggcmV2ZWFscy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX2h2X3NldF9tc3JfY29tbW9uJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTcxMT1zdGF0aWMgaW50IGt2bV9odl9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSxcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTc3NS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzc2OmludCBrdm1faHZfc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3Nzcte1xuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuaD0xOTM9c3RhdGljIGlubGluZSB1MzIga3ZtX2h2X2dldF92cGluZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMTk5LVxuYXJjaC94ODYva3ZtL2h5cGVydi5oOjIwMDppbnQga3ZtX2h2X3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsIGJvb2wgaG9zdCk7XG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMjAxLWludCBrdm1faHZfZ2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhLCBib29sIGhvc3QpO1xuLS1cbmFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcbi0tXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3ODEtXHRjYXNlIEhWX1g2NF9NU1JfVFNDX0lOVkFSSUFOVF9DT05UUk9MOlxuYXJjaC94ODYva3ZtL21zcnMuYzoxNzgyOlx0XHRyZXR1cm4ga3ZtX2h2X3NldF9tc3JfY29tbW9uKHZjcHUsIG1zciwgZGF0YSxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc4My1cdFx0XHRcdFx0ICAgICBtc3JfaW5mby1cdTAwM2Vob3N0X2luaXRpYXRlZCk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE0NjI2CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogMTc5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEZ1enppbmcgU3RyYXRlZ3kgZm9yIEh5cGVyLVYgTVNSIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O20gbG9va2luZyBhdCBga3ZtX3NldF9tc3JfY29tbW9uYCBhbmQgaXQgbG9va3MgbGlrZSBpdCYjMzk7cyB0aGUgY2FsbGVyIGhlcmUuIFRoYXQgaW1tZWRpYXRlbHkgbWFrZXMgYGt2bV9odl9zZXRfbXNyX2NvbW1vbmAgYSBwcmltZSB0YXJnZXQgZm9yIGZ1enppbmcuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uIGZvciBpbnZlc3RpZ2F0aW9uLgoKTGV0IG1lIHN1bW1hcml6ZSB0aGUgaW5pdGlhbCBmaW5kaW5nczogaXQgbG9va3MgbGlrZSB0aGlzIGFyZWEgaXMgZGVmaW5pdGVseSB3b3J0aCBmdXp6aW5nLCBhbmQgdGhlIHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIGBrdm1faHZfc2V0X21zcl9jb21tb25gIGFuZCBhbHNvIG9uIHRoZSBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AgZnVuY3Rpb24uIFRoZSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgYXJlIGBLVk1gIGFuZCBgS1ZNX0hZUEVSVmAuCgpOb3csIEkgc2hvdWxkIGNoZWNrIGZvciBhbnkgcmVsYXRlZCBjb25maWd1cmF0aW9ucy4gSXQgc2VlbXMgYEtWTV9YODZgIGV4aXN0cyBhcyBhIGBkZWZfdHJpc3RhdGVgLCBidXQgaXQmIzM5O3Mgbm90IGRpcmVjdGx5IHNlbGVjdGFibGUgYnkgdGhlIHVzZXIsIGRlcGVuZGluZyBpbnN0ZWFkIG9uIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYC4gSSYjMzk7bGwgd2FudCB0byBjaGVjayBgYXJjaC94ODYva3ZtL0tjb25maWdgIGZvciB0aGUgc3BlY2lmaWMgaW1wbGljYXRpb25zIG9mIGBLVk1fWDg2YCBhbmQgaG93IGl0cyBkZXBlbmRhbmNpZXMgbWlnaHQgaW1wYWN0IG91ciBmdXp6aW5nIGFwcHJvYWNoLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX1g4NiYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwOmNvbmZpZyBLVk1fWDg2XG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUyMTEKCQkJCQkJCW91dHB1dDogMTE1CgkJCQkJCQl0aG91Z2h0czogMjI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh5cGVyLVYgU3ludGhldGljIFRpbWVyIFBhdGNoKioKCk9rYXksIHNvIHdlJiMzOTtyZSBsb29raW5nIGF0IGEgcGF0Y2ggcmVsYXRlZCB0byBIeXBlci1WIHN5bnRoZXRpYyB0aW1lcnMuIEdpdmVuIHRoYXQgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBLVk0sIEkgc2hvdWxkIHByb2JhYmx5IGVuc3VyZSB0aGF0IHdlIGhhdmUgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBlbmFibGVkLCBhbHRob3VnaCBzeXprYWxsZXIgdXN1YWxseSBoYW5kbGVzIHRob3NlLiBGb3IgdGhpcyBpbml0aWFsIHNldHVwLCBJJiMzOTtsbCBsaXN0IGBLVk1gIGFuZCBgS1ZNX0hZUEVSVmAgc3BlY2lmaWNhbGx5LCB0byBiZSBzYWZlLgoKTXkgbmV4dCBzdGVwIGlzIHRvIGNvbmZpcm0gdGhlIHJlYWNoYWJpbGl0eSBvZiBgc3luaWNfZGVsaXZlcl9tc2dgLiBJIHF1aWNrbHkgc2VlIHRoYXQgYHN0aW1lcl9zZW5kX21zZ2AgY2FsbHMgaXQsIGBzdGltZXJfc2VuZF9tc2dgIGlzIHRyaWdnZXJlZCBieSBgc3RpbWVyX2V4cGlyYXRpb25gLCB3aGljaCwgaW4gdHVybiwgaXMgaW52b2tlZCBieSBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AuIEFuZCBmaW5hbGx5LCBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AgaXMgY2FsbGVkIGJ5IGB2Y3B1X2VudGVyX2d1ZXN0YC4gSXQmIzM5O3MgYSBwcmV0dHkgc3RhbmRhcmQgS1ZNIGd1ZXN0IGV4ZWN1dGlvbiBwYXRoLCBzbyB0aGF0IGNvbmZpcm1zIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuCgpUaGUgcGF0Y2ggaXRzZWxmIG1vZGlmaWVzIGBzeW5pY19kZWxpdmVyX21zZ2AsIGNsZWFyaW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4YCBiZWZvcmUgc2V0dGluZyBgbXNnX3BlbmRpbmdgLiBUaGlzIGlzIGEgY2xlYXIsIGZ1bmN0aW9uYWwgY2hhbmdlIHRvIHRoZSBIeXBlci1WIHN5bnRoZXRpYyB0aW1lciBtZXNzYWdlIGRlbGl2ZXJ5IG1lY2hhbmlzbS4gSXQmIzM5O3MgYSBwZXJmZWN0IGNhbmRpZGF0ZSBmb3IgZnV6emluZywgZ2l2ZW4gdGhhdCBpdCBhbHRlcnMgYSBjb3JlIG1lc3NhZ2UgaGFuZGxpbmcgcHJvY2Vzcy4gSSYjMzk7bSBnb2luZyB0byBmbGFnIHRoaXMgYXMgaGlnaC1wcmlvcml0eSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzIGluIG1lc3NhZ2UgaGFuZGxpbmcuCgpUaW1lIHRvIHVzZSB0aGUgYHNldC1yZXN1bHRzYCB0b29sIG5vdy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7LAogICAgJiMzNDtLVk1fSFlQRVJWJiMzNDsKICBdLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFsKICAgICYjMzQ7a3ZtX2h2X3NldF9tc3JfY29tbW9uJiMzNDssCiAgICAmIzM0O2t2bV9odl9wcm9jZXNzX3N0aW1lcnMmIzM0OwogIF0sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEh5cGVyLVYgc3ludGhldGljIHRpbWVyIG1lc3NhZ2UgZGVsaXZlcnkgbG9naWMgaW4gS1ZNIGJ5IGNsZWFyaW5nIGEgbWVzc2FnZSBmbGFnIGJlZm9yZSBzZXR0aW5nIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBndWVzdCBNU1Igd3JpdGVzIGFuZCB0aW1lciBleHBpcmF0aW9ucy4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNJiMzNDssCiAgICAmIzM0O0tWTV9IWVBFUlYmIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1faHZfc2V0X21zcl9jb21tb24mIzM0OywKICAgICYjMzQ7a3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBzeW50aGV0aWMgdGltZXIgbWVzc2FnZSBkZWxpdmVyeSBsb2dpYyBpbiBLVk0gYnkgY2xlYXJpbmcgYSBtZXNzYWdlIGZsYWcgYmVmb3JlIHNldHRpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgdGhhdCBoYW5kbGVzIGd1ZXN0IE1TUiB3cml0ZXMgYW5kIHRpbWVyIGV4cGlyYXRpb25zLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM5LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4xbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiB0cnVlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjA5PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjFtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmJlc3QtZXhwZW5zaXZlPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0tNU0FOUmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGZpeGVzIGFuIGluZm9ybWF0aW9uIGxlYWsgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgd3JpdHRlbiB0byBndWVzdCBtZW1vcnkuIFNwZWNpZmljYWxseSwgYGh2X2hkcmAgaXMgYW4gdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZS4gVGhlIGNvZGUgc2V0cyBhIHNpbmdsZSBiaXRmaWVsZCBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxYCwgbGVhdmluZyB0aGUgcmVtYWluaW5nIDcgYml0cyBvZiB0aGUgYG1lc3NhZ2VfZmxhZ3NgIGJ5dGUgdW5pbml0aWFsaXplZC4gVGhpcyBieXRlIGlzIHRoZW4gd3JpdHRlbiB0byBndWVzdCBtZW1vcnkgdmlhIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKClgLCB3aGljaCBpbnRlcm5hbGx5IHVzZXMgYF9fY29weV90b191c2VyKClgIHRvIHdyaXRlIHRvIHRoZSB1c2Vyc3BhY2UtbWFwcGVkIGd1ZXN0IG1lbW9yeS4gVGhpcyBsZWFrcyA3IGJpdHMgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHRoaXMgZXhhY3QgY2xhc3Mgb2YgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQuJiMzNDssCiAgJiMzNDtOZWVkc0tNU0FOJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnkKZXJyb3IgZGV0ZWN0b3JzIChLQVNBTiBhbmQgS01TQU4pLiBZb3VyIGpvYiBpcyB0byByZXZpZXcgdGhlIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQKZGV0ZXJtaW5lIGlmIHRoZSBjb2RlIGNoYW5nZXMganVzdGlmeSBzcGF3bmluZyBhIGRlZGljYXRlZCBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKQpmdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy4KCkNSSVRJQ0FMIERJU1RJTkNUSU9OIEJFVFdFRU4gS0FTQU4gQU5EIEtNU0FOOgotIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGUKICBhIGNvbXByZWhlbnNpdmUgc3VpdGUgb2YgZGVidWdnaW5nIHRvb2xzIGFuZCBzYW5pdGl6ZXJzLCBpbmNsdWRpbmcgS0FTQU4KICAob3V0LW9mLWJvdW5kcyBhY2Nlc3NlcywgdXNlLWFmdGVyLWZyZWUsIGRvdWJsZSBmcmVlLCBpbnZhbGlkIGZyZWUpLCBMT0NLREVQCiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy4KLSBLTVNBTiAoS2VybmVsTWVtb3J5U2FuaXRpemVyKSBkZXRlY3RzIHJlYWRzIG9mIFVOSU5JVElBTElaRUQgbWVtb3J5IChzdGFjaywgaGVhcCwKICBvciBwYWdlIGFsbG9jYXRpb25zKSBhbmQga2VybmVsLXRvLXVzZXIgbWVtb3J5IGluZm8tbGVha3MuCgpSdWxlOiBUSEVSRSBJUyBOTyBTRU5TRSBJTiBSVU5OSU5HIEEgS01TQU4gU0VTU0lPTiBJRiBBIEJVRyBDQU4gQkUgQ0FVR0hUIEJZIEtBU0FOLApMT0NLREVQLCBPUiBPVEhFUiBTVEFOREFSRCBCVUcgREVURUNUT1JTLgpBIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZCnNldCBOZWVkc0tNU0FOPXRydWUgaWYgdGhlIGNvZGUgY2hhbmdlcyBpbnRyb2R1Y2Ugb3IgZXhwb3NlIFVOSU5JVElBTElaRUQgTUVNT1JZIHJpc2tzCnRoYXQgYXJlIGRldGVjdGVkIE9OTFkgYnkgS01TQU4uCgpMb29rIGhvbGlzdGljYWxseSBhdCB0aGUgcGF0Y2ggc2VyaWVzIGFuZCBzdXJyb3VuZGluZyBjb2RlLiBFdmVuIGlmIG5vIGRpcmVjdAp1bmluaXRpYWxpemVkIGZpZWxkIGFjY2Vzc2VzIG9yIG5ldyBidWZmZXIgYWxsb2NhdGlvbnMgYXJlIGFkZGVkIGluIHRoZSBkaWZmIGl0c2VsZiwKYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzCnRoYXQgY2hhbmdlIGhvdyB0aGUgcmVzdCBvZiB0aGUgY29kZSBvcGVyYXRlcyBvbiBleGlzdGluZyBidWZmZXJzIChlLmcuIGFsbG93aW5nCnVuaW5pdGlhbGl6ZWQgc3RhY2svaGVhcCBtZW1vcnkgdG8gYmUgcmVhZCwgY29waWVkIHRvIHVzZXIgc3BhY2UsIG9yIHVzZWQgaW4gY29udHJvbApmbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsCmNhbGxlZCBmdW5jdGlvbnMsIGFuZCBjYWxsZXJzLgoKU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOgoxLiBLZXJuZWwgc3RydWN0dXJlcyBzZW50IHRvIHVzZXIgc3BhY2UgKHZpYSBjb3B5X3RvX3VzZXIsIHB1dF91c2VyLCBuZXRsaW5rIHNrYgogICBhdHRyaWJ1dGVzLCBpb2N0bCBvdXRwdXQgYXJndW1lbnRzLCBzb2NrZXQgb3B0aW9ucywgb3IgQlBGIGJ1ZmZlcnMpIHdoZXJlIGZpZWxkcwogICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLgoyLiBDb25kaXRpb25hbCBsb2dpYyBvciBicmFuY2hpbmcgdGhhdCBkZXBlbmRzIG9uIHBvdGVudGlhbGx5IHVuaW5pdGlhbGl6ZWQgdmFyaWFibGVzCiAgIG9yIHN0cnVjdCBmaWVsZHMuCjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHMKICAgY291bGQgYmUgcmVhZCBsYXRlciBpbiByZWFjaGFibGUgY29kZSBwYXRocy4KNC4gQm91bmRzIGNoZWNrcywgbGVuZ3Rocywgb3IgbG9naWMgaW4gYSB3YXkgdGhhdCBhbGxvd3Mgc3Vycm91bmRpbmcgY29kZSB0byBhY2Nlc3MKICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLgoKU2V0IE5lZWRzS01TQU49ZmFsc2UgSUY6Ci0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXIKICBkZXJlZmVyZW5jZXMsIGxvY2tpbmcgZGVhZGxvY2tzLCBvciB1c2UtYWZ0ZXItZnJlZSBidWdzICh0aGVzZSBhcmUgYWxyZWFkeSBjYXVnaHQKICBieSBLQVNBTiwgTE9DS0RFUCwgb3Igc3RhbmRhcmQgYnVnIGRldGVjdG9ycykuCi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWQKICBvciBpbml0aWFsaXplZCAoZS5nLiB1c2luZyA9IHswfSwgbWVtc2V0LCBremFsbG9jKSBiZWZvcmUgYmVpbmcgcmVhZCBvciBjb3BpZWQuCi0gVGhlIHBhdGNoIGRvZXMgbm90IGludHJvZHVjZSBhbnkgcmlzayBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSB1c2FnZSBvciBpbmZvLWxlYWtzLgoKVXNlIHlvdXIgY29kZSBhY2Nlc3MgdG9vbHMgdG8gaW5zcGVjdCB0aGUgc3Vycm91bmRpbmcgY29kZSBpZiBuZWNlc3NhcnksIHRoZW4gcHJvdmlkZQpkZXRhaWxlZCBLTVNBTlJlYXNvbmluZyBjb250cmFzdGluZyBLQVNBTiB2cyBLTVNBTiBhcHBsaWNhYmlsaXR5IGZvciB0aGlzIHBhdGNoLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgY2JlNjA5NzE5YmE1ODlmNGFmYTNlNTc2ZGVmNzVjMjIxNjdlYjBiMQpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBXZWQgQXVnIDI2IDE5OjA3OjAxIDIwMjYgJiM0MzswMDAwCgogICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3CgpkaWZmIC0tZ2l0IGEvYXJjaC94ODYva3ZtL2h5cGVydi5jIGIvYXJjaC94ODYva3ZtL2h5cGVydi5jCmluZGV4IDYwNDY1MWNiMjczOTkuLjhkMjY2OWQ4ZWYzNDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9oeXBlcnYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMKQEAgLTgwMiw3ICYjNDM7ODAyLDkgQEAgc3RhdGljIGludCBzeW5pY19kZWxpdmVyX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljLCB1MzIgc2ludCwKIAkJaWYgKG5vX3JldHJ5KQogCQkJcmV0dXJuIDA7CiAKJiM0MzsJCWh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwOwogCQlodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7CiYjNDM7CiAJCXIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHZjcHUsIG1zZ19wYWdlX2dmbiwKIAkJCQkJICAgICAgJmFtcDtodl9oZHIubWVzc2FnZV9mbGFncywKIAkJCQkJICAgICAgbXNnX29mZiAmIzQzOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjAyMwoJCQkJCQkJb3V0cHV0OiAzOQoJCQkJCQkJdGhvdWdodHM6IDY4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGFuYWx5c2lzIG9mIHRoZSBjb2RlIGNoYW5nZSwgZnJvbSB0aGUgcGVyc3BlY3RpdmUgb2YgYW4gZXhwZXJpZW5jZWQga2VybmVsIGRldmVsb3BlcjoKCioqSW52ZXN0aWdhdGluZyBhIEh5cGVyLVYgS1ZNIFBhdGNoKioKCk9rYXksIHNvIHRoZXJlJiMzOTtzIGEgcGF0Y2ggaW4gYGFyY2gveDg2L2t2bS9oeXBlcnYuY2AuIFJpZ2h0IGF3YXksIHRoYXQgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBLVk0gYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEh5cGVyLVYgZmVhdHVyZXMgb24geDg2IGhhcmR3YXJlLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIHRoYXQgYXJlIGJlaW5nIGV4YW1pbmVkIGFyZSBmcm9tIHRoZSBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3NgIHN0cnVjdHVyZS4gIFRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW5zZXJ0aW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4ID0gMDtgICpiZWZvcmUqIHNldHRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMTtgLiBUaGF0IHN1Z2dlc3RzIHNvbWUgdGltaW5nIGRlcGVuZGVuY3kgb3IgYW4gaW5pdGlhbGl6YXRpb24gaXNzdWUuIEl0JiMzOTtzIGxpa2VseSByZWxhdGVkIHRvIGhvdyB0aGUgaG9zdCBpbnRlcmFjdHMgd2l0aCB0aGUgZ3Vlc3QmIzM5O3MgSHlwZXItViBjb21wb25lbnRzIGFuZCBhIG1lc3NhZ2Ugc2lnbmFsaW5nIG1lY2hhbmlzbS4KCk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoeSAqdGhpcyogc3BlY2lmaWMgb3JkZXI/IFdoYXQmIzM5O3MgdGhlIGNvbnRleHQ/ICBJcyBgYXN1OGAgc3VwcG9zZWQgdG8gYmUgemVyb2VkIG91dCB1bmRlciBzcGVjaWZpYyBjaXJjdW1zdGFuY2VzPyBJcyB0aGlzIGEgcmFjZSBjb25kaXRpb24gZml4LCBhIGJ1ZyBpbiB0aGUgb3JpZ2luYWwgZGVzaWduLCBvciBhbiBvcHRpbWl6YXRpb24/ICBJJiMzOTtsbCBuZWVkIHRvIHVuZGVyc3RhbmQgdGhlIGZ1bmN0aW9uIHRoaXMgY29kZSBpcyBpbiwgdGhlIGRhdGEgaXQmIzM5O3MgbWFuaXB1bGF0aW5nLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBIeXBlci1WIEtWTSBpbXBsZW1lbnRhdGlvbi4gSSYjMzk7bGwgbmVlZCB0byBrbm93IHdoYXQgdGhlIGBhc3U4YCBmaWVsZCBzaWduaWZpZXMgdG8gZGV0ZXJtaW5lIHdoZXRoZXIgdGhpcyBpcyBhIGZpeCwgb3IgYSBjaGFuZ2UgaW4gdGhlIGludGVuZGVkIGZ1bmN0aW9uYWxpdHkuIEkmIzM5O2xsIGdldCB0byB3b3JrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQyLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOTowOTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzeW5pY19kZWxpdmVyX21zZyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gveDg2L2t2bS9oeXBlcnYuYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzY4PXN0YXRpYyBpbnQgc3RpbWVyX2dldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCAqcGNvdW50KVxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Nzc0OnN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzc1LVx0XHRcdCAgICAgc3RydWN0IGh2X21lc3NhZ2UgKnNyY19tc2csIGJvb2wgbm9fcmV0cnkpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTgzMz1zdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cdHBheWxvYWQtXHUwMDNlZGVsaXZlcnlfdGltZSA9IGdldF90aW1lX3JlZl9jb3VudGVyKHZjcHUtXHUwMDNla3ZtKTtcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NDg6XHRyZXR1cm4gc3luaWNfZGVsaXZlcl9tc2codG9faHZfc3luaWModmNwdSksXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVx0XHRcdFx0IHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHgsIG1zZyxcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40My8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MDk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjc3MgoJCQkJCQkJb3V0cHV0OiA0MgoJCQkJCQkJdGhvdWdodHM6IDI4CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDoKCioqRGl2aW5nIGludG8gYHN5bmljX2RlbGl2ZXJfbXNnYCoqCgpBbHJpZ2h0LCB0aW1lIHRvIGRpZyBpbnRvIHRoaXMgYHN5bmljX2RlbGl2ZXJfbXNnYCBmdW5jdGlvbi4gTGV0JiMzOTtzIHNlZS4uLiBpdCYjMzk7cyBpbiBgYXJjaC94ODYva3ZtL2h5cGVydi5jYCwgd2hpY2ggaW1tZWRpYXRlbHkgdGVsbHMgbWUgd2UmIzM5O3JlIGRlYWxpbmcgd2l0aCBIeXBlci1WIGludGVncmF0aW9uIG9uIHg4Niwgc3BlY2lmaWNhbGx5IHdpdGhpbiB0aGUgS1ZNIGNvbnRleHQuIFRoaXMgbWVhbnMgd2UmIzM5O3JlIGxvb2tpbmcgYXQgdGhlIG1lY2hhbmlzbSBmb3IgZGVsaXZlcmluZyBtZXNzYWdlcyBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgdmlhIHRoZSBTeW5JQyBpbnRlcmZhY2UuIEdpdmVuIHRoZSBmaWxlbmFtZSwgSSYjMzk7bSBleHBlY3RpbmcgdGhpcyBpcyBhIGNyaXRpY2FsIHBpZWNlIHJlbGF0ZWQgdG8gcGVyZm9ybWFuY2UgYW5kIHJlc3BvbnNpdmVuZXNzIHdpdGhpbiB0aGUgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgbWVzc2FnZXMgYXJlIHN0cnVjdHVyZWQsIGhvdyB0aGV5JiMzOTtyZSBxdWV1ZWQsIHdoZXJlIHRoZSBpbnRlcnJ1cHQgaGFuZGxlcnMgYXJlIGxvY2F0ZWQuIFRoaXMgaXMgdGhlIGxvdy1sZXZlbCwgY3JpdGljYWwgc3R1ZmYuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDQvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC94ODYva3ZtL2h5cGVydi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNzc0LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzc0Olx0c3RhdGljIGludCBzeW5pY19kZWxpdmVyX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljLCB1MzIgc2ludCxcbiA3NzU6XHRcdFx0XHQgICAgIHN0cnVjdCBodl9tZXNzYWdlICpzcmNfbXNnLCBib29sIG5vX3JldHJ5KVxuIDc3NjpcdHtcbiA3Nzc6XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGh2X3N5bmljX3RvX3ZjcHUoc3luaWMpO1xuIDc3ODpcdFx0aW50IG1zZ19vZmYgPSBvZmZzZXRvZihzdHJ1Y3QgaHZfbWVzc2FnZV9wYWdlLCBzaW50X21lc3NhZ2Vbc2ludF0pO1xuIDc3OTpcdFx0Z2ZuX3QgbXNnX3BhZ2VfZ2ZuO1xuIDc4MDpcdFx0c3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyIGh2X2hkcjtcbiA3ODE6XHRcdGludCByO1xuIDc4MjpcdFxuIDc4MzpcdFx0aWYgKCEoc3luaWMtXHUwMDNlbXNnX3BhZ2UgXHUwMDI2IEhWX1NZTklDX1NJTVBfRU5BQkxFKSlcbiA3ODQ6XHRcdFx0cmV0dXJuIC1FTk9FTlQ7XG4gNzg1Olx0XG4gNzg2Olx0XHRtc2dfcGFnZV9nZm4gPSBzeW5pYy1cdTAwM2Vtc2dfcGFnZSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbiA3ODc6XHRcbiA3ODg6XHRcdC8qXG4gNzg5Olx0XHQgKiBTdHJpY3RseSBmb2xsb3dpbmcgdGhlIHNwZWMtbWFuZGF0ZWQgb3JkZXJpbmcgd291bGQgYXNzdW1lIHNldHRpbmdcbiA3OTA6XHRcdCAqIC5tc2dfcGVuZGluZyBiZWZvcmUgY2hlY2tpbmcgLm1lc3NhZ2VfdHlwZS4gIEhvd2V2ZXIsIHRoaXMgZnVuY3Rpb25cbiA3OTE6XHRcdCAqIGlzIG9ubHkgY2FsbGVkIGluIHZjcHUgY29udGV4dCBzbyB0aGUgZW50aXJlIHVwZGF0ZSBpcyBhdG9taWMgZnJvbVxuIDc5MjpcdFx0ICogZ3Vlc3QgUE9WIGFuZCB0aHVzIHRoZSBleGFjdCBvcmRlciBoZXJlIGRvZXNuJiMzOTt0IG1hdHRlci5cbiA3OTM6XHRcdCAqL1xuIDc5NDpcdFx0ciA9IGt2bV92Y3B1X3JlYWRfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sIFx1MDAyNmh2X2hkci5tZXNzYWdlX3R5cGUsXG4gNzk1Olx0XHRcdFx0XHQgICAgIG1zZ19vZmYgJiM0Mzsgb2Zmc2V0b2Yoc3RydWN0IGh2X21lc3NhZ2UsXG4gNzk2Olx0XHRcdFx0XHRcdFx0XHRoZWFkZXIubWVzc2FnZV90eXBlKSxcbiA3OTc6XHRcdFx0XHRcdCAgICAgc2l6ZW9mKGh2X2hkci5tZXNzYWdlX3R5cGUpKTtcbiA3OTg6XHRcdGlmIChyIFx1MDAzYyAwKVxuIDc5OTpcdFx0XHRyZXR1cm4gcjtcbiA4MDA6XHRcbiA4MDE6XHRcdGlmIChodl9oZHIubWVzc2FnZV90eXBlICE9IEhWTVNHX05PTkUpIHtcbiA4MDI6XHRcdFx0aWYgKG5vX3JldHJ5KVxuIDgwMzpcdFx0XHRcdHJldHVybiAwO1xuIDgwNDpcdFxuIDgwNTpcdFx0XHRodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4ID0gMDtcbiA4MDY6XHRcdFx0aHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxO1xuIDgwNzpcdFxuIDgwODpcdFx0XHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sXG4gODA5Olx0XHRcdFx0XHRcdCAgICAgIFx1MDAyNmh2X2hkci5tZXNzYWdlX2ZsYWdzLFxuIDgxMDpcdFx0XHRcdFx0XHQgICAgICBtc2dfb2ZmICYjNDM7XG4gODExOlx0XHRcdFx0XHRcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodl9tZXNzYWdlLFxuIDgxMjpcdFx0XHRcdFx0XHRcdCAgICAgICBoZWFkZXIubWVzc2FnZV9mbGFncyksXG4gODEzOlx0XHRcdFx0XHRcdCAgICAgIHNpemVvZihodl9oZHIubWVzc2FnZV9mbGFncykpO1xuIDgxNDpcdFx0XHRpZiAociBcdTAwM2MgMClcbiA4MTU6XHRcdFx0XHRyZXR1cm4gcjtcbiA4MTY6XHRcdFx0cmV0dXJuIC1FQUdBSU47XG4gODE3Olx0XHR9XG4gODE4Olx0XG4gODE5Olx0XHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sIHNyY19tc2csIG1zZ19vZmYsXG4gODIwOlx0XHRcdFx0XHQgICAgICBzaXplb2Yoc3JjX21zZy1cdTAwM2VoZWFkZXIpICYjNDM7XG4gODIxOlx0XHRcdFx0XHQgICAgICBzcmNfbXNnLVx1MDAzZWhlYWRlci5wYXlsb2FkX3NpemUpO1xuIDgyMjpcdFx0aWYgKHIgXHUwMDNjIDApXG4gODIzOlx0XHRcdHJldHVybiByO1xuIDgyNDpcdFxuIDgyNTpcdFx0ciA9IHN5bmljX3NldF9pcnEoc3luaWMsIHNpbnQpO1xuIDgyNjpcdFx0aWYgKHIgXHUwMDNjIDApXG4gODI3Olx0XHRcdHJldHVybiByO1xuIDgyODpcdFx0aWYgKHIgPT0gMClcbiA4Mjk6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4gODMwOlx0XHRyZXR1cm4gMDtcbiA4MzE6XHR9XG4gODMyOlx0XG4gODMzOlx0c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxuIDgzNDpcdHtcbiA4MzU6XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGh2X3N0aW1lcl90b192Y3B1KHN0aW1lcik7XG4gODM2Olx0XHRzdHJ1Y3QgaHZfbWVzc2FnZSAqbXNnID0gXHUwMDI2c3RpbWVyLVx1MDAzZW1zZztcbiA4Mzc6XHRcdHN0cnVjdCBodl90aW1lcl9tZXNzYWdlX3BheWxvYWQgKnBheWxvYWQgPVxuIDgzODpcdFx0XHRcdChzdHJ1Y3QgaHZfdGltZXJfbWVzc2FnZV9wYXlsb2FkICopXHUwMDI2bXNnLVx1MDAzZXUucGF5bG9hZDtcbiA4Mzk6XHRcbiA4NDA6XHRcdC8qXG4gODQxOlx0XHQgKiBUbyBhdm9pZCBwaWxpbmcgdXAgcGVyaW9kaWMgdGlja3MsIGRvbiYjMzk7dCByZXRyeSBtZXNzYWdlXG4gODQyOlx0XHQgKiBkZWxpdmVyeSBmb3IgdGhlbSAod2l0aGluIFwmIzM0O2xhenlcJiMzNDsgbG9zdCB0aWNrcyBwb2xpY3kpLlxuIDg0MzpcdFx0ICovXG4gODQ0Olx0XHRib29sIG5vX3JldHJ5ID0gc3RpbWVyLVx1MDAzZWNvbmZpZy5wZXJpb2RpYztcbiA4NDU6XHRcbiA4NDY6XHRcdHBheWxvYWQtXHUwMDNlZXhwaXJhdGlvbl90aW1lID0gc3RpbWVyLVx1MDAzZWV4cF90aW1lO1xuIDg0NzpcdFx0cGF5bG9hZC1cdTAwM2VkZWxpdmVyeV90aW1lID0gZ2V0X3RpbWVfcmVmX2NvdW50ZXIodmNwdS1cdTAwM2Vrdm0pO1xuIDg0ODpcdFx0cmV0dXJuIHN5bmljX2RlbGl2ZXJfbXNnKHRvX2h2X3N5bmljKHZjcHUpLFxuIDg0OTpcdFx0XHRcdFx0IHN0aW1lci1cdTAwM2Vjb25maWcuc2ludHgsIG1zZyxcbiA4NTA6XHRcdFx0XHRcdCBub19yZXRyeSk7XG4gODUxOlx0fVxuIDg1MjpcdFxuIDg1MzpcdHN0YXRpYyBpbnQgc3RpbWVyX25vdGlmeV9kaXJlY3Qoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxuIDg1NDpcdHtcbiA4NTU6XHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGh2X3N0aW1lcl90b192Y3B1KHN0aW1lcik7XG4gODU2Olx0XHRzdHJ1Y3Qga3ZtX2xhcGljX2lycSBpcnEgPSB7XG4gODU3Olx0XHRcdC5kZWxpdmVyeV9tb2RlID0gQVBJQ19ETV9GSVhFRCxcbiA4NTg6XHRcdFx0LnZlY3RvciA9IHN0aW1lci1cdTAwM2Vjb25maWcuYXBpY192ZWN0b3JcbiA4NTk6XHRcdH07XG4gODYwOlx0XG4gODYxOlx0XHRpZiAobGFwaWNfaW5fa2VybmVsKHZjcHUpKVxuIDg2MjpcdFx0XHRyZXR1cm4gIWt2bV9hcGljX3NldF9pcnEodmNwdSwgXHUwMDI2aXJxLCBOVUxMKTtcbiA4NjM6XHRcdHJldHVybiAwO1xuIDg2NDpcdH1cbiA4NjU6XHRcbiA4NjY6XHRzdGF0aWMgdm9pZCBzdGltZXJfZXhwaXJhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXG4gODY3Olx0e1xuIDg2ODpcdFx0aW50IHIsIGRpcmVjdCA9IHN0aW1lci1cdTAwM2Vjb25maWcuZGlyZWN0X21vZGU7XG4gODY5Olx0XG4gODcwOlx0XHRzdGltZXItXHUwMDNlbXNnX3BlbmRpbmcgPSB0cnVlO1xuIDg3MTpcdFx0aWYgKCFkaXJlY3QpXG4gODcyOlx0XHRcdHIgPSBzdGltZXJfc2VuZF9tc2coc3RpbWVyKTtcbiA4NzM6XHRcdGVsc2VcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40NS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNDY0NgoJCQkJCQkJb3V0cHV0OiAzMQoJCQkJCQkJdGhvdWdodHM6IDI4NQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipNeSBBbmFseXNpcyBvZiB0aGUgSHlwZXItViBNZXNzYWdlIEhlYWRlciBJbml0aWFsaXphdGlvbioqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQmIzM5O3MgbWFraW5nIGEgc2VlbWluZ2x5IHNtYWxsIGNoYW5nZSwgYWRkaW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4ID0gMDtgIGJlZm9yZSBzZXR0aW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7YC4gVGhhdCBzZWVtcyBiZW5pZ24gb24gdGhlIHN1cmZhY2UsIGJ1dCBJIG5lZWQgdG8gZGlnIGRlZXBlci4gSSBzZWUgYGh2X2hkcmAgaXMgYSBsb2NhbCB2YXJpYWJsZSBvbiB0aGUgc3RhY2ssIGRlZmluZWQgYXMgYSBgc3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyYC4gUHJldmlvdXNseSwgdGhlIGNvZGUgZGlyZWN0bHkgc2V0IHRoZSBgbXNnX3BlbmRpbmdgIGJpdCB3aXRoaW4gYG1lc3NhZ2VfZmxhZ3NgIHdpdGhvdXQgYW55IHByaW9yIGluaXRpYWxpemF0aW9uLiBTaW5jZSBgaHZfaGRyYCBpcyB1bmluaXRpYWxpemVkLCBhbGwgdGhlIG90aGVyIGJpdHMgd2l0aGluIGBtZXNzYWdlX2ZsYWdzYCB3ZXJlIGVzc2VudGlhbGx5IGdhcmJhZ2Ug4oCTIHJhbmRvbSBiaXRzIGZyb20gdGhlIHN0YWNrLgoKVGhlbiwgYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VgIGNvbWVzIGludG8gcGxheS4gSXQgd3JpdGVzIGBzaXplb2YoaHZfaGRyLm1lc3NhZ2VfZmxhZ3MpYCBieXRlcyB0byB0aGUgZ3Vlc3QgcGFnZS4gVGhpcyBpcyB3aGVyZSBpdCBjbGlja3M6ICp1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB3YXMgYmVpbmcgd3JpdHRlbiB0byBndWVzdCBtZW1vcnkhKiBUaGF0JiMzOTtzIGEgY2xhc3NpYyBpbmZvLWxlYWsuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGlzc3VlIHRoYXQgdG9vbHMgbGlrZSBLTVNBTiBhcmUgZGVzaWduZWQgdG8gY2F0Y2gg4oCTIGRldGVjdGluZyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBmbGFnZ2luZyBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2Ugb3IgdGhlIGd1ZXN0LgoKV2FpdCwgZG9lcyBLTVNBTiB0cmFjayB3cml0ZXMgdG8gKmd1ZXN0KiBtZW1vcnk/IFRoYXQmIzM5O3MgYSBrZXkgcXVlc3Rpb24gaGVyZS4gYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VgIGlzIHdyaXRpbmcgdG8gZ3Vlc3QgbWVtb3J5LCBidXQgZ3Vlc3QgbWVtb3J5IGlzIHVsdGltYXRlbHkgbWFuYWdlZCBieSB1c2Vyc3BhY2UgKGxpa2UgUUVNVSkgYW5kIG1hcHBlZCBpbnRvIHRoZSBrZXJuZWwsIG9yIGl0JiMzOTtzIGEgY29weS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgS01TQU4mIzM5O3MgaW5zdHJ1bWVudGF0aW9uIGlzIHRyaWdnZXJlZCBieSB3cml0ZXMgdG8gbWVtb3J5IG1hcHBlZCBmcm9tIHVzZXJzcGFjZSBpbnRvIGtlcm5lbCBzcGFjZSwgb3IgaXMgaXQgb25seSBsb29raW5nIGZvciBkYXRhIGxlYWtzIGZyb20gdGhlIGtlcm5lbCBpdHNlbGY/IEkgbmVlZCB0byB2ZXJpZnkgdGhhdCBga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZWAgaXMgY292ZXJlZCBieSBLTVNBTi4KCkFscmlnaHQsIEkgbmVlZCB0byBjaGVjayBga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZWAuIExldCYjMzk7cyBzZWUgd2hhdCYjMzk7cyBnb2luZyBvbiB0aGVyZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9Nzc0PXN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXG4tLVxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTgwNy1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4MDg6XHRcdHIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHZjcHUsIG1zZ19wYWdlX2dmbixcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04MDktXHRcdFx0XHRcdCAgICAgIFx1MDAyNmh2X2hkci5tZXNzYWdlX2ZsYWdzLFxuLS1cbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04MTgtXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODE5Olx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UodmNwdSwgbXNnX3BhZ2VfZ2ZuLCBzcmNfbXNnLCBtc2dfb2ZmLFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTgyMC1cdFx0XHRcdCAgICAgIHNpemVvZihzcmNfbXNnLVx1MDAzZWhlYWRlcikgJiM0Mztcbi0tXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jPTU1Njg9c3RhdGljIGlubGluZSB2b2lkIG5lc3RlZF9yZWxlYXNlX3ZtY3MxMihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NTg1LVx0LyogRmx1c2ggVk1DUzEyIHRvIGd1ZXN0IG1lbW9yeSAqL1xuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYzo1NTg2Olx0a3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NTg3LVx0XHRcdFx0ICB2bXgtXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgXHUwMDNlXHUwMDNlIFBBR0VfU0hJRlQsXG4tLVxuaW5jbHVkZS9saW51eC9rdm1faG9zdC5oPTE0NDk9aW50IGt2bV92Y3B1X3JlYWRfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBncGFfdCBncGEsIHZvaWQgKmRhdGEsXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ1MC1cdFx0XHR1bnNpZ25lZCBsb25nIGxlbik7XG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ1MTppbnQga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgY29uc3Qgdm9pZCAqZGF0YSxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDUyLVx0XHRcdCAgICAgIGludCBvZmZzZXQsIGludCBsZW4pO1xuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MzMyMD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3dyaXRlX2d1ZXN0X3BhZ2UpO1xudmlydC9rdm0va3ZtX21haW4uYy0zMzIxLVxudmlydC9rdm0va3ZtX21haW4uYzozMzIyOmludCBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLFxudmlydC9rdm0va3ZtX21haW4uYy0zMzIzLVx0XHRcdCAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBvZmZzZXQsIGludCBsZW4pXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMzI4LX1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MzMyOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSk7XG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzMzAtXG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMzUyPWludCBrdm1fdmNwdV93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgY29uc3Qgdm9pZCAqZGF0YSxcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzNjAtXHR3aGlsZSAoKHNlZyA9IG5leHRfc2VnbWVudChsZW4sIG9mZnNldCkpICE9IDApIHtcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzM2MTpcdFx0cmV0ID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBnZm4sIGRhdGEsIG9mZnNldCwgc2VnKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzM2Mi1cdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNjMzMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDMxCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBoZXJlJiMzOTtzIG15IGludGVycHJldGF0aW9uIG9mIHRoYXQgdGhvdWdodCBwcm9jZXNzLCBmcm9tIGFuIGV4cGVydCYjMzk7cyBwZXJzcGVjdGl2ZToKCioqRGl2aW5nIGludG8gS1ZNIFBhZ2UgV3JpdGUgT3BlcmF0aW9ucyoqCgpBbHJpZ2h0LCBzbyB0aGUgdGFzayBhdCBoYW5kIGlzIHRvIHVuZGVyc3RhbmQgaG93IEtWTSBoYW5kbGVzIHdyaXRpbmcgdG8gZ3Vlc3QgcGFnZXMuIE15IGZvY3VzIG5hdHVyYWxseSBnb2VzIHRvIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCwgc3BlY2lmaWNhbGx5IHdpdGhpbiBgdmlydC9rdm0va3ZtX21haW4uY2AuIEl0JiMzOTtzIGEga2V5IGZ1bmN0aW9uLCBhcyB0aGUgbmFtZSBpdHNlbGYgaW1wbGllcywgaXQgaXMgcmVzcG9uc2libGUgZm9yIHRoZSBpbnRlcmFjdGlvbiBiZXR3ZWVuIHRoZSBob3N0IGFuZCB0aGUgZ3Vlc3Qgd2hlbiBtb2RpZnlpbmcgbWVtb3J5LiBJJiMzOTttIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBjb21wbGV4aXR5IGhlcmUg4oCTIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlciAoVExCKSBpbnZhbGlkYXRpb25zLCBwb3RlbnRpYWwgVk0gZXhpdHMsIGFuZCBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgZ3Vlc3QgcGFnZSBtb2RpZmljYXRpb24gdGFrZXMgcGxhY2UsIGFuZCBJIGFudGljaXBhdGUgc2VlaW5nIGEgbG90IG9mIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCBhY2Nlc3MgY2hlY2tzLiBJJiMzOTttIGtlZW4gdG8gc2VlIGlmIGl0IG1ha2VzIGRpcmVjdCBjYWxscyB0byBoYXJkd2FyZSBvciBpZiB0aGVyZSBhcmUgbGF5ZXJzIG9mIGFic3RyYWN0aW9uIHByZXNlbnQuIFRpbWUgdG8gZGlnIGluIGFuZCBzZWUgdGhlIGxvdyBsZXZlbCBkZXRhaWxzLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O3ZpcnQva3ZtL2t2bV9tYWluLmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiAzMzIyLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzMzMjI6XHRpbnQga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbixcbjMzMjM6XHRcdFx0XHQgICAgICBjb25zdCB2b2lkICpkYXRhLCBpbnQgb2Zmc2V0LCBpbnQgbGVuKVxuMzMyNDpcdHtcbjMzMjU6XHRcdHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKnNsb3QgPSBrdm1fdmNwdV9nZm5fdG9fbWVtc2xvdCh2Y3B1LCBnZm4pO1xuMzMyNjpcdFxuMzMyNzpcdFx0cmV0dXJuIF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2UodmNwdS1cdTAwM2Vrdm0sIHNsb3QsIGdmbiwgZGF0YSwgb2Zmc2V0LCBsZW4pO1xuMzMyODpcdH1cbjMzMjk6XHRFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSk7XG4zMzMwOlx0XG4zMzMxOlx0aW50IGt2bV93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgY29uc3Qgdm9pZCAqZGF0YSxcbjMzMzI6XHRcdFx0ICAgIHVuc2lnbmVkIGxvbmcgbGVuKVxuMzMzMzpcdHtcbjMzMzQ6XHRcdGdmbl90IGdmbiA9IGdwYSBcdTAwM2VcdTAwM2UgUEFHRV9TSElGVDtcbjMzMzU6XHRcdGludCBzZWc7XG4zMzM2Olx0XHRpbnQgb2Zmc2V0ID0gb2Zmc2V0X2luX3BhZ2UoZ3BhKTtcbjMzMzc6XHRcdGludCByZXQ7XG4zMzM4Olx0XG4zMzM5Olx0XHR3aGlsZSAoKHNlZyA9IG5leHRfc2VnbWVudChsZW4sIG9mZnNldCkpICE9IDApIHtcbjMzNDA6XHRcdFx0cmV0ID0ga3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoa3ZtLCBnZm4sIGRhdGEsIG9mZnNldCwgc2VnKTtcbjMzNDE6XHRcdFx0aWYgKHJldCBcdTAwM2MgMClcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPmttc2FuLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogNzAwMQoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Pa2F5LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoaXMuIEhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgYXMgaWYgdGhleSYjMzk7cmUgbXkgb3duOgoKKipBbmFseXppbmcgYF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2VgKioKCkFscmlnaHQsIHNvIHRoZSBmb2N1cyBpcyBvbiBgX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZWAsIGVoPyBUaGF0IGZ1bmN0aW9uIGNhbGwgaW1tZWRpYXRlbHkgcGlxdWVzIG15IGludGVyZXN0LiBJdCYjMzk7cyB0aGUgY29yZSBvZiBob3cgd2UmIzM5O3JlIHB1c2hpbmcgZGF0YSBpbnRvIGEgZ3Vlc3QgVk0mIzM5O3MgbWVtb3J5IHNwYWNlLCBpc24mIzM5O3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSYjMzk7bSBhbHJlYWR5IG1lbnRhbGx5IHJ1bm5pbmcgdGhyb3VnaCB0aGUgdmFyaW91cyBjb250ZXh0cyB3aGVyZSB0aGlzIHdvdWxkIGJlIGNhbGxlZDogdmlydGlvIGRldmljZXMsIGRpcmVjdCBtZW1vcnkgYWNjZXNzIG9wZXJhdGlvbnMsIHNoYXJlZCBtZW1vcnkgYXJyYW5nZW1lbnRzLCBsaWtlbHkgYW55dGhpbmcgdGhhdCByZXF1aXJlcyBtb2RpZnlpbmcgdGhlIGd1ZXN0JiMzOTtzIHBoeXNpY2FsIG1lbW9yeSBkaXJlY3RseSBmcm9tIHRoZSBob3N0LgoKRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBXcml0aW5nIHRvIGd1ZXN0IG1lbW9yeSBpcyBhIHByaXZpbGVnZWQgb3BlcmF0aW9uLiBJZiB0aGlzIHJvdXRpbmUgaXMgZmxhd2VkLCBpdOKAmXMgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvciBmb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIEhvdyBhcmUgd2UgdmFsaWRhdGluZyB0aGUgc291cmNlIG9mIHRoZSBkYXRhPyBBcmUgdGhlcmUgY2hlY2tzIG9uIHRoZSB0YXJnZXQgYWRkcmVzcyByYW5nZSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzPyBJcyB0aGVyZSBwcm9wZXIgaXNvbGF0aW9uPyBUaGlzIGlzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gbWFuaWZlc3QsIHNvIHNlY3VyaXR5IGlzIHBhcmFtb3VudC4KCk5vdywgcGVyZm9ybWFuY2UuIFRoYXTigJlzIGFsd2F5cyB0aGUga2lja2VyIHdpdGggS1ZNLiBXcml0aW5nIGEgZ3Vlc3QgcGFnZSBpbnZvbHZlcyB0cmFuc2l0aW9uaW5nIGJldHdlZW4gaG9zdCBhbmQgZ3Vlc3QgY29udGV4dHMsIHBvdGVudGlhbGx5IFRMQiBmbHVzaGVzLCBhbmQgdmFyaW91cyBtZW1vcnkgbWFuYWdlbWVudCBvdmVyaGVhZC4gV2UgbmVlZCB0byBkaXNzZWN0IHRoZSBpbXBsZW1lbnRhdGlvbiB0byBpZGVudGlmeSBhbnkgYm90dGxlbmVja3MuIElzIGl0IHBhZ2UtYWxpZ25lZD8gQXJlIHRoZXJlIGNvcHkgb3B0aW1pemF0aW9ucyBpbnZvbHZlZCwgb3IgYXJlIHdlIHN0dWNrIHdpdGggYnl0ZS1ieS1ieXRlIGNvcGllcyB0aGF0IGFyZSBzbG93IGFzIG1vbGFzc2VzPyBXaGF0IGFib3V0IHRoZSBtZW1vcnkgbW9kZWw/IEFyZSB3ZSBkZWFsaW5nIHdpdGggY2FjaGUgY29oZXJlbmN5IGlzc3Vlcywgb3IgYXJlIHdlIHRha2luZyB0aGUgYXBwcm9wcmlhdGUgcHJlY2F1dGlvbnM/IFdoYXQgYWJvdXQgdGhlIGF0b21pY2l0eSBvZiB0aGUgb3BlcmF0aW9uPyBJcyBpdCBhIHNpbmdsZSBvcGVyYXRpb24sIG9yIHNldmVyYWwgc21hbGxlciBvcGVyYXRpb25zIHRoYXQsIGlmIGludGVycnVwdGVkLCBjb3VsZCBsZWF2ZSB0aGUgZ3Vlc3QgaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlPwoKTmV4dCwgSSBuZWVkIHRvIHRoaW5rIGFib3V0IGVycm9yIGhhbmRsaW5nLiBXaGF0IGhhcHBlbnMgaWYgdGhlIHdyaXRlIGZhaWxzPyBEb2VzIHRoZSBmdW5jdGlvbiByZXR1cm4gYSBjbGVhciBlcnJvciBjb2RlPyBIb3cgYXJlIHRoZXNlIGVycm9ycyBwcm9wYWdhdGVkIHVwIHRoZSBjYWxsIHN0YWNrLCBhbmQgd2hhdCBpcyB0aGUgYXBwcm9wcmlhdGUgcmVzcG9uc2U/IEFyZSB0aGVyZSBtZWNoYW5pc21zIHRvIGhhbmRsZSBjYXNlcyB3aGVyZSB0aGUgZ3Vlc3QgcGFnZSBtaWdodCBiZSBsb2NrZWQgb3Igb3RoZXJ3aXNlIHVuYXZhaWxhYmxlPwoKSSYjMzk7bGwgbmVlZCB0byBleGFtaW5lIHRoZSBjYWxsaW5nIGNvbnZlbnRpb25zIGFuZCBhbnkgbG9ja2luZyBwcmltaXRpdmVzIGludm9sdmVkLiBJZiB3ZSYjMzk7cmUgbm90IGNhcmVmdWwgd2l0aCBzeW5jaHJvbml6YXRpb24sIHdlIGNvdWxkIGludHJvZHVjZSByYWNlIGNvbmRpdGlvbnMsIGRlYWRsb2Nrcywgb3Igb3RoZXIgbmFzdHkgY29uY3VycmVuY3kgYnVncy4gVW5kZXJzdGFuZGluZyB0aGUgbG9jayBvcmRlciBhbmQgYW55IGFzc29jaWF0ZWQgY29udGVudGlvbiBpcyBjcnVjaWFsLgoKVWx0aW1hdGVseSwgSSBuZWVkIHRvIGFuc3dlciB0aGVzZSBxdWVzdGlvbnMgdG8gZm9ybSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHBlcnNwZWN0aXZlIGlzIHRvIHNlZWsgb3V0IHBvdGVudGlhbCBzZWN1cml0eSBwaXRmYWxscywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCB0aGUgaGFuZGxpbmcgb2YgY29uY3VycmVuY3kgYW5kIGVycm9yIHNjZW5hcmlvcy4gSXQmIzM5O3MgYSBjcml0aWNhbCBwaWVjZSBvZiB0aGUgcHV6emxlLCBhbmQgYSBkZWVwIHVuZGVyc3RhbmRpbmcgb2YgaXRzIHdvcmtpbmdzIGlzIGVzc2VudGlhbCBmb3IgdGhlIHN0YWJpbGl0eSBhbmQgaW50ZWdyaXR5IG9mIHRoZSBlbnRpcmUgdmlydHVhbGl6ZWQgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUwLzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2t2bV93cml0ZV9ndWVzdF9wYWdlJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDt2aXJ0L2t2bS9rdm1fbWFpbi5jPTMyOTA9RVhQT1JUX1NZTUJPTF9GT1JfS1ZNX0lOVEVSTkFMKGt2bV92Y3B1X3JlYWRfZ3Vlc3RfYXRvbWljKTtcbi0tXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMyOTItLyogQ29weSBAbGVuIGJ5dGVzIGZyb20gQGRhdGEgaW50byBndWVzdCBtZW1vcnkgYXQgJiMzOTsoQGdmbiAqIFBBR0VfU0laRSkgJiM0MzsgQG9mZnNldCYjMzk7ICovXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMyOTM6c3RhdGljIGludCBfX2t2bV93cml0ZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzI5NC1cdFx0XHRcdCAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwgZ2ZuX3QgZ2ZuLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmM9MzMxMz1pbnQga3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXG4tLVxudmlydC9rdm0va3ZtX21haW4uYy0zMzE3LVxudmlydC9rdm0va3ZtX21haW4uYzozMzE4Olx0cmV0dXJuIF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoa3ZtLCBzbG90LCBnZm4sIGRhdGEsIG9mZnNldCwgbGVuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzMxOS19XG4tLVxudmlydC9rdm0va3ZtX21haW4uYz0zMzIyPWludCBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ2ZuX3QgZ2ZuLFxuLS1cbnZpcnQva3ZtL2t2bV9tYWluLmMtMzMyNi1cbnZpcnQva3ZtL2t2bV9tYWluLmM6MzMyNzpcdHJldHVybiBfX2t2bV93cml0ZV9ndWVzdF9wYWdlKHZjcHUtXHUwMDNla3ZtLCBzbG90LCBnZm4sIGRhdGEsIG9mZnNldCwgbGVuKTtcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzMyOC19XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTEvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDgwNDQKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0JiMzOTtzIGRpdmUgaW50byB0aGlzIGBfX2t2bV93cml0ZV9ndWVzdF9wYWdlYCBmdW5jdGlvbi4gSSYjMzk7bSBhbHJlYWR5IGFudGljaXBhdGluZyBzb21lIG9mIHRoZSBjb21wbGV4aXR5IGhlcmUsIGdpdmVuIGl0JiMzOTtzIGRlYWxpbmcgd2l0aCB3cml0aW5nIHRvIGd1ZXN0IG1lbW9yeSBmcm9tIHRoZSBob3N0LCB3aGljaCBpcyBhIGNvcmUgcGFydCBvZiBLVk0mIzM5O3MgZnVuY3Rpb25hbGl0eS4gSSBrbm93IHRoZSBrZXkgY2hhbGxlbmdlcyByZXZvbHZlIGFyb3VuZCBtZW1vcnkgbWFwcGluZywgcHJvdGVjdGlvbiwgYW5kIGVuc3VyaW5nIGNvbnNpc3RlbmN5LiBXZSYjMzk7bGwgYmUgbG9va2luZyBmb3IgaG93IHRoZSBmdW5jdGlvbiBoYW5kbGVzIHRoZXNlIGFzcGVjdHMgYW5kIHdoaWNoIG9wdGltaXphdGlvbnMgYXJlIHVzZWQuCgoqKkFuYWx5emluZyBgX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZWAqKgoKU28sIHRoaXMgZnVuY3Rpb24gaXMgcmVzcG9uc2libGUgZm9yIHRoZSB0cmFuc2ZlciBpdHNlbGYuIEltbWVkaWF0ZWx5LCBJIHdhbnQgdG8gc2VlOgoKKiAgICoqQWRkcmVzcyBUcmFuc2xhdGlvbiBhbmQgVmFsaWRhdGlvbjoqKiBIb3cgZG9lcyBpdCB0cmFuc2xhdGUgdGhlIGd1ZXN0IHBoeXNpY2FsIGFkZHJlc3MgKEdQQSkgdG8gYSBob3N0IHZpcnR1YWwgYWRkcmVzcyAoSFZBKT8gSXMgdGhlcmUgYSBUTEIgbG9va3VwLCBvciBkaXJlY3QgbWFuaXB1bGF0aW9uPyBXaGF0IGFyZSB0aGUgY2hlY2tzIGluIHBsYWNlIHRvIGVuc3VyZSB0aGUgR1BBIGlzIHZhbGlkLCBtYXBwZWQsIGFuZCB0aGF0IHRoZSBndWVzdCBoYXMgd3JpdGUgcGVybWlzc2lvbnM/IERvZXMgaXQgaGFuZGxlIGRpZmZlcmVudCBtZW1vcnkgbW9kZWxzIHN1Y2ggYXMgTU1JTyBvciBQSU8/IEkmIzM5O20gZXhwZWN0aW5nIHNvbWUgc29waGlzdGljYXRlZCBjaGVja3MgdG8gYXZvaWQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLgoqICAgKipEYXRhIFRyYW5zZmVyIE1lY2hhbmlzbToqKiBJcyBpdCBhIGRpcmVjdCBtZW1vcnkgY29weSAoYG1lbWNweWApPyBEb2VzIGl0IHVzZSBETUEgb3Igc29tZSBvdGhlciBvcHRpbWl6ZWQgYXBwcm9hY2ggZm9yIGxhcmdlciB0cmFuc2ZlcnM/IEFyZSB0aGVyZSBjb25zaWRlcmF0aW9ucyBmb3IgQ1BVIGNhY2hlIGNvaGVyZW5jeT8gSG93IGFyZSBwb3RlbnRpYWwgcGFnZSBmYXVsdHMgaGFuZGxlZD8KKiAgICoqUHJvdGVjdGlvbiBNZWNoYW5pc21zOioqIEkmIzM5O20gY3VyaW91cyBhYm91dCB0aGUgc3BlY2lmaWMgbWVjaGFuaXNtcyB1c2VkIHRvIGVuc3VyZSB0aGUgZ3Vlc3QgZG9lc24mIzM5O3QgYWNjaWRlbnRhbGx5IChvciBtYWxpY2lvdXNseSkgY29ycnVwdCBob3N0IG1lbW9yeSwgb3IgYW5vdGhlciBndWVzdCYjMzk7cyBtZW1vcnkuIEFyZSB0aGVyZSBzaGFkb3cgcGFnZSB0YWJsZXMsIG1lbW9yeSBiYXJyaWVycywgb3Igb3RoZXIgdGVjaG5pcXVlcyBlbXBsb3llZD8gSG93IGlzIHRoZSB3cml0ZSBwcm90ZWN0aW9uIGltcGxlbWVudGVkPwoqICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlcmUmIzM5O3MgYW4gZXJyb3IgZHVyaW5nIHRoZSB3cml0ZSwgc3VjaCBhcyBhIGhhcmR3YXJlIGZhdWx0LCBhIHBhZ2UgZmF1bHQsIG9yIGFuIGFjY2VzcyB2aW9sYXRpb24/IElzIGl0IGhhbmRsZWQgd2l0aGluIHRoZSBmdW5jdGlvbiwgb3IgYXJlIGVycm9ycyBwcm9wYWdhdGVkPyBXaGF0JiMzOTtzIHRoZSBlcnJvciByZWNvdmVyeSBzdHJhdGVneT8KCkkmIzM5O20gZXhwZWN0aW5nIHNvbWUgY2FyZWZ1bCBjb25zaWRlcmF0aW9uIGZvciBwZXJmb3JtYW5jZSwgc2VjdXJpdHksIGFuZCBjb3JyZWN0bmVzcy4gSSYjMzk7bSBrZWVuIHRvIGV4YW1pbmUgYW55IHNwZWNpZmljIG9wdGltaXphdGlvbnMgaXQgYXBwbGllcy4gVGhpcyB3b3VsZCBiZSBhIGdyZWF0IHdheSB0byBiZXR0ZXIgdW5kZXJzdGFuZCB0aGUgdW5kZXJwaW5uaW5ncyBvZiBLVk0uCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTIvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7dmlydC9rdm0va3ZtX21haW4uYyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDMyOTMsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMjAKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0NvbnRlbnRzJiMzNDs6ICYjMzQ7MzI5MzpcdHN0YXRpYyBpbnQgX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtICprdm0sXG4zMjk0Olx0XHRcdFx0XHQgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsIGdmbl90IGdmbixcbjMyOTU6XHRcdFx0XHQgICAgICAgICAgY29uc3Qgdm9pZCAqZGF0YSwgaW50IG9mZnNldCwgaW50IGxlbilcbjMyOTY6XHR7XG4zMjk3Olx0XHRpbnQgcjtcbjMyOTg6XHRcdHVuc2lnbmVkIGxvbmcgYWRkcjtcbjMyOTk6XHRcbjMzMDA6XHRcdGlmIChXQVJOX09OX09OQ0Uob2Zmc2V0ICYjNDM7IGxlbiBcdTAwM2UgUEFHRV9TSVpFKSlcbjMzMDE6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMzAyOlx0XG4zMzAzOlx0XHRhZGRyID0gZ2ZuX3RvX2h2YV9tZW1zbG90KG1lbXNsb3QsIGdmbik7XG4zMzA0Olx0XHRpZiAoa3ZtX2lzX2Vycm9yX2h2YShhZGRyKSlcbjMzMDU6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMzA2Olx0XHRyID0gX19jb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYWRkciAmIzQzOyBvZmZzZXQsIGRhdGEsIGxlbik7XG4zMzA3Olx0XHRpZiAocilcbjMzMDg6XHRcdFx0cmV0dXJuIC1FRkFVTFQ7XG4zMzA5Olx0XHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XG4zMzEwOlx0XHRyZXR1cm4gMDtcbjMzMTE6XHR9XG4zMzEyOlx0XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTMvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDg4NDkKCQkJCQkJCW91dHB1dDogMjYKCQkJCQkJCXRob3VnaHRzOiA5MAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW5mb3JtYXRpb24gTGVhayoqCgpPa2F5LCBzbyBgX19jb3B5X3RvX3VzZXJgLi4uIHRoYXQmIzM5O3MgdGhlIGZ1bmN0aW9uIHdlIHVzZSB0byB3cml0ZSBzdHVmZiBpbnRvIHRoZSBndWVzdCYjMzk7cyBtZW1vcnkgc3BhY2UsIHJpZ2h0PyBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQgaWYgd2UmIzM5O3JlIHdyaXRpbmcgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgd2l0aCB0aGF0IGZ1bmN0aW9uLCB3ZSYjMzk7dmUgZ290IGEgZGVmaW5pdGUgaW5mby1sZWFrIHNjZW5hcmlvIG9uIG91ciBoYW5kcy4gVGhlIGd1ZXN0JiMzOTtzIG1lbW9yeSBpcyBtYXBwZWQgZGlyZWN0bHkgaW50byBRRU1VJiMzOTtzIHVzZXJzcGFjZSwgc28gd2hhdGV2ZXIgd2UgcHV0IHRoZXJlLCB0aGUgZ3Vlc3QgY2FuIHJlYWQuIEtNU0FOIGlzLCBvZiBjb3Vyc2UsIHRoZSBwZXJmZWN0IHRvb2wgdG8gY2F0Y2ggdGhlc2UgdHlwZXMgb2YgdnVsbmVyYWJpbGl0aWVzLiBXZSYjMzk7cmUgbG9va2luZyBhdCBleGFjdGx5IHRoZSBwcm9ibGVtIGl0IHdhcyBkZXNpZ25lZCBmb3IuCgpOb3csIGxldCYjMzk7cyBqdXN0IGRvdWJsZS1jaGVjayB0aGUgc3RydWN0dXJlcyBpbnZvbHZlZCwgc3BlY2lmaWNhbGx5IGBodl9tZXNzYWdlX2hlYWRlcmAgYW5kIGBodl9tZXNzYWdlX2ZsYWdzYC4gR290dGEgbWFrZSBzdXJlIHRoZSBkYXRhIGlzIGJlaW5nIGNvbnN0cnVjdGVkIGFuZCBoYW5kbGVkIGFzIGV4cGVjdGVkIHdpdGhpbiB0aG9zZSBzdHJ1Y3R1cmVzIHRvIHZlcmlmeSB0aGUgbGVhayBpcyBvY2N1cmluZy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41NC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkVycm9yOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bm8gbWF0Y2hlczwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtzdHJ1Y3QgaHZfbWVzc2FnZV9mbGFncyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0OyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtlcnJvciYjMzQ7OiAmIzM0O25vIG1hdGNoZXMmIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTUvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDkxNjIKCQkJCQkJCW91dHB1dDogMjUKCQkJCQkJCXRob3VnaHRzOiAxNQoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOgoKKipOYXZpZ2F0aW5nIHRoZSBDb2RlYmFzZTogYG1lc3NhZ2VfZmxhZ3NgIEh1bnQqKgoKT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1lc3NhZ2UgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8ganVtcCByaWdodCBpbnRvIHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeS4gVGhhdCYjMzk7cyB1c3VhbGx5IHRoZSBiZXN0IHBsYWNlIHRvIHN0YXJ0IHdoZW4geW91JiMzOTtyZSBkZWFsaW5nIHdpdGggZGVmaW5pdGlvbnMgYW5kIGRhdGEgc3RydWN0dXJlcyBpbiBhIGNvZGViYXNlLCBlc3BlY2lhbGx5IHdoZW4geW91JiMzOTtyZSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBzb3VuZHMgbGlrZSBhbiBlbnVtZXJhdGlvbiBvciBhIHNldCBvZiBjb25zdGFudHMuIGBpbmNsdWRlL2AgaXMgd2hlcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGFyZSB0eXBpY2FsbHkgZGVmaW5lZC4gSSYjMzk7bSBleHBlY3RpbmcgdG8gZmluZCBhIGhlYWRlciBmaWxlIHRoYXQgZGVmaW5lcyBgbWVzc2FnZV9mbGFnc2AsIG1heWJlIGFzIGEgYml0ZmllbGQgb3IgYW4gZW51bS4gTGV0JiMzOTtzIGdldCB0byBpdCBhbmQgc2VlIHdoYXQgd2UgY2FuIGZpbmQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTYvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O21lc3NhZ2VfZmxhZ3MmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDtpbmNsdWRlLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDtpbmNsdWRlL2h5cGVydi9odmdka19taW5pLmg9NzY0PXVuaW9uIGh2X3N5bmljX3NpbXAge1xuLS1cbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaC03NzItXG5pbmNsdWRlL2h5cGVydi9odmdka19taW5pLmg6NzczOnVuaW9uIGh2X21lc3NhZ2VfZmxhZ3Mge1xuaW5jbHVkZS9oeXBlcnYvaHZnZGtfbWluaS5oLTc3NC1cdHU4IGFzdTg7XG4tLVxuaW5jbHVkZS9oeXBlcnYvaHZnZGtfbWluaS5oPTc4MT1zdHJ1Y3QgaHZfbWVzc2FnZV9oZWFkZXIge1xuLS1cbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaC03ODMtXHR1OCBwYXlsb2FkX3NpemU7XG5pbmNsdWRlL2h5cGVydi9odmdka19taW5pLmg6Nzg0Olx0dW5pb24gaHZfbWVzc2FnZV9mbGFncyBtZXNzYWdlX2ZsYWdzO1xuaW5jbHVkZS9oeXBlcnYvaHZnZGtfbWluaS5oLTc4NS1cdHU4IHJlc2VydmVkWzJdO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU3LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToxMDwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+a21zYW4tZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA5NTY4CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMjUKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkhlcmUmIzM5O3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOgoKKipEaXZpbmcgaW50byB0aGUgSFZHREsgTWluaWRyaXZlciBDb2RlKioKCk9rYXksIHRpbWUgdG8gZGlnIGludG8gdGhlIEhWR0RLIG1pbmlkcml2ZXIuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNzczIG9mIGBpbmNsdWRlL2h5cGVydi9odmdka19taW5pLmhgLiBLbm93aW5nIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgSFZHREssIGFuZCB3aGF0IHRoaXMgcGFydCBvZiB0aGUgaGVhZGVyIGxpa2VseSBwZXJ0YWlucyB0bywgdGhpcyBsaW5lIG51bWJlciBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJiMzOTttIHRyb3VibGVzaG9vdGluZywgb3IgaW52ZXN0aWdhdGluZy4gR2l2ZW4gdGhlIGxvY2F0aW9uIHdpdGhpbiB0aGUgaW5jbHVkZSBmaWxlLCBpdCYjMzk7cyBsaWtlbHkgZGVmaW5pbmcgc29tZSBmdW5kYW1lbnRhbCBzdHJ1Y3R1cmUgb3IgY29uc3RhbnQgcmVsYXRlZCB0byB0aGUgZ3Vlc3QgdmlydHVhbCBkZXZpY2UuIEkmIzM5O20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBtaW5pZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoeXBlcnZpc29yIGhlcmUuIFRoaXMgbWlnaHQgYmUgYSBkZWZpbml0aW9uIGZvciBhIHBhY2tldCBmb3JtYXQsIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGRldmljZSBjb250cm9sLCBvciBwZXJoYXBzIGV2ZW4gYW4gaW50ZXJydXB0IHZlY3Rvci4gSSYjMzk7bSBleHBlY3Rpbmcgc29tZXRoaW5nIGNyaXRpY2FsIGZvciB0aGUgZ3Vlc3QtdG8taG9zdCBjb21tdW5pY2F0aW9uIG9yIGRldmljZSBlbnVtZXJhdGlvbi4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIGFjdHVhbGx5IHRoZXJlLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjU4LzM8L3RkPgoJCQk8dGQ+MjAyNi8wOC8yNiAxOToxMDwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2luY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaCYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc3MywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiAyMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgNzczOlx0dW5pb24gaHZfbWVzc2FnZV9mbGFncyB7XG4gNzc0Olx0XHR1OCBhc3U4O1xuIDc3NTpcdFx0c3RydWN0IHtcbiA3NzY6XHRcdFx0dTggbXNnX3BlbmRpbmcgOiAxO1xuIDc3NzpcdFx0XHR1OCByZXNlcnZlZCA6IDc7XG4gNzc4Olx0XHR9IF9fcGFja2VkO1xuIDc3OTpcdH07XG4gNzgwOlx0XG4gNzgxOlx0c3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyIHtcbiA3ODI6XHRcdHUzMiBtZXNzYWdlX3R5cGU7XG4gNzgzOlx0XHR1OCBwYXlsb2FkX3NpemU7XG4gNzg0Olx0XHR1bmlvbiBodl9tZXNzYWdlX2ZsYWdzIG1lc3NhZ2VfZmxhZ3M7XG4gNzg1Olx0XHR1OCByZXNlcnZlZFsyXTtcbiA3ODY6XHRcdHVuaW9uIHtcbiA3ODc6XHRcdFx0dTY0IHNlbmRlcjtcbiA3ODg6XHRcdFx0dW5pb24gaHZfcG9ydF9pZCBwb3J0O1xuIDc4OTpcdFx0fTtcbiA3OTA6XHR9IF9fcGFja2VkO1xuIDc5MTpcdFxuIDc5MjpcdC8qXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NTkvMzwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzI2IDE5OjEwPC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5rbXNhbi1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwMDk2CgkJCQkJCQlvdXRwdXQ6IDIwMwoJCQkJCQkJdGhvdWdodHM6IDk3MgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipVbmluaXRpYWxpemVkIE1lbW9yeSBJbmZvLUxlYWsgaW4gSHlwZXItViBNZXNzYWdlIEhhbmRsaW5nKioKCk9rYXksIHNvIEkmIzM5O3ZlIGdvdCB0aGlzIGBodl9tZXNzYWdlX2ZsYWdzYCB1bmlvbiwgaXQmIzM5O3MgYSBgdTggYXN1OGAgYW5kIGEgYml0ZmllbGQgYG1zZ19wZW5kaW5nOjFgLCBgcmVzZXJ2ZWQ6N2AuIEJlZm9yZSB0aGlzIHBhdGNoLCB0aGUgY29kZSB3YXMgc2V0dGluZyBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxO2AsIGJ1dCB0aGUgb3RoZXIgNyBiaXRzIG9mIHRoZSBgbWVzc2FnZV9mbGFnc2AgYnl0ZSAoYHJlc2VydmVkYCkgd2VyZSB1bmluaXRpYWxpemVkIGJlY2F1c2UgYGh2X2hkcmAgd2FzIGFuIHVuaW5pdGlhbGl6ZWQgbG9jYWwgdmFyaWFibGUgb24gdGhlIHN0YWNrLiBFc3NlbnRpYWxseSwgYSBieXRlIHdhcyBiZWluZyBwYXJ0aWFsbHkgd3JpdHRlbiB0by4gVGhlbiBga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZWAgd3JpdGVzIHRoaXMgc2luZ2xlIGJ5dGUgdG8gZ3Vlc3QgbWVtb3J5LgoKVGhpcyBtZWFucyB3ZSYjMzk7cmUgbGVha2luZyA3IGJpdHMgb2YgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZGlyZWN0bHkgdG8gdGhlIGd1ZXN0IHNwYWNlLiBJdCYjMzk7cyBhIGNsYXNzaWMgaW5mby1sZWFrLCBhbmQgYSBuYXN0eSBvbmUgYXQgdGhhdCEgTm93LCB0aGUgaW1wb3J0YW50IHRoaW5nIGhlcmUgaXMgdGhhdCBLQVNBTiB3b24mIzM5O3QgY2F0Y2ggdGhpcy4gS0FTQU4gZG9lc24mIzM5O3QgZ2VuZXJhbGx5IGZsYWcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgbGlrZSB0aGlzIG9uZS4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCAqZG9lcyouIEtNU0FOIGlzIHRoZSB0b29sIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdGhlc2Ugc2NlbmFyaW9zLgoKU28sIGxldCYjMzk7cyBjb25maXJtIHRoZSB1bmluaXRpYWxpemVkIG1lbW9yeS4gSW4gdGhlIGBzeW5pY19kZWxpdmVyX21zZ2AgZnVuY3Rpb24sIHRoZSBgaHZfaGRyYCBzdHJ1Y3QgaXMgZGVjbGFyZWQgb24gdGhlIHN0YWNrIHdpdGhvdXQgaW5pdGlhbGl6YXRpb24uIFdlIHRoZW4gcmVhZCBgaHZfaGRyLm1lc3NhZ2VfdHlwZWAgZnJvbSBndWVzdCBtZW1vcnkgdXNpbmcgYGt2bV92Y3B1X3JlYWRfZ3Vlc3RfcGFnZWAgdG8gaW5pdGlhbGl6ZSB0aG9zZSA0IGJ5dGVzLiBBZnRlciB0aGF0LCB3ZSBzZXQgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMWAuIFRoaXMgc2V0cyBvbmx5IG9uZSBiaXQsIGxlYXZpbmcgdGhlIG90aGVyIDcgYml0cyBvZiBgbWVzc2FnZV9mbGFnc2AgdW5pbml0aWFsaXplZC4gYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VgIHRoZW4gd3JpdGVzIHRoaXMgc2luZ2xlIGJ5dGUgb2YgYG1lc3NhZ2VfZmxhZ3NgIHRvIGd1ZXN0IG1lbW9yeS4KClNpbmNlIHRoZSBndWVzdCBtZW1vcnkgaXMgbWFwcGVkIHRvIHVzZXJzcGFjZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggUUVNVSwgdGhpcyBiZWNvbWVzIGFuIGluZm8tbGVhayEgVGhlIHdyaXRlIG9wZXJhdGlvbiB3aWxsIHRyaWdnZXIgYF9fY29weV90b191c2VyYCwgd2hpY2ggS01TQU4gd2lsbCBjYXRjaC4KClRoaXMgZGVmaW5pdGl2ZWx5IG1lYW5zIGBOZWVkc0tNU0FOYCBpcyB0cnVlLgoKSW4gYSBudXRzaGVsbCwgdGhpcyBwYXRjaCBhZGRyZXNzZXMgYW4gaW5mb3JtYXRpb24gbGVhayB2dWxuZXJhYmlsaXR5LiBUaGUgb3JpZ2luYWwgY29kZSBpbmFkdmVydGVudGx5IHdyb3RlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5ICg3IGJpdHMpIHRvIGd1ZXN0IG1lbW9yeSB3aGVuIHdyaXRpbmcgYSBzcGVjaWZpYyBtZXNzYWdlIGhlYWRlciwgYmVjYXVzZSB3ZSB3ZXJlIG9ubHkgcGFydGlhbGx5IGluaXRpYWxpemluZyB0aGUgYG1lc3NhZ2VfZmxhZ3NgIGJ5dGUuIFRoaXMgdW5pbml0aWFsaXplZCBkYXRhLCBsZWFraW5nIHRvIHVzZXJzcGFjZSwgaXMgc29tZXRoaW5nIEtNU0FOIGV4Y2VscyBhdCBjYXRjaGluZywgYW5kIHNvIGEgZGVkaWNhdGVkIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZC4gVGhlIHBhdGNoIGFkZHJlc3NlcyB0aGlzIGJ5IGluaXRpYWxpemluZyB0aGUgZW50aXJlIGJ5dGUgYmVmb3JlIHNldHRpbmcgYW55IGJpdGZpZWxkcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD42MC8zPC90ZD4KCQkJPHRkPjIwMjYvMDgvMjYgMTk6MTA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBgaHZfaGRyYCBpcyBhbiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlLiBUaGUgY29kZSBzZXRzIGEgc2luZ2xlIGJpdGZpZWxkIGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDFgLCBsZWF2aW5nIHRoZSByZW1haW5pbmcgNyBiaXRzIG9mIHRoZSBgbWVzc2FnZV9mbGFnc2AgYnl0ZSB1bmluaXRpYWxpemVkLiBUaGlzIGJ5dGUgaXMgdGhlbiB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeSB2aWEgYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UoKWAsIHdoaWNoIGludGVybmFsbHkgdXNlcyBgX19jb3B5X3RvX3VzZXIoKWAgdG8gd3JpdGUgdG8gdGhlIHVzZXJzcGFjZS1tYXBwZWQgZ3Vlc3QgbWVtb3J5LiBUaGlzIGxlYWtzIDcgYml0cyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBtZW1vcnkgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdGhpcyBleGFjdCBjbGFzcyBvZiBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBgaHZfaGRyYCBpcyBhbiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlLiBUaGUgY29kZSBzZXRzIGEgc2luZ2xlIGJpdGZpZWxkIGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDFgLCBsZWF2aW5nIHRoZSByZW1haW5pbmcgNyBiaXRzIG9mIHRoZSBgbWVzc2FnZV9mbGFnc2AgYnl0ZSB1bmluaXRpYWxpemVkLiBUaGlzIGJ5dGUgaXMgdGhlbiB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeSB2aWEgYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UoKWAsIHdoaWNoIGludGVybmFsbHkgdXNlcyBgX19jb3B5X3RvX3VzZXIoKWAgdG8gd3JpdGUgdG8gdGhlIHVzZXJzcGFjZS1tYXBwZWQgZ3Vlc3QgbWVtb3J5LiBUaGlzIGxlYWtzIDcgYml0cyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBtZW1vcnkgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdGhpcyBleGFjdCBjbGFzcyBvZiBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZC4mIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzowMy42MDg3MDQ0NThaIiwiU2VxIjowLCJOZXN0aW5nIjowLCJUeXBlIjoiZmxvdyIsIk5hbWUiOiJwYXRjaC10cmlhZ2UiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMzQ3ODIzMzYwNzgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCIsXG4gICAgXCJLVk1fSFlQRVJWXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtX2h2X3NldF9tc3JfY29tbW9uXCIsXG4gICAgXCJrdm1faHZfcHJvY2Vzc19zdGltZXJzXCJcbiAgXSxcbiAgXCJLTVNBTlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBmaXhlcyBhbiBpbmZvcm1hdGlvbiBsZWFrIHdoZXJlIHVuaW5pdGlhbGl6ZWQgc3RhY2sgbWVtb3J5IGlzIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5LiBTcGVjaWZpY2FsbHksIGBodl9oZHJgIGlzIGFuIHVuaW5pdGlhbGl6ZWQgc3RhY2sgdmFyaWFibGUuIFRoZSBjb2RlIHNldHMgYSBzaW5nbGUgYml0ZmllbGQgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMWAsIGxlYXZpbmcgdGhlIHJlbWFpbmluZyA3IGJpdHMgb2YgdGhlIGBtZXNzYWdlX2ZsYWdzYCBieXRlIHVuaW5pdGlhbGl6ZWQuIFRoaXMgYnl0ZSBpcyB0aGVuIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5IHZpYSBga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSgpYCwgd2hpY2ggaW50ZXJuYWxseSB1c2VzIGBfX2NvcHlfdG9fdXNlcigpYCB0byB3cml0ZSB0byB0aGUgdXNlcnNwYWNlLW1hcHBlZCBndWVzdCBtZW1vcnkuIFRoaXMgbGVha3MgNyBiaXRzIG9mIHVuaW5pdGlhbGl6ZWQga2VybmVsIHN0YWNrIG1lbW9yeSB0byB1c2Vyc3BhY2UuIFN0YW5kYXJkIEtBU0FOIGRvZXMgbm90IGRldGVjdCByZWFkcyBvZiB1bmluaXRpYWxpemVkIG1lbW9yeSBvciBpbmZvLWxlYWtzIHRvIHVzZXJzcGFjZS4gS01TQU4gaXMgc3BlY2lmaWNhbGx5IGRlc2lnbmVkIHRvIGRldGVjdCB0aGlzIGV4YWN0IGNsYXNzIG9mIGJ1Z3MuIFRoZXJlZm9yZSwgYSBkZWRpY2F0ZWQgS01TQU4gZnV6emluZyBzZXNzaW9uIGlzIHJlcXVpcmVkLlwiLFxuICBcIk5lZWRzS01TQU5cIjogdHJ1ZSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggbW9kaWZpZXMgdGhlIEh5cGVyLVYgc3ludGhldGljIHRpbWVyIG1lc3NhZ2UgZGVsaXZlcnkgbG9naWMgaW4gS1ZNIGJ5IGNsZWFyaW5nIGEgbWVzc2FnZSBmbGFnIGJlZm9yZSBzZXR0aW5nIGl0LiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgaW4gcmVhY2hhYmxlIGNvcmUgS1ZNIGxvZ2ljIHRoYXQgaGFuZGxlcyBndWVzdCBNU1Igd3JpdGVzIGFuZCB0aW1lciBleHBpcmF0aW9ucy5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6MDMuNjA4NzA4ODA4WiIsIlNlcSI6MSwiTmVzdGluZyI6MSwiVHlwZSI6ImFjdGlvbiIsIk5hbWUiOiJyZWFkLXBhdGNoLWRpZmYiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxNDA3MzI0Mzk5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgY2JlNjA5NzE5YmE1ODlmNGFmYTNlNTc2ZGVmNzVjMjIxNjdlYjBiMVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEF1ZyAyNiAxOTowNzowMSAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcXG5pbmRleCA2MDQ2NTFjYjI3Mzk5Li44ZDI2NjlkOGVmMzQ3IDEwMDY0NFxcbi0tLSBhL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xcbisrKyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xcbkBAIC04MDIsNyArODAyLDkgQEAgc3RhdGljIGludCBzeW5pY19kZWxpdmVyX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljLCB1MzIgc2ludCxcXG4gXFx0XFx0aWYgKG5vX3JldHJ5KVxcbiBcXHRcXHRcXHRyZXR1cm4gMDtcXG4gXFxuK1xcdFxcdGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO1xcbiBcXHRcXHRodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7XFxuK1xcbiBcXHRcXHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sXFxuIFxcdFxcdFxcdFxcdFxcdCAgICAgIFxcdTAwMjZodl9oZHIubWVzc2FnZV9mbGFncyxcXG4gXFx0XFx0XFx0XFx0XFx0ICAgICAgbXNnX29mZiArXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjA1LjAxNjY3MDE4N1oiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImJlc3QtZXhwZW5zaXZlIiwiRHVyYXRpb24iOjE2OTIzNTA4MDA5NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faHZfc2V0X21zcl9jb21tb25cIixcbiAgICBcImt2bV9odl9wcm9jZXNzX3N0aW1lcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBzeW50aGV0aWMgdGltZXIgbWVzc2FnZSBkZWxpdmVyeSBsb2dpYyBpbiBLVk0gYnkgY2xlYXJpbmcgYSBtZXNzYWdlIGZsYWcgYmVmb3JlIHNldHRpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgdGhhdCBoYW5kbGVzIGd1ZXN0IE1TUiB3cml0ZXMgYW5kIHRpbWVyIGV4cGlyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYmU2MDk3MTliYTU4OWY0YWZhM2U1NzZkZWY3NWMyMjE2N2ViMGIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDc6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbmluZGV4IDYwNDY1MWNiMjczOTkuLjhkMjY2OWQ4ZWYzNDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuQEAgLTgwMiw3ICs4MDIsOSBAQCBzdGF0aWMgaW50IHN5bmljX2RlbGl2ZXJfbXNnKHN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWMsIHUzMiBzaW50LFxuIFx0XHRpZiAobm9fcmV0cnkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4rXHRcdGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO1xuIFx0XHRodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7XG4rXG4gXHRcdHIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHZjcHUsIG1zZ19wYWdlX2dmbixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2aHZfaGRyLm1lc3NhZ2VfZmxhZ3MsXG4gXHRcdFx0XHRcdCAgICAgIG1zZ19vZmYgK1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6MDUuMDE2NjcxNDU3WiIsIlNlcSI6MywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDc2MjA4Njc5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBIeXBlci1WIFBhdGNoKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCB0aGF0IHR3ZWFrcyBgYXJjaC94ODYva3ZtL2h5cGVydi5jYC4gSXQncyBhIHByZXR0eSBmb2N1c2VkIGNoYW5nZSwgc3BlY2lmaWNhbGx5IHRhcmdldGluZyBgc3luaWNfZGVsaXZlcl9tc2dgLiBUaGUgY29yZSBvZiB0aGUgYWx0ZXJhdGlvbiBzZWVtcyB0byBiZSBpbnNlcnRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO2AgKmJlZm9yZSogc2V0dGluZyBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxO2AuIFRoaXMgaW1tZWRpYXRlbHkgZmxhZ3MgdGhpcyBhcyBhIGZ1bmN0aW9uYWwgbW9kaWZpY2F0aW9uIHdpdGhpbiB0aGUgS1ZNIEh5cGVyLVYgZW11bGF0aW9uIGxheWVyLiBUaGF0IFwiYXN1OCA9IDBcIiBsaWtlbHkgcmVsYXRlcyB0byBzb21lIHNwZWNpZmljIGZlYXR1cmUgb3Igc3RhdGUgZmxhZywgYW5kIGl0cyBwbGFjZW1lbnQgKmJlZm9yZSogdGhlIGBtc2dfcGVuZGluZ2AgYml0IGlzIHNldCBpcyBjcnVjaWFsLlxuXG5HaXZlbiBteSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBIeXBlci1WIFN5bklDIGludGVycnVwdHMgYXJlIGRlbGl2ZXJlZCB3aXRoaW4gS1ZNLCBJIG5lZWQgdG8gdW5kZXJzdGFuZCB3aGF0IGBodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4YCBhY3R1YWxseSAqbWVhbnMqIGluIHRoZSBjb250ZXh0IG9mIHRoZSBsYXJnZXIgbWVzc2FnZSBkZWxpdmVyeSBwcm9jZXNzLiBUaGUgb3JkZXJpbmcgY2hhbmdlIGhhcyB0byBiZSBzaWduaWZpY2FudC4gSXQncyBsaWtlbHkgcmVsYXRlZCB0byBlaXRoZXIgaW5pdGlhbGl6YXRpb24gb3IgZGVhY3RpdmF0aW9uIG9mIHRoZSBtZXNzYWdlIGZlYXR1cmUuIEkgbmVlZCB0byBkaXZlIGRlZXBlciBpbnRvIGJvdGggYHN5bmljX2RlbGl2ZXJfbXNnYCBhbmQsIG1vcmUgaW1wb3J0YW50bHksIHRoZSBkZWZpbml0aW9uIGFuZCB1c2FnZSBvZiBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3NgIHRvIGdyYXNwIHRoZSBpbXBhY3Qgb2YgdGhpcyBjaGFuZ2UuIEl0J3MgdGltZSB0byBkaWcgaW50byB0aGUgc3Vycm91bmRpbmcgY29kZSBhbmQgZG9jdW1lbnRhdGlvbi4gVGhpcyBpcyB3aGVyZSB0aGUgcmVhbCB3b3JrIGJlZ2lucy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyNiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEwNCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjA5Ljc3ODc2MDI1NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0ODQwNTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeW5pY19kZWxpdmVyX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jPTc2OD1zdGF0aWMgaW50IHN0aW1lcl9nZXRfY291bnQoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCB1NjQgKnBjb3VudClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjc3NDpzdGF0aWMgaW50IHN5bmljX2RlbGl2ZXJfbXNnKHN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWMsIHUzMiBzaW50LFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHZfbWVzc2FnZSAqc3JjX21zZywgYm9vbCBub19yZXRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz04MzM9c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cXHRwYXlsb2FkLVxcdTAwM2VkZWxpdmVyeV90aW1lID0gZ2V0X3RpbWVfcmVmX2NvdW50ZXIodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODQ4OlxcdHJldHVybiBzeW5pY19kZWxpdmVyX21zZyh0b19odl9zeW5pYyh2Y3B1KSxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVxcdFxcdFxcdFxcdCBzdGltZXItXFx1MDAzZWNvbmZpZy5zaW50eCwgbXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzowOS44MjcxNjgwMjVaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozODc0MDQyMTUyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgcHJlc2VudGVkIGluIHRoZSBmaXJzdCBwZXJzb246XG5cbioqSW52ZXN0aWdhdGluZyBhIEh5cGVyLVYgVGltZXIgSW50ZXJhY3Rpb24qKlxuXG5BbHJpZ2h0LCBzbyBgc3RpbWVyX3NlbmRfbXNnYC4gUmlnaHQgb2ZmIHRoZSBiYXQsIHRoYXQncyB0ZWxsaW5nIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBIeXBlci1WIHN5bnRoZXRpYyB0aW1lcnMuIFRoaXMgcmluZ3MgYSBiZWxsOyBJJ3ZlIGhhZCB0byBkZWJ1ZyB0aGVzZSBpbnRlcmFjdGlvbnMgYmVmb3JlLiBNeSBpbW1lZGlhdGUgbmV4dCB0aG91Z2h0IGlzLCBcIk9rYXksIHdobyBlbHNlIGlzIGNhbGxpbmcgdGhpcyBmdW5jdGlvbj9cIiBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGUgY2FsbCBncmFwaCB0byBnZXQgYSBoYW5kbGUgb24gdGhlIGJpZ2dlciBwaWN0dXJlLiBJJ20gbG9va2luZyBmb3IgYSBjbGVhciBvdmVydmlldywgdG8gYXNzZXNzIHRoZSBwb2ludHMgb2YgZW50cnkuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoaXMgZnVuY3Rpb24gZml0cyBpbnRvIHRoZSBvdmVyYWxsIHRpbWVyIHN1YnN5c3RlbSBvZiBIeXBlci1WLiBXaGVyZSBkb2VzIHRoZSB3b3JrIG9yaWdpbmF0ZSwgYW5kIHdoZXJlIGRvZXMgaXQgZ28gZnJvbSBoZXJlP1xuXG5cbiIsIklucHV0VG9rZW5zIjoyNzg0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6MTMuNzAxMjExODA3WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ3ODk2NDY5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInN5bmljX2RlbGl2ZXJfbXNnXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jPTc2OD1zdGF0aWMgaW50IHN0aW1lcl9nZXRfY291bnQoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCB1NjQgKnBjb3VudClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjc3NDpzdGF0aWMgaW50IHN5bmljX2RlbGl2ZXJfbXNnKHN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWMsIHUzMiBzaW50LFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHZfbWVzc2FnZSAqc3JjX21zZywgYm9vbCBub19yZXRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz04MzM9c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cXHRwYXlsb2FkLVxcdTAwM2VkZWxpdmVyeV90aW1lID0gZ2V0X3RpbWVfcmVmX2NvdW50ZXIodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODQ4OlxcdHJldHVybiBzeW5pY19kZWxpdmVyX21zZyh0b19odl9zeW5pYyh2Y3B1KSxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVxcdFxcdFxcdFxcdCBzdGltZXItXFx1MDAzZWNvbmZpZy5zaW50eCwgbXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzoxMy43NDkxMTA2ODZaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMjE3OTcyNzE1OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgaWYgaXQgd2VyZSBteSBvd246XG5cbioqSW52ZXN0aWdhdGluZyBgc3RpbWVyX3NlbmRfbXNnYCBVc2FnZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgZnVuY3Rpb24sIGBzdGltZXJfc2VuZF9tc2dgLCBhbmQgaXQgc2VlbXMgbGlrZSBhIGNvcmUgcGllY2Ugb2YgdGhlIHRpbWluZyBtZWNoYW5pc20uIFRoZSBpbW1lZGlhdGUgY29udGV4dCB0ZWxscyBtZSBpdCdzIG9ubHkgY2FsbGVkIGZyb20gb25lIHBsYWNlOiBgc3RpbWVyX3NlbmRfbXNnYC4gVGhhdCdzIGEgbGl0dGxlIHVudXN1YWwsIGJ1dCBub3QgbmVjZXNzYXJpbHkgYSByZWQgZmxhZyB5ZXQuIFRvIHRydWx5IHVuZGVyc3RhbmQgaXRzIHJvbGUgYW5kIHBvdGVudGlhbCBpbXBhY3QsIHRoZSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byB2ZXJpZnkgdGhpcyBpbml0aWFsIGFzc3VtcHRpb24uIEkgbmVlZCB0byBjb25maXJtIHRoZSAqc291cmNlKiBvZiB0aGUgY2FsbC4gSSBtdXN0IGJlIHN1cmUgYHN0aW1lcl9zZW5kX21zZ2AgaXMgKm9ubHkqIGNhbGxlZCBmcm9tIHdpdGhpbiBgc3RpbWVyX3NlbmRfbXNnYC4gSWYgdGhpcyBpcyBpbmNvcnJlY3QsIG15IGFuYWx5c2lzIHdpbGwgZmFpbC4gSWYgdGhpcyBpcyBjb3JyZWN0LCBJIGhhdmUgbW9yZSBpbmZvcm1hdGlvbiBhYm91dCBob3cgdG8gcHJvY2VlZCB3aXRoIHRoZSBhbmFseXNpcy4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbiBhbmQgaWRlbnRpZnlpbmcgYWxsIGNhbGxlcnMgdG8gYHN0aW1lcl9zZW5kX21zZ2AuIFRoaXMnbGwgZWl0aGVyIGNvbmZpcm0gbXkgaW5pdGlhbCBpbmZvcm1hdGlvbiBvciBnaXZlIG1lIGEgY2xlYXJlciBwaWN0dXJlIG9mIGl0cyB3aWRlciBpbnRlcmFjdGlvbiB3aXRoIHRoZSBzeXN0ZW0uIEZyb20gdGhlcmUsIEkgY2FuIGRldGVybWluZSB0aGUgbmV4dCBhcHByb3ByaWF0ZSBzdGVwcyBpbiBteSBhbmFseXNpcy5cblxuXG4iLCJJbnB1dFRva2VucyI6MzM0MSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjQ1LjkyODgzOTU2NFoiLCJTZXEiOjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDY2MTU3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGltZXJfc2VuZF9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9Nzc0PXN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODMyLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4MzM6c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04MzQte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTg2Nj1zdGF0aWMgdm9pZCBzdGltZXJfZXhwaXJhdGlvbihzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODcxLVxcdGlmICghZGlyZWN0KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NzI6XFx0XFx0ciA9IHN0aW1lcl9zZW5kX21zZyhzdGltZXIpO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04NzMtXFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo0NS45NzM1MDMxNzRaIiwiU2VxIjo5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMTk2NzcyODAyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgc3VtbWFyeSwgYXMgdGhvdWdoIEknbSB0aGlua2luZyB0aHJvdWdoIHRoaXMgcHJvY2VzczpcblxuKipJbnZlc3RpZ2F0aW5nIHRoZSBgc3RpbWVyX2V4cGlyYXRpb25gIENhbGxlcioqXG5cbk9rYXksIHNvIGBzdGltZXJfZXhwaXJhdGlvbmAgaXMgdGhlIGZ1bmN0aW9uIHRoYXQncyBpbml0aWF0aW5nIHRoaXMgY2FsbC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaXRzIGNvbnRleHQuIE15IGltbWVkaWF0ZSBmb2N1cyBpcyB3aGV0aGVyIGBzdGltZXJfc2VuZF9tc2dgIG9yIGBzdGltZXJfZXhwaXJhdGlvbmAgdGhlbXNlbHZlcyBhcmUgZXh0ZXJuYWxseSB2aXNpYmxlLCBtZWFuaW5nIGV4cG9ydGVkLiBUaGF0J3MgdGhlIGZpcnN0IHRoaW5nIEknZCBjaGVjazsgdGhhdCdsbCBuYXJyb3cgZG93biBob3cgdGhlc2UgZnVuY3Rpb25zIGFyZSBzdXBwb3NlZCB0byBiZSBpbnRlZ3JhdGVkIG9yIHV0aWxpemVkIHdpdGhpbiB0aGUgbGFyZ2VyIHN5c3RlbS4gS25vd2luZyB0aGF0IGV4cG9ydCBzdGF0dXMgd2lsbCBpbmZvcm0gbXkgbmV4dCBzdGVwcyBpbiB1bmRlcnN0YW5kaW5nIHRoZSBjYWxsIGZsb3cgYW5kIG92ZXJhbGwgZGVzaWduLlxuXG5cbiIsIklucHV0VG9rZW5zIjozOTEzLCJPdXRwdXRUb2tlbnMiOjMzLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6NDkuMTcwMjc4MDI2WiIsIlNlcSI6MTAsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo0NDk4NjY2OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGltZXJfZXhwaXJhdGlvblwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz04NTM9c3RhdGljIGludCBzdGltZXJfbm90aWZ5X2RpcmVjdChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODY1LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NjY6c3RhdGljIHZvaWQgc3RpbWVyX2V4cGlyYXRpb24oc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04Njcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg3NC1cXHRcXHRyID0gc3RpbWVyX25vdGlmeV9kaXJlY3Qoc3RpbWVyKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODc1OlxcdHRyYWNlX2t2bV9odl9zdGltZXJfZXhwaXJhdGlvbihodl9zdGltZXJfdG9fdmNwdShzdGltZXIpLVxcdTAwM2V2Y3B1X2lkLFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04NzYtXFx0XFx0XFx0XFx0ICAgICAgIHN0aW1lci1cXHUwMDNlaW5kZXgsIGRpcmVjdCwgcik7XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9ODg0PXZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtOTAzLVxcdFxcdFxcdFxcdFxcdGlmICh0aW1lX25vdyBcXHUwMDNlPSBleHBfdGltZSlcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6OTA0OlxcdFxcdFxcdFxcdFxcdFxcdHN0aW1lcl9leHBpcmF0aW9uKHN0aW1lcik7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTkwNS1cXHRcXHRcXHRcXHR9XFxuLS1cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaD0xNDA4PVRSQUNFX0VWRU5UKGt2bV9odl9zdGltZXJfY2FsbGJhY2ssXFxuLS1cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaC0xNDI2LS8qXFxuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTQyNzogKiBUcmFjZXBvaW50IGZvciBzdGltZXJfZXhwaXJhdGlvbi5cXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaC0xNDI4LSAqL1xcbmFyY2gveDg2L2t2bS90cmFjZS5oOjE0Mjk6VFJBQ0VfRVZFTlQoa3ZtX2h2X3N0aW1lcl9leHBpcmF0aW9uLFxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTE0MzAtXFx0VFBfUFJPVE8oaW50IHZjcHVfaWQsIGludCB0aW1lcl9pbmRleCwgaW50IGRpcmVjdCwgaW50IG1zZ19zZW5kX3Jlc3VsdCksXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjQ5LjIxNTI2ODYxNVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTQyNDQ3ODAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgdGFrZSBvbiB0aGUgdGhvdWdodCBwcm9jZXNzLCBhcyBpZiBpdCB3ZXJlIG15IG93bjpcblxuKipJbnZlc3RpZ2F0aW5nIFRpbWVyIEhhbmRsaW5nIGluIEtWTS1IVioqXG5cbk9rYXksIHNvIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBpcyB0aGUgZnVuY3Rpb24gdGhhdCdzIGN1cnJlbnRseSBpbiBmb2N1cy4gTXkgaW1tZWRpYXRlIGdvYWwgaXMgdG8gdW5kZXJzdGFuZCBob3cgaXQncyBiZWluZyB1c2VkLiBJIG5lZWQgdG8gdHJhY2UgdGhlIGNhbGwgcGF0aHMgbGVhZGluZyAqdG8qIHRoaXMgZnVuY3Rpb24sIHNwZWNpZmljYWxseSwgSSB3YW50IHRvIGZpbmQgaXRzIGNhbGxlcnMuIEl0J3MgY3J1Y2lhbCB0byB1bmRlcnN0YW5kIHdobydzIHJlc3BvbnNpYmxlIGZvciBpbnZva2luZyBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AgdG8gZ3Jhc3AgdGhlIGJyb2FkZXIgcGljdHVyZSBvZiBob3cgdGltZXJzIGFyZSBtYW5hZ2VkIHdpdGhpbiB0aGUgS1ZNLUhWIGVudmlyb25tZW50LiBLbm93aW5nIHRoZSBjYWxsZXJzIHdpbGwgZXhwb3NlIHRoZSBjb250ZXh0cyBpbiB3aGljaCB0aGlzIHRpbWVyIHByb2Nlc3NpbmcgaXMgaW5pdGlhdGVkLCBoZWxwaW5nIG1lIHRvIGFuYWx5emUgdGhlIGZsb3cgb2YgZXhlY3V0aW9uIGFuZCBwb3RlbnRpYWwgc3luY2hyb25pemF0aW9uIGlzc3VlcywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIG9yIGFueSBkZXBlbmRlbmNpZXMgdGhhdCBuZWVkIHRvIGJlIHVuZGVyc3Rvb2QuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjQ2NzIsIk91dHB1dFRva2VucyI6MzgsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo1My4xNTc3MTg3MjZaIiwiU2VxIjoxMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ2NzI3NTUwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV9odl9wcm9jZXNzX3N0aW1lcnNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9ODY2PXN0YXRpYyB2b2lkIHN0aW1lcl9leHBpcmF0aW9uKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04ODMtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjg4NDp2b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04ODUte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oPTI2Mj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2h2X2ludnRzY19zdXBwcmVzc2VkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODQtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oOjI4NTp2b2lkIGt2bV9odl9wcm9jZXNzX3N0aW1lcnMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMjg2LVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jPTgwNTE9c3RhdGljIGludCB2Y3B1X2VudGVyX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MTk5LVxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0hWX1NUSU1FUiwgdmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jOjgyMDA6XFx0XFx0XFx0a3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyh2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0veDg2LmMtODIwMS0jZW5kaWZcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDc6NTMuMjA0NDQ5MTE1WiIsIlNlcSI6MTMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQzODAwNTY1MjQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIHRoZSBLVk0gVGltZXIgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBmdW5jdGlvbi4gVGhlIGZhY3QgdGhhdCBpdCdzIGNhbGxlZCB3aXRoaW4gYHZjcHVfZW50ZXJfZ3Vlc3RgIGltbWVkaWF0ZWx5IGZsYWdzIGl0IGFzIGNyaXRpY2FsIGNvcmUgS1ZNIGxvZ2ljIOKAkyB3ZSdyZSB0YWxraW5nIGFib3V0IHZlcnkgZnVuZGFtZW50YWwgZXhlY3V0aW9uIGZsb3cgaGVyZS4gVGhpcyBpc24ndCBzb21lIG9ic2N1cmUgaGVscGVyIGZ1bmN0aW9uOyB0aGlzIGlzIHJpZ2h0IGluIHRoZSBoZWFydCBvZiB0aGUgdmlydHVhbGl6YXRpb24gcHJvY2Vzcy5cblxuTm93LCB0aGUgcGF0Y2gncyBtb2RpZmljYXRpb24gb2YgYHN5bmljX2RlbGl2ZXJfbXNnYCBpcyBpbnRlcmVzdGluZy4gSXQncyBjbGVhcmluZyBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MuYXN1OGAgYmVmb3JlIHNldHRpbmcgYG1zZ19wZW5kaW5nYC4gVGhhdCdzIGEgKmZ1bmN0aW9uYWwqIGNoYW5nZSwgbm8gZG91YnQgYWJvdXQgaXQuIFdlJ3JlIGRpcmVjdGx5IGFsdGVyaW5nIHRoZSBtZXNzYWdpbmcgYmVoYXZpb3IsIHBvdGVudGlhbGx5IGltcGFjdGluZyBob3cgdGhlIGh5cGVydmlzb3IgaW50ZXJhY3RzIHdpdGggdGhlIGd1ZXN0J3MgdGltZXJzLiBXZSBuZWVkIHRvIGJlIG1ldGljdWxvdXMgYWJvdXQgaG93IHRoaXMgYWZmZWN0cyB0aGUgb3ZlcmFsbCBmbG93LlxuXG5CZWZvcmUgZGl2aW5nIGRlZXBlciBpbnRvIHRoZSBzcGVjaWZpYyBpbXBhY3RzIG9mIGNsZWFyaW5nIGBhc3U4YCwgSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGUgS2NvbmZpZy4gSXQgaXMgdml0YWwgdG8gZGV0ZXJtaW5lIGFueSBwb3RlbnRpYWwgZGVwZW5kZW5jaWVzIHdpdGhpbiB0aGUgS1ZNIGNvbmZpZ3VyYXRpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBhcmNoaXRlY3R1cmFsIGFuZCBvcGVyYXRpb25hbCBpbXBsaWNhdGlvbnMgYmVmb3JlIGV2YWx1YXRpbmcgdGhlIHBhdGNoJ3MgcG90ZW50aWFsIHJpc2suXG5cblxuIiwiSW5wdXRUb2tlbnMiOjUzMTksIk91dHB1dFRva2VucyI6MzIsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4NSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowNzo1Ny41ODQ1MDg2OVoiLCJTZXEiOjE0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1NjA5OTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnPTE4PWlmIFZJUlRVQUxJWkFUSU9OXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTktXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MjA6Y29uZmlnIEtWTV9YODZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMS1cXHRkZWZfdHJpc3RhdGUgS1ZNIGlmIChLVk1fSU5URUwgIT0gbiB8fCBLVk1fQU1EICE9IG4pXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy01MS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo1Mjpjb25maWcgS1ZNXFxuYXJjaC94ODYva3ZtL0tjb25maWctNTMtXFx0dHJpc3RhdGUgXFxcIktlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgKEtWTSkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTY4LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjY5OmNvbmZpZyBLVk1fV0VSUk9SXFxuYXJjaC94ODYva3ZtL0tjb25maWctNzAtXFx0Ym9vbCBcXFwiQ29tcGlsZSBLVk0gd2l0aCAtV2Vycm9yXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctODItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6ODM6Y29uZmlnIEtWTV9TV19QUk9URUNURURfVk1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy04NC1cXHRib29sIFxcXCJFbmFibGUgc3VwcG9ydCBmb3IgS1ZNIHNvZnR3YXJlLXByb3RlY3RlZCBWTXNcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy05NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzo5Njpjb25maWcgS1ZNX0lOVEVMXFxuYXJjaC94ODYva3ZtL0tjb25maWctOTctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgSW50ZWwgKGFuZCBjb21wYXRpYmxlKSBwcm9jZXNzb3JzIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDYtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTA3OmNvbmZpZyBLVk1fSU5URUxfUFJPVkVfVkVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMDgtICAgICAgICBib29sIFxcXCJDaGVjayB0aGF0IGd1ZXN0cyBkbyBub3QgcmVjZWl2ZSAjVkUgZXhjZXB0aW9uc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnPTEyMj1jb25maWcgWDg2X1NHWF9LVk1cXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTEzMy1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxMzQ6Y29uZmlnIEtWTV9JTlRFTF9URFhcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xMzUtXFx0Ym9vbCBcXFwiSW50ZWwgVHJ1c3QgRG9tYWluIEV4dGVuc2lvbnMgKFREWCkgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE0NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNDY6Y29uZmlnIEtWTV9BTURcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNDctXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgQU1EIHByb2Nlc3NvcnMgc3VwcG9ydFxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE1NS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxNTY6Y29uZmlnIEtWTV9BTURfU0VWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTU3LVxcdGJvb2wgXFxcIkFNRCBTZWN1cmUgRW5jcnlwdGVkIFZpcnR1YWxpemF0aW9uIChTRVYpIHN1cHBvcnRcXFwiXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xNzItXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTczOmNvbmZpZyBLVk1fSU9BUElDXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTc0LVxcdGJvb2wgXFxcIkkvTyBBUElDLCBQSUMsIGFuZCBQSVQgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTgyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjE4Mzpjb25maWcgS1ZNX1NNTVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE4NC1cXHRib29sIFxcXCJTeXN0ZW0gTWFuYWdlbWVudCBNb2RlIGVtdWxhdGlvblxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTE5My1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoxOTQ6Y29uZmlnIEtWTV9IWVBFUlZcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTUtXFx0Ym9vbCBcXFwiU3VwcG9ydCBmb3IgTWljcm9zb2Z0IEh5cGVyLVYgZW11bGF0aW9uXFxcIlxcbi0tXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjA3LVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIwODpjb25maWcgS1ZNX1hFTlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIwOS1cXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxNi1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMTc6Y29uZmlnIEtWTV9QUk9WRV9NTVVcXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0yMTgtXFx0Ym9vbCBcXFwiUHJvdmUgS1ZNIE1NVSBjb3JyZWN0bmVzc1xcXCJcXG4tLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIyOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMzA6Y29uZmlnIEtWTV9FWFRFUk5BTF9XUklURV9UUkFDS0lOR1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzMS1cXHRib29sXFxuYXJjaC94ODYva3ZtL0tjb25maWctMjMyLVxcbmFyY2gveDg2L2t2bS9LY29uZmlnOjIzMzpjb25maWcgS1ZNX01BWF9OUl9WQ1BVU1xcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIzNC1cXHRpbnQgXFxcIk1heGltdW0gbnVtYmVyIG9mIHZDUFVzIHBlciBLVk0gZ3Vlc3RcXFwiXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA3OjU3LjYzMDA3NTU4OVoiLCJTZXEiOjE1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNjQ5Nzk2MTI1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBkZWVwIGluIHRoZSB3ZWVkcyBvZiBrZXJuZWwgY29uZmlndXJhdGlvbjpcblxuKipEaXZpbmcgaW50byB0aGUgS1ZNIGFuZCBIeXBlci1WIEludGVycGxheSoqXG5cbkFscmlnaHQsIHRoZSBjb25maWcgaW4gcXVlc3Rpb24gaXMgYEtWTV9IWVBFUlZgLiBNeSBpbml0aWFsIHRob3VnaHQgaXMgdG8gaW1tZWRpYXRlbHkgem9vbSBpbiBvbiB0aGUgc291cmNlIG9mIHRydXRoIGZvciB0aGF0IHBhcnRpY3VsYXIgc2V0dGluZy4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gdW5kZXJzdGFuZCBpdHMgZGVwZW5kZW5jaWVzIGFuZCB3aGF0IGl0IGVuYWJsZXMuIFNvLCBteSBpbnN0aW5jdCBpcyB0byBjaGVjayBgYXJjaC94ODYva3ZtL0tjb25maWdgLiBUaGF0J3Mgd2hlcmUgYWxsIHRoZSB4ODYgS1ZNIGNvbmZpZ3VyYXRpb25zIGxpdmUsIGFuZCBpdCdzIGhpZ2hseSBsaWtlbHkgdGhhdCBgS1ZNX0hZUEVSVmAgaXMgZGVmaW5lZCBhbmQgZG9jdW1lbnRlZCB0aGVyZS4gSSdtIGdvaW5nIHRvIHN0YXJ0IGRpZ2dpbmcgaW50byB0aGF0IGZpbGUuIFRoaXMgaXMgbXkgZ28tdG8gYXBwcm9hY2guIExvY2F0aW5nIHdoZXJlIHNvbWV0aGluZyBpcyBkZWZpbmVkIHdpbGwgcXVpY2tseSB5aWVsZCB0aGUgc3Vycm91bmRpbmcgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6Njg5MCwiT3V0cHV0VG9rZW5zIjozOCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjAxLjI3OTg3NDYyNVoiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDU1OTQxNjAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9IWVBFUlZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTgzPWNvbmZpZyBLVk1fU01NXFxuLS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOTMtXFxuYXJjaC94ODYva3ZtL0tjb25maWc6MTk0OmNvbmZpZyBLVk1fSFlQRVJWXFxuYXJjaC94ODYva3ZtL0tjb25maWctMTk1LVxcdGJvb2wgXFxcIlN1cHBvcnQgZm9yIE1pY3Jvc29mdCBIeXBlci1WIGVtdWxhdGlvblxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MDEuMzI1NDczOTk0WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQ0NTI1OTUxNjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzOlxuXG4qKkRpc3NlY3RpbmcgdGhlIERlcGVuZGVuY2llcyBvZiBgS1ZNX0hZUEVSVmAqKlxuXG5Pa2F5LCBzbyBJJ20gZGl2aW5nIGludG8gdGhpcyBgS1ZNX0hZUEVSVmAgdGhpbmcuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyByZWxhdGlvbnNoaXAgdG8gdGhlIGJyb2FkZXIgc3lzdGVtLCBpdHMgZGVwZW5kZW5jaWVzLiBXaGVyZSBkb2VzIGl0IHNpdD8gV2hhdCBkb2VzIGl0IHJlbHkgb24/IFdoYXQgb3RoZXIgY29tcG9uZW50cyBkb2VzIGl0IG5lZWQgdG8gZnVuY3Rpb24gY29ycmVjdGx5PyBUaGlzIGlzIGFsbCBhYm91dCBtYXBwaW5nIG91dCBpdHMgcm9sZSBhbmQgdW5kZXJzdGFuZGluZyBhbnkgcG90ZW50aWFsIHBvaW50cyBvZiBpbnRlZ3JhdGlvbiBvciBjb25mbGljdC4gVGltZSB0byBzdGFydCBkaWdnaW5nIGFuZCBzZWUgd2hhdCB0aGUgY29kZSByZXZlYWxzLiBJIG5lZWQgYSBjbGVhciBwaWN0dXJlIGJlZm9yZSBJIGNhbiBldmVuIHN0YXJ0IHRvIHRyb3VibGVzaG9vdCBvciBvcHRpbWl6ZSBhbnl0aGluZy4gTGV0J3MgZ2V0IHRvIGl0LlxuXG5cbiIsIklucHV0VG9rZW5zIjo3MjQ2LCJPdXRwdXRUb2tlbnMiOjM5LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MDUuNzc4MDcxMjY3WiIsIlNlcSI6MTgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjgwNjEwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDE5MCxcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiIDE5MDpcXHRcXHQgIGZpcm13YXJlIHRvIGltcGxlbWVudCBVRUZJIHNlY3VyZSBib290LlxcbiAxOTE6XFx0XFxuIDE5MjpcXHRcXHQgIElmIHVuc3VyZSwgc2F5IFkuXFxuIDE5MzpcXHRcXG4gMTk0OlxcdGNvbmZpZyBLVk1fSFlQRVJWXFxuIDE5NTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBNaWNyb3NvZnQgSHlwZXItViBlbXVsYXRpb25cXFwiXFxuIDE5NjpcXHRcXHRkZXBlbmRzIG9uIEtWTV9YODZcXG4gMTk3OlxcdFxcdGRlZmF1bHQgeVxcbiAxOTg6XFx0XFx0aGVscFxcbiAxOTk6XFx0XFx0ICBQcm92aWRlcyBLVk0gc3VwcG9ydCBmb3IgZW11bGF0aW5nIE1pY3Jvc29mdCBIeXBlci1WLiAgVGhpcyBhbGxvd3MgS1ZNXFxuIDIwMDpcXHRcXHQgIHRvIGV4cG9zZSBhIHN1YnNldCBvZiB0aGUgcGFyYXZpcnR1YWxpemVkIGludGVyZmFjZXMgZGVmaW5lZCBpbiB0aGVcXG4gMjAxOlxcdFxcdCAgSHlwZXItViBIeXBlcnZpc29yIFRvcC1MZXZlbCBGdW5jdGlvbmFsIFNwZWNpZmljYXRpb24gKFRMRlMpOlxcbiAyMDI6XFx0XFx0ICBodHRwczovL2RvY3MubWljcm9zb2Z0LmNvbS9lbi11cy92aXJ0dWFsaXphdGlvbi9oeXBlci12LW9uLXdpbmRvd3MvcmVmZXJlbmNlL3RsZnNcXG4gMjAzOlxcdFxcdCAgVGhlc2UgaW50ZXJmYWNlcyBhcmUgcmVxdWlyZWQgZm9yIHRoZSBjb3JyZWN0IGFuZCBwZXJmb3JtYW50IGZ1bmN0aW9uaW5nXFxuIDIwNDpcXHRcXHQgIG9mIFdpbmRvd3MgYW5kIEh5cGVyLVYgZ3Vlc3RzIG9uIEtWTS5cXG4gMjA1OlxcdFxcbiAyMDY6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBcXFwiWVxcXCIuXFxuIDIwNzpcXHRcXG4gMjA4OlxcdGNvbmZpZyBLVk1fWEVOXFxuIDIwOTpcXHRcXHRib29sIFxcXCJTdXBwb3J0IGZvciBYZW4gaHlwZXJjYWxsIGludGVyZmFjZVxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDg6MDUuNzc4MTUzNjM3WiIsIlNlcSI6MTksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjIwMjQ2OTgyNzA3LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNLUh5cGVyViBUaW1lciBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIGltbWVkaWF0ZWx5IHNlZSBhIGRlcGVuZGVuY3kgY2hhaW4uIFRoaXMgYEtWTV9YODZgIGZlYXR1cmUsIHdoaWNoIEknbSBhc3N1bWluZyBpcyByZWxhdGVkIHRvIHg4NiB2aXJ0dWFsaXphdGlvbiwgaGluZ2VzIG9uIGBLVk1gIGl0c2VsZi4gVGhlcmVmb3JlLCB0byBlbnN1cmUgZXZlcnl0aGluZyBmdW5jdGlvbnMgYXMgaW50ZW5kZWQsIHdlJ3JlIGRlZmluaXRlbHkgZ29pbmcgdG8gbmVlZCBib3RoIGBLVk1gIGFuZCBgS1ZNX0hZUEVSVmAgZW5hYmxlZC4gVGhhdCBzZWVtcyBsb2dpY2FsLlxuXG5Ob3csIGRpZ2dpbmcgZGVlcGVyLCBJIHNlZSBhIHBhdHRlcm4gaW4gc29tZSBmdW5jdGlvbiByZWxhdGlvbnNoaXBzLiBUaGUgYHN5bmljX2RlbGl2ZXJfbXNnYCBmdW5jdGlvbiBpcyBkZWNsYXJlZCBhcyBzdGF0aWMuIEludGVyZXN0aW5nLCBidXQgbm90IHVudXN1YWwuIFRoZW4sIGxvb2tpbmcgYXQgaXRzIGNhbGxlciwgYHN0aW1lcl9zZW5kX21zZ2AsIEkgc2VlIGl0J3MgYWxzbyBzdGF0aWMuIEFscmlnaHQuIERpZ2dpbmcgZGVlcGVyIGFnYWluLCBJIHNlZSB0aGF0IHRoZSBmdW5jdGlvbiBjYWxsaW5nIGBzdGltZXJfc2VuZF9tc2dgLCBgc3RpbWVyX2V4cGlyYXRpb25gLCBpcyBhbHNvIHN0YXRpYy4gT2theS4gTm90ZWQuXG5cbkhvd2V2ZXIsIHRoZSBmaW5hbCBjYWxsZXIgaW4gdGhhdCBwYXRoLCBga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc2AsIGlzICpleHBvcnRlZCosIHdoaWNoIG1lYW5zIGl0J3MgYWNjZXNzaWJsZSBvdXRzaWRlIHRoZSBjdXJyZW50IHNjb3BlLiBBaCwgbm93IHRoaXMgaXMgdGhlIGludGVyZXN0aW5nIG9uZS4gVGhpcyBpcyB0aGUgZW50cnkgcG9pbnQsIHRoZSBvbmUgdGhhdCBtYWtlcyB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIGludGVybmFsIGFuZCBleHRlcm5hbCBjb2RlLiBJIG5lZWQgdG8gdGFrZSBhIGNsb3NlIGxvb2sgYXQgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIGFuZCB1bmRlcnN0YW5kIGhvdyB0aGUgaW50ZXJhY3Rpb24gaXMgbWFkZS4gTGV0J3Mgc2VlIHdoYXQncyBoYXBwZW5pbmcgdGhlcmUuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjc3NTUsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMTIsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowODoyNi4wMjUxMzkyNzRaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1NjUyOTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcInZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz04NjY9c3RhdGljIHZvaWQgc3RpbWVyX2V4cGlyYXRpb24oc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg4My1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODg0OnZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg4NS17XFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg9MjYyPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1faHZfaW52dHNjX3N1cHByZXNzZWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oLTI4NC1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6Mjg1OnZvaWQga3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0yODYtXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA4OjI2LjA3MDc5NzY1NFoiLCJTZXEiOjIxLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozNzYzMTU4NTUxNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRob3VnaHQgcHJvY2VzcywgYXMgYW4gZXhwZXJ0IGluIHRoaXMgYXJlYTpcblxuKipBbmFseXppbmcgUG90ZW50aWFsIEVudHJ5IFBvaW50cyBmb3IgSHlwZXItViBUaW1lciBhbmQgU3luSUMgSW50ZXJhY3Rpb25zKipcblxuT2theSwgc28gSSd2ZSBpZGVudGlmaWVkIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBhcyBhIGtleSBlbnRyeSBwb2ludCBmb3IgdGhlIEh5cGVyLVYgdGltZXIgaGFuZGxpbmcuIFRoYXQgZmVlbHMgcmlnaHQsIGl0J3MgYSBnb29kIHN0YXJ0aW5nIHBvaW50LiBOb3csIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZywgYXJlIHRoZXJlIGFueSAqb3RoZXIqIGVudHJ5IHBvaW50cyB0aGF0IEkgc2hvdWxkIGJlIGF3YXJlIG9mPyBJJ20gdGhpbmtpbmcgc3BlY2lmaWNhbGx5IGFib3V0IG90aGVyIHBvdGVudGlhbCB3YXlzIG1lc3NhZ2VzIHJlbGF0ZWQgdG8gdGltZXJzIG9yIHRoZSBTeW5JQyBjb3VsZCBiZSB0cmlnZ2VyZWQgb3IgaGFuZGxlZC5cblxuSG1tLCB3YWl0LCBJIHRob3VnaHQgYHN5bmljX2RlbGl2ZXJfbXNnYCBoYWQgYSBjb25uZWN0aW9uIHRocm91Z2ggYGt2bV9odl9zeW5pY19zZW5kX2VvaWAsIGJ1dCBub3cgSSdtIHRoaW5raW5nIHRoYXQncyBub3QgcXVpdGUgcmlnaHQuIERpZCBJIG1ha2UgYSBtaXN0YWtlPyBMZXQgbWUgZG8gYSBxdWljayBzYW5pdHkgY2hlY2sgd2l0aCBgZ3JlcGAuIE9rYXksIHNvIGEgcXVpY2sgYGdyZXBgIGNvbmZpcm1zIGBzeW5pY19kZWxpdmVyX21zZ2AgKmlzKiBhY3R1YWxseSBvbmx5IGNhbGxlZCBmcm9tIGBzdGltZXJfc2VuZF9tc2dgLiBSaWdodCwgbGV0J3MgZG91YmxlIGNoZWNrIHRoYXQsIGFuZCBtYWtlIHN1cmUgdGhhdCdzIHRoZSBvbmx5IGNhbGwgbG9jYXRpb24uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSBkb24ndCBvdmVybG9vayBhbnkgaW50ZXJhY3Rpb24uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjg0NTcsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTowMy43MDIzODY4OFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTgxMTUyNTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3luaWNfZGVsaXZlcl9tc2dcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9NzY4PXN0YXRpYyBpbnQgc3RpbWVyX2dldF9jb3VudChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsIHU2NCAqcGNvdW50KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTc3My1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6Nzc0OnN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTc3NS1cXHRcXHRcXHQgICAgIHN0cnVjdCBodl9tZXNzYWdlICpzcmNfbXNnLCBib29sIG5vX3JldHJ5KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTgzMz1zdGF0aWMgaW50IHN0aW1lcl9zZW5kX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ3LVxcdHBheWxvYWQtXFx1MDAzZWRlbGl2ZXJ5X3RpbWUgPSBnZXRfdGltZV9yZWZfY291bnRlcih2Y3B1LVxcdTAwM2Vrdm0pO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4NDg6XFx0cmV0dXJuIHN5bmljX2RlbGl2ZXJfbXNnKHRvX2h2X3N5bmljKHZjcHUpLFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04NDktXFx0XFx0XFx0XFx0IHN0aW1lci1cXHUwMDNlY29uZmlnLnNpbnR4LCBtc2csXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjAzLjgwMDUwNjgxOVoiLCJTZXEiOjIzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTg5NzkyODcwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgVGltaW5nIE1lY2hhbmlzbSoqXG5cbk9rYXksIHNvIEknbSBmb2N1c2luZyBvbiB0aGUgdGltaW5nIG1lY2hhbmlzbSwgc3BlY2lmaWNhbGx5IHRoZSBwYXJ0IHJlbGF0ZWQgdG8gYHN0aW1lcl9zZW5kX21zZ2AuIFRoYXQgc2VlbXMgdG8gYmUgdGhlIGNvcmUgZnVuY3Rpb24gaGVyZS4gTG9va2luZyBhdCB0aGUgY2FsbCBncmFwaCwgaXQgYXBwZWFycyB0aGF0IGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBpcyB0aGUgcHJpbWFyeSBlbnRyeSBwb2ludCB0byB0aGlzIHRpbWluZyBsb2dpYy4gTm93LCBhIHJlZCBmbGFnIGp1c3Qgd2VudCB1cCDigJMgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIGlzIGNhbGxlZCBmcm9tIGB2Y3B1X2VudGVyX2d1ZXN0YC4gVGhhdCdzIGEgKnZlcnkqIGhvdCBwYXRoLCBtZWFuaW5nIGFueSBpbmVmZmljaWVuY3kgaGVyZSB3aWxsIGhhdmUgYSBodWdlIHBlcmZvcm1hbmNlIGltcGFjdC4gV2UgbmVlZCB0byBiZSBjYXJlZnVsLiBJIG5lZWQgdG8gYmUgc3VyZSB0aGUgZnJlcXVlbmN5IG9mIHRoaXMgY2hlY2sgaXMgcmlnaHQuXG5cbkkgc2hvdWxkIGFsc28gaW52ZXN0aWdhdGUgb3RoZXIgcG90ZW50aWFsIHRyaWdnZXJzLiBJIG5lZWQgdG8gZmluZCBhbGwgdGhlIHdheXMgYEtWTV9SRVFfSFZfU1RJTUVSYCBnZXRzIHNldCB0byBmdWxseSB1bmRlcnN0YW5kIHRoZSBsYW5kc2NhcGUgYW5kIGlkZW50aWZ5IG90aGVyIHBvdGVudGlhbCBib3R0bGVuZWNrcyBvciBvcHRpbWl6YXRpb24gb3Bwb3J0dW5pdGllcy4gTGV0J3Mgc2VlIGhvdyB0aGF0IHJlcXVlc3QgZmxhZyBpcyBiZWluZyBzZXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjkxNTcsIk91dHB1dFRva2VucyI6MzksIk91dHB1dFRob3VnaHRzVG9rZW5zIjo5NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTowNy43OTAzMDI4NzlaIiwiU2VxIjoyNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQ1MDQ3MDg0NCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUkVRX0hWX1NUSU1FUlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz01OTc9c3RhdGljIHZvaWQgc3RpbWVyX21hcmtfcGVuZGluZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjAyLVxcdHNldF9iaXQoc3RpbWVyLVxcdTAwM2VpbmRleCwgdmNwdS1cXHUwMDNlYXJjaC5oeXBlcnYtXFx1MDAzZXN0aW1lcl9wZW5kaW5nX2JpdG1hcCk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjYwMzpcXHRrdm1fbWFrZV9yZXF1ZXN0KEtWTV9SRVFfSFZfU1RJTUVSLCB2Y3B1KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjA0LVxcdGlmICh2Y3B1X2tpY2spXFxuLS1cXG5hcmNoL3g4Ni9rdm0veDg2LmM9ODA1MT1zdGF0aWMgaW50IHZjcHVfZW50ZXJfZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxOTQtXFx0XFx0LypcXG5hcmNoL3g4Ni9rdm0veDg2LmM6ODE5NTpcXHRcXHQgKiBLVk1fUkVRX0hWX1NUSU1FUiBoYXMgdG8gYmUgcHJvY2Vzc2VkIGFmdGVyXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgxOTYtXFx0XFx0ICogS1ZNX1JFUV9DTE9DS19VUERBVEUsIGJlY2F1c2UgSHlwZXItViBTeW5JQyB0aW1lcnNcXG4tLVxcbmFyY2gveDg2L2t2bS94ODYuYy04MTk4LVxcdFxcdCAqL1xcbmFyY2gveDg2L2t2bS94ODYuYzo4MTk5OlxcdFxcdGlmIChrdm1fY2hlY2tfcmVxdWVzdChLVk1fUkVRX0hWX1NUSU1FUiwgdmNwdSkpXFxuYXJjaC94ODYva3ZtL3g4Ni5jLTgyMDAtXFx0XFx0XFx0a3ZtX2h2X3Byb2Nlc3Nfc3RpbWVycyh2Y3B1KTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MDguMjQwNzc3OTUyWiIsIlNlcSI6MjUsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjYxOTkxNzI2NDgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0YWtlIG9uIHRob3NlIHRob3VnaHRzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkFuYWx5emluZyB0aGUgYHN0aW1lcl9tYXJrX3BlbmRpbmdgIENhbGxlcnMqKlxuXG5Pa2F5LCBzbyBgc3RpbWVyX21hcmtfcGVuZGluZ2AgaXMgdGhlIGZ1bmN0aW9uIHRoYXQgc2V0cyB0aGUgXCJwZW5kaW5nXCIgZmxhZy4gVGhhdCdzIHRoZSBrZXkuIE5vdywgbXkgbmV4dCBtb3ZlIGlzIGNsZWFyOiBJIG5lZWQgdG8gcXVpY2tseSBpZGVudGlmeSBhbGwgdGhlIGNhbGwgc2l0ZXMgb2YgYHN0aW1lcl9tYXJrX3BlbmRpbmdgLiBVbmRlcnN0YW5kaW5nIGhvdyBhbmQgKndoZXJlKiB0aGlzIGZsYWcgaXMgc2V0IGlzIGFic29sdXRlbHkgY3J1Y2lhbC4gSSBuZWVkIHRvIHRyYWNlIHRoZSBjb250cm9sIGZsb3cgdG8gZGV0ZXJtaW5lIHRoZSBjb25kaXRpb25zIHVuZGVyIHdoaWNoIGEgdGltZXIgaXMgY29uc2lkZXJlZCBwZW5kaW5nLiBJJ20gbG9va2luZyBmb3IgdGhlIGxvZ2ljIHRoYXQgdHJpZ2dlcnMgdGhpcyBzdGF0ZSBjaGFuZ2UuIEFyZSB3ZSB0YWxraW5nIGFib3V0IHRpbWVyIGV4cGlyeSwgdXNlciBpbnRlcmFjdGlvbiwgaW50ZXJydXB0IGhhbmRsaW5nLCBvciBzb21ldGhpbmcgZWxzZSBlbnRpcmVseT8gQSB0aG9yb3VnaCBjYWxsIGdyYXBoIGFuYWx5c2lzIHdpbGwgcmV2ZWFsIHRoZSBjb250ZXh0cyB0aGF0IGluZmx1ZW5jZSB0aW1lciBiZWhhdmlvci4gVW5kZXJzdGFuZGluZyB0aGUgXCJwZW5kaW5nXCIgc3RhdGUgaXMgY3JpdGljYWwgdG8gdHJvdWJsZXNob290aW5nIHRpbWluZyBpc3N1ZXMgYW5kIHBvdGVudGlhbGx5IG9wdGltaXppbmcgdGltZXIgdXNhZ2UuIEknbGwgbmVlZCB0byBjb3JyZWxhdGUgdGhlIGNhbGxlciBhbmFseXNpcyB3aXRoIHRoZSBmdW5jdGlvbidzIGludGVybmFsIGltcGxlbWVudGF0aW9uIHRvIGZ1bGx5IGdyYXNwIGl0cyByb2xlIGluIHRoZSBzeXN0ZW0uIExldCdzIGRpZyBpbi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTkwOSwiT3V0cHV0VG9rZW5zIjozNSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjE0LjQzOTk1NjQ3WiIsIlNlcSI6MjYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo4OTc0ODUyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGltZXJfbWFya19wZW5kaW5nXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jLTY0LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo2NTpzdGF0aWMgdm9pZCBzdGltZXJfbWFya19wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcixcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjYtXFx0XFx0XFx0XFx0Ym9vbCB2Y3B1X2tpY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTIyNT1zdGF0aWMgdm9pZCBrdm1faHZfbm90aWZ5X2Fja2VkX3NpbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgc2ludClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNDAtXFx0XFx0ICAgIHN0aW1lci1cXHUwMDNlY29uZmlnLnNpbnR4ID09IHNpbnQpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjI0MTpcXHRcXHRcXHRzdGltZXJfbWFya19wZW5kaW5nKHN0aW1lciwgZmFsc2UpO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0yNDItXFx0fVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTU3OD1zdGF0aWMgdTY0IGdldF90aW1lX3JlZl9jb3VudGVyKHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy01OTYtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjU5NzpzdGF0aWMgdm9pZCBzdGltZXJfbWFya19wZW5kaW5nKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcixcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNTk4LVxcdFxcdFxcdFxcdGJvb2wgdmNwdV9raWNrKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTYyMT1zdGF0aWMgZW51bSBocnRpbWVyX3Jlc3RhcnQgc3RpbWVyX3RpbWVyX2NhbGxiYWNrKHN0cnVjdCBocnRpbWVyICp0aW1lcilcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy02MjctXFx0XFx0XFx0XFx0ICAgICBzdGltZXItXFx1MDAzZWluZGV4KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NjI4OlxcdHN0aW1lcl9tYXJrX3BlbmRpbmcoc3RpbWVyLCB0cnVlKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjI5LVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTY1MD1zdGF0aWMgaW50IHN0aW1lcl9zdGFydChzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3RpbWVyICpzdGltZXIpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjg4LVxcdFxcdCAqL1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo2ODk6XFx0XFx0c3RpbWVyX21hcmtfcGVuZGluZyhzdGltZXIsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNjkwLVxcdFxcdHJldHVybiAwO1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jPTcwMz1zdGF0aWMgaW50IHN0aW1lcl9zZXRfY29uZmlnKHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lciwgdTY0IGNvbmZpZyxcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03MjktXFx0aWYgKHN0aW1lci1cXHUwMDNlY29uZmlnLmVuYWJsZSlcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NzMwOlxcdFxcdHN0aW1lcl9tYXJrX3BlbmRpbmcoc3RpbWVyLCBmYWxzZSk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTczMS1cXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz03MzU9c3RhdGljIGludCBzdGltZXJfc2V0X2NvdW50KHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lciwgdTY0IGNvdW50LFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTc1Ni1cXHRpZiAoc3RpbWVyLVxcdTAwM2Vjb25maWcuZW5hYmxlKVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo3NTc6XFx0XFx0c3RpbWVyX21hcmtfcGVuZGluZyhzdGltZXIsIGZhbHNlKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzU4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOToxNC41Mjk3MDkyNzhaIiwiU2VxIjoyNywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDMwMzEwNjczNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgUG90ZW50aWFsIEludGVycnVwdCBUcmlnZ2VycyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgY29kZSBhbmQgdGhlc2UgZnVuY3Rpb25zIOKAkyBga3ZtX2h2X25vdGlmeV9hY2tlZF9zaW50YCwgYHN0aW1lcl90aW1lcl9jYWxsYmFja2AsIGBzdGltZXJfc3RhcnRgLCBgc3RpbWVyX3NldF9jb25maWdgLCBhbmQgYHN0aW1lcl9zZXRfY291bnRgIOKAkyBzZWVtIHRvIGJlIHRoZSBwb3RlbnRpYWwgY3VscHJpdHMgZm9yIHRyaWdnZXJpbmcgdGhpcyBpbnRlcnJ1cHQuIEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBwYXRoIG9mIGV4ZWN1dGlvbiBoZXJlLlxuXG5TcGVjaWZpY2FsbHksIGBzdGltZXJfc2V0X2NvbmZpZ2AgYW5kIGBzdGltZXJfc2V0X2NvdW50YCBhcmUgY2FsbGVkIGluIHJlc3BvbnNlIHRvIHRoZSBndWVzdCB3cml0aW5nIHRvIHRoZSBjb3JyZXNwb25kaW5nIE1TUnMsIHdoaWNoIGltbWVkaWF0ZWx5IGRyYXdzIG15IGF0dGVudGlvbi4gVGhhdCBzZWVtcyBsaWtlIGEgcHJpbWUgYXJlYSB0byBmb2N1cyBvbiBmb3IgY29udHJvbC4gTGV0J3Mgc3RhcnQgYnkgZGlnZ2luZyBpbnRvIGBzdGltZXJfc2V0X2NvbmZpZ2AgYW5kIHNlZSB3aGF0J3MgZ29pbmcgb24gdGhlcmUsIGhvdyBpdCByZWxhdGVzIHRvIHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExMDU0LCJPdXRwdXRUb2tlbnMiOjM1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTMsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MTguODMyODE4Mzg0WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NjkxNTExOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzdGltZXJfc2V0X2NvbmZpZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz02NTA9c3RhdGljIGludCBzdGltZXJfc3RhcnQoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTcwMi1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6NzAzOnN0YXRpYyBpbnQgc3RpbWVyX3NldF9jb25maWcoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCB1NjQgY29uZmlnLFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03MDQtXFx0XFx0XFx0ICAgICBib29sIGhvc3QpXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtNzE5LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo3MjA6XFx0dHJhY2Vfa3ZtX2h2X3N0aW1lcl9zZXRfY29uZmlnKGh2X3N0aW1lcl90b192Y3B1KHN0aW1lciktXFx1MDAzZXZjcHVfaWQsXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTcyMS1cXHRcXHRcXHRcXHQgICAgICAgc3RpbWVyLVxcdTAwM2VpbmRleCwgY29uZmlnLCBob3N0KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNTQzPXN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE2MjgtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE2Mjk6XFx0XFx0cmV0dXJuIHN0aW1lcl9zZXRfY29uZmlnKHRvX2h2X3N0aW1lcih2Y3B1LCB0aW1lcl9pbmRleCksXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE2MzAtXFx0XFx0XFx0XFx0XFx0IGRhdGEsIGhvc3QpO1xcbi0tXFxuYXJjaC94ODYva3ZtL3RyYWNlLmg9MTI3OT1UUkFDRV9FVkVOVChrdm1faHZfc3luaWNfc2V0X21zcixcXG4tLVxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTEzMDEtLypcXG5hcmNoL3g4Ni9rdm0vdHJhY2UuaDoxMzAyOiAqIFRyYWNlcG9pbnQgZm9yIHN0aW1lcl9zZXRfY29uZmlnLlxcbmFyY2gveDg2L2t2bS90cmFjZS5oLTEzMDMtICovXFxuYXJjaC94ODYva3ZtL3RyYWNlLmg6MTMwNDpUUkFDRV9FVkVOVChrdm1faHZfc3RpbWVyX3NldF9jb25maWcsXFxuYXJjaC94ODYva3ZtL3RyYWNlLmgtMTMwNS1cXHRUUF9QUk9UTyhpbnQgdmNwdV9pZCwgaW50IHRpbWVyX2luZGV4LCB1NjQgY29uZmlnLCBib29sIGhvc3QpLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOToxOC45Mjk3Mzc1ODNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDgxNjk0MjIwOCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipGdXp6aW5nIFRhcmdldCBJZGVudGlmaWNhdGlvbioqXG5cbk9rYXksIHNvIHRoZSBga3ZtX2h2X3NldF9tc3JgIGZ1bmN0aW9uLCB0aGF0J3MgdGhlIGVudHJ5IHBvaW50IEkgbmVlZCB0byBmb2N1cyBvbi4gSXQgZ2V0cyBjYWxsZWQgd2hlbiBhIGd1ZXN0IFZNIHVzZXMgYFdSTVNSYCB0byB3cml0ZSB0byBIeXBlci1WIE1vZGVsLVNwZWNpZmljIFJlZ2lzdGVycywgc28sIHllcywgdGhhdCdzIGRlZmluaXRlbHkgYSByZWFjaGFibGUgY29kZSBwYXRoIGZyb20gd2l0aGluIHRoZSBndWVzdC4gVGhhdCBtYWtlcyBpdCBhIHByaW1lIGNhbmRpZGF0ZSBmb3IgZnV6emluZywgYWJzb2x1dGVseS4gVGhlIGd1ZXN0LWNvbnRyb2xsZWQgaW5wdXRzIGFyZSB0aGUga2V5LlxuXG5MZXQncyBkcmlsbCBkb3duIGEgYml0IGRlZXBlci4gU2luY2UgSSdtIGZ1enppbmcsIG15IHByaW1hcnkgZm9jdXMgc2hvdWxkIGJlIG9uIGBrdm1faHZfc2V0X21zcmAgYW5kIGFsc28gYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIHRvIHNlZSBob3cgdGhvc2Ugd29yayB3aXRoIHRoZSBNU1Igc2V0dGluZy5cblxuTmV4dCBzdGVwLCBjaGVjayBpZiBga3ZtX2h2X3NldF9tc3JgIGlzIGV4cG9ydGVkIG9yIGlmIGl0J3Mgc3RhdGljLiBUaGF0IHdpbGwgaW1wYWN0IG15IGFwcHJvYWNoIHRvIGluc3RydW1lbnRhdGlvbi4gR290dGEgZGV0ZXJtaW5lIGFjY2VzcyBtZXRob2RzIVxuXG5cbiIsIklucHV0VG9rZW5zIjoxMTkzOSwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExNSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOToyMy43NDY2ODE1NFoiLCJTZXEiOjMwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6ODM1MDE1MTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiaW50IGt2bV9odl9zZXRfbXNyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gveDg2L2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jPTEzODc9dm9pZCBrdm1faHZfeHNhdmVzX3hzYXZlY19tYXliZV93YXJuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xMzk5LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNDAwOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3JfcHcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTQwMS1cXHRcXHRcXHQgICAgIGJvb2wgaG9zdClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNTM0PXN0YXRpYyB1NjQgY3VycmVudF90YXNrX3J1bnRpbWVfMTAwbnModm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNTQyLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNTQzOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNTQ0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNzExPXN0YXRpYyBpbnQga3ZtX2h2X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhLFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3NzUtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3NzY6aW50IGt2bV9odl9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhLCBib29sIGhvc3QpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3Nzcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oPTE5Mz1zdGF0aWMgaW5saW5lIHUzMiBrdm1faHZfZ2V0X3ZwaW5kZXgoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oLTE5OS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2Lmg6MjAwOmludCBrdm1faHZfc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmgtMjAxLWludCBrdm1faHZfZ2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhLCBib29sIGhvc3QpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOToyMy44MzAxOTA4MzlaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjQxOTIwNTI0NCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhlIHRob3VnaHQgcHJvY2VzcywgYXMgcmVxdWVzdGVkOlxuXG4qKkRlY29uc3RydWN0aW5nIHRoZSBNU1IgU2V0dGluZyBGdW5jdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrdm1faHZfc2V0X21zcl9jb21tb25gLiBUaGUgaW1tZWRpYXRlIHF1ZXN0aW9uIGlzLCBob3cgaXMgdGhpcyBmdW5jdGlvbiBhY3R1YWxseSAqdXNlZCo/IEkgbmVlZCB0byB1bmRlcnN0YW5kIGl0cyBjYWxsIGdyYXBoLiBTcGVjaWZpY2FsbHksIEkgd2FudCB0byBrbm93IGlmIGBrdm1faHZfc2V0X21zcmAgY2FsbHMgaXQuIFRoYXQgc2VlbXMgbGlrZSBhIGxvZ2ljYWwgcGxhY2UgdG8gc3RhcnQgZGlnZ2luZy4gS25vd2luZyB0aGUgY2FsbGVyLWNhbGxlZSByZWxhdGlvbnNoaXBzIGlzIGZ1bmRhbWVudGFsIHRvIGdyYXNwaW5nIHRoZSBmdW5jdGlvbidzIHJvbGUgaW4gdGhlIGxhcmdlciBLVk0gaHlwZXJ2aXNvciBjb250ZXh0LCBhbmQgd2lsbCBoZWxwIG1lIHVuZGVyc3RhbmQgaXRzIHNwZWNpZmljIGltcGxlbWVudGF0aW9uIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEyOTI1LCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTEsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MzAuMjQ5Mzk3ODAzWiIsIlNlcSI6MzIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5MjY1MjYzOSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faHZfc2V0X21zclwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jPTEzODc9dm9pZCBrdm1faHZfeHNhdmVzX3hzYXZlY19tYXliZV93YXJuKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xMzk5LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNDAwOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3JfcHcoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtMTQwMS1cXHRcXHRcXHQgICAgIGJvb2wgaG9zdClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNTM0PXN0YXRpYyB1NjQgY3VycmVudF90YXNrX3J1bnRpbWVfMTAwbnModm9pZClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNTQyLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNTQzOnN0YXRpYyBpbnQga3ZtX2h2X3NldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNTQ0LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz0xNzExPXN0YXRpYyBpbnQga3ZtX2h2X2dldF9tc3Ioc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgKnBkYXRhLFxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3NzUtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3NzY6aW50IGt2bV9odl9zZXRfbXNyX2NvbW1vbihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBtc3IsIHU2NCBkYXRhLCBib29sIGhvc3QpXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3Nzcte1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3ODktXFx0XFx0bXV0ZXhfbG9jayhcXHUwMDI2aHYtXFx1MDAzZWh2X2xvY2spO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzkwOlxcdFxcdHIgPSBrdm1faHZfc2V0X21zcl9wdyh2Y3B1LCBtc3IsIGRhdGEsIGhvc3QpO1xcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzkxLVxcdFxcdG11dGV4X3VubG9jayhcXHUwMDI2aHYtXFx1MDAzZWh2X2xvY2spO1xcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3OTMtXFx0fSBlbHNlXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjE3OTQ6XFx0XFx0cmV0dXJuIGt2bV9odl9zZXRfbXNyKHZjcHUsIG1zciwgZGF0YSwgaG9zdCk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTE3OTUtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTozMC4zNDIwNTQ4ODJaIiwiU2VxIjozMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDYwNzMyNzI3MSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgSHlwZXItViBNU1IgU2V0dGluZyoqXG5cbk9rYXksIHNvIEkndmUgY29uZmlybWVkIHRoYXQgYGt2bV9odl9zZXRfbXNyX2NvbW1vbmAgKmRvZXMqIGluZGVlZCBjYWxsIGBrdm1faHZfc2V0X21zcmAuIFRoYXQncyBhIHNvbGlkIHBvaW50IHRvIGZvY3VzIG9uOyBga3ZtX2h2X3NldF9tc3JfY29tbW9uYCBsb29rcyBsaWtlIGEga2V5IHN5bWJvbCB0byBkaXZlIGludG8uIEdpdmVuIGl0cyByb2xlIGluIHNldHRpbmcgTVNScywgaXQgcHJvYmFibHkgaGFzIHNvbWUgaW50ZXJlc3RpbmcgaW50ZXJhY3Rpb25zLiBJIGFsc28gd2FudCB0byBrZWVwIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBpbiBtaW5kIOKAkyBpdCdzIGFub3RoZXIgYXJlYSB3aGVyZSBIeXBlci1WIGludGVyYWN0aW9ucyBvY2N1ci5cblxuTm93LCBteSBuZXh0IGxvZ2ljYWwgc3RlcCBpcyB0byBhbmFseXplIHRoZSBjYWxsZXJzIG9mIGBrdm1faHZfc2V0X21zcl9jb21tb25gLiBVbmRlcnN0YW5kaW5nIHdoZXJlIHRoaXMgZnVuY3Rpb24gaXMgaW52b2tlZCB3aWxsIGlsbHVtaW5hdGUgaXRzIGJyb2FkZXIgY29udGV4dCBhbmQgcmV2ZWFsIHdoYXQgdHJpZ2dlcnMgdGhlc2UgTVNSIHNldHRpbmdzLiBMZXQncyBzZWUgd2hhdCB0aGUgY2FsbGdyYXBoIHJldmVhbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEzODAyLCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6ODcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6MzQuOTQ5Mzg0MTIzWiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NDY0MTY1OCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJrdm1faHZfc2V0X21zcl9jb21tb25cIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmM9MTcxMT1zdGF0aWMgaW50IGt2bV9odl9nZXRfbXNyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSxcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzc1LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzoxNzc2OmludCBrdm1faHZfc2V0X21zcl9jb21tb24oc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgbXNyLCB1NjQgZGF0YSwgYm9vbCBob3N0KVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy0xNzc3LXtcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuaD0xOTM9c3RhdGljIGlubGluZSB1MzIga3ZtX2h2X2dldF92cGluZGV4KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuaC0xOTktXFxuYXJjaC94ODYva3ZtL2h5cGVydi5oOjIwMDppbnQga3ZtX2h2X3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0IGRhdGEsIGJvb2wgaG9zdCk7XFxuYXJjaC94ODYva3ZtL2h5cGVydi5oLTIwMS1pbnQga3ZtX2h2X2dldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIG1zciwgdTY0ICpwZGF0YSwgYm9vbCBob3N0KTtcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmM9MTQ0Mj1pbnQga3ZtX3NldF9tc3JfY29tbW9uKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IG1zcl9kYXRhICptc3JfaW5mbylcXG4tLVxcbmFyY2gveDg2L2t2bS9tc3JzLmMtMTc4MS1cXHRjYXNlIEhWX1g2NF9NU1JfVFNDX0lOVkFSSUFOVF9DT05UUk9MOlxcbmFyY2gveDg2L2t2bS9tc3JzLmM6MTc4MjpcXHRcXHRyZXR1cm4ga3ZtX2h2X3NldF9tc3JfY29tbW9uKHZjcHUsIG1zciwgZGF0YSxcXG5hcmNoL3g4Ni9rdm0vbXNycy5jLTE3ODMtXFx0XFx0XFx0XFx0XFx0ICAgICBtc3JfaW5mby1cXHUwMDNlaG9zdF9pbml0aWF0ZWQpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTozNS4wNDQwMzEzNzFaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzY1NDM0NDAwNiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipNeSBGdXp6aW5nIFN0cmF0ZWd5IGZvciBIeXBlci1WIE1TUiBIYW5kbGluZyoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IGBrdm1fc2V0X21zcl9jb21tb25gIGFuZCBpdCBsb29rcyBsaWtlIGl0J3MgdGhlIGNhbGxlciBoZXJlLiBUaGF0IGltbWVkaWF0ZWx5IG1ha2VzIGBrdm1faHZfc2V0X21zcl9jb21tb25gIGEgcHJpbWUgdGFyZ2V0IGZvciBmdXp6aW5nLiBJdCdzIGEga2V5IGZ1bmN0aW9uIGZvciBpbnZlc3RpZ2F0aW9uLlxuXG5MZXQgbWUgc3VtbWFyaXplIHRoZSBpbml0aWFsIGZpbmRpbmdzOiBpdCBsb29rcyBsaWtlIHRoaXMgYXJlYSBpcyBkZWZpbml0ZWx5IHdvcnRoIGZ1enppbmcsIGFuZCB0aGUgcHJpbWFyeSBmb2N1cyBzaG91bGQgYmUgb24gYGt2bV9odl9zZXRfbXNyX2NvbW1vbmAgYW5kIGFsc28gb24gdGhlIGBrdm1faHZfcHJvY2Vzc19zdGltZXJzYCBmdW5jdGlvbi4gVGhlIGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBhcmUgYEtWTWAgYW5kIGBLVk1fSFlQRVJWYC5cblxuTm93LCBJIHNob3VsZCBjaGVjayBmb3IgYW55IHJlbGF0ZWQgY29uZmlndXJhdGlvbnMuIEl0IHNlZW1zIGBLVk1fWDg2YCBleGlzdHMgYXMgYSBgZGVmX3RyaXN0YXRlYCwgYnV0IGl0J3Mgbm90IGRpcmVjdGx5IHNlbGVjdGFibGUgYnkgdGhlIHVzZXIsIGRlcGVuZGluZyBpbnN0ZWFkIG9uIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYC4gSSdsbCB3YW50IHRvIGNoZWNrIGBhcmNoL3g4Ni9rdm0vS2NvbmZpZ2AgZm9yIHRoZSBzcGVjaWZpYyBpbXBsaWNhdGlvbnMgb2YgYEtWTV9YODZgIGFuZCBob3cgaXRzIGRlcGVuZGFuY2llcyBtaWdodCBpbXBhY3Qgb3VyIGZ1enppbmcgYXBwcm9hY2guXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE0NjI2LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTc5LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjQyLjY5ODM3OTYxN1oiLCJTZXEiOjM2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjU4MzkzMjksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIEtWTV9YODZcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWdcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL0tjb25maWc9MTg9aWYgVklSVFVBTElaQVRJT05cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZy0xOS1cXG5hcmNoL3g4Ni9rdm0vS2NvbmZpZzoyMDpjb25maWcgS1ZNX1g4NlxcbmFyY2gveDg2L2t2bS9LY29uZmlnLTIxLVxcdGRlZl90cmlzdGF0ZSBLVk0gaWYgKEtWTV9JTlRFTCAhPSBuIHx8IEtWTV9BTUQgIT0gbilcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6NDIuNzY0MjI0NDY2WiIsIlNlcSI6MzcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExMzQ1Mzc2MzkwLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIEh5cGVyLVYgU3ludGhldGljIFRpbWVyIFBhdGNoKipcblxuT2theSwgc28gd2UncmUgbG9va2luZyBhdCBhIHBhdGNoIHJlbGF0ZWQgdG8gSHlwZXItViBzeW50aGV0aWMgdGltZXJzLiBHaXZlbiB0aGF0IHdlJ3JlIGRlYWxpbmcgd2l0aCBLVk0sIEkgc2hvdWxkIHByb2JhYmx5IGVuc3VyZSB0aGF0IHdlIGhhdmUgZWl0aGVyIGBLVk1fSU5URUxgIG9yIGBLVk1fQU1EYCBlbmFibGVkLCBhbHRob3VnaCBzeXprYWxsZXIgdXN1YWxseSBoYW5kbGVzIHRob3NlLiBGb3IgdGhpcyBpbml0aWFsIHNldHVwLCBJJ2xsIGxpc3QgYEtWTWAgYW5kIGBLVk1fSFlQRVJWYCBzcGVjaWZpY2FsbHksIHRvIGJlIHNhZmUuXG5cbk15IG5leHQgc3RlcCBpcyB0byBjb25maXJtIHRoZSByZWFjaGFiaWxpdHkgb2YgYHN5bmljX2RlbGl2ZXJfbXNnYC4gSSBxdWlja2x5IHNlZSB0aGF0IGBzdGltZXJfc2VuZF9tc2dgIGNhbGxzIGl0LCBgc3RpbWVyX3NlbmRfbXNnYCBpcyB0cmlnZ2VyZWQgYnkgYHN0aW1lcl9leHBpcmF0aW9uYCwgd2hpY2gsIGluIHR1cm4sIGlzIGludm9rZWQgYnkgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgLiBBbmQgZmluYWxseSwgYGt2bV9odl9wcm9jZXNzX3N0aW1lcnNgIGlzIGNhbGxlZCBieSBgdmNwdV9lbnRlcl9ndWVzdGAuIEl0J3MgYSBwcmV0dHkgc3RhbmRhcmQgS1ZNIGd1ZXN0IGV4ZWN1dGlvbiBwYXRoLCBzbyB0aGF0IGNvbmZpcm1zIHRoZSBwb3RlbnRpYWwgZW50cnkgcG9pbnQuXG5cblRoZSBwYXRjaCBpdHNlbGYgbW9kaWZpZXMgYHN5bmljX2RlbGl2ZXJfbXNnYCwgY2xlYXJpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdThgIGJlZm9yZSBzZXR0aW5nIGBtc2dfcGVuZGluZ2AuIFRoaXMgaXMgYSBjbGVhciwgZnVuY3Rpb25hbCBjaGFuZ2UgdG8gdGhlIEh5cGVyLVYgc3ludGhldGljIHRpbWVyIG1lc3NhZ2UgZGVsaXZlcnkgbWVjaGFuaXNtLiBJdCdzIGEgcGVyZmVjdCBjYW5kaWRhdGUgZm9yIGZ1enppbmcsIGdpdmVuIHRoYXQgaXQgYWx0ZXJzIGEgY29yZSBtZXNzYWdlIGhhbmRsaW5nIHByb2Nlc3MuIEknbSBnb2luZyB0byBmbGFnIHRoaXMgYXMgaGlnaC1wcmlvcml0eSwgZ2l2ZW4gdGhlIHBvdGVudGlhbCBmb3IgdnVsbmVyYWJpbGl0aWVzIGluIG1lc3NhZ2UgaGFuZGxpbmcuXG5cblRpbWUgdG8gdXNlIHRoZSBgc2V0LXJlc3VsdHNgIHRvb2wgbm93LlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNTIxMSwiT3V0cHV0VG9rZW5zIjoxMTUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6NTQuMTA5NjA0Mjc2WiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InNldC1yZXN1bHRzIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTQyMTQzMTY4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIixcbiAgICBcIktWTV9IWVBFUlZcIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1faHZfc2V0X21zcl9jb21tb25cIixcbiAgICBcImt2bV9odl9wcm9jZXNzX3N0aW1lcnNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBtb2RpZmllcyB0aGUgSHlwZXItViBzeW50aGV0aWMgdGltZXIgbWVzc2FnZSBkZWxpdmVyeSBsb2dpYyBpbiBLVk0gYnkgY2xlYXJpbmcgYSBtZXNzYWdlIGZsYWcgYmVmb3JlIHNldHRpbmcgaXQuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSBpbiByZWFjaGFibGUgY29yZSBLVk0gbG9naWMgdGhhdCBoYW5kbGVzIGd1ZXN0IE1TUiB3cml0ZXMgYW5kIHRpbWVyIGV4cGlyYXRpb25zLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiLFxuICAgIFwiS1ZNX0hZUEVSVlwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bV9odl9zZXRfbXNyX2NvbW1vblwiLFxuICAgIFwia3ZtX2h2X3Byb2Nlc3Nfc3RpbWVyc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG1vZGlmaWVzIHRoZSBIeXBlci1WIHN5bnRoZXRpYyB0aW1lciBtZXNzYWdlIGRlbGl2ZXJ5IGxvZ2ljIGluIEtWTSBieSBjbGVhcmluZyBhIG1lc3NhZ2UgZmxhZyBiZWZvcmUgc2V0dGluZyBpdC4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIGluIHJlYWNoYWJsZSBjb3JlIEtWTSBsb2dpYyB0aGF0IGhhbmRsZXMgZ3Vlc3QgTVNSIHdyaXRlcyBhbmQgdGltZXIgZXhwaXJhdGlvbnMuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjA5OjU0LjI1MTc1NDQ3NFoiLCJTZXEiOjM5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NjQxMzkyNzMyNTIsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTo1NC4yNTIyMTE0NTRaIiwiU2VxIjo0MCwiTmVzdGluZyI6MiwiVHlwZSI6ImFnZW50IiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiYmVzdC1leHBlbnNpdmUiLCJEdXJhdGlvbiI6NjQxMzg4MTA4MzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluZm9ybWF0aW9uIGxlYWsgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgd3JpdHRlbiB0byBndWVzdCBtZW1vcnkuIFNwZWNpZmljYWxseSwgYGh2X2hkcmAgaXMgYW4gdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZS4gVGhlIGNvZGUgc2V0cyBhIHNpbmdsZSBiaXRmaWVsZCBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxYCwgbGVhdmluZyB0aGUgcmVtYWluaW5nIDcgYml0cyBvZiB0aGUgYG1lc3NhZ2VfZmxhZ3NgIGJ5dGUgdW5pbml0aWFsaXplZC4gVGhpcyBieXRlIGlzIHRoZW4gd3JpdHRlbiB0byBndWVzdCBtZW1vcnkgdmlhIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKClgLCB3aGljaCBpbnRlcm5hbGx5IHVzZXMgYF9fY29weV90b191c2VyKClgIHRvIHdyaXRlIHRvIHRoZSB1c2Vyc3BhY2UtbWFwcGVkIGd1ZXN0IG1lbW9yeS4gVGhpcyBsZWFrcyA3IGJpdHMgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHRoaXMgZXhhY3QgY2xhc3Mgb2YgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgc2VjdXJpdHkgZW5naW5lZXIgc3BlY2lhbGl6aW5nIGluIGtlcm5lbCBtZW1vcnlcbmVycm9yIGRldGVjdG9ycyAoS0FTQU4gYW5kIEtNU0FOKS4gWW91ciBqb2IgaXMgdG8gcmV2aWV3IHRoZSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kXG5kZXRlcm1pbmUgaWYgdGhlIGNvZGUgY2hhbmdlcyBqdXN0aWZ5IHNwYXduaW5nIGEgZGVkaWNhdGVkIEtNU0FOIChLZXJuZWxNZW1vcnlTYW5pdGl6ZXIpXG5mdXp6aW5nIHNlc3Npb24gaW4gYWRkaXRpb24gdG8gc3RhbmRhcmQgS0FTQU4gZnV6emluZy5cblxuQ1JJVElDQUwgRElTVElOQ1RJT04gQkVUV0VFTiBLQVNBTiBBTkQgS01TQU46XG4tIFN0YW5kYXJkIEtBU0FOIGtlcm5lbCBidWlsZHMgKHVwc3RyZWFtLWFwcGFybW9yLWthc2FuLmNvbmZpZykgYWxyZWFkeSBlbmFibGVcbiAgYSBjb21wcmVoZW5zaXZlIHN1aXRlIG9mIGRlYnVnZ2luZyB0b29scyBhbmQgc2FuaXRpemVycywgaW5jbHVkaW5nIEtBU0FOXG4gIChvdXQtb2YtYm91bmRzIGFjY2Vzc2VzLCB1c2UtYWZ0ZXItZnJlZSwgZG91YmxlIGZyZWUsIGludmFsaWQgZnJlZSksIExPQ0tERVBcbiAgKGxvY2tpbmcgYnVncyBhbmQgZGVhZGxvY2tzKSwgVUItc2FuaXRpemVycywgYW5kIG1lbW9yeSBjb3JydXB0aW9uIGNoZWNrcy5cbi0gS01TQU4gKEtlcm5lbE1lbW9yeVNhbml0aXplcikgZGV0ZWN0cyByZWFkcyBvZiBVTklOSVRJQUxJWkVEIG1lbW9yeSAoc3RhY2ssIGhlYXAsXG4gIG9yIHBhZ2UgYWxsb2NhdGlvbnMpIGFuZCBrZXJuZWwtdG8tdXNlciBtZW1vcnkgaW5mby1sZWFrcy5cblxuUnVsZTogVEhFUkUgSVMgTk8gU0VOU0UgSU4gUlVOTklORyBBIEtNU0FOIFNFU1NJT04gSUYgQSBCVUcgQ0FOIEJFIENBVUdIVCBCWSBLQVNBTixcbkxPQ0tERVAsIE9SIE9USEVSIFNUQU5EQVJEIEJVRyBERVRFQ1RPUlMuXG5BIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaW5jdXJzIHNpZ25pZmljYW50IHJlc291cmNlIGNvc3RzLiBZb3UgbXVzdCBPTkxZXG5zZXQgTmVlZHNLTVNBTj10cnVlIGlmIHRoZSBjb2RlIGNoYW5nZXMgaW50cm9kdWNlIG9yIGV4cG9zZSBVTklOSVRJQUxJWkVEIE1FTU9SWSByaXNrc1xudGhhdCBhcmUgZGV0ZWN0ZWQgT05MWSBieSBLTVNBTi5cblxuTG9vayBob2xpc3RpY2FsbHkgYXQgdGhlIHBhdGNoIHNlcmllcyBhbmQgc3Vycm91bmRpbmcgY29kZS4gRXZlbiBpZiBubyBkaXJlY3RcbnVuaW5pdGlhbGl6ZWQgZmllbGQgYWNjZXNzZXMgb3IgbmV3IGJ1ZmZlciBhbGxvY2F0aW9ucyBhcmUgYWRkZWQgaW4gdGhlIGRpZmYgaXRzZWxmLFxuYSBwYXRjaCBtYXkgYWx0ZXIgY29udHJvbCBmbG93LCBib3VuZHMgY2hlY2tpbmcsIG9yIGRhdGEgbGVuZ3RoIGNhbGN1bGF0aW9ucyBpbiB3YXlzXG50aGF0IGNoYW5nZSBob3cgdGhlIHJlc3Qgb2YgdGhlIGNvZGUgb3BlcmF0ZXMgb24gZXhpc3RpbmcgYnVmZmVycyAoZS5nLiBhbGxvd2luZ1xudW5pbml0aWFsaXplZCBzdGFjay9oZWFwIG1lbW9yeSB0byBiZSByZWFkLCBjb3BpZWQgdG8gdXNlciBzcGFjZSwgb3IgdXNlZCBpbiBjb250cm9sXG5mbG93KS4gRG8gbm90IGhlc2l0YXRlIHRvIHVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUsXG5jYWxsZWQgZnVuY3Rpb25zLCBhbmQgY2FsbGVycy5cblxuU2V0IE5lZWRzS01TQU49dHJ1ZSBPTkxZIElGIHRoZSBwYXRjaCBpbnRyb2R1Y2VzIG9yIG1vZGlmaWVzOlxuMS4gS2VybmVsIHN0cnVjdHVyZXMgc2VudCB0byB1c2VyIHNwYWNlICh2aWEgY29weV90b191c2VyLCBwdXRfdXNlciwgbmV0bGluayBza2JcbiAgIGF0dHJpYnV0ZXMsIGlvY3RsIG91dHB1dCBhcmd1bWVudHMsIHNvY2tldCBvcHRpb25zLCBvciBCUEYgYnVmZmVycykgd2hlcmUgZmllbGRzXG4gICBvciBzdHJ1Y3R1cmUgcGFkZGluZyBtaWdodCBub3QgYmUgZnVsbHkgaW5pdGlhbGl6ZWQvemVyb2VkLlxuMi4gQ29uZGl0aW9uYWwgbG9naWMgb3IgYnJhbmNoaW5nIHRoYXQgZGVwZW5kcyBvbiBwb3RlbnRpYWxseSB1bmluaXRpYWxpemVkIHZhcmlhYmxlc1xuICAgb3Igc3RydWN0IGZpZWxkcy5cbjMuIEFsbG9jYXRpb24gb3IgaW5pdGlhbGl6YXRpb24gb2YgY29tcGxleCBkYXRhIHN0cnVjdHVyZXMgd2hlcmUgdW5pbml0aWFsaXplZCBmaWVsZHNcbiAgIGNvdWxkIGJlIHJlYWQgbGF0ZXIgaW4gcmVhY2hhYmxlIGNvZGUgcGF0aHMuXG40LiBCb3VuZHMgY2hlY2tzLCBsZW5ndGhzLCBvciBsb2dpYyBpbiBhIHdheSB0aGF0IGFsbG93cyBzdXJyb3VuZGluZyBjb2RlIHRvIGFjY2Vzc1xuICAgdW5pbml0aWFsaXplZCBieXRlcyBvZiBleGlzdGluZyBidWZmZXJzLlxuXG5TZXQgTmVlZHNLTVNBTj1mYWxzZSBJRjpcbi0gVGhlIGNvZGUgY2hhbmdlcyBwcmltYXJpbHkgcmlzayBvdXQtb2YtYm91bmRzIGFjY2VzcywgYXJyYXkgb3ZlcmZsb3dzLCBOVUxMIHBvaW50ZXJcbiAgZGVyZWZlcmVuY2VzLCBsb2NraW5nIGRlYWRsb2Nrcywgb3IgdXNlLWFmdGVyLWZyZWUgYnVncyAodGhlc2UgYXJlIGFscmVhZHkgY2F1Z2h0XG4gIGJ5IEtBU0FOLCBMT0NLREVQLCBvciBzdGFuZGFyZCBidWcgZGV0ZWN0b3JzKS5cbi0gQWxsIHN0YWNrL2hlYXAgc3RydWN0dXJlcyB0b3VjaGVkIG9yIGludHJvZHVjZWQgYnkgdGhlIHBhdGNoIGFyZSBmdWxseSB6ZXJvZWRcbiAgb3IgaW5pdGlhbGl6ZWQgKGUuZy4gdXNpbmcgPSB7MH0sIG1lbXNldCwga3phbGxvYykgYmVmb3JlIGJlaW5nIHJlYWQgb3IgY29waWVkLlxuLSBUaGUgcGF0Y2ggZG9lcyBub3QgaW50cm9kdWNlIGFueSByaXNrIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IHVzYWdlIG9yIGluZm8tbGVha3MuXG5cblVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGluc3BlY3QgdGhlIHN1cnJvdW5kaW5nIGNvZGUgaWYgbmVjZXNzYXJ5LCB0aGVuIHByb3ZpZGVcbmRldGFpbGVkIEtNU0FOUmVhc29uaW5nIGNvbnRyYXN0aW5nIEtBU0FOIHZzIEtNU0FOIGFwcGxpY2FiaWxpdHkgZm9yIHRoaXMgcGF0Y2guXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCBjYmU2MDk3MTliYTU4OWY0YWZhM2U1NzZkZWY3NWMyMjE2N2ViMGIxXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBBdWcgMjYgMTk6MDc6MDEgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMgYi9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbmluZGV4IDYwNDY1MWNiMjczOTkuLjhkMjY2OWQ4ZWYzNDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcbisrKyBiL2FyY2gveDg2L2t2bS9oeXBlcnYuY1xuQEAgLTgwMiw3ICs4MDIsOSBAQCBzdGF0aWMgaW50IHN5bmljX2RlbGl2ZXJfbXNnKHN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWMsIHUzMiBzaW50LFxuIFx0XHRpZiAobm9fcmV0cnkpXG4gXHRcdFx0cmV0dXJuIDA7XG4gXG4rXHRcdGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO1xuIFx0XHRodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7XG4rXG4gXHRcdHIgPSBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKHZjcHUsIG1zZ19wYWdlX2dmbixcbiBcdFx0XHRcdFx0ICAgICAgXHUwMDI2aHZfaGRyLm1lc3NhZ2VfZmxhZ3MsXG4gXHRcdFx0XHRcdCAgICAgIG1zZ19vZmYgK1xuIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6NTQuMjUyMjEyMzE0WiIsIlNlcSI6NDEsIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjUyOTM5NzYzMjEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSBhbmFseXNpcyBvZiB0aGUgY29kZSBjaGFuZ2UsIGZyb20gdGhlIHBlcnNwZWN0aXZlIG9mIGFuIGV4cGVyaWVuY2VkIGtlcm5lbCBkZXZlbG9wZXI6XG5cbioqSW52ZXN0aWdhdGluZyBhIEh5cGVyLVYgS1ZNIFBhdGNoKipcblxuT2theSwgc28gdGhlcmUncyBhIHBhdGNoIGluIGBhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNgLiBSaWdodCBhd2F5LCB0aGF0IHRlbGxzIG1lIHdlJ3JlIGRlYWxpbmcgd2l0aCBLVk0gYW5kIGl0cyBpbnRlcmFjdGlvbiB3aXRoIEh5cGVyLVYgZmVhdHVyZXMgb24geDg2IGhhcmR3YXJlLiBUaGUgY29kZSBzbmlwcGV0IGZsYWdzIHRoYXQgYXJlIGJlaW5nIGV4YW1pbmVkIGFyZSBmcm9tIHRoZSBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3NgIHN0cnVjdHVyZS4gIFRoZSBrZXkgY2hhbmdlIGFwcGVhcnMgdG8gYmUgaW5zZXJ0aW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5hc3U4ID0gMDtgICpiZWZvcmUqIHNldHRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMTtgLiBUaGF0IHN1Z2dlc3RzIHNvbWUgdGltaW5nIGRlcGVuZGVuY3kgb3IgYW4gaW5pdGlhbGl6YXRpb24gaXNzdWUuIEl0J3MgbGlrZWx5IHJlbGF0ZWQgdG8gaG93IHRoZSBob3N0IGludGVyYWN0cyB3aXRoIHRoZSBndWVzdCdzIEh5cGVyLVYgY29tcG9uZW50cyBhbmQgYSBtZXNzYWdlIHNpZ25hbGluZyBtZWNoYW5pc20uXG5cbk15IGZpcnN0IHRob3VnaHQgaXMgYWx3YXlzIHRvIGxvb2sgYXQgdGhlIHN1cnJvdW5kaW5nIGNvZGUuIFdoeSAqdGhpcyogc3BlY2lmaWMgb3JkZXI/IFdoYXQncyB0aGUgY29udGV4dD8gIElzIGBhc3U4YCBzdXBwb3NlZCB0byBiZSB6ZXJvZWQgb3V0IHVuZGVyIHNwZWNpZmljIGNpcmN1bXN0YW5jZXM/IElzIHRoaXMgYSByYWNlIGNvbmRpdGlvbiBmaXgsIGEgYnVnIGluIHRoZSBvcmlnaW5hbCBkZXNpZ24sIG9yIGFuIG9wdGltaXphdGlvbj8gIEknbGwgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBmdW5jdGlvbiB0aGlzIGNvZGUgaXMgaW4sIHRoZSBkYXRhIGl0J3MgbWFuaXB1bGF0aW5nLCBhbmQgaG93IGl0IGludGVyYWN0cyB3aXRoIG90aGVyIHBhcnRzIG9mIHRoZSBIeXBlci1WIEtWTSBpbXBsZW1lbnRhdGlvbi4gSSdsbCBuZWVkIHRvIGtub3cgd2hhdCB0aGUgYGFzdThgIGZpZWxkIHNpZ25pZmllcyB0byBkZXRlcm1pbmUgd2hldGhlciB0aGlzIGlzIGEgZml4LCBvciBhIGNoYW5nZSBpbiB0aGUgaW50ZW5kZWQgZnVuY3Rpb25hbGl0eS4gSSdsbCBnZXQgdG8gd29yay5cblxuXG4iLCJJbnB1dFRva2VucyI6MjAyMywiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY4LCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MDk6NTkuNTQ2MTkwNzE1WiIsIlNlcSI6NDIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTg4MTIyOCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJzeW5pY19kZWxpdmVyX21zZ1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC94ODYva3ZtL2h5cGVydi5jPTc2OD1zdGF0aWMgaW50IHN0aW1lcl9nZXRfY291bnQoc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyLCB1NjQgKnBjb3VudClcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzMtXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjc3NDpzdGF0aWMgaW50IHN5bmljX2RlbGl2ZXJfbXNnKHN0cnVjdCBrdm1fdmNwdV9odl9zeW5pYyAqc3luaWMsIHUzMiBzaW50LFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy03NzUtXFx0XFx0XFx0ICAgICBzdHJ1Y3QgaHZfbWVzc2FnZSAqc3JjX21zZywgYm9vbCBub19yZXRyeSlcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYz04MzM9c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbi0tXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTg0Ny1cXHRwYXlsb2FkLVxcdTAwM2VkZWxpdmVyeV90aW1lID0gZ2V0X3RpbWVfcmVmX2NvdW50ZXIodmNwdS1cXHUwMDNla3ZtKTtcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmM6ODQ4OlxcdHJldHVybiBzeW5pY19kZWxpdmVyX21zZyh0b19odl9zeW5pYyh2Y3B1KSxcXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODQ5LVxcdFxcdFxcdFxcdCBzdGltZXItXFx1MDAzZWNvbmZpZy5zaW50eCwgbXNnLFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOTowOTo1OS42NDIwNzc3ODNaIiwiU2VxIjo0MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5MTQxMTMxNywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIGEgZmlyc3QtcGVyc29uIHN1bW1hcnksIHRhaWxvcmVkIGFzIHJlcXVlc3RlZDpcblxuKipEaXZpbmcgaW50byBgc3luaWNfZGVsaXZlcl9tc2dgKipcblxuQWxyaWdodCwgdGltZSB0byBkaWcgaW50byB0aGlzIGBzeW5pY19kZWxpdmVyX21zZ2AgZnVuY3Rpb24uIExldCdzIHNlZS4uLiBpdCdzIGluIGBhcmNoL3g4Ni9rdm0vaHlwZXJ2LmNgLCB3aGljaCBpbW1lZGlhdGVseSB0ZWxscyBtZSB3ZSdyZSBkZWFsaW5nIHdpdGggSHlwZXItViBpbnRlZ3JhdGlvbiBvbiB4ODYsIHNwZWNpZmljYWxseSB3aXRoaW4gdGhlIEtWTSBjb250ZXh0LiBUaGlzIG1lYW5zIHdlJ3JlIGxvb2tpbmcgYXQgdGhlIG1lY2hhbmlzbSBmb3IgZGVsaXZlcmluZyBtZXNzYWdlcyBiZXR3ZWVuIHRoZSBndWVzdCBhbmQgdGhlIGhvc3QgdmlhIHRoZSBTeW5JQyBpbnRlcmZhY2UuIEdpdmVuIHRoZSBmaWxlbmFtZSwgSSdtIGV4cGVjdGluZyB0aGlzIGlzIGEgY3JpdGljYWwgcGllY2UgcmVsYXRlZCB0byBwZXJmb3JtYW5jZSBhbmQgcmVzcG9uc2l2ZW5lc3Mgd2l0aGluIHRoZSB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudC4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBtZXNzYWdlcyBhcmUgc3RydWN0dXJlZCwgaG93IHRoZXkncmUgcXVldWVkLCB3aGVyZSB0aGUgaW50ZXJydXB0IGhhbmRsZXJzIGFyZSBsb2NhdGVkLiBUaGlzIGlzIHRoZSBsb3ctbGV2ZWwsIGNyaXRpY2FsIHN0dWZmLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzcyLCJPdXRwdXRUb2tlbnMiOjQyLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6MDMuMjMzNDkyMDZaIiwiU2VxIjo0NCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MTkyNDkwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuY1wiLFxuICBcIkZpcnN0TGluZVwiOiA3NzQsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzc0OlxcdHN0YXRpYyBpbnQgc3luaWNfZGVsaXZlcl9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N5bmljICpzeW5pYywgdTMyIHNpbnQsXFxuIDc3NTpcXHRcXHRcXHRcXHQgICAgIHN0cnVjdCBodl9tZXNzYWdlICpzcmNfbXNnLCBib29sIG5vX3JldHJ5KVxcbiA3NzY6XFx0e1xcbiA3Nzc6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaHZfc3luaWNfdG9fdmNwdShzeW5pYyk7XFxuIDc3ODpcXHRcXHRpbnQgbXNnX29mZiA9IG9mZnNldG9mKHN0cnVjdCBodl9tZXNzYWdlX3BhZ2UsIHNpbnRfbWVzc2FnZVtzaW50XSk7XFxuIDc3OTpcXHRcXHRnZm5fdCBtc2dfcGFnZV9nZm47XFxuIDc4MDpcXHRcXHRzdHJ1Y3QgaHZfbWVzc2FnZV9oZWFkZXIgaHZfaGRyO1xcbiA3ODE6XFx0XFx0aW50IHI7XFxuIDc4MjpcXHRcXG4gNzgzOlxcdFxcdGlmICghKHN5bmljLVxcdTAwM2Vtc2dfcGFnZSBcXHUwMDI2IEhWX1NZTklDX1NJTVBfRU5BQkxFKSlcXG4gNzg0OlxcdFxcdFxcdHJldHVybiAtRU5PRU5UO1xcbiA3ODU6XFx0XFxuIDc4NjpcXHRcXHRtc2dfcGFnZV9nZm4gPSBzeW5pYy1cXHUwMDNlbXNnX3BhZ2UgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVDtcXG4gNzg3OlxcdFxcbiA3ODg6XFx0XFx0LypcXG4gNzg5OlxcdFxcdCAqIFN0cmljdGx5IGZvbGxvd2luZyB0aGUgc3BlYy1tYW5kYXRlZCBvcmRlcmluZyB3b3VsZCBhc3N1bWUgc2V0dGluZ1xcbiA3OTA6XFx0XFx0ICogLm1zZ19wZW5kaW5nIGJlZm9yZSBjaGVja2luZyAubWVzc2FnZV90eXBlLiAgSG93ZXZlciwgdGhpcyBmdW5jdGlvblxcbiA3OTE6XFx0XFx0ICogaXMgb25seSBjYWxsZWQgaW4gdmNwdSBjb250ZXh0IHNvIHRoZSBlbnRpcmUgdXBkYXRlIGlzIGF0b21pYyBmcm9tXFxuIDc5MjpcXHRcXHQgKiBndWVzdCBQT1YgYW5kIHRodXMgdGhlIGV4YWN0IG9yZGVyIGhlcmUgZG9lc24ndCBtYXR0ZXIuXFxuIDc5MzpcXHRcXHQgKi9cXG4gNzk0OlxcdFxcdHIgPSBrdm1fdmNwdV9yZWFkX2d1ZXN0X3BhZ2UodmNwdSwgbXNnX3BhZ2VfZ2ZuLCBcXHUwMDI2aHZfaGRyLm1lc3NhZ2VfdHlwZSxcXG4gNzk1OlxcdFxcdFxcdFxcdFxcdCAgICAgbXNnX29mZiArIG9mZnNldG9mKHN0cnVjdCBodl9tZXNzYWdlLFxcbiA3OTY6XFx0XFx0XFx0XFx0XFx0XFx0XFx0XFx0aGVhZGVyLm1lc3NhZ2VfdHlwZSksXFxuIDc5NzpcXHRcXHRcXHRcXHRcXHQgICAgIHNpemVvZihodl9oZHIubWVzc2FnZV90eXBlKSk7XFxuIDc5ODpcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuIDc5OTpcXHRcXHRcXHRyZXR1cm4gcjtcXG4gODAwOlxcdFxcbiA4MDE6XFx0XFx0aWYgKGh2X2hkci5tZXNzYWdlX3R5cGUgIT0gSFZNU0dfTk9ORSkge1xcbiA4MDI6XFx0XFx0XFx0aWYgKG5vX3JldHJ5KVxcbiA4MDM6XFx0XFx0XFx0XFx0cmV0dXJuIDA7XFxuIDgwNDpcXHRcXG4gODA1OlxcdFxcdFxcdGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO1xcbiA4MDY6XFx0XFx0XFx0aHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxO1xcbiA4MDc6XFx0XFxuIDgwODpcXHRcXHRcXHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sXFxuIDgwOTpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2aHZfaGRyLm1lc3NhZ2VfZmxhZ3MsXFxuIDgxMDpcXHRcXHRcXHRcXHRcXHRcXHQgICAgICBtc2dfb2ZmICtcXG4gODExOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIG9mZnNldG9mKHN0cnVjdCBodl9tZXNzYWdlLFxcbiA4MTI6XFx0XFx0XFx0XFx0XFx0XFx0XFx0ICAgICAgIGhlYWRlci5tZXNzYWdlX2ZsYWdzKSxcXG4gODEzOlxcdFxcdFxcdFxcdFxcdFxcdCAgICAgIHNpemVvZihodl9oZHIubWVzc2FnZV9mbGFncykpO1xcbiA4MTQ6XFx0XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbiA4MTU6XFx0XFx0XFx0XFx0cmV0dXJuIHI7XFxuIDgxNjpcXHRcXHRcXHRyZXR1cm4gLUVBR0FJTjtcXG4gODE3OlxcdFxcdH1cXG4gODE4OlxcdFxcbiA4MTk6XFx0XFx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UodmNwdSwgbXNnX3BhZ2VfZ2ZuLCBzcmNfbXNnLCBtc2dfb2ZmLFxcbiA4MjA6XFx0XFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHNyY19tc2ctXFx1MDAzZWhlYWRlcikgK1xcbiA4MjE6XFx0XFx0XFx0XFx0XFx0ICAgICAgc3JjX21zZy1cXHUwMDNlaGVhZGVyLnBheWxvYWRfc2l6ZSk7XFxuIDgyMjpcXHRcXHRpZiAociBcXHUwMDNjIDApXFxuIDgyMzpcXHRcXHRcXHRyZXR1cm4gcjtcXG4gODI0OlxcdFxcbiA4MjU6XFx0XFx0ciA9IHN5bmljX3NldF9pcnEoc3luaWMsIHNpbnQpO1xcbiA4MjY6XFx0XFx0aWYgKHIgXFx1MDAzYyAwKVxcbiA4Mjc6XFx0XFx0XFx0cmV0dXJuIHI7XFxuIDgyODpcXHRcXHRpZiAociA9PSAwKVxcbiA4Mjk6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuIDgzMDpcXHRcXHRyZXR1cm4gMDtcXG4gODMxOlxcdH1cXG4gODMyOlxcdFxcbiA4MzM6XFx0c3RhdGljIGludCBzdGltZXJfc2VuZF9tc2coc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbiA4MzQ6XFx0e1xcbiA4MzU6XFx0XFx0c3RydWN0IGt2bV92Y3B1ICp2Y3B1ID0gaHZfc3RpbWVyX3RvX3ZjcHUoc3RpbWVyKTtcXG4gODM2OlxcdFxcdHN0cnVjdCBodl9tZXNzYWdlICptc2cgPSBcXHUwMDI2c3RpbWVyLVxcdTAwM2Vtc2c7XFxuIDgzNzpcXHRcXHRzdHJ1Y3QgaHZfdGltZXJfbWVzc2FnZV9wYXlsb2FkICpwYXlsb2FkID1cXG4gODM4OlxcdFxcdFxcdFxcdChzdHJ1Y3QgaHZfdGltZXJfbWVzc2FnZV9wYXlsb2FkICopXFx1MDAyNm1zZy1cXHUwMDNldS5wYXlsb2FkO1xcbiA4Mzk6XFx0XFxuIDg0MDpcXHRcXHQvKlxcbiA4NDE6XFx0XFx0ICogVG8gYXZvaWQgcGlsaW5nIHVwIHBlcmlvZGljIHRpY2tzLCBkb24ndCByZXRyeSBtZXNzYWdlXFxuIDg0MjpcXHRcXHQgKiBkZWxpdmVyeSBmb3IgdGhlbSAod2l0aGluIFxcXCJsYXp5XFxcIiBsb3N0IHRpY2tzIHBvbGljeSkuXFxuIDg0MzpcXHRcXHQgKi9cXG4gODQ0OlxcdFxcdGJvb2wgbm9fcmV0cnkgPSBzdGltZXItXFx1MDAzZWNvbmZpZy5wZXJpb2RpYztcXG4gODQ1OlxcdFxcbiA4NDY6XFx0XFx0cGF5bG9hZC1cXHUwMDNlZXhwaXJhdGlvbl90aW1lID0gc3RpbWVyLVxcdTAwM2VleHBfdGltZTtcXG4gODQ3OlxcdFxcdHBheWxvYWQtXFx1MDAzZWRlbGl2ZXJ5X3RpbWUgPSBnZXRfdGltZV9yZWZfY291bnRlcih2Y3B1LVxcdTAwM2Vrdm0pO1xcbiA4NDg6XFx0XFx0cmV0dXJuIHN5bmljX2RlbGl2ZXJfbXNnKHRvX2h2X3N5bmljKHZjcHUpLFxcbiA4NDk6XFx0XFx0XFx0XFx0XFx0IHN0aW1lci1cXHUwMDNlY29uZmlnLnNpbnR4LCBtc2csXFxuIDg1MDpcXHRcXHRcXHRcXHRcXHQgbm9fcmV0cnkpO1xcbiA4NTE6XFx0fVxcbiA4NTI6XFx0XFxuIDg1MzpcXHRzdGF0aWMgaW50IHN0aW1lcl9ub3RpZnlfZGlyZWN0KHN0cnVjdCBrdm1fdmNwdV9odl9zdGltZXIgKnN0aW1lcilcXG4gODU0OlxcdHtcXG4gODU1OlxcdFxcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdSA9IGh2X3N0aW1lcl90b192Y3B1KHN0aW1lcik7XFxuIDg1NjpcXHRcXHRzdHJ1Y3Qga3ZtX2xhcGljX2lycSBpcnEgPSB7XFxuIDg1NzpcXHRcXHRcXHQuZGVsaXZlcnlfbW9kZSA9IEFQSUNfRE1fRklYRUQsXFxuIDg1ODpcXHRcXHRcXHQudmVjdG9yID0gc3RpbWVyLVxcdTAwM2Vjb25maWcuYXBpY192ZWN0b3JcXG4gODU5OlxcdFxcdH07XFxuIDg2MDpcXHRcXG4gODYxOlxcdFxcdGlmIChsYXBpY19pbl9rZXJuZWwodmNwdSkpXFxuIDg2MjpcXHRcXHRcXHRyZXR1cm4gIWt2bV9hcGljX3NldF9pcnEodmNwdSwgXFx1MDAyNmlycSwgTlVMTCk7XFxuIDg2MzpcXHRcXHRyZXR1cm4gMDtcXG4gODY0OlxcdH1cXG4gODY1OlxcdFxcbiA4NjY6XFx0c3RhdGljIHZvaWQgc3RpbWVyX2V4cGlyYXRpb24oc3RydWN0IGt2bV92Y3B1X2h2X3N0aW1lciAqc3RpbWVyKVxcbiA4Njc6XFx0e1xcbiA4Njg6XFx0XFx0aW50IHIsIGRpcmVjdCA9IHN0aW1lci1cXHUwMDNlY29uZmlnLmRpcmVjdF9tb2RlO1xcbiA4Njk6XFx0XFxuIDg3MDpcXHRcXHRzdGltZXItXFx1MDAzZW1zZ19wZW5kaW5nID0gdHJ1ZTtcXG4gODcxOlxcdFxcdGlmICghZGlyZWN0KVxcbiA4NzI6XFx0XFx0XFx0ciA9IHN0aW1lcl9zZW5kX21zZyhzdGltZXIpO1xcbiA4NzM6XFx0XFx0ZWxzZVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDowMy4yMzM2ODYyOVoiLCJTZXEiOjQ1LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDE5OTA4Mjc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBIeXBlci1WIE1lc3NhZ2UgSGVhZGVyIEluaXRpYWxpemF0aW9uKipcblxuT2theSwgc28gSSdtIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaXQncyBtYWtpbmcgYSBzZWVtaW5nbHkgc21hbGwgY2hhbmdlLCBhZGRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLmFzdTggPSAwO2AgYmVmb3JlIHNldHRpbmcgYGh2X2hkci5tZXNzYWdlX2ZsYWdzLm1zZ19wZW5kaW5nID0gMTtgLiBUaGF0IHNlZW1zIGJlbmlnbiBvbiB0aGUgc3VyZmFjZSwgYnV0IEkgbmVlZCB0byBkaWcgZGVlcGVyLiBJIHNlZSBgaHZfaGRyYCBpcyBhIGxvY2FsIHZhcmlhYmxlIG9uIHRoZSBzdGFjaywgZGVmaW5lZCBhcyBhIGBzdHJ1Y3QgaHZfbWVzc2FnZV9oZWFkZXJgLiBQcmV2aW91c2x5LCB0aGUgY29kZSBkaXJlY3RseSBzZXQgdGhlIGBtc2dfcGVuZGluZ2AgYml0IHdpdGhpbiBgbWVzc2FnZV9mbGFnc2Agd2l0aG91dCBhbnkgcHJpb3IgaW5pdGlhbGl6YXRpb24uIFNpbmNlIGBodl9oZHJgIGlzIHVuaW5pdGlhbGl6ZWQsIGFsbCB0aGUgb3RoZXIgYml0cyB3aXRoaW4gYG1lc3NhZ2VfZmxhZ3NgIHdlcmUgZXNzZW50aWFsbHkgZ2FyYmFnZSDigJMgcmFuZG9tIGJpdHMgZnJvbSB0aGUgc3RhY2suXG5cblRoZW4sIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCBjb21lcyBpbnRvIHBsYXkuIEl0IHdyaXRlcyBgc2l6ZW9mKGh2X2hkci5tZXNzYWdlX2ZsYWdzKWAgYnl0ZXMgdG8gdGhlIGd1ZXN0IHBhZ2UuIFRoaXMgaXMgd2hlcmUgaXQgY2xpY2tzOiAqdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgd2FzIGJlaW5nIHdyaXR0ZW4gdG8gZ3Vlc3QgbWVtb3J5ISogVGhhdCdzIGEgY2xhc3NpYyBpbmZvLWxlYWsuIFRoaXMgaXMgcHJlY2lzZWx5IHRoZSBraW5kIG9mIGlzc3VlIHRoYXQgdG9vbHMgbGlrZSBLTVNBTiBhcmUgZGVzaWduZWQgdG8gY2F0Y2gg4oCTIGRldGVjdGluZyB1c2VzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IGFuZCBmbGFnZ2luZyBpbmZvcm1hdGlvbiBsZWFrcyB0byB1c2Vyc3BhY2Ugb3IgdGhlIGd1ZXN0LlxuXG5XYWl0LCBkb2VzIEtNU0FOIHRyYWNrIHdyaXRlcyB0byAqZ3Vlc3QqIG1lbW9yeT8gVGhhdCdzIGEga2V5IHF1ZXN0aW9uIGhlcmUuIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCBpcyB3cml0aW5nIHRvIGd1ZXN0IG1lbW9yeSwgYnV0IGd1ZXN0IG1lbW9yeSBpcyB1bHRpbWF0ZWx5IG1hbmFnZWQgYnkgdXNlcnNwYWNlIChsaWtlIFFFTVUpIGFuZCBtYXBwZWQgaW50byB0aGUga2VybmVsLCBvciBpdCdzIGEgY29weS4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaWYgS01TQU4ncyBpbnN0cnVtZW50YXRpb24gaXMgdHJpZ2dlcmVkIGJ5IHdyaXRlcyB0byBtZW1vcnkgbWFwcGVkIGZyb20gdXNlcnNwYWNlIGludG8ga2VybmVsIHNwYWNlLCBvciBpcyBpdCBvbmx5IGxvb2tpbmcgZm9yIGRhdGEgbGVha3MgZnJvbSB0aGUga2VybmVsIGl0c2VsZj8gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCBpcyBjb3ZlcmVkIGJ5IEtNU0FOLlxuXG5BbHJpZ2h0LCBJIG5lZWQgdG8gY2hlY2sgYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VgLiBMZXQncyBzZWUgd2hhdCdzIGdvaW5nIG9uIHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo0NjQ2LCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6Mjg1LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6MTAuNjUzNTk2ODk5WiIsIlNlcSI6NDYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMDk5NzQ2MDA5LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2t2bS9oeXBlcnYuYz03NzQ9c3RhdGljIGludCBzeW5pY19kZWxpdmVyX21zZyhzdHJ1Y3Qga3ZtX3ZjcHVfaHZfc3luaWMgKnN5bmljLCB1MzIgc2ludCxcXG4tLVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04MDctXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jOjgwODpcXHRcXHRyID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBtc2dfcGFnZV9nZm4sXFxuYXJjaC94ODYva3ZtL2h5cGVydi5jLTgwOS1cXHRcXHRcXHRcXHRcXHQgICAgICBcXHUwMDI2aHZfaGRyLm1lc3NhZ2VfZmxhZ3MsXFxuLS1cXG5hcmNoL3g4Ni9rdm0vaHlwZXJ2LmMtODE4LVxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYzo4MTk6XFx0ciA9IGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UodmNwdSwgbXNnX3BhZ2VfZ2ZuLCBzcmNfbXNnLCBtc2dfb2ZmLFxcbmFyY2gveDg2L2t2bS9oeXBlcnYuYy04MjAtXFx0XFx0XFx0XFx0ICAgICAgc2l6ZW9mKHNyY19tc2ctXFx1MDAzZWhlYWRlcikgK1xcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYz01NTY4PXN0YXRpYyBpbmxpbmUgdm9pZCBuZXN0ZWRfcmVsZWFzZV92bWNzMTIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC94ODYva3ZtL3ZteC9uZXN0ZWQuYy01NTg1LVxcdC8qIEZsdXNoIFZNQ1MxMiB0byBndWVzdCBtZW1vcnkgKi9cXG5hcmNoL3g4Ni9rdm0vdm14L25lc3RlZC5jOjU1ODY6XFx0a3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LFxcbmFyY2gveDg2L2t2bS92bXgvbmVzdGVkLmMtNTU4Ny1cXHRcXHRcXHRcXHQgIHZteC1cXHUwMDNlbmVzdGVkLmN1cnJlbnRfdm1wdHIgXFx1MDAzZVxcdTAwM2UgUEFHRV9TSElGVCxcXG4tLVxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaD0xNDQ5PWludCBrdm1fdmNwdV9yZWFkX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgZ3BhX3QgZ3BhLCB2b2lkICpkYXRhLFxcbmluY2x1ZGUvbGludXgva3ZtX2hvc3QuaC0xNDUwLVxcdFxcdFxcdHVuc2lnbmVkIGxvbmcgbGVuKTtcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0Lmg6MTQ1MTppbnQga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbiwgY29uc3Qgdm9pZCAqZGF0YSxcXG5pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgtMTQ1Mi1cXHRcXHRcXHQgICAgICBpbnQgb2Zmc2V0LCBpbnQgbGVuKTtcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzMyMD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3dyaXRlX2d1ZXN0X3BhZ2UpO1xcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzMyMS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMzMjI6aW50IGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBnZm5fdCBnZm4sXFxudmlydC9rdm0va3ZtX21haW4uYy0zMzIzLVxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBvZmZzZXQsIGludCBsZW4pXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzMjgtfVxcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzMyOTpFWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSk7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMzMwLVxcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYz0zMzUyPWludCBrdm1fdmNwdV93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdwYV90IGdwYSwgY29uc3Qgdm9pZCAqZGF0YSxcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzM2MC1cXHR3aGlsZSAoKHNlZyA9IG5leHRfc2VnbWVudChsZW4sIG9mZnNldCkpICE9IDApIHtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMzNjE6XFx0XFx0cmV0ID0ga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZSh2Y3B1LCBnZm4sIGRhdGEsIG9mZnNldCwgc2VnKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzNjItXFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjEwOjEyLjc1MzM0NzUwN1oiLCJTZXEiOjQ3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo0ODIzNzkwMjI4LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGZyb20gYW4gZXhwZXJ0J3MgcGVyc3BlY3RpdmU6XG5cbioqRGl2aW5nIGludG8gS1ZNIFBhZ2UgV3JpdGUgT3BlcmF0aW9ucyoqXG5cbkFscmlnaHQsIHNvIHRoZSB0YXNrIGF0IGhhbmQgaXMgdG8gdW5kZXJzdGFuZCBob3cgS1ZNIGhhbmRsZXMgd3JpdGluZyB0byBndWVzdCBwYWdlcy4gTXkgZm9jdXMgbmF0dXJhbGx5IGdvZXMgdG8gYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2VgLCBzcGVjaWZpY2FsbHkgd2l0aGluIGB2aXJ0L2t2bS9rdm1fbWFpbi5jYC4gSXQncyBhIGtleSBmdW5jdGlvbiwgYXMgdGhlIG5hbWUgaXRzZWxmIGltcGxpZXMsIGl0IGlzIHJlc3BvbnNpYmxlIGZvciB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiB0aGUgaG9zdCBhbmQgdGhlIGd1ZXN0IHdoZW4gbW9kaWZ5aW5nIG1lbW9yeS4gSSdtIGltbWVkaWF0ZWx5IHRoaW5raW5nIGFib3V0IHRoZSBjb21wbGV4aXR5IGhlcmUg4oCTIHRoZSBpbnRyaWNhY2llcyBvZiB0aGUgdHJhbnNsYXRpb24gbG9va2FzaWRlIGJ1ZmZlciAoVExCKSBpbnZhbGlkYXRpb25zLCBwb3RlbnRpYWwgVk0gZXhpdHMsIGFuZCBhbGwgdGhlIG1lbW9yeSBtYW5hZ2VtZW50IHN0cnVjdHVyZXMgaW52b2x2ZWQuIFRoaXMgaXMgd2hlcmUgdGhlIGNvcmUgb2YgZ3Vlc3QgcGFnZSBtb2RpZmljYXRpb24gdGFrZXMgcGxhY2UsIGFuZCBJIGFudGljaXBhdGUgc2VlaW5nIGEgbG90IG9mIHN5bmNocm9uaXphdGlvbiBwcmltaXRpdmVzIGFuZCBhY2Nlc3MgY2hlY2tzLiBJJ20ga2VlbiB0byBzZWUgaWYgaXQgbWFrZXMgZGlyZWN0IGNhbGxzIHRvIGhhcmR3YXJlIG9yIGlmIHRoZXJlIGFyZSBsYXllcnMgb2YgYWJzdHJhY3Rpb24gcHJlc2VudC4gVGltZSB0byBkaWcgaW4gYW5kIHNlZSB0aGUgbG93IGxldmVsIGRldGFpbHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjYzMzEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozMSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDoxNy41NzcxNDA5MjVaIiwiU2VxIjo0OCwiTmVzdGluZyI6MywiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDY4NjAwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmNcIixcbiAgXCJGaXJzdExpbmVcIjogMzMyMixcbiAgXCJMaW5lQ291bnRcIjogMjBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiMzMyMjpcXHRpbnQga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbixcXG4zMzIzOlxcdFxcdFxcdFxcdCAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBvZmZzZXQsIGludCBsZW4pXFxuMzMyNDpcXHR7XFxuMzMyNTpcXHRcXHRzdHJ1Y3Qga3ZtX21lbW9yeV9zbG90ICpzbG90ID0ga3ZtX3ZjcHVfZ2ZuX3RvX21lbXNsb3QodmNwdSwgZ2ZuKTtcXG4zMzI2OlxcdFxcbjMzMjc6XFx0XFx0cmV0dXJuIF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIGRhdGEsIG9mZnNldCwgbGVuKTtcXG4zMzI4OlxcdH1cXG4zMzI5OlxcdEVYUE9SVF9TWU1CT0xfRk9SX0tWTV9JTlRFUk5BTChrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKTtcXG4zMzMwOlxcdFxcbjMzMzE6XFx0aW50IGt2bV93cml0ZV9ndWVzdChzdHJ1Y3Qga3ZtICprdm0sIGdwYV90IGdwYSwgY29uc3Qgdm9pZCAqZGF0YSxcXG4zMzMyOlxcdFxcdFxcdCAgICB1bnNpZ25lZCBsb25nIGxlbilcXG4zMzMzOlxcdHtcXG4zMzM0OlxcdFxcdGdmbl90IGdmbiA9IGdwYSBcXHUwMDNlXFx1MDAzZSBQQUdFX1NISUZUO1xcbjMzMzU6XFx0XFx0aW50IHNlZztcXG4zMzM2OlxcdFxcdGludCBvZmZzZXQgPSBvZmZzZXRfaW5fcGFnZShncGEpO1xcbjMzMzc6XFx0XFx0aW50IHJldDtcXG4zMzM4OlxcdFxcbjMzMzk6XFx0XFx0d2hpbGUgKChzZWcgPSBuZXh0X3NlZ21lbnQobGVuLCBvZmZzZXQpKSAhPSAwKSB7XFxuMzM0MDpcXHRcXHRcXHRyZXQgPSBrdm1fd3JpdGVfZ3Vlc3RfcGFnZShrdm0sIGdmbiwgZGF0YSwgb2Zmc2V0LCBzZWcpO1xcbjMzNDE6XFx0XFx0XFx0aWYgKHJldCBcXHUwMDNjIDApXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjEwOjE3LjU3NzYxODA4NVoiLCJTZXEiOjQ5LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1ODY5MTkxNDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBsZXQncyBkaXZlIGludG8gdGhpcy4gSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIGFzIGlmIHRoZXkncmUgbXkgb3duOlxuXG4qKkFuYWx5emluZyBgX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZWAqKlxuXG5BbHJpZ2h0LCBzbyB0aGUgZm9jdXMgaXMgb24gYF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2VgLCBlaD8gVGhhdCBmdW5jdGlvbiBjYWxsIGltbWVkaWF0ZWx5IHBpcXVlcyBteSBpbnRlcmVzdC4gSXQncyB0aGUgY29yZSBvZiBob3cgd2UncmUgcHVzaGluZyBkYXRhIGludG8gYSBndWVzdCBWTSdzIG1lbW9yeSBzcGFjZSwgaXNuJ3QgaXQ/IEkgbmVlZCB0byB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgb2YgdGhpcy4gSSdtIGFscmVhZHkgbWVudGFsbHkgcnVubmluZyB0aHJvdWdoIHRoZSB2YXJpb3VzIGNvbnRleHRzIHdoZXJlIHRoaXMgd291bGQgYmUgY2FsbGVkOiB2aXJ0aW8gZGV2aWNlcywgZGlyZWN0IG1lbW9yeSBhY2Nlc3Mgb3BlcmF0aW9ucywgc2hhcmVkIG1lbW9yeSBhcnJhbmdlbWVudHMsIGxpa2VseSBhbnl0aGluZyB0aGF0IHJlcXVpcmVzIG1vZGlmeWluZyB0aGUgZ3Vlc3QncyBwaHlzaWNhbCBtZW1vcnkgZGlyZWN0bHkgZnJvbSB0aGUgaG9zdC5cblxuRmlyc3QsIEkgbmVlZCB0byBjb25zaWRlciB0aGUgc2VjdXJpdHkgaW1wbGljYXRpb25zLiBXcml0aW5nIHRvIGd1ZXN0IG1lbW9yeSBpcyBhIHByaXZpbGVnZWQgb3BlcmF0aW9uLiBJZiB0aGlzIHJvdXRpbmUgaXMgZmxhd2VkLCBpdOKAmXMgYSBwb3RlbnRpYWwgYXR0YWNrIHZlY3RvciBmb3IgcHJpdmlsZWdlIGVzY2FsYXRpb24uIEhvdyBhcmUgd2UgdmFsaWRhdGluZyB0aGUgc291cmNlIG9mIHRoZSBkYXRhPyBBcmUgdGhlcmUgY2hlY2tzIG9uIHRoZSB0YXJnZXQgYWRkcmVzcyByYW5nZSB0byBwcmV2ZW50IG91dC1vZi1ib3VuZHMgd3JpdGVzPyBJcyB0aGVyZSBwcm9wZXIgaXNvbGF0aW9uPyBUaGlzIGlzIHdoZXJlIHZ1bG5lcmFiaWxpdGllcyBjYW4gbWFuaWZlc3QsIHNvIHNlY3VyaXR5IGlzIHBhcmFtb3VudC5cblxuTm93LCBwZXJmb3JtYW5jZS4gVGhhdOKAmXMgYWx3YXlzIHRoZSBraWNrZXIgd2l0aCBLVk0uIFdyaXRpbmcgYSBndWVzdCBwYWdlIGludm9sdmVzIHRyYW5zaXRpb25pbmcgYmV0d2VlbiBob3N0IGFuZCBndWVzdCBjb250ZXh0cywgcG90ZW50aWFsbHkgVExCIGZsdXNoZXMsIGFuZCB2YXJpb3VzIG1lbW9yeSBtYW5hZ2VtZW50IG92ZXJoZWFkLiBXZSBuZWVkIHRvIGRpc3NlY3QgdGhlIGltcGxlbWVudGF0aW9uIHRvIGlkZW50aWZ5IGFueSBib3R0bGVuZWNrcy4gSXMgaXQgcGFnZS1hbGlnbmVkPyBBcmUgdGhlcmUgY29weSBvcHRpbWl6YXRpb25zIGludm9sdmVkLCBvciBhcmUgd2Ugc3R1Y2sgd2l0aCBieXRlLWJ5LWJ5dGUgY29waWVzIHRoYXQgYXJlIHNsb3cgYXMgbW9sYXNzZXM/IFdoYXQgYWJvdXQgdGhlIG1lbW9yeSBtb2RlbD8gQXJlIHdlIGRlYWxpbmcgd2l0aCBjYWNoZSBjb2hlcmVuY3kgaXNzdWVzLCBvciBhcmUgd2UgdGFraW5nIHRoZSBhcHByb3ByaWF0ZSBwcmVjYXV0aW9ucz8gV2hhdCBhYm91dCB0aGUgYXRvbWljaXR5IG9mIHRoZSBvcGVyYXRpb24/IElzIGl0IGEgc2luZ2xlIG9wZXJhdGlvbiwgb3Igc2V2ZXJhbCBzbWFsbGVyIG9wZXJhdGlvbnMgdGhhdCwgaWYgaW50ZXJydXB0ZWQsIGNvdWxkIGxlYXZlIHRoZSBndWVzdCBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGU/XG5cbk5leHQsIEkgbmVlZCB0byB0aGluayBhYm91dCBlcnJvciBoYW5kbGluZy4gV2hhdCBoYXBwZW5zIGlmIHRoZSB3cml0ZSBmYWlscz8gRG9lcyB0aGUgZnVuY3Rpb24gcmV0dXJuIGEgY2xlYXIgZXJyb3IgY29kZT8gSG93IGFyZSB0aGVzZSBlcnJvcnMgcHJvcGFnYXRlZCB1cCB0aGUgY2FsbCBzdGFjaywgYW5kIHdoYXQgaXMgdGhlIGFwcHJvcHJpYXRlIHJlc3BvbnNlPyBBcmUgdGhlcmUgbWVjaGFuaXNtcyB0byBoYW5kbGUgY2FzZXMgd2hlcmUgdGhlIGd1ZXN0IHBhZ2UgbWlnaHQgYmUgbG9ja2VkIG9yIG90aGVyd2lzZSB1bmF2YWlsYWJsZT9cblxuSSdsbCBuZWVkIHRvIGV4YW1pbmUgdGhlIGNhbGxpbmcgY29udmVudGlvbnMgYW5kIGFueSBsb2NraW5nIHByaW1pdGl2ZXMgaW52b2x2ZWQuIElmIHdlJ3JlIG5vdCBjYXJlZnVsIHdpdGggc3luY2hyb25pemF0aW9uLCB3ZSBjb3VsZCBpbnRyb2R1Y2UgcmFjZSBjb25kaXRpb25zLCBkZWFkbG9ja3MsIG9yIG90aGVyIG5hc3R5IGNvbmN1cnJlbmN5IGJ1Z3MuIFVuZGVyc3RhbmRpbmcgdGhlIGxvY2sgb3JkZXIgYW5kIGFueSBhc3NvY2lhdGVkIGNvbnRlbnRpb24gaXMgY3J1Y2lhbC5cblxuVWx0aW1hdGVseSwgSSBuZWVkIHRvIGFuc3dlciB0aGVzZSBxdWVzdGlvbnMgdG8gZm9ybSBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZS4gTXkgZXhwZXJ0IHBlcnNwZWN0aXZlIGlzIHRvIHNlZWsgb3V0IHBvdGVudGlhbCBzZWN1cml0eSBwaXRmYWxscywgcGVyZm9ybWFuY2UgYm90dGxlbmVja3MsIGFuZCB0aGUgaGFuZGxpbmcgb2YgY29uY3VycmVuY3kgYW5kIGVycm9yIHNjZW5hcmlvcy4gSXQncyBhIGNyaXRpY2FsIHBpZWNlIG9mIHRoZSBwdXp6bGUsIGFuZCBhIGRlZXAgdW5kZXJzdGFuZGluZyBvZiBpdHMgd29ya2luZ3MgaXMgZXNzZW50aWFsIGZvciB0aGUgc3RhYmlsaXR5IGFuZCBpbnRlZ3JpdHkgb2YgdGhlIGVudGlyZSB2aXJ0dWFsaXplZCBzeXN0ZW0uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjcwMDEsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNSwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjEwOjIzLjQ0NjgxMTUwN1oiLCJTZXEiOjUwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwNTc1MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcInZpcnQva3ZtL2t2bV9tYWluLmM9MzI5MD1FWFBPUlRfU1lNQk9MX0ZPUl9LVk1fSU5URVJOQUwoa3ZtX3ZjcHVfcmVhZF9ndWVzdF9hdG9taWMpO1xcbi0tXFxudmlydC9rdm0va3ZtX21haW4uYy0zMjkyLS8qIENvcHkgQGxlbiBieXRlcyBmcm9tIEBkYXRhIGludG8gZ3Vlc3QgbWVtb3J5IGF0ICcoQGdmbiAqIFBBR0VfU0laRSkgKyBAb2Zmc2V0JyAqL1xcbnZpcnQva3ZtL2t2bV9tYWluLmM6MzI5MzpzdGF0aWMgaW50IF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLFxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzI5NC1cXHRcXHRcXHRcXHQgIHN0cnVjdCBrdm1fbWVtb3J5X3Nsb3QgKm1lbXNsb3QsIGdmbl90IGdmbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzMxMz1pbnQga3ZtX3dyaXRlX2d1ZXN0X3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCBnZm5fdCBnZm4sXFxuLS1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzMTctXFxudmlydC9rdm0va3ZtX21haW4uYzozMzE4OlxcdHJldHVybiBfX2t2bV93cml0ZV9ndWVzdF9wYWdlKGt2bSwgc2xvdCwgZ2ZuLCBkYXRhLCBvZmZzZXQsIGxlbik7XFxudmlydC9rdm0va3ZtX21haW4uYy0zMzE5LX1cXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmM9MzMyMj1pbnQga3ZtX3ZjcHVfd3JpdGVfZ3Vlc3RfcGFnZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIGdmbl90IGdmbixcXG4tLVxcbnZpcnQva3ZtL2t2bV9tYWluLmMtMzMyNi1cXG52aXJ0L2t2bS9rdm1fbWFpbi5jOjMzMjc6XFx0cmV0dXJuIF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2UodmNwdS1cXHUwMDNla3ZtLCBzbG90LCBnZm4sIGRhdGEsIG9mZnNldCwgbGVuKTtcXG52aXJ0L2t2bS9rdm1fbWFpbi5jLTMzMjgtfVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDoyMy41MjM4NzQ5MjZaIiwiU2VxIjo1MSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NTM2NTY3MDkyMCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgYF9fa3ZtX3dyaXRlX2d1ZXN0X3BhZ2VgIGZ1bmN0aW9uLiBJJ20gYWxyZWFkeSBhbnRpY2lwYXRpbmcgc29tZSBvZiB0aGUgY29tcGxleGl0eSBoZXJlLCBnaXZlbiBpdCdzIGRlYWxpbmcgd2l0aCB3cml0aW5nIHRvIGd1ZXN0IG1lbW9yeSBmcm9tIHRoZSBob3N0LCB3aGljaCBpcyBhIGNvcmUgcGFydCBvZiBLVk0ncyBmdW5jdGlvbmFsaXR5LiBJIGtub3cgdGhlIGtleSBjaGFsbGVuZ2VzIHJldm9sdmUgYXJvdW5kIG1lbW9yeSBtYXBwaW5nLCBwcm90ZWN0aW9uLCBhbmQgZW5zdXJpbmcgY29uc2lzdGVuY3kuIFdlJ2xsIGJlIGxvb2tpbmcgZm9yIGhvdyB0aGUgZnVuY3Rpb24gaGFuZGxlcyB0aGVzZSBhc3BlY3RzIGFuZCB3aGljaCBvcHRpbWl6YXRpb25zIGFyZSB1c2VkLlxuXG4qKkFuYWx5emluZyBgX19rdm1fd3JpdGVfZ3Vlc3RfcGFnZWAqKlxuXG5TbywgdGhpcyBmdW5jdGlvbiBpcyByZXNwb25zaWJsZSBmb3IgdGhlIHRyYW5zZmVyIGl0c2VsZi4gSW1tZWRpYXRlbHksIEkgd2FudCB0byBzZWU6XG5cbiogICAqKkFkZHJlc3MgVHJhbnNsYXRpb24gYW5kIFZhbGlkYXRpb246KiogSG93IGRvZXMgaXQgdHJhbnNsYXRlIHRoZSBndWVzdCBwaHlzaWNhbCBhZGRyZXNzIChHUEEpIHRvIGEgaG9zdCB2aXJ0dWFsIGFkZHJlc3MgKEhWQSk/IElzIHRoZXJlIGEgVExCIGxvb2t1cCwgb3IgZGlyZWN0IG1hbmlwdWxhdGlvbj8gV2hhdCBhcmUgdGhlIGNoZWNrcyBpbiBwbGFjZSB0byBlbnN1cmUgdGhlIEdQQSBpcyB2YWxpZCwgbWFwcGVkLCBhbmQgdGhhdCB0aGUgZ3Vlc3QgaGFzIHdyaXRlIHBlcm1pc3Npb25zPyBEb2VzIGl0IGhhbmRsZSBkaWZmZXJlbnQgbWVtb3J5IG1vZGVscyBzdWNoIGFzIE1NSU8gb3IgUElPPyBJJ20gZXhwZWN0aW5nIHNvbWUgc29waGlzdGljYXRlZCBjaGVja3MgdG8gYXZvaWQgc2VjdXJpdHkgdnVsbmVyYWJpbGl0aWVzLlxuKiAgICoqRGF0YSBUcmFuc2ZlciBNZWNoYW5pc206KiogSXMgaXQgYSBkaXJlY3QgbWVtb3J5IGNvcHkgKGBtZW1jcHlgKT8gRG9lcyBpdCB1c2UgRE1BIG9yIHNvbWUgb3RoZXIgb3B0aW1pemVkIGFwcHJvYWNoIGZvciBsYXJnZXIgdHJhbnNmZXJzPyBBcmUgdGhlcmUgY29uc2lkZXJhdGlvbnMgZm9yIENQVSBjYWNoZSBjb2hlcmVuY3k/IEhvdyBhcmUgcG90ZW50aWFsIHBhZ2UgZmF1bHRzIGhhbmRsZWQ/XG4qICAgKipQcm90ZWN0aW9uIE1lY2hhbmlzbXM6KiogSSdtIGN1cmlvdXMgYWJvdXQgdGhlIHNwZWNpZmljIG1lY2hhbmlzbXMgdXNlZCB0byBlbnN1cmUgdGhlIGd1ZXN0IGRvZXNuJ3QgYWNjaWRlbnRhbGx5IChvciBtYWxpY2lvdXNseSkgY29ycnVwdCBob3N0IG1lbW9yeSwgb3IgYW5vdGhlciBndWVzdCdzIG1lbW9yeS4gQXJlIHRoZXJlIHNoYWRvdyBwYWdlIHRhYmxlcywgbWVtb3J5IGJhcnJpZXJzLCBvciBvdGhlciB0ZWNobmlxdWVzIGVtcGxveWVkPyBIb3cgaXMgdGhlIHdyaXRlIHByb3RlY3Rpb24gaW1wbGVtZW50ZWQ/XG4qICAgKipFcnJvciBIYW5kbGluZzoqKiBXaGF0IGhhcHBlbnMgaWYgdGhlcmUncyBhbiBlcnJvciBkdXJpbmcgdGhlIHdyaXRlLCBzdWNoIGFzIGEgaGFyZHdhcmUgZmF1bHQsIGEgcGFnZSBmYXVsdCwgb3IgYW4gYWNjZXNzIHZpb2xhdGlvbj8gSXMgaXQgaGFuZGxlZCB3aXRoaW4gdGhlIGZ1bmN0aW9uLCBvciBhcmUgZXJyb3JzIHByb3BhZ2F0ZWQ/IFdoYXQncyB0aGUgZXJyb3IgcmVjb3Zlcnkgc3RyYXRlZ3k/XG5cbkknbSBleHBlY3Rpbmcgc29tZSBjYXJlZnVsIGNvbnNpZGVyYXRpb24gZm9yIHBlcmZvcm1hbmNlLCBzZWN1cml0eSwgYW5kIGNvcnJlY3RuZXNzLiBJJ20ga2VlbiB0byBleGFtaW5lIGFueSBzcGVjaWZpYyBvcHRpbWl6YXRpb25zIGl0IGFwcGxpZXMuIFRoaXMgd291bGQgYmUgYSBncmVhdCB3YXkgdG8gYmV0dGVyIHVuZGVyc3RhbmQgdGhlIHVuZGVycGlubmluZ3Mgb2YgS1ZNLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MDQ0LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6MjguODg5NTQ4NTc2WiIsIlNlcSI6NTIsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYzOTU2MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJ2aXJ0L2t2bS9rdm1fbWFpbi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDMyOTMsXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjMyOTM6XFx0c3RhdGljIGludCBfX2t2bV93cml0ZV9ndWVzdF9wYWdlKHN0cnVjdCBrdm0gKmt2bSxcXG4zMjk0OlxcdFxcdFxcdFxcdFxcdCAgc3RydWN0IGt2bV9tZW1vcnlfc2xvdCAqbWVtc2xvdCwgZ2ZuX3QgZ2ZuLFxcbjMyOTU6XFx0XFx0XFx0XFx0ICAgICAgICAgIGNvbnN0IHZvaWQgKmRhdGEsIGludCBvZmZzZXQsIGludCBsZW4pXFxuMzI5NjpcXHR7XFxuMzI5NzpcXHRcXHRpbnQgcjtcXG4zMjk4OlxcdFxcdHVuc2lnbmVkIGxvbmcgYWRkcjtcXG4zMjk5OlxcdFxcbjMzMDA6XFx0XFx0aWYgKFdBUk5fT05fT05DRShvZmZzZXQgKyBsZW4gXFx1MDAzZSBQQUdFX1NJWkUpKVxcbjMzMDE6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzMwMjpcXHRcXG4zMzAzOlxcdFxcdGFkZHIgPSBnZm5fdG9faHZhX21lbXNsb3QobWVtc2xvdCwgZ2ZuKTtcXG4zMzA0OlxcdFxcdGlmIChrdm1faXNfZXJyb3JfaHZhKGFkZHIpKVxcbjMzMDU6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzMwNjpcXHRcXHRyID0gX19jb3B5X3RvX3VzZXIoKHZvaWQgX191c2VyICopYWRkciArIG9mZnNldCwgZGF0YSwgbGVuKTtcXG4zMzA3OlxcdFxcdGlmIChyKVxcbjMzMDg6XFx0XFx0XFx0cmV0dXJuIC1FRkFVTFQ7XFxuMzMwOTpcXHRcXHRtYXJrX3BhZ2VfZGlydHlfaW5fc2xvdChrdm0sIG1lbXNsb3QsIGdmbik7XFxuMzMxMDpcXHRcXHRyZXR1cm4gMDtcXG4zMzExOlxcdH1cXG4zMzEyOlxcdFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDoyOC44OTAxOTAwMzZaIiwiU2VxIjo1MywiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDQwODYzODg1MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgYSBQb3RlbnRpYWwgSW5mb3JtYXRpb24gTGVhayoqXG5cbk9rYXksIHNvIGBfX2NvcHlfdG9fdXNlcmAuLi4gdGhhdCdzIHRoZSBmdW5jdGlvbiB3ZSB1c2UgdG8gd3JpdGUgc3R1ZmYgaW50byB0aGUgZ3Vlc3QncyBtZW1vcnkgc3BhY2UsIHJpZ2h0PyBNYWtlcyBwZXJmZWN0IHNlbnNlLiBBbmQgaWYgd2UncmUgd3JpdGluZyB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSB3aXRoIHRoYXQgZnVuY3Rpb24sIHdlJ3ZlIGdvdCBhIGRlZmluaXRlIGluZm8tbGVhayBzY2VuYXJpbyBvbiBvdXIgaGFuZHMuIFRoZSBndWVzdCdzIG1lbW9yeSBpcyBtYXBwZWQgZGlyZWN0bHkgaW50byBRRU1VJ3MgdXNlcnNwYWNlLCBzbyB3aGF0ZXZlciB3ZSBwdXQgdGhlcmUsIHRoZSBndWVzdCBjYW4gcmVhZC4gS01TQU4gaXMsIG9mIGNvdXJzZSwgdGhlIHBlcmZlY3QgdG9vbCB0byBjYXRjaCB0aGVzZSB0eXBlcyBvZiB2dWxuZXJhYmlsaXRpZXMuIFdlJ3JlIGxvb2tpbmcgYXQgZXhhY3RseSB0aGUgcHJvYmxlbSBpdCB3YXMgZGVzaWduZWQgZm9yLlxuXG5Ob3csIGxldCdzIGp1c3QgZG91YmxlLWNoZWNrIHRoZSBzdHJ1Y3R1cmVzIGludm9sdmVkLCBzcGVjaWZpY2FsbHkgYGh2X21lc3NhZ2VfaGVhZGVyYCBhbmQgYGh2X21lc3NhZ2VfZmxhZ3NgLiBHb3R0YSBtYWtlIHN1cmUgdGhlIGRhdGEgaXMgYmVpbmcgY29uc3RydWN0ZWQgYW5kIGhhbmRsZWQgYXMgZXhwZWN0ZWQgd2l0aGluIHRob3NlIHN0cnVjdHVyZXMgdG8gdmVyaWZ5IHRoZSBsZWFrIGlzIG9jY3VyaW5nLlxuXG5cbiIsIklucHV0VG9rZW5zIjo4ODQ5LCJPdXRwdXRUb2tlbnMiOjI2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6OTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDozMy4yOTg4MzIyN1oiLCJTZXEiOjU0LCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjg0MjU2NDIzOCwiRXJyb3IiOiJubyBtYXRjaGVzIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwic3RydWN0IGh2X21lc3NhZ2VfZmxhZ3NcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcImVycm9yXCI6IFwibm8gbWF0Y2hlc1wiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0yNlQxOToxMDozNi4xNDE0MDI4NjdaIiwiU2VxIjo1NSwiTmVzdGluZyI6MywiVHlwZSI6ImxsbSIsIk5hbWUiOiJrbXNhbi1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzU5MzQzMzE4NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiSGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHM6XG5cbioqTmF2aWdhdGluZyB0aGUgQ29kZWJhc2U6IGBtZXNzYWdlX2ZsYWdzYCBIdW50KipcblxuT2theSwgc28gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZXNlIG1lc3NhZ2UgZmxhZ3MgYXJlIGJlaW5nIGhhbmRsZWQuIE15IGluaXRpYWwgaW5zdGluY3QgaXMgdG8ganVtcCByaWdodCBpbnRvIHRoZSBgaW5jbHVkZS9gIGRpcmVjdG9yeS4gVGhhdCdzIHVzdWFsbHkgdGhlIGJlc3QgcGxhY2UgdG8gc3RhcnQgd2hlbiB5b3UncmUgZGVhbGluZyB3aXRoIGRlZmluaXRpb25zIGFuZCBkYXRhIHN0cnVjdHVyZXMgaW4gYSBjb2RlYmFzZSwgZXNwZWNpYWxseSB3aGVuIHlvdSdyZSBsb29raW5nIGZvciBzb21ldGhpbmcgdGhhdCBzb3VuZHMgbGlrZSBhbiBlbnVtZXJhdGlvbiBvciBhIHNldCBvZiBjb25zdGFudHMuIGBpbmNsdWRlL2AgaXMgd2hlcmUgdGhlIGNvcmUgYnVpbGRpbmcgYmxvY2tzIGFyZSB0eXBpY2FsbHkgZGVmaW5lZC4gSSdtIGV4cGVjdGluZyB0byBmaW5kIGEgaGVhZGVyIGZpbGUgdGhhdCBkZWZpbmVzIGBtZXNzYWdlX2ZsYWdzYCwgbWF5YmUgYXMgYSBiaXRmaWVsZCBvciBhbiBlbnVtLiBMZXQncyBnZXQgdG8gaXQgYW5kIHNlZSB3aGF0IHdlIGNhbiBmaW5kIVxuXG5cbiIsIklucHV0VG9rZW5zIjo5MTYyLCJPdXRwdXRUb2tlbnMiOjI1LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6MzkuNzM0ODM4Mzg0WiIsIlNlcSI6NTYsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxOTUzNjAxOTcsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwibWVzc2FnZV9mbGFnc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJpbmNsdWRlL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJpbmNsdWRlL2h5cGVydi9odmdka19taW5pLmg9NzY0PXVuaW9uIGh2X3N5bmljX3NpbXAge1xcbi0tXFxuaW5jbHVkZS9oeXBlcnYvaHZnZGtfbWluaS5oLTc3Mi1cXG5pbmNsdWRlL2h5cGVydi9odmdka19taW5pLmg6NzczOnVuaW9uIGh2X21lc3NhZ2VfZmxhZ3Mge1xcbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaC03NzQtXFx0dTggYXN1ODtcXG4tLVxcbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaD03ODE9c3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyIHtcXG4tLVxcbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaC03ODMtXFx0dTggcGF5bG9hZF9zaXplO1xcbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaDo3ODQ6XFx0dW5pb24gaHZfbWVzc2FnZV9mbGFncyBtZXNzYWdlX2ZsYWdzO1xcbmluY2x1ZGUvaHlwZXJ2L2h2Z2RrX21pbmkuaC03ODUtXFx0dTggcmVzZXJ2ZWRbMl07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjEwOjM5LjkzMDIxMzIyMVoiLCJTZXEiOjU3LCJOZXN0aW5nIjozLCJUeXBlIjoibGxtIiwiTmFtZSI6Imttc2FuLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozOTY2NTU1MjEzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkRpdmluZyBpbnRvIHRoZSBIVkdESyBNaW5pZHJpdmVyIENvZGUqKlxuXG5Pa2F5LCB0aW1lIHRvIGRpZyBpbnRvIHRoZSBIVkdESyBtaW5pZHJpdmVyLiBTcGVjaWZpY2FsbHksIEknbSBnb2luZyB0byBmb2N1cyBteSBhdHRlbnRpb24gYXJvdW5kIGxpbmUgNzczIG9mIGBpbmNsdWRlL2h5cGVydi9odmdka19taW5pLmhgLiBLbm93aW5nIHRoZSBnZW5lcmFsIHN0cnVjdHVyZSBvZiB0aGUgSFZHREssIGFuZCB3aGF0IHRoaXMgcGFydCBvZiB0aGUgaGVhZGVyIGxpa2VseSBwZXJ0YWlucyB0bywgdGhpcyBsaW5lIG51bWJlciBzaG91bGQgYmUgYSBnb29kIHN0YXJ0aW5nIHBvaW50IGZvciB3aGF0ZXZlciBJJ20gdHJvdWJsZXNob290aW5nLCBvciBpbnZlc3RpZ2F0aW5nLiBHaXZlbiB0aGUgbG9jYXRpb24gd2l0aGluIHRoZSBpbmNsdWRlIGZpbGUsIGl0J3MgbGlrZWx5IGRlZmluaW5nIHNvbWUgZnVuZGFtZW50YWwgc3RydWN0dXJlIG9yIGNvbnN0YW50IHJlbGF0ZWQgdG8gdGhlIGd1ZXN0IHZpcnR1YWwgZGV2aWNlLiBJJ20gaG9waW5nIHRvIGdldCBhIGNsZWFyZXIgcGljdHVyZSBvZiBob3cgdGhpcyBtaW5pZHJpdmVyIGludGVyYWN0cyB3aXRoIHRoZSBoeXBlcnZpc29yIGhlcmUuIFRoaXMgbWlnaHQgYmUgYSBkZWZpbml0aW9uIGZvciBhIHBhY2tldCBmb3JtYXQsIGEgZGF0YSBzdHJ1Y3R1cmUgZm9yIGRldmljZSBjb250cm9sLCBvciBwZXJoYXBzIGV2ZW4gYW4gaW50ZXJydXB0IHZlY3Rvci4gSSdtIGV4cGVjdGluZyBzb21ldGhpbmcgY3JpdGljYWwgZm9yIHRoZSBndWVzdC10by1ob3N0IGNvbW11bmljYXRpb24gb3IgZGV2aWNlIGVudW1lcmF0aW9uLiBMZXQncyBzZWUgd2hhdCdzIGFjdHVhbGx5IHRoZXJlLlxuXG5cbiIsIklucHV0VG9rZW5zIjo5NTY4LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MjUsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6NDMuODk2NzcyMzg0WiIsIlNlcSI6NTgsIk5lc3RpbmciOjMsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIxODQ3OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJpbmNsdWRlL2h5cGVydi9odmdka19taW5pLmhcIixcbiAgXCJGaXJzdExpbmVcIjogNzczLFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgNzczOlxcdHVuaW9uIGh2X21lc3NhZ2VfZmxhZ3Mge1xcbiA3NzQ6XFx0XFx0dTggYXN1ODtcXG4gNzc1OlxcdFxcdHN0cnVjdCB7XFxuIDc3NjpcXHRcXHRcXHR1OCBtc2dfcGVuZGluZyA6IDE7XFxuIDc3NzpcXHRcXHRcXHR1OCByZXNlcnZlZCA6IDc7XFxuIDc3ODpcXHRcXHR9IF9fcGFja2VkO1xcbiA3Nzk6XFx0fTtcXG4gNzgwOlxcdFxcbiA3ODE6XFx0c3RydWN0IGh2X21lc3NhZ2VfaGVhZGVyIHtcXG4gNzgyOlxcdFxcdHUzMiBtZXNzYWdlX3R5cGU7XFxuIDc4MzpcXHRcXHR1OCBwYXlsb2FkX3NpemU7XFxuIDc4NDpcXHRcXHR1bmlvbiBodl9tZXNzYWdlX2ZsYWdzIG1lc3NhZ2VfZmxhZ3M7XFxuIDc4NTpcXHRcXHR1OCByZXNlcnZlZFsyXTtcXG4gNzg2OlxcdFxcdHVuaW9uIHtcXG4gNzg3OlxcdFxcdFxcdHU2NCBzZW5kZXI7XFxuIDc4ODpcXHRcXHRcXHR1bmlvbiBodl9wb3J0X2lkIHBvcnQ7XFxuIDc4OTpcXHRcXHR9O1xcbiA3OTA6XFx0fSBfX3BhY2tlZDtcXG4gNzkxOlxcdFxcbiA3OTI6XFx0LypcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDgtMjZUMTk6MTA6NDMuODk2OTkzMzU0WiIsIlNlcSI6NTksIk5lc3RpbmciOjMsIlR5cGUiOiJsbG0iLCJOYW1lIjoia21zYW4tZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE0NDk0MDAwMTczLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKlVuaW5pdGlhbGl6ZWQgTWVtb3J5IEluZm8tTGVhayBpbiBIeXBlci1WIE1lc3NhZ2UgSGFuZGxpbmcqKlxuXG5Pa2F5LCBzbyBJJ3ZlIGdvdCB0aGlzIGBodl9tZXNzYWdlX2ZsYWdzYCB1bmlvbiwgaXQncyBhIGB1OCBhc3U4YCBhbmQgYSBiaXRmaWVsZCBgbXNnX3BlbmRpbmc6MWAsIGByZXNlcnZlZDo3YC4gQmVmb3JlIHRoaXMgcGF0Y2gsIHRoZSBjb2RlIHdhcyBzZXR0aW5nIGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDE7YCwgYnV0IHRoZSBvdGhlciA3IGJpdHMgb2YgdGhlIGBtZXNzYWdlX2ZsYWdzYCBieXRlIChgcmVzZXJ2ZWRgKSB3ZXJlIHVuaW5pdGlhbGl6ZWQgYmVjYXVzZSBgaHZfaGRyYCB3YXMgYW4gdW5pbml0aWFsaXplZCBsb2NhbCB2YXJpYWJsZSBvbiB0aGUgc3RhY2suIEVzc2VudGlhbGx5LCBhIGJ5dGUgd2FzIGJlaW5nIHBhcnRpYWxseSB3cml0dGVuIHRvLiBUaGVuIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCB3cml0ZXMgdGhpcyBzaW5nbGUgYnl0ZSB0byBndWVzdCBtZW1vcnkuXG5cblRoaXMgbWVhbnMgd2UncmUgbGVha2luZyA3IGJpdHMgb2YgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgZGlyZWN0bHkgdG8gdGhlIGd1ZXN0IHNwYWNlLiBJdCdzIGEgY2xhc3NpYyBpbmZvLWxlYWssIGFuZCBhIG5hc3R5IG9uZSBhdCB0aGF0ISBOb3csIHRoZSBpbXBvcnRhbnQgdGhpbmcgaGVyZSBpcyB0aGF0IEtBU0FOIHdvbid0IGNhdGNoIHRoaXMuIEtBU0FOIGRvZXNuJ3QgZ2VuZXJhbGx5IGZsYWcgdW5pbml0aWFsaXplZCBtZW1vcnkgcmVhZHMgb3IgaW5mb3JtYXRpb24gbGVha3MgbGlrZSB0aGlzIG9uZS4gS01TQU4sIG9uIHRoZSBvdGhlciBoYW5kLCAqZG9lcyouIEtNU0FOIGlzIHRoZSB0b29sIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdGhlc2Ugc2NlbmFyaW9zLlxuXG5TbywgbGV0J3MgY29uZmlybSB0aGUgdW5pbml0aWFsaXplZCBtZW1vcnkuIEluIHRoZSBgc3luaWNfZGVsaXZlcl9tc2dgIGZ1bmN0aW9uLCB0aGUgYGh2X2hkcmAgc3RydWN0IGlzIGRlY2xhcmVkIG9uIHRoZSBzdGFjayB3aXRob3V0IGluaXRpYWxpemF0aW9uLiBXZSB0aGVuIHJlYWQgYGh2X2hkci5tZXNzYWdlX3R5cGVgIGZyb20gZ3Vlc3QgbWVtb3J5IHVzaW5nIGBrdm1fdmNwdV9yZWFkX2d1ZXN0X3BhZ2VgIHRvIGluaXRpYWxpemUgdGhvc2UgNCBieXRlcy4gQWZ0ZXIgdGhhdCwgd2Ugc2V0IGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDFgLiBUaGlzIHNldHMgb25seSBvbmUgYml0LCBsZWF2aW5nIHRoZSBvdGhlciA3IGJpdHMgb2YgYG1lc3NhZ2VfZmxhZ3NgIHVuaW5pdGlhbGl6ZWQuIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlYCB0aGVuIHdyaXRlcyB0aGlzIHNpbmdsZSBieXRlIG9mIGBtZXNzYWdlX2ZsYWdzYCB0byBndWVzdCBtZW1vcnkuXG5cblNpbmNlIHRoZSBndWVzdCBtZW1vcnkgaXMgbWFwcGVkIHRvIHVzZXJzcGFjZSwgc3BlY2lmaWNhbGx5IHRocm91Z2ggUUVNVSwgdGhpcyBiZWNvbWVzIGFuIGluZm8tbGVhayEgVGhlIHdyaXRlIG9wZXJhdGlvbiB3aWxsIHRyaWdnZXIgYF9fY29weV90b191c2VyYCwgd2hpY2ggS01TQU4gd2lsbCBjYXRjaC5cblxuVGhpcyBkZWZpbml0aXZlbHkgbWVhbnMgYE5lZWRzS01TQU5gIGlzIHRydWUuXG5cbkluIGEgbnV0c2hlbGwsIHRoaXMgcGF0Y2ggYWRkcmVzc2VzIGFuIGluZm9ybWF0aW9uIGxlYWsgdnVsbmVyYWJpbGl0eS4gVGhlIG9yaWdpbmFsIGNvZGUgaW5hZHZlcnRlbnRseSB3cm90ZSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSAoNyBiaXRzKSB0byBndWVzdCBtZW1vcnkgd2hlbiB3cml0aW5nIGEgc3BlY2lmaWMgbWVzc2FnZSBoZWFkZXIsIGJlY2F1c2Ugd2Ugd2VyZSBvbmx5IHBhcnRpYWxseSBpbml0aWFsaXppbmcgdGhlIGBtZXNzYWdlX2ZsYWdzYCBieXRlLiBUaGlzIHVuaW5pdGlhbGl6ZWQgZGF0YSwgbGVha2luZyB0byB1c2Vyc3BhY2UsIGlzIHNvbWV0aGluZyBLTVNBTiBleGNlbHMgYXQgY2F0Y2hpbmcsIGFuZCBzbyBhIGRlZGljYXRlZCBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQuIFRoZSBwYXRjaCBhZGRyZXNzZXMgdGhpcyBieSBpbml0aWFsaXppbmcgdGhlIGVudGlyZSBieXRlIGJlZm9yZSBzZXR0aW5nIGFueSBiaXRmaWVsZHMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwMDk2LCJPdXRwdXRUb2tlbnMiOjIwMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjk3MiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTI2VDE5OjEwOjU4LjM5MDk5NzQ0NloiLCJTZXEiOjYwLCJOZXN0aW5nIjozLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIyODgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggZml4ZXMgYW4gaW5mb3JtYXRpb24gbGVhayB3aGVyZSB1bmluaXRpYWxpemVkIHN0YWNrIG1lbW9yeSBpcyB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeS4gU3BlY2lmaWNhbGx5LCBgaHZfaGRyYCBpcyBhbiB1bmluaXRpYWxpemVkIHN0YWNrIHZhcmlhYmxlLiBUaGUgY29kZSBzZXRzIGEgc2luZ2xlIGJpdGZpZWxkIGBodl9oZHIubWVzc2FnZV9mbGFncy5tc2dfcGVuZGluZyA9IDFgLCBsZWF2aW5nIHRoZSByZW1haW5pbmcgNyBiaXRzIG9mIHRoZSBgbWVzc2FnZV9mbGFnc2AgYnl0ZSB1bmluaXRpYWxpemVkLiBUaGlzIGJ5dGUgaXMgdGhlbiB3cml0dGVuIHRvIGd1ZXN0IG1lbW9yeSB2aWEgYGt2bV92Y3B1X3dyaXRlX2d1ZXN0X3BhZ2UoKWAsIHdoaWNoIGludGVybmFsbHkgdXNlcyBgX19jb3B5X3RvX3VzZXIoKWAgdG8gd3JpdGUgdG8gdGhlIHVzZXJzcGFjZS1tYXBwZWQgZ3Vlc3QgbWVtb3J5LiBUaGlzIGxlYWtzIDcgYml0cyBvZiB1bmluaXRpYWxpemVkIGtlcm5lbCBzdGFjayBtZW1vcnkgdG8gdXNlcnNwYWNlLiBTdGFuZGFyZCBLQVNBTiBkb2VzIG5vdCBkZXRlY3QgcmVhZHMgb2YgdW5pbml0aWFsaXplZCBtZW1vcnkgb3IgaW5mby1sZWFrcyB0byB1c2Vyc3BhY2UuIEtNU0FOIGlzIHNwZWNpZmljYWxseSBkZXNpZ25lZCB0byBkZXRlY3QgdGhpcyBleGFjdCBjbGFzcyBvZiBidWdzLiBUaGVyZWZvcmUsIGEgZGVkaWNhdGVkIEtNU0FOIGZ1enppbmcgc2Vzc2lvbiBpcyByZXF1aXJlZC5cIixcbiAgXCJOZWVkc0tNU0FOXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIktNU0FOUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGZpeGVzIGFuIGluZm9ybWF0aW9uIGxlYWsgd2hlcmUgdW5pbml0aWFsaXplZCBzdGFjayBtZW1vcnkgaXMgd3JpdHRlbiB0byBndWVzdCBtZW1vcnkuIFNwZWNpZmljYWxseSwgYGh2X2hkcmAgaXMgYW4gdW5pbml0aWFsaXplZCBzdGFjayB2YXJpYWJsZS4gVGhlIGNvZGUgc2V0cyBhIHNpbmdsZSBiaXRmaWVsZCBgaHZfaGRyLm1lc3NhZ2VfZmxhZ3MubXNnX3BlbmRpbmcgPSAxYCwgbGVhdmluZyB0aGUgcmVtYWluaW5nIDcgYml0cyBvZiB0aGUgYG1lc3NhZ2VfZmxhZ3NgIGJ5dGUgdW5pbml0aWFsaXplZC4gVGhpcyBieXRlIGlzIHRoZW4gd3JpdHRlbiB0byBndWVzdCBtZW1vcnkgdmlhIGBrdm1fdmNwdV93cml0ZV9ndWVzdF9wYWdlKClgLCB3aGljaCBpbnRlcm5hbGx5IHVzZXMgYF9fY29weV90b191c2VyKClgIHRvIHdyaXRlIHRvIHRoZSB1c2Vyc3BhY2UtbWFwcGVkIGd1ZXN0IG1lbW9yeS4gVGhpcyBsZWFrcyA3IGJpdHMgb2YgdW5pbml0aWFsaXplZCBrZXJuZWwgc3RhY2sgbWVtb3J5IHRvIHVzZXJzcGFjZS4gU3RhbmRhcmQgS0FTQU4gZG9lcyBub3QgZGV0ZWN0IHJlYWRzIG9mIHVuaW5pdGlhbGl6ZWQgbWVtb3J5IG9yIGluZm8tbGVha3MgdG8gdXNlcnNwYWNlLiBLTVNBTiBpcyBzcGVjaWZpY2FsbHkgZGVzaWduZWQgdG8gZGV0ZWN0IHRoaXMgZXhhY3QgY2xhc3Mgb2YgYnVncy4gVGhlcmVmb3JlLCBhIGRlZGljYXRlZCBLTVNBTiBmdXp6aW5nIHNlc3Npb24gaXMgcmVxdWlyZWQuXCIsXG4gIFwiTmVlZHNLTVNBTlwiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowtnzrh[1] Phase: Succeeded StartedAt: 2026-08-26 19:11:10 +0000 UTC FinishedAt: 2026-08-26 19:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-08-26 19:11:10 +0000 UTC FinishedAt: 2026-08-26 19:11:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2] Phase: Succeeded StartedAt: 2026-08-26 19:11:10 +0000 UTC FinishedAt: 2026-08-26 23:12:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-08-26 19:11:10 +0000 UTC FinishedAt: 2026-08-26 23:12:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-08-26 19:11:10 +0000 UTC FinishedAt: 2026-08-26 19:11:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-08-26 19:11:10 +0000 UTC FinishedAt: 2026-08-26 19:11:16 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowtnzrh/series-workflowtnzrh-convert-artifact-3555504908/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-08-26 19:11:21 +0000 UTC FinishedAt: 2026-08-26 19:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-08-26 19:11:21 +0000 UTC FinishedAt: 2026-08-26 19:30:43 +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:*1dc06a7d-d981-47e1-87d0-c9e58c1d39d2,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-workflowtnzrh/series-workflowtnzrh-convert-artifact-3555504908/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": "f56e4328-c0d7-4cc3-a7ef-71d229d55caa", "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-workflowtnzrh/series-workflowtnzrh-build-action-3935009082/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-08-26 19:11:21 +0000 UTC FinishedAt: 2026-08-26 19:30:33 +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:*1dc06a7d-d981-47e1-87d0-c9e58c1d39d2,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-workflowtnzrh/series-workflowtnzrh-convert-artifact-3555504908/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": "f56e4328-c0d7-4cc3-a7ef-71d229d55caa", "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-workflowtnzrh/series-workflowtnzrh-build-action-3935009082/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-08-26 19:30:43 +0000 UTC FinishedAt: 2026-08-26 19:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-08-26 19:30:43 +0000 UTC FinishedAt: 2026-08-26 19:30:43 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-08-26 19:30:43 +0000 UTC FinishedAt: 2026-08-26 19:30:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-08-26 19:30:43 +0000 UTC FinishedAt: 2026-08-26 19:30:48 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},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-workflowtnzrh/series-workflowtnzrh-convert-artifact-867387467/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-08-26 19:30:53 +0000 UTC FinishedAt: 2026-08-26 19:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-08-26 19:30:53 +0000 UTC FinishedAt: 2026-08-26 19:32:47 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f56e4328-c0d7-4cc3-a7ef-71d229d55caa,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-workflowtnzrh/series-workflowtnzrh-build-action-3935009082/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-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-08-26 19:32:56 +0000 UTC FinishedAt: 2026-08-26 19:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-08-26 19:32:56 +0000 UTC FinishedAt: 2026-08-26 19:32:56 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-08-26 19:32:56 +0000 UTC FinishedAt: 2026-08-26 19:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-08-26 19:32:56 +0000 UTC FinishedAt: 2026-08-26 19:52:35 +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:*1dc06a7d-d981-47e1-87d0-c9e58c1d39d2,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-workflowtnzrh/series-workflowtnzrh-convert-artifact-867387467/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": "612e5185-0698-4d43-8ee6-15061eb3d36a", "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-workflowtnzrh/series-workflowtnzrh-build-action-3744558319/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-08-26 19:32:56 +0000 UTC FinishedAt: 2026-08-26 19:52:25 +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:*1dc06a7d-d981-47e1-87d0-c9e58c1d39d2,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-workflowtnzrh/series-workflowtnzrh-convert-artifact-867387467/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": "612e5185-0698-4d43-8ee6-15061eb3d36a", "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-workflowtnzrh/series-workflowtnzrh-build-action-3744558319/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-08-26 19:52:35 +0000 UTC FinishedAt: 2026-08-26 19:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-08-26 19:52:35 +0000 UTC FinishedAt: 2026-08-26 19:52:35 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-08-26 19:52:35 +0000 UTC FinishedAt: 2026-08-26 19:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-08-26 19:52:35 +0000 UTC FinishedAt: 2026-08-26 19:54:22 +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:*612e5185-0698-4d43-8ee6-15061eb3d36a,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-workflowtnzrh/series-workflowtnzrh-build-action-3744558319/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-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-08-26 19:54:31 +0000 UTC FinishedAt: 2026-08-26 23:12:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-08-26 19:54:31 +0000 UTC FinishedAt: 2026-08-26 23:12:44 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:config,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},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:*f56e4328-c0d7-4cc3-a7ef-71d229d55caa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*612e5185-0698-4d43-8ee6-15061eb3d36a,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-workflowtnzrh/series-workflowtnzrh-build-action-3935009082/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-workflowtnzrh/series-workflowtnzrh-build-action-3744558319/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-08-26 19:54:31 +0000 UTC FinishedAt: 2026-08-26 19:54:42 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-08-26 19:54:31 +0000 UTC FinishedAt: 2026-08-26 19:54:36 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},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-workflowtnzrh/series-workflowtnzrh-convert-artifact-957735652/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-08-26 19:54:31 +0000 UTC FinishedAt: 2026-08-26 19:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-08-26 19:54:31 +0000 UTC FinishedAt: 2026-08-26 19:54:31 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-08-26 19:54:32 +0000 UTC FinishedAt: 2026-08-26 19:54:32 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-08-26 19:54:42 +0000 UTC FinishedAt: 2026-08-26 23:12:44 +0000 UTC Input: nil Output: nil --------- Name: series-workflowtnzrh[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvm_hv_set_msr_common","kvm_hv_process_stimers"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"76671054f9a1ff6abb976583cd8da37650acdc97","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM","KVM_HYPERV"],"series_id":"317cb3df-628c-4e00-80de-a530c076e805","tree_name":"kvm-next","tree_url":"https://kernel.googlesource.com/pub/scm/virt/kvm/kvm/"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-08-26 19:54:42 +0000 UTC FinishedAt: 2026-08-26 23:12:35 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*f56e4328-c0d7-4cc3-a7ef-71d229d55caa,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*612e5185-0698-4d43-8ee6-15061eb3d36a,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-workflowtnzrh/series-workflowtnzrh-build-action-3935009082/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-workflowtnzrh/series-workflowtnzrh-build-action-3744558319/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-workflowtnzrh/series-workflowtnzrh-convert-artifact-957735652/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,}