Name: series-workflowwr7b5 Phase: Succeeded StartedAt: 2026-07-01 09:51:49 +0000 UTC FinishedAt: 2026-07-01 10:56:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[0] Phase: Succeeded StartedAt: 2026-07-01 09:51:49 +0000 UTC FinishedAt: 2026-07-01 10:01:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[0].run-triage Phase: Succeeded StartedAt: 2026-07-01 09:51:49 +0000 UTC FinishedAt: 2026-07-01 10:01:51 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "0c95dfb0-3e16-4664-9b42-03b16d5b98cc" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvmppc_get_compat_caps", "kvmppc_map_compat_capabilities" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OywKICAgICYjMzQ7a3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYWY5YzE4OTdlODY5Yzk3OWMyNWZhMzg3YmMzYmJhM2M1YzYyNjNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwOTo1ODowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZThkLi40MzgxMGM0NTEzMTdmYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtNjU2Niw2ICYjNDM7NjU2Niw4NSBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFXG4gICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleVxuICAgc3BlY2lmaWVkIGluIGBga2V5YGAsIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUgaW4gYGBrZXlgYC5cbiBcbiYjNDM7NC4xNDUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNcbiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTXG4mIzQzOzpBcmNoaXRlY3R1cmVzOiBwb3dlcnBjXG4mIzQzOzpUeXBlOiB2bSBpb2N0bFxuJiM0Mzs6UGFyYW1ldGVyczogc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKG91dClcbiYjNDM7OlJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZVxuJiM0MztcbiYjNDM7RXJyb3JzIGluY2x1ZGU6XG4mIzQzO1xuJiM0MzsgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsgIEVGQVVMVCAgIGlmIGBgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHNgYCBjYW5ub3QgYmUgcmVhZCBmcm9tIG9yXG4mIzQzOyAgICAgICAgICAgd3JpdHRlbiB0byB1c2Vyc3BhY2VcbiYjNDM7ICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuXG4mIzQzOyAgICAgICAgICAgYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgLCBpZiB0aGUgYGBmbGFnc2BgIGZpZWxkXG4mIzQzOyAgICAgICAgICAgaXMgbm9uLXplcm8sIG9yIGlmIHRoZSBiYWNrZW5kIGZhaWxzIHRvIHJldHJpZXZlIG9yIG1hcFxuJiM0MzsgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllc1xuJiM0MzsgIEUyQklHICAgIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemVcbiYjNDM7ICAgICAgICAgICAobmV3IHVzZXJzcGFjZSBvbiBvbGQga2VybmVsKTsgdGhlIGtlcm5lbCB3cml0ZXMgYmFjayBpdHNcbiYjNDM7ICAgICAgICAgICBvd24gc3RydWN0IHNpemUgaW50byB0aGUgYGBzaXplYGAgZmllbGQgc28gdXNlcnNwYWNlIGNhblxuJiM0MzsgICAgICAgICAgIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZVxuJiM0MzsgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYFxuJiM0MzsgICAgICAgICAgIG9wZXJhdGlvbiAoZS5nLiwgb24gbm9uLXBzZXJpZXMgcGxhdGZvcm1zIG9yIHdoZW4gdGhlXG4mIzQzOyAgICAgICAgICAgcmVxdWlyZWQgS1ZNIG9wZXJhdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUpXG4mIzQzOyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztJQk0gUE9XRVIgc3lzdGVtIHNlcnZlci1iYXNlZCBwcm9jZXNzb3JzIHByb3ZpZGUgYSBjb21wYXRpYmlsaXR5IG1vZGUgZmVhdHVyZVxuJiM0Mzt3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXJcbiYjNDM7Z2VuZXJhdGlvbnMgc3VjaCBhcyAoTi0xKSBhbmQgKE4tMikuXG4mIzQzO1xuJiM0MztUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2Rlc1xuJiM0MztzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgaG9zdCBwcm9jZXNzb3IgZm9yIGJvb3RpbmcgdGhlIG5lc3RlZCBLVk0gZ3Vlc3RzIG9uXG4mIzQzO0tWTSBvbiBQb3dlck5WIChuZXN0ZWQgQVBJIHYxKSBhbmQgS1ZNIG9uIFBvd2VyVk0gKG5lc3RlZCBBUEkgdjIpIHBsYXRmb3Jtcy5cbiYjNDM7XG4mIzQzOzo6XG4mIzQzO1xuJiM0MzsgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbiYjNDM7XHRfX3U2NFx0c2l6ZTtcdFx0XHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXG4mIzQzO1x0X191NjRcdGZsYWdzO1x0XHRcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi9cbiYjNDM7XHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbiYjNDM7ICB9O1xuJiM0MztcbiYjNDM7QmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xuJiM0MztgYHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCBhbmQgemVybyB0aGUgYGBmbGFnc2BgIGZpZWxkLlxuJiM0MztUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudFxuJiM0Mzt1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxuJiM0MztmaWVsZCBhdmFpbGFibGUgZm9yIGZ1dHVyZSB1c2Ugd2l0aG91dCBBQkkgYW1iaWd1aXR5LlxuJiM0MztcbiYjNDM7VGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXG4mIzQzO3RvIHN1cHBvcnQgZXh0ZW5zaWJsZSB2ZXJzaW9uaW5nOiBpZiB1c2Vyc3BhY2UgcGFzc2VzIGEgc3RydWN0IHNtYWxsZXJcbiYjNDM7dGhhbiB0aGUgY3VycmVudCBrZXJuZWwgdmVyc2lvbiAoYGBzaXplIFx1MDAzZT0gS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCksXG4mIzQzO3RoZSBrZXJuZWwgemVyby1wYWRzIHVua25vd24gdHJhaWxpbmcgZmllbGRzLiBJZiB1c2Vyc3BhY2UgcGFzc2VzIGEgbGFyZ2VyXG4mIzQzO3N0cnVjdCAoYGBzaXplIFx1MDAzZSBzaXplb2Yoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMpYGApLCB0aGUga2VybmVsIHdyaXRlc1xuJiM0MztiYWNrIGl0cyBvd24gc3RydWN0IHNpemUgaW50byB0aGUgYGBzaXplYGAgZmllbGQgYW5kIHJldHVybnMgYGAtRTJCSUdgYCxcbiYjNDM7YWxsb3dpbmcgdXNlcnNwYWNlIHRvIGRpc2NvdmVyIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemUgYW5kIHJldHJ5LlxuJiM0MztgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZVxuJiM0MztzaXplIG9mIHRoZSBpbml0aWFsIHN0cnVjdCB2ZXJzaW9uLlxuJiM0MztcbiYjNDM7VGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5XG4mIzQzO21vZGVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdC4gVGhlIGZvbGxvd2luZyBiaXRzIGluZGljYXRlIHN1cHBvcnQgZm9yIHNwZWNpZmljXG4mIzQzO3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJiMzOTtzIE1TQi0wIGNvbnZlbnRpb24gd2hlcmUgYml0IDAgaXMgdGhlIG1vc3RcbiYjNDM7c2lnbmlmaWNhbnQgYml0KTpcbiYjNDM7XG4mIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgIChiaXQgMSkgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyOSBwcm9jZXNzb3IgbW9kZVxuJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlXG4mIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMWBgIChiaXQgMykgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTEgcHJvY2Vzc29yIG1vZGVcbiYjNDM7XG4mIzQzOy4uIG5vdGU6OlxuJiM0MztcbiYjNDM7ICAgVGhlIGJpdCBudW1iZXJpbmcgYWJvdmUgdXNlcyBJQk0mIzM5O3MgTVNCLTAgY29udmVudGlvbiAoYml0IDAgaXMgdGhlIG1vc3RcbiYjNDM7ICAgc2lnbmlmaWNhbnQgYml0KS4gSW4gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgdGhlc2UgYXJlIGRlZmluZWQgYXM6XG4mIzQzO1xuJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYyKWBgXG4mIzQzOyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjEpYGBcbiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MClgYFxuJiM0MztcbiYjNDM7ICAgVXNlcnNwYWNlIHNob3VsZCB1c2UgdGhlIGRlZmluZWQgY29uc3RhbnRzIGZyb20gYGBcdTAwM2NsaW51eC9rdm0uaFx1MDAzZWBgIHJhdGhlclxuJiM0MzsgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy5cbiYjNDM7XG4gLi4gX2t2bV9ydW46XG4gXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbmluZGV4IDA5NTNmMmRhYTQ2NjBmLi4xNjllYTZhN2ZiYWQ0NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbkBAIC0zMTksNiAmIzQzOzMxOSw3IEBAIHN0cnVjdCBrdm1wcGNfb3BzIHtcbiBcdGJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTtcbiBcdGludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0aW50ICgqY3JlYXRlX3ZjcHVfZGVidWdmcykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeSk7XG4mIzQzO1x0aW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTtcbiB9O1xuIFxuIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wcztcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAwNzdjNTQzN2Y1MjE5Yi4uOTEzYTY0YjkwMWEzZDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiAmIzQzOzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7XG4gXHRfX3U2NFx0YmVoYXZpb3VyX21hc2s7XHRcdC8qIHZhbGlkIGJpdHMgaW4gYmVoYXZpb3VyICovXG4gfTtcbiBcbiYjNDM7LyogRm9yIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTICovXG4mIzQzO3N0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbiYjNDM7XHRfX3U2NFx0c2l6ZTtcdFx0XHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXG4mIzQzO1x0X191NjRcdGZsYWdzO1x0XHRcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4mIzQzO1x0X191NjRcdGNvbXBhdF9jYXBhYmlsaXRpZXM7XHQvKiBDYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0ICovXG4mIzQzO307XG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBcdDI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy5cbiYjNDM7ICogVGhlc2UgYml0cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBtb2RlcyBhcmUgc3VwcG9ydGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5XHQoMVVMTCBcdTAwM2NcdTAwM2MgNjIpXG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlcbiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYwKVxuJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0tcdFx0KEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjkgfCBcXFxuJiM0MztcdFx0XHRcdFx0IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMSlcbiAvKlxuICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay5cbiAgKiBUaGVzZSBhcmUgaWRlbnRpY2FsIHRvIHRoZSB2YWx1ZXMgdXNlZCBieSBIX0dFVF9DUFVfQ0hBUkFDVEVSSVNUSUNTLlxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5pbmRleCA2MWRiZWVhMzE3ZjNiNy4uNzBkY2QzNzBmZDlhYzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5AQCAtNjUxMCw2ICYjNDM7NjUxMCw2MyBAQCBzdGF0aWMgYm9vbCBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjb25zdCBfX2JlMzIgY3B1X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjcHVfdmVyc2lvbikge1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxuJiM0MztcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzE6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBQVlJfQVJDSF8zMDA6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcbiYjNDM7XHRjb25zdCBfX2JlMzIgKnByb3AgPSBOVUxMO1xuJiM0MztcdGxvbmcgcmMgPSAtRUlOVkFMO1xuJiM0MztcdHUzMiBjcHVfdmVyc2lvbjtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuJiM0MztcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XHRcdFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcbiYjNDM7XHRcdFx0cmMgPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcJiMzNDtjcHVcJiMzNDspIHtcbiYjNDM7XHRcdFx0XHRwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBcJiMzNDtjcHUtdmVyc2lvblwmIzM0OywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0aWYgKHByb3ApIHtcbiYjNDM7XHRcdFx0XHRcdGNwdV92ZXJzaW9uID0gYmUzMl90b19jcHVwKHByb3ApO1xuJiM0MztcdFx0XHRcdFx0b2Zfbm9kZV9wdXQobnApO1xuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmICghcHJvcClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGhvc3RfY2Fwcy1cdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFx1MDAyNiBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4gXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXG4gXHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXG5AQCAtNjU1Miw2ICYjNDM7NjYwOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcbiBcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcbiBcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuJiM0MztcdC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzLFxuIH07XG4gXG4gc3RhdGljIGludCBrdm1faW5pdF9zdWJjb3JlX2JpdG1hcCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbmluZGV4IDAwMzAyMzk5ZmMzN2I0Li44ZDY2MzJjNjRjYTVmOSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuQEAgLTY5Nyw2ICYjNDM7Njk3LDEzIEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGJyZWFrO1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcbiYjNDM7XHRjYXNlIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTOlxuJiM0MztcdFx0ciA9IDA7XG4mIzQzO1x0XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxuJiM0MztcdFx0XHRyID0gMTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cbiBcdGRlZmF1bHQ6XG4gXHRcdHIgPSAwO1xuIFx0XHRicmVhaztcbkBAIC0yNDYzLDYgJiM0MzsyNDcwLDcwIEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlc3ZtX29mZihrdm0pO1xuIFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XHRjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7XG4mIzQzO1x0XHRzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtcbiYjNDM7XHRcdHU2NCB1c2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmVhZCB0aGUgc2l6ZSBmaWVsZCBmaXJzdCB0byBkcml2ZSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIuXG4mIzQzO1x0XHQgKiBzaXplIG11c3QgYmUgdGhlIGZpcnN0IGZpZWxkIG9mIHRoZSBzdHJ1Y3QuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHIgPSAtRUZBVUxUO1xuJiM0MztcdFx0aWYgKGdldF91c2VyKHVzaXplLCAoX191NjQgX191c2VyICopYXJncCkpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBFbmZvcmNlIGEgbWluaW11bTogcmVqZWN0IGJ1ZmZlcnMgc21hbGxlciB0aGFuIHRoZSBpbml0aWFsXG4mIzQzO1x0XHQgKiBzdHJ1Y3QgdmVyc2lvbiAoVkVSMCkuIFRoaXMgYWxsb3dzIG9sZCB1c2Vyc3BhY2UgY29tcGlsZWRcbiYjNDM7XHRcdCAqIGFnYWluc3QgdGhlIG9yaWdpbmFsIHN0cnVjdCB0byBzdGlsbCB3b3JrIG9uIGEgbmV3ZXIga2VybmVsXG4mIzQzO1x0XHQgKiB0aGF0IGhhcyBncm93biB0aGUgc3RydWN0IHdpdGggYXBwZW5kZWQgZmllbGRzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGlmICh1c2l6ZSBcdTAwM2MgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjApXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBOZXcgdXNlcnNwYWNlIHdpdGggYSBsYXJnZXIgc3RydWN0IGNhbGxlZCBhbiBvbGRlciBrZXJuZWwuXG4mIzQzO1x0XHQgKiBXcml0ZSBiYWNrIGtzaXplIGluIGhvc3RfY2Fwcy5zaXplIHNvIHVzZXJzcGFjZSBrbm93cyB3aGljaFxuJiM0MztcdFx0ICogb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsIHRoZW4gZmFpbCB3aXRoIC1FMkJJRy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHVzaXplIFx1MDAzZSBzaXplb2YoaG9zdF9jYXBzKSkge1xuJiM0MztcdFx0XHRob3N0X2NhcHMuc2l6ZSA9IHNpemVvZihob3N0X2NhcHMpO1xuJiM0MztcdFx0XHRyID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0aWYgKHB1dF91c2VyKGhvc3RfY2Fwcy5zaXplLCAoX191NjQgX191c2VyICopYXJncCkpXG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdHIgPSAtRTJCSUc7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OlxuJiM0MztcdFx0ICogICB1c2l6ZSA9PSBrc2l6ZTogdmVyYmF0aW0gY29weVxuJiM0MztcdFx0ICogICB1c2l6ZSBcdTAwM2MgIGtzaXplOiB6ZXJvLXBhZCB0cmFpbGluZyAob2xkIHVzZXJzcGFjZSwgbmV3IGtlcm5lbClcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ciA9IGNvcHlfc3RydWN0X2Zyb21fdXNlcihcdTAwMjZob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLFxuJiM0MztcdFx0XHRcdFx0ICBhcmdwLCB1c2l6ZSk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVzZXJ2ZWQgZmllbGRzIG11c3QgYmUgemVybyAqL1xuJiM0MztcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoaG9zdF9jYXBzLmZsYWdzKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRyID0gLUVOT1RUWTtcbiYjNDM7XHRcdGlmICgha3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdGhvc3RfY2Fwcy5zaXplID0gc2l6ZW9mKGhvc3RfY2Fwcyk7XG4mIzQzO1x0XHRyID0gY29weV9zdHJ1Y3RfdG9fdXNlcihhcmdwLCB1c2l6ZSwgXHUwMDI2aG9zdF9jYXBzLFxuJiM0MztcdFx0XHRcdFx0c2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuIFx0ZGVmYXVsdDoge1xuIFx0XHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdFx0ciA9IGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbmluZGV4IDQxOTAxMTA5N2ZhOGUyLi4xY2Y5YTk1OTY2OWU4ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbiYjNDM7I2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTBcbiBcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xuIFx0X191MzIgaXJxY2hpcDtcbkBAIC0xMzUwLDYgJiM0MzsxMzUxLDkgQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHtcbiAjZGVmaW5lIEtWTV9HRVRfREVWSUNFX0FUVFJcdCAgX0lPVyhLVk1JTywgIDB4ZTIsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXG4gI2RlZmluZSBLVk1fSEFTX0RFVklDRV9BVFRSXHQgIF9JT1coS1ZNSU8sICAweGUzLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyKVxuIFxuJiM0MzsvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqL1xuJiM0MzsjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXHRfSU8oS1ZNSU8sICAweGU0KVxuJiM0MztcbiAvKlxuICAqIGlvY3RscyBmb3IgdmNwdSBmZHNcbiAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzJiMzNDssCiAgICAmIzM0O2t2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGltcGxlbWVudGF0aW9uIGludm9sdmVzIGNvcHlpbmcgZGF0YSBmcm9tL3RvIHVzZXJzcGFjZSwgY2hlY2tpbmcgc2l6ZXMsIGFuZCBjYWxsaW5nIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUga2VybmVsIGxvZ2ljLCB3aGljaCBjYW4gYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAocHNlcmllcyBtYWNoaW5lKS4gVGhlcmVmb3JlLCBpdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYWY5YzE4OTdlODY5Yzk3OWMyNWZhMzg3YmMzYmJhM2M1YzYyNjNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAwOTo1ODowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAppbmRleCBhNWY5ZWU5MmY0M2U4ZC4uNDM4MTBjNDUxMzE3ZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKQEAgLTY1NjYsNiAmIzQzOzY1NjYsODUgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRQogICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleQogICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLgogCiYjNDM7NC4xNDUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUwomIzQzOzpBcmNoaXRlY3R1cmVzOiBwb3dlcnBjCiYjNDM7OlR5cGU6IHZtIGlvY3RsCiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIChvdXQpCiYjNDM7OlJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQomIzQzOwomIzQzO0Vycm9ycyBpbmNsdWRlOgomIzQzOwomIzQzOyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ICBFRkFVTFQgICBpZiBgYHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzYGAgY2Fubm90IGJlIHJlYWQgZnJvbSBvcgomIzQzOyAgICAgICAgICAgd3JpdHRlbiB0byB1c2Vyc3BhY2UKJiM0MzsgIEVJTlZBTCAgIGlmIHRoZSBgYHNpemVgYCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4KJiM0MzsgICAgICAgICAgIGBgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCwgaWYgdGhlIGBgZmxhZ3NgYCBmaWVsZAomIzQzOyAgICAgICAgICAgaXMgbm9uLXplcm8sIG9yIGlmIHRoZSBiYWNrZW5kIGZhaWxzIHRvIHJldHJpZXZlIG9yIG1hcAomIzQzOyAgICAgICAgICAgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzCiYjNDM7ICBFMkJJRyAgICBpZiBgYHNpemVgYCBpcyBsYXJnZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzIHN0cnVjdCBzaXplCiYjNDM7ICAgICAgICAgICAobmV3IHVzZXJzcGFjZSBvbiBvbGQga2VybmVsKTsgdGhlIGtlcm5lbCB3cml0ZXMgYmFjayBpdHMKJiM0MzsgICAgICAgICAgIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuCiYjNDM7ICAgICAgICAgICByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemUKJiM0MzsgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYAomIzQzOyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tcHNlcmllcyBwbGF0Zm9ybXMgb3Igd2hlbiB0aGUKJiM0MzsgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKQomIzQzOyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7SUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmUKJiM0Mzt3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXIKJiM0MztnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS4KJiM0MzsKJiM0MztUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2RlcwomIzQzO3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb24KJiM0MztLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuCiYjNDM7CiYjNDM7OjoKJiM0MzsKJiM0MzsgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHsKJiM0MzsJX191NjQJc2l6ZTsJCQkvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovCiYjNDM7CV9fdTY0CWZsYWdzOwkJCS8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi8KJiM0MzsJX191NjQJY29tcGF0X2NhcGFiaWxpdGllczsJLyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqLwomIzQzOyAgfTsKJiM0MzsKJiM0MztCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvCiYjNDM7YGBzaXplb2Yoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMpYGAgYW5kIHplcm8gdGhlIGBgZmxhZ3NgYCBmaWVsZC4KJiM0MztUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudAomIzQzO3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlCiYjNDM7ZmllbGQgYXZhaWxhYmxlIGZvciBmdXR1cmUgdXNlIHdpdGhvdXQgQUJJIGFtYmlndWl0eS4KJiM0MzsKJiM0MztUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGAKJiM0Mzt0byBzdXBwb3J0IGV4dGVuc2libGUgdmVyc2lvbmluZzogaWYgdXNlcnNwYWNlIHBhc3NlcyBhIHN0cnVjdCBzbWFsbGVyCiYjNDM7dGhhbiB0aGUgY3VycmVudCBrZXJuZWwgdmVyc2lvbiAoYGBzaXplICZndDs9IEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGApLAomIzQzO3RoZSBrZXJuZWwgemVyby1wYWRzIHVua25vd24gdHJhaWxpbmcgZmllbGRzLiBJZiB1c2Vyc3BhY2UgcGFzc2VzIGEgbGFyZ2VyCiYjNDM7c3RydWN0IChgYHNpemUgJmd0OyBzaXplb2Yoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMpYGApLCB0aGUga2VybmVsIHdyaXRlcwomIzQzO2JhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBhbmQgcmV0dXJucyBgYC1FMkJJR2BgLAomIzQzO2FsbG93aW5nIHVzZXJzcGFjZSB0byBkaXNjb3ZlciB0aGUga2VybmVsJiMzOTtzIHN0cnVjdCBzaXplIGFuZCByZXRyeS4KJiM0MztgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZQomIzQzO3NpemUgb2YgdGhlIGluaXRpYWwgc3RydWN0IHZlcnNpb24uCiYjNDM7CiYjNDM7VGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5CiYjNDM7bW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0LiBUaGUgZm9sbG93aW5nIGJpdHMgaW5kaWNhdGUgc3VwcG9ydCBmb3Igc3BlY2lmaWMKJiM0Mztwcm9jZXNzb3IgbW9kZXMgKHVzaW5nIElCTSYjMzk7cyBNU0ItMCBjb252ZW50aW9uIHdoZXJlIGJpdCAwIGlzIHRoZSBtb3N0CiYjNDM7c2lnbmlmaWNhbnQgYml0KToKJiM0MzsKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICAoYml0IDEpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjkgcHJvY2Vzc29yIG1vZGUKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlCiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZQomIzQzOwomIzQzOy4uIG5vdGU6OgomIzQzOwomIzQzOyAgIFRoZSBiaXQgbnVtYmVyaW5nIGFib3ZlIHVzZXMgSUJNJiMzOTtzIE1TQi0wIGNvbnZlbnRpb24gKGJpdCAwIGlzIHRoZSBtb3N0CiYjNDM7ICAgc2lnbmlmaWNhbnQgYml0KS4gSW4gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgdGhlc2UgYXJlIGRlZmluZWQgYXM6CiYjNDM7CiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgPSBgYCgxVUxMICZsdDsmbHQ7IDYyKWBgCiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMICZsdDsmbHQ7IDYxKWBgCiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgPSBgYCgxVUxMICZsdDsmbHQ7IDYwKWBgCiYjNDM7CiYjNDM7ICAgVXNlcnNwYWNlIHNob3VsZCB1c2UgdGhlIGRlZmluZWQgY29uc3RhbnRzIGZyb20gYGAmbHQ7bGludXgva3ZtLmgmZ3Q7YGAgcmF0aGVyCiYjNDM7ICAgdGhhbiBoYXJkY29kaW5nIGJpdCBwb3NpdGlvbnMuCiYjNDM7CiAuLiBfa3ZtX3J1bjoKIAogNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAppbmRleCAwOTUzZjJkYWE0NjYwZi4uMTY5ZWE2YTdmYmFkNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaApAQCAtMzE5LDYgJiM0MzszMTksNyBAQCBzdHJ1Y3Qga3ZtcHBjX29wcyB7CiAJYm9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpOwogCWludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pOwogCWludCAoKmNyZWF0ZV92Y3B1X2RlYnVnZnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnkpOwomIzQzOwlpbnQgKCpnZXRfY29tcGF0X2NhcHMpKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBrdm1wcGNfb3BzICprdm1wcGNfaHZfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAppbmRleCAwNzdjNTQzN2Y1MjE5Yi4uOTEzYTY0YjkwMWEzZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC00MzcsNiAmIzQzOzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7CiAJX191NjQJYmVoYXZpb3VyX21hc2s7CQkvKiB2YWxpZCBiaXRzIGluIGJlaGF2aW91ciAqLwogfTsKIAomIzQzOy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqLwomIzQzO3N0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHsKJiM0MzsJX191NjQJc2l6ZTsJCQkvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovCiYjNDM7CV9fdTY0CWZsYWdzOwkJCS8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiYjNDM7CV9fdTY0CWNvbXBhdF9jYXBhYmlsaXRpZXM7CS8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi8KJiM0Mzt9OwomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjAJMjQgLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENhcGFiaWxpdHkgYml0cyBmb3IgY29tcGF0X2NhcGFiaWxpdGllcyBmaWVsZCBpbiBrdm1fcHBjX2NvbXBhdF9jYXBzLgomIzQzOyAqIFRoZXNlIGJpdHMgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgbW9kZXMgYXJlIHN1cHBvcnRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjkJKDFVTEwgJmx0OyZsdDsgNjIpCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMAkoMVVMTCAmbHQ7Jmx0OyA2MSkKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExCSgxVUxMICZsdDsmbHQ7IDYwKQomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQklUTUFTSwkJKEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjkgfCBcCiYjNDM7CQkJCQkgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTAgfCBcCiYjNDM7CQkJCQkgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpCiAvKgogICogVmFsdWVzIGZvciBjaGFyYWN0ZXIgYW5kIGNoYXJhY3Rlcl9tYXNrLgogICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCmluZGV4IDYxZGJlZWEzMTdmM2I3Li43MGRjZDM3MGZkOWFjNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCkBAIC02NTEwLDYgJiM0Mzs2NTEwLDYzIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjb25zdCBfX2JlMzIgY3B1X3ZlcnNpb24sCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoY3B1X3ZlcnNpb24pIHsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMV9QMTE6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgUFZSX0FSQ0hfMzE6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgUFZSX0FSQ0hfMzAwOgomIzQzOwkJKmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwomIzQzOwl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllcyA9IDA7CiYjNDM7CWNvbnN0IF9fYmUzMiAqcHJvcCA9IE5VTEw7CiYjNDM7CWxvbmcgcmMgPSAtRUlOVkFMOwomIzQzOwl1MzIgY3B1X3ZlcnNpb247CiYjNDM7CiYjNDM7CWlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHsKJiM0MzsJCWlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7CiYjNDM7CQkJV0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTsKJiM0MzsJCQljYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzOwomIzQzOwkJCXJjID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAmIzM0O2NwdSYjMzQ7KSB7CiYjNDM7CQkJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICYjMzQ7Y3B1LXZlcnNpb24mIzM0OywgTlVMTCk7CiYjNDM7CQkJCWlmIChwcm9wKSB7CiYjNDM7CQkJCQljcHVfdmVyc2lvbiA9IGJlMzJfdG9fY3B1cChwcm9wKTsKJiM0MzsJCQkJCW9mX25vZGVfcHV0KG5wKTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwkJCWlmICghcHJvcCkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sCiYjNDM7CQkJCQkJCSAgICAmYW1wO2NhcGFiaWxpdGllcyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJaG9zdF9jYXBzLSZndDtjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzICZhbXA7IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHsKIAkuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsCiAJLnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LApAQCAtNjU1Miw2ICYjNDM7NjYwOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0gewogCS5oYXNoX3YzX3Bvc3NpYmxlID0ga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUsCiAJLmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LAogCS5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LAomIzQzOwkuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcywKIH07CiAKIHN0YXRpYyBpbnQga3ZtX2luaXRfc3ViY29yZV9iaXRtYXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKaW5kZXggMDAzMDIzOTlmYzM3YjQuLjhkNjYzMmM2NGNhNWY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwpAQCAtNjk3LDYgJiM0Mzs2OTcsMTMgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dCkKIAkJCX0KIAkJfQogCQlicmVhazsKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSkKJiM0MzsJY2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzoKJiM0MzsJCXIgPSAwOwomIzQzOwkJaWYgKGt2bWh2X29uX3BzZXJpZXMoKSkKJiM0MzsJCQlyID0gMTsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqLwogCWRlZmF1bHQ6CiAJCXIgPSAwOwogCQlicmVhazsKQEAgLTI0NjMsNiAmIzQzOzI0NzAsNzAgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0ga3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O3N2bV9vZmYoa3ZtKTsKIAkJYnJlYWs7CiAJfQomIzQzOwljYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7CiYjNDM7CQlzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTsKJiM0MzsJCXU2NCB1c2l6ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci4KJiM0MzsJCSAqIHNpemUgbXVzdCBiZSB0aGUgZmlyc3QgZmllbGQgb2YgdGhlIHN0cnVjdC4KJiM0MzsJCSAqLwomIzQzOwkJciA9IC1FRkFVTFQ7CiYjNDM7CQlpZiAoZ2V0X3VzZXIodXNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBFbmZvcmNlIGEgbWluaW11bTogcmVqZWN0IGJ1ZmZlcnMgc21hbGxlciB0aGFuIHRoZSBpbml0aWFsCiYjNDM7CQkgKiBzdHJ1Y3QgdmVyc2lvbiAoVkVSMCkuIFRoaXMgYWxsb3dzIG9sZCB1c2Vyc3BhY2UgY29tcGlsZWQKJiM0MzsJCSAqIGFnYWluc3QgdGhlIG9yaWdpbmFsIHN0cnVjdCB0byBzdGlsbCB3b3JrIG9uIGEgbmV3ZXIga2VybmVsCiYjNDM7CQkgKiB0aGF0IGhhcyBncm93biB0aGUgc3RydWN0IHdpdGggYXBwZW5kZWQgZmllbGRzLgomIzQzOwkJICovCiYjNDM7CQlyID0gLUVJTlZBTDsKJiM0MzsJCWlmICh1c2l6ZSAmbHQ7IEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIE5ldyB1c2Vyc3BhY2Ugd2l0aCBhIGxhcmdlciBzdHJ1Y3QgY2FsbGVkIGFuIG9sZGVyIGtlcm5lbC4KJiM0MzsJCSAqIFdyaXRlIGJhY2sga3NpemUgaW4gaG9zdF9jYXBzLnNpemUgc28gdXNlcnNwYWNlIGtub3dzIHdoaWNoCiYjNDM7CQkgKiBvbGRlciBzdHJ1Y3QgdG8gcmV0cnkgd2l0aCwgdGhlbiBmYWlsIHdpdGggLUUyQklHLgomIzQzOwkJICovCiYjNDM7CQlpZiAodXNpemUgJmd0OyBzaXplb2YoaG9zdF9jYXBzKSkgewomIzQzOwkJCWhvc3RfY2Fwcy5zaXplID0gc2l6ZW9mKGhvc3RfY2Fwcyk7CiYjNDM7CQkJciA9IC1FRkFVTFQ7CiYjNDM7CQkJaWYgKHB1dF91c2VyKGhvc3RfY2Fwcy5zaXplLCAoX191NjQgX191c2VyICopYXJncCkpCiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwkJCXIgPSAtRTJCSUc7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDoKJiM0MzsJCSAqICAgdXNpemUgPT0ga3NpemU6IHZlcmJhdGltIGNvcHkKJiM0MzsJCSAqICAgdXNpemUgJmx0OyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKQomIzQzOwkJICovCiYjNDM7CQlyID0gY29weV9zdHJ1Y3RfZnJvbV91c2VyKCZhbXA7aG9zdF9jYXBzLCBzaXplb2YoaG9zdF9jYXBzKSwKJiM0MzsJCQkJCSAgYXJncCwgdXNpemUpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQkvKiBSZXNlcnZlZCBmaWVsZHMgbXVzdCBiZSB6ZXJvICovCiYjNDM7CQlyID0gLUVJTlZBTDsKJiM0MzsJCWlmIChob3N0X2NhcHMuZmxhZ3MpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlyID0gLUVOT1RUWTsKJiM0MzsJCWlmICgha3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O2dldF9jb21wYXRfY2FwcykKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXIgPSBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzKCZhbXA7aG9zdF9jYXBzKTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJaG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTsKJiM0MzsJCXIgPSBjb3B5X3N0cnVjdF90b191c2VyKGFyZ3AsIHVzaXplLCAmYW1wO2hvc3RfY2FwcywKJiM0MzsJCQkJCXNpemVvZihob3N0X2NhcHMpLCBOVUxMKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiAJZGVmYXVsdDogewogCQlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLSZndDtwcml2YXRlX2RhdGE7CiAJCXIgPSBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7YXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAppbmRleCA0MTkwMTEwOTdmYThlMi4uMWNmOWE5NTk2NjllOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHsKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0NwogI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5CiYjNDM7I2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTAKIAogc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHsKIAlfX3UzMiBpcnFjaGlwOwpAQCAtMTM1MCw2ICYjNDM7MTM1MSw5IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7CiAjZGVmaW5lIEtWTV9HRVRfREVWSUNFX0FUVFIJICBfSU9XKEtWTUlPLCAgMHhlMiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0cikKICNkZWZpbmUgS1ZNX0hBU19ERVZJQ0VfQVRUUgkgIF9JT1coS1ZNSU8sICAweGUzLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyKQogCiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi8KJiM0MzsjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTCV9JTyhLVk1JTywgIDB4ZTQpCiYjNDM7CiAvKgogICogaW9jdGxzIGZvciB2Y3B1IGZkcwogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgUG93ZXJQQyBLVk0gQ29tcGF0aWJpbGl0eSBDYXBhYmlsaXRpZXMgSW9jdGwqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDLiBJdCBsb29rcyBsaWtlIHRoZSBpb2N0bCYjMzk7cyBoYW5kbGluZyBpcyBuZWF0bHkgdHVja2VkIGF3YXkgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCB3aXRoaW4gdGhlIGBrdm1fYXJjaF92bV9pb2N0bGAgZnVuY3Rpb24uIEZyb20gdGhlcmUsIGl0IGRpdmVzIGludG8gYGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHMoJmFtcDtob3N0X2NhcHMpYC4gQW5kIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCwgcmVzaWRlcyBpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGEgbmV3IGlvY3RsLCBuaWNlbHkgaW1wbGVtZW50ZWQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIG5hdHVyYWxseSwgJiMzNDtJcyBpdCBmdW5jdGlvbmFsPyYjMzQ7IEdpdmVuIGl0JiMzOTtzIGEgbmV3IGlvY3RsLCBpdCBzaG91bGQgYmUgcmVhY2hhYmxlIGlmIHNvbWVvbmUgaXMgdXNpbmcgS1ZNIG9uIFBvd2VyUEMsIGFzc3VtaW5nIHRoZSBjb2RlIHBhdGggaXMgY29ycmVjdGx5IHdpcmVkIHVwLiBCdXQgdGhhdCBsZWFkcyB0byB0aGUgbmV4dCBxdWVzdGlvbjogd2hhdCBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IENvdWxkIHdlIHJlYWNoIGl0IHRocm91Z2ggUUVNVT8gWWVzLCBLVk0gaXMgYWJzb2x1dGVseSBmdXp6YWJsZSBpbiBRRU1VLiBTeXprYWxsZXIgaXMgYSBmYW50YXN0aWMgdG9vbCBmb3IgdGhhdC4gQnV0IGRvZXMgU3l6a2FsbGVyICpzcGVjaWZpY2FsbHkqIHN1cHBvcnQgS1ZNIGZ1enppbmcgb24gUG93ZXJQQz8gSSBrbm93IGl0JiMzOTtzIHdpZGVseSB1c2VkIG9uIHg4NiwgYnV0IFBvd2VyUEMgc3VwcG9ydC4uLiB0aGF0JiMzOTtzIHRoZSBrZXkuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHdlIG5lZWQgdG8gYmUgYXdhcmUgb2YuIFRoZSBwYXRjaCB0b3VjaGVzIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AgYW5kIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYCwgYW5kIHRoZSBpb2N0bCBpcywgb2YgY291cnNlLCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IGBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAgaXMgY2hlY2tlZCBpbiBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAuIE9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AgdG8gc2VlIHdoYXQgb3RoZXIgY29uZmlncyBtaWdodCBiZSByZWxldmFudCBhbmQgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSBwaWVjZXMgaW4gcGxhY2UgZm9yIHByb3BlciBmdXp6aW5nLiBHb3R0YSBtYWtlIHN1cmUgd2UgY292ZXIgYWxsIG91ciBiYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fQk9PSzNTX0hWX1BPU1NJQkxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTM4PWNvbmZpZyBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQxLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYyPWNvbmZpZyBLVk1fQk9PSzNTXzY0XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTY2LVx0c2VsZWN0IEtWTVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjY3Olx0c2VsZWN0IEtWTV9CT09LM1NfUFJfUE9TU0lCTEUgaWYgIUtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02OC1cdHNlbGVjdCBQUENfNjRTX0hBU0hfTU1VXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTc5PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgxLVx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTXzY0IFx1MDAyNlx1MDAyNiBQUENfUE9XRVJOVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjgyOlx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04My1cdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BNVVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xMjk9Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMS1cdHNlbGVjdCBLVk1fQk9PSzNTX0hWX0VYSVRfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTMyOlx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMy1cdGhlbHBcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTQyPWNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDQtXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE0NTpcdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRSBcdTAwMjZcdTAwMjYgREVCVUdfRlMgXHUwMDI2XHUwMDI2ICFLVk1fQk9PSzNTX0hWX1A5X1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0Ni1cdGhlbHBcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTU3PWNvbmZpZyBLVk1fQk9PSzNTX0hWX05FU1RFRF9QTVVfV09SS0FST1VORFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7TmVzdGVkIEwwIGhvc3Qgd29ya2Fyb3VuZCBmb3IgTDEgS1ZNIGhvc3QgUE1VIGhhbmRsaW5nIGJ1Z1wmIzM0OyBpZiBFWFBFUlRcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTk6XHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNjAtXHRkZWZhdWx0ICFFWFBFUlRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MjUxPWNvbmZpZyBLVk1fWElWRVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTMtXHRkZWZhdWx0IHlcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTQ6XHRkZXBlbmRzIG9uIEtWTV9YSUNTIFx1MDAyNlx1MDAyNiBQUENfWElWRV9OQVRJVkUgXHUwMDI2XHUwMDI2IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTUtXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZT03OD1rdm0tYm9vazNzXzY0LWJ1aWx0aW4tdG0tb2Jqcy0kKENPTkZJR19QUENfVFJBTlNBQ1RJT05BTF9NRU0pICYjNDM7PSBcXFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtODAtXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjgxOmlmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTgyLWt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgJiM0Mzs9IFxcXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUz0zNj1rdm1wcGNfaGNhbGw6XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TOjM3OiNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUy0zOC1cdGxielx0cjEwLEhTVEFURV9JTl9HVUVTVChyMTMpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUz02Nz1rdm1wcGNfaW50ZXJydXB0OlxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUzo2ODojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtNjktXHRzdGRcdHIxMCxIU1RBVEVfU0NSQVRDSDAocjEzKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM9OTI9RU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfSEFTX1BQUilcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTExNC0uTG5vX3NraXA6XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TOjExNTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTE2LSNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTUzLVx0YmVxXHQxZlxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUzoxNTQ6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTE1NS1cdC8qIEhTUlIgaW50ZXJydXB0cyBnZXQgMiBhZGRlZCB0byBpbnRlcnJ1cHQgbnVtYmVyICovXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUy0xNjYtXHRSRklfVE9fS0VSTkVMXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TOjE2NzojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTY4LTI6XHRtZnNwclx0cjksU1BSTl9IU1JSMFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTc2LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUzoxNzc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTE3OC1cbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19leHBvcnRzLmMtMTItXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19leHBvcnRzLmM6MTM6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19leHBvcnRzLmMtMTQtRVhQT1JUX1NZTUJPTF9HUEwoa3ZtcHBjX2h2X2VudHJ5X3RyYW1wb2xpbmUpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3hpY3MuYz0xNDAwPXN0YXRpYyBpbnQga3ZtcHBjX3hpY3NfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3hpY3MuYy0xNDE5LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfeGljcy5jOjE0MjA6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmMtMTQyMS1cdGlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9BUkNIXzIwNikgXHUwMDI2XHUwMDI2XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfeGljcy5jLTE0MjYtXHR9XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmM6MTQyNzojZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3hpY3MuYy0xNDI4LVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTUwMj1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTU4Ni0jZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM1NfNjQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjU4NzojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTU4OC1cdGNhc2UgS1ZNX0NBUF9QUENfU01UOlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY1OC0jZW5kaWZcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjY1OTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY2MC1cdGNhc2UgS1ZNX0NBUF9QUENfRldOTUk6XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjY5LSNlbmRpZlxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6NjcwOiNpZiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFKVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjcxLVx0Y2FzZSBLVk1fQ0FQX1BQQ19TRUNVUkVfR1VFU1Q6XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjk5LVx0XHRicmVhaztcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwMDojaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwMS1cdGNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzA1LVx0XHRicmVhaztcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwNjojZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwNy1cdGRlZmF1bHQ6XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9MTEzND1zdGF0aWMgdm9pZCBrdm1wcGNfY29tcGxldGVfbW1pb19sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xMjMwLSNlbmRpZlxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MTIzMTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTEyMzItXHRjYXNlIEtWTV9NTUlPX1JFR19ORVNURURfR1BSOlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTE4ODY9c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xOTg2LSNlbmRpZiAvKiBDT05GSUdfS1ZNX1hJVkUgKi9cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjE5ODc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xOTg4LVx0Y2FzZSBLVk1fQ0FQX1BQQ19GV05NSTpcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xOTk0LVx0XHRicmVhaztcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjE5OTU6I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xOTk2LVx0ZGVmYXVsdDpcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz0yMTY5PWludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjIxMi0jZW5kaWZcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjIyMTM6I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yMjE0LVx0Y2FzZSBLVk1fQ0FQX1BQQ19TRUNVUkVfR1VFU1Q6XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS90bS5TPTMxPV9HTE9CQUwoX19rdm1wcGNfc2F2ZV90bSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3RtLlMtNzQtMzpcbmFyY2gvcG93ZXJwYy9rdm0vdG0uUzo3NTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vdG0uUy03Ni1CRUdJTl9GVFJfU0VDVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTIG9uIFBvd2VyUEMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIEkgc2VlIHRoYXQgYENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFYCBpcyB0aGUga2V5IGhlcmUsIGFuZCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgLCB3aGljaCBpbiB0dXJuIGhpbmdlcyBvbiBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBQb3dlck5WIGh5cGVydmlzb3Itc3BlY2lmaWMgY2FwYWJpbGl0eSBjaGVjay4gSSBzaG91bGQgdmVyaWZ5IHRoZSBjYWxsIGNoYWluLgoKVGhlIGlvY3RsIGl0c2VsZiwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgaXMgaW1wbGVtZW50ZWQgYnkgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCByZXNpZGluZyBpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqLiBJIHRyYWNlIHRoZSBpb2N0bCBoYW5kbGluZyB0aHJvdWdoIGBrdm1fYXJjaF92bV9pb2N0bGAgd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AuIEl0IGxvb2tzIGxpa2UgaXQgZGVsZWdhdGVzIHRvIGBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzYCwgYW5kIEkgY2FuIHNlZSBpbiBgYm9vazNzX2h2LmNgIHRoYXQgYGt2bV9vcHNfaHZgIHNldHMgYC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gR29vZCwgc28gdGhlIHBhdGggaXMgY2xlYXIuIEl0ICppcyogcmVhY2hhYmxlLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50OiBjYW4gdGhpcyBiZSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBJdCYjMzk7cyBlYXN5IHRvIGZvcmdldCB0aGF0IG5vdCBldmVyeXRoaW5nIGlzIHRlc3RhYmxlLiBCdXQgS1ZNIG9uIFBvd2VyUEMgKmNhbiogYmUgcnVuIGluIFFFTVUsIHNwZWNpZmljYWxseSBgcWVtdS1zeXN0ZW0tcHBjNjRgLiBUaGF0JiMzOTtzIGEgaHVnZSB3aW4uIEFuZCBpZiBTeXprYWxsZXIgc3VwcG9ydHMgYHFlbXUtc3lzdGVtLXBwYzY0YCwgdGhlbiB0aGF0IG9wZW5zIHRoZSBkb29yIGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgc28gd2UgY2FuIGJ1aWxkIGEgcHJvcGVyIHRlc3QgY2FzZS4gSSBuZWVkIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCwgYW5kIGBDT05GSUdfUFBDX1BPV0VSTlZgLiBJIHNob3VsZCBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZSBpbiBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIGJ1dCBJJiMzOTttIGZlZWxpbmcgY29uZmlkZW50IGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9CT09LM1NfNjRfSFYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NjI9Y29uZmlnIEtWTV9CT09LM1NfNjRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIEtWTSBvbiBQb3dlclBDOgoKKipBbmFseXppbmcgdGhlIEtWTSBCb29rM1MgSHlwZXJ2aXNvciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgS1ZNX0JPT0szU182NF9IVmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUsIHRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGhvdyB0aGlzIGh5cGVydmlzb3Igd29ya3MsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBjb21wYXRpYmlsaXR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgZnVuY3Rpb24gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHdpdGhpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29kZSB0aGF0IGRlZmluZXMgd2hhdCBjYXBhYmlsaXRpZXMgYXJlIGV4cG9zZWQgdG8gZ3Vlc3RzLiBVbmRlcnN0YW5kaW5nIGhvdyBjb21wYXRpYmlsaXR5IGlzIGhhbmRsZWQgYXQgdGhpcyBsZXZlbCBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBndWVzdCBPU2VzIGFuZCBhcHBsaWNhdGlvbnMgZnVuY3Rpb24gYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBzZWUgaG93IGl0IGhhbmRsZXMgZmVhdHVyZSBuZWdvdGlhdGlvbi4gVGhpcyBmdW5jdGlvbiBwcm9iYWJseSBjb250YWlucyB0aGUgbG9naWMgZm9yIHJlcG9ydGluZyB0aGUgc3VwcG9ydGVkIGluc3RydWN0aW9uIHNldCwgcmVnaXN0ZXIgYXZhaWxhYmlsaXR5LCBhbmQgb3RoZXIgaHlwZXJ2aXNvciBmZWF0dXJlcywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MTM9c3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY29uc3QgX19iZTMyIGNwdV92ZXJzaW9uLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUzMi1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjUzMzpzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUzNC17XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTcwPXN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjYxMS1cdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NjEyOlx0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2MTMtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNL1BQQyBDb21wYXRpYmlsaXR5IENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBiZWluZyBjYWxsZWQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBUaGlzIG1lYW5zIHRoZSBjb3JyZXNwb25kaW5nIGlvY3RsIGlzIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AsIHVuZGVyc3Rvb2QuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBgS1ZNX0JPT0szU182NF9IVmAsIGFzIHRoYXQmIzM5O3MgZGlyZWN0bHkgcmVsZXZhbnQgdG8gdGhlIGNvbXBhdGliaWxpdHkgY2hlY2tzLgoKQWgsIHJpZ2h0LCBidXQgSSBoYXZlIHRvIHJlbWVtYmVyIHRoZSBkZXBlbmRlbmNpZXMuIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBjb25kaXRpb25hbDsgaXQgcmVsaWVzIG9uIGJvdGggYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgIGJlaW5nIHNldC4gU28sIHRoZSBjb3JyZWN0IGFjdGlvbiBoZXJlIGlzIHRvIGFkZCBgS1ZNX0JPT0szU182NF9IVmAgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGFjdGl2YXRlIHRoaXMgcGFydGljdWxhciBzZXQgb2YgZmVhdHVyZXMuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYSBiaXQgYW5kIGNoZWNrIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwgbWFwcGluZyBsb2dpYyBpcyBkb25lLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjQ5MD1zdGF0aWMgYm9vbCBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUxMi1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjUxMzpzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjb25zdCBfX2JlMzIgY3B1X3ZlcnNpb24sXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1MTQtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nICpjYXBhYmlsaXRpZXMpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTMzPXN0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU1Ni1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NTU3Olx0XHRcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTU4LVx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUG93ZXJQQyBJb2N0bCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGludm9sdmUgZnVuY3Rpb25zIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AgZm9yIHRoZSBgRm9jdXNTeW1ib2xzYC4gTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQuIEFoLCByaWdodC4gSXQgbG9va3MgbGlrZSB0aGUgaW9jdGwgaGFuZGxpbmcgaXMgZGVsZWdhdGVkIHRvIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYC4gSG93ZXZlciwgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBwcmV0dHkgZ2VuZXJpYywgaXQgbG9va3MgbGlrZSwgc28gSSBzaG91bGQgcmVhbGx5IGtlZXAgbXkgZm9jdXMgb24gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLgoKSG9sZCBvbi4gVGhlIGlvY3RsIGl0c2VsZiBpcyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLiBHb3QgaXQuIFNvLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGlvY3RsIHRvIHRoZSBLVk0gaW50ZXJmYWNlIG9uIFBvd2VyUEMuIFRoYXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlJiMzOTtkIHdhbnQgdG8gZnV6eiB0aG9yb3VnaGx5LiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hpY2ggY29uZmlnIGVuYWJsZXMgdGhpcy4KClJpZ2h0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBpbXBvcnRhbnQuIEkgcmVtZW1iZXIgYEtWTV9CT09LM1NfNjRfSFZgIGVuYWJsZXMgYGJvb2szc19odi5jYC4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0byBjb25zaWRlcj8gTGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZWAgYW5kIHNlZSBpZiBhbnl0aGluZyBlbHNlIGlzIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib29rM3NfaHYubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjI9a3ZtLWh2LXkgJiM0Mzs9IFxcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjYzOlx0Ym9vazNzX2h2Lm8gXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjQtXHRib29rM3NfaHZfaW50ZXJydXB0cy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTk2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gYSB0ZWNobmljYWwgZmllbGQ6CgoqKkludmVzdGlnYXRpbmcgYGt2bS1odi15YCYjMzk7cyBQdXJwb3NlKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnl0aGluZyBkZWVwZXIsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgYGt2bS1odi15YCAqaXMqLiBJIGNhbiYjMzk7dCBwcm9jZWVkIGVmZmVjdGl2ZWx5IHVudGlsIEkga25vdyB3aGF0IGl0JiMzOTtzIGFzc2lnbmVkIHRvLiBJcyBpdCBhIG1vZHVsZSwgYSB2aXJ0dWFsIG1hY2hpbmUgSUQsIGEgaHlwZXJ2aXNvciBzZXR0aW5nLCBhIGRldmljZT8gV2l0aG91dCBrbm93aW5nIGl0cyBmdW5kYW1lbnRhbCByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLCBhbnkgZnVydGhlciBhbmFseXNpcyBpcyBqdXN0IGd1ZXNzd29yay4gVGltZSB0byBnbyBsb29raW5nIGZvciBpdHMgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdmFyaWFibGUmIzM5O3MgYXNzaWdubWVudCBhbmQgdW5kZXJzdGFuZCBpdHMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtLWh2LXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlPTYwPWVuZGlmXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTYxLVxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZTo2Mjprdm0taHYteSAmIzQzOz0gXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjMtXHRib29rM3NfaHYubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBNYWtlZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGNoYW5nZXMsIHNvIGEgbGluZS1ieS1saW5lIHJldmlldyBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGV2ZXJ5IHRhcmdldCwgZXZlcnkgZGVwZW5kZW5jeSwgZXZlcnkgY29tbWFuZCwgZXZlcnkgdmFyaWFibGUsIGFuZCBldmVyeSBpbmNsdWRlLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHNwb3R0aW5nIG9idmlvdXMgZXJyb3JzLCBidXQgYWJvdXQgZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgaW50ZW5kZWQgYmVoYXZpb3IuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGludGVyY29ubmVjdGVkLCBzbyBJIGNhbiBwcmVkaWN0IHRoZSBpbXBhY3RzIG9mIGFueSBtb2RpZmljYXRpb25zLiBUaGlzIGlzIGFib3V0IGVuc3VyaW5nIEkgZG9u4oCZdCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIGRvd24gdGhlIGxpbmUuIEEgaG9saXN0aWMgdmlldyBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgbW9kdWxlXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNjZmxhZ3MteSA6PSAtSXZpcnQva3ZtIC1JYXJjaC9wb3dlcnBjL2t2bVxuICAgNzpcdFxuICAgODpcdGluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cbiAgIDk6XHRcbiAgMTA6XHRjb21tb24tb2Jqcy15ICYjNDM7PSBwb3dlcnBjLm8gZW11bGF0ZV9sb2Fkc3RvcmUub1xuICAxMTpcdG9iai0kKENPTkZJR19LVk1fRVhJVF9USU1JTkcpICYjNDM7PSB0aW1pbmcub1xuICAxMjpcdG9iai0kKENPTkZJR19LVk1fQk9PSzNTX0hBTkRMRVIpICYjNDM7PSBib29rM3NfZXhwb3J0cy5vXG4gIDEzOlx0XG4gIDE0Olx0QUZMQUdTX2Jvb2tlX2ludGVycnVwdHMubyA6PSAtSSQob2JqdHJlZSkvJChvYmopXG4gIDE1Olx0XG4gIDE2Olx0a3ZtLWU1MDAtb2JqcyA6PSBcXFxuICAxNzpcdFx0JChjb21tb24tb2Jqcy15KSBcXFxuICAxODpcdFx0ZW11bGF0ZS5vIFxcXG4gIDE5Olx0XHRib29rZS5vIFxcXG4gIDIwOlx0XHRib29rZV9lbXVsYXRlLm8gXFxcbiAgMjE6XHRcdGJvb2tlX2ludGVycnVwdHMubyBcXFxuICAyMjpcdFx0ZTUwMC5vIFxcXG4gIDIzOlx0XHRlNTAwX21tdS5vIFxcXG4gIDI0Olx0XHRlNTAwX21tdV9ob3N0Lm8gXFxcbiAgMjU6XHRcdGU1MDBfZW11bGF0ZS5vXG4gIDI2Olx0a3ZtLW9ianMtJChDT05GSUdfS1ZNX0U1MDBWMikgOj0gJChrdm0tZTUwMC1vYmpzKVxuICAyNzpcdFxuICAyODpcdGt2bS1lNTAwbWMtb2JqcyA6PSBcXFxuICAyOTpcdFx0JChjb21tb24tb2Jqcy15KSBcXFxuICAzMDpcdFx0ZW11bGF0ZS5vIFxcXG4gIDMxOlx0XHRib29rZS5vIFxcXG4gIDMyOlx0XHRib29rZV9lbXVsYXRlLm8gXFxcbiAgMzM6XHRcdGJvb2tlaHZfaW50ZXJydXB0cy5vIFxcXG4gIDM0Olx0XHRlNTAwbWMubyBcXFxuICAzNTpcdFx0ZTUwMF9tbXUubyBcXFxuICAzNjpcdFx0ZTUwMF9tbXVfaG9zdC5vIFxcXG4gIDM3Olx0XHRlNTAwX2VtdWxhdGUub1xuICAzODpcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9FNTAwTUMpIDo9ICQoa3ZtLWU1MDBtYy1vYmpzKVxuICAzOTpcdFxuICA0MDpcdGt2bS1wci15IDo9IFxcXG4gIDQxOlx0XHRmcHUubyBcXFxuICA0MjpcdFx0ZW11bGF0ZS5vIFxcXG4gIDQzOlx0XHRib29rM3NfcGFpcmVkX3NpbmdsZXMubyBcXFxuICA0NDpcdFx0Ym9vazNzX3ByLm8gXFxcbiAgNDU6XHRcdGJvb2szc19wcl9wYXByLm8gXFxcbiAgNDY6XHRcdGJvb2szc19lbXVsYXRlLm8gXFxcbiAgNDc6XHRcdGJvb2szc19pbnRlcnJ1cHRzLm8gXFxcbiAgNDg6XHRcdGJvb2szc19tbXVfaHB0ZS5vIFxcXG4gIDQ5Olx0XHRib29rM3NfNjRfbW11X2hvc3QubyBcXFxuICA1MDpcdFx0Ym9vazNzXzY0X21tdS5vIFxcXG4gIDUxOlx0XHRib29rM3NfMzJfbW11Lm9cbiAgNTI6XHRcbiAgNTM6XHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIpICYjNDM7PSBcXFxuICA1NDpcdFx0Ym9vazNzXzY0X2VudHJ5Lm8gXFxcbiAgNTU6XHRcdHRtLm9cbiAgNTY6XHRcbiAgNTc6XHRpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuICA1ODpcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgJiM0Mzs9IFxcXG4gIDU5Olx0XHRib29rM3Nfcm1oYW5kbGVycy5vXG4gIDYwOlx0ZW5kaWZcbiAgNjE6XHRcbiAgNjI6XHRrdm0taHYteSAmIzQzOz0gXFxcbiAgNjM6XHRcdGJvb2szc19odi5vIFxcXG4gIDY0Olx0XHRib29rM3NfaHZfaW50ZXJydXB0cy5vIFxcXG4gIDY1Olx0XHRib29rM3NfNjRfbW11X2h2Lm8gXFxcbiAgNjY6XHRcdGJvb2szc182NF9tbXVfcmFkaXgubyBcXFxuICA2NzpcdFx0Ym9vazNzX2h2X25lc3RlZC5vXG4gIDY4Olx0XG4gIDY5Olx0a3ZtLWh2LSQoQ09ORklHX1BQQ19VVikgJiM0Mzs9IFxcXG4gIDcwOlx0XHRib29rM3NfaHZfdXZtZW0ub1xuICA3MTpcdFxuICA3MjpcdGt2bS1odi0kKENPTkZJR19QUENfVFJBTlNBQ1RJT05BTF9NRU0pICYjNDM7PSBcXFxuICA3MzpcdFx0Ym9vazNzX2h2X3RtLm9cbiAgNzQ6XHRcbiAgNzU6XHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4teGljcy1vYmpzLSQoQ09ORklHX0tWTV9YSUNTKSA6PSBcXFxuICA3NjpcdFx0Ym9vazNzX2h2X3JtX3hpY3Mub1xuICA3NzpcdFxuICA3ODpcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi10bS1vYmpzLSQoQ09ORklHX1BQQ19UUkFOU0FDVElPTkFMX01FTSkgJiM0Mzs9IFxcXG4gIDc5Olx0XHRib29rM3NfaHZfdG1fYnVpbHRpbi5vXG4gIDgwOlx0XG4gIDgxOlx0aWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbiAgODI6XHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIpICYjNDM7PSBcXFxuICA4MzpcdFx0Ym9vazNzX2h2X2htaS5vIFxcXG4gIDg0Olx0XHRib29rM3NfaHZfcDlfZW50cnkubyBcXFxuICA4NTpcdFx0Ym9vazNzX2h2X3JtaGFuZGxlcnMubyBcXFxuICA4NjpcdFx0Ym9vazNzX2h2X3JtX21tdS5vIFxcXG4gIDg3Olx0XHRib29rM3NfaHZfcmFzLm8gXFxcbiAgODg6XHRcdGJvb2szc19odl9idWlsdGluLm8gXFxcbiAgODk6XHRcdGJvb2szc19odl9wOV9wZXJmLm8gXFxcbiAgOTA6XHRcdGJvb2szc19odl9uZXN0ZWR2Mi5vIFxcXG4gIDkxOlx0XHRndWVzdC1zdGF0ZS1idWZmZXIubyBcXFxuICA5MjpcdFx0JChrdm0tYm9vazNzXzY0LWJ1aWx0aW4tdG0tb2Jqcy15KSBcXFxuICA5MzpcdFx0JChrdm0tYm9vazNzXzY0LWJ1aWx0aW4teGljcy1vYmpzLXkpXG4gIDk0Olx0XG4gIDk1Olx0b2JqLSQoQ09ORklHX0dVRVNUX1NUQVRFX0JVRkZFUl9URVNUKSAmIzQzOz0gdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIub1xuICA5NjpcdGVuZGlmXG4gIDk3Olx0XG4gIDk4Olx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX0tWTV9YSUNTKSAmIzQzOz0gXFxcbiAgOTk6XHRcdGJvb2szc194aWNzLm9cbiAxMDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBNYWtlZmlsZSoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBnbGFuY2UgYXQgdGhpcyBNYWtlZmlsZSBoYXMgZ2l2ZW4gbWUgYSBiYXNpYyB1bmRlcnN0YW5kaW5nLCBidXQgSSYjMzk7bSBub3QgZ29pbmcgdG8ganVtcCB0byBjb25jbHVzaW9ucyBqdXN0IHlldC4gSSBuZWVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBqdWRnZW1lbnRzIG9yIHBsYW5uaW5nIG1vZGlmaWNhdGlvbnMuIE15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBtZXRob2RpY2FsbHkgd29yayB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgb3RoZXIgcnVsZXMgYXJlIHN0cnVjdHVyZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgb3JjaGVzdHJhdGVkLiBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3Mgb3Igb3B0aW1pemF0aW9ucyBpbiBwbGF5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHJlZmFjdG9yaW5nIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdyBhbmQgaW50ZW5kZWQgYmVoYXZpb3IgYmVmb3JlIEkgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIGl0cyBxdWFsaXR5IG9yIG1ha2UgYW55IGltcHJvdmVtZW50cy4gSSYjMzk7bSBsb29raW5nIGZvciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGFsbCB3b3JrcyB0b2dldGhlciwgdG9wIHRvIGJvdHRvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX0tWTV9YSVZFKSAmIzQzOz0gYm9vazNzX3hpdmUubyBib29rM3NfeGl2ZV9uYXRpdmUub1xuIDEwMjpcdGt2bS1ib29rM3NfNjQtb2Jqcy0kKENPTkZJR19TUEFQUl9UQ0VfSU9NTVUpICYjNDM7PSBib29rM3NfNjRfdmlvLm9cbiAxMDM6XHRcbiAxMDQ6XHRrdm0tYm9vazNzXzY0LW1vZHVsZS1vYmpzIDo9IFxcXG4gMTA1Olx0XHQkKGNvbW1vbi1vYmpzLXkpIFxcXG4gMTA2Olx0XHRib29rM3MubyBcXFxuIDEwNzpcdFx0Ym9vazNzX3J0YXMubyBcXFxuIDEwODpcdFx0JChrdm0tYm9vazNzXzY0LW9ianMteSlcbiAxMDk6XHRcbiAxMTA6XHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0KSA6PSAkKGt2bS1ib29rM3NfNjQtbW9kdWxlLW9ianMpXG4gMTExOlx0XG4gMTEyOlx0a3ZtLWJvb2szc18zMi1vYmpzIDo9IFxcXG4gMTEzOlx0XHQkKGNvbW1vbi1vYmpzLXkpIFxcXG4gMTE0Olx0XHRlbXVsYXRlLm8gXFxcbiAxMTU6XHRcdGZwdS5vIFxcXG4gMTE2Olx0XHRib29rM3NfcGFpcmVkX3NpbmdsZXMubyBcXFxuIDExNzpcdFx0Ym9vazNzLm8gXFxcbiAxMTg6XHRcdGJvb2szc19wci5vIFxcXG4gMTE5Olx0XHRib29rM3NfZW11bGF0ZS5vIFxcXG4gMTIwOlx0XHRib29rM3NfaW50ZXJydXB0cy5vIFxcXG4gMTIxOlx0XHRib29rM3NfbW11X2hwdGUubyBcXFxuIDEyMjpcdFx0Ym9vazNzXzMyX21tdV9ob3N0Lm8gXFxcbiAxMjM6XHRcdGJvb2szc18zMl9tbXUub1xuIDEyNDpcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfMzIpIDo9ICQoa3ZtLWJvb2szc18zMi1vYmpzKVxuIDEyNTpcdFxuIDEyNjpcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9NUElDKSAmIzQzOz0gbXBpYy5vXG4gMTI3Olx0XG4gMTI4Olx0a3ZtLXkgJiM0Mzs9ICQoa3ZtLW9ianMtbSkgJChrdm0tb2Jqcy15KVxuIDEyOTpcdFxuIDEzMDpcdG9iai0kKENPTkZJR19LVk1fRTUwMFYyKSAmIzQzOz0ga3ZtLm9cbiAxMzE6XHRvYmotJChDT05GSUdfS1ZNX0U1MDBNQykgJiM0Mzs9IGt2bS5vXG4gMTMyOlx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpICYjNDM7PSBrdm0ub1xuIDEzMzpcdG9iai0kKENPTkZJR19LVk1fQk9PSzNTXzMyKSAmIzQzOz0ga3ZtLm9cbiAxMzQ6XHRcbiAxMzU6XHRvYmotJChDT05GSUdfS1ZNX0JPT0szU182NF9QUikgJiM0Mzs9IGt2bS1wci5vXG4gMTM2Olx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSFYpICYjNDM7PSBrdm0taHYub1xuIDEzNzpcdFxuIDEzODpcdG9iai15ICYjNDM7PSAkKGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLXkpXG4gMTM5Olx0XG4gMTQwOlx0IyBLVk0gZG9lcyBhIGxvdCBpbiByZWFsLW1vZGUsIGFuZCA2NC1iaXQgQm9vazNTIEtBU0FOIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhhdFxuIDE0MTpcdGlmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0XG4gMTQyOlx0S0FTQU5fU0FOSVRJWkUgOj0gblxuIDE0MzpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIEtWTSBoeXBlcnZpc29yIG9uIFBvd2VyUEMuIExldCYjMzk7cyBzZWUuLi4gYGt2bS1odi5vYCBpcyB0aGUga2V5IGhlcmUsIGFuZCB0aGF0IGdldHMgYnVpbHQgd2hlbiBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgIGlzIGVuYWJsZWQuIFJpZ2h0LCBhbmQgYGt2bS1odi15YCBkaXJlY3RseSBpbmNsdWRlcyBgYm9vazNzX2h2Lm9gLiBUaGF0IGNvbmZpcm1zIGl0IOKAkyBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgIGlzIGRlZmluaXRlbHkgdGhlIHNwZWNpZmljIGNvbmZpZyBJJiMzOTttIGFmdGVyLiBOb3csIGhvbGQgb24sIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUuIGBib29rM3NfaHYub2AgaXMgKmNvbXBpbGVkIGludG8qIGBrdm0taHYub2AsIHdoaWNoIGlzIGEgbW9kdWxlIG9yIGJ1aWx0LWluLCBzbyBpdCYjMzk7cyBzdGF0aWNhbGx5IGxpbmtlZC4KCkFoLCB0aGUgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC4gSSByZWNhbGwgdGhhdCYjMzk7cyBoYW5kbGVkIHdpdGhpbiBgcG93ZXJwYy5jYCwgd2hpY2gsIGFzIEkgZXhwZWN0LCBpcyBwYXJ0IG9mIGBrdm0ub2AuIE5vdywgYGt2bS5vYCBpcyBidWlsdCB3aGVuIHRoZSBtb3JlIGdlbmVyYWwgYENPTkZJR19LVk1fQk9PSzNTXzY0YCBpcyBlbmFibGVkLiBCaW5nbyEgYHBvd2VycGMuY2AgdWx0aW1hdGVseSBjYWxscyBga3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O2dldF9jb21wYXRfY2Fwc2AsIGFuZCBJIGNhbiBzZWUgdGhhdCBga3ZtX29wc19odmAgaXMgdGhlIHNldCBvZiBvcGVyYXRpb25zIHRoYXQmIzM5O3MgcmVnaXN0ZXJlZCB3aGVuIGBrdm0taHYub2AgaXMgbG9hZGVkLiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgY3JpdGljYWwuIE9idmlvdXNseSwgYENPTkZJR19LVk1gIGl0c2VsZiBpcyBmdW5kYW1lbnRhbCDigJMgbm8gS1ZNIHdpdGhvdXQgS1ZNISBMZXQmIzM5O3Mgc2VlLi4uIGFuZCwgeWVzLCBgQ09ORklHX1BQQ19QT1dFUk5WYCBpcyBhbHNvIGEgZGVwZW5kZW5jeSBmb3IgYEtWTV9CT09LM1NfNjRfSFZgIHRvIGV2ZW4gYmUgc2VsZWN0ZWQuIEp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgSSYjMzk7bGwgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIGZpbGUgdG8gZG91YmxlLWNoZWNrLiBJIGJlbGlldmUgdGhhdCBzaG91bGQgY292ZXIgaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0X0hWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYyPWNvbmZpZyBLVk1fQk9PSzNTXzY0XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwODQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGU6IEtWTV9CT09LM1NfNjRfSFYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYEtWTV9CT09LM1NfNjRfSFZgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBncm91bmR3b3JrOiBsZXQmIzM5O3MgZGl2ZSBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgd2hhdCB0aGlzIHRoaW5nICpyZWxpZXMqIG9uIGlzIHRoZSBhYnNvbHV0ZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgZnVuY3Rpb25zIGFuZCwgY3J1Y2lhbGx5LCBob3cgYW55IGNoYW5nZXMgbWlnaHQgcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIGRvbWlub2VzIGJlZm9yZSBJIHN0YXJ0IGZpZGRsaW5nIHdpdGggb25lLiBJcyBpdCBqdXN0IGEgc2luZ2xlIGxpYnJhcnksIG9yIGFyZSB3ZSBsb29raW5nIGF0IGEgc3ByYXdsaW5nIHdlYiBvZiBuZXN0ZWQgZGVwZW5kZW5jaWVzPyBLbm93aW5nIHRoZSBicmVhZHRoIG9mIHRoYXQgZGVwZW5kZW5jeSB0cmVlIGlzIGdvaW5nIHRvIGluZm9ybSBteSBlbnRpcmUgYXBwcm9hY2ggZnJvbSBoZXJlIG9uIG91dC4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGl0cyBwbGFjZSBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzk6XHRjb25maWcgS1ZNX0JPT0szU182NF9IVlxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4gIDgxOlx0XHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXHUwMDI2XHUwMDI2IFBQQ19QT1dFUk5WXG4gIDgyOlx0XHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuICA4MzpcdFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXG4gIDg0Olx0XHRzZWxlY3QgQ01BXG4gIDg1Olx0XHRoZWxwXG4gIDg2Olx0XHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBndWVzdCBrZXJuZWxzIGluXG4gIDg3Olx0XHQgIHZpcnR1YWwgbWFjaGluZXMgb24gUE9XRVI3IGFuZCBuZXdlciBwcm9jZXNzb3JzIHRoYXQgaGF2ZVxuICA4ODpcdFx0ICBoeXBlcnZpc29yIG1vZGUgYXZhaWxhYmxlIHRvIHRoZSBob3N0LlxuICA4OTpcdFxuICA5MDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgS1ZNIHdpbGwgdXNlIHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvblxuICA5MTpcdFx0ICBmYWNpbGl0aWVzIG9mIFBPV0VSNyAoYW5kIGxhdGVyKSBwcm9jZXNzb3JzLCBtZWFuaW5nIHRoYXRcbiAgOTI6XHRcdCAgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMgd2lsbCBydW4gYXQgZnVsbCBoYXJkd2FyZSBzcGVlZFxuICA5MzpcdFx0ICB1c2luZyBzdXBlcnZpc29yIGFuZCB1c2VyIG1vZGVzLiAgSG93ZXZlciwgdGhpcyBhbHNvIG1lYW5zXG4gIDk0Olx0XHQgIHRoYXQgS1ZNIGlzIG5vdCB1c2FibGUgdW5kZXIgUG93ZXJWTSAocEh5cCksIGlzIG9ubHkgdXNhYmxlXG4gIDk1Olx0XHQgIG9uIFBPV0VSNyBvciBsYXRlciBwcm9jZXNzb3JzLCBhbmQgY2Fubm90IGVtdWxhdGUgYVxuICA5NjpcdFx0ICBkaWZmZXJlbnQgcHJvY2Vzc29yIGZyb20gdGhlIGhvc3QgcHJvY2Vzc29yLlxuICA5NzpcdFxuICA5ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY1MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIGFuZCBQb3dlclBDIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYEtWTV9CT09LM1NfNjRfSFZgIGlzIHJlbGlhbnQgb24gYm90aCBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIEdpdmVuIHRoaXMgcmVsYXRpb25zaGlwLCBJIG5lZWQgdG8gZW5zdXJlIGJvdGggYEtWTV9CT09LM1NfNjRfSFZgIGFuZCBgUFBDX1BPV0VSTlZgIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSB0byBsaXN0IHRoZW0gaW4gYEVuYWJsZUNvbmZpZ3NgLgoKSG9sZCBvbi4uLiBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJiMzOTttIHJlY2FsbGluZyB0aGF0IGBrdm1fYXJjaF92bV9pb2N0bGAgd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpc24mIzM5O3Qgd3JhcHBlZCB3aXRoaW4gYW55IGAjaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGNvbmRpdGlvbmFsIGJsb2Nrcy4gVGhhdOKAmXMgdW5leHBlY3RlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZnVsbHkuIFRpbWUgdG8gZGl2ZSBiYWNrIGludG8gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBhbmQgY29uZmlybSBteSBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9QUENfR0VUX0NPTVBBVF9DQVBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9MjM2Mz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjQ3Mi1cdH1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjI0NzM6XHRjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yNDc0LVx0XHRzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNDEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gQ29tcGF0aWJpbGl0eSBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IHRoaXMgY2hlY2sgaXNuJiMzOTt0IHR1Y2tlZCBhd2F5IGluc2lkZSBhbiBgI2lmZGVmYCBibG9jaywgd2hpY2ggaXMgYSBjb21tb24gcGF0dGVybi4gSW5zdGVhZCwgaXQgc2VlbXMgdG8gcmVseSBvbiB0aGUgYGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHNgIGZ1bmN0aW9uLiBJZiB0aGF0IGZ1bmN0aW9uIHBvaW50ZXIgaGFwcGVucyB0byBiZSBOVUxMLCB0aGUgY29kZSByZXR1cm5zIGAtRU5PVFRZYC4gUmlnaHQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4KCk5vdywgd2hlcmUgaXMgYGdldF9jb21wYXRfY2Fwc2AgYWN0dWFsbHkgZGVmaW5lZCBhbmQgc2V0PyBBY2NvcmRpbmcgdG8gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgaXQmIzM5O3Mgb25seSBzZXQgaW4gYGt2bV9vcHNfaHZgIHdpdGhpbiBgYm9vazNzX2h2LmNgLiBUbyBhY3R1YWxseSBleGVyY2lzZSB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoIGFuZCB0ZXN0IGl0LCB0aGF0IG1lYW5zIEkgKm11c3QqIGhhdmUgYEtWTV9CT09LM1NfNjRfSFZgIGVuYWJsZWQuIEl0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LgoKU28sIEkgdGhpbmsgdGhlIG5leHQgbG9naWNhbCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgaW4gYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGZ1bmN0aW9uIHdvcmtzIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGlzIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NTMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY1MzM6XHRzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcbjY1MzQ6XHR7XG42NTM1Olx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuNjUzNjpcdFx0dW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMgPSAwO1xuNjUzNzpcdFx0Y29uc3QgX19iZTMyICpwcm9wID0gTlVMTDtcbjY1Mzg6XHRcdGxvbmcgcmMgPSAtRUlOVkFMO1xuNjUzOTpcdFx0dTMyIGNwdV92ZXJzaW9uO1xuNjU0MDpcdFxuNjU0MTpcdFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuNjU0MjpcdFx0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuNjU0MzpcdFx0XHRcdFdBUk5fT05fT05DRSghbmVzdGVkX2NhcGFiaWxpdGllcyk7XG42NTQ0Olx0XHRcdFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcbjY1NDU6XHRcdFx0XHRyYyA9IDA7XG42NTQ2Olx0XHRcdH0gZWxzZSB7XG42NTQ3Olx0XHRcdFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcJiMzNDtjcHVcJiMzNDspIHtcbjY1NDg6XHRcdFx0XHRcdHByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsIFwmIzM0O2NwdS12ZXJzaW9uXCYjMzQ7LCBOVUxMKTtcbjY1NDk6XHRcdFx0XHRcdGlmIChwcm9wKSB7XG42NTUwOlx0XHRcdFx0XHRcdGNwdV92ZXJzaW9uID0gYmUzMl90b19jcHVwKHByb3ApO1xuNjU1MTpcdFx0XHRcdFx0XHRvZl9ub2RlX3B1dChucCk7XG42NTUyOlx0XHRcdFx0XHRcdGJyZWFrO1xuNjU1MzpcdFx0XHRcdFx0fVxuNjU1NDpcdFx0XHRcdH1cbjY1NTU6XHRcdFx0XHRpZiAoIXByb3ApXG42NTU2Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY1NTc6XHRcdFx0XHRyYyA9IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjcHVfdmVyc2lvbixcbjY1NTg6XHRcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZjYXBhYmlsaXRpZXMpO1xuNjU1OTpcdFx0XHR9XG42NTYwOlx0XHR9XG42NTYxOlx0XG42NTYyOlx0XHRpZiAocmMgXHUwMDNjIDApXG42NTYzOlx0XHRcdHJldHVybiByYztcbjY1NjQ6XHRcbjY1NjU6XHRcdGhvc3RfY2Fwcy1cdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFx1MDAyNiBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLO1xuNjU2NjpcdFxuNjU2NzpcdFx0cmV0dXJuIHJjO1xuNjU2ODpcdH1cbjY1Njk6XHRcbjY1NzA6XHRzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcbjY1NzE6XHRcdC5nZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVnc19odixcbjY1NzI6XHRcdC5zZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19odixcbjY1NzM6XHRcdC5nZXRfb25lX3JlZyA9IGt2bXBwY19nZXRfb25lX3JlZ19odixcbjY1NzQ6XHRcdC5zZXRfb25lX3JlZyA9IGt2bXBwY19zZXRfb25lX3JlZ19odixcbjY1NzU6XHRcdC52Y3B1X2xvYWQgICA9IGt2bXBwY19jb3JlX3ZjcHVfbG9hZF9odixcbjY1NzY6XHRcdC52Y3B1X3B1dCAgICA9IGt2bXBwY19jb3JlX3ZjcHVfcHV0X2h2LFxuNjU3NzpcdFx0LmluamVjdF9pbnRlcnJ1cHQgPSBrdm1wcGNfaW5qZWN0X2ludGVycnVwdF9odixcbjY1Nzg6XHRcdC5zZXRfbXNyICAgICA9IGt2bXBwY19zZXRfbXNyX2h2LFxuNjU3OTpcdFx0LnZjcHVfcnVuICAgID0ga3ZtcHBjX3ZjcHVfcnVuX2h2LFxuNjU4MDpcdFx0LnZjcHVfY3JlYXRlID0ga3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGVfaHYsXG42NTgxOlx0XHQudmNwdV9mcmVlICAgPSBrdm1wcGNfY29yZV92Y3B1X2ZyZWVfaHYsXG42NTgyOlx0XHQuY2hlY2tfcmVxdWVzdHMgPSBrdm1wcGNfY29yZV9jaGVja19yZXF1ZXN0c19odixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIGt2bS1odiBjb2RlLi4uKioKCkFscmlnaHQsIEkmIzM5O20gdHJhY2luZyB0aHJvdWdoIHRoaXMgc2VjdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGlzIGNoZWNrIGZvciBga3ZtaHZfb25fcHNlcmllcygpYC4gSG1tLCBpbnRlcmVzdGluZy4gSWYgdGhhdCBmdW5jdGlvbiAqaXNuJiMzOTt0KiB0cnVlLCB0aGVuIHdlIGltbWVkaWF0ZWx5IHJldHVybiBgLUVJTlZBTGAuIFNvLCBjbGVhcmx5LCB0aGlzIGNvZGUgcGF0aCBpcyBkZXNpZ25lZCB0byBiYWlsIG91dCB1bmxlc3Mgc29tZXRoaW5nIHNwZWNpZmljIGlzIGluIHBsYWNlLiBJdCBzZWVtcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5ICpyZXF1aXJlcyogYSBwb3NpdGl2ZSBzaWduYWwgZnJvbSBga3ZtaHZfb25fcHNlcmllcygpYC4KCkJ1dCB3aGF0IHRoZSBoZWNrICppcyogYGt2bWh2X29uX3BzZXJpZXMoKWA/IFRoZSBlbnRpcmUgZmxvdyBzZWVtcyBwcmVkaWNhdGVkIG9uIGl0LCBzbyBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuIEl04oCZcyB0aGUgZ2F0ZWtlZXBlciwgaXQgc2VlbXMuIE15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBib29sZWFuIGNoZWNrIGFjdHVhbGx5IHJlcHJlc2VudHMgYW5kIHdoYXQgc2NlbmFyaW8gYWxsb3dzIGl0IHRvIGJlIHRydWUgc28gdGhhdCBJIGNhbiBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgY29uZmlndXJhdGlvbiB0cmlnZ2VycyBpdC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtaHZfb25fcHNlcmllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTM1PXVuc2lnbmVkIGxvbmcgX19rdm1odl9jb3B5X3RvZnJvbV9ndWVzdF9yYWRpeChpbnQgbHBpZCwgaW50IHBpZCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00Ni1cdC8qIENhbiYjMzk7dCBhY2Nlc3MgcXVhZHJhbnRzIDEgb3IgMiBpbiBub24tSFYgbW9kZSwgY2FsbCB0aGUgSFYgdG8gZG8gaXQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjQ3Olx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTQ4LVx0XHRyZXR1cm4gcGxwYXJfaGNhbGxfbm9yZXRzKEhfQ09QWV9UT0ZST01fR1VFU1QsIGxwaWQsIHBpZCwgZWFkZHIsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM9MzE1PXZvaWQga3ZtcHBjX3JhZGl4X3RsYmllX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzI5LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM6MzMwOlx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTMzMS1cdFx0cmFkaXhfX2ZsdXNoX3RsYl9scGlkX3BhZ2UobHBpZCwgYWRkciwgcHNpemUpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTM1Mz1zdGF0aWMgdm9pZCBrdm1wcGNfcmFkaXhfZmx1c2hfcHdjKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGxwaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzU2LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM6MzU3Olx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTM1OC1cdFx0cmFkaXhfX2ZsdXNoX3B3Y19scGlkKGxwaWQpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9MTgyPXN0YXRpYyBib29sIGt2bXBwY19pcGlfdGhyZWFkKGludCBjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODYtXHQvKiBJZiB3ZSYjMzk7cmUgYSBuZXN0ZWQgaHlwZXJ2aXNvciwgZmFsbCBiYWNrIHRvIG9yZGluYXJ5IElQSXMgZm9yIG5vdyAqL1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzoxODc6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODgtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQxND1zdGF0aWMgaW50IGt2bXBwY19zZXRfYXJjaF9jb21wYXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgYXJjaF9jb21wYXQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NjAtXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjQ2MTpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkgXHUwMDI2XHUwMDI2IGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDYyLVx0XHQvKlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NDQxMz1zdGF0aWMgaW50IGt2bWh2X3A5X2d1ZXN0X2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NDMyLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NDMzOlx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NDM0LVx0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjEoKSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ4Njc9aW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDk0Ni1cdFx0XHQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDk0NzpcdFx0XHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSBcdTAwMjZcdTAwMjYgKF9fa3ZtcHBjX2dldF9tc3JfaHYodmNwdSkgXHUwMDI2IE1TUl9FRSkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ5NDgtXHRcdFx0XHRrdm1wcGNfaW5qZWN0X2ludGVycnVwdF9odih2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NTIyOD1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfc21tdV9pbmZvX2h2KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTEtXHQvKiBJZiBydW5uaW5nIGFzIGEgbmVzdGVkIGh5cGVydmlzb3IsIHdlIGRvbiYjMzk7dCBzdXBwb3J0IEhQVCBndWVzdHMgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTI1MjpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTMtXHRcdGluZm8tXHUwMDNlZmxhZ3MgfD0gS1ZNX1BQQ19OT19IQVNIO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjE0NT1zdGF0aWMgaW50IGt2bV9hcmNoX3ZtX2lvY3RsX2h2KHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjE1Ny1cdFx0LyogSWYgd2UmIzM5O3JlIGEgbmVzdGVkIGh5cGVydmlzb3IsIHdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgcmFkaXggKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjE1ODpcdFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02MTU5LVx0XHRcdHIgPSAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTYyNTc9c3RhdGljIGludCBrdm1odl9jb25maWd1cmVfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wcGNfbW11djNfY2ZnICpjZmcpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02Mjg0LVx0LyogSWYgd2UmIzM5O3JlIGEgbmVzdGVkIGh5cGVydmlzb3IsIHdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgcmFkaXggKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjI4NTpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkgXHUwMDI2XHUwMDI2ICFyYWRpeClcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4Ni1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTMzPXN0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0MC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjU0MTpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0Mi1cdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY2NTE9c3RhdGljIGludCBrdm1wcGNfYm9vazNzX2luaXRfaHYodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2ODItI2lmZGVmIENPTkZJR19TTVBcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjY4MzpcdGlmICgheGljc19vbl94aXZlKCkgXHUwMDI2XHUwMDI2ICFrdm1odl9vbl9wc2VyaWVzKCkgXHUwMDI2XHUwMDI2XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2ODQtXHQgICAgIWxvY2FsX3BhY2EtXHUwMDNla3ZtX2hzdGF0ZS54aWNzX3BoeXMpIHtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY3MjQtXHQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjcyNTpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY3MjYtXHRcdHByX2luZm8oXCYjMzQ7S1ZNLUhWOiBFbmFibGluZyBJUlEgYnlwYXNzXFxuXCYjMzQ7KTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYz00Mzk9bG9uZyBrdm1odl9uZXN0ZWRfaW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ0NC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jOjQ0NTpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNDQ2LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYz01MDA9dm9pZCBrdm1odl9uZXN0ZWRfZXhpdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwMi1cdC8qXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDM6XHQgKiBOLkIuIHRoZSBrdm1odl9vbl9wc2VyaWVzKCkgdGVzdCBpcyB0aGVyZSBiZWNhdXNlIGl0IGVuYWJsZXNcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwNC1cdCAqIHRoZSBjb21waWxlciB0byByZW1vdmUgdGhlIGNhbGwgdG8gcGxwYXJfaGNhbGxfbm9yZXRzKClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDYtXHQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jOjUwNzpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkgXHUwMDI2XHUwMDI2IHBzZXJpZXNfcGFydGl0aW9uX3RiKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDgtXHRcdHBscGFyX2hjYWxsX25vcmV0cyhIX1NFVF9QQVJUSVRJT05fVEFCTEUsIDApO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUxND12b2lkIGt2bWh2X2ZsdXNoX2xwaWQodTY0IGxwaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTE3LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTE4Olx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUxOS1cdFx0cmFkaXhfX2ZsdXNoX2FsbF9scGlkKGxwaWQpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUzNj12b2lkIGt2bWh2X3NldF9wdGJsX2VudHJ5KHU2NCBscGlkLCB1NjQgZHcwLCB1NjQgZHcxKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTM3LXtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jOjUzODpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MzktXHRcdG1tdV9wYXJ0aXRpb25fdGFibGVfc2V0X2VudHJ5KGxwaWQsIGR3MCwgZHcxLCB0cnVlKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmM9MzU9dm9pZCBzd2l0Y2hfcG11X3RvX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmMtNzQtXHQvKiBBZnRlciBzYXZpbmcgUE1VLCBiZWZvcmUgbG9hZGluZyBndWVzdCBQTVUsIGZsaXAgcG1jcmVnc19pbl91c2UgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYzo3NTpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYy03Ni1cdFx0YmFycmllcigpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYz0xMTg9dm9pZCBzd2l0Y2hfcG11X3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYy0xODYtI2lmZGVmIENPTkZJR19QUENfUFNFUklFU1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jOjE4NzpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYy0xODgtXHRcdGJhcnJpZXIoKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz01MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy02OTAtXHRcdGlmIChodl9lbmFibGVkKSB7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo2OTE6XHRcdFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjkyLVx0XHRcdFx0aWYgKHBzZXJpZXNfcmVsb2Nfb25fZXhjZXB0aW9uKCkpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzAyLVx0XHRyID0gMDtcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwMzpcdFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSlcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwNC1cdFx0XHRyID0gMTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmM9NDU0PXN0YXRpYyB2b2lkIHRlc3RfZ3NfaG9zdHdpZGVfY291bnRlcnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIuYy00NjMtXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmM6NDY0Olx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmMtNDY1LVx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O1RoaXMgdGVzdCBuZWVkIGEga212LWh2IGd1ZXN0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmVzdGVkIEtWTSBvbiBwc2VyaWVzOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBrdm1odl9vbl9wc2VyaWVzKClgIGZ1bmN0aW9uLiBJdCYjMzk7cyBzdXBwb3NlZCB0byB0ZWxsIG1lIGlmIEtWTSBpcyBydW5uaW5nIG5lc3RlZCBvbiBhIHBzZXJpZXMgbWFjaGluZSwgcmlnaHQ/IEFuZCBpZiBpdCAqaXNuJiMzOTt0KiwgdGhlbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgaXMgZ29pbmcgdG8gcmV0dXJuIGAtRUlOVkFMYC4gVGhhdCBpbW1lZGlhdGVseSBzcGFya2VkIGFuIGlkZWEg4oCTIGNvdWxkIHRoaXMgYmUgZnV6emVkPyBDb3VsZCBJIHBvdGVudGlhbGx5IHRyaWdnZXIgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvciBvciB1bmNvdmVyIGEgYnVnIGJ5IG1hbmlwdWxhdGluZyB0aGlzIGNvbmRpdGlvbj8KClRoZSBmaXJzdCB0aGluZyBJIGhhZCB0byBjb25maXJtIHdhcyB3aGV0aGVyIHN5emthbGxlciAqY291bGQqIGV2ZW4gcnVuIG9uIGEgcHNlcmllcyBtYWNoaW5lLiBMdWNraWx5LCB5ZXMhIEkga25vdyB0aGF0IHlvdSBjYW4gdXNlIFFFTVUgd2l0aCB0aGUgYHBzZXJpZXNgIG1hY2hpbmUgdHlwZS4gU28sIHNvbWV0aGluZyBsaWtlIGBxZW11LXN5c3RlbS1wcGM2NCAtTSBwc2VyaWVzYCBpcyB0b3RhbGx5IHZhbGlkLgoKTm93IGl0JiMzOTtzIHN0YXJ0aW5nIHRvIGNvbWUgdG9nZXRoZXIuIElmIHN5emthbGxlciBpcyBydW5uaW5nICppbnNpZGUqIGEgYHBzZXJpZXNgIFFFTVUgVk0sIHRoZW4gYGt2bWh2X29uX3BzZXJpZXMoKWAgKnNob3VsZCogcmV0dXJuIHRydWUuIFdhaXQsIGxldCBtZSB0aGluayB0aGF0IHRocm91Z2jigKYgYGt2bWh2X29uX3BzZXJpZXMoKWAgbWVhbnMgdGhlIGhvc3QgaXRzZWxmIGlzIHJ1bm5pbmcgYXMgYSBndWVzdCBvbiBwc2VyaWVzLiBZZXMsIHN5emthbGxlciAqaXMqIHJ1bm5pbmcgaW5zaWRlIGEgYHBzZXJpZXNgIFZNLCB3aGljaCBtZWFucyB0aGUga2VybmVsIGl0JiMzOTtzIGZ1enppbmcgaXMgYWxzbyBydW5uaW5nIGFzIGEgZ3Vlc3Qgb24gYHBzZXJpZXNgLiBTbywgYGt2bWh2X29uX3BzZXJpZXMoKWAgKndpbGwqIGJlIHRydWUgaW4gdGhhdCBzY2VuYXJpby4gVGhhdCBtZWFucyBLVk0gaW5zaWRlIHRoYXQgZ3Vlc3QgaXMgY29uc2lkZXJlZCAmIzM0O25lc3RlZCBLVk0mIzM0Oy4gVGhlcmVmb3JlLCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHNob3VsZCBiZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIFRoaXMgaXMgZ3JlYXQsIGFzIGl0IG1lYW5zIEkgY2FuIHRyeSB0byBmaW5kIHNvbWUgbmV3IGZ1enppbmcgc3VyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IGBrdm1odl9vbl9wc2VyaWVzKClgIGlzIGRlZmluZWQgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1odl9vbl9wc2VyaWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oPTYwND1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2h2X21vZGVfYWN0aXZlKHZvaWQpXHRcdHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaC02MDgtI2lmZGVmIENPTkZJR19QUENfUFNFUklFU1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaDo2MDk6c3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZClcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjEwLXtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oLTYxMy0jZWxzZVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaDo2MTQ6c3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZClcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjE1LXtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNT11bnNpZ25lZCBsb25nIF9fa3ZtaHZfY29weV90b2Zyb21fZ3Vlc3RfcmFkaXgoaW50IGxwaWQsIGludCBwaWQsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtNDYtXHQvKiBDYW4mIzM5O3QgYWNjZXNzIHF1YWRyYW50cyAxIG9yIDIgaW4gbm9uLUhWIG1vZGUsIGNhbGwgdGhlIEhWIHRvIGRvIGl0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYzo0NzpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00OC1cdFx0cmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX0NPUFlfVE9GUk9NX0dVRVNULCBscGlkLCBwaWQsIGVhZGRyLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTMxNT12b2lkIGt2bXBwY19yYWRpeF90bGJpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTMyOS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjMzMDpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy0zMzEtXHRcdHJhZGl4X19mbHVzaF90bGJfbHBpZF9wYWdlKGxwaWQsIGFkZHIsIHBzaXplKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNTM9c3RhdGljIHZvaWQga3ZtcHBjX3JhZGl4X2ZsdXNoX3B3YyhzdHJ1Y3Qga3ZtICprdm0sIHU2NCBscGlkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTM1Ni1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjM1NzpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy0zNTgtXHRcdHJhZGl4X19mbHVzaF9wd2NfbHBpZChscGlkKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTE4Mj1zdGF0aWMgYm9vbCBrdm1wcGNfaXBpX3RocmVhZChpbnQgY3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMTg2LVx0LyogSWYgd2UmIzM5O3JlIGEgbmVzdGVkIGh5cGVydmlzb3IsIGZhbGwgYmFjayB0byBvcmRpbmFyeSBJUElzIGZvciBub3cgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTg3Olx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMTg4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00MTQ9c3RhdGljIGludCBrdm1wcGNfc2V0X2FyY2hfY29tcGF0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGFyY2hfY29tcGF0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDYwLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NjE6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpIFx1MDAyNlx1MDAyNiBrdm1odl9pc19uZXN0ZWR2MigpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ2Mi1cdFx0Lypcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ0MTM9c3RhdGljIGludCBrdm1odl9wOV9ndWVzdF9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDQzMi1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDQzMzpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDQzNC1cdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYxKCkpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00ODY3PWludCBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ5NDYtXHRcdFx0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjQ5NDc6XHRcdFx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkgXHUwMDI2XHUwMDI2IChfX2t2bXBwY19nZXRfbXNyX2h2KHZjcHUpIFx1MDAyNiBNU1JfRUUpKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTQ4LVx0XHRcdFx0a3ZtcHBjX2luamVjdF9pbnRlcnJ1cHRfaHYodmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUyMjg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X3NtbXVfaW5mb19odihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01MjUxLVx0LyogSWYgcnVubmluZyBhcyBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBkb24mIzM5O3Qgc3VwcG9ydCBIUFQgZ3Vlc3RzICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjUyNTI6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01MjUzLVx0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IEtWTV9QUENfTk9fSEFTSDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTYxNDU9c3RhdGljIGludCBrdm1fYXJjaF92bV9pb2N0bF9odihzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYxNTctXHRcdC8qIElmIHdlJiMzOTtyZSBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHJhZGl4ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjYxNTg6XHRcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjE1OS1cdFx0XHRyID0gLUVPUE5PVFNVUFA7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02MjU3PXN0YXRpYyBpbnQga3ZtaHZfY29uZmlndXJlX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcHBjX21tdXYzX2NmZyAqY2ZnKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4NC1cdC8qIElmIHdlJiMzOTtyZSBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHJhZGl4ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjYyODU6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpIFx1MDAyNlx1MDAyNiAhcmFkaXgpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYyODYtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjUzMz1zdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NDAtXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1NDE6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NDItXHRcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NjUxPXN0YXRpYyBpbnQga3ZtcHBjX2Jvb2szc19pbml0X2h2KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NjgyLSNpZmRlZiBDT05GSUdfU01QXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY2ODM6XHRpZiAoIXhpY3Nfb25feGl2ZSgpIFx1MDAyNlx1MDAyNiAha3ZtaHZfb25fcHNlcmllcygpIFx1MDAyNlx1MDAyNlxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02Njg0LVx0ICAgICFsb2NhbF9wYWNhLVx1MDAzZWt2bV9oc3RhdGUueGljc19waHlzKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NzI0LVx0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY3MjU6XHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NzI2LVx0XHRwcl9pbmZvKFwmIzM0O0tWTS1IVjogRW5hYmxpbmcgSVJRIGJ5cGFzc1xcblwmIzM0Oyk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM9NDM5PWxvbmcga3ZtaHZfbmVzdGVkX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy00NDQtXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo0NDU6XHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ0Ni1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM9NTAwPXZvaWQga3ZtaHZfbmVzdGVkX2V4aXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDItXHQvKlxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTAzOlx0ICogTi5CLiB0aGUga3ZtaHZfb25fcHNlcmllcygpIHRlc3QgaXMgdGhlcmUgYmVjYXVzZSBpdCBlbmFibGVzXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDQtXHQgKiB0aGUgY29tcGlsZXIgdG8gcmVtb3ZlIHRoZSBjYWxsIHRvIHBscGFyX2hjYWxsX25vcmV0cygpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTA2LVx0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDc6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpIFx1MDAyNlx1MDAyNiBwc2VyaWVzX3BhcnRpdGlvbl90Yikge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTA4LVx0XHRwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfUEFSVElUSU9OX1RBQkxFLCAwKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYz01MTQ9dm9pZCBrdm1odl9mbHVzaF9scGlkKHU2NCBscGlkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUxNy1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jOjUxODpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MTktXHRcdHJhZGl4X19mbHVzaF9hbGxfbHBpZChscGlkKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYz01MzY9dm9pZCBrdm1odl9zZXRfcHRibF9lbnRyeSh1NjQgbHBpZCwgdTY0IGR3MCwgdTY0IGR3MSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUzNy17XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1Mzg6XHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTM5LVx0XHRtbXVfcGFydGl0aW9uX3RhYmxlX3NldF9lbnRyeShscGlkLCBkdzAsIGR3MSwgdHJ1ZSk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jPTM1PXZvaWQgc3dpdGNoX3BtdV90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTc0LVx0LyogQWZ0ZXIgc2F2aW5nIFBNVSwgYmVmb3JlIGxvYWRpbmcgZ3Vlc3QgUE1VLCBmbGlwIHBtY3JlZ3NfaW5fdXNlICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmM6NzU6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmMtNzYtXHRcdGJhcnJpZXIoKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmM9MTE4PXZvaWQgc3dpdGNoX3BtdV90b19ob3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmMtMTg2LSNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVNcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYzoxODc6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmMtMTg4LVx0XHRiYXJyaWVyKCk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9NTAyPWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjkwLVx0XHRpZiAoaHZfZW5hYmxlZCkge1xuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6NjkxOlx0XHRcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY5Mi1cdFx0XHRcdGlmIChwc2VyaWVzX3JlbG9jX29uX2V4Y2VwdGlvbigpKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwMi1cdFx0ciA9IDA7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3MDM6XHRcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03MDQtXHRcdFx0ciA9IDE7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS90ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5jPTQ1ND1zdGF0aWMgdm9pZCB0ZXN0X2dzX2hvc3R3aWRlX2NvdW50ZXJzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmMtNDYzLVxuYXJjaC9wb3dlcnBjL2t2bS90ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5jOjQ2NDpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKVxuYXJjaC9wb3dlcnBjL2t2bS90ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5jLTQ2NS1cdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtUaGlzIHRlc3QgbmVlZCBhIGttdi1odiBndWVzdFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjUwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIFBvd2VyUEMgU3lzdGVtcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBga3ZtaHZfb25fcHNlcmllcygpYCBmdW5jdGlvbiBhbmQgaXRzIGRlZmluaXRpb24gaXMgdGhyb3dpbmcgYSBiaXQgb2YgYSByZWQgZmxhZy4gSXQgc2VlbXMgdG8gZGVwZW5kIG9uIGBDT05GSUdfUFBDX1BTRVJJRVNgLiBUaGlzIG1lYW5zIHRoYXQgaWYgYENPTkZJR19QUENfUFNFUklFU2AgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiBgZmFsc2VgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgdG8gYWNjb3VudCBmb3IgdGhhdC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gYWRkIGBQUENfUFNFUklFU2AgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGVuc3VyZSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgaXMgYWRkcmVzc2VkLgoKTm93LCB3YWl0IGEgbWludXRlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gV2FzbiYjMzk7dCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kZW50IG9uIGBQUENfUE9XRVJOVmA/IExldCBtZSBqdXN0IHF1aWNrbHkgcmVmZXIgYmFjayB0byBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgaW4gdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzk6XHRjb25maWcgS1ZNX0JPT0szU182NF9IVlxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4gIDgxOlx0XHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXHUwMDI2XHUwMDI2IFBQQ19QT1dFUk5WXG4gIDgyOlx0XHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuICA4MzpcdFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXG4gIDg0Olx0XHRzZWxlY3QgQ01BXG4gIDg1Olx0XHRoZWxwXG4gIDg2Olx0XHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBndWVzdCBrZXJuZWxzIGluXG4gIDg3Olx0XHQgIHZpcnR1YWwgbWFjaGluZXMgb24gUE9XRVI3IGFuZCBuZXdlciBwcm9jZXNzb3JzIHRoYXQgaGF2ZVxuICA4ODpcdFx0ICBoeXBlcnZpc29yIG1vZGUgYXZhaWxhYmxlIHRvIHRoZSBob3N0LlxuICA4OTpcdFxuICA5MDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgS1ZNIHdpbGwgdXNlIHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvblxuICA5MTpcdFx0ICBmYWNpbGl0aWVzIG9mIFBPV0VSNyAoYW5kIGxhdGVyKSBwcm9jZXNzb3JzLCBtZWFuaW5nIHRoYXRcbiAgOTI6XHRcdCAgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMgd2lsbCBydW4gYXQgZnVsbCBoYXJkd2FyZSBzcGVlZFxuICA5MzpcdFx0ICB1c2luZyBzdXBlcnZpc29yIGFuZCB1c2VyIG1vZGVzLiAgSG93ZXZlciwgdGhpcyBhbHNvIG1lYW5zXG4gIDk0Olx0XHQgIHRoYXQgS1ZNIGlzIG5vdCB1c2FibGUgdW5kZXIgUG93ZXJWTSAocEh5cCksIGlzIG9ubHkgdXNhYmxlXG4gIDk1Olx0XHQgIG9uIFBPV0VSNyBvciBsYXRlciBwcm9jZXNzb3JzLCBhbmQgY2Fubm90IGVtdWxhdGUgYVxuICA5NjpcdFx0ICBkaWZmZXJlbnQgcHJvY2Vzc29yIGZyb20gdGhlIGhvc3QgcHJvY2Vzc29yLlxuICA5NzpcdFxuICA5ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQyNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIFBvd2VyUEMgS2NvbmZpZyBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYEtWTV9CT09LM1NfNjRfSFZgIGNvbmZpZyBvcHRpb24sIGFuZCBpdCYjMzk7cyBwb3BwaW5nIHVwIGEgZGVwZW5kZW5jeSBvbiBgUFBDX1BPV0VSTlZgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gUG93ZXJOViBpcyB0aGUgaHlwZXJ2aXNvciwgc28gYSBCb29rM1MgNjQtYml0IEtWTSBmb3IgUG93ZXJOViB3b3VsZCBuYXR1cmFsbHkgYmUgZGVwZW5kZW50IG9uIGl0cyBwcmVzZW5jZS4KCkJ1dCwgYSBsaXR0bGUgYWxhcm0gYmVsbCBpcyBnb2luZyBvZmYgaW4gbXkgaGVhZC4gSWYgd2UmIzM5O3JlIGVuYWJsaW5nIGBQUENfUE9XRVJOVmAsIGRvZXMgdGhhdCBjYXVzZSBhbnkgY29uZmxpY3RzIHdpdGggYFBQQ19QU0VSSUVTYD8gSGlzdG9yaWNhbGx5LCB0aGVyZSBoYXZlIGJlZW4gaW50ZXJlc3RpbmcgY29tcGF0aWJpbGl0eSBpc3N1ZXMgaW4gdGhlIFBvd2VyUEMgYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHZpcnR1YWxpemF0aW9uIGFuZCBkaWZmZXJlbnQgcGxhdGZvcm0gdHlwZXMuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIG5vdCBpbmFkdmVydGVudGx5IGNyZWF0aW5nIGEgcHJvYmxlbS4gQmVzdCBwcmFjdGljZSBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIGltbWVkaWF0ZWx5LiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byBgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnYCBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlIGRlZmluZWQgdGhlcmUuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBleHBsaWNpdCBjb25mbGljdHMgb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGxhaWQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFBDX1BPV0VSTlYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWc6Mjpjb25maWcgUFBDX1BPV0VSTlZcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIFBQQzY0IFx1MDAyNlx1MDAyNiBQUENfQk9PSzNTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODQzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFBvd2VyUEMvcFNlcmllcyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQgaW4gdGhlIGBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciBwU2VyaWVzIHN5c3RlbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGhhbmRsZXMgaXRzIHVuaXF1ZSBoYXJkd2FyZSBjaGFyYWN0ZXJpc3RpY3MuIFdoYXQgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCwgYW5kIGhvdyBhcmUgdGhleSBjb25kaXRpb25hbGx5IGVuYWJsZWQ/IEkgd2FudCB0byBwaW5wb2ludCB0aGUga2V5IG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGRlZmluZSBhIG1pbmltYWwsIG9yIGEgZmVhdHVyZS1yaWNoLCBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuIERpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIHRoYXQgb3ZlcnZpZXcgYW5kIHRoZSBkZXRhaWxlZCBpbnNpZ2h0cyBJIG5lZWQuIEkmIzM5O20gaG9waW5nIHRvIHVuY292ZXIgYW55IG5ldyBvciBub3Rld29ydGh5IGNoYW5nZXMgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCBoYXJkd2FyZSBkcml2ZXJzLCBvciBmaXJtd2FyZSBpbnRlZ3JhdGlvbiwgYW5kIHJlbGF0ZSB0aGVzZSB0byBteSBjdXJyZW50IHByb2plY3QuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUENfUFNFUklFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZzoyOmNvbmZpZyBQUENfUFNFUklFU1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMy1cdGRlcGVuZHMgb24gUFBDNjQgXHUwMDI2XHUwMDI2IFBQQ19CT09LM1Ncbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZz05Mj1jb25maWcgTFBBUkNGR1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTk4LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWc6OTk6Y29uZmlnIFBQQ19QU0VSSUVTX0RFQlVHXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0xMDAtXHRkZXBlbmRzIG9uIFBQQ19QU0VSSUVTIFx1MDAyNlx1MDAyNiBQUENfRUFSTFlfREVCVUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyOTMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIFBvd2VyUEMgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgUG93ZXJQQyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIHdoZXRoZXIgd2UgY2FuIGVuYWJsZSBib3RoIGBQUENfUE9XRVJOVmAgYW5kIGBQUENfUFNFUklFU2Agc2ltdWx0YW5lb3VzbHkuIFRoZSBxdWljayBhbnN3ZXIgaXMgeWVzLCBpbiBtb2Rlcm4ga2VybmVscywgaXQmIzM5O3MgcG9zc2libGUgdG8gYnVpbGQgYSBzaW5nbGUga2VybmVsIGltYWdlIHRoYXQgY2FuIGJvb3Qgb24gYm90aCBiYXJlLW1ldGFsIFBvd2VyTlYgYW5kIHZpcnR1YWxpemVkIHBTZXJpZXMgc3lzdGVtcy4gVGhlcmVmb3JlLCBzZXR0aW5nIGJvdGggYFBQQ19QT1dFUk5WYCBhbmQgYFBQQ19QU0VSSUVTYCBzZWVtcyBwZXJmZWN0bHkgdmFsaWQuCgpIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgZGVwZW5kZW5jaWVzLiBJIHJlY2FsbCB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBkZXBlbmRzIG9uIGBQUENfUE9XRVJOVmAsIGFuZCBga3ZtaHZfb25fcHNlcmllcygpYCByZXF1aXJlcyBgUFBDX1BTRVJJRVNgLiBUaGVyZWZvcmUsIGVuYWJsaW5nIGJvdGggd291bGQgYmUgcmVxdWlyZWQsIHNvIHRoYXQgd2UgY2FuIGVuc3VyZSBib3RoIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBhdmFpbGFibGUgYW5kIGBrdm1odl9vbl9wc2VyaWVzKClgIGNhbiBldmFsdWF0ZSB0byB0cnVlLgoKQnV0IEkmIzM5O20gYSBiaXQgY29uY2VybmVkIGFib3V0IGhvdyBga3ZtaHZfb25fcHNlcmllcygpYCBhY3R1YWxseSBiZWhhdmVzLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBsb2dpYy4gSXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZDoKCmBgYGMKI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwpzdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfb25fcHNlcmllcyh2b2lkKQp7CglyZXR1cm4gIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0hWTU9ERSk7Cn0KI2Vsc2UKc3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZCkKewoJcmV0dXJuIGZhbHNlOwp9CiNlbmRpZgpgYGAKCklmIGBQUENfUFNFUklFU2AgaXMgZW5hYmxlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9IVk1PREUpYC4gTm93LCBpZiB3ZSBib290IHRoaXMgb24gUUVNVSBhcyBhIHBTZXJpZXMgZ3Vlc3QsIGBDUFVfRlRSX0hWTU9ERWAgKmlzbiYjMzk7dCogc2V0LCBzbyBga3ZtaHZfb25fcHNlcmllcygpYCB3b3VsZCByZXR1cm4gYHRydWVgLiBJbiB0aGlzIHNjZW5hcmlvLCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2Agd2lsbCBwcm9jZWVkLCBhbmQgcmV0dXJuIDAuCgpIb3dldmVyLCBpZiB3ZSBib290IG9uIFBvd2VyTlYgKGJhcmUgbWV0YWwpLCBgQ1BVX0ZUUl9IVk1PREVgICppcyogc2V0LCBzbyBga3ZtaHZfb25fcHNlcmllcygpYCB3b3VsZCByZXR1cm4gYGZhbHNlYC4gQWgsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBhIGxpdHRsZSBoYXp5Li4uIGEgcmV0dXJuIG9mIGZhbHNlIG1lYW5zIHRoYXQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHdpbGwgcmV0dXJuIGAtRUlOVkFMYC4gSXMgdGhhdCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3I/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCByZXZpc2l0IHRoYXQgcGF0Y2guIFNvbWV0aGluZyBkb2VzbiYjMzk7dCBmZWVsIHF1aXRlIHJpZ2h0IHdpdGggdGhhdCBwYXJ0IG9mIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUzMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NTMzOlx0c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG42NTM0Olx0e1xuNjUzNTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpucDtcbjY1MzY6XHRcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcbjY1Mzc6XHRcdGNvbnN0IF9fYmUzMiAqcHJvcCA9IE5VTEw7XG42NTM4Olx0XHRsb25nIHJjID0gLUVJTlZBTDtcbjY1Mzk6XHRcdHUzMiBjcHVfdmVyc2lvbjtcbjY1NDA6XHRcbjY1NDE6XHRcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbjY1NDI6XHRcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbjY1NDM6XHRcdFx0XHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xuNjU0NDpcdFx0XHRcdGNhcGFiaWxpdGllcyA9IG5lc3RlZF9jYXBhYmlsaXRpZXM7XG42NTQ1Olx0XHRcdFx0cmMgPSAwO1xuNjU0NjpcdFx0XHR9IGVsc2Uge1xuNjU0NzpcdFx0XHRcdGZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgXCYjMzQ7Y3B1XCYjMzQ7KSB7XG42NTQ4Olx0XHRcdFx0XHRwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBcJiMzNDtjcHUtdmVyc2lvblwmIzM0OywgTlVMTCk7XG42NTQ5Olx0XHRcdFx0XHRpZiAocHJvcCkge1xuNjU1MDpcdFx0XHRcdFx0XHRjcHVfdmVyc2lvbiA9IGJlMzJfdG9fY3B1cChwcm9wKTtcbjY1NTE6XHRcdFx0XHRcdFx0b2Zfbm9kZV9wdXQobnApO1xuNjU1MjpcdFx0XHRcdFx0XHRicmVhaztcbjY1NTM6XHRcdFx0XHRcdH1cbjY1NTQ6XHRcdFx0XHR9XG42NTU1Olx0XHRcdFx0aWYgKCFwcm9wKVxuNjU1NjpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42NTU3Olx0XHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG42NTU4Olx0XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2Y2FwYWJpbGl0aWVzKTtcbjY1NTk6XHRcdFx0fVxuNjU2MDpcdFx0fVxuNjU2MTpcdFxuNjU2MjpcdFx0aWYgKHJjIFx1MDAzYyAwKVxuNjU2MzpcdFx0XHRyZXR1cm4gcmM7XG42NTY0Olx0XG42NTY1Olx0XHRob3N0X2NhcHMtXHUwMDNlY29tcGF0X2NhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcyBcdTAwMjYgS1ZNX1BQQ19DT01QQVRfQklUTUFTSztcbjY1NjY6XHRcbjY1Njc6XHRcdHJldHVybiByYztcbjY1Njg6XHR9XG42NTY5Olx0XG42NTcwOlx0c3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG42NTcxOlx0XHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXG42NTcyOlx0XHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVzdGVkIEtWTSBDUFUgQ29tcGF0aWJpbGl0eSBJb2N0bCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJZiBga3ZtaHZfb25fcHNlcmllcygpYCByZXR1cm5zIGZhbHNlLCB0aGUgcmV0dXJuIGNvZGUgKGByY2ApIGlzIGAtRUlOVkFMYCwgYW5kIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIGAtRUlOVkFMYC4gSW5pdGlhbGx5LCBpdCBzZWVtZWQgbGlrZSB0aGlzIG1pZ2h0IGxpbWl0IHN1cHBvcnQgdG8gcHNlcmllcyBzeXN0ZW1zLiBUaGUgY29tbWl0IG1lc3NhZ2UgcHJvdmlkZXMgYSBjcnVjaWFsIGNsdWU6ICYjMzQ7VGhpcyBpb2N0bCBwcm92aWRlcyB1c2Vyc3BhY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQ1BVIGNvbXBhdGliaWxpdHkgbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGhvc3QgcHJvY2Vzc29yIGZvciBib290aW5nIHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0cyBvbiBLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuJiMzNDsKClRoZSBtZW50aW9uIG9mICYjMzQ7S1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpJiMzNDsgdHJpZ2dlcmVkIGEgcmVkIGZsYWcuIElmIGl0JiMzOTtzIFBvd2VyTlYsIGBrdm1odl9vbl9wc2VyaWVzKClgICpzaG91bGQqIGJlIGZhbHNlISBBbmQsIGlmIGBrdm1odl9vbl9wc2VyaWVzKClgIGlzIGluZGVlZCBmYWxzZSwgdGhlIGByY2AgaXMgYC1FSU5WQUxgLCBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byByZXR1cm4gYC1FSU5WQUxgLiBJIGZlbHQgYSBuZWVkIHRvIHJldmlzaXQgbXkgYXNzdW1wdGlvbnMuCgpPa2F5LCBsZXQgbWUgcmVyZWFkIHRoZSBjb21taXQgbWVzc2FnZTogJiMzNDsuLi5mb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb24gS1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLiYjMzQ7IEFoLCBub3cgSSBzZWUuICYjMzQ7S1ZNIG9uIFBvd2VyTlYmIzM0OyBtZWFucyB0aGUgKkwxKiBndWVzdCBpcyBydW5uaW5nIG9uIFBvd2VyTlYuIFNvLCB0aGUgYmFyZSBtZXRhbCBob3N0IChMMCkgaXMgUG93ZXJOViwgYW5kIHRoZSBndWVzdCBvbiB0b3AgKEwxKSBpcyBhIHBzZXJpZXMgZ3Vlc3QuIFRoZSBuZXN0ZWQgZ3Vlc3QgKEwyKSBydW5zIHdpdGhpbiB0aGF0IHBzZXJpZXMgZ3Vlc3QgKEwxKS4gVGhlIGlvY3RsIGlzIHRoZXJlZm9yZSBjYWxsZWQgZnJvbSBRRU1VLCB3aGljaCBpcyBydW5uaW5nICppbnNpZGUqIHRoZSBMMSBwc2VyaWVzIGd1ZXN0LgoKVGhlcmVmb3JlLCBiZWNhdXNlIHdlIGFyZSBpbiBhbiBMMSBwc2VyaWVzIGd1ZXN0LCBga3ZtaHZfb25fcHNlcmllcygpYCAqbXVzdCogYmUgdHJ1ZS4gU28sIHRoaXMgZnVuY3Rpb25hbGl0eSAqaXMqIG9ubHkgc3VwcG9ydGVkIHdoZW4gcnVubmluZyBhcyBhIHBzZXJpZXMgZ3Vlc3QuIEFuZCBzaW5jZSBzeXprYWxsZXIgcnVucyBpbiBhIHBzZXJpZXMgZ3Vlc3QgKHZpYSBRRU1VIHdpdGggYC1NIHBzZXJpZXNgKSwgaXQgYWxsIG1ha2VzIHNlbnNlLiBUaGUgY29kZSBwYXRoIHNob3VsZCBiZSBjb3JyZWN0IGFuZCwgYGt2bWh2X29uX3BzZXJpZXMoKWAgd2lsbCBldmFsdWF0ZSB0byB0cnVlLiBOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGBrdm1odl9pc19uZXN0ZWR2MigpYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtaHZfaXNfbmVzdGVkdjImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg9MzIwPXZvaWQga3ZtcHBjX2dpdmV1cF9mYWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBmYWMpO1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzI0LVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaDozMjU6ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIF9fa3ZtaHZfaXNfbmVzdGVkdjI7XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMyNi1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg6MzI3OnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9pc19uZXN0ZWR2Mih2b2lkKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zMjgte1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaDozMjk6XHRyZXR1cm4gc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZfX2t2bWh2X2lzX25lc3RlZHYyKTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzMwLX1cbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oPTMzMj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfaXNfbmVzdGVkdjEodm9pZClcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzMzLXtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg6MzM0Olx0cmV0dXJuICFzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZfX2t2bWh2X2lzX25lc3RlZHYyKTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzM1LX1cbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMzOC1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg6MzM5OnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9pc19uZXN0ZWR2Mih2b2lkKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zNDAte1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg9MzU2PXN0YXRpYyBpbmxpbmUgaW50IGt2bWh2X25lc3RlZHYyX3JlbG9hZF9wdHJlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzU4LXtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg6MzU5Olx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM2MC1cdFx0cmV0dXJuIF9fa3ZtaHZfbmVzdGVkdjJfcmVsb2FkX3B0cmVncyh2Y3B1LCByZWdzKTtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oPTM2Mz1zdGF0aWMgaW5saW5lIGludCBrdm1odl9uZXN0ZWR2Ml9tYXJrX2RpcnR5X3B0cmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zNjUte1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaDozNjY6XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzY3LVx0XHRyZXR1cm4gX19rdm1odl9uZXN0ZWR2Ml9tYXJrX2RpcnR5X3B0cmVncyh2Y3B1LCByZWdzKTtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oPTM3MT1zdGF0aWMgaW5saW5lIGludCBrdm1odl9uZXN0ZWR2Ml9tYXJrX2RpcnR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGlkZW4pXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM3Mi17XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjM3MzpcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zNzQtXHRcdHJldHVybiBfX2t2bWh2X25lc3RlZHYyX21hcmtfZGlydHkodmNwdSwgaWRlbik7XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaD0zNzg9c3RhdGljIGlubGluZSBpbnQga3ZtaHZfbmVzdGVkdjJfY2FjaGVkX3JlbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBpZGVuKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zNzkte1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaDozODA6XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzgxLVx0XHRyZXR1cm4gX19rdm1odl9uZXN0ZWR2Ml9jYWNoZWRfcmVsb2FkKHZjcHUsIGlkZW4pO1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmg9NjE0PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9vbl9wc2VyaWVzKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaC02MjItXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oOjYyMzpzdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfaXNfbmVzdGVkdjIodm9pZClcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjI0LXtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jPTI5Nj1zdGF0aWMgaW50IGt2bXBwY19ib29rM3NfaXJxcHJpb19kZWxpdmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jLTMwNC1cdGNhc2UgQk9PSzNTX0lSUVBSSU9fREVDUkVNRU5URVI6XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jOjMwNTpcdFx0ZGVsaXZlciA9ICFrdm1odl9pc19uZXN0ZWR2MigpIFx1MDAyNlx1MDAyNiAoa3ZtcHBjX2dldF9tc3IodmNwdSkgXHUwMDI2IE1TUl9FRSkgXHUwMDI2XHUwMDI2ICFjcml0O1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYy0zMDYtXHRcdHZlYyA9IEJPT0szU19JTlRFUlJVUFRfREVDUkVNRU5URVI7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYy0zMDgtXHRjYXNlIEJPT0szU19JUlFQUklPX0VYVEVSTkFMOlxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYzozMDk6XHRcdGRlbGl2ZXIgPSAha3ZtaHZfaXNfbmVzdGVkdjIoKSBcdTAwMjZcdTAwMjYgKGt2bXBwY19nZXRfbXNyKHZjcHUpIFx1MDAyNiBNU1JfRUUpIFx1MDAyNlx1MDAyNiAhY3JpdDtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMtMzEwLVx0XHR2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTM1PXVuc2lnbmVkIGxvbmcgX19rdm1odl9jb3B5X3RvZnJvbV9ndWVzdF9yYWRpeChpbnQgbHBpZCwgaW50IHBpZCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00Mi1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjQzOlx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00NC1cdFx0cmV0dXJuIEhfVU5TVVBQT1JURUQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00MTQ9c3RhdGljIGludCBrdm1wcGNfc2V0X2FyY2hfY29tcGF0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGFyY2hfY29tcGF0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDYwLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NjE6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpIFx1MDAyNlx1MDAyNiBrdm1odl9pc19uZXN0ZWR2MigpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ2Mi1cdFx0Lypcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTcyOD1zdGF0aWMgdm9pZCBrdm1wcGNfdXBkYXRlX3ZwYXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNzQxLVx0XHRpZiAob2xkX3ZwYS5waW5uZWRfYWRkcikge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo3NDI6XHRcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTc0My1cdFx0XHRcdGt2bWh2X25lc3RlZHYyX3NldF92cGEodmNwdSwgfjB1bGwpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNzQ4LVx0XHRcdGluaXRfdnBhKHZjcHUsIHZjcHUtXHUwMDNlYXJjaC52cGEucGlubmVkX2FkZHIpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo3NDk6XHRcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTc1MC1cdFx0XHRcdGt2bWh2X25lc3RlZHYyX3NldF92cGEodmNwdSwgX19wYSh2Y3B1LVx1MDAzZWFyY2gudnBhLnBpbm5lZF9hZGRyKSk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz0xNjI5PXN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9leGl0X2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTE2NDQtXHQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTY0NTpcdGlmICgha3ZtaHZfaXNfbmVzdGVkdjIoKSBcdTAwMjZcdTAwMjYgKF9fa3ZtcHBjX2dldF9tc3JfaHYodmNwdSkgXHUwMDI2IE1TUl9IVikpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMTY0Ni1cdFx0cHJpbnRrKEtFUk5fRU1FUkcgXCYjMzQ7S1ZNIHRyYXAgaW4gSFYgbW9kZSFcXG5cJiMzNDspO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMTczNS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTczNjpcdFx0aWYgKCFrdm1odl9pc19uZXN0ZWR2MigpIFx1MDAyNlx1MDAyNiB1bmxpa2VseShfX2t2bXBwY19nZXRfbXNyX2h2KHZjcHUpIFx1MDAyNiBNU1JfUFIpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTE3MzctXHRcdFx0Lypcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTI5NjA9c3RhdGljIGludCBrdm1wcGNfY29yZV92Y3B1X2NyZWF0ZV9odihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0yOTgzLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzoyOTg0Olx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMjk4NS1cdFx0ZXJyID0ga3ZtaHZfbmVzdGVkdjJfdmNwdV9jcmVhdGUodmNwdSwgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm5lc3RlZHYyX2lvKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTMxMzk9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9mcmVlX2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTMxNDUtXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudnBhX3VwZGF0ZV9sb2NrKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MzE0NjpcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zMTQ3LVx0XHRrdm1odl9uZXN0ZWR2Ml92Y3B1X2ZyZWUodmNwdSwgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm5lc3RlZHYyX2lvKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUwODQ9c3RhdGljIGludCBrdm1wcGNfdmNwdV9ydW5faHYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTE2OC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTE2OTpcdFx0XHRpZiAoIWt2bWh2X2lzX25lc3RlZHYyKCkgXHUwMDI2XHUwMDI2IFdBUk5fT05fT05DRShfX2t2bXBwY19nZXRfbXNyX2h2KHZjcHUpIFx1MDAyNiBNU1JfUFIpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUxNzAtXHRcdFx0XHQvKlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NTQxMj12b2lkIGt2bXBwY191cGRhdGVfbHBjcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbHBjciwgdW5zaWduZWQgbG9uZyBtYXNrKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTQzNC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTQzNTpcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU0MzYtXHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTU2OTc9c3RhdGljIGludCBrdm1wcGNfY29yZV9pbml0X3ZtX2h2KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU3MDctXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjU3MDg6XHRpZiAoIWt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTcwOS1cdFx0bHBpZCA9IGt2bXBwY19hbGxvY19scGlkKCk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01NzE4LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo1NzE5Olx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTcyMC1cdFx0bG9uZyByYztcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU4MTMtXHRcdGlmIChyZXQpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTgxNDpcdFx0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTgxNS1cdFx0XHRcdHBscGFyX2d1ZXN0X2RlbGV0ZSgwLCBrdm0tXHUwMDNlYXJjaC5scGlkKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTU4ODc9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfZGVzdHJveV92bV9odihzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01OTA2LVx0XHRcdHV2X3N2bV90ZXJtaW5hdGUoa3ZtLVx1MDAzZWFyY2gubHBpZCk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjU5MDc6XHRcdGlmICgha3ZtaHZfaXNfbmVzdGVkdjIoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTkwOC1cdFx0XHRrdm1odl9zZXRfcHRibF9lbnRyeShrdm0tXHUwMDNlYXJjaC5scGlkLCAwLCAwKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU5MTAtXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjU5MTE6XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01OTEyLVx0XHRrdm1odl9mbHVzaF9scGlkKGt2bS1cdTAwM2VhcmNoLmxwaWQpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjMyMD1zdGF0aWMgaW50IGt2bWh2X2VuYWJsZV9uZXN0ZWQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjMyNy1cdFx0cmV0dXJuIC1FTk9ERVY7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjYzMjg6XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjMyOS1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTMzPXN0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0MS1cdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjU0MjpcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0My1cdFx0XHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTQzOT1sb25nIGt2bWh2X25lc3RlZF9pbml0KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNDY4LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NDY5Olx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZfX2t2bWh2X2lzX25lc3RlZHYyKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ3MC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM9NTM2PXZvaWQga3ZtaHZfc2V0X3B0YmxfZW50cnkodTY0IGxwaWQsIHU2NCBkdzAsIHU2NCBkdzEpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTQ5LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTUwOlx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01NTEtXHRcdGt2bWh2X25lc3RlZHYyX3NldF9wdGJsX2VudHJ5KGxwaWQsIGR3MCwgZHcxKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWR2Mi5jLTI5LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkdjIuYzozMDpzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBfX2t2bWh2X2lzX25lc3RlZHYyIF9fcmVhZF9tb3N0bHk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWR2Mi5jOjMxOkVYUE9SVF9TWU1CT0xfR1BMKF9fa3ZtaHZfaXNfbmVzdGVkdjIpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkdjIuYy0zMi1cbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmM9Mzk4PXN0YXRpYyBpbnQgX19pbml0IGt2bXBwY19yZWdpc3Rlcl9wbXUodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmMtNDAyLVx0Lyogb25seSBzdXBwb3J0IGV2ZW50cyBmb3IgbmVzdGVkdjIgcmlnaHQgbm93ICovXG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmM6NDAzOlx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9wZXJmL2t2bS1odi1wbXUuYy00MDQtXHRcdHJjID0ga3ZtcHBjX2luaXRfaG9zdHdpZGUoKTtcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmM9NDIwPXN0YXRpYyB2b2lkIF9fZXhpdCBrdm1wcGNfdW5yZWdpc3Rlcl9wbXUodm9pZClcbmFyY2gvcG93ZXJwYy9wZXJmL2t2bS1odi1wbXUuYy00MjEte1xuYXJjaC9wb3dlcnBjL3BlcmYva3ZtLWh2LXBtdS5jOjQyMjpcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmMtNDIzLVx0XHRrdm1wcGNfY2xlYW51cF9ob3N0d2lkZSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjUyNAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiAxMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFBvd2VyUEMgS1ZNIENvbXBhdGliaWxpdHkgQ2FwYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gYSBmdW5jdGlvbmFsaXR5IHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGxvb2tzIHNvbGlkOyBga3ZtaHZfaXNfbmVzdGVkdjIoKWAgZ2V0cyBlbmFibGVkIGluIGBrdm1odl9uZXN0ZWRfaW5pdCgpYCBpZiB0aGUgaG9zdCBzdXBwb3J0cyBuZXN0ZWR2Mi4gV2UmIzM5O3JlIHVzaW5nIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB3aXRoIGBuZXN0ZWRfY2FwYWJpbGl0aWVzYCBpbiB0aGUgbmVzdGVkdjIgY2FzZS4gSWYgaXQmIzM5O3MgbmVzdGVkdjEgb3IgcHNlcmllcywgd2UgYXJlIHJlYWRpbmcgYGNwdS12ZXJzaW9uYCBmcm9tIHRoZSBkZXZpY2UgdHJlZS4gQm90aCBwYXRocyBhcmUgd29ya2luZy4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBuZWVkcyBmdXp6ZWQuCgpUaGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBhcmUgZ29pbmcgdG8gYmU6IGBLVk1fQk9PSzNTXzY0X0hWYCwgYFBQQ19QT1dFUk5WYCwgYW5kIGBQUENfUFNFUklFU2AuIEhvbGQgb24sIGBLVk1fQk9PSzNTXzY0X0hWYCByZXF1aXJlcyBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIExldCYjMzk7cyBrZWVwIHRoYXQgaW4gbWluZC4KCldlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBpbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgYW5kLCBpbXBvcnRhbnRseSwgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2Agd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gU28gdGhvc2UgYXJlIG91ciBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuCgpOb3csIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBoYW5kbGVzIHRoYXQgaW9jdGwuIFNob3VsZCB3ZSBpbmNsdWRlIGl0PyBObywgYmVjYXVzZSBpdCYjMzk7cyBhIGdlbmVyaWMgaG90LXBhdGggZm9yIFZNIGlvY3Rscywgbm90IHNwZWNpZmljIHRvIHRoaXMgcGF0Y2guIFRoaXMgaW9jdGwgbG9naWMgaXMgaW5saW5lIGluIHRoZSBgc3dpdGNoYCBzdGF0ZW1lbnQgb2YgYGt2bV9hcmNoX3ZtX2lvY3RsYCBzbywgd2UgY2FuJiMzOTt0IHJlYWxseSBmb2N1cyBpdC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGBFbmFibGVDb25maWdzYCBhZ2Fpbi4gYEtWTV9CT09LM1NfNjRfSFZgLCBgUFBDX1BPV0VSTlZgLCBhbmQgYFBQQ19QU0VSSUVTYC4gV2Ugc2hvdWxkIGFkZCBgS1ZNX0JPT0szU182NGAgdG9vIGJlY2F1c2UgaXQgaXMgbmVlZGVkIGJ5IGBLVk1fQk9PSzNTXzY0X0hWYC4gU3l6a2FsbGVyIG1heSBvciBtYXkgbm90IGVuYWJsZSBwbGF0Zm9ybSBjb25maWdzIGxpa2UgYFBQQ19QT1dFUk5WYCBhbmQgYFBQQ19QU0VSSUVTYCBieSBkZWZhdWx0LCBidXQgbGlzdGluZyB0aGVtIGlzIHRoZSByaWdodCBhcHByb2FjaC4KClNvLCB0aGUgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AsIHdoaWNoIGNvcGllcyBkYXRhIHRvL2Zyb20gdXNlcnNwYWNlIGFuZCBjYWxscyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFRoaXMgYWRkcyBuZXcsIGV4ZWN1dGFibGUgY29kZSB0aGF0IHdlIGNhbiBoaXQgd2hlbiBydW5uaW5nIGEgcHNlcmllcyBtYWNoaW5lIHdpdGggUUVNVSwgc28gd2Ugc2hvdWxkIGZ1enogaXQuCgpKdXN0IHRvIGJlIHN1cmUsIGBrdm1wcGNfaGFzaF92M19wb3NzaWJsZWAgaXNuJiMzOTt0IG1vZGlmaWVkLiBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAgaXMgY2hhbmdlZCB0byByZXR1cm4gMSBmb3IgYEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTYCwgYnV0IHRoYXQmIzM5O3MgYSBnZW5lcmljIGNoZWNrIHNvIHdlJiMzOTtsbCBza2lwIGl0LgoKU28sIG91ciBrZXkgYEZvY3VzU3ltYm9sc2AgYXJlOiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgYW5kIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLgoKQW5kLCBmb3IgYEVuYWJsZUNvbmZpZ3NgLCB3ZSB3YW50OiBgS1ZNX0JPT0szU182NF9IVmAsIGBQUENfUE9XRVJOVmAsIGBQUENfUFNFUklFU2AsIGFuZCBgS1ZNX0JPT0szU182NGAuIFNwZWNpZmljYWxseSwgYEtWTV9CT09LM1NfNjRfSFZgIGRlcGVuZHMgb24gYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgLiBXZSBuZWVkIGBQUENfUFNFUklFU2Agc28gdGhhdCBga3ZtaHZfb25fcHNlcmllcygpYCBjYW4gYmUgdHJ1ZS4gVGhhdCBjb21iaW5hdGlvbiBpcyBjb3JyZWN0LgoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X0hWLCBQUENfUE9XRVJOViwgUFBDX1BTRVJJRVM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0JPT0szU182NF9IViYjMzQ7LAogICAgJiMzNDtQUENfUE9XRVJOViYjMzQ7LAogICAgJiMzNDtQUENfUFNFUklFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OywKICAgICYjMzQ7a3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX0JPT0szU182NF9IViwgUFBDX1BPV0VSTlYsIFBQQ19QU0VSSUVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgxOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlndXJhdGlvbiBEaWxlbW1hKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIFNvbWV0aGluZyYjMzk7cyBub3QgcmlnaHQuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSB3YXMgZXhwZWN0aW5nLi4uIHRoZXkmIzM5O3JlIG5vdCBwcmVzZW50PyBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQuIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBvdmVyc2lnaHQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gdGhlIFBvd2VyUEMgS1ZNIGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgcmV2aXNpdCBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IEkmIzM5O20gbm90IG92ZXJsb29raW5nIGEgY29uZGl0aW9uYWwgaW5jbHVzaW9uIG9yIGEgZGVwZW5kZW5jeSB0aGF0IEkmIzM5O3ZlIG1pc3NlZC4gQSBkZWVwZXIgZGl2ZSBpcyByZXF1aXJlZCB0byBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIG1pc3NpbmcgY29uZmlnLiBJdCBpcyBiZXN0IHRvIG5vdCB0YWtlIGFueXRoaW5nIGZvciBncmFudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NF9IViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mj1jb25maWcgS1ZNX0JPT0szU182NFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTQ1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgS2NvbmZpZyBJc3N1ZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGRpc3RpbmN0bHkgcmVtZW1iZXIgc2VlaW5nIGBLVk1fQk9PSzNTXzY0X0hWYCBkZWZpbmVkIHNvbWV3aGVyZS4gU28sIHdoeSBkaWQgdGhlIHByZXZpb3VzIG91dHB1dCBjbGFpbSBpdCB3YXNuJiMzOTt0IHJlY29nbml6ZWQ/IFRoaXMgaXMgZnJ1c3RyYXRpbmcsIGl0JiMzOTtzIHVzdWFsbHkgc29tZXRoaW5nIHN0cmFpZ2h0Zm9yd2FyZC4uLiBMZXQmIzM5O3Mgc2VlLCBwZXJoYXBzIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBpbmNsdWRlZCBpbiB0aGUgdG9wLWxldmVsIGBLY29uZmlnYCBmaWxlLiBPciwgbWF5YmUgSSYjMzk7bSBtaXNyZW1lbWJlcmluZyB0aGUgKmV4YWN0KiBuYW1lIGFuZCB0aGVyZSYjMzk7cyBhIHNsaWdodCB2YXJpYXRpb24gSSYjMzk7bSBtaXNzaW5nLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgc291cmNlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgZm9yIGEgZGVmaW5pdGl2ZSBhbnN3ZXI7IGxldCYjMzk7cyBpbnZlc3RpZ2F0ZSB0aGUgYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnYCBmaWxlLiBIb3BlZnVsbHksIGl0JiMzOTtzIGRlZmluZWQgdGhlcmUgYW5kIHRoaXMgd2lsbCByZXNvbHZlIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQQ19QT1dFUk5WJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZzoyOmNvbmZpZyBQUENfUE9XRVJOVlxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMy1cdGRlcGVuZHMgb24gUFBDNjQgXHUwMDI2XHUwMDI2IFBQQ19CT09LM1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1MDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgYHNldC1yZXN1bHRzYCBGYWlsdXJlKioKCk9rYXksIHNvIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQgZmFpbGVkLiBUaGF0JiMzOTtzIG5vdCBpZGVhbC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSBpcyB0aGF0IHNvbWV0aGluZyAqZG9lcyogZXhpc3QsIGJ1dCB0aGUgdG9vbCBkb2VzbiYjMzk7dCBzZWUgaXQuIFRoaXMgbWFrZXMgbWUgdGhpbmsgaXQgY291bGQgYmUgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcHJvYmxlbS4gUGVyaGFwcyB0aGUgdG9vbCBkZWZhdWx0cyB0byBhbiB4ODYgY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtzIG5vdCBmaW5kaW5nIHRoZSBQb3dlclBDIGNvbmZpZ3MgSSBuZWVkPwoKQnV0IHRoZW4gdGhlIGVycm9yIG1lc3NhZ2UgdGhyb3dzIGEgd3JlbmNoIGludG8gdGhhdCB0aGVvcnksIGNsYWltaW5nIHRoZSBjb25maWd1cmF0aW9ucyAmIzM0O2RvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWUmIzM0Oy4gT2theSwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGNsYXJpZnkgd2hldGhlciBJIG5lZWQgdG8gdXNlIGBLVk1gIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFYCBpcyBhY3R1YWxseSBkZWZpbmVkLCB0aGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Mzg9Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5MzUKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyb3VibGVzaG9vdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyB0b29sIGlzIGZhaWxpbmcgdG8gZmluZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IG1pZ2h0IGJlIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBtYWtlIGxpc3RuZXdjb25maWdgIG9yIGFub3RoZXIgc2NyaXB0IHRoYXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGxpa2UgYEFSQ0g9eDg2YC4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBpdCYjMzk7cyBubyB3b25kZXIgSSYjMzk7bSBub3Qgc2VlaW5nIFBvd2VyUEMgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgdG9vbCBpcyBhcmNoaXRlY3R1cmUtYWdub3N0aWMgb3IgdGhhdCBJJiMzOTttIHByb3ZpZGluZyBpdCB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHQuCgpQZXJoYXBzIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBqdXN0IG9taXQgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWdzIGlmIHRoZSB0b29sIGluaGVyZW50bHkgcmVqZWN0cyB0aGVtLiBNYXliZSBhIG1vcmUgZWxlZ2FudCBzb2x1dGlvbiBpcyB0byBwcm92aWRlIG9ubHkgdGhlIGJhcmUgbWluaW11bSwgc3VjaCBhcyBgS1ZNYCB3aGljaCBob3BlZnVsbHkgaXMgYXJjaC1hZ25vc3RpYy4KCldhaXQgYSBzZWNvbmTigKYgdGhlIGVycm9yIG1lc3NhZ2UgYWN0dWFsbHkgc2F5cyAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlLiYjMzQ7IFRoYXQmIzM5O3MgYSBkaWZmZXJlbnQgcHJvYmxlbSBhbHRvZ2V0aGVyISBJIG5lZWQgdG8gdHJ5IHN1cHBseWluZyBpdCB3aXRoIGBLVk1gIGFuZCBzZWUgaWYgdGhhdCByZXNvbHZlcyB0aGUgaXNzdWUgZGlyZWN0bHkuIExldCYjMzk7cyBzZWUgaWYgdGhhdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OywKICAgICYjMzQ7a3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OywKICAgICYjMzQ7a3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODowMS45NDY1NjUzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzQyNjk4ODAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzXCIsXG4gICAgXCJrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGltcGxlbWVudGF0aW9uIGludm9sdmVzIGNvcHlpbmcgZGF0YSBmcm9tL3RvIHVzZXJzcGFjZSwgY2hlY2tpbmcgc2l6ZXMsIGFuZCBjYWxsaW5nIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUga2VybmVsIGxvZ2ljLCB3aGljaCBjYW4gYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAocHNlcmllcyBtYWNoaW5lKS4gVGhlcmVmb3JlLCBpdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODowMS45NDY1NzAyOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMjI5MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWFmOWMxODk3ZTg2OWM5NzljMjVmYTM4N2JjM2JiYTNjNWM2MjYzZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDA5OjU4OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbmluZGV4IGE1ZjllZTkyZjQzZThkLi40MzgxMGM0NTEzMTdmYiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5AQCAtNjU2Niw2ICs2NTY2LDg1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcXG4gICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleVxcbiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuXFxuIFxcbis0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcXG4rOkFyY2hpdGVjdHVyZXM6IHBvd2VycGNcXG4rOlR5cGU6IHZtIGlvY3RsXFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAob3V0KVxcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlXFxuK1xcbitFcnJvcnMgaW5jbHVkZTpcXG4rXFxuKyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcXG4rICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZVxcbisgIEVJTlZBTCAgIGlmIHRoZSBgYHNpemVgYCBmaWVsZCBpcyBzbWFsbGVyIHRoYW5cXG4rICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcXG4rICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwXFxuKyAgICAgICAgICAgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzXFxuKyAgRTJCSUcgICAgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplXFxuKyAgICAgICAgICAgKG5ldyB1c2Vyc3BhY2Ugb24gb2xkIGtlcm5lbCk7IHRoZSBrZXJuZWwgd3JpdGVzIGJhY2sgaXRzXFxuKyAgICAgICAgICAgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW5cXG4rICAgICAgICAgICByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemVcXG4rICBFTk9UVFkgICBpZiB0aGUgYmFja2VuZCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGBgZ2V0X2NvbXBhdF9jYXBzYGBcXG4rICAgICAgICAgICBvcGVyYXRpb24gKGUuZy4sIG9uIG5vbi1wc2VyaWVzIHBsYXRmb3JtcyBvciB3aGVuIHRoZVxcbisgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKVxcbisgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXG4rSUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmVcXG4rd2hlcmUgYW4gTnRoIGdlbmVyYXRpb24gcHJvY2Vzc29yIGNhbiBvcGVyYXRlIGluIG1vZGVzIGNvbnNpc3RlbnQgd2l0aCBlYXJsaWVyXFxuK2dlbmVyYXRpb25zIHN1Y2ggYXMgKE4tMSkgYW5kIChOLTIpLlxcbitcXG4rVGhpcyBpb2N0bCBwcm92aWRlcyB1c2Vyc3BhY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQ1BVIGNvbXBhdGliaWxpdHkgbW9kZXNcXG4rc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGhvc3QgcHJvY2Vzc29yIGZvciBib290aW5nIHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0cyBvblxcbitLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuXFxuK1xcbis6OlxcbitcXG4rICBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XFxuK1xcdF9fdTY0XFx0c2l6ZTtcXHRcXHRcXHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXFxuK1xcdF9fdTY0XFx0ZmxhZ3M7XFx0XFx0XFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgMCAqL1xcbitcXHRfX3U2NFxcdGNvbXBhdF9jYXBhYmlsaXRpZXM7XFx0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xcbisgIH07XFxuK1xcbitCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvXFxuK2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXFxuK1RoZSBrZXJuZWwgcmVqZWN0cyBub24temVybyBgYGZsYWdzYGAgd2l0aCBgYC1FSU5WQUxgYCB0byBwcmV2ZW50XFxuK3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlXFxuK2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXFxuK1xcbitUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGBcXG4rdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmc6IGlmIHVzZXJzcGFjZSBwYXNzZXMgYSBzdHJ1Y3Qgc21hbGxlclxcbit0aGFuIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uIChgYHNpemUgXFx1MDAzZT0gS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCksXFxuK3RoZSBrZXJuZWwgemVyby1wYWRzIHVua25vd24gdHJhaWxpbmcgZmllbGRzLiBJZiB1c2Vyc3BhY2UgcGFzc2VzIGEgbGFyZ2VyXFxuK3N0cnVjdCAoYGBzaXplIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgKSwgdGhlIGtlcm5lbCB3cml0ZXNcXG4rYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIGFuZCByZXR1cm5zIGBgLUUyQklHYGAsXFxuK2FsbG93aW5nIHVzZXJzcGFjZSB0byBkaXNjb3ZlciB0aGUga2VybmVsJ3Mgc3RydWN0IHNpemUgYW5kIHJldHJ5LlxcbitgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZVxcbitzaXplIG9mIHRoZSBpbml0aWFsIHN0cnVjdCB2ZXJzaW9uLlxcbitcXG4rVGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5XFxuK21vZGVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdC4gVGhlIGZvbGxvd2luZyBiaXRzIGluZGljYXRlIHN1cHBvcnQgZm9yIHNwZWNpZmljXFxuK3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJ3MgTVNCLTAgY29udmVudGlvbiB3aGVyZSBiaXQgMCBpcyB0aGUgbW9zdFxcbitzaWduaWZpY2FudCBiaXQpOlxcbitcXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgKGJpdCAxKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXI5IHByb2Nlc3NvciBtb2RlXFxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGVcXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxcbitcXG4rLi4gbm90ZTo6XFxuK1xcbisgICBUaGUgYml0IG51bWJlcmluZyBhYm92ZSB1c2VzIElCTSdzIE1TQi0wIGNvbnZlbnRpb24gKGJpdCAwIGlzIHRoZSBtb3N0XFxuKyAgIHNpZ25pZmljYW50IGJpdCkuIEluIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIHRoZXNlIGFyZSBkZWZpbmVkIGFzOlxcbitcXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgPSBgYCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYyKWBgXFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgID0gYGAoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MSlgYFxcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgXFx1MDAzY1xcdTAwM2MgNjApYGBcXG4rXFxuKyAgIFVzZXJzcGFjZSBzaG91bGQgdXNlIHRoZSBkZWZpbmVkIGNvbnN0YW50cyBmcm9tIGBgXFx1MDAzY2xpbnV4L2t2bS5oXFx1MDAzZWBgIHJhdGhlclxcbisgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy5cXG4rXFxuIC4uIF9rdm1fcnVuOlxcbiBcXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXFxuaW5kZXggMDk1M2YyZGFhNDY2MGYuLjE2OWVhNmE3ZmJhZDQ0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXFxuQEAgLTMxOSw2ICszMTksNyBAQCBzdHJ1Y3Qga3ZtcHBjX29wcyB7XFxuIFxcdGJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTtcXG4gXFx0aW50ICgqY3JlYXRlX3ZtX2RlYnVnZnMpKHN0cnVjdCBrdm0gKmt2bSk7XFxuIFxcdGludCAoKmNyZWF0ZV92Y3B1X2RlYnVnZnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnkpO1xcbitcXHRpbnQgKCpnZXRfY29tcGF0X2NhcHMpKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpO1xcbiB9O1xcbiBcXG4gZXh0ZXJuIHN0cnVjdCBrdm1wcGNfb3BzICprdm1wcGNfaHZfb3BzO1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuaW5kZXggMDc3YzU0MzdmNTIxOWIuLjkxM2E2NGI5MDFhM2Q3IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5AQCAtNDM3LDYgKzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7XFxuIFxcdF9fdTY0XFx0YmVoYXZpb3VyX21hc2s7XFx0XFx0LyogdmFsaWQgYml0cyBpbiBiZWhhdmlvdXIgKi9cXG4gfTtcXG4gXFxuKy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqL1xcbitzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XFxuK1xcdF9fdTY0XFx0c2l6ZTtcXHRcXHRcXHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXFxuK1xcdF9fdTY0XFx0ZmxhZ3M7XFx0XFx0XFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cXG4rXFx0X191NjRcXHRjb21wYXRfY2FwYWJpbGl0aWVzO1xcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cXG4rfTtcXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMFxcdDI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovXFxuK1xcbisvKlxcbisgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy5cXG4rICogVGhlc2UgYml0cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBtb2RlcyBhcmUgc3VwcG9ydGVkLlxcbisgKi9cXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNjIpXFxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MSlcXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMVxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYwKVxcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0tcXHRcXHQoS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpXFxuIC8qXFxuICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay5cXG4gICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG5pbmRleCA2MWRiZWVhMzE3ZjNiNy4uNzBkY2QzNzBmZDlhYzcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG5AQCAtNjUxMCw2ICs2NTEwLDYzIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjb25zdCBfX2JlMzIgY3B1X3ZlcnNpb24sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcylcXG4re1xcbitcXHRzd2l0Y2ggKGNwdV92ZXJzaW9uKSB7XFxuK1xcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxcbitcXHRcXHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBQVlJfQVJDSF8zMTpcXG4rXFx0XFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMDtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgUFZSX0FSQ0hfMzAwOlxcbitcXHRcXHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcXG4rXFx0Y29uc3QgX19iZTMyICpwcm9wID0gTlVMTDtcXG4rXFx0bG9uZyByYyA9IC1FSU5WQUw7XFxuK1xcdHUzMiBjcHVfdmVyc2lvbjtcXG4rXFxuK1xcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG4rXFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTtcXG4rXFx0XFx0XFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcXG4rXFx0XFx0XFx0cmMgPSAwO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFxcXCJjcHVcXFwiKSB7XFxuK1xcdFxcdFxcdFxcdHByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsIFxcXCJjcHUtdmVyc2lvblxcXCIsIE5VTEwpO1xcbitcXHRcXHRcXHRcXHRpZiAocHJvcCkge1xcbitcXHRcXHRcXHRcXHRcXHRjcHVfdmVyc2lvbiA9IGJlMzJfdG9fY3B1cChwcm9wKTtcXG4rXFx0XFx0XFx0XFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmICghcHJvcClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNhcGFiaWxpdGllcyk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0aG9zdF9jYXBzLVxcdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFxcdTAwMjYgS1ZNX1BQQ19DT01QQVRfQklUTUFTSztcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XFxuIFxcdC5nZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVnc19odixcXG4gXFx0LnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LFxcbkBAIC02NTUyLDYgKzY2MDksNyBAQCBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcXG4gXFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcXG4gXFx0LmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LFxcbiBcXHQuY3JlYXRlX3ZtX2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdm1fZGVidWdmc19odixcXG4rXFx0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IGt2bV9pbml0X3N1YmNvcmVfYml0bWFwKHZvaWQpXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcXG5pbmRleCAwMDMwMjM5OWZjMzdiNC4uOGQ2NjMyYzY0Y2E1ZjkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xcbkBAIC02OTcsNiArNjk3LDEzIEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4rI2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXFxuK1xcdGNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6XFxuK1xcdFxcdHIgPSAwO1xcbitcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxcbitcXHRcXHRcXHRyID0gMTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqL1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTI0NjMsNiArMjQ3MCw3MCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSBrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlc3ZtX29mZihrdm0pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7XFxuK1xcdFxcdHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIGhvc3RfY2FwcyA9IHt9O1xcbitcXHRcXHR1NjQgdXNpemU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci5cXG4rXFx0XFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ciA9IC1FRkFVTFQ7XFxuK1xcdFxcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVuZm9yY2UgYSBtaW5pbXVtOiByZWplY3QgYnVmZmVycyBzbWFsbGVyIHRoYW4gdGhlIGluaXRpYWxcXG4rXFx0XFx0ICogc3RydWN0IHZlcnNpb24gKFZFUjApLiBUaGlzIGFsbG93cyBvbGQgdXNlcnNwYWNlIGNvbXBpbGVkXFxuK1xcdFxcdCAqIGFnYWluc3QgdGhlIG9yaWdpbmFsIHN0cnVjdCB0byBzdGlsbCB3b3JrIG9uIGEgbmV3ZXIga2VybmVsXFxuK1xcdFxcdCAqIHRoYXQgaGFzIGdyb3duIHRoZSBzdHJ1Y3Qgd2l0aCBhcHBlbmRlZCBmaWVsZHMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyID0gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKHVzaXplIFxcdTAwM2MgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjApXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTmV3IHVzZXJzcGFjZSB3aXRoIGEgbGFyZ2VyIHN0cnVjdCBjYWxsZWQgYW4gb2xkZXIga2VybmVsLlxcbitcXHRcXHQgKiBXcml0ZSBiYWNrIGtzaXplIGluIGhvc3RfY2Fwcy5zaXplIHNvIHVzZXJzcGFjZSBrbm93cyB3aGljaFxcbitcXHRcXHQgKiBvbGRlciBzdHJ1Y3QgdG8gcmV0cnkgd2l0aCwgdGhlbiBmYWlsIHdpdGggLUUyQklHLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHVzaXplIFxcdTAwM2Ugc2l6ZW9mKGhvc3RfY2FwcykpIHtcXG4rXFx0XFx0XFx0aG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTtcXG4rXFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuK1xcdFxcdFxcdGlmIChwdXRfdXNlcihob3N0X2NhcHMuc2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0ciA9IC1FMkJJRztcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGNvcHlfc3RydWN0X2Zyb21fdXNlcigpIGhhbmRsZXMgZm9yd2FyZC9iYWNrd2FyZCBjb21wYXQ6XFxuK1xcdFxcdCAqICAgdXNpemUgPT0ga3NpemU6IHZlcmJhdGltIGNvcHlcXG4rXFx0XFx0ICogICB1c2l6ZSBcXHUwMDNjICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyID0gY29weV9zdHJ1Y3RfZnJvbV91c2VyKFxcdTAwMjZob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLFxcbitcXHRcXHRcXHRcXHRcXHQgIGFyZ3AsIHVzaXplKTtcXG4rXFx0XFx0aWYgKHIpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0LyogUmVzZXJ2ZWQgZmllbGRzIG11c3QgYmUgemVybyAqL1xcbitcXHRcXHRyID0gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKGhvc3RfY2Fwcy5mbGFncylcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRyID0gLUVOT1RUWTtcXG4rXFx0XFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlZ2V0X2NvbXBhdF9jYXBzKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdHIgPSBrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlZ2V0X2NvbXBhdF9jYXBzKFxcdTAwMjZob3N0X2NhcHMpO1xcbitcXHRcXHRpZiAocilcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRob3N0X2NhcHMuc2l6ZSA9IHNpemVvZihob3N0X2NhcHMpO1xcbitcXHRcXHRyID0gY29weV9zdHJ1Y3RfdG9fdXNlcihhcmdwLCB1c2l6ZSwgXFx1MDAyNmhvc3RfY2FwcyxcXG4rXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbiBcXHRkZWZhdWx0OiB7XFxuIFxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFx0XFx0ciA9IGt2bS1cXHUwMDNlYXJjaC5rdm1fb3BzLVxcdTAwM2VhcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5pbmRleCA0MTkwMTEwOTdmYThlMi4uMWNmOWE5NTk2NjllOGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXFxuQEAgLTk5Nyw2ICs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9LRVlPUCAyNDdcXG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OFxcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcXG4rI2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTBcXG4gXFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XFxuIFxcdF9fdTMyIGlycWNoaXA7XFxuQEAgLTEzNTAsNiArMTM1MSw5IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XFxuICNkZWZpbmUgS1ZNX0dFVF9ERVZJQ0VfQVRUUlxcdCAgX0lPVyhLVk1JTywgIDB4ZTIsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXFxuICNkZWZpbmUgS1ZNX0hBU19ERVZJQ0VfQVRUUlxcdCAgX0lPVyhLVk1JTywgIDB4ZTMsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXFxuIFxcbisvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqL1xcbisjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXFx0X0lPKEtWTUlPLCAgMHhlNClcXG4rXFxuIC8qXFxuICAqIGlvY3RscyBmb3IgdmNwdSBmZHNcXG4gICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjAyLjQxOTM1MzMyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyOTU0MTkwMTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bXBwY19nZXRfY29tcGF0X2NhcHNcIixcbiAgICBcImt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWFmOWMxODk3ZTg2OWM5NzljMjVmYTM4N2JjM2JiYTNjNWM2MjYzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDk6NTg6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZThkLi40MzgxMGM0NTEzMTdmYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtNjU2Niw2ICs2NTY2LDg1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuKzQuMTQ1IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcbis6QXJjaGl0ZWN0dXJlczogcG93ZXJwY1xuKzpUeXBlOiB2bSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAob3V0KVxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmVcbitcbitFcnJvcnMgaW5jbHVkZTpcbitcbisgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcbisgICAgICAgICAgIHdyaXR0ZW4gdG8gdXNlcnNwYWNlXG4rICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuXG4rICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcbisgICAgICAgICAgIGlzIG5vbi16ZXJvLCBvciBpZiB0aGUgYmFja2VuZCBmYWlscyB0byByZXRyaWV2ZSBvciBtYXBcbisgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllc1xuKyAgRTJCSUcgICAgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplXG4rICAgICAgICAgICAobmV3IHVzZXJzcGFjZSBvbiBvbGQga2VybmVsKTsgdGhlIGtlcm5lbCB3cml0ZXMgYmFjayBpdHNcbisgICAgICAgICAgIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuXG4rICAgICAgICAgICByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemVcbisgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYFxuKyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tcHNlcmllcyBwbGF0Zm9ybXMgb3Igd2hlbiB0aGVcbisgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKVxuKyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rSUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmVcbit3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXJcbitnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cbitcbitUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2Rlc1xuK3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cbitLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuXG4rXG4rOjpcbitcbisgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbitcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbitcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSwgbXVzdCBiZSAwICovXG4rXHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbisgIH07XG4rXG4rQmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xuK2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXG4rVGhlIGtlcm5lbCByZWplY3RzIG5vbi16ZXJvIGBgZmxhZ3NgYCB3aXRoIGBgLUVJTlZBTGBgIHRvIHByZXZlbnRcbit1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxuK2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG4rXG4rVGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXG4rdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmc6IGlmIHVzZXJzcGFjZSBwYXNzZXMgYSBzdHJ1Y3Qgc21hbGxlclxuK3RoYW4gdGhlIGN1cnJlbnQga2VybmVsIHZlcnNpb24gKGBgc2l6ZSBcdTAwM2U9IEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGApLFxuK3RoZSBrZXJuZWwgemVyby1wYWRzIHVua25vd24gdHJhaWxpbmcgZmllbGRzLiBJZiB1c2Vyc3BhY2UgcGFzc2VzIGEgbGFyZ2VyXG4rc3RydWN0IChgYHNpemUgXHUwMDNlIHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCksIHRoZSBrZXJuZWwgd3JpdGVzXG4rYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIGFuZCByZXR1cm5zIGBgLUUyQklHYGAsXG4rYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGRpc2NvdmVyIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSBhbmQgcmV0cnkuXG4rYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgICgyNCkgaXMgYSBmcm96ZW4gY29uc3RhbnQgbWFya2luZyB0aGVcbitzaXplIG9mIHRoZSBpbml0aWFsIHN0cnVjdCB2ZXJzaW9uLlxuK1xuK1RoZSBgYGNvbXBhdF9jYXBhYmlsaXRpZXNgYCBiaXQgZmllbGQgZGVzY3JpYmVzIHRoZSBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eVxuK21vZGVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdC4gVGhlIGZvbGxvd2luZyBiaXRzIGluZGljYXRlIHN1cHBvcnQgZm9yIHNwZWNpZmljXG4rcHJvY2Vzc29yIG1vZGVzICh1c2luZyBJQk0ncyBNU0ItMCBjb252ZW50aW9uIHdoZXJlIGJpdCAwIGlzIHRoZSBtb3N0XG4rc2lnbmlmaWNhbnQgYml0KTpcbitcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICAoYml0IDEpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjkgcHJvY2Vzc29yIG1vZGVcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxuK1xuKy4uIG5vdGU6OlxuK1xuKyAgIFRoZSBiaXQgbnVtYmVyaW5nIGFib3ZlIHVzZXMgSUJNJ3MgTVNCLTAgY29udmVudGlvbiAoYml0IDAgaXMgdGhlIG1vc3RcbisgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczpcbitcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYyKWBgXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlgYFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMWBgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjApYGBcbitcbisgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlYGAgcmF0aGVyXG4rICAgdGhhbiBoYXJkY29kaW5nIGJpdCBwb3NpdGlvbnMuXG4rXG4gLi4gX2t2bV9ydW46XG4gXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbmluZGV4IDA5NTNmMmRhYTQ2NjBmLi4xNjllYTZhN2ZiYWQ0NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbkBAIC0zMTksNiArMzE5LDcgQEAgc3RydWN0IGt2bXBwY19vcHMge1xuIFx0Ym9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpO1xuIFx0aW50ICgqY3JlYXRlX3ZtX2RlYnVnZnMpKHN0cnVjdCBrdm0gKmt2bSk7XG4gXHRpbnQgKCpjcmVhdGVfdmNwdV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5KTtcbitcdGludCAoKmdldF9jb21wYXRfY2Fwcykoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcyk7XG4gfTtcbiBcbiBleHRlcm4gc3RydWN0IGt2bXBwY19vcHMgKmt2bXBwY19odl9vcHM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMDc3YzU0MzdmNTIxOWIuLjkxM2E2NGI5MDFhM2Q3IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgKzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7XG4gXHRfX3U2NFx0YmVoYXZpb3VyX21hc2s7XHRcdC8qIHZhbGlkIGJpdHMgaW4gYmVoYXZpb3VyICovXG4gfTtcbiBcbisvKiBGb3IgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgKi9cbitzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XG4rXHRfX3U2NFx0c2l6ZTtcdFx0XHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXG4rXHRfX3U2NFx0ZmxhZ3M7XHRcdFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbitcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuK307XG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMFx0MjQgLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi9cbitcbisvKlxuKyAqIENhcGFiaWxpdHkgYml0cyBmb3IgY29tcGF0X2NhcGFiaWxpdGllcyBmaWVsZCBpbiBrdm1fcHBjX2NvbXBhdF9jYXBzLlxuKyAqIFRoZXNlIGJpdHMgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgbW9kZXMgYXJlIHN1cHBvcnRlZC5cbisgKi9cbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MilcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwXHQoMVVMTCBcdTAwM2NcdTAwM2MgNjEpXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYwKVxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQklUTUFTS1x0XHQoS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOSB8IFxcXG4rXHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMCB8IFxcXG4rXHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMSlcbiAvKlxuICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay5cbiAgKiBUaGVzZSBhcmUgaWRlbnRpY2FsIHRvIHRoZSB2YWx1ZXMgdXNlZCBieSBIX0dFVF9DUFVfQ0hBUkFDVEVSSVNUSUNTLlxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5pbmRleCA2MWRiZWVhMzE3ZjNiNy4uNzBkY2QzNzBmZDlhYzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5AQCAtNjUxMCw2ICs2NTEwLDYzIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY29uc3QgX19iZTMyIGNwdV92ZXJzaW9uLFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxuK3tcbitcdHN3aXRjaCAoY3B1X3ZlcnNpb24pIHtcbitcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxuK1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgUFZSX0FSQ0hfMzE6XG4rXHRcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTA7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBQVlJfQVJDSF8zMDA6XG4rXHRcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuK1x0dW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMgPSAwO1xuK1x0Y29uc3QgX19iZTMyICpwcm9wID0gTlVMTDtcbitcdGxvbmcgcmMgPSAtRUlOVkFMO1xuK1x0dTMyIGNwdV92ZXJzaW9uO1xuK1xuK1x0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuK1x0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuK1x0XHRcdFdBUk5fT05fT05DRSghbmVzdGVkX2NhcGFiaWxpdGllcyk7XG4rXHRcdFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcbitcdFx0XHRyYyA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcImNwdVwiKSB7XG4rXHRcdFx0XHRwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBcImNwdS12ZXJzaW9uXCIsIE5VTEwpO1xuK1x0XHRcdFx0aWYgKHByb3ApIHtcbitcdFx0XHRcdFx0Y3B1X3ZlcnNpb24gPSBiZTMyX3RvX2NwdXAocHJvcCk7XG4rXHRcdFx0XHRcdG9mX25vZGVfcHV0KG5wKTtcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghcHJvcClcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0aG9zdF9jYXBzLVx1MDAzZWNvbXBhdF9jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXMgXHUwMDI2IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0LmdldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzX2h2LFxuIFx0LnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LFxuQEAgLTY1NTIsNiArNjYwOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcbiBcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcbiBcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuK1x0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGt2bV9pbml0X3N1YmNvcmVfYml0bWFwKHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuaW5kZXggMDAzMDIzOTlmYzM3YjQuLjhkNjYzMmM2NGNhNWY5IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG5AQCAtNjk3LDYgKzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbisjaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcbitcdGNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6XG4rXHRcdHIgPSAwO1xuK1x0XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxuK1x0XHRcdHIgPSAxO1xuK1x0XHRicmVhaztcbisjZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cbiBcdGRlZmF1bHQ6XG4gXHRcdHIgPSAwO1xuIFx0XHRicmVhaztcbkBAIC0yNDYzLDYgKzI0NzAsNzAgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2Vzdm1fb2ZmKGt2bSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuK1x0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xuK1x0XHRzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtcbitcdFx0dTY0IHVzaXplO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci5cbitcdFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxuK1x0XHQgKi9cbitcdFx0ciA9IC1FRkFVTFQ7XG4rXHRcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBFbmZvcmNlIGEgbWluaW11bTogcmVqZWN0IGJ1ZmZlcnMgc21hbGxlciB0aGFuIHRoZSBpbml0aWFsXG4rXHRcdCAqIHN0cnVjdCB2ZXJzaW9uIChWRVIwKS4gVGhpcyBhbGxvd3Mgb2xkIHVzZXJzcGFjZSBjb21waWxlZFxuK1x0XHQgKiBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzdHJ1Y3QgdG8gc3RpbGwgd29yayBvbiBhIG5ld2VyIGtlcm5lbFxuK1x0XHQgKiB0aGF0IGhhcyBncm93biB0aGUgc3RydWN0IHdpdGggYXBwZW5kZWQgZmllbGRzLlxuK1x0XHQgKi9cbitcdFx0ciA9IC1FSU5WQUw7XG4rXHRcdGlmICh1c2l6ZSBcdTAwM2MgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjApXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE5ldyB1c2Vyc3BhY2Ugd2l0aCBhIGxhcmdlciBzdHJ1Y3QgY2FsbGVkIGFuIG9sZGVyIGtlcm5lbC5cbitcdFx0ICogV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzbyB1c2Vyc3BhY2Uga25vd3Mgd2hpY2hcbitcdFx0ICogb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsIHRoZW4gZmFpbCB3aXRoIC1FMkJJRy5cbitcdFx0ICovXG4rXHRcdGlmICh1c2l6ZSBcdTAwM2Ugc2l6ZW9mKGhvc3RfY2FwcykpIHtcbitcdFx0XHRob3N0X2NhcHMuc2l6ZSA9IHNpemVvZihob3N0X2NhcHMpO1xuK1x0XHRcdHIgPSAtRUZBVUxUO1xuK1x0XHRcdGlmIChwdXRfdXNlcihob3N0X2NhcHMuc2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuK1x0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0ciA9IC1FMkJJRztcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHQvKlxuK1x0XHQgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OlxuK1x0XHQgKiAgIHVzaXplID09IGtzaXplOiB2ZXJiYXRpbSBjb3B5XG4rXHRcdCAqICAgdXNpemUgXHUwMDNjICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpXG4rXHRcdCAqL1xuK1x0XHRyID0gY29weV9zdHJ1Y3RfZnJvbV91c2VyKFx1MDAyNmhvc3RfY2Fwcywgc2l6ZW9mKGhvc3RfY2FwcyksXG4rXHRcdFx0XHRcdCAgYXJncCwgdXNpemUpO1xuK1x0XHRpZiAocilcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0LyogUmVzZXJ2ZWQgZmllbGRzIG11c3QgYmUgemVybyAqL1xuK1x0XHRyID0gLUVJTlZBTDtcbitcdFx0aWYgKGhvc3RfY2Fwcy5mbGFncylcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0ciA9IC1FTk9UVFk7XG4rXHRcdGlmICgha3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpO1xuK1x0XHRpZiAocilcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0aG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTtcbitcdFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFx1MDAyNmhvc3RfY2FwcyxcbitcdFx0XHRcdFx0c2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpO1xuK1x0XHRicmVhaztcbitcdH1cbiBcdGRlZmF1bHQ6IHtcbiBcdFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWFyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5pbmRleCA0MTkwMTEwOTdmYThlMi4uMWNmOWE5NTk2NjllOGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuQEAgLTk5Nyw2ICs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbisjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTEzNTAsNiArMTM1MSw5IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XG4gI2RlZmluZSBLVk1fR0VUX0RFVklDRV9BVFRSXHQgIF9JT1coS1ZNSU8sICAweGUyLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyKVxuICNkZWZpbmUgS1ZNX0hBU19ERVZJQ0VfQVRUUlx0ICBfSU9XKEtWTUlPLCAgMHhlMywgc3RydWN0IGt2bV9kZXZpY2VfYXR0cilcbiBcbisvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqL1xuKyNkZWZpbmUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNcdF9JTyhLVk1JTywgIDB4ZTQpXG4rXG4gLypcbiAgKiBpb2N0bHMgZm9yIHZjcHUgZmRzXG4gICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODowMi40MTkzNTUxNTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDczOTE0NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IFBvd2VyUEMgS1ZNIENvbXBhdGliaWxpdHkgQ2FwYWJpbGl0aWVzIElvY3RsKipcblxuT2theSwgc28gd2UndmUgZ290IGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMuIEl0IGxvb2tzIGxpa2UgdGhlIGlvY3RsJ3MgaGFuZGxpbmcgaXMgbmVhdGx5IHR1Y2tlZCBhd2F5IGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2Agd2l0aGluIHRoZSBga3ZtX2FyY2hfdm1faW9jdGxgIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBpdCBkaXZlcyBpbnRvIGBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpYC4gQW5kIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCwgcmVzaWRlcyBpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGEgbmV3IGlvY3RsLCBuaWNlbHkgaW1wbGVtZW50ZWQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgbmF0dXJhbGx5LCBcIklzIGl0IGZ1bmN0aW9uYWw/XCIgR2l2ZW4gaXQncyBhIG5ldyBpb2N0bCwgaXQgc2hvdWxkIGJlIHJlYWNoYWJsZSBpZiBzb21lb25lIGlzIHVzaW5nIEtWTSBvbiBQb3dlclBDLCBhc3N1bWluZyB0aGUgY29kZSBwYXRoIGlzIGNvcnJlY3RseSB3aXJlZCB1cC4gQnV0IHRoYXQgbGVhZHMgdG8gdGhlIG5leHQgcXVlc3Rpb246IHdoYXQgYWJvdXQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBDb3VsZCB3ZSByZWFjaCBpdCB0aHJvdWdoIFFFTVU/IFllcywgS1ZNIGlzIGFic29sdXRlbHkgZnV6emFibGUgaW4gUUVNVS4gU3l6a2FsbGVyIGlzIGEgZmFudGFzdGljIHRvb2wgZm9yIHRoYXQuIEJ1dCBkb2VzIFN5emthbGxlciAqc3BlY2lmaWNhbGx5KiBzdXBwb3J0IEtWTSBmdXp6aW5nIG9uIFBvd2VyUEM/IEkga25vdyBpdCdzIHdpZGVseSB1c2VkIG9uIHg4NiwgYnV0IFBvd2VyUEMgc3VwcG9ydC4uLiB0aGF0J3MgdGhlIGtleS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBUaGUgcGF0Y2ggdG91Y2hlcyBgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNgIGFuZCBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AsIGFuZCB0aGUgaW9jdGwgaXMsIG9mIGNvdXJzZSwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYC4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGlzIGNoZWNrZWQgaW4gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLiBPa2F5LCBsZXQncyBkaXZlIGludG8gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AgdG8gc2VlIHdoYXQgb3RoZXIgY29uZmlncyBtaWdodCBiZSByZWxldmFudCBhbmQgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSBwaWVjZXMgaW4gcGxhY2UgZm9yIHByb3BlciBmdXp6aW5nLiBHb3R0YSBtYWtlIHN1cmUgd2UgY292ZXIgYWxsIG91ciBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA2MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjA5Ljg5MzI3MjI0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ1NTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0zOD1jb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NjI9Y29uZmlnIEtWTV9CT09LM1NfNjRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02Ni1cXHRzZWxlY3QgS1ZNXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjY3OlxcdHNlbGVjdCBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFIGlmICFLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTY4LVxcdHNlbGVjdCBQUENfNjRTX0hBU0hfTU1VXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Nzk9Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MS1cXHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXFx1MDAyNlxcdTAwMjYgUFBDX1BPV0VSTlZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6ODI6XFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODMtXFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTI5PWNvbmZpZyBLVk1fQk9PSzNTX0hWX1A5X1RJTUlOR1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMS1cXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMzI6XFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMy1cXHRoZWxwXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTQyPWNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0NC1cXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNDU6XFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTIFxcdTAwMjZcXHUwMDI2ICFLVk1fQk9PSzNTX0hWX1A5X1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDYtXFx0aGVscFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTE1Nz1jb25maWcgS1ZNX0JPT0szU19IVl9ORVNURURfUE1VX1dPUktBUk9VTkRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIk5lc3RlZCBMMCBob3N0IHdvcmthcm91bmQgZm9yIEwxIEtWTSBob3N0IFBNVSBoYW5kbGluZyBidWdcXFwiIGlmIEVYUEVSVFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTk6XFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE2MC1cXHRkZWZhdWx0ICFFWFBFUlRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0yNTE9Y29uZmlnIEtWTV9YSVZFXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUzLVxcdGRlZmF1bHQgeVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTQ6XFx0ZGVwZW5kcyBvbiBLVk1fWElDUyBcXHUwMDI2XFx1MDAyNiBQUENfWElWRV9OQVRJVkUgXFx1MDAyNlxcdTAwMjYgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTUtXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlPTc4PWt2bS1ib29rM3NfNjQtYnVpbHRpbi10bS1vYmpzLSQoQ09ORklHX1BQQ19UUkFOU0FDVElPTkFMX01FTSkgKz0gXFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS04MC1cXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjgxOmlmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS04Mi1rdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIpICs9IFxcXFxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM9MzY9a3ZtcHBjX2hjYWxsOlxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM6Mzc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUy0zOC1cXHRsYnpcXHRyMTAsSFNUQVRFX0lOX0dVRVNUKHIxMylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM9Njc9a3ZtcHBjX2ludGVycnVwdDpcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TOjY4OiNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtNjktXFx0c3RkXFx0cjEwLEhTVEFURV9TQ1JBVENIMChyMTMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TPTkyPUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0hBU19QUFIpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTExNC0uTG5vX3NraXA6XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUzoxMTU6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUy0xMTYtI2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX1BSX1BPU1NJQkxFXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTE1My1cXHRiZXFcXHQxZlxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM6MTU0OiNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTU1LVxcdC8qIEhTUlIgaW50ZXJydXB0cyBnZXQgMiBhZGRlZCB0byBpbnRlcnJ1cHQgbnVtYmVyICovXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTE2Ni1cXHRSRklfVE9fS0VSTkVMXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUzoxNjc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUy0xNjgtMjpcXHRtZnNwclxcdHI5LFNQUk5fSFNSUjBcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTc2LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM6MTc3OiNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTc4LVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfZXhwb3J0cy5jLTEyLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2V4cG9ydHMuYzoxMzojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19leHBvcnRzLmMtMTQtRVhQT1JUX1NZTUJPTF9HUEwoa3ZtcHBjX2h2X2VudHJ5X3RyYW1wb2xpbmUpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfeGljcy5jPTE0MDA9c3RhdGljIGludCBrdm1wcGNfeGljc19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmMtMTQxOS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmM6MTQyMDojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmMtMTQyMS1cXHRpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQVJDSF8yMDYpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmMtMTQyNi1cXHR9XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfeGljcy5jOjE0Mjc6I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfeGljcy5jLTE0MjgtXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz01MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTU4Ni0jZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM1NfNjQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo1ODc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNTg4LVxcdGNhc2UgS1ZNX0NBUF9QUENfU01UOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjU4LSNlbmRpZlxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjY1OTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy02NjAtXFx0Y2FzZSBLVk1fQ0FQX1BQQ19GV05NSTpcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY2OS0jZW5kaWZcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo2NzA6I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjcxLVxcdGNhc2UgS1ZNX0NBUF9QUENfU0VDVVJFX0dVRVNUOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjk5LVxcdFxcdGJyZWFrO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwMDojaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03MDEtXFx0Y2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzpcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwNS1cXHRcXHRicmVhaztcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3MDY6I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzA3LVxcdGRlZmF1bHQ6XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz0xMTM0PXN0YXRpYyB2b2lkIGt2bXBwY19jb21wbGV0ZV9tbWlvX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMTIzMC0jZW5kaWZcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoxMjMxOiNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTEyMzItXFx0Y2FzZSBLVk1fTU1JT19SRUdfTkVTVEVEX0dQUjpcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTE4ODY9c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTE5ODYtI2VuZGlmIC8qIENPTkZJR19LVk1fWElWRSAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjE5ODc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMTk4OC1cXHRjYXNlIEtWTV9DQVBfUFBDX0ZXTk1JOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMTk5NC1cXHRcXHRicmVhaztcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoxOTk1OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTE5OTYtXFx0ZGVmYXVsdDpcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIxNjk9aW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTIyMTItI2VuZGlmXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjIxMzojaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yMjE0LVxcdGNhc2UgS1ZNX0NBUF9QUENfU0VDVVJFX0dVRVNUOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS90bS5TPTMxPV9HTE9CQUwoX19rdm1wcGNfc2F2ZV90bSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vdG0uUy03NC0zOlxcbmFyY2gvcG93ZXJwYy9rdm0vdG0uUzo3NTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL3RtLlMtNzYtQkVHSU5fRlRSX1NFQ1RJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6MDkuOTQ1NzQzOTcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkwNjExNzU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgb24gUG93ZXJQQyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIEkgc2VlIHRoYXQgYENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFYCBpcyB0aGUga2V5IGhlcmUsIGFuZCBpdCdzIHNlbGVjdGVkIGJ5IGBDT05GSUdfS1ZNX0JPT0szU182NF9IVmAsIHdoaWNoIGluIHR1cm4gaGluZ2VzIG9uIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgUG93ZXJOViBoeXBlcnZpc29yLXNwZWNpZmljIGNhcGFiaWxpdHkgY2hlY2suIEkgc2hvdWxkIHZlcmlmeSB0aGUgY2FsbCBjaGFpbi5cblxuVGhlIGlvY3RsIGl0c2VsZiwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgaXMgaW1wbGVtZW50ZWQgYnkgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCByZXNpZGluZyBpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqLiBJIHRyYWNlIHRoZSBpb2N0bCBoYW5kbGluZyB0aHJvdWdoIGBrdm1fYXJjaF92bV9pb2N0bGAgd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AuIEl0IGxvb2tzIGxpa2UgaXQgZGVsZWdhdGVzIHRvIGBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2Fwc2AsIGFuZCBJIGNhbiBzZWUgaW4gYGJvb2szc19odi5jYCB0aGF0IGBrdm1fb3BzX2h2YCBzZXRzIGAuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIEdvb2QsIHNvIHRoZSBwYXRoIGlzIGNsZWFyLiBJdCAqaXMqIHJlYWNoYWJsZS5cblxuTm93LCBhIGNyaXRpY2FsIHBvaW50OiBjYW4gdGhpcyBiZSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBJdCdzIGVhc3kgdG8gZm9yZ2V0IHRoYXQgbm90IGV2ZXJ5dGhpbmcgaXMgdGVzdGFibGUuIEJ1dCBLVk0gb24gUG93ZXJQQyAqY2FuKiBiZSBydW4gaW4gUUVNVSwgc3BlY2lmaWNhbGx5IGBxZW11LXN5c3RlbS1wcGM2NGAuIFRoYXQncyBhIGh1Z2Ugd2luLiBBbmQgaWYgU3l6a2FsbGVyIHN1cHBvcnRzIGBxZW11LXN5c3RlbS1wcGM2NGAsIHRoZW4gdGhhdCBvcGVucyB0aGUgZG9vciBmb3IgZnV6emluZy5cblxuTGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBzbyB3ZSBjYW4gYnVpbGQgYSBwcm9wZXIgdGVzdCBjYXNlLiBJIG5lZWQgYENPTkZJR19LVk1gLCBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgLCBhbmQgYENPTkZJR19QUENfUE9XRVJOVmAuIEkgc2hvdWxkIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlIGluIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBidXQgSSdtIGZlZWxpbmcgY29uZmlkZW50IGFib3V0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NDksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6MTYuODUxODY0NTU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NDUwMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mj1jb25maWcgS1ZNX0JPT0szU182NFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODoxNi45MzkzMjUxNDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI0MTYyMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gS1ZNIG9uIFBvd2VyUEM6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0gQm9vazNTIEh5cGVydmlzb3IgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgS1ZNX0JPT0szU182NF9IVmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUsIHRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGguIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGhvdyB0aGlzIGh5cGVydmlzb3Igd29ya3MsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBjb21wYXRpYmlsaXR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgZnVuY3Rpb24gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHdpdGhpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb2RlIHRoYXQgZGVmaW5lcyB3aGF0IGNhcGFiaWxpdGllcyBhcmUgZXhwb3NlZCB0byBndWVzdHMuIFVuZGVyc3RhbmRpbmcgaG93IGNvbXBhdGliaWxpdHkgaXMgaGFuZGxlZCBhdCB0aGlzIGxldmVsIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIGd1ZXN0IE9TZXMgYW5kIGFwcGxpY2F0aW9ucyBmdW5jdGlvbiBhcyBleHBlY3RlZC4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBmZWF0dXJlIG5lZ290aWF0aW9uLiBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IGNvbnRhaW5zIHRoZSBsb2dpYyBmb3IgcmVwb3J0aW5nIHRoZSBzdXBwb3J0ZWQgaW5zdHJ1Y3Rpb24gc2V0LCByZWdpc3RlciBhdmFpbGFiaWxpdHksIGFuZCBvdGhlciBoeXBlcnZpc29yIGZlYXR1cmVzLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTg4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6MjAuMjYzNDg5MTE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MDQ2OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bXBwY19nZXRfY29tcGF0X2NhcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTEzPXN0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNvbnN0IF9fYmUzMiBjcHVfdmVyc2lvbixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUzMi1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1MzM6c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTM0LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjU3MD1zdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjYxMS1cXHQuY3JlYXRlX3ZtX2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdm1fZGVidWdmc19odixcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY2MTI6XFx0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NjEzLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjIwLjMzMTU0MjQ0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODI5NDkwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9QUEMgQ29tcGF0aWJpbGl0eSBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRyYWNlZCB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIEknbSBjb25maWRlbnQgdGhhdCB0aGUgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgYmVpbmcgY2FsbGVkLCB3aGljaCBpcyBhIGtleSBzdGFydGluZyBwb2ludC4gVGhpcyBtZWFucyB0aGUgY29ycmVzcG9uZGluZyBpb2N0bCBpcyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLCB1bmRlcnN0b29kLiBOb3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIGBLVk1fQk9PSzNTXzY0X0hWYCwgYXMgdGhhdCdzIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBjb21wYXRpYmlsaXR5IGNoZWNrcy5cblxuQWgsIHJpZ2h0LCBidXQgSSBoYXZlIHRvIHJlbWVtYmVyIHRoZSBkZXBlbmRlbmNpZXMuIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBjb25kaXRpb25hbDsgaXQgcmVsaWVzIG9uIGJvdGggYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgIGJlaW5nIHNldC4gU28sIHRoZSBjb3JyZWN0IGFjdGlvbiBoZXJlIGlzIHRvIGFkZCBgS1ZNX0JPT0szU182NF9IVmAgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGFjdGl2YXRlIHRoaXMgcGFydGljdWxhciBzZXQgb2YgZmVhdHVyZXMuXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGEgYml0IGFuZCBjaGVjayBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYC4gVGhhdCdzIHdoZXJlIHRoZSBhY3R1YWwgbWFwcGluZyBsb2dpYyBpcyBkb25lLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjI0LjQxNDQ5MzU3MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzNjY1Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY0OTA9c3RhdGljIGJvb2wga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUxMi1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1MTM6c3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY29uc3QgX19iZTMyIGNwdV92ZXJzaW9uLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUxNC1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpjYXBhYmlsaXRpZXMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MzM9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NTYtXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NTU3OlxcdFxcdFxcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU1OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNhcGFiaWxpdGllcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjI0LjYzODE2MzEyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTgxMjcyNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUG93ZXJQQyBJb2N0bCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY29yZSBvZiBpdCBzZWVtcyB0byBpbnZvbHZlIGZ1bmN0aW9ucyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgYW5kIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AuIExldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZC4gQWgsIHJpZ2h0LiBJdCBsb29rcyBsaWtlIHRoZSBpb2N0bCBoYW5kbGluZyBpcyBkZWxlZ2F0ZWQgdG8gYGt2bV9hcmNoX3ZtX2lvY3RsYCBpbiBgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNgLiBIb3dldmVyLCBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIHByZXR0eSBnZW5lcmljLCBpdCBsb29rcyBsaWtlLCBzbyBJIHNob3VsZCByZWFsbHkga2VlcCBteSBmb2N1cyBvbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuXG5cbkhvbGQgb24uIFRoZSBpb2N0bCBpdHNlbGYgaXMgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYC4gR290IGl0LiBTbywgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBpb2N0bCB0byB0aGUgS1ZNIGludGVyZmFjZSBvbiBQb3dlclBDLiBUaGF04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSdkIHdhbnQgdG8gZnV6eiB0aG9yb3VnaGx5LiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hpY2ggY29uZmlnIGVuYWJsZXMgdGhpcy5cblxuUmlnaHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGltcG9ydGFudC4gSSByZW1lbWJlciBgS1ZNX0JPT0szU182NF9IVmAgZW5hYmxlcyBgYm9vazNzX2h2LmNgLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRvIGNvbnNpZGVyPyBMZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgYGFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGVgIGFuZCBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6MjkuODE5NDM3NTk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAwNzM2NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb2szc19odi5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjI9a3ZtLWh2LXkgKz0gXFxcXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU6NjM6XFx0Ym9vazNzX2h2Lm8gXFxcXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjQtXFx0Ym9vazNzX2h2X2ludGVycnVwdHMubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjMwLjkyMDE4MjYzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzg0MDI4Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gYSB0ZWNobmljYWwgZmllbGQ6XG5cbioqSW52ZXN0aWdhdGluZyBga3ZtLWh2LXlgJ3MgUHVycG9zZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnl0aGluZyBkZWVwZXIsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgYGt2bS1odi15YCAqaXMqLiBJIGNhbid0IHByb2NlZWQgZWZmZWN0aXZlbHkgdW50aWwgSSBrbm93IHdoYXQgaXQncyBhc3NpZ25lZCB0by4gSXMgaXQgYSBtb2R1bGUsIGEgdmlydHVhbCBtYWNoaW5lIElELCBhIGh5cGVydmlzb3Igc2V0dGluZywgYSBkZXZpY2U/IFdpdGhvdXQga25vd2luZyBpdHMgZnVuZGFtZW50YWwgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbSwgYW55IGZ1cnRoZXIgYW5hbHlzaXMgaXMganVzdCBndWVzc3dvcmsuIFRpbWUgdG8gZ28gbG9va2luZyBmb3IgaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byB0cmFjZSB0aGlzIHZhcmlhYmxlJ3MgYXNzaWdubWVudCBhbmQgdW5kZXJzdGFuZCBpdHMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5OTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODozMy43MDQyMTM2NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NjYxMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bS1odi15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjA9ZW5kaWZcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTYxLVxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU6NjI6a3ZtLWh2LXkgKz0gXFxcXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjMtXFx0Ym9vazNzX2h2Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODozMy44MDE4ODAwMjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NjE2MTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgTWFrZWZpbGUuIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBjaGFuZ2VzLCBzbyBhIGxpbmUtYnktbGluZSByZXZpZXcgaXMgYWJzb2x1dGVseSBuZWNlc3NhcnkuIEknbGwgbmVlZCB0byBsb29rIGF0IGV2ZXJ5IHRhcmdldCwgZXZlcnkgZGVwZW5kZW5jeSwgZXZlcnkgY29tbWFuZCwgZXZlcnkgdmFyaWFibGUsIGFuZCBldmVyeSBpbmNsdWRlLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgc3BvdHRpbmcgb2J2aW91cyBlcnJvcnMsIGJ1dCBhYm91dCBncmFzcGluZyB0aGUgb3ZlcmFsbCBmbG93IGFuZCBpbnRlbmRlZCBiZWhhdmlvci4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgaW50ZXJjb25uZWN0ZWQsIHNvIEkgY2FuIHByZWRpY3QgdGhlIGltcGFjdHMgb2YgYW55IG1vZGlmaWNhdGlvbnMuIFRoaXMgaXMgYWJvdXQgZW5zdXJpbmcgSSBkb27igJl0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgZG93biB0aGUgbGluZS4gQSBob2xpc3RpYyB2aWV3IGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjM2Ljc4ODA0Mzk0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIG1vZHVsZVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjY2ZsYWdzLXkgOj0gLUl2aXJ0L2t2bSAtSWFyY2gvcG93ZXJwYy9rdm1cXG4gICA3OlxcdFxcbiAgIDg6XFx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb21tb24tb2Jqcy15ICs9IHBvd2VycGMubyBlbXVsYXRlX2xvYWRzdG9yZS5vXFxuICAxMTpcXHRvYmotJChDT05GSUdfS1ZNX0VYSVRfVElNSU5HKSArPSB0aW1pbmcub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfSEFORExFUikgKz0gYm9vazNzX2V4cG9ydHMub1xcbiAgMTM6XFx0XFxuICAxNDpcXHRBRkxBR1NfYm9va2VfaW50ZXJydXB0cy5vIDo9IC1JJChvYmp0cmVlKS8kKG9iailcXG4gIDE1OlxcdFxcbiAgMTY6XFx0a3ZtLWU1MDAtb2JqcyA6PSBcXFxcXFxuICAxNzpcXHRcXHQkKGNvbW1vbi1vYmpzLXkpIFxcXFxcXG4gIDE4OlxcdFxcdGVtdWxhdGUubyBcXFxcXFxuICAxOTpcXHRcXHRib29rZS5vIFxcXFxcXG4gIDIwOlxcdFxcdGJvb2tlX2VtdWxhdGUubyBcXFxcXFxuICAyMTpcXHRcXHRib29rZV9pbnRlcnJ1cHRzLm8gXFxcXFxcbiAgMjI6XFx0XFx0ZTUwMC5vIFxcXFxcXG4gIDIzOlxcdFxcdGU1MDBfbW11Lm8gXFxcXFxcbiAgMjQ6XFx0XFx0ZTUwMF9tbXVfaG9zdC5vIFxcXFxcXG4gIDI1OlxcdFxcdGU1MDBfZW11bGF0ZS5vXFxuICAyNjpcXHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fRTUwMFYyKSA6PSAkKGt2bS1lNTAwLW9ianMpXFxuICAyNzpcXHRcXG4gIDI4OlxcdGt2bS1lNTAwbWMtb2JqcyA6PSBcXFxcXFxuICAyOTpcXHRcXHQkKGNvbW1vbi1vYmpzLXkpIFxcXFxcXG4gIDMwOlxcdFxcdGVtdWxhdGUubyBcXFxcXFxuICAzMTpcXHRcXHRib29rZS5vIFxcXFxcXG4gIDMyOlxcdFxcdGJvb2tlX2VtdWxhdGUubyBcXFxcXFxuICAzMzpcXHRcXHRib29rZWh2X2ludGVycnVwdHMubyBcXFxcXFxuICAzNDpcXHRcXHRlNTAwbWMubyBcXFxcXFxuICAzNTpcXHRcXHRlNTAwX21tdS5vIFxcXFxcXG4gIDM2OlxcdFxcdGU1MDBfbW11X2hvc3QubyBcXFxcXFxuICAzNzpcXHRcXHRlNTAwX2VtdWxhdGUub1xcbiAgMzg6XFx0a3ZtLW9ianMtJChDT05GSUdfS1ZNX0U1MDBNQykgOj0gJChrdm0tZTUwMG1jLW9ianMpXFxuICAzOTpcXHRcXG4gIDQwOlxcdGt2bS1wci15IDo9IFxcXFxcXG4gIDQxOlxcdFxcdGZwdS5vIFxcXFxcXG4gIDQyOlxcdFxcdGVtdWxhdGUubyBcXFxcXFxuICA0MzpcXHRcXHRib29rM3NfcGFpcmVkX3NpbmdsZXMubyBcXFxcXFxuICA0NDpcXHRcXHRib29rM3NfcHIubyBcXFxcXFxuICA0NTpcXHRcXHRib29rM3NfcHJfcGFwci5vIFxcXFxcXG4gIDQ2OlxcdFxcdGJvb2szc19lbXVsYXRlLm8gXFxcXFxcbiAgNDc6XFx0XFx0Ym9vazNzX2ludGVycnVwdHMubyBcXFxcXFxuICA0ODpcXHRcXHRib29rM3NfbW11X2hwdGUubyBcXFxcXFxuICA0OTpcXHRcXHRib29rM3NfNjRfbW11X2hvc3QubyBcXFxcXFxuICA1MDpcXHRcXHRib29rM3NfNjRfbW11Lm8gXFxcXFxcbiAgNTE6XFx0XFx0Ym9vazNzXzMyX21tdS5vXFxuICA1MjpcXHRcXG4gIDUzOlxcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgKz0gXFxcXFxcbiAgNTQ6XFx0XFx0Ym9vazNzXzY0X2VudHJ5Lm8gXFxcXFxcbiAgNTU6XFx0XFx0dG0ub1xcbiAgNTY6XFx0XFxuICA1NzpcXHRpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxcbiAgNTg6XFx0a3ZtLWJvb2szc182NC1idWlsdGluLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSKSArPSBcXFxcXFxuICA1OTpcXHRcXHRib29rM3Nfcm1oYW5kbGVycy5vXFxuICA2MDpcXHRlbmRpZlxcbiAgNjE6XFx0XFxuICA2MjpcXHRrdm0taHYteSArPSBcXFxcXFxuICA2MzpcXHRcXHRib29rM3NfaHYubyBcXFxcXFxuICA2NDpcXHRcXHRib29rM3NfaHZfaW50ZXJydXB0cy5vIFxcXFxcXG4gIDY1OlxcdFxcdGJvb2szc182NF9tbXVfaHYubyBcXFxcXFxuICA2NjpcXHRcXHRib29rM3NfNjRfbW11X3JhZGl4Lm8gXFxcXFxcbiAgNjc6XFx0XFx0Ym9vazNzX2h2X25lc3RlZC5vXFxuICA2ODpcXHRcXG4gIDY5OlxcdGt2bS1odi0kKENPTkZJR19QUENfVVYpICs9IFxcXFxcXG4gIDcwOlxcdFxcdGJvb2szc19odl91dm1lbS5vXFxuICA3MTpcXHRcXG4gIDcyOlxcdGt2bS1odi0kKENPTkZJR19QUENfVFJBTlNBQ1RJT05BTF9NRU0pICs9IFxcXFxcXG4gIDczOlxcdFxcdGJvb2szc19odl90bS5vXFxuICA3NDpcXHRcXG4gIDc1OlxcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi14aWNzLW9ianMtJChDT05GSUdfS1ZNX1hJQ1MpIDo9IFxcXFxcXG4gIDc2OlxcdFxcdGJvb2szc19odl9ybV94aWNzLm9cXG4gIDc3OlxcdFxcbiAgNzg6XFx0a3ZtLWJvb2szc182NC1idWlsdGluLXRtLW9ianMtJChDT05GSUdfUFBDX1RSQU5TQUNUSU9OQUxfTUVNKSArPSBcXFxcXFxuICA3OTpcXHRcXHRib29rM3NfaHZfdG1fYnVpbHRpbi5vXFxuICA4MDpcXHRcXG4gIDgxOlxcdGlmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuICA4MjpcXHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIpICs9IFxcXFxcXG4gIDgzOlxcdFxcdGJvb2szc19odl9obWkubyBcXFxcXFxuICA4NDpcXHRcXHRib29rM3NfaHZfcDlfZW50cnkubyBcXFxcXFxuICA4NTpcXHRcXHRib29rM3NfaHZfcm1oYW5kbGVycy5vIFxcXFxcXG4gIDg2OlxcdFxcdGJvb2szc19odl9ybV9tbXUubyBcXFxcXFxuICA4NzpcXHRcXHRib29rM3NfaHZfcmFzLm8gXFxcXFxcbiAgODg6XFx0XFx0Ym9vazNzX2h2X2J1aWx0aW4ubyBcXFxcXFxuICA4OTpcXHRcXHRib29rM3NfaHZfcDlfcGVyZi5vIFxcXFxcXG4gIDkwOlxcdFxcdGJvb2szc19odl9uZXN0ZWR2Mi5vIFxcXFxcXG4gIDkxOlxcdFxcdGd1ZXN0LXN0YXRlLWJ1ZmZlci5vIFxcXFxcXG4gIDkyOlxcdFxcdCQoa3ZtLWJvb2szc182NC1idWlsdGluLXRtLW9ianMteSkgXFxcXFxcbiAgOTM6XFx0XFx0JChrdm0tYm9vazNzXzY0LWJ1aWx0aW4teGljcy1vYmpzLXkpXFxuICA5NDpcXHRcXG4gIDk1OlxcdG9iai0kKENPTkZJR19HVUVTVF9TVEFURV9CVUZGRVJfVEVTVCkgKz0gdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIub1xcbiAgOTY6XFx0ZW5kaWZcXG4gIDk3OlxcdFxcbiAgOTg6XFx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX0tWTV9YSUNTKSArPSBcXFxcXFxuICA5OTpcXHRcXHRib29rM3NfeGljcy5vXFxuIDEwMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6MzYuNzg4MTQ4MTA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTc3MDgyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIE1ha2VmaWxlKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZ2xhbmNlIGF0IHRoaXMgTWFrZWZpbGUgaGFzIGdpdmVuIG1lIGEgYmFzaWMgdW5kZXJzdGFuZGluZywgYnV0IEknbSBub3QgZ29pbmcgdG8ganVtcCB0byBjb25jbHVzaW9ucyBqdXN0IHlldC4gSSBuZWVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBqdWRnZW1lbnRzIG9yIHBsYW5uaW5nIG1vZGlmaWNhdGlvbnMuIE15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBtZXRob2RpY2FsbHkgd29yayB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgb3RoZXIgcnVsZXMgYXJlIHN0cnVjdHVyZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgb3JjaGVzdHJhdGVkLiBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3Mgb3Igb3B0aW1pemF0aW9ucyBpbiBwbGF5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHJlZmFjdG9yaW5nIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmbG93IGFuZCBpbnRlbmRlZCBiZWhhdmlvciBiZWZvcmUgSSBjYW4gYWNjdXJhdGVseSBhc3Nlc3MgaXRzIHF1YWxpdHkgb3IgbWFrZSBhbnkgaW1wcm92ZW1lbnRzLiBJJ20gbG9va2luZyBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBhbGwgd29ya3MgdG9nZXRoZXIsIHRvcCB0byBib3R0b20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDY3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODozOS44ODU4NTg2MDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdGt2bS1ib29rM3NfNjQtb2Jqcy0kKENPTkZJR19LVk1fWElWRSkgKz0gYm9vazNzX3hpdmUubyBib29rM3NfeGl2ZV9uYXRpdmUub1xcbiAxMDI6XFx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX1NQQVBSX1RDRV9JT01NVSkgKz0gYm9vazNzXzY0X3Zpby5vXFxuIDEwMzpcXHRcXG4gMTA0OlxcdGt2bS1ib29rM3NfNjQtbW9kdWxlLW9ianMgOj0gXFxcXFxcbiAxMDU6XFx0XFx0JChjb21tb24tb2Jqcy15KSBcXFxcXFxuIDEwNjpcXHRcXHRib29rM3MubyBcXFxcXFxuIDEwNzpcXHRcXHRib29rM3NfcnRhcy5vIFxcXFxcXG4gMTA4OlxcdFxcdCQoa3ZtLWJvb2szc182NC1vYmpzLXkpXFxuIDEwOTpcXHRcXG4gMTEwOlxcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpIDo9ICQoa3ZtLWJvb2szc182NC1tb2R1bGUtb2JqcylcXG4gMTExOlxcdFxcbiAxMTI6XFx0a3ZtLWJvb2szc18zMi1vYmpzIDo9IFxcXFxcXG4gMTEzOlxcdFxcdCQoY29tbW9uLW9ianMteSkgXFxcXFxcbiAxMTQ6XFx0XFx0ZW11bGF0ZS5vIFxcXFxcXG4gMTE1OlxcdFxcdGZwdS5vIFxcXFxcXG4gMTE2OlxcdFxcdGJvb2szc19wYWlyZWRfc2luZ2xlcy5vIFxcXFxcXG4gMTE3OlxcdFxcdGJvb2szcy5vIFxcXFxcXG4gMTE4OlxcdFxcdGJvb2szc19wci5vIFxcXFxcXG4gMTE5OlxcdFxcdGJvb2szc19lbXVsYXRlLm8gXFxcXFxcbiAxMjA6XFx0XFx0Ym9vazNzX2ludGVycnVwdHMubyBcXFxcXFxuIDEyMTpcXHRcXHRib29rM3NfbW11X2hwdGUubyBcXFxcXFxuIDEyMjpcXHRcXHRib29rM3NfMzJfbW11X2hvc3QubyBcXFxcXFxuIDEyMzpcXHRcXHRib29rM3NfMzJfbW11Lm9cXG4gMTI0OlxcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfMzIpIDo9ICQoa3ZtLWJvb2szc18zMi1vYmpzKVxcbiAxMjU6XFx0XFxuIDEyNjpcXHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fTVBJQykgKz0gbXBpYy5vXFxuIDEyNzpcXHRcXG4gMTI4OlxcdGt2bS15ICs9ICQoa3ZtLW9ianMtbSkgJChrdm0tb2Jqcy15KVxcbiAxMjk6XFx0XFxuIDEzMDpcXHRvYmotJChDT05GSUdfS1ZNX0U1MDBWMikgKz0ga3ZtLm9cXG4gMTMxOlxcdG9iai0kKENPTkZJR19LVk1fRTUwME1DKSArPSBrdm0ub1xcbiAxMzI6XFx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpICs9IGt2bS5vXFxuIDEzMzpcXHRvYmotJChDT05GSUdfS1ZNX0JPT0szU18zMikgKz0ga3ZtLm9cXG4gMTM0OlxcdFxcbiAxMzU6XFx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfUFIpICs9IGt2bS1wci5vXFxuIDEzNjpcXHRvYmotJChDT05GSUdfS1ZNX0JPT0szU182NF9IVikgKz0ga3ZtLWh2Lm9cXG4gMTM3OlxcdFxcbiAxMzg6XFx0b2JqLXkgKz0gJChrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy15KVxcbiAxMzk6XFx0XFxuIDE0MDpcXHQjIEtWTSBkb2VzIGEgbG90IGluIHJlYWwtbW9kZSwgYW5kIDY0LWJpdCBCb29rM1MgS0FTQU4gZG9lc24ndCBzdXBwb3J0IHRoYXRcXG4gMTQxOlxcdGlmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0XFxuIDE0MjpcXHRLQVNBTl9TQU5JVElaRSA6PSBuXFxuIDE0MzpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODozOS44ODU5NjEzMDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY5MjI5NzU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gSHlwZXJ2aXNvciBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0cmFja2luZyBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgS1ZNIGh5cGVydmlzb3Igb24gUG93ZXJQQy4gTGV0J3Mgc2VlLi4uIGBrdm0taHYub2AgaXMgdGhlIGtleSBoZXJlLCBhbmQgdGhhdCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCBpcyBlbmFibGVkLiBSaWdodCwgYW5kIGBrdm0taHYteWAgZGlyZWN0bHkgaW5jbHVkZXMgYGJvb2szc19odi5vYC4gVGhhdCBjb25maXJtcyBpdCDigJMgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCBpcyBkZWZpbml0ZWx5IHRoZSBzcGVjaWZpYyBjb25maWcgSSdtIGFmdGVyLiBOb3csIGhvbGQgb24sIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUuIGBib29rM3NfaHYub2AgaXMgKmNvbXBpbGVkIGludG8qIGBrdm0taHYub2AsIHdoaWNoIGlzIGEgbW9kdWxlIG9yIGJ1aWx0LWluLCBzbyBpdCdzIHN0YXRpY2FsbHkgbGlua2VkLlxuXG5BaCwgdGhlIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIEkgcmVjYWxsIHRoYXQncyBoYW5kbGVkIHdpdGhpbiBgcG93ZXJwYy5jYCwgd2hpY2gsIGFzIEkgZXhwZWN0LCBpcyBwYXJ0IG9mIGBrdm0ub2AuIE5vdywgYGt2bS5vYCBpcyBidWlsdCB3aGVuIHRoZSBtb3JlIGdlbmVyYWwgYENPTkZJR19LVk1fQk9PSzNTXzY0YCBpcyBlbmFibGVkLiBCaW5nbyEgYHBvd2VycGMuY2AgdWx0aW1hdGVseSBjYWxscyBga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHNgLCBhbmQgSSBjYW4gc2VlIHRoYXQgYGt2bV9vcHNfaHZgIGlzIHRoZSBzZXQgb2Ygb3BlcmF0aW9ucyB0aGF0J3MgcmVnaXN0ZXJlZCB3aGVuIGBrdm0taHYub2AgaXMgbG9hZGVkLiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQuXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZSBjcml0aWNhbC4gT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXRzZWxmIGlzIGZ1bmRhbWVudGFsIOKAkyBubyBLVk0gd2l0aG91dCBLVk0hIExldCdzIHNlZS4uLiBhbmQsIHllcywgYENPTkZJR19QUENfUE9XRVJOVmAgaXMgYWxzbyBhIGRlcGVuZGVuY3kgZm9yIGBLVk1fQk9PSzNTXzY0X0hWYCB0byBldmVuIGJlIHNlbGVjdGVkLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEknbGwgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIGZpbGUgdG8gZG91YmxlLWNoZWNrLiBJIGJlbGlldmUgdGhhdCBzaG91bGQgY292ZXIgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTU5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6NDkuNTc4MjYxMDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTAxNjM2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0JPT0szU182NF9IVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NjI9Y29uZmlnIEtWTV9CT09LM1NfNjRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6NDkuODUzMjgyMzYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzI1ODYwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZTogS1ZNX0JPT0szU182NF9IViBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBLVk1fQk9PSzNTXzY0X0hWYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgZ3JvdW5kd29yazogbGV0J3MgZGl2ZSBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgd2hhdCB0aGlzIHRoaW5nICpyZWxpZXMqIG9uIGlzIHRoZSBhYnNvbHV0ZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgZnVuY3Rpb25zIGFuZCwgY3J1Y2lhbGx5LCBob3cgYW55IGNoYW5nZXMgbWlnaHQgcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIGRvbWlub2VzIGJlZm9yZSBJIHN0YXJ0IGZpZGRsaW5nIHdpdGggb25lLiBJcyBpdCBqdXN0IGEgc2luZ2xlIGxpYnJhcnksIG9yIGFyZSB3ZSBsb29raW5nIGF0IGEgc3ByYXdsaW5nIHdlYiBvZiBuZXN0ZWQgZGVwZW5kZW5jaWVzPyBLbm93aW5nIHRoZSBicmVhZHRoIG9mIHRoYXQgZGVwZW5kZW5jeSB0cmVlIGlzIGdvaW5nIHRvIGluZm9ybSBteSBlbnRpcmUgYXBwcm9hY2ggZnJvbSBoZXJlIG9uIG91dC4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGl0cyBwbGFjZSBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjUzLjEyNTg3MDg4NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzk6XFx0Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG4gIDgwOlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuICA4MTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXFx1MDAyNlxcdTAwMjYgUFBDX1BPV0VSTlZcXG4gIDgyOlxcdFxcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuICA4MzpcXHRcXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QTVVcXG4gIDg0OlxcdFxcdHNlbGVjdCBDTUFcXG4gIDg1OlxcdFxcdGhlbHBcXG4gIDg2OlxcdFxcdCAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgYm9vazNzXzY0IGd1ZXN0IGtlcm5lbHMgaW5cXG4gIDg3OlxcdFxcdCAgdmlydHVhbCBtYWNoaW5lcyBvbiBQT1dFUjcgYW5kIG5ld2VyIHByb2Nlc3NvcnMgdGhhdCBoYXZlXFxuICA4ODpcXHRcXHQgIGh5cGVydmlzb3IgbW9kZSBhdmFpbGFibGUgdG8gdGhlIGhvc3QuXFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIEtWTSB3aWxsIHVzZSB0aGUgaGFyZHdhcmUgdmlydHVhbGl6YXRpb25cXG4gIDkxOlxcdFxcdCAgZmFjaWxpdGllcyBvZiBQT1dFUjcgKGFuZCBsYXRlcikgcHJvY2Vzc29ycywgbWVhbmluZyB0aGF0XFxuICA5MjpcXHRcXHQgIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW1zIHdpbGwgcnVuIGF0IGZ1bGwgaGFyZHdhcmUgc3BlZWRcXG4gIDkzOlxcdFxcdCAgdXNpbmcgc3VwZXJ2aXNvciBhbmQgdXNlciBtb2Rlcy4gIEhvd2V2ZXIsIHRoaXMgYWxzbyBtZWFuc1xcbiAgOTQ6XFx0XFx0ICB0aGF0IEtWTSBpcyBub3QgdXNhYmxlIHVuZGVyIFBvd2VyVk0gKHBIeXApLCBpcyBvbmx5IHVzYWJsZVxcbiAgOTU6XFx0XFx0ICBvbiBQT1dFUjcgb3IgbGF0ZXIgcHJvY2Vzc29ycywgYW5kIGNhbm5vdCBlbXVsYXRlIGFcXG4gIDk2OlxcdFxcdCAgZGlmZmVyZW50IHByb2Nlc3NvciBmcm9tIHRoZSBob3N0IHByb2Nlc3Nvci5cXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODo1My4xMjU5MzM1MjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NjI3Njk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIGFuZCBQb3dlclBDIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBpcyByZWxpYW50IG9uIGJvdGggYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgLiBHaXZlbiB0aGlzIHJlbGF0aW9uc2hpcCwgSSBuZWVkIHRvIGVuc3VyZSBib3RoIGBLVk1fQk9PSzNTXzY0X0hWYCBhbmQgYFBQQ19QT1dFUk5WYCBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4gSSdsbCBtYWtlIGEgbm90ZSB0byBsaXN0IHRoZW0gaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ib2xkIG9uLi4uIHNvbWV0aGluZyBmZWVscyBvZmYuIEknbSByZWNhbGxpbmcgdGhhdCBga3ZtX2FyY2hfdm1faW9jdGxgIHdpdGhpbiBgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNgIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXNuJ3Qgd3JhcHBlZCB3aXRoaW4gYW55IGAjaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGNvbmRpdGlvbmFsIGJsb2Nrcy4gVGhhdOKAmXMgdW5leHBlY3RlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZnVsbHkuIFRpbWUgdG8gZGl2ZSBiYWNrIGludG8gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBhbmQgY29uZmlybSBteSBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjUwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6NTcuMjgyMjEzMTE5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTExMTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz0yMzYzPWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI0NzItXFx0fVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjI0NzM6XFx0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI0NzQtXFx0XFx0c3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgaG9zdF9jYXBzID0ge307XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjU3LjM2MTMyOTQ5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE1ODM0NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIENvbXBhdGliaWxpdHkgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIHRoYXQgdGhpcyBjaGVjayBpc24ndCB0dWNrZWQgYXdheSBpbnNpZGUgYW4gYCNpZmRlZmAgYmxvY2ssIHdoaWNoIGlzIGEgY29tbW9uIHBhdHRlcm4uIEluc3RlYWQsIGl0IHNlZW1zIHRvIHJlbHkgb24gdGhlIGBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2Fwc2AgZnVuY3Rpb24uIElmIHRoYXQgZnVuY3Rpb24gcG9pbnRlciBoYXBwZW5zIHRvIGJlIE5VTEwsIHRoZSBjb2RlIHJldHVybnMgYC1FTk9UVFlgLiBSaWdodCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cbk5vdywgd2hlcmUgaXMgYGdldF9jb21wYXRfY2Fwc2AgYWN0dWFsbHkgZGVmaW5lZCBhbmQgc2V0PyBBY2NvcmRpbmcgdG8gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgaXQncyBvbmx5IHNldCBpbiBga3ZtX29wc19odmAgd2l0aGluIGBib29rM3NfaHYuY2AuIFRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGggYW5kIHRlc3QgaXQsIHRoYXQgbWVhbnMgSSAqbXVzdCogaGF2ZSBgS1ZNX0JPT0szU182NF9IVmAgZW5hYmxlZC4gSXQncyBhIGtleSByZXF1aXJlbWVudC5cblxuU28sIEkgdGhpbmsgdGhlIG5leHQgbG9naWNhbCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgaW4gYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGZ1bmN0aW9uIHdvcmtzIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGlzIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI0MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OTowMi40NzcxNjYwMTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUzMyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjUzMzpcXHRzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcXG42NTM0OlxcdHtcXG42NTM1OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuNjUzNjpcXHRcXHR1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllcyA9IDA7XFxuNjUzNzpcXHRcXHRjb25zdCBfX2JlMzIgKnByb3AgPSBOVUxMO1xcbjY1Mzg6XFx0XFx0bG9uZyByYyA9IC1FSU5WQUw7XFxuNjUzOTpcXHRcXHR1MzIgY3B1X3ZlcnNpb247XFxuNjU0MDpcXHRcXG42NTQxOlxcdFxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG42NTQyOlxcdFxcdFxcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XFxuNjU0MzpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xcbjY1NDQ6XFx0XFx0XFx0XFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcXG42NTQ1OlxcdFxcdFxcdFxcdHJjID0gMDtcXG42NTQ2OlxcdFxcdFxcdH0gZWxzZSB7XFxuNjU0NzpcXHRcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFxcXCJjcHVcXFwiKSB7XFxuNjU0ODpcXHRcXHRcXHRcXHRcXHRwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBcXFwiY3B1LXZlcnNpb25cXFwiLCBOVUxMKTtcXG42NTQ5OlxcdFxcdFxcdFxcdFxcdGlmIChwcm9wKSB7XFxuNjU1MDpcXHRcXHRcXHRcXHRcXHRcXHRjcHVfdmVyc2lvbiA9IGJlMzJfdG9fY3B1cChwcm9wKTtcXG42NTUxOlxcdFxcdFxcdFxcdFxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG42NTUyOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjY1NTM6XFx0XFx0XFx0XFx0XFx0fVxcbjY1NTQ6XFx0XFx0XFx0XFx0fVxcbjY1NTU6XFx0XFx0XFx0XFx0aWYgKCFwcm9wKVxcbjY1NTY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjU1NzpcXHRcXHRcXHRcXHRyYyA9IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjcHVfdmVyc2lvbixcXG42NTU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y2FwYWJpbGl0aWVzKTtcXG42NTU5OlxcdFxcdFxcdH1cXG42NTYwOlxcdFxcdH1cXG42NTYxOlxcdFxcbjY1NjI6XFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG42NTYzOlxcdFxcdFxcdHJldHVybiByYztcXG42NTY0OlxcdFxcbjY1NjU6XFx0XFx0aG9zdF9jYXBzLVxcdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFxcdTAwMjYgS1ZNX1BQQ19DT01QQVRfQklUTUFTSztcXG42NTY2OlxcdFxcbjY1Njc6XFx0XFx0cmV0dXJuIHJjO1xcbjY1Njg6XFx0fVxcbjY1Njk6XFx0XFxuNjU3MDpcXHRzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcXG42NTcxOlxcdFxcdC5nZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVnc19odixcXG42NTcyOlxcdFxcdC5zZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19odixcXG42NTczOlxcdFxcdC5nZXRfb25lX3JlZyA9IGt2bXBwY19nZXRfb25lX3JlZ19odixcXG42NTc0OlxcdFxcdC5zZXRfb25lX3JlZyA9IGt2bXBwY19zZXRfb25lX3JlZ19odixcXG42NTc1OlxcdFxcdC52Y3B1X2xvYWQgICA9IGt2bXBwY19jb3JlX3ZjcHVfbG9hZF9odixcXG42NTc2OlxcdFxcdC52Y3B1X3B1dCAgICA9IGt2bXBwY19jb3JlX3ZjcHVfcHV0X2h2LFxcbjY1Nzc6XFx0XFx0LmluamVjdF9pbnRlcnJ1cHQgPSBrdm1wcGNfaW5qZWN0X2ludGVycnVwdF9odixcXG42NTc4OlxcdFxcdC5zZXRfbXNyICAgICA9IGt2bXBwY19zZXRfbXNyX2h2LFxcbjY1Nzk6XFx0XFx0LnZjcHVfcnVuICAgID0ga3ZtcHBjX3ZjcHVfcnVuX2h2LFxcbjY1ODA6XFx0XFx0LnZjcHVfY3JlYXRlID0ga3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGVfaHYsXFxuNjU4MTpcXHRcXHQudmNwdV9mcmVlICAgPSBrdm1wcGNfY29yZV92Y3B1X2ZyZWVfaHYsXFxuNjU4MjpcXHRcXHQuY2hlY2tfcmVxdWVzdHMgPSBrdm1wcGNfY29yZV9jaGVja19yZXF1ZXN0c19odixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MDIuNDc3NDEwNzMzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Nzk4Mjk4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIGt2bS1odiBjb2RlLi4uKipcblxuQWxyaWdodCwgSSdtIHRyYWNpbmcgdGhyb3VnaCB0aGlzIHNlY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhpcyBjaGVjayBmb3IgYGt2bWh2X29uX3BzZXJpZXMoKWAuIEhtbSwgaW50ZXJlc3RpbmcuIElmIHRoYXQgZnVuY3Rpb24gKmlzbid0KiB0cnVlLCB0aGVuIHdlIGltbWVkaWF0ZWx5IHJldHVybiBgLUVJTlZBTGAuIFNvLCBjbGVhcmx5LCB0aGlzIGNvZGUgcGF0aCBpcyBkZXNpZ25lZCB0byBiYWlsIG91dCB1bmxlc3Mgc29tZXRoaW5nIHNwZWNpZmljIGlzIGluIHBsYWNlLiBJdCBzZWVtcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5ICpyZXF1aXJlcyogYSBwb3NpdGl2ZSBzaWduYWwgZnJvbSBga3ZtaHZfb25fcHNlcmllcygpYC5cblxuQnV0IHdoYXQgdGhlIGhlY2sgKmlzKiBga3ZtaHZfb25fcHNlcmllcygpYD8gVGhlIGVudGlyZSBmbG93IHNlZW1zIHByZWRpY2F0ZWQgb24gaXQsIHNvIG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4gSXTigJlzIHRoZSBnYXRla2VlcGVyLCBpdCBzZWVtcy4gTXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGJvb2xlYW4gY2hlY2sgYWN0dWFsbHkgcmVwcmVzZW50cyBhbmQgd2hhdCBzY2VuYXJpbyBhbGxvd3MgaXQgdG8gYmUgdHJ1ZSBzbyB0aGF0IEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBoYXJkd2FyZSBvciBjb25maWd1cmF0aW9uIHRyaWdnZXJzIGl0LiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MDYuNDU3MjQyNjc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc2MjczMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtaHZfb25fcHNlcmllc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNT11bnNpZ25lZCBsb25nIF9fa3ZtaHZfY29weV90b2Zyb21fZ3Vlc3RfcmFkaXgoaW50IGxwaWQsIGludCBwaWQsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00Ni1cXHQvKiBDYW4ndCBhY2Nlc3MgcXVhZHJhbnRzIDEgb3IgMiBpbiBub24tSFYgbW9kZSwgY2FsbCB0aGUgSFYgdG8gZG8gaXQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYzo0NzpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTQ4LVxcdFxcdHJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9DT1BZX1RPRlJPTV9HVUVTVCwgbHBpZCwgcGlkLCBlYWRkcixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTMxNT12b2lkIGt2bXBwY19yYWRpeF90bGJpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzI5LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjMzMDpcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTMzMS1cXHRcXHRyYWRpeF9fZmx1c2hfdGxiX2xwaWRfcGFnZShscGlkLCBhZGRyLCBwc2l6ZSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNTM9c3RhdGljIHZvaWQga3ZtcHBjX3JhZGl4X2ZsdXNoX3B3YyhzdHJ1Y3Qga3ZtICprdm0sIHU2NCBscGlkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzU2LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjM1NzpcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTM1OC1cXHRcXHRyYWRpeF9fZmx1c2hfcHdjX2xwaWQobHBpZCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTE4Mj1zdGF0aWMgYm9vbCBrdm1wcGNfaXBpX3RocmVhZChpbnQgY3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODYtXFx0LyogSWYgd2UncmUgYSBuZXN0ZWQgaHlwZXJ2aXNvciwgZmFsbCBiYWNrIHRvIG9yZGluYXJ5IElQSXMgZm9yIG5vdyAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTg3OlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00MTQ9c3RhdGljIGludCBrdm1wcGNfc2V0X2FyY2hfY29tcGF0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGFyY2hfY29tcGF0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NjAtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NjE6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiBrdm1odl9pc19uZXN0ZWR2MigpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NjItXFx0XFx0LypcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NDQxMz1zdGF0aWMgaW50IGt2bWh2X3A5X2d1ZXN0X2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ0MzItXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NDMzOlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ0MzQtXFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYxKCkpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ4Njc9aW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTQ2LVxcdFxcdFxcdCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDk0NzpcXHRcXHRcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiAoX19rdm1wcGNfZ2V0X21zcl9odih2Y3B1KSBcXHUwMDI2IE1TUl9FRSkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTQ4LVxcdFxcdFxcdFxcdGt2bXBwY19pbmplY3RfaW50ZXJydXB0X2h2KHZjcHUsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUyMjg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X3NtbXVfaW5mb19odihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTEtXFx0LyogSWYgcnVubmluZyBhcyBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBkb24ndCBzdXBwb3J0IEhQVCBndWVzdHMgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjUyNTI6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTMtXFx0XFx0aW5mby1cXHUwMDNlZmxhZ3MgfD0gS1ZNX1BQQ19OT19IQVNIO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02MTQ1PXN0YXRpYyBpbnQga3ZtX2FyY2hfdm1faW9jdGxfaHYoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYxNTctXFx0XFx0LyogSWYgd2UncmUgYSBuZXN0ZWQgaHlwZXJ2aXNvciwgd2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCByYWRpeCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjE1ODpcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02MTU5LVxcdFxcdFxcdHIgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjI1Nz1zdGF0aWMgaW50IGt2bWh2X2NvbmZpZ3VyZV9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3BwY19tbXV2M19jZmcgKmNmZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4NC1cXHQvKiBJZiB3ZSdyZSBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHJhZGl4ICovXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2Mjg1OlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkgXFx1MDAyNlxcdTAwMjYgIXJhZGl4KVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4Ni1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjUzMz1zdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0MC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1NDE6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0Mi1cXHRcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NjUxPXN0YXRpYyBpbnQga3ZtcHBjX2Jvb2szc19pbml0X2h2KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2ODItI2lmZGVmIENPTkZJR19TTVBcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY2ODM6XFx0aWYgKCF4aWNzX29uX3hpdmUoKSBcXHUwMDI2XFx1MDAyNiAha3ZtaHZfb25fcHNlcmllcygpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02Njg0LVxcdCAgICAhbG9jYWxfcGFjYS1cXHUwMDNla3ZtX2hzdGF0ZS54aWNzX3BoeXMpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjcyNC1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY3MjU6XFx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY3MjYtXFx0XFx0cHJfaW5mbyhcXFwiS1ZNLUhWOiBFbmFibGluZyBJUlEgYnlwYXNzXFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTQzOT1sb25nIGt2bWh2X25lc3RlZF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy00NDQtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NDQ1OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ0Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUwMD12b2lkIGt2bWh2X25lc3RlZF9leGl0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDItXFx0LypcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDM6XFx0ICogTi5CLiB0aGUga3ZtaHZfb25fcHNlcmllcygpIHRlc3QgaXMgdGhlcmUgYmVjYXVzZSBpdCBlbmFibGVzXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTA0LVxcdCAqIHRoZSBjb21waWxlciB0byByZW1vdmUgdGhlIGNhbGwgdG8gcGxwYXJfaGNhbGxfbm9yZXRzKClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwNi1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDc6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiBwc2VyaWVzX3BhcnRpdGlvbl90Yikge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwOC1cXHRcXHRwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfUEFSVElUSU9OX1RBQkxFLCAwKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUxND12b2lkIGt2bWh2X2ZsdXNoX2xwaWQodTY0IGxwaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MTctXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTE4OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTE5LVxcdFxcdHJhZGl4X19mbHVzaF9hbGxfbHBpZChscGlkKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUzNj12b2lkIGt2bWh2X3NldF9wdGJsX2VudHJ5KHU2NCBscGlkLCB1NjQgZHcwLCB1NjQgZHcxKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUzNy17XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTM4OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTM5LVxcdFxcdG1tdV9wYXJ0aXRpb25fdGFibGVfc2V0X2VudHJ5KGxwaWQsIGR3MCwgZHcxLCB0cnVlKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYz0zNT12b2lkIHN3aXRjaF9wbXVfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTc0LVxcdC8qIEFmdGVyIHNhdmluZyBQTVUsIGJlZm9yZSBsb2FkaW5nIGd1ZXN0IFBNVSwgZmxpcCBwbWNyZWdzX2luX3VzZSAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYzo3NTpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTc2LVxcdFxcdGJhcnJpZXIoKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYz0xMTg9dm9pZCBzd2l0Y2hfcG11X3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTE4Ni0jaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jOjE4NzpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTE4OC1cXHRcXHRiYXJyaWVyKCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz01MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY5MC1cXHRcXHRpZiAoaHZfZW5hYmxlZCkge1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjY5MTpcXHRcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjkyLVxcdFxcdFxcdFxcdGlmIChwc2VyaWVzX3JlbG9jX29uX2V4Y2VwdGlvbigpKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzAyLVxcdFxcdHIgPSAwO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwMzpcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwNC1cXHRcXHRcXHRyID0gMTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIuYz00NTQ9c3RhdGljIHZvaWQgdGVzdF9nc19ob3N0d2lkZV9jb3VudGVycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmMtNDYzLVxcbmFyY2gvcG93ZXJwYy9rdm0vdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIuYzo0NjQ6XFx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS90ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5jLTQ2NS1cXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJUaGlzIHRlc3QgbmVlZCBhIGttdi1odiBndWVzdFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OTowNi42ODQ4NzQ3MTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3NjYxODE1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOZXN0ZWQgS1ZNIG9uIHBzZXJpZXM6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBrdm1odl9vbl9wc2VyaWVzKClgIGZ1bmN0aW9uLiBJdCdzIHN1cHBvc2VkIHRvIHRlbGwgbWUgaWYgS1ZNIGlzIHJ1bm5pbmcgbmVzdGVkIG9uIGEgcHNlcmllcyBtYWNoaW5lLCByaWdodD8gQW5kIGlmIGl0ICppc24ndCosIHRoZW4gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGlzIGdvaW5nIHRvIHJldHVybiBgLUVJTlZBTGAuIFRoYXQgaW1tZWRpYXRlbHkgc3BhcmtlZCBhbiBpZGVhIOKAkyBjb3VsZCB0aGlzIGJlIGZ1enplZD8gQ291bGQgSSBwb3RlbnRpYWxseSB0cmlnZ2VyIHNvbWUgaW50ZXJlc3RpbmcgYmVoYXZpb3Igb3IgdW5jb3ZlciBhIGJ1ZyBieSBtYW5pcHVsYXRpbmcgdGhpcyBjb25kaXRpb24/XG5cblRoZSBmaXJzdCB0aGluZyBJIGhhZCB0byBjb25maXJtIHdhcyB3aGV0aGVyIHN5emthbGxlciAqY291bGQqIGV2ZW4gcnVuIG9uIGEgcHNlcmllcyBtYWNoaW5lLiBMdWNraWx5LCB5ZXMhIEkga25vdyB0aGF0IHlvdSBjYW4gdXNlIFFFTVUgd2l0aCB0aGUgYHBzZXJpZXNgIG1hY2hpbmUgdHlwZS4gU28sIHNvbWV0aGluZyBsaWtlIGBxZW11LXN5c3RlbS1wcGM2NCAtTSBwc2VyaWVzYCBpcyB0b3RhbGx5IHZhbGlkLlxuXG5Ob3cgaXQncyBzdGFydGluZyB0byBjb21lIHRvZ2V0aGVyLiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyAqaW5zaWRlKiBhIGBwc2VyaWVzYCBRRU1VIFZNLCB0aGVuIGBrdm1odl9vbl9wc2VyaWVzKClgICpzaG91bGQqIHJldHVybiB0cnVlLiBXYWl0LCBsZXQgbWUgdGhpbmsgdGhhdCB0aHJvdWdo4oCmIGBrdm1odl9vbl9wc2VyaWVzKClgIG1lYW5zIHRoZSBob3N0IGl0c2VsZiBpcyBydW5uaW5nIGFzIGEgZ3Vlc3Qgb24gcHNlcmllcy4gWWVzLCBzeXprYWxsZXIgKmlzKiBydW5uaW5nIGluc2lkZSBhIGBwc2VyaWVzYCBWTSwgd2hpY2ggbWVhbnMgdGhlIGtlcm5lbCBpdCdzIGZ1enppbmcgaXMgYWxzbyBydW5uaW5nIGFzIGEgZ3Vlc3Qgb24gYHBzZXJpZXNgLiBTbywgYGt2bWh2X29uX3BzZXJpZXMoKWAgKndpbGwqIGJlIHRydWUgaW4gdGhhdCBzY2VuYXJpby4gVGhhdCBtZWFucyBLVk0gaW5zaWRlIHRoYXQgZ3Vlc3QgaXMgY29uc2lkZXJlZCBcIm5lc3RlZCBLVk1cIi4gVGhlcmVmb3JlLCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHNob3VsZCBiZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIFRoaXMgaXMgZ3JlYXQsIGFzIGl0IG1lYW5zIEkgY2FuIHRyeSB0byBmaW5kIHNvbWUgbmV3IGZ1enppbmcgc3VyZmFjZS5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgdGhhdCBga3ZtaHZfb25fcHNlcmllcygpYCBpcyBkZWZpbmVkIGFuZCB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI4MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OToxMi43NjE0OTUzOTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTM3OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bWh2X29uX3BzZXJpZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oPTYwND1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2h2X21vZGVfYWN0aXZlKHZvaWQpXFx0XFx0eyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjA4LSNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVNcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oOjYwOTpzdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfb25fcHNlcmllcyh2b2lkKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjEwLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjEzLSNlbHNlXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaDo2MTQ6c3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZClcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oLTYxNS17XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNT11bnNpZ25lZCBsb25nIF9fa3ZtaHZfY29weV90b2Zyb21fZ3Vlc3RfcmFkaXgoaW50IGxwaWQsIGludCBwaWQsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00Ni1cXHQvKiBDYW4ndCBhY2Nlc3MgcXVhZHJhbnRzIDEgb3IgMiBpbiBub24tSFYgbW9kZSwgY2FsbCB0aGUgSFYgdG8gZG8gaXQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYzo0NzpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTQ4LVxcdFxcdHJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9DT1BZX1RPRlJPTV9HVUVTVCwgbHBpZCwgcGlkLCBlYWRkcixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTMxNT12b2lkIGt2bXBwY19yYWRpeF90bGJpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzI5LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjMzMDpcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTMzMS1cXHRcXHRyYWRpeF9fZmx1c2hfdGxiX2xwaWRfcGFnZShscGlkLCBhZGRyLCBwc2l6ZSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNTM9c3RhdGljIHZvaWQga3ZtcHBjX3JhZGl4X2ZsdXNoX3B3YyhzdHJ1Y3Qga3ZtICprdm0sIHU2NCBscGlkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzU2LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjM1NzpcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTM1OC1cXHRcXHRyYWRpeF9fZmx1c2hfcHdjX2xwaWQobHBpZCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTE4Mj1zdGF0aWMgYm9vbCBrdm1wcGNfaXBpX3RocmVhZChpbnQgY3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODYtXFx0LyogSWYgd2UncmUgYSBuZXN0ZWQgaHlwZXJ2aXNvciwgZmFsbCBiYWNrIHRvIG9yZGluYXJ5IElQSXMgZm9yIG5vdyAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTg3OlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00MTQ9c3RhdGljIGludCBrdm1wcGNfc2V0X2FyY2hfY29tcGF0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGFyY2hfY29tcGF0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NjAtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NjE6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiBrdm1odl9pc19uZXN0ZWR2MigpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NjItXFx0XFx0LypcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NDQxMz1zdGF0aWMgaW50IGt2bWh2X3A5X2d1ZXN0X2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ0MzItXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NDMzOlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ0MzQtXFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYxKCkpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ4Njc9aW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTQ2LVxcdFxcdFxcdCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDk0NzpcXHRcXHRcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiAoX19rdm1wcGNfZ2V0X21zcl9odih2Y3B1KSBcXHUwMDI2IE1TUl9FRSkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTQ4LVxcdFxcdFxcdFxcdGt2bXBwY19pbmplY3RfaW50ZXJydXB0X2h2KHZjcHUsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUyMjg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X3NtbXVfaW5mb19odihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTEtXFx0LyogSWYgcnVubmluZyBhcyBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBkb24ndCBzdXBwb3J0IEhQVCBndWVzdHMgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjUyNTI6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTMtXFx0XFx0aW5mby1cXHUwMDNlZmxhZ3MgfD0gS1ZNX1BQQ19OT19IQVNIO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02MTQ1PXN0YXRpYyBpbnQga3ZtX2FyY2hfdm1faW9jdGxfaHYoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYxNTctXFx0XFx0LyogSWYgd2UncmUgYSBuZXN0ZWQgaHlwZXJ2aXNvciwgd2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCByYWRpeCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjE1ODpcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02MTU5LVxcdFxcdFxcdHIgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjI1Nz1zdGF0aWMgaW50IGt2bWh2X2NvbmZpZ3VyZV9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3BwY19tbXV2M19jZmcgKmNmZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4NC1cXHQvKiBJZiB3ZSdyZSBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHJhZGl4ICovXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2Mjg1OlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkgXFx1MDAyNlxcdTAwMjYgIXJhZGl4KVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4Ni1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjUzMz1zdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0MC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1NDE6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0Mi1cXHRcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NjUxPXN0YXRpYyBpbnQga3ZtcHBjX2Jvb2szc19pbml0X2h2KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2ODItI2lmZGVmIENPTkZJR19TTVBcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY2ODM6XFx0aWYgKCF4aWNzX29uX3hpdmUoKSBcXHUwMDI2XFx1MDAyNiAha3ZtaHZfb25fcHNlcmllcygpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02Njg0LVxcdCAgICAhbG9jYWxfcGFjYS1cXHUwMDNla3ZtX2hzdGF0ZS54aWNzX3BoeXMpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjcyNC1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY3MjU6XFx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY3MjYtXFx0XFx0cHJfaW5mbyhcXFwiS1ZNLUhWOiBFbmFibGluZyBJUlEgYnlwYXNzXFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTQzOT1sb25nIGt2bWh2X25lc3RlZF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy00NDQtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NDQ1OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ0Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUwMD12b2lkIGt2bWh2X25lc3RlZF9leGl0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDItXFx0LypcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDM6XFx0ICogTi5CLiB0aGUga3ZtaHZfb25fcHNlcmllcygpIHRlc3QgaXMgdGhlcmUgYmVjYXVzZSBpdCBlbmFibGVzXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTA0LVxcdCAqIHRoZSBjb21waWxlciB0byByZW1vdmUgdGhlIGNhbGwgdG8gcGxwYXJfaGNhbGxfbm9yZXRzKClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwNi1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDc6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiBwc2VyaWVzX3BhcnRpdGlvbl90Yikge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwOC1cXHRcXHRwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfUEFSVElUSU9OX1RBQkxFLCAwKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUxND12b2lkIGt2bWh2X2ZsdXNoX2xwaWQodTY0IGxwaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MTctXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTE4OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTE5LVxcdFxcdHJhZGl4X19mbHVzaF9hbGxfbHBpZChscGlkKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUzNj12b2lkIGt2bWh2X3NldF9wdGJsX2VudHJ5KHU2NCBscGlkLCB1NjQgZHcwLCB1NjQgZHcxKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUzNy17XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTM4OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTM5LVxcdFxcdG1tdV9wYXJ0aXRpb25fdGFibGVfc2V0X2VudHJ5KGxwaWQsIGR3MCwgZHcxLCB0cnVlKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYz0zNT12b2lkIHN3aXRjaF9wbXVfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTc0LVxcdC8qIEFmdGVyIHNhdmluZyBQTVUsIGJlZm9yZSBsb2FkaW5nIGd1ZXN0IFBNVSwgZmxpcCBwbWNyZWdzX2luX3VzZSAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYzo3NTpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTc2LVxcdFxcdGJhcnJpZXIoKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYz0xMTg9dm9pZCBzd2l0Y2hfcG11X3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTE4Ni0jaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jOjE4NzpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTE4OC1cXHRcXHRiYXJyaWVyKCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz01MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY5MC1cXHRcXHRpZiAoaHZfZW5hYmxlZCkge1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjY5MTpcXHRcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjkyLVxcdFxcdFxcdFxcdGlmIChwc2VyaWVzX3JlbG9jX29uX2V4Y2VwdGlvbigpKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzAyLVxcdFxcdHIgPSAwO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwMzpcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwNC1cXHRcXHRcXHRyID0gMTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIuYz00NTQ9c3RhdGljIHZvaWQgdGVzdF9nc19ob3N0d2lkZV9jb3VudGVycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmMtNDYzLVxcbmFyY2gvcG93ZXJwYy9rdm0vdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIuYzo0NjQ6XFx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS90ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5jLTQ2NS1cXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJUaGlzIHRlc3QgbmVlZCBhIGttdi1odiBndWVzdFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OToxMi44NDAwMzgyMjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1MDY1ODY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBQb3dlclBDIFN5c3RlbXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBrdm1odl9vbl9wc2VyaWVzKClgIGZ1bmN0aW9uIGFuZCBpdHMgZGVmaW5pdGlvbiBpcyB0aHJvd2luZyBhIGJpdCBvZiBhIHJlZCBmbGFnLiBJdCBzZWVtcyB0byBkZXBlbmQgb24gYENPTkZJR19QUENfUFNFUklFU2AuIFRoaXMgbWVhbnMgdGhhdCBpZiBgQ09ORklHX1BQQ19QU0VSSUVTYCBpc24ndCBlbmFibGVkLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gYGZhbHNlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIHRvIGFjY291bnQgZm9yIHRoYXQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGFkZCBgUFBDX1BTRVJJRVNgIHRvIGBFbmFibGVDb25maWdzYCB0byBlbnN1cmUgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGlzIGFkZHJlc3NlZC5cblxuTm93LCB3YWl0IGEgbWludXRlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gV2Fzbid0IGBLVk1fQk9PSzNTXzY0X0hWYCBkZXBlbmRlbnQgb24gYFBQQ19QT1dFUk5WYD8gTGV0IG1lIGp1c3QgcXVpY2tseSByZWZlciBiYWNrIHRvIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIGluIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY1MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OToxNy4wOTA2OTg0NDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc5OlxcdGNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuICA4MDpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcbiAgODE6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTXzY0IFxcdTAwMjZcXHUwMDI2IFBQQ19QT1dFUk5WXFxuICA4MjpcXHRcXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbiAgODM6XFx0XFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXFxuICA4NDpcXHRcXHRzZWxlY3QgQ01BXFxuICA4NTpcXHRcXHRoZWxwXFxuICA4NjpcXHRcXHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBndWVzdCBrZXJuZWxzIGluXFxuICA4NzpcXHRcXHQgIHZpcnR1YWwgbWFjaGluZXMgb24gUE9XRVI3IGFuZCBuZXdlciBwcm9jZXNzb3JzIHRoYXQgaGF2ZVxcbiAgODg6XFx0XFx0ICBoeXBlcnZpc29yIG1vZGUgYXZhaWxhYmxlIHRvIHRoZSBob3N0LlxcbiAgODk6XFx0XFxuICA5MDpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCBLVk0gd2lsbCB1c2UgdGhlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uXFxuICA5MTpcXHRcXHQgIGZhY2lsaXRpZXMgb2YgUE9XRVI3IChhbmQgbGF0ZXIpIHByb2Nlc3NvcnMsIG1lYW5pbmcgdGhhdFxcbiAgOTI6XFx0XFx0ICBndWVzdCBvcGVyYXRpbmcgc3lzdGVtcyB3aWxsIHJ1biBhdCBmdWxsIGhhcmR3YXJlIHNwZWVkXFxuICA5MzpcXHRcXHQgIHVzaW5nIHN1cGVydmlzb3IgYW5kIHVzZXIgbW9kZXMuICBIb3dldmVyLCB0aGlzIGFsc28gbWVhbnNcXG4gIDk0OlxcdFxcdCAgdGhhdCBLVk0gaXMgbm90IHVzYWJsZSB1bmRlciBQb3dlclZNIChwSHlwKSwgaXMgb25seSB1c2FibGVcXG4gIDk1OlxcdFxcdCAgb24gUE9XRVI3IG9yIGxhdGVyIHByb2Nlc3NvcnMsIGFuZCBjYW5ub3QgZW11bGF0ZSBhXFxuICA5NjpcXHRcXHQgIGRpZmZlcmVudCBwcm9jZXNzb3IgZnJvbSB0aGUgaG9zdCBwcm9jZXNzb3IuXFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MTcuMDkwNzc2NzQ5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTk5MDA5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgUG93ZXJQQyBLY29uZmlnIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEtWTV9CT09LM1NfNjRfSFZgIGNvbmZpZyBvcHRpb24sIGFuZCBpdCdzIHBvcHBpbmcgdXAgYSBkZXBlbmRlbmN5IG9uIGBQUENfUE9XRVJOVmAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBQb3dlck5WIGlzIHRoZSBoeXBlcnZpc29yLCBzbyBhIEJvb2szUyA2NC1iaXQgS1ZNIGZvciBQb3dlck5WIHdvdWxkIG5hdHVyYWxseSBiZSBkZXBlbmRlbnQgb24gaXRzIHByZXNlbmNlLlxuXG5CdXQsIGEgbGl0dGxlIGFsYXJtIGJlbGwgaXMgZ29pbmcgb2ZmIGluIG15IGhlYWQuIElmIHdlJ3JlIGVuYWJsaW5nIGBQUENfUE9XRVJOVmAsIGRvZXMgdGhhdCBjYXVzZSBhbnkgY29uZmxpY3RzIHdpdGggYFBQQ19QU0VSSUVTYD8gSGlzdG9yaWNhbGx5LCB0aGVyZSBoYXZlIGJlZW4gaW50ZXJlc3RpbmcgY29tcGF0aWJpbGl0eSBpc3N1ZXMgaW4gdGhlIFBvd2VyUEMgYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHZpcnR1YWxpemF0aW9uIGFuZCBkaWZmZXJlbnQgcGxhdGZvcm0gdHlwZXMuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgY3JlYXRpbmcgYSBwcm9ibGVtLiBCZXN0IHByYWN0aWNlIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUgaW1tZWRpYXRlbHkuIFNvLCBsZXQncyBkaXZlIGludG8gYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkIHRoZXJlLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBleHBsaWNpdCBjb25mbGljdHMgb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGxhaWQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQyNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MjAuNDEwNjgwNTA1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4NjMyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBQQ19QT1dFUk5WXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWc6Mjpjb25maWcgUFBDX1BPV0VSTlZcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gUFBDNjQgXFx1MDAyNlxcdTAwMjYgUFBDX0JPT0szU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OToyMC41MjA1NDc5NDVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NDQ0NDA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFBvd2VyUEMvcFNlcmllcyBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQgaW4gdGhlIGBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIHBTZXJpZXMgc3lzdGVtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcmNoaXRlY3R1cmUgaGFuZGxlcyBpdHMgdW5pcXVlIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcy4gV2hhdCBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLCBhbmQgaG93IGFyZSB0aGV5IGNvbmRpdGlvbmFsbHkgZW5hYmxlZD8gSSB3YW50IHRvIHBpbnBvaW50IHRoZSBrZXkgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZGVmaW5lIGEgbWluaW1hbCwgb3IgYSBmZWF0dXJlLXJpY2gsIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4gRGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhhdCBvdmVydmlldyBhbmQgdGhlIGRldGFpbGVkIGluc2lnaHRzIEkgbmVlZC4gSSdtIGhvcGluZyB0byB1bmNvdmVyIGFueSBuZXcgb3Igbm90ZXdvcnRoeSBjaGFuZ2VzIHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCwgaGFyZHdhcmUgZHJpdmVycywgb3IgZmlybXdhcmUgaW50ZWdyYXRpb24sIGFuZCByZWxhdGUgdGhlc2UgdG8gbXkgY3VycmVudCBwcm9qZWN0LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODQzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MjMuOTc0OTk0MTI4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTY1MjM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFBDX1BTRVJJRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZzoyOmNvbmZpZyBQUENfUFNFUklFU1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBQUEM2NCBcXHUwMDI2XFx1MDAyNiBQUENfQk9PSzNTXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZz05Mj1jb25maWcgTFBBUkNGR1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctOTgtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWc6OTk6Y29uZmlnIFBQQ19QU0VSSUVTX0RFQlVHXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMTAwLVxcdGRlcGVuZHMgb24gUFBDX1BTRVJJRVMgXFx1MDAyNlxcdTAwMjYgUFBDX0VBUkxZX0RFQlVHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU5OjI0LjA3MDY1MjEyOVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDg3Nzg3NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBQb3dlclBDIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBQb3dlclBDIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgd2hldGhlciB3ZSBjYW4gZW5hYmxlIGJvdGggYFBQQ19QT1dFUk5WYCBhbmQgYFBQQ19QU0VSSUVTYCBzaW11bHRhbmVvdXNseS4gVGhlIHF1aWNrIGFuc3dlciBpcyB5ZXMsIGluIG1vZGVybiBrZXJuZWxzLCBpdCdzIHBvc3NpYmxlIHRvIGJ1aWxkIGEgc2luZ2xlIGtlcm5lbCBpbWFnZSB0aGF0IGNhbiBib290IG9uIGJvdGggYmFyZS1tZXRhbCBQb3dlck5WIGFuZCB2aXJ0dWFsaXplZCBwU2VyaWVzIHN5c3RlbXMuIFRoZXJlZm9yZSwgc2V0dGluZyBib3RoIGBQUENfUE9XRVJOVmAgYW5kIGBQUENfUFNFUklFU2Agc2VlbXMgcGVyZmVjdGx5IHZhbGlkLlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgZGVwZW5kZW5jaWVzLiBJIHJlY2FsbCB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBkZXBlbmRzIG9uIGBQUENfUE9XRVJOVmAsIGFuZCBga3ZtaHZfb25fcHNlcmllcygpYCByZXF1aXJlcyBgUFBDX1BTRVJJRVNgLiBUaGVyZWZvcmUsIGVuYWJsaW5nIGJvdGggd291bGQgYmUgcmVxdWlyZWQsIHNvIHRoYXQgd2UgY2FuIGVuc3VyZSBib3RoIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBhdmFpbGFibGUgYW5kIGBrdm1odl9vbl9wc2VyaWVzKClgIGNhbiBldmFsdWF0ZSB0byB0cnVlLlxuXG5CdXQgSSdtIGEgYml0IGNvbmNlcm5lZCBhYm91dCBob3cgYGt2bWh2X29uX3BzZXJpZXMoKWAgYWN0dWFsbHkgYmVoYXZlcy4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgbG9naWMuIEl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZDpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19QUENfUFNFUklFU1xuc3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZClcbntcblx0cmV0dXJuICFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9IVk1PREUpO1xufVxuI2Vsc2VcbnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9vbl9wc2VyaWVzKHZvaWQpXG57XG5cdHJldHVybiBmYWxzZTtcbn1cbiNlbmRpZlxuYGBgXG5cbklmIGBQUENfUFNFUklFU2AgaXMgZW5hYmxlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9IVk1PREUpYC4gTm93LCBpZiB3ZSBib290IHRoaXMgb24gUUVNVSBhcyBhIHBTZXJpZXMgZ3Vlc3QsIGBDUFVfRlRSX0hWTU9ERWAgKmlzbid0KiBzZXQsIHNvIGBrdm1odl9vbl9wc2VyaWVzKClgIHdvdWxkIHJldHVybiBgdHJ1ZWAuIEluIHRoaXMgc2NlbmFyaW8sIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB3aWxsIHByb2NlZWQsIGFuZCByZXR1cm4gMC5cblxuSG93ZXZlciwgaWYgd2UgYm9vdCBvbiBQb3dlck5WIChiYXJlIG1ldGFsKSwgYENQVV9GVFJfSFZNT0RFYCAqaXMqIHNldCwgc28gYGt2bWh2X29uX3BzZXJpZXMoKWAgd291bGQgcmV0dXJuIGBmYWxzZWAuIEFoLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgYSBsaXR0bGUgaGF6eS4uLiBhIHJldHVybiBvZiBmYWxzZSBtZWFucyB0aGF0IGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB3aWxsIHJldHVybiBgLUVJTlZBTGAuIElzIHRoYXQgdGhlIGV4cGVjdGVkIGJlaGF2aW9yPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgcmV2aXNpdCB0aGF0IHBhdGNoLiBTb21ldGhpbmcgZG9lc24ndCBmZWVsIHF1aXRlIHJpZ2h0IHdpdGggdGhhdCBwYXJ0IG9mIHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyOTMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MzIuMTU4NDQxNDExWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1MzMsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY1MzM6XFx0c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuNjUzNDpcXHR7XFxuNjUzNTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xcbjY1MzY6XFx0XFx0dW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMgPSAwO1xcbjY1Mzc6XFx0XFx0Y29uc3QgX19iZTMyICpwcm9wID0gTlVMTDtcXG42NTM4OlxcdFxcdGxvbmcgcmMgPSAtRUlOVkFMO1xcbjY1Mzk6XFx0XFx0dTMyIGNwdV92ZXJzaW9uO1xcbjY1NDA6XFx0XFxuNjU0MTpcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuNjU0MjpcXHRcXHRcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbjY1NDM6XFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTtcXG42NTQ0OlxcdFxcdFxcdFxcdGNhcGFiaWxpdGllcyA9IG5lc3RlZF9jYXBhYmlsaXRpZXM7XFxuNjU0NTpcXHRcXHRcXHRcXHRyYyA9IDA7XFxuNjU0NjpcXHRcXHRcXHR9IGVsc2Uge1xcbjY1NDc6XFx0XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcXFwiY3B1XFxcIikge1xcbjY1NDg6XFx0XFx0XFx0XFx0XFx0cHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgXFxcImNwdS12ZXJzaW9uXFxcIiwgTlVMTCk7XFxuNjU0OTpcXHRcXHRcXHRcXHRcXHRpZiAocHJvcCkge1xcbjY1NTA6XFx0XFx0XFx0XFx0XFx0XFx0Y3B1X3ZlcnNpb24gPSBiZTMyX3RvX2NwdXAocHJvcCk7XFxuNjU1MTpcXHRcXHRcXHRcXHRcXHRcXHRvZl9ub2RlX3B1dChucCk7XFxuNjU1MjpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG42NTUzOlxcdFxcdFxcdFxcdFxcdH1cXG42NTU0OlxcdFxcdFxcdFxcdH1cXG42NTU1OlxcdFxcdFxcdFxcdGlmICghcHJvcClcXG42NTU2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjY1NTc6XFx0XFx0XFx0XFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXFxuNjU1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNhcGFiaWxpdGllcyk7XFxuNjU1OTpcXHRcXHRcXHR9XFxuNjU2MDpcXHRcXHR9XFxuNjU2MTpcXHRcXG42NTYyOlxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuNjU2MzpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuNjU2NDpcXHRcXG42NTY1OlxcdFxcdGhvc3RfY2Fwcy1cXHUwMDNlY29tcGF0X2NhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcyBcXHUwMDI2IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7XFxuNjU2NjpcXHRcXG42NTY3OlxcdFxcdHJldHVybiByYztcXG42NTY4OlxcdH1cXG42NTY5OlxcdFxcbjY1NzA6XFx0c3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XFxuNjU3MTpcXHRcXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXFxuNjU3MjpcXHRcXHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU5OjMyLjE1ODY1MjEyMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTcxNzAxODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmVzdGVkIEtWTSBDUFUgQ29tcGF0aWJpbGl0eSBJb2N0bCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSWYgYGt2bWh2X29uX3BzZXJpZXMoKWAgcmV0dXJucyBmYWxzZSwgdGhlIHJldHVybiBjb2RlIChgcmNgKSBpcyBgLUVJTlZBTGAsIGFuZCB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkgcmV0dXJucyBgLUVJTlZBTGAuIEluaXRpYWxseSwgaXQgc2VlbWVkIGxpa2UgdGhpcyBtaWdodCBsaW1pdCBzdXBwb3J0IHRvIHBzZXJpZXMgc3lzdGVtcy4gVGhlIGNvbW1pdCBtZXNzYWdlIHByb3ZpZGVzIGEgY3J1Y2lhbCBjbHVlOiBcIlRoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb24gS1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLlwiXG5cblRoZSBtZW50aW9uIG9mIFwiS1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpXCIgdHJpZ2dlcmVkIGEgcmVkIGZsYWcuIElmIGl0J3MgUG93ZXJOViwgYGt2bWh2X29uX3BzZXJpZXMoKWAgKnNob3VsZCogYmUgZmFsc2UhIEFuZCwgaWYgYGt2bWh2X29uX3BzZXJpZXMoKWAgaXMgaW5kZWVkIGZhbHNlLCB0aGUgYHJjYCBpcyBgLUVJTlZBTGAsIGNhdXNpbmcgdGhlIGZ1bmN0aW9uIHRvIHJldHVybiBgLUVJTlZBTGAuIEkgZmVsdCBhIG5lZWQgdG8gcmV2aXNpdCBteSBhc3N1bXB0aW9ucy5cblxuT2theSwgbGV0IG1lIHJlcmVhZCB0aGUgY29tbWl0IG1lc3NhZ2U6IFwiLi4uZm9yIGJvb3RpbmcgdGhlIG5lc3RlZCBLVk0gZ3Vlc3RzIG9uIEtWTSBvbiBQb3dlck5WIChuZXN0ZWQgQVBJIHYxKSBhbmQgS1ZNIG9uIFBvd2VyVk0gKG5lc3RlZCBBUEkgdjIpIHBsYXRmb3Jtcy5cIiBBaCwgbm93IEkgc2VlLiBcIktWTSBvbiBQb3dlck5WXCIgbWVhbnMgdGhlICpMMSogZ3Vlc3QgaXMgcnVubmluZyBvbiBQb3dlck5WLiBTbywgdGhlIGJhcmUgbWV0YWwgaG9zdCAoTDApIGlzIFBvd2VyTlYsIGFuZCB0aGUgZ3Vlc3Qgb24gdG9wIChMMSkgaXMgYSBwc2VyaWVzIGd1ZXN0LiBUaGUgbmVzdGVkIGd1ZXN0IChMMikgcnVucyB3aXRoaW4gdGhhdCBwc2VyaWVzIGd1ZXN0IChMMSkuIFRoZSBpb2N0bCBpcyB0aGVyZWZvcmUgY2FsbGVkIGZyb20gUUVNVSwgd2hpY2ggaXMgcnVubmluZyAqaW5zaWRlKiB0aGUgTDEgcHNlcmllcyBndWVzdC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHdlIGFyZSBpbiBhbiBMMSBwc2VyaWVzIGd1ZXN0LCBga3ZtaHZfb25fcHNlcmllcygpYCAqbXVzdCogYmUgdHJ1ZS4gU28sIHRoaXMgZnVuY3Rpb25hbGl0eSAqaXMqIG9ubHkgc3VwcG9ydGVkIHdoZW4gcnVubmluZyBhcyBhIHBzZXJpZXMgZ3Vlc3QuIEFuZCBzaW5jZSBzeXprYWxsZXIgcnVucyBpbiBhIHBzZXJpZXMgZ3Vlc3QgKHZpYSBRRU1VIHdpdGggYC1NIHBzZXJpZXNgKSwgaXQgYWxsIG1ha2VzIHNlbnNlLiBUaGUgY29kZSBwYXRoIHNob3VsZCBiZSBjb3JyZWN0IGFuZCwgYGt2bWh2X29uX3BzZXJpZXMoKWAgd2lsbCBldmFsdWF0ZSB0byB0cnVlLiBOb3csIGxldCdzIG1vdmUgb24gdG8gYGt2bWh2X2lzX25lc3RlZHYyKClgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU5OjQwLjEzMDM1NjA1NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MjQ5ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bWh2X2lzX25lc3RlZHYyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaD0zMjA9dm9pZCBrdm1wcGNfZ2l2ZXVwX2ZhYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGZhYyk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMyNC1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjMyNTpleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgX19rdm1odl9pc19uZXN0ZWR2MjtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMyNi1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjMyNzpzdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfaXNfbmVzdGVkdjIodm9pZClcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMyOC17XFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaDozMjk6XFx0cmV0dXJuIHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNl9fa3ZtaHZfaXNfbmVzdGVkdjIpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzMwLX1cXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg9MzMyPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9pc19uZXN0ZWR2MSh2b2lkKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzMzLXtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjMzNDpcXHRyZXR1cm4gIXN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZfX2t2bWh2X2lzX25lc3RlZHYyKTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMzNS19XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMzOC1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjMzOTpzdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfaXNfbmVzdGVkdjIodm9pZClcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM0MC17XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oPTM1Nj1zdGF0aWMgaW5saW5lIGludCBrdm1odl9uZXN0ZWR2Ml9yZWxvYWRfcHRyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzU4LXtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjM1OTpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM2MC1cXHRcXHRyZXR1cm4gX19rdm1odl9uZXN0ZWR2Ml9yZWxvYWRfcHRyZWdzKHZjcHUsIHJlZ3MpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaD0zNjM9c3RhdGljIGlubGluZSBpbnQga3ZtaHZfbmVzdGVkdjJfbWFya19kaXJ0eV9wdHJlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zNjUte1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg6MzY2OlxcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzY3LVxcdFxcdHJldHVybiBfX2t2bWh2X25lc3RlZHYyX21hcmtfZGlydHlfcHRyZWdzKHZjcHUsIHJlZ3MpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaD0zNzE9c3RhdGljIGlubGluZSBpbnQga3ZtaHZfbmVzdGVkdjJfbWFya19kaXJ0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBpZGVuKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzcyLXtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjM3MzpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM3NC1cXHRcXHRyZXR1cm4gX19rdm1odl9uZXN0ZWR2Ml9tYXJrX2RpcnR5KHZjcHUsIGlkZW4pO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaD0zNzg9c3RhdGljIGlubGluZSBpbnQga3ZtaHZfbmVzdGVkdjJfY2FjaGVkX3JlbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBpZGVuKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzc5LXtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjM4MDpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM4MS1cXHRcXHRyZXR1cm4gX19rdm1odl9uZXN0ZWR2Ml9jYWNoZWRfcmVsb2FkKHZjcHUsIGlkZW4pO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaD02MTQ9c3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjIyLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmg6NjIzOnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9pc19uZXN0ZWR2Mih2b2lkKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjI0LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmM9Mjk2PXN0YXRpYyBpbnQga3ZtcHBjX2Jvb2szc19pcnFwcmlvX2RlbGl2ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYy0zMDQtXFx0Y2FzZSBCT09LM1NfSVJRUFJJT19ERUNSRU1FTlRFUjpcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jOjMwNTpcXHRcXHRkZWxpdmVyID0gIWt2bWh2X2lzX25lc3RlZHYyKCkgXFx1MDAyNlxcdTAwMjYgKGt2bXBwY19nZXRfbXNyKHZjcHUpIFxcdTAwMjYgTVNSX0VFKSBcXHUwMDI2XFx1MDAyNiAhY3JpdDtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jLTMwNi1cXHRcXHR2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0RFQ1JFTUVOVEVSO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYy0zMDgtXFx0Y2FzZSBCT09LM1NfSVJRUFJJT19FWFRFUk5BTDpcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jOjMwOTpcXHRcXHRkZWxpdmVyID0gIWt2bWh2X2lzX25lc3RlZHYyKCkgXFx1MDAyNlxcdTAwMjYgKGt2bXBwY19nZXRfbXNyKHZjcHUpIFxcdTAwMjYgTVNSX0VFKSBcXHUwMDI2XFx1MDAyNiAhY3JpdDtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jLTMxMC1cXHRcXHR2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM9MzU9dW5zaWduZWQgbG9uZyBfX2t2bWh2X2NvcHlfdG9mcm9tX2d1ZXN0X3JhZGl4KGludCBscGlkLCBpbnQgcGlkLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtNDItXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM6NDM6XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtNDQtXFx0XFx0cmV0dXJuIEhfVU5TVVBQT1JURUQ7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQxND1zdGF0aWMgaW50IGt2bXBwY19zZXRfYXJjaF9jb21wYXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgYXJjaF9jb21wYXQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ2MC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjQ2MTpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpIFxcdTAwMjZcXHUwMDI2IGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ2Mi1cXHRcXHQvKlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz03Mjg9c3RhdGljIHZvaWQga3ZtcHBjX3VwZGF0ZV92cGFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNzQxLVxcdFxcdGlmIChvbGRfdnBhLnBpbm5lZF9hZGRyKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo3NDI6XFx0XFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy03NDMtXFx0XFx0XFx0XFx0a3ZtaHZfbmVzdGVkdjJfc2V0X3ZwYSh2Y3B1LCB+MHVsbCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTc0OC1cXHRcXHRcXHRpbml0X3ZwYSh2Y3B1LCB2Y3B1LVxcdTAwM2VhcmNoLnZwYS5waW5uZWRfYWRkcik7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo3NDk6XFx0XFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy03NTAtXFx0XFx0XFx0XFx0a3ZtaHZfbmVzdGVkdjJfc2V0X3ZwYSh2Y3B1LCBfX3BhKHZjcHUtXFx1MDAzZWFyY2gudnBhLnBpbm5lZF9hZGRyKSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTE2Mjk9c3RhdGljIGludCBrdm1wcGNfaGFuZGxlX2V4aXRfaHYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xNjQ0LVxcdCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTY0NTpcXHRpZiAoIWt2bWh2X2lzX25lc3RlZHYyKCkgXFx1MDAyNlxcdTAwMjYgKF9fa3ZtcHBjX2dldF9tc3JfaHYodmNwdSkgXFx1MDAyNiBNU1JfSFYpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xNjQ2LVxcdFxcdHByaW50ayhLRVJOX0VNRVJHIFxcXCJLVk0gdHJhcCBpbiBIViBtb2RlIVxcXFxuXFxcIik7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTE3MzUtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzoxNzM2OlxcdFxcdGlmICgha3ZtaHZfaXNfbmVzdGVkdjIoKSBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseShfX2t2bXBwY19nZXRfbXNyX2h2KHZjcHUpIFxcdTAwMjYgTVNSX1BSKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMTczNy1cXHRcXHRcXHQvKlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz0yOTYwPXN0YXRpYyBpbnQga3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGVfaHYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0yOTgzLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6Mjk4NDpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMjk4NS1cXHRcXHRlcnIgPSBrdm1odl9uZXN0ZWR2Ml92Y3B1X2NyZWF0ZSh2Y3B1LCBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5uZXN0ZWR2Ml9pbyk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTMxMzk9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9mcmVlX2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzE0NS1cXHRzcGluX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52cGFfdXBkYXRlX2xvY2spO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MzE0NjpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTMxNDctXFx0XFx0a3ZtaHZfbmVzdGVkdjJfdmNwdV9mcmVlKHZjcHUsIFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm5lc3RlZHYyX2lvKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NTA4ND1zdGF0aWMgaW50IGt2bXBwY192Y3B1X3J1bl9odihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUxNjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo1MTY5OlxcdFxcdFxcdGlmICgha3ZtaHZfaXNfbmVzdGVkdjIoKSBcXHUwMDI2XFx1MDAyNiBXQVJOX09OX09OQ0UoX19rdm1wcGNfZ2V0X21zcl9odih2Y3B1KSBcXHUwMDI2IE1TUl9QUikpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUxNzAtXFx0XFx0XFx0XFx0LypcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NTQxMj12b2lkIGt2bXBwY191cGRhdGVfbHBjcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbHBjciwgdW5zaWduZWQgbG9uZyBtYXNrKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01NDM0LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTQzNTpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTQzNi1cXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTU2OTc9c3RhdGljIGludCBrdm1wcGNfY29yZV9pbml0X3ZtX2h2KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTcwNy1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjU3MDg6XFx0aWYgKCFrdm1odl9pc19uZXN0ZWR2MigpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01NzA5LVxcdFxcdGxwaWQgPSBrdm1wcGNfYWxsb2NfbHBpZCgpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01NzE4LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTcxOTpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTcyMC1cXHRcXHRsb25nIHJjO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01ODEzLVxcdFxcdGlmIChyZXQpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjU4MTQ6XFx0XFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01ODE1LVxcdFxcdFxcdFxcdHBscGFyX2d1ZXN0X2RlbGV0ZSgwLCBrdm0tXFx1MDAzZWFyY2gubHBpZCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTU4ODc9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfZGVzdHJveV92bV9odihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU5MDYtXFx0XFx0XFx0dXZfc3ZtX3Rlcm1pbmF0ZShrdm0tXFx1MDAzZWFyY2gubHBpZCk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo1OTA3OlxcdFxcdGlmICgha3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU5MDgtXFx0XFx0XFx0a3ZtaHZfc2V0X3B0YmxfZW50cnkoa3ZtLVxcdTAwM2VhcmNoLmxwaWQsIDAsIDApO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01OTEwLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTkxMTpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTkxMi1cXHRcXHRrdm1odl9mbHVzaF9scGlkKGt2bS1cXHUwMDNlYXJjaC5scGlkKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjMyMD1zdGF0aWMgaW50IGt2bWh2X2VuYWJsZV9uZXN0ZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02MzI3LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjMyODpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYzMjktXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MzM9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NDEtXFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjU0MjpcXHRcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0My1cXHRcXHRcXHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM9NDM5PWxvbmcga3ZtaHZfbmVzdGVkX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ2OC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo0Njk6XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNl9fa3ZtaHZfaXNfbmVzdGVkdjIpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ3MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUzNj12b2lkIGt2bWh2X3NldF9wdGJsX2VudHJ5KHU2NCBscGlkLCB1NjQgZHcwLCB1NjQgZHcxKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTQ5LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jOjU1MDpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01NTEtXFx0XFx0a3ZtaHZfbmVzdGVkdjJfc2V0X3B0YmxfZW50cnkobHBpZCwgZHcwLCBkdzEpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkdjIuYy0yOS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWR2Mi5jOjMwOnN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIF9fa3ZtaHZfaXNfbmVzdGVkdjIgX19yZWFkX21vc3RseTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWR2Mi5jOjMxOkVYUE9SVF9TWU1CT0xfR1BMKF9fa3ZtaHZfaXNfbmVzdGVkdjIpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZHYyLmMtMzItXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmM9Mzk4PXN0YXRpYyBpbnQgX19pbml0IGt2bXBwY19yZWdpc3Rlcl9wbXUodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2t2bS1odi1wbXUuYy00MDItXFx0Lyogb25seSBzdXBwb3J0IGV2ZW50cyBmb3IgbmVzdGVkdjIgcmlnaHQgbm93ICovXFxuYXJjaC9wb3dlcnBjL3BlcmYva3ZtLWh2LXBtdS5jOjQwMzpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9wZXJmL2t2bS1odi1wbXUuYy00MDQtXFx0XFx0cmMgPSBrdm1wcGNfaW5pdF9ob3N0d2lkZSgpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYva3ZtLWh2LXBtdS5jPTQyMD1zdGF0aWMgdm9pZCBfX2V4aXQga3ZtcHBjX3VucmVnaXN0ZXJfcG11KHZvaWQpXFxuYXJjaC9wb3dlcnBjL3BlcmYva3ZtLWh2LXBtdS5jLTQyMS17XFxuYXJjaC9wb3dlcnBjL3BlcmYva3ZtLWh2LXBtdS5jOjQyMjpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9wZXJmL2t2bS1odi1wbXUuYy00MjMtXFx0XFx0a3ZtcHBjX2NsZWFudXBfaG9zdHdpZGUoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6NDAuMzY4NjEyOTAxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTM2OTQ5ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFBvd2VyUEMgS1ZNIENvbXBhdGliaWxpdHkgQ2FwYWJpbGl0aWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgZnVuY3Rpb25hbGl0eSBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCBsb29rcyBzb2xpZDsgYGt2bWh2X2lzX25lc3RlZHYyKClgIGdldHMgZW5hYmxlZCBpbiBga3ZtaHZfbmVzdGVkX2luaXQoKWAgaWYgdGhlIGhvc3Qgc3VwcG9ydHMgbmVzdGVkdjIuIFdlJ3JlIHVzaW5nIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB3aXRoIGBuZXN0ZWRfY2FwYWJpbGl0aWVzYCBpbiB0aGUgbmVzdGVkdjIgY2FzZS4gSWYgaXQncyBuZXN0ZWR2MSBvciBwc2VyaWVzLCB3ZSBhcmUgcmVhZGluZyBgY3B1LXZlcnNpb25gIGZyb20gdGhlIGRldmljZSB0cmVlLiBCb3RoIHBhdGhzIGFyZSB3b3JraW5nLiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGZ1enplZC5cblxuVGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgYXJlIGdvaW5nIHRvIGJlOiBgS1ZNX0JPT0szU182NF9IVmAsIGBQUENfUE9XRVJOVmAsIGFuZCBgUFBDX1BTRVJJRVNgLiBIb2xkIG9uLCBgS1ZNX0JPT0szU182NF9IVmAgcmVxdWlyZXMgYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgLiBMZXQncyBrZWVwIHRoYXQgaW4gbWluZC5cblxuV2UncmUgZGVhbGluZyB3aXRoIHRoZSBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgaW4gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGFuZCwgaW1wb3J0YW50bHksIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgIHdpdGhpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFNvIHRob3NlIGFyZSBvdXIgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLlxuXG5Ob3csIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBoYW5kbGVzIHRoYXQgaW9jdGwuIFNob3VsZCB3ZSBpbmNsdWRlIGl0PyBObywgYmVjYXVzZSBpdCdzIGEgZ2VuZXJpYyBob3QtcGF0aCBmb3IgVk0gaW9jdGxzLCBub3Qgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gVGhpcyBpb2N0bCBsb2dpYyBpcyBpbmxpbmUgaW4gdGhlIGBzd2l0Y2hgIHN0YXRlbWVudCBvZiBga3ZtX2FyY2hfdm1faW9jdGxgIHNvLCB3ZSBjYW4ndCByZWFsbHkgZm9jdXMgaXQuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFnYWluLiBgS1ZNX0JPT0szU182NF9IVmAsIGBQUENfUE9XRVJOVmAsIGFuZCBgUFBDX1BTRVJJRVNgLiBXZSBzaG91bGQgYWRkIGBLVk1fQk9PSzNTXzY0YCB0b28gYmVjYXVzZSBpdCBpcyBuZWVkZWQgYnkgYEtWTV9CT09LM1NfNjRfSFZgLiBTeXprYWxsZXIgbWF5IG9yIG1heSBub3QgZW5hYmxlIHBsYXRmb3JtIGNvbmZpZ3MgbGlrZSBgUFBDX1BPV0VSTlZgIGFuZCBgUFBDX1BTRVJJRVNgIGJ5IGRlZmF1bHQsIGJ1dCBsaXN0aW5nIHRoZW0gaXMgdGhlIHJpZ2h0IGFwcHJvYWNoLlxuXG5TbywgdGhlIHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLCB3aGljaCBjb3BpZXMgZGF0YSB0by9mcm9tIHVzZXJzcGFjZSBhbmQgY2FsbHMgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBUaGlzIGFkZHMgbmV3LCBleGVjdXRhYmxlIGNvZGUgdGhhdCB3ZSBjYW4gaGl0IHdoZW4gcnVubmluZyBhIHBzZXJpZXMgbWFjaGluZSB3aXRoIFFFTVUsIHNvIHdlIHNob3VsZCBmdXp6IGl0LlxuXG5KdXN0IHRvIGJlIHN1cmUsIGBrdm1wcGNfaGFzaF92M19wb3NzaWJsZWAgaXNuJ3QgbW9kaWZpZWQuIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCBpcyBjaGFuZ2VkIHRvIHJldHVybiAxIGZvciBgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNgLCBidXQgdGhhdCdzIGEgZ2VuZXJpYyBjaGVjayBzbyB3ZSdsbCBza2lwIGl0LlxuXG5Tbywgb3VyIGtleSBgRm9jdXNTeW1ib2xzYCBhcmU6IGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AuXG5cbkFuZCwgZm9yIGBFbmFibGVDb25maWdzYCwgd2Ugd2FudDogYEtWTV9CT09LM1NfNjRfSFZgLCBgUFBDX1BPV0VSTlZgLCBgUFBDX1BTRVJJRVNgLCBhbmQgYEtWTV9CT09LM1NfNjRgLiBTcGVjaWZpY2FsbHksIGBLVk1fQk9PSzNTXzY0X0hWYCBkZXBlbmRzIG9uIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gV2UgbmVlZCBgUFBDX1BTRVJJRVNgIHNvIHRoYXQgYGt2bWh2X29uX3BzZXJpZXMoKWAgY2FuIGJlIHRydWUuIFRoYXQgY29tYmluYXRpb24gaXMgY29ycmVjdC5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjUyNCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU5OjU1LjUwNTU2NjQxNloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzcxMjAyLCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X0hWLCBQUENfUE9XRVJOViwgUFBDX1BTRVJJRVMiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0JPT0szU182NF9IVlwiLFxuICAgIFwiUFBDX1BPV0VSTlZcIixcbiAgICBcIlBQQ19QU0VSSUVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX2dldF9jb21wYXRfY2Fwc1wiLFxuICAgIFwia3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIFRoZSBpb2N0bCBpbXBsZW1lbnRhdGlvbiBpbnZvbHZlcyBjb3B5aW5nIGRhdGEgZnJvbS90byB1c2Vyc3BhY2UsIGNoZWNraW5nIHNpemVzLCBhbmQgY2FsbGluZyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgdG8gcXVlcnkgdGhlIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYywgd2hpY2ggY2FuIGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHBzZXJpZXMgbWFjaGluZSkuIFRoZXJlZm9yZSwgaXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX0JPT0szU182NF9IViwgUFBDX1BPV0VSTlYsIFBQQ19QU0VSSUVTXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU5OjU1LjU4NDk1NDMyOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzE1MTY0NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gRGlsZW1tYSoqXG5cbk9rYXksIGhvbGQgb24gYSBtaW51dGUuIFNvbWV0aGluZydzIG5vdCByaWdodC4gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIHdhcyBleHBlY3RpbmcuLi4gdGhleSdyZSBub3QgcHJlc2VudD8gVGhhdCdzIHVuZXhwZWN0ZWQuIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBvdmVyc2lnaHQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gdGhlIFBvd2VyUEMgS1ZNIGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBsZXQncyByZXZpc2l0IGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgSSdtIG5vdCBvdmVybG9va2luZyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvciBhIGRlcGVuZGVuY3kgdGhhdCBJJ3ZlIG1pc3NlZC4gQSBkZWVwZXIgZGl2ZSBpcyByZXF1aXJlZCB0byBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIG1pc3NpbmcgY29uZmlnLiBJdCBpcyBiZXN0IHRvIG5vdCB0YWtlIGFueXRoaW5nIGZvciBncmFudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODgxOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OTo1OC4zMDAxMjEwNTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzM3MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mj1jb25maWcgS1ZNX0JPT0szU182NFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OTo1OC4zNTI4NjU5NTlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMDE5MDM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBLY29uZmlnIElzc3VlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBkaXN0aW5jdGx5IHJlbWVtYmVyIHNlZWluZyBgS1ZNX0JPT0szU182NF9IVmAgZGVmaW5lZCBzb21ld2hlcmUuIFNvLCB3aHkgZGlkIHRoZSBwcmV2aW91cyBvdXRwdXQgY2xhaW0gaXQgd2Fzbid0IHJlY29nbml6ZWQ/IFRoaXMgaXMgZnJ1c3RyYXRpbmcsIGl0J3MgdXN1YWxseSBzb21ldGhpbmcgc3RyYWlnaHRmb3J3YXJkLi4uIExldCdzIHNlZSwgcGVyaGFwcyBpdCdzIG5vdCBkaXJlY3RseSBpbmNsdWRlZCBpbiB0aGUgdG9wLWxldmVsIGBLY29uZmlnYCBmaWxlLiBPciwgbWF5YmUgSSdtIG1pc3JlbWVtYmVyaW5nIHRoZSAqZXhhY3QqIG5hbWUgYW5kIHRoZXJlJ3MgYSBzbGlnaHQgdmFyaWF0aW9uIEknbSBtaXNzaW5nLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgc291cmNlLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgYSBkZWZpbml0aXZlIGFuc3dlcjsgbGV0J3MgaW52ZXN0aWdhdGUgdGhlIGBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZ2AgZmlsZS4gSG9wZWZ1bGx5LCBpdCdzIGRlZmluZWQgdGhlcmUgYW5kIHRoaXMgd2lsbCByZXNvbHZlIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxNDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMDowMDowMS44NjMwNTkwNzdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjIwMjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUENfUE9XRVJOVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZzoyOmNvbmZpZyBQUENfUE9XRVJOVlxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBQUEM2NCBcXHUwMDI2XFx1MDAyNiBQUENfQk9PSzNTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEwOjAwOjAxLjkxOTI4NjEwMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzM3ODUwNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIGBzZXQtcmVzdWx0c2AgRmFpbHVyZSoqXG5cbk9rYXksIHNvIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQgZmFpbGVkLiBUaGF0J3Mgbm90IGlkZWFsLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgc29tZXRoaW5nICpkb2VzKiBleGlzdCwgYnV0IHRoZSB0b29sIGRvZXNuJ3Qgc2VlIGl0LiBUaGlzIG1ha2VzIG1lIHRoaW5rIGl0IGNvdWxkIGJlIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHByb2JsZW0uIFBlcmhhcHMgdGhlIHRvb2wgZGVmYXVsdHMgdG8gYW4geDg2IGNvbmZpZ3VyYXRpb24sIGFuZCBpdCdzIG5vdCBmaW5kaW5nIHRoZSBQb3dlclBDIGNvbmZpZ3MgSSBuZWVkP1xuXG5CdXQgdGhlbiB0aGUgZXJyb3IgbWVzc2FnZSB0aHJvd3MgYSB3cmVuY2ggaW50byB0aGF0IHRoZW9yeSwgY2xhaW1pbmcgdGhlIGNvbmZpZ3VyYXRpb25zIFwiZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZVwiLiBPa2F5LCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgY2xhcmlmeSB3aGV0aGVyIEkgbmVlZCB0byB1c2UgYEtWTWAgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIExldCdzIG1ha2Ugc3VyZSBgS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgdGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1MDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTA6MDA6MDcuNjU3MTM5MTEyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDEyODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Mzg9Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMDowMDowNy43MTEyNzI2MDdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU0Mjc0NjU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcm91Ymxlc2hvb3RpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyB0b29sIGlzIGZhaWxpbmcgdG8gZmluZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IG1pZ2h0IGJlIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBtYWtlIGxpc3RuZXdjb25maWdgIG9yIGFub3RoZXIgc2NyaXB0IHRoYXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGxpa2UgYEFSQ0g9eDg2YC4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIGl0J3Mgbm8gd29uZGVyIEknbSBub3Qgc2VlaW5nIFBvd2VyUEMgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgdG9vbCBpcyBhcmNoaXRlY3R1cmUtYWdub3N0aWMgb3IgdGhhdCBJJ20gcHJvdmlkaW5nIGl0IHdpdGggdGhlIGNvcnJlY3QgY29udGV4dC5cblxuUGVyaGFwcyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8ganVzdCBvbWl0IGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlncyBpZiB0aGUgdG9vbCBpbmhlcmVudGx5IHJlamVjdHMgdGhlbS4gTWF5YmUgYSBtb3JlIGVsZWdhbnQgc29sdXRpb24gaXMgdG8gcHJvdmlkZSBvbmx5IHRoZSBiYXJlIG1pbmltdW0sIHN1Y2ggYXMgYEtWTWAgd2hpY2ggaG9wZWZ1bGx5IGlzIGFyY2gtYWdub3N0aWMuXG5cbldhaXQgYSBzZWNvbmTigKYgdGhlIGVycm9yIG1lc3NhZ2UgYWN0dWFsbHkgc2F5cyBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlLlwiIFRoYXQncyBhIGRpZmZlcmVudCBwcm9ibGVtIGFsdG9nZXRoZXIhIEkgbmVlZCB0byB0cnkgc3VwcGx5aW5nIGl0IHdpdGggYEtWTWAgYW5kIHNlZSBpZiB0aGF0IHJlc29sdmVzIHRoZSBpc3N1ZSBkaXJlY3RseS4gTGV0J3Mgc2VlIGlmIHRoYXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTM1LCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMDowMDoxNS4yNTQwMjI0MjJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk1MTY4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bXBwY19nZXRfY29tcGF0X2NhcHNcIixcbiAgICBcImt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX2dldF9jb21wYXRfY2Fwc1wiLFxuICAgIFwia3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIFRoZSBpb2N0bCBpbXBsZW1lbnRhdGlvbiBpbnZvbHZlcyBjb3B5aW5nIGRhdGEgZnJvbS90byB1c2Vyc3BhY2UsIGNoZWNraW5nIHNpemVzLCBhbmQgY2FsbGluZyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgdG8gcXVlcnkgdGhlIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYywgd2hpY2ggY2FuIGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHBzZXJpZXMgbWFjaGluZSkuIFRoZXJlZm9yZSwgaXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr7b5[0].run-triage(0) Phase: Succeeded StartedAt: 2026-07-01 09:51:49 +0000 UTC FinishedAt: 2026-07-01 10:00:17 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "", "targets": [ { "base": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "" }, "patched": { "arch": "amd64", "tree_name": "drm-next", "tree_url": "https://gitlab.freedesktop.org/drm/kernel.git", "commit_hash": "dc59e4fea9d83f03bad6bddf3fa2e52491777482", "config_name": "upstream-apparmor-kasan.config", "enable_configs": [ "KVM" ], "series_id": "0c95dfb0-3e16-4664-9b42-03b16d5b98cc" }, "track": "KASAN", "fuzz": { "focus": [ "kvm" ], "focus_symbols": [ "kvmppc_get_compat_caps", "kvmppc_map_compat_capabilities" ], "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+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+Mm08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OywKICAgICYjMzQ7a3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBhYWY5YzE4OTdlODY5Yzk3OWMyNWZhMzg3YmMzYmJhM2M1YzYyNjNkXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIFdlZCBKdWwgMSAwOTo1ODowMCAyMDI2ICYjNDM7MDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZThkLi40MzgxMGM0NTEzMTdmYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuJiM0MzsmIzQzOyYjNDM7IGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtNjU2Niw2ICYjNDM7NjU2Niw4NSBAQCBLVk1fUzM5MF9LRVlPUF9TU0tFXG4gICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleVxuICAgc3BlY2lmaWVkIGluIGBga2V5YGAsIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUgaW4gYGBrZXlgYC5cbiBcbiYjNDM7NC4xNDUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNcbiYjNDM7LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbiYjNDM7OkNhcGFiaWxpdHk6IEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTXG4mIzQzOzpBcmNoaXRlY3R1cmVzOiBwb3dlcnBjXG4mIzQzOzpUeXBlOiB2bSBpb2N0bFxuJiM0Mzs6UGFyYW1ldGVyczogc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKG91dClcbiYjNDM7OlJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZVxuJiM0MztcbiYjNDM7RXJyb3JzIGluY2x1ZGU6XG4mIzQzO1xuJiM0MzsgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuJiM0MzsgIEVGQVVMVCAgIGlmIGBgc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHNgYCBjYW5ub3QgYmUgcmVhZCBmcm9tIG9yXG4mIzQzOyAgICAgICAgICAgd3JpdHRlbiB0byB1c2Vyc3BhY2VcbiYjNDM7ICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuXG4mIzQzOyAgICAgICAgICAgYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgLCBpZiB0aGUgYGBmbGFnc2BgIGZpZWxkXG4mIzQzOyAgICAgICAgICAgaXMgbm9uLXplcm8sIG9yIGlmIHRoZSBiYWNrZW5kIGZhaWxzIHRvIHJldHJpZXZlIG9yIG1hcFxuJiM0MzsgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllc1xuJiM0MzsgIEUyQklHICAgIGlmIGBgc2l6ZWBgIGlzIGxhcmdlciB0aGFuIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemVcbiYjNDM7ICAgICAgICAgICAobmV3IHVzZXJzcGFjZSBvbiBvbGQga2VybmVsKTsgdGhlIGtlcm5lbCB3cml0ZXMgYmFjayBpdHNcbiYjNDM7ICAgICAgICAgICBvd24gc3RydWN0IHNpemUgaW50byB0aGUgYGBzaXplYGAgZmllbGQgc28gdXNlcnNwYWNlIGNhblxuJiM0MzsgICAgICAgICAgIHJldHJ5IHdpdGggdGhlIGNvcnJlY3Qgc2l6ZVxuJiM0MzsgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYFxuJiM0MzsgICAgICAgICAgIG9wZXJhdGlvbiAoZS5nLiwgb24gbm9uLXBzZXJpZXMgcGxhdGZvcm1zIG9yIHdoZW4gdGhlXG4mIzQzOyAgICAgICAgICAgcmVxdWlyZWQgS1ZNIG9wZXJhdGlvbnMgYXJlIG5vdCBhdmFpbGFibGUpXG4mIzQzOyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4mIzQzO1xuJiM0MztJQk0gUE9XRVIgc3lzdGVtIHNlcnZlci1iYXNlZCBwcm9jZXNzb3JzIHByb3ZpZGUgYSBjb21wYXRpYmlsaXR5IG1vZGUgZmVhdHVyZVxuJiM0Mzt3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXJcbiYjNDM7Z2VuZXJhdGlvbnMgc3VjaCBhcyAoTi0xKSBhbmQgKE4tMikuXG4mIzQzO1xuJiM0MztUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2Rlc1xuJiM0MztzdXBwb3J0ZWQgYnkgdGhlIGN1cnJlbnQgaG9zdCBwcm9jZXNzb3IgZm9yIGJvb3RpbmcgdGhlIG5lc3RlZCBLVk0gZ3Vlc3RzIG9uXG4mIzQzO0tWTSBvbiBQb3dlck5WIChuZXN0ZWQgQVBJIHYxKSBhbmQgS1ZNIG9uIFBvd2VyVk0gKG5lc3RlZCBBUEkgdjIpIHBsYXRmb3Jtcy5cbiYjNDM7XG4mIzQzOzo6XG4mIzQzO1xuJiM0MzsgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbiYjNDM7XHRfX3U2NFx0c2l6ZTtcdFx0XHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXG4mIzQzO1x0X191NjRcdGZsYWdzO1x0XHRcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi9cbiYjNDM7XHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbiYjNDM7ICB9O1xuJiM0MztcbiYjNDM7QmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xuJiM0MztgYHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCBhbmQgemVybyB0aGUgYGBmbGFnc2BgIGZpZWxkLlxuJiM0MztUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudFxuJiM0Mzt1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxuJiM0MztmaWVsZCBhdmFpbGFibGUgZm9yIGZ1dHVyZSB1c2Ugd2l0aG91dCBBQkkgYW1iaWd1aXR5LlxuJiM0MztcbiYjNDM7VGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXG4mIzQzO3RvIHN1cHBvcnQgZXh0ZW5zaWJsZSB2ZXJzaW9uaW5nOiBpZiB1c2Vyc3BhY2UgcGFzc2VzIGEgc3RydWN0IHNtYWxsZXJcbiYjNDM7dGhhbiB0aGUgY3VycmVudCBrZXJuZWwgdmVyc2lvbiAoYGBzaXplIFx1MDAzZT0gS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCksXG4mIzQzO3RoZSBrZXJuZWwgemVyby1wYWRzIHVua25vd24gdHJhaWxpbmcgZmllbGRzLiBJZiB1c2Vyc3BhY2UgcGFzc2VzIGEgbGFyZ2VyXG4mIzQzO3N0cnVjdCAoYGBzaXplIFx1MDAzZSBzaXplb2Yoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMpYGApLCB0aGUga2VybmVsIHdyaXRlc1xuJiM0MztiYWNrIGl0cyBvd24gc3RydWN0IHNpemUgaW50byB0aGUgYGBzaXplYGAgZmllbGQgYW5kIHJldHVybnMgYGAtRTJCSUdgYCxcbiYjNDM7YWxsb3dpbmcgdXNlcnNwYWNlIHRvIGRpc2NvdmVyIHRoZSBrZXJuZWwmIzM5O3Mgc3RydWN0IHNpemUgYW5kIHJldHJ5LlxuJiM0MztgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZVxuJiM0MztzaXplIG9mIHRoZSBpbml0aWFsIHN0cnVjdCB2ZXJzaW9uLlxuJiM0MztcbiYjNDM7VGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5XG4mIzQzO21vZGVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdC4gVGhlIGZvbGxvd2luZyBiaXRzIGluZGljYXRlIHN1cHBvcnQgZm9yIHNwZWNpZmljXG4mIzQzO3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJiMzOTtzIE1TQi0wIGNvbnZlbnRpb24gd2hlcmUgYml0IDAgaXMgdGhlIG1vc3RcbiYjNDM7c2lnbmlmaWNhbnQgYml0KTpcbiYjNDM7XG4mIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5YGAgIChiaXQgMSkgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyOSBwcm9jZXNzb3IgbW9kZVxuJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlXG4mIzQzOy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMWBgIChiaXQgMykgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTEgcHJvY2Vzc29yIG1vZGVcbiYjNDM7XG4mIzQzOy4uIG5vdGU6OlxuJiM0MztcbiYjNDM7ICAgVGhlIGJpdCBudW1iZXJpbmcgYWJvdmUgdXNlcyBJQk0mIzM5O3MgTVNCLTAgY29udmVudGlvbiAoYml0IDAgaXMgdGhlIG1vc3RcbiYjNDM7ICAgc2lnbmlmaWNhbnQgYml0KS4gSW4gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgdGhlc2UgYXJlIGRlZmluZWQgYXM6XG4mIzQzO1xuJiM0MzsgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYyKWBgXG4mIzQzOyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjEpYGBcbiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MClgYFxuJiM0MztcbiYjNDM7ICAgVXNlcnNwYWNlIHNob3VsZCB1c2UgdGhlIGRlZmluZWQgY29uc3RhbnRzIGZyb20gYGBcdTAwM2NsaW51eC9rdm0uaFx1MDAzZWBgIHJhdGhlclxuJiM0MzsgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy5cbiYjNDM7XG4gLi4gX2t2bV9ydW46XG4gXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbmluZGV4IDA5NTNmMmRhYTQ2NjBmLi4xNjllYTZhN2ZiYWQ0NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbkBAIC0zMTksNiAmIzQzOzMxOSw3IEBAIHN0cnVjdCBrdm1wcGNfb3BzIHtcbiBcdGJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTtcbiBcdGludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pO1xuIFx0aW50ICgqY3JlYXRlX3ZjcHVfZGVidWdmcykoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3QgZGVudHJ5ICpkZWJ1Z2ZzX2RlbnRyeSk7XG4mIzQzO1x0aW50ICgqZ2V0X2NvbXBhdF9jYXBzKShzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKTtcbiB9O1xuIFxuIGV4dGVybiBzdHJ1Y3Qga3ZtcHBjX29wcyAqa3ZtcHBjX2h2X29wcztcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5pbmRleCAwNzdjNTQzN2Y1MjE5Yi4uOTEzYTY0YjkwMWEzZDcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbkBAIC00MzcsNiAmIzQzOzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7XG4gXHRfX3U2NFx0YmVoYXZpb3VyX21hc2s7XHRcdC8qIHZhbGlkIGJpdHMgaW4gYmVoYXZpb3VyICovXG4gfTtcbiBcbiYjNDM7LyogRm9yIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTICovXG4mIzQzO3N0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbiYjNDM7XHRfX3U2NFx0c2l6ZTtcdFx0XHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXG4mIzQzO1x0X191NjRcdGZsYWdzO1x0XHRcdC8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovXG4mIzQzO1x0X191NjRcdGNvbXBhdF9jYXBhYmlsaXRpZXM7XHQvKiBDYXBhYmlsaXRpZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0ICovXG4mIzQzO307XG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBcdDI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovXG4mIzQzO1xuJiM0MzsvKlxuJiM0MzsgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy5cbiYjNDM7ICogVGhlc2UgYml0cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBtb2RlcyBhcmUgc3VwcG9ydGVkLlxuJiM0MzsgKi9cbiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5XHQoMVVMTCBcdTAwM2NcdTAwM2MgNjIpXG4mIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlcbiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYwKVxuJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0tcdFx0KEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjkgfCBcXFxuJiM0MztcdFx0XHRcdFx0IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXFxcbiYjNDM7XHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMSlcbiAvKlxuICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay5cbiAgKiBUaGVzZSBhcmUgaWRlbnRpY2FsIHRvIHRoZSB2YWx1ZXMgdXNlZCBieSBIX0dFVF9DUFVfQ0hBUkFDVEVSSVNUSUNTLlxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5pbmRleCA2MWRiZWVhMzE3ZjNiNy4uNzBkY2QzNzBmZDlhYzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5AQCAtNjUxMCw2ICYjNDM7NjUxMCw2MyBAQCBzdGF0aWMgYm9vbCBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSh2b2lkKVxuIFx0cmV0dXJuIHRydWU7XG4gfVxuIFxuJiM0MztzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjb25zdCBfX2JlMzIgY3B1X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxuJiM0Mzt7XG4mIzQzO1x0c3dpdGNoIChjcHVfdmVyc2lvbikge1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxuJiM0MztcdFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMTtcbiYjNDM7XHRcdGZhbGx0aHJvdWdoO1xuJiM0MztcdGNhc2UgUFZSX0FSQ0hfMzE6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwO1xuJiM0MztcdFx0ZmFsbHRocm91Z2g7XG4mIzQzO1x0Y2FzZSBQVlJfQVJDSF8zMDA6XG4mIzQzO1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XG4mIzQzO1x0XHRicmVhaztcbiYjNDM7XHRkZWZhdWx0OlxuJiM0MztcdFx0cmV0dXJuIC1FSU5WQUw7XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRyZXR1cm4gMDtcbiYjNDM7fVxuJiM0MztcbiYjNDM7c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuJiM0MztcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcbiYjNDM7XHRjb25zdCBfX2JlMzIgKnByb3AgPSBOVUxMO1xuJiM0MztcdGxvbmcgcmMgPSAtRUlOVkFMO1xuJiM0MztcdHUzMiBjcHVfdmVyc2lvbjtcbiYjNDM7XG4mIzQzO1x0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuJiM0MztcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbiYjNDM7XHRcdFx0V0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTtcbiYjNDM7XHRcdFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcbiYjNDM7XHRcdFx0cmMgPSAwO1xuJiM0MztcdFx0fSBlbHNlIHtcbiYjNDM7XHRcdFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcJiMzNDtjcHVcJiMzNDspIHtcbiYjNDM7XHRcdFx0XHRwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBcJiMzNDtjcHUtdmVyc2lvblwmIzM0OywgTlVMTCk7XG4mIzQzO1x0XHRcdFx0aWYgKHByb3ApIHtcbiYjNDM7XHRcdFx0XHRcdGNwdV92ZXJzaW9uID0gYmUzMl90b19jcHVwKHByb3ApO1xuJiM0MztcdFx0XHRcdFx0b2Zfbm9kZV9wdXQobnApO1xuJiM0MztcdFx0XHRcdFx0YnJlYWs7XG4mIzQzO1x0XHRcdFx0fVxuJiM0MztcdFx0XHR9XG4mIzQzO1x0XHRcdGlmICghcHJvcClcbiYjNDM7XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbiYjNDM7XHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG4mIzQzO1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4mIzQzO1x0XHR9XG4mIzQzO1x0fVxuJiM0MztcbiYjNDM7XHRpZiAocmMgXHUwMDNjIDApXG4mIzQzO1x0XHRyZXR1cm4gcmM7XG4mIzQzO1xuJiM0MztcdGhvc3RfY2Fwcy1cdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFx1MDAyNiBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLO1xuJiM0MztcbiYjNDM7XHRyZXR1cm4gcmM7XG4mIzQzO31cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG4gXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXG4gXHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXG5AQCAtNjU1Miw2ICYjNDM7NjYwOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcbiBcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcbiBcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuJiM0MztcdC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzLFxuIH07XG4gXG4gc3RhdGljIGludCBrdm1faW5pdF9zdWJjb3JlX2JpdG1hcCh2b2lkKVxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbmluZGV4IDAwMzAyMzk5ZmMzN2I0Li44ZDY2MzJjNjRjYTVmOSAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuQEAgLTY5Nyw2ICYjNDM7Njk3LDEzIEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4gXHRcdFx0fVxuIFx0XHR9XG4gXHRcdGJyZWFrO1xuJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcbiYjNDM7XHRjYXNlIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTOlxuJiM0MztcdFx0ciA9IDA7XG4mIzQzO1x0XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxuJiM0MztcdFx0XHRyID0gMTtcbiYjNDM7XHRcdGJyZWFrO1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cbiBcdGRlZmF1bHQ6XG4gXHRcdHIgPSAwO1xuIFx0XHRicmVhaztcbkBAIC0yNDYzLDYgJiM0MzsyNDcwLDcwIEBAIGludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcbiBcdFx0ciA9IGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlc3ZtX29mZihrdm0pO1xuIFx0XHRicmVhaztcbiBcdH1cbiYjNDM7XHRjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7XG4mIzQzO1x0XHRzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtcbiYjNDM7XHRcdHU2NCB1c2l6ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKlxuJiM0MztcdFx0ICogUmVhZCB0aGUgc2l6ZSBmaWVsZCBmaXJzdCB0byBkcml2ZSBjb3B5X3N0cnVjdF9mcm9tX3VzZXIuXG4mIzQzO1x0XHQgKiBzaXplIG11c3QgYmUgdGhlIGZpcnN0IGZpZWxkIG9mIHRoZSBzdHJ1Y3QuXG4mIzQzO1x0XHQgKi9cbiYjNDM7XHRcdHIgPSAtRUZBVUxUO1xuJiM0MztcdFx0aWYgKGdldF91c2VyKHVzaXplLCAoX191NjQgX191c2VyICopYXJncCkpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBFbmZvcmNlIGEgbWluaW11bTogcmVqZWN0IGJ1ZmZlcnMgc21hbGxlciB0aGFuIHRoZSBpbml0aWFsXG4mIzQzO1x0XHQgKiBzdHJ1Y3QgdmVyc2lvbiAoVkVSMCkuIFRoaXMgYWxsb3dzIG9sZCB1c2Vyc3BhY2UgY29tcGlsZWRcbiYjNDM7XHRcdCAqIGFnYWluc3QgdGhlIG9yaWdpbmFsIHN0cnVjdCB0byBzdGlsbCB3b3JrIG9uIGEgbmV3ZXIga2VybmVsXG4mIzQzO1x0XHQgKiB0aGF0IGhhcyBncm93biB0aGUgc3RydWN0IHdpdGggYXBwZW5kZWQgZmllbGRzLlxuJiM0MztcdFx0ICovXG4mIzQzO1x0XHRyID0gLUVJTlZBTDtcbiYjNDM7XHRcdGlmICh1c2l6ZSBcdTAwM2MgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjApXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBOZXcgdXNlcnNwYWNlIHdpdGggYSBsYXJnZXIgc3RydWN0IGNhbGxlZCBhbiBvbGRlciBrZXJuZWwuXG4mIzQzO1x0XHQgKiBXcml0ZSBiYWNrIGtzaXplIGluIGhvc3RfY2Fwcy5zaXplIHNvIHVzZXJzcGFjZSBrbm93cyB3aGljaFxuJiM0MztcdFx0ICogb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsIHRoZW4gZmFpbCB3aXRoIC1FMkJJRy5cbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0aWYgKHVzaXplIFx1MDAzZSBzaXplb2YoaG9zdF9jYXBzKSkge1xuJiM0MztcdFx0XHRob3N0X2NhcHMuc2l6ZSA9IHNpemVvZihob3N0X2NhcHMpO1xuJiM0MztcdFx0XHRyID0gLUVGQVVMVDtcbiYjNDM7XHRcdFx0aWYgKHB1dF91c2VyKGhvc3RfY2Fwcy5zaXplLCAoX191NjQgX191c2VyICopYXJncCkpXG4mIzQzO1x0XHRcdFx0Z290byBvdXQ7XG4mIzQzO1x0XHRcdHIgPSAtRTJCSUc7XG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcdFx0fVxuJiM0MztcbiYjNDM7XHRcdC8qXG4mIzQzO1x0XHQgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OlxuJiM0MztcdFx0ICogICB1c2l6ZSA9PSBrc2l6ZTogdmVyYmF0aW0gY29weVxuJiM0MztcdFx0ICogICB1c2l6ZSBcdTAwM2MgIGtzaXplOiB6ZXJvLXBhZCB0cmFpbGluZyAob2xkIHVzZXJzcGFjZSwgbmV3IGtlcm5lbClcbiYjNDM7XHRcdCAqL1xuJiM0MztcdFx0ciA9IGNvcHlfc3RydWN0X2Zyb21fdXNlcihcdTAwMjZob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLFxuJiM0MztcdFx0XHRcdFx0ICBhcmdwLCB1c2l6ZSk7XG4mIzQzO1x0XHRpZiAocilcbiYjNDM7XHRcdFx0Z290byBvdXQ7XG4mIzQzO1xuJiM0MztcdFx0LyogUmVzZXJ2ZWQgZmllbGRzIG11c3QgYmUgemVybyAqL1xuJiM0MztcdFx0ciA9IC1FSU5WQUw7XG4mIzQzO1x0XHRpZiAoaG9zdF9jYXBzLmZsYWdzKVxuJiM0MztcdFx0XHRnb3RvIG91dDtcbiYjNDM7XG4mIzQzO1x0XHRyID0gLUVOT1RUWTtcbiYjNDM7XHRcdGlmICgha3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpO1xuJiM0MztcdFx0aWYgKHIpXG4mIzQzO1x0XHRcdGdvdG8gb3V0O1xuJiM0MztcbiYjNDM7XHRcdGhvc3RfY2Fwcy5zaXplID0gc2l6ZW9mKGhvc3RfY2Fwcyk7XG4mIzQzO1x0XHRyID0gY29weV9zdHJ1Y3RfdG9fdXNlcihhcmdwLCB1c2l6ZSwgXHUwMDI2aG9zdF9jYXBzLFxuJiM0MztcdFx0XHRcdFx0c2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpO1xuJiM0MztcdFx0YnJlYWs7XG4mIzQzO1x0fVxuIFx0ZGVmYXVsdDoge1xuIFx0XHRzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLVx1MDAzZXByaXZhdGVfZGF0YTtcbiBcdFx0ciA9IGt2bS1cdTAwM2VhcmNoLmt2bV9vcHMtXHUwMDNlYXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTtcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbmluZGV4IDQxOTAxMTA5N2ZhOGUyLi4xY2Y5YTk1OTY2OWU4ZCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5AQCAtOTk3LDYgJiM0Mzs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbiYjNDM7I2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTBcbiBcbiBzdHJ1Y3Qga3ZtX2lycV9yb3V0aW5nX2lycWNoaXAge1xuIFx0X191MzIgaXJxY2hpcDtcbkBAIC0xMzUwLDYgJiM0MzsxMzUxLDkgQEAgc3RydWN0IGt2bV9zMzkwX2tleW9wIHtcbiAjZGVmaW5lIEtWTV9HRVRfREVWSUNFX0FUVFJcdCAgX0lPVyhLVk1JTywgIDB4ZTIsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXG4gI2RlZmluZSBLVk1fSEFTX0RFVklDRV9BVFRSXHQgIF9JT1coS1ZNSU8sICAweGUzLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyKVxuIFxuJiM0MzsvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqL1xuJiM0MzsjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXHRfSU8oS1ZNSU8sICAweGU0KVxuJiM0MztcbiAvKlxuICAqIGlvY3RscyBmb3IgdmNwdSBmZHNcbiAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4ybTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogWwogICAgJiMzNDtLVk0mIzM0OwogIF0sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogWwogICAgJiMzNDtrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzJiMzNDssCiAgICAmIzM0O2t2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyYjMzQ7CiAgXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGltcGxlbWVudGF0aW9uIGludm9sdmVzIGNvcHlpbmcgZGF0YSBmcm9tL3RvIHVzZXJzcGFjZSwgY2hlY2tpbmcgc2l6ZXMsIGFuZCBjYWxsaW5nIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUga2VybmVsIGxvZ2ljLCB3aGljaCBjYW4gYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAocHNlcmllcyBtYWNoaW5lKS4gVGhlcmVmb3JlLCBpdCBzaG91bGQgYmUgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IHRydWUKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS4KCklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2gKdG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuCgpXaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzoKMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy4KICAgQXZvaWQgbGlzdGluZyBnZW5lcmljIGhvdC1wYXRoIGZ1bmN0aW9ucyB0byBwcmV2ZW50IHNrZXdlZCB0ZXN0IGRpc3RyaWJ1dGlvbnMuCjIuIElkZW50aWZ5IGFueSBzcGVjaWZpYyBDT05GSUdfIG9wdGlvbnMgcmVxdWlyZWQgdG8gcHJvcGVybHkgdGVzdCB0aGlzIG5ldy9tb2RpZmllZCBmZWF0dXJlLgogICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuCiAgIERvIG5vdCBsaXN0IHRvbyBnZW5lcmljIGNvbmZpZ3MgKHdlIGFscmVhZHkgaGF2ZSB0aGVtIGVuYWJsZWQpLiBPbmx5IGxpc3QgdGhvc2UgdGhhdAogICBzcGVjaWZpY2FsbHkgY292ZXIgdGhlIG1vZGlmaWVkIGNvZGUuIExpc3QgdGhlbSBpbiB0aGUgRW5hYmxlQ29uZmlncyBvdXRwdXQgYXJyYXksCiAgIGFuZCBETyBOT1QgYWRkIGEgJiMzOTtDT05GSUdfJiMzOTsgcHJlZml4IChlLmcuLCByZXR1cm4gJiMzNDtORVRfSVBWNCYjMzQ7IGluc3RlYWQgb2YgJiMzNDtDT05GSUdfTkVUX0lQVjQmIzM0OykuClByZWZlciBjYWxsaW5nIHNldmVyYWwgdG9vbHMgYXQgdGhlIHNhbWUgdGltZSB0byBzYXZlIHJvdW5kLXRyaXBzLgoKClVzZSBzZXQtcmVzdWx0cyB0b29sIHRvIHByb3ZpZGUgcmVzdWx0cyBvZiB0aGUgYW5hbHlzaXMuCkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LgpJZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UHJvbXB0OjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Rm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6CmNvbW1pdCBhYWY5YzE4OTdlODY5Yzk3OWMyNWZhMzg3YmMzYmJhM2M1YzYyNjNkCkF1dGhvcjogc3l6LWNsdXN0ZXIgJmx0O3RyaWFnZUBzeXprYWxsZXIuY29tJmd0OwpEYXRlOiAgIFdlZCBKdWwgMSAwOTo1ODowMCAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAppbmRleCBhNWY5ZWU5MmY0M2U4ZC4uNDM4MTBjNDUxMzE3ZmIgMTAwNjQ0Ci0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdAomIzQzOyYjNDM7JiM0MzsgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QKQEAgLTY1NjYsNiAmIzQzOzY1NjYsODUgQEAgS1ZNX1MzOTBfS0VZT1BfU1NLRQogICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleQogICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLgogCiYjNDM7NC4xNDUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMKJiM0MzstLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQomIzQzOzpDYXBhYmlsaXR5OiBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUwomIzQzOzpBcmNoaXRlY3R1cmVzOiBwb3dlcnBjCiYjNDM7OlR5cGU6IHZtIGlvY3RsCiYjNDM7OlBhcmFtZXRlcnM6IHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIChvdXQpCiYjNDM7OlJldHVybnM6IDAgb24gc3VjY2VzcywgbmVnYXRpdmUgdmFsdWUgb24gZmFpbHVyZQomIzQzOwomIzQzO0Vycm9ycyBpbmNsdWRlOgomIzQzOwomIzQzOyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7ICBFRkFVTFQgICBpZiBgYHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzYGAgY2Fubm90IGJlIHJlYWQgZnJvbSBvcgomIzQzOyAgICAgICAgICAgd3JpdHRlbiB0byB1c2Vyc3BhY2UKJiM0MzsgIEVJTlZBTCAgIGlmIHRoZSBgYHNpemVgYCBmaWVsZCBpcyBzbWFsbGVyIHRoYW4KJiM0MzsgICAgICAgICAgIGBgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCwgaWYgdGhlIGBgZmxhZ3NgYCBmaWVsZAomIzQzOyAgICAgICAgICAgaXMgbm9uLXplcm8sIG9yIGlmIHRoZSBiYWNrZW5kIGZhaWxzIHRvIHJldHJpZXZlIG9yIG1hcAomIzQzOyAgICAgICAgICAgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzCiYjNDM7ICBFMkJJRyAgICBpZiBgYHNpemVgYCBpcyBsYXJnZXIgdGhhbiB0aGUga2VybmVsJiMzOTtzIHN0cnVjdCBzaXplCiYjNDM7ICAgICAgICAgICAobmV3IHVzZXJzcGFjZSBvbiBvbGQga2VybmVsKTsgdGhlIGtlcm5lbCB3cml0ZXMgYmFjayBpdHMKJiM0MzsgICAgICAgICAgIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuCiYjNDM7ICAgICAgICAgICByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemUKJiM0MzsgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYAomIzQzOyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tcHNlcmllcyBwbGF0Zm9ybXMgb3Igd2hlbiB0aGUKJiM0MzsgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKQomIzQzOyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CiYjNDM7CiYjNDM7SUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmUKJiM0Mzt3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXIKJiM0MztnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS4KJiM0MzsKJiM0MztUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2RlcwomIzQzO3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb24KJiM0MztLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuCiYjNDM7CiYjNDM7OjoKJiM0MzsKJiM0MzsgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHsKJiM0MzsJX191NjQJc2l6ZTsJCQkvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovCiYjNDM7CV9fdTY0CWZsYWdzOwkJCS8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlLCBtdXN0IGJlIDAgKi8KJiM0MzsJX191NjQJY29tcGF0X2NhcGFiaWxpdGllczsJLyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqLwomIzQzOyAgfTsKJiM0MzsKJiM0MztCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvCiYjNDM7YGBzaXplb2Yoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMpYGAgYW5kIHplcm8gdGhlIGBgZmxhZ3NgYCBmaWVsZC4KJiM0MztUaGUga2VybmVsIHJlamVjdHMgbm9uLXplcm8gYGBmbGFnc2BgIHdpdGggYGAtRUlOVkFMYGAgdG8gcHJldmVudAomIzQzO3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlCiYjNDM7ZmllbGQgYXZhaWxhYmxlIGZvciBmdXR1cmUgdXNlIHdpdGhvdXQgQUJJIGFtYmlndWl0eS4KJiM0MzsKJiM0MztUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGAKJiM0Mzt0byBzdXBwb3J0IGV4dGVuc2libGUgdmVyc2lvbmluZzogaWYgdXNlcnNwYWNlIHBhc3NlcyBhIHN0cnVjdCBzbWFsbGVyCiYjNDM7dGhhbiB0aGUgY3VycmVudCBrZXJuZWwgdmVyc2lvbiAoYGBzaXplICZndDs9IEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGApLAomIzQzO3RoZSBrZXJuZWwgemVyby1wYWRzIHVua25vd24gdHJhaWxpbmcgZmllbGRzLiBJZiB1c2Vyc3BhY2UgcGFzc2VzIGEgbGFyZ2VyCiYjNDM7c3RydWN0IChgYHNpemUgJmd0OyBzaXplb2Yoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMpYGApLCB0aGUga2VybmVsIHdyaXRlcwomIzQzO2JhY2sgaXRzIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBhbmQgcmV0dXJucyBgYC1FMkJJR2BgLAomIzQzO2FsbG93aW5nIHVzZXJzcGFjZSB0byBkaXNjb3ZlciB0aGUga2VybmVsJiMzOTtzIHN0cnVjdCBzaXplIGFuZCByZXRyeS4KJiM0MztgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZQomIzQzO3NpemUgb2YgdGhlIGluaXRpYWwgc3RydWN0IHZlcnNpb24uCiYjNDM7CiYjNDM7VGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5CiYjNDM7bW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBob3N0LiBUaGUgZm9sbG93aW5nIGJpdHMgaW5kaWNhdGUgc3VwcG9ydCBmb3Igc3BlY2lmaWMKJiM0Mztwcm9jZXNzb3IgbW9kZXMgKHVzaW5nIElCTSYjMzk7cyBNU0ItMCBjb252ZW50aW9uIHdoZXJlIGJpdCAwIGlzIHRoZSBtb3N0CiYjNDM7c2lnbmlmaWNhbnQgYml0KToKJiM0MzsKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICAoYml0IDEpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjkgcHJvY2Vzc29yIG1vZGUKJiM0MzstIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlCiYjNDM7LSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZQomIzQzOwomIzQzOy4uIG5vdGU6OgomIzQzOwomIzQzOyAgIFRoZSBiaXQgbnVtYmVyaW5nIGFib3ZlIHVzZXMgSUJNJiMzOTtzIE1TQi0wIGNvbnZlbnRpb24gKGJpdCAwIGlzIHRoZSBtb3N0CiYjNDM7ICAgc2lnbmlmaWNhbnQgYml0KS4gSW4gdGhlIGFjdHVhbCBpbXBsZW1lbnRhdGlvbiwgdGhlc2UgYXJlIGRlZmluZWQgYXM6CiYjNDM7CiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgPSBgYCgxVUxMICZsdDsmbHQ7IDYyKWBgCiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMICZsdDsmbHQ7IDYxKWBgCiYjNDM7ICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgPSBgYCgxVUxMICZsdDsmbHQ7IDYwKWBgCiYjNDM7CiYjNDM7ICAgVXNlcnNwYWNlIHNob3VsZCB1c2UgdGhlIGRlZmluZWQgY29uc3RhbnRzIGZyb20gYGAmbHQ7bGludXgva3ZtLmgmZ3Q7YGAgcmF0aGVyCiYjNDM7ICAgdGhhbiBoYXJkY29kaW5nIGJpdCBwb3NpdGlvbnMuCiYjNDM7CiAuLiBfa3ZtX3J1bjoKIAogNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlCmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaAppbmRleCAwOTUzZjJkYWE0NjYwZi4uMTY5ZWE2YTdmYmFkNDQgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgKJiM0MzsmIzQzOyYjNDM7IGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaApAQCAtMzE5LDYgJiM0MzszMTksNyBAQCBzdHJ1Y3Qga3ZtcHBjX29wcyB7CiAJYm9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpOwogCWludCAoKmNyZWF0ZV92bV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtICprdm0pOwogCWludCAoKmNyZWF0ZV92Y3B1X2RlYnVnZnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnkpOwomIzQzOwlpbnQgKCpnZXRfY29tcGF0X2NhcHMpKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpOwogfTsKIAogZXh0ZXJuIHN0cnVjdCBrdm1wcGNfb3BzICprdm1wcGNfaHZfb3BzOwpkaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaAppbmRleCAwNzdjNTQzN2Y1MjE5Yi4uOTEzYTY0YjkwMWEzZDcgMTAwNjQ0Ci0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCiYjNDM7JiM0MzsmIzQzOyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oCkBAIC00MzcsNiAmIzQzOzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7CiAJX191NjQJYmVoYXZpb3VyX21hc2s7CQkvKiB2YWxpZCBiaXRzIGluIGJlaGF2aW91ciAqLwogfTsKIAomIzQzOy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqLwomIzQzO3N0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHsKJiM0MzsJX191NjQJc2l6ZTsJCQkvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovCiYjNDM7CV9fdTY0CWZsYWdzOwkJCS8qIFJlc2VydmVkIGZvciBmdXR1cmUgdXNlICovCiYjNDM7CV9fdTY0CWNvbXBhdF9jYXBhYmlsaXRpZXM7CS8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi8KJiM0Mzt9OwomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjAJMjQgLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi8KJiM0MzsKJiM0MzsvKgomIzQzOyAqIENhcGFiaWxpdHkgYml0cyBmb3IgY29tcGF0X2NhcGFiaWxpdGllcyBmaWVsZCBpbiBrdm1fcHBjX2NvbXBhdF9jYXBzLgomIzQzOyAqIFRoZXNlIGJpdHMgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgbW9kZXMgYXJlIHN1cHBvcnRlZC4KJiM0MzsgKi8KJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjkJKDFVTEwgJmx0OyZsdDsgNjIpCiYjNDM7I2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMAkoMVVMTCAmbHQ7Jmx0OyA2MSkKJiM0MzsjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExCSgxVUxMICZsdDsmbHQ7IDYwKQomIzQzOyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQklUTUFTSwkJKEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjkgfCBcCiYjNDM7CQkJCQkgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTAgfCBcCiYjNDM7CQkJCQkgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpCiAvKgogICogVmFsdWVzIGZvciBjaGFyYWN0ZXIgYW5kIGNoYXJhY3Rlcl9tYXNrLgogICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy4KZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCmluZGV4IDYxZGJlZWEzMTdmM2I3Li43MGRjZDM3MGZkOWFjNyAxMDA2NDQKLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jCkBAIC02NTEwLDYgJiM0Mzs2NTEwLDYzIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpCiAJcmV0dXJuIHRydWU7CiB9CiAKJiM0MztzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjb25zdCBfX2JlMzIgY3B1X3ZlcnNpb24sCiYjNDM7CQkJCSAgICAgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcykKJiM0Mzt7CiYjNDM7CXN3aXRjaCAoY3B1X3ZlcnNpb24pIHsKJiM0MzsJY2FzZSBQVlJfQVJDSF8zMV9QMTE6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgUFZSX0FSQ0hfMzE6CiYjNDM7CQkqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwOwomIzQzOwkJZmFsbHRocm91Z2g7CiYjNDM7CWNhc2UgUFZSX0FSQ0hfMzAwOgomIzQzOwkJKmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5OwomIzQzOwkJYnJlYWs7CiYjNDM7CWRlZmF1bHQ6CiYjNDM7CQlyZXR1cm4gLUVJTlZBTDsKJiM0MzsJfQomIzQzOwomIzQzOwlyZXR1cm4gMDsKJiM0Mzt9CiYjNDM7CiYjNDM7c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wOwomIzQzOwl1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllcyA9IDA7CiYjNDM7CWNvbnN0IF9fYmUzMiAqcHJvcCA9IE5VTEw7CiYjNDM7CWxvbmcgcmMgPSAtRUlOVkFMOwomIzQzOwl1MzIgY3B1X3ZlcnNpb247CiYjNDM7CiYjNDM7CWlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHsKJiM0MzsJCWlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7CiYjNDM7CQkJV0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTsKJiM0MzsJCQljYXBhYmlsaXRpZXMgPSBuZXN0ZWRfY2FwYWJpbGl0aWVzOwomIzQzOwkJCXJjID0gMDsKJiM0MzsJCX0gZWxzZSB7CiYjNDM7CQkJZm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCAmIzM0O2NwdSYjMzQ7KSB7CiYjNDM7CQkJCXByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsICYjMzQ7Y3B1LXZlcnNpb24mIzM0OywgTlVMTCk7CiYjNDM7CQkJCWlmIChwcm9wKSB7CiYjNDM7CQkJCQljcHVfdmVyc2lvbiA9IGJlMzJfdG9fY3B1cChwcm9wKTsKJiM0MzsJCQkJCW9mX25vZGVfcHV0KG5wKTsKJiM0MzsJCQkJCWJyZWFrOwomIzQzOwkJCQl9CiYjNDM7CQkJfQomIzQzOwkJCWlmICghcHJvcCkKJiM0MzsJCQkJcmV0dXJuIC1FSU5WQUw7CiYjNDM7CQkJcmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sCiYjNDM7CQkJCQkJCSAgICAmYW1wO2NhcGFiaWxpdGllcyk7CiYjNDM7CQl9CiYjNDM7CX0KJiM0MzsKJiM0MzsJaWYgKHJjICZsdDsgMCkKJiM0MzsJCXJldHVybiByYzsKJiM0MzsKJiM0MzsJaG9zdF9jYXBzLSZndDtjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzICZhbXA7IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7CiYjNDM7CiYjNDM7CXJldHVybiByYzsKJiM0Mzt9CiYjNDM7CiBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHsKIAkuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsCiAJLnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LApAQCAtNjU1Miw2ICYjNDM7NjYwOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0gewogCS5oYXNoX3YzX3Bvc3NpYmxlID0ga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUsCiAJLmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LAogCS5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LAomIzQzOwkuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2FwcywKIH07CiAKIHN0YXRpYyBpbnQga3ZtX2luaXRfc3ViY29yZV9iaXRtYXAodm9pZCkKZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMKaW5kZXggMDAzMDIzOTlmYzM3YjQuLjhkNjYzMmM2NGNhNWY5IDEwMDY0NAotLS0gYS9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwomIzQzOyYjNDM7JiM0MzsgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYwpAQCAtNjk3LDYgJiM0Mzs2OTcsMTMgQEAgaW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dCkKIAkJCX0KIAkJfQogCQlicmVhazsKJiM0MzsjaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSkKJiM0MzsJY2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzoKJiM0MzsJCXIgPSAwOwomIzQzOwkJaWYgKGt2bWh2X29uX3BzZXJpZXMoKSkKJiM0MzsJCQlyID0gMTsKJiM0MzsJCWJyZWFrOwomIzQzOyNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqLwogCWRlZmF1bHQ6CiAJCXIgPSAwOwogCQlicmVhazsKQEAgLTI0NjMsNiAmIzQzOzI0NzAsNzAgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKQogCQlyID0ga3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O3N2bV9vZmYoa3ZtKTsKIAkJYnJlYWs7CiAJfQomIzQzOwljYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7CiYjNDM7CQlzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTsKJiM0MzsJCXU2NCB1c2l6ZTsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci4KJiM0MzsJCSAqIHNpemUgbXVzdCBiZSB0aGUgZmlyc3QgZmllbGQgb2YgdGhlIHN0cnVjdC4KJiM0MzsJCSAqLwomIzQzOwkJciA9IC1FRkFVTFQ7CiYjNDM7CQlpZiAoZ2V0X3VzZXIodXNpemUsIChfX3U2NCBfX3VzZXIgKilhcmdwKSkKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCS8qCiYjNDM7CQkgKiBFbmZvcmNlIGEgbWluaW11bTogcmVqZWN0IGJ1ZmZlcnMgc21hbGxlciB0aGFuIHRoZSBpbml0aWFsCiYjNDM7CQkgKiBzdHJ1Y3QgdmVyc2lvbiAoVkVSMCkuIFRoaXMgYWxsb3dzIG9sZCB1c2Vyc3BhY2UgY29tcGlsZWQKJiM0MzsJCSAqIGFnYWluc3QgdGhlIG9yaWdpbmFsIHN0cnVjdCB0byBzdGlsbCB3b3JrIG9uIGEgbmV3ZXIga2VybmVsCiYjNDM7CQkgKiB0aGF0IGhhcyBncm93biB0aGUgc3RydWN0IHdpdGggYXBwZW5kZWQgZmllbGRzLgomIzQzOwkJICovCiYjNDM7CQlyID0gLUVJTlZBTDsKJiM0MzsJCWlmICh1c2l6ZSAmbHQ7IEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJLyoKJiM0MzsJCSAqIE5ldyB1c2Vyc3BhY2Ugd2l0aCBhIGxhcmdlciBzdHJ1Y3QgY2FsbGVkIGFuIG9sZGVyIGtlcm5lbC4KJiM0MzsJCSAqIFdyaXRlIGJhY2sga3NpemUgaW4gaG9zdF9jYXBzLnNpemUgc28gdXNlcnNwYWNlIGtub3dzIHdoaWNoCiYjNDM7CQkgKiBvbGRlciBzdHJ1Y3QgdG8gcmV0cnkgd2l0aCwgdGhlbiBmYWlsIHdpdGggLUUyQklHLgomIzQzOwkJICovCiYjNDM7CQlpZiAodXNpemUgJmd0OyBzaXplb2YoaG9zdF9jYXBzKSkgewomIzQzOwkJCWhvc3RfY2Fwcy5zaXplID0gc2l6ZW9mKGhvc3RfY2Fwcyk7CiYjNDM7CQkJciA9IC1FRkFVTFQ7CiYjNDM7CQkJaWYgKHB1dF91c2VyKGhvc3RfY2Fwcy5zaXplLCAoX191NjQgX191c2VyICopYXJncCkpCiYjNDM7CQkJCWdvdG8gb3V0OwomIzQzOwkJCXIgPSAtRTJCSUc7CiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CQl9CiYjNDM7CiYjNDM7CQkvKgomIzQzOwkJICogY29weV9zdHJ1Y3RfZnJvbV91c2VyKCkgaGFuZGxlcyBmb3J3YXJkL2JhY2t3YXJkIGNvbXBhdDoKJiM0MzsJCSAqICAgdXNpemUgPT0ga3NpemU6IHZlcmJhdGltIGNvcHkKJiM0MzsJCSAqICAgdXNpemUgJmx0OyAga3NpemU6IHplcm8tcGFkIHRyYWlsaW5nIChvbGQgdXNlcnNwYWNlLCBuZXcga2VybmVsKQomIzQzOwkJICovCiYjNDM7CQlyID0gY29weV9zdHJ1Y3RfZnJvbV91c2VyKCZhbXA7aG9zdF9jYXBzLCBzaXplb2YoaG9zdF9jYXBzKSwKJiM0MzsJCQkJCSAgYXJncCwgdXNpemUpOwomIzQzOwkJaWYgKHIpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQkvKiBSZXNlcnZlZCBmaWVsZHMgbXVzdCBiZSB6ZXJvICovCiYjNDM7CQlyID0gLUVJTlZBTDsKJiM0MzsJCWlmIChob3N0X2NhcHMuZmxhZ3MpCiYjNDM7CQkJZ290byBvdXQ7CiYjNDM7CiYjNDM7CQlyID0gLUVOT1RUWTsKJiM0MzsJCWlmICgha3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O2dldF9jb21wYXRfY2FwcykKJiM0MzsJCQlnb3RvIG91dDsKJiM0MzsKJiM0MzsJCXIgPSBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzKCZhbXA7aG9zdF9jYXBzKTsKJiM0MzsJCWlmIChyKQomIzQzOwkJCWdvdG8gb3V0OwomIzQzOwomIzQzOwkJaG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTsKJiM0MzsJCXIgPSBjb3B5X3N0cnVjdF90b191c2VyKGFyZ3AsIHVzaXplLCAmYW1wO2hvc3RfY2FwcywKJiM0MzsJCQkJCXNpemVvZihob3N0X2NhcHMpLCBOVUxMKTsKJiM0MzsJCWJyZWFrOwomIzQzOwl9CiAJZGVmYXVsdDogewogCQlzdHJ1Y3Qga3ZtICprdm0gPSBmaWxwLSZndDtwcml2YXRlX2RhdGE7CiAJCXIgPSBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7YXJjaF92bV9pb2N0bChmaWxwLCBpb2N0bCwgYXJnKTsKZGlmZiAtLWdpdCBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaCBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAppbmRleCA0MTkwMTEwOTdmYThlMi4uMWNmOWE5NTk2NjllOGQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaAomIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmgKQEAgLTk5Nyw2ICYjNDM7OTk3LDcgQEAgc3RydWN0IGt2bV9lbmFibGVfY2FwIHsKICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0NwogI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OAogI2RlZmluZSBLVk1fQ0FQX1MzOTBfSFBBR0VfMkcgMjQ5CiYjNDM7I2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTAKIAogc3RydWN0IGt2bV9pcnFfcm91dGluZ19pcnFjaGlwIHsKIAlfX3UzMiBpcnFjaGlwOwpAQCAtMTM1MCw2ICYjNDM7MTM1MSw5IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7CiAjZGVmaW5lIEtWTV9HRVRfREVWSUNFX0FUVFIJICBfSU9XKEtWTUlPLCAgMHhlMiwgc3RydWN0IGt2bV9kZXZpY2VfYXR0cikKICNkZWZpbmUgS1ZNX0hBU19ERVZJQ0VfQVRUUgkgIF9JT1coS1ZNSU8sICAweGUzLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyKQogCiYjNDM7LyogQXZhaWxhYmxlIHdpdGggS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFMgKi8KJiM0MzsjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTCV9JTyhLVk1JTywgIDB4ZTQpCiYjNDM7CiAvKgogICogaW9jdGxzIGZvciB2Y3B1IGZkcwogICovCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDYwNjIKCQkJCQkJCW91dHB1dDogMzkKCQkJCQkJCXRob3VnaHRzOiAzNDIKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBOZXcgUG93ZXJQQyBLVk0gQ29tcGF0aWJpbGl0eSBDYXBhYmlsaXRpZXMgSW9jdGwqKgoKT2theSwgc28gd2UmIzM5O3ZlIGdvdCBhIG5ldyBwYXRjaCBpbnRyb2R1Y2luZyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDLiBJdCBsb29rcyBsaWtlIHRoZSBpb2N0bCYjMzk7cyBoYW5kbGluZyBpcyBuZWF0bHkgdHVja2VkIGF3YXkgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCB3aXRoaW4gdGhlIGBrdm1fYXJjaF92bV9pb2N0bGAgZnVuY3Rpb24uIEZyb20gdGhlcmUsIGl0IGRpdmVzIGludG8gYGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHMoJmFtcDtob3N0X2NhcHMpYC4gQW5kIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCwgcmVzaWRlcyBpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGEgbmV3IGlvY3RsLCBuaWNlbHkgaW1wbGVtZW50ZWQuCgpNeSBpbml0aWFsIHRob3VnaHQgaXMsIG5hdHVyYWxseSwgJiMzNDtJcyBpdCBmdW5jdGlvbmFsPyYjMzQ7IEdpdmVuIGl0JiMzOTtzIGEgbmV3IGlvY3RsLCBpdCBzaG91bGQgYmUgcmVhY2hhYmxlIGlmIHNvbWVvbmUgaXMgdXNpbmcgS1ZNIG9uIFBvd2VyUEMsIGFzc3VtaW5nIHRoZSBjb2RlIHBhdGggaXMgY29ycmVjdGx5IHdpcmVkIHVwLiBCdXQgdGhhdCBsZWFkcyB0byB0aGUgbmV4dCBxdWVzdGlvbjogd2hhdCBhYm91dCB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHM/IENvdWxkIHdlIHJlYWNoIGl0IHRocm91Z2ggUUVNVT8gWWVzLCBLVk0gaXMgYWJzb2x1dGVseSBmdXp6YWJsZSBpbiBRRU1VLiBTeXprYWxsZXIgaXMgYSBmYW50YXN0aWMgdG9vbCBmb3IgdGhhdC4gQnV0IGRvZXMgU3l6a2FsbGVyICpzcGVjaWZpY2FsbHkqIHN1cHBvcnQgS1ZNIGZ1enppbmcgb24gUG93ZXJQQz8gSSBrbm93IGl0JiMzOTtzIHdpZGVseSB1c2VkIG9uIHg4NiwgYnV0IFBvd2VyUEMgc3VwcG9ydC4uLiB0aGF0JiMzOTtzIHRoZSBrZXkuCgpJIG5lZWQgdG8gY29uZmlybSBpZiB0aGVyZSBhcmUgYW55IHNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIHdlIG5lZWQgdG8gYmUgYXdhcmUgb2YuIFRoZSBwYXRjaCB0b3VjaGVzIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AgYW5kIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYCwgYW5kIHRoZSBpb2N0bCBpcywgb2YgY291cnNlLCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLiBJIHJlbWVtYmVyIHNlZWluZyB0aGF0IGBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAgaXMgY2hlY2tlZCBpbiBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAuIE9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AgdG8gc2VlIHdoYXQgb3RoZXIgY29uZmlncyBtaWdodCBiZSByZWxldmFudCBhbmQgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSBwaWVjZXMgaW4gcGxhY2UgZm9yIHByb3BlciBmdXp6aW5nLiBHb3R0YSBtYWtlIHN1cmUgd2UgY292ZXIgYWxsIG91ciBiYXNlcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtLVk1fQk9PSzNTX0hWX1BPU1NJQkxFJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTM4PWNvbmZpZyBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQxLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjQyOmNvbmZpZyBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXHRib29sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYyPWNvbmZpZyBLVk1fQk9PSzNTXzY0XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTY2LVx0c2VsZWN0IEtWTVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjY3Olx0c2VsZWN0IEtWTV9CT09LM1NfUFJfUE9TU0lCTEUgaWYgIUtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02OC1cdHNlbGVjdCBQUENfNjRTX0hBU0hfTU1VXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTc5PWNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgxLVx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTXzY0IFx1MDAyNlx1MDAyNiBQUENfUE9XRVJOVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjgyOlx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04My1cdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BNVVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0xMjk9Y29uZmlnIEtWTV9CT09LM1NfSFZfUDlfVElNSU5HXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMS1cdHNlbGVjdCBLVk1fQk9PSzNTX0hWX0VYSVRfVElNSU5HXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6MTMyOlx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFIFx1MDAyNlx1MDAyNiBERUJVR19GU1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMy1cdGhlbHBcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTQyPWNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDQtXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjE0NTpcdGRlcGVuZHMgb24gS1ZNX0JPT0szU19IVl9QT1NTSUJMRSBcdTAwMjZcdTAwMjYgREVCVUdfRlMgXHUwMDI2XHUwMDI2ICFLVk1fQk9PSzNTX0hWX1A5X1RJTUlOR1xuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0Ni1cdGhlbHBcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTU3PWNvbmZpZyBLVk1fQk9PSzNTX0hWX05FU1RFRF9QTVVfV09SS0FST1VORFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE1OC1cdGJvb2wgXCYjMzQ7TmVzdGVkIEwwIGhvc3Qgd29ya2Fyb3VuZCBmb3IgTDEgS1ZNIGhvc3QgUE1VIGhhbmRsaW5nIGJ1Z1wmIzM0OyBpZiBFWFBFUlRcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTk6XHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNjAtXHRkZWZhdWx0ICFFWFBFUlRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MjUxPWNvbmZpZyBLVk1fWElWRVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTMtXHRkZWZhdWx0IHlcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTQ6XHRkZXBlbmRzIG9uIEtWTV9YSUNTIFx1MDAyNlx1MDAyNiBQUENfWElWRV9OQVRJVkUgXHUwMDI2XHUwMDI2IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTUtXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZT03OD1rdm0tYm9vazNzXzY0LWJ1aWx0aW4tdG0tb2Jqcy0kKENPTkZJR19QUENfVFJBTlNBQ1RJT05BTF9NRU0pICYjNDM7PSBcXFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtODAtXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjgxOmlmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTgyLWt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgJiM0Mzs9IFxcXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUz0zNj1rdm1wcGNfaGNhbGw6XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TOjM3OiNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUy0zOC1cdGxielx0cjEwLEhTVEFURV9JTl9HVUVTVChyMTMpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUz02Nz1rdm1wcGNfaW50ZXJydXB0OlxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUzo2ODojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtNjktXHRzdGRcdHIxMCxIU1RBVEVfU0NSQVRDSDAocjEzKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM9OTI9RU5EX0ZUUl9TRUNUSU9OX0lGU0VUKENQVV9GVFJfSEFTX1BQUilcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTExNC0uTG5vX3NraXA6XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TOjExNTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTE2LSNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTUzLVx0YmVxXHQxZlxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUzoxNTQ6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTE1NS1cdC8qIEhTUlIgaW50ZXJydXB0cyBnZXQgMiBhZGRlZCB0byBpbnRlcnJ1cHQgbnVtYmVyICovXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUy0xNjYtXHRSRklfVE9fS0VSTkVMXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TOjE2NzojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTY4LTI6XHRtZnNwclx0cjksU1BSTl9IU1JSMFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTc2LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUzoxNzc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTE3OC1cbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19leHBvcnRzLmMtMTItXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19leHBvcnRzLmM6MTM6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19leHBvcnRzLmMtMTQtRVhQT1JUX1NZTUJPTF9HUEwoa3ZtcHBjX2h2X2VudHJ5X3RyYW1wb2xpbmUpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3hpY3MuYz0xNDAwPXN0YXRpYyBpbnQga3ZtcHBjX3hpY3NfY3JlYXRlKHN0cnVjdCBrdm1fZGV2aWNlICpkZXYsIHUzMiB0eXBlKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3hpY3MuYy0xNDE5LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfeGljcy5jOjE0MjA6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmMtMTQyMS1cdGlmIChjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9BUkNIXzIwNikgXHUwMDI2XHUwMDI2XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfeGljcy5jLTE0MjYtXHR9XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmM6MTQyNzojZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX3hpY3MuYy0xNDI4LVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTUwMj1pbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTU4Ni0jZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM1NfNjQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjU4NzojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTU4OC1cdGNhc2UgS1ZNX0NBUF9QUENfU01UOlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY1OC0jZW5kaWZcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjY1OTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY2MC1cdGNhc2UgS1ZNX0NBUF9QUENfRldOTUk6XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjY5LSNlbmRpZlxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6NjcwOiNpZiBkZWZpbmVkKENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFKVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjcxLVx0Y2FzZSBLVk1fQ0FQX1BQQ19TRUNVUkVfR1VFU1Q6XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjk5LVx0XHRicmVhaztcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwMDojaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwMS1cdGNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzA1LVx0XHRicmVhaztcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwNjojZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwNy1cdGRlZmF1bHQ6XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9MTEzND1zdGF0aWMgdm9pZCBrdm1wcGNfY29tcGxldGVfbW1pb19sb2FkKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xMjMwLSNlbmRpZlxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MTIzMTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTEyMzItXHRjYXNlIEtWTV9NTUlPX1JFR19ORVNURURfR1BSOlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTE4ODY9c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xOTg2LSNlbmRpZiAvKiBDT05GSUdfS1ZNX1hJVkUgKi9cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjE5ODc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xOTg4LVx0Y2FzZSBLVk1fQ0FQX1BQQ19GV05NSTpcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xOTk0LVx0XHRicmVhaztcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjE5OTU6I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0xOTk2LVx0ZGVmYXVsdDpcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz0yMTY5PWludCBrdm1fdm1faW9jdGxfZW5hYmxlX2NhcChzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjIxMi0jZW5kaWZcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjIyMTM6I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yMjE0LVx0Y2FzZSBLVk1fQ0FQX1BQQ19TRUNVUkVfR1VFU1Q6XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS90bS5TPTMxPV9HTE9CQUwoX19rdm1wcGNfc2F2ZV90bSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3RtLlMtNzQtMzpcbmFyY2gvcG93ZXJwYy9rdm0vdG0uUzo3NTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vdG0uUy03Ni1CRUdJTl9GVFJfU0VDVElPTlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk5NDkKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAzNzQKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTIG9uIFBvd2VyUEMqKgoKT2theSwgbGV0JiMzOTtzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIEkgc2VlIHRoYXQgYENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFYCBpcyB0aGUga2V5IGhlcmUsIGFuZCBpdCYjMzk7cyBzZWxlY3RlZCBieSBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgLCB3aGljaCBpbiB0dXJuIGhpbmdlcyBvbiBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIFRoYXQgbWFrZXMgc2Vuc2U7IGl0JiMzOTtzIHRoZSBQb3dlck5WIGh5cGVydmlzb3Itc3BlY2lmaWMgY2FwYWJpbGl0eSBjaGVjay4gSSBzaG91bGQgdmVyaWZ5IHRoZSBjYWxsIGNoYWluLgoKVGhlIGlvY3RsIGl0c2VsZiwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgaXMgaW1wbGVtZW50ZWQgYnkgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCByZXNpZGluZyBpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqLiBJIHRyYWNlIHRoZSBpb2N0bCBoYW5kbGluZyB0aHJvdWdoIGBrdm1fYXJjaF92bV9pb2N0bGAgd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AuIEl0IGxvb2tzIGxpa2UgaXQgZGVsZWdhdGVzIHRvIGBrdm0tJmd0O2FyY2gua3ZtX29wcy0mZ3Q7Z2V0X2NvbXBhdF9jYXBzYCwgYW5kIEkgY2FuIHNlZSBpbiBgYm9vazNzX2h2LmNgIHRoYXQgYGt2bV9vcHNfaHZgIHNldHMgYC5nZXRfY29tcGF0X2NhcHMgPSBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYC4gR29vZCwgc28gdGhlIHBhdGggaXMgY2xlYXIuIEl0ICppcyogcmVhY2hhYmxlLgoKTm93LCBhIGNyaXRpY2FsIHBvaW50OiBjYW4gdGhpcyBiZSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBJdCYjMzk7cyBlYXN5IHRvIGZvcmdldCB0aGF0IG5vdCBldmVyeXRoaW5nIGlzIHRlc3RhYmxlLiBCdXQgS1ZNIG9uIFBvd2VyUEMgKmNhbiogYmUgcnVuIGluIFFFTVUsIHNwZWNpZmljYWxseSBgcWVtdS1zeXN0ZW0tcHBjNjRgLiBUaGF0JiMzOTtzIGEgaHVnZSB3aW4uIEFuZCBpZiBTeXprYWxsZXIgc3VwcG9ydHMgYHFlbXUtc3lzdGVtLXBwYzY0YCwgdGhlbiB0aGF0IG9wZW5zIHRoZSBkb29yIGZvciBmdXp6aW5nLgoKTGV0JiMzOTtzIG5haWwgZG93biB0aGUgY29uZmlndXJhdGlvbiByZXF1aXJlbWVudHMgc28gd2UgY2FuIGJ1aWxkIGEgcHJvcGVyIHRlc3QgY2FzZS4gSSBuZWVkIGBDT05GSUdfS1ZNYCwgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCwgYW5kIGBDT05GSUdfUFBDX1BPV0VSTlZgLiBJIHNob3VsZCBjb25maXJtIHRoZSBkZXBlbmRlbmN5IHN0cnVjdHVyZSBpbiBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCB0byBiZSBhYnNvbHV0ZWx5IGNlcnRhaW4gSSBoYXZlbiYjMzk7dCBtaXNzZWQgYW55dGhpbmcsIGJ1dCBJJiMzOTttIGZlZWxpbmcgY29uZmlkZW50IGFib3V0IHRoaXMuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9CT09LM1NfNjRfSFYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NjI9Y29uZmlnIEtWTV9CT09LM1NfNjRcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNzgtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cdHRyaXN0YXRlIFwmIzM0O0tWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFwmIzM0O1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTg4CgkJCQkJCQlvdXRwdXQ6IDM4CgkJCQkJCQl0aG91Z2h0czogNTYKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEkmIzM5O20gYW4gZXhwZXJ0IGluIEtWTSBvbiBQb3dlclBDOgoKKipBbmFseXppbmcgdGhlIEtWTSBCb29rM1MgSHlwZXJ2aXNvciBDb25maWd1cmF0aW9uKioKClJpZ2h0LCBzbyBgS1ZNX0JPT0szU182NF9IVmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUsIHRoYXQmIzM5O3MgdGhlIGZvdW5kYXRpb24gd2UmIzM5O3JlIGRlYWxpbmcgd2l0aC4gTm93LCBsZXQmIzM5O3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGhvdyB0aGlzIGh5cGVydmlzb3Igd29ya3MsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBjb21wYXRpYmlsaXR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgZnVuY3Rpb24gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHdpdGhpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFRoaXMgaXMgd2hlcmUgSSYjMzk7ZCBleHBlY3QgdG8gZmluZCB0aGUgY29kZSB0aGF0IGRlZmluZXMgd2hhdCBjYXBhYmlsaXRpZXMgYXJlIGV4cG9zZWQgdG8gZ3Vlc3RzLiBVbmRlcnN0YW5kaW5nIGhvdyBjb21wYXRpYmlsaXR5IGlzIGhhbmRsZWQgYXQgdGhpcyBsZXZlbCBpcyBjcnVjaWFsIGZvciBlbnN1cmluZyBndWVzdCBPU2VzIGFuZCBhcHBsaWNhdGlvbnMgZnVuY3Rpb24gYXMgZXhwZWN0ZWQuIEkgbmVlZCB0byBzZWUgaG93IGl0IGhhbmRsZXMgZmVhdHVyZSBuZWdvdGlhdGlvbi4gVGhpcyBmdW5jdGlvbiBwcm9iYWJseSBjb250YWlucyB0aGUgbG9naWMgZm9yIHJlcG9ydGluZyB0aGUgc3VwcG9ydGVkIGluc3RydWN0aW9uIHNldCwgcmVnaXN0ZXIgYXZhaWxhYmlsaXR5LCBhbmQgb3RoZXIgaHlwZXJ2aXNvciBmZWF0dXJlcywgYnV0IEkgbmVlZCB0byBjb25maXJtIHRoaXMuIFRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjgvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MTM9c3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY29uc3QgX19iZTMyIGNwdV92ZXJzaW9uLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUzMi1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjUzMzpzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUzNC17XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTcwPXN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjYxMS1cdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NjEyOlx0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2MTMtfTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMTYwOAoJCQkJCQkJb3V0cHV0OiAzOAoJCQkJCQkJdGhvdWdodHM6IDEzNgoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNL1BQQyBDb21wYXRpYmlsaXR5IENhcGFiaWxpdGllcyoqCgpPa2F5LCBzbyBJJiMzOTt2ZSB0cmFjZWQgdGhlIGV4ZWN1dGlvbiBwYXRoIGFuZCBJJiMzOTttIGNvbmZpZGVudCB0aGF0IHRoZSBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgZnVuY3Rpb24gaXMgZGVmaW5pdGVseSBiZWluZyBjYWxsZWQsIHdoaWNoIGlzIGEga2V5IHN0YXJ0aW5nIHBvaW50LiBUaGlzIG1lYW5zIHRoZSBjb3JyZXNwb25kaW5nIGlvY3RsIGlzIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AsIHVuZGVyc3Rvb2QuIE5vdywgSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSYjMzk7bSBmb2N1c2luZyBvbiBgS1ZNX0JPT0szU182NF9IVmAsIGFzIHRoYXQmIzM5O3MgZGlyZWN0bHkgcmVsZXZhbnQgdG8gdGhlIGNvbXBhdGliaWxpdHkgY2hlY2tzLgoKQWgsIHJpZ2h0LCBidXQgSSBoYXZlIHRvIHJlbWVtYmVyIHRoZSBkZXBlbmRlbmNpZXMuIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBjb25kaXRpb25hbDsgaXQgcmVsaWVzIG9uIGJvdGggYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgIGJlaW5nIHNldC4gU28sIHRoZSBjb3JyZWN0IGFjdGlvbiBoZXJlIGlzIHRvIGFkZCBgS1ZNX0JPT0szU182NF9IVmAgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGFjdGl2YXRlIHRoaXMgcGFydGljdWxhciBzZXQgb2YgZmVhdHVyZXMuCgpOb3csIGxldCYjMzk7cyBzd2l0Y2ggZ2VhcnMgYSBiaXQgYW5kIGNoZWNrIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLiBUaGF0JiMzOTtzIHdoZXJlIHRoZSBhY3R1YWwgbWFwcGluZyBsb2dpYyBpcyBkb25lLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIG5leHQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2t2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjQ5MD1zdGF0aWMgYm9vbCBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUxMi1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjUxMzpzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjb25zdCBfX2JlMzIgY3B1X3ZlcnNpb24sXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1MTQtXHRcdFx0XHQgICAgICB1bnNpZ25lZCBsb25nICpjYXBhYmlsaXRpZXMpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTMzPXN0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU1Ni1cdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NTU3Olx0XHRcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTU4LVx0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyMzM4CgkJCQkJCQlvdXRwdXQ6IDM1CgkJCQkJCQl0aG91Z2h0czogMjMwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUG93ZXJQQyBJb2N0bCBQYXRjaCoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBwYXRjaCBhbmQgaW1tZWRpYXRlbHksIHRoZSBjb3JlIG9mIGl0IHNlZW1zIHRvIGludm9sdmUgZnVuY3Rpb25zIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AgZm9yIHRoZSBgRm9jdXNTeW1ib2xzYC4gTGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4mIzM5O3QgYW55IG90aGVyIGtleSBmdW5jdGlvbnMgaW52b2x2ZWQuIEFoLCByaWdodC4gSXQgbG9va3MgbGlrZSB0aGUgaW9jdGwgaGFuZGxpbmcgaXMgZGVsZWdhdGVkIHRvIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYC4gSG93ZXZlciwgYGt2bV9hcmNoX3ZtX2lvY3RsYCBpcyBwcmV0dHkgZ2VuZXJpYywgaXQgbG9va3MgbGlrZSwgc28gSSBzaG91bGQgcmVhbGx5IGtlZXAgbXkgZm9jdXMgb24gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLgoKSG9sZCBvbi4gVGhlIGlvY3RsIGl0c2VsZiBpcyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLiBHb3QgaXQuIFNvLCB0aGlzIHBhdGNoIGlzIGludHJvZHVjaW5nIGEgbmV3IGlvY3RsIHRvIHRoZSBLVk0gaW50ZXJmYWNlIG9uIFBvd2VyUEMuIFRoYXTigJlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UsIGRlZmluaXRlbHkgc29tZXRoaW5nIHdlJiMzOTtkIHdhbnQgdG8gZnV6eiB0aG9yb3VnaGx5LiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hpY2ggY29uZmlnIGVuYWJsZXMgdGhpcy4KClJpZ2h0LCB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFyZSBpbXBvcnRhbnQuIEkgcmVtZW1iZXIgYEtWTV9CT09LM1NfNjRfSFZgIGVuYWJsZXMgYGJvb2szc19odi5jYC4gSXMgdGhlcmUgYW55dGhpbmcgZWxzZSB0byBjb25zaWRlcj8gTGV0JiMzOTtzIHRha2UgYSBxdWljayBsb29rIGF0IHRoZSBgYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZWAgYW5kIHNlZSBpZiBhbnl0aGluZyBlbHNlIGlzIHJlbGV2YW50LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtib29rM3NfaHYubyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjI9a3ZtLWh2LXkgJiM0Mzs9IFxcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjYzOlx0Ym9vazNzX2h2Lm8gXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjQtXHRib29rM3NfaHZfaW50ZXJydXB0cy5vIFxcXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTMvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEyOTk2CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogMTcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gYSB0ZWNobmljYWwgZmllbGQ6CgoqKkludmVzdGlnYXRpbmcgYGt2bS1odi15YCYjMzk7cyBQdXJwb3NlKioKCkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnl0aGluZyBkZWVwZXIsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgYGt2bS1odi15YCAqaXMqLiBJIGNhbiYjMzk7dCBwcm9jZWVkIGVmZmVjdGl2ZWx5IHVudGlsIEkga25vdyB3aGF0IGl0JiMzOTtzIGFzc2lnbmVkIHRvLiBJcyBpdCBhIG1vZHVsZSwgYSB2aXJ0dWFsIG1hY2hpbmUgSUQsIGEgaHlwZXJ2aXNvciBzZXR0aW5nLCBhIGRldmljZT8gV2l0aG91dCBrbm93aW5nIGl0cyBmdW5kYW1lbnRhbCByb2xlIHdpdGhpbiB0aGUgc3lzdGVtLCBhbnkgZnVydGhlciBhbmFseXNpcyBpcyBqdXN0IGd1ZXNzd29yay4gVGltZSB0byBnbyBsb29raW5nIGZvciBpdHMgZGVmaW5pdGlvbi4gSSBuZWVkIHRvIHRyYWNlIHRoaXMgdmFyaWFibGUmIzM5O3MgYXNzaWdubWVudCBhbmQgdW5kZXJzdGFuZCBpdHMgY29udGV4dC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtLWh2LXkmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlPTYwPWVuZGlmXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTYxLVxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZTo2Mjprdm0taHYteSAmIzQzOz0gXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjMtXHRib29rM3NfaHYubyBcXFxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjE1LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxMzI3NAoJCQkJCQkJb3V0cHV0OiAzNgoJCQkJCQkJdGhvdWdodHM6IDgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGxldCYjMzk7cyBkaXZlIGludG8gdGhpcyBNYWtlZmlsZS4gSSBuZWVkIHRvIGdldCBhIGNvbXByZWhlbnNpdmUgdW5kZXJzdGFuZGluZyBiZWZvcmUgSSBzdGFydCBtYWtpbmcgYW55IGNoYW5nZXMsIHNvIGEgbGluZS1ieS1saW5lIHJldmlldyBpcyBhYnNvbHV0ZWx5IG5lY2Vzc2FyeS4gSSYjMzk7bGwgbmVlZCB0byBsb29rIGF0IGV2ZXJ5IHRhcmdldCwgZXZlcnkgZGVwZW5kZW5jeSwgZXZlcnkgY29tbWFuZCwgZXZlcnkgdmFyaWFibGUsIGFuZCBldmVyeSBpbmNsdWRlLiBUaGlzIGlzbiYjMzk7dCBqdXN0IGFib3V0IHNwb3R0aW5nIG9idmlvdXMgZXJyb3JzLCBidXQgYWJvdXQgZ3Jhc3BpbmcgdGhlIG92ZXJhbGwgZmxvdyBhbmQgaW50ZW5kZWQgYmVoYXZpb3IuIEkgd2FudCB0byBidWlsZCBhIG1lbnRhbCBtYXAgb2YgaG93IHRoZXNlIGNvbXBvbmVudHMgYXJlIGludGVyY29ubmVjdGVkLCBzbyBJIGNhbiBwcmVkaWN0IHRoZSBpbXBhY3RzIG9mIGFueSBtb2RpZmljYXRpb25zLiBUaGlzIGlzIGFib3V0IGVuc3VyaW5nIEkgZG9u4oCZdCBpbnRyb2R1Y2UgYW55IHJlZ3Jlc3Npb25zIG9yIHVuaW50ZW5kZWQgY29uc2VxdWVuY2VzIGRvd24gdGhlIGxpbmUuIEEgaG9saXN0aWMgdmlldyBpcyBrZXkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+cmVhZC1maWxlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtGaWxlJiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZSYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDEsCiAgJiMzNDtMaW5lQ291bnQmIzM0OzogMTAwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgIDE6XHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG4gICAyOlx0I1xuICAgMzpcdCMgTWFrZWZpbGUgZm9yIEtlcm5lbC1iYXNlZCBWaXJ0dWFsIE1hY2hpbmUgbW9kdWxlXG4gICA0Olx0I1xuICAgNTpcdFxuICAgNjpcdGNjZmxhZ3MteSA6PSAtSXZpcnQva3ZtIC1JYXJjaC9wb3dlcnBjL2t2bVxuICAgNzpcdFxuICAgODpcdGluY2x1ZGUgJChzcmN0cmVlKS92aXJ0L2t2bS9NYWtlZmlsZS5rdm1cbiAgIDk6XHRcbiAgMTA6XHRjb21tb24tb2Jqcy15ICYjNDM7PSBwb3dlcnBjLm8gZW11bGF0ZV9sb2Fkc3RvcmUub1xuICAxMTpcdG9iai0kKENPTkZJR19LVk1fRVhJVF9USU1JTkcpICYjNDM7PSB0aW1pbmcub1xuICAxMjpcdG9iai0kKENPTkZJR19LVk1fQk9PSzNTX0hBTkRMRVIpICYjNDM7PSBib29rM3NfZXhwb3J0cy5vXG4gIDEzOlx0XG4gIDE0Olx0QUZMQUdTX2Jvb2tlX2ludGVycnVwdHMubyA6PSAtSSQob2JqdHJlZSkvJChvYmopXG4gIDE1Olx0XG4gIDE2Olx0a3ZtLWU1MDAtb2JqcyA6PSBcXFxuICAxNzpcdFx0JChjb21tb24tb2Jqcy15KSBcXFxuICAxODpcdFx0ZW11bGF0ZS5vIFxcXG4gIDE5Olx0XHRib29rZS5vIFxcXG4gIDIwOlx0XHRib29rZV9lbXVsYXRlLm8gXFxcbiAgMjE6XHRcdGJvb2tlX2ludGVycnVwdHMubyBcXFxuICAyMjpcdFx0ZTUwMC5vIFxcXG4gIDIzOlx0XHRlNTAwX21tdS5vIFxcXG4gIDI0Olx0XHRlNTAwX21tdV9ob3N0Lm8gXFxcbiAgMjU6XHRcdGU1MDBfZW11bGF0ZS5vXG4gIDI2Olx0a3ZtLW9ianMtJChDT05GSUdfS1ZNX0U1MDBWMikgOj0gJChrdm0tZTUwMC1vYmpzKVxuICAyNzpcdFxuICAyODpcdGt2bS1lNTAwbWMtb2JqcyA6PSBcXFxuICAyOTpcdFx0JChjb21tb24tb2Jqcy15KSBcXFxuICAzMDpcdFx0ZW11bGF0ZS5vIFxcXG4gIDMxOlx0XHRib29rZS5vIFxcXG4gIDMyOlx0XHRib29rZV9lbXVsYXRlLm8gXFxcbiAgMzM6XHRcdGJvb2tlaHZfaW50ZXJydXB0cy5vIFxcXG4gIDM0Olx0XHRlNTAwbWMubyBcXFxuICAzNTpcdFx0ZTUwMF9tbXUubyBcXFxuICAzNjpcdFx0ZTUwMF9tbXVfaG9zdC5vIFxcXG4gIDM3Olx0XHRlNTAwX2VtdWxhdGUub1xuICAzODpcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9FNTAwTUMpIDo9ICQoa3ZtLWU1MDBtYy1vYmpzKVxuICAzOTpcdFxuICA0MDpcdGt2bS1wci15IDo9IFxcXG4gIDQxOlx0XHRmcHUubyBcXFxuICA0MjpcdFx0ZW11bGF0ZS5vIFxcXG4gIDQzOlx0XHRib29rM3NfcGFpcmVkX3NpbmdsZXMubyBcXFxuICA0NDpcdFx0Ym9vazNzX3ByLm8gXFxcbiAgNDU6XHRcdGJvb2szc19wcl9wYXByLm8gXFxcbiAgNDY6XHRcdGJvb2szc19lbXVsYXRlLm8gXFxcbiAgNDc6XHRcdGJvb2szc19pbnRlcnJ1cHRzLm8gXFxcbiAgNDg6XHRcdGJvb2szc19tbXVfaHB0ZS5vIFxcXG4gIDQ5Olx0XHRib29rM3NfNjRfbW11X2hvc3QubyBcXFxuICA1MDpcdFx0Ym9vazNzXzY0X21tdS5vIFxcXG4gIDUxOlx0XHRib29rM3NfMzJfbW11Lm9cbiAgNTI6XHRcbiAgNTM6XHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIpICYjNDM7PSBcXFxuICA1NDpcdFx0Ym9vazNzXzY0X2VudHJ5Lm8gXFxcbiAgNTU6XHRcdHRtLm9cbiAgNTY6XHRcbiAgNTc6XHRpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxuICA1ODpcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgJiM0Mzs9IFxcXG4gIDU5Olx0XHRib29rM3Nfcm1oYW5kbGVycy5vXG4gIDYwOlx0ZW5kaWZcbiAgNjE6XHRcbiAgNjI6XHRrdm0taHYteSAmIzQzOz0gXFxcbiAgNjM6XHRcdGJvb2szc19odi5vIFxcXG4gIDY0Olx0XHRib29rM3NfaHZfaW50ZXJydXB0cy5vIFxcXG4gIDY1Olx0XHRib29rM3NfNjRfbW11X2h2Lm8gXFxcbiAgNjY6XHRcdGJvb2szc182NF9tbXVfcmFkaXgubyBcXFxuICA2NzpcdFx0Ym9vazNzX2h2X25lc3RlZC5vXG4gIDY4Olx0XG4gIDY5Olx0a3ZtLWh2LSQoQ09ORklHX1BQQ19VVikgJiM0Mzs9IFxcXG4gIDcwOlx0XHRib29rM3NfaHZfdXZtZW0ub1xuICA3MTpcdFxuICA3MjpcdGt2bS1odi0kKENPTkZJR19QUENfVFJBTlNBQ1RJT05BTF9NRU0pICYjNDM7PSBcXFxuICA3MzpcdFx0Ym9vazNzX2h2X3RtLm9cbiAgNzQ6XHRcbiAgNzU6XHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4teGljcy1vYmpzLSQoQ09ORklHX0tWTV9YSUNTKSA6PSBcXFxuICA3NjpcdFx0Ym9vazNzX2h2X3JtX3hpY3Mub1xuICA3NzpcdFxuICA3ODpcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi10bS1vYmpzLSQoQ09ORklHX1BQQ19UUkFOU0FDVElPTkFMX01FTSkgJiM0Mzs9IFxcXG4gIDc5Olx0XHRib29rM3NfaHZfdG1fYnVpbHRpbi5vXG4gIDgwOlx0XG4gIDgxOlx0aWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcbiAgODI6XHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIpICYjNDM7PSBcXFxuICA4MzpcdFx0Ym9vazNzX2h2X2htaS5vIFxcXG4gIDg0Olx0XHRib29rM3NfaHZfcDlfZW50cnkubyBcXFxuICA4NTpcdFx0Ym9vazNzX2h2X3JtaGFuZGxlcnMubyBcXFxuICA4NjpcdFx0Ym9vazNzX2h2X3JtX21tdS5vIFxcXG4gIDg3Olx0XHRib29rM3NfaHZfcmFzLm8gXFxcbiAgODg6XHRcdGJvb2szc19odl9idWlsdGluLm8gXFxcbiAgODk6XHRcdGJvb2szc19odl9wOV9wZXJmLm8gXFxcbiAgOTA6XHRcdGJvb2szc19odl9uZXN0ZWR2Mi5vIFxcXG4gIDkxOlx0XHRndWVzdC1zdGF0ZS1idWZmZXIubyBcXFxuICA5MjpcdFx0JChrdm0tYm9vazNzXzY0LWJ1aWx0aW4tdG0tb2Jqcy15KSBcXFxuICA5MzpcdFx0JChrdm0tYm9vazNzXzY0LWJ1aWx0aW4teGljcy1vYmpzLXkpXG4gIDk0Olx0XG4gIDk1Olx0b2JqLSQoQ09ORklHX0dVRVNUX1NUQVRFX0JVRkZFUl9URVNUKSAmIzQzOz0gdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIub1xuICA5NjpcdGVuZGlmXG4gIDk3Olx0XG4gIDk4Olx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX0tWTV9YSUNTKSAmIzQzOz0gXFxcbiAgOTk6XHRcdGJvb2szc194aWNzLm9cbiAxMDA6XHRcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTUwNjcKCQkJCQkJCW91dHB1dDogMzgKCQkJCQkJCXRob3VnaHRzOiAxMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgaGVyZSYjMzk7cyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjoKCioqRGl2aW5nIERlZXBlciBpbnRvIHRoZSBNYWtlZmlsZSoqCgpBbHJpZ2h0LCBzbyB0aGUgaW5pdGlhbCBnbGFuY2UgYXQgdGhpcyBNYWtlZmlsZSBoYXMgZ2l2ZW4gbWUgYSBiYXNpYyB1bmRlcnN0YW5kaW5nLCBidXQgSSYjMzk7bSBub3QgZ29pbmcgdG8ganVtcCB0byBjb25jbHVzaW9ucyBqdXN0IHlldC4gSSBuZWVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBqdWRnZW1lbnRzIG9yIHBsYW5uaW5nIG1vZGlmaWNhdGlvbnMuIE15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBtZXRob2RpY2FsbHkgd29yayB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgb3RoZXIgcnVsZXMgYXJlIHN0cnVjdHVyZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgb3JjaGVzdHJhdGVkLiBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3Mgb3Igb3B0aW1pemF0aW9ucyBpbiBwbGF5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHJlZmFjdG9yaW5nIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gSXQmIzM5O3MgZXNzZW50aWFsIHRvIHVuZGVyc3RhbmQgdGhlIG92ZXJhbGwgZmxvdyBhbmQgaW50ZW5kZWQgYmVoYXZpb3IgYmVmb3JlIEkgY2FuIGFjY3VyYXRlbHkgYXNzZXNzIGl0cyBxdWFsaXR5IG9yIG1ha2UgYW55IGltcHJvdmVtZW50cy4gSSYjMzk7bSBsb29raW5nIGZvciBhIGNvbXBsZXRlIHVuZGVyc3RhbmRpbmcgb2YgaG93IGl0IGFsbCB3b3JrcyB0b2dldGhlciwgdG9wIHRvIGJvdHRvbS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4xOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogMTAxLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDEwMAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDsgMTAxOlx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX0tWTV9YSVZFKSAmIzQzOz0gYm9vazNzX3hpdmUubyBib29rM3NfeGl2ZV9uYXRpdmUub1xuIDEwMjpcdGt2bS1ib29rM3NfNjQtb2Jqcy0kKENPTkZJR19TUEFQUl9UQ0VfSU9NTVUpICYjNDM7PSBib29rM3NfNjRfdmlvLm9cbiAxMDM6XHRcbiAxMDQ6XHRrdm0tYm9vazNzXzY0LW1vZHVsZS1vYmpzIDo9IFxcXG4gMTA1Olx0XHQkKGNvbW1vbi1vYmpzLXkpIFxcXG4gMTA2Olx0XHRib29rM3MubyBcXFxuIDEwNzpcdFx0Ym9vazNzX3J0YXMubyBcXFxuIDEwODpcdFx0JChrdm0tYm9vazNzXzY0LW9ianMteSlcbiAxMDk6XHRcbiAxMTA6XHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0KSA6PSAkKGt2bS1ib29rM3NfNjQtbW9kdWxlLW9ianMpXG4gMTExOlx0XG4gMTEyOlx0a3ZtLWJvb2szc18zMi1vYmpzIDo9IFxcXG4gMTEzOlx0XHQkKGNvbW1vbi1vYmpzLXkpIFxcXG4gMTE0Olx0XHRlbXVsYXRlLm8gXFxcbiAxMTU6XHRcdGZwdS5vIFxcXG4gMTE2Olx0XHRib29rM3NfcGFpcmVkX3NpbmdsZXMubyBcXFxuIDExNzpcdFx0Ym9vazNzLm8gXFxcbiAxMTg6XHRcdGJvb2szc19wci5vIFxcXG4gMTE5Olx0XHRib29rM3NfZW11bGF0ZS5vIFxcXG4gMTIwOlx0XHRib29rM3NfaW50ZXJydXB0cy5vIFxcXG4gMTIxOlx0XHRib29rM3NfbW11X2hwdGUubyBcXFxuIDEyMjpcdFx0Ym9vazNzXzMyX21tdV9ob3N0Lm8gXFxcbiAxMjM6XHRcdGJvb2szc18zMl9tbXUub1xuIDEyNDpcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfMzIpIDo9ICQoa3ZtLWJvb2szc18zMi1vYmpzKVxuIDEyNTpcdFxuIDEyNjpcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9NUElDKSAmIzQzOz0gbXBpYy5vXG4gMTI3Olx0XG4gMTI4Olx0a3ZtLXkgJiM0Mzs9ICQoa3ZtLW9ianMtbSkgJChrdm0tb2Jqcy15KVxuIDEyOTpcdFxuIDEzMDpcdG9iai0kKENPTkZJR19LVk1fRTUwMFYyKSAmIzQzOz0ga3ZtLm9cbiAxMzE6XHRvYmotJChDT05GSUdfS1ZNX0U1MDBNQykgJiM0Mzs9IGt2bS5vXG4gMTMyOlx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpICYjNDM7PSBrdm0ub1xuIDEzMzpcdG9iai0kKENPTkZJR19LVk1fQk9PSzNTXzMyKSAmIzQzOz0ga3ZtLm9cbiAxMzQ6XHRcbiAxMzU6XHRvYmotJChDT05GSUdfS1ZNX0JPT0szU182NF9QUikgJiM0Mzs9IGt2bS1wci5vXG4gMTM2Olx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSFYpICYjNDM7PSBrdm0taHYub1xuIDEzNzpcdFxuIDEzODpcdG9iai15ICYjNDM7PSAkKGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLXkpXG4gMTM5Olx0XG4gMTQwOlx0IyBLVk0gZG9lcyBhIGxvdCBpbiByZWFsLW1vZGUsIGFuZCA2NC1iaXQgQm9vazNTIEtBU0FOIGRvZXNuJiMzOTt0IHN1cHBvcnQgdGhhdFxuIDE0MTpcdGlmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0XG4gMTQyOlx0S0FTQU5fU0FOSVRJWkUgOj0gblxuIDE0MzpcdGVuZGlmXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MTkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDE2MTU5CgkJCQkJCQlvdXRwdXQ6IDQwCgkJCQkJCQl0aG91Z2h0czogMzExCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKktWTSBIeXBlcnZpc29yIENvbmZpZ3VyYXRpb24gRGVlcCBEaXZlKioKCk9rYXksIHNvIEkmIzM5O20gdHJhY2tpbmcgZG93biB0aGUgZGVwZW5kZW5jaWVzIGZvciB0aGlzIEtWTSBoeXBlcnZpc29yIG9uIFBvd2VyUEMuIExldCYjMzk7cyBzZWUuLi4gYGt2bS1odi5vYCBpcyB0aGUga2V5IGhlcmUsIGFuZCB0aGF0IGdldHMgYnVpbHQgd2hlbiBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgIGlzIGVuYWJsZWQuIFJpZ2h0LCBhbmQgYGt2bS1odi15YCBkaXJlY3RseSBpbmNsdWRlcyBgYm9vazNzX2h2Lm9gLiBUaGF0IGNvbmZpcm1zIGl0IOKAkyBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgIGlzIGRlZmluaXRlbHkgdGhlIHNwZWNpZmljIGNvbmZpZyBJJiMzOTttIGFmdGVyLiBOb3csIGhvbGQgb24sIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUuIGBib29rM3NfaHYub2AgaXMgKmNvbXBpbGVkIGludG8qIGBrdm0taHYub2AsIHdoaWNoIGlzIGEgbW9kdWxlIG9yIGJ1aWx0LWluLCBzbyBpdCYjMzk7cyBzdGF0aWNhbGx5IGxpbmtlZC4KCkFoLCB0aGUgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBpb2N0bC4gSSByZWNhbGwgdGhhdCYjMzk7cyBoYW5kbGVkIHdpdGhpbiBgcG93ZXJwYy5jYCwgd2hpY2gsIGFzIEkgZXhwZWN0LCBpcyBwYXJ0IG9mIGBrdm0ub2AuIE5vdywgYGt2bS5vYCBpcyBidWlsdCB3aGVuIHRoZSBtb3JlIGdlbmVyYWwgYENPTkZJR19LVk1fQk9PSzNTXzY0YCBpcyBlbmFibGVkLiBCaW5nbyEgYHBvd2VycGMuY2AgdWx0aW1hdGVseSBjYWxscyBga3ZtLSZndDthcmNoLmt2bV9vcHMtJmd0O2dldF9jb21wYXRfY2Fwc2AsIGFuZCBJIGNhbiBzZWUgdGhhdCBga3ZtX29wc19odmAgaXMgdGhlIHNldCBvZiBvcGVyYXRpb25zIHRoYXQmIzM5O3MgcmVnaXN0ZXJlZCB3aGVuIGBrdm0taHYub2AgaXMgbG9hZGVkLiBUaGVyZWZvcmUsIEkmIzM5O20gY29uZmlkZW50IHRoYXQgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCBpcyBhYnNvbHV0ZWx5IHJlcXVpcmVkLgoKQWxyaWdodCwgbGV0JiMzOTtzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGVsc2UgY3JpdGljYWwuIE9idmlvdXNseSwgYENPTkZJR19LVk1gIGl0c2VsZiBpcyBmdW5kYW1lbnRhbCDigJMgbm8gS1ZNIHdpdGhvdXQgS1ZNISBMZXQmIzM5O3Mgc2VlLi4uIGFuZCwgeWVzLCBgQ09ORklHX1BQQ19QT1dFUk5WYCBpcyBhbHNvIGEgZGVwZW5kZW5jeSBmb3IgYEtWTV9CT09LM1NfNjRfSFZgIHRvIGV2ZW4gYmUgc2VsZWN0ZWQuIEp1c3QgdG8gYmUgY29tcGxldGVseSB0aG9yb3VnaCwgSSYjMzk7bGwgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIGZpbGUgdG8gZG91YmxlLWNoZWNrLiBJIGJlbGlldmUgdGhhdCBzaG91bGQgY292ZXIgaXQhCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjAvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBLVk1fQk9PSzNTXzY0X0hWJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTYyPWNvbmZpZyBLVk1fQk9PSzNTXzY0XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjc5OmNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXHR0cmlzdGF0ZSBcJiMzNDtLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcJiMzNDtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yMS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTcwODQKCQkJCQkJCW91dHB1dDogMzcKCQkJCQkJCXRob3VnaHRzOiAyMAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+SGVyZSYjMzk7cyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDoKCioqQXNzZXNzaW5nIHRoZSBMYW5kc2NhcGU6IEtWTV9CT09LM1NfNjRfSFYgRGVwZW5kZW5jaWVzKioKCk9rYXksIHNvIEkgbmVlZCB0byBnZXQgYSBoYW5kbGUgb24gYEtWTV9CT09LM1NfNjRfSFZgLiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBzdGFydCB3aXRoIHRoZSBncm91bmR3b3JrOiBsZXQmIzM5O3MgZGl2ZSBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgd2hhdCB0aGlzIHRoaW5nICpyZWxpZXMqIG9uIGlzIHRoZSBhYnNvbHV0ZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgZnVuY3Rpb25zIGFuZCwgY3J1Y2lhbGx5LCBob3cgYW55IGNoYW5nZXMgbWlnaHQgcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIGRvbWlub2VzIGJlZm9yZSBJIHN0YXJ0IGZpZGRsaW5nIHdpdGggb25lLiBJcyBpdCBqdXN0IGEgc2luZ2xlIGxpYnJhcnksIG9yIGFyZSB3ZSBsb29raW5nIGF0IGEgc3ByYXdsaW5nIHdlYiBvZiBuZXN0ZWQgZGVwZW5kZW5jaWVzPyBLbm93aW5nIHRoZSBicmVhZHRoIG9mIHRoYXQgZGVwZW5kZW5jeSB0cmVlIGlzIGdvaW5nIHRvIGluZm9ybSBteSBlbnRpcmUgYXBwcm9hY2ggZnJvbSBoZXJlIG9uIG91dC4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGl0cyBwbGFjZSBpbiB0aGUgc3lzdGVtLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzk6XHRjb25maWcgS1ZNX0JPT0szU182NF9IVlxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4gIDgxOlx0XHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXHUwMDI2XHUwMDI2IFBQQ19QT1dFUk5WXG4gIDgyOlx0XHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuICA4MzpcdFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXG4gIDg0Olx0XHRzZWxlY3QgQ01BXG4gIDg1Olx0XHRoZWxwXG4gIDg2Olx0XHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBndWVzdCBrZXJuZWxzIGluXG4gIDg3Olx0XHQgIHZpcnR1YWwgbWFjaGluZXMgb24gUE9XRVI3IGFuZCBuZXdlciBwcm9jZXNzb3JzIHRoYXQgaGF2ZVxuICA4ODpcdFx0ICBoeXBlcnZpc29yIG1vZGUgYXZhaWxhYmxlIHRvIHRoZSBob3N0LlxuICA4OTpcdFxuICA5MDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgS1ZNIHdpbGwgdXNlIHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvblxuICA5MTpcdFx0ICBmYWNpbGl0aWVzIG9mIFBPV0VSNyAoYW5kIGxhdGVyKSBwcm9jZXNzb3JzLCBtZWFuaW5nIHRoYXRcbiAgOTI6XHRcdCAgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMgd2lsbCBydW4gYXQgZnVsbCBoYXJkd2FyZSBzcGVlZFxuICA5MzpcdFx0ICB1c2luZyBzdXBlcnZpc29yIGFuZCB1c2VyIG1vZGVzLiAgSG93ZXZlciwgdGhpcyBhbHNvIG1lYW5zXG4gIDk0Olx0XHQgIHRoYXQgS1ZNIGlzIG5vdCB1c2FibGUgdW5kZXIgUG93ZXJWTSAocEh5cCksIGlzIG9ubHkgdXNhYmxlXG4gIDk1Olx0XHQgIG9uIFBPV0VSNyBvciBsYXRlciBwcm9jZXNzb3JzLCBhbmQgY2Fubm90IGVtdWxhdGUgYVxuICA5NjpcdFx0ICBkaWZmZXJlbnQgcHJvY2Vzc29yIGZyb20gdGhlIGhvc3QgcHJvY2Vzc29yLlxuICA5NzpcdFxuICA5ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAxNzY1MAoJCQkJCQkJb3V0cHV0OiA0MQoJCQkJCQkJdGhvdWdodHM6IDE1OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipBbmFseXppbmcgS1ZNIGFuZCBQb3dlclBDIERlcGVuZGVuY2llcyoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBNeSBpbml0aWFsIG9ic2VydmF0aW9uIGlzIHRoYXQgYEtWTV9CT09LM1NfNjRfSFZgIGlzIHJlbGlhbnQgb24gYm90aCBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIEdpdmVuIHRoaXMgcmVsYXRpb25zaGlwLCBJIG5lZWQgdG8gZW5zdXJlIGJvdGggYEtWTV9CT09LM1NfNjRfSFZgIGFuZCBgUFBDX1BPV0VSTlZgIGFyZSBwcm9wZXJseSBjb25maWd1cmVkLiBJJiMzOTtsbCBtYWtlIGEgbm90ZSB0byBsaXN0IHRoZW0gaW4gYEVuYWJsZUNvbmZpZ3NgLgoKSG9sZCBvbi4uLiBzb21ldGhpbmcgZmVlbHMgb2ZmLiBJJiMzOTttIHJlY2FsbGluZyB0aGF0IGBrdm1fYXJjaF92bV9pb2N0bGAgd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AgaXMgcmVzcG9uc2libGUgZm9yIGhhbmRsaW5nIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIFRoZSBpbnRlcmVzdGluZyBwYXJ0IGlzIHRoYXQgdGhpcyBmdW5jdGlvbiBpc24mIzM5O3Qgd3JhcHBlZCB3aXRoaW4gYW55IGAjaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGNvbmRpdGlvbmFsIGJsb2Nrcy4gVGhhdOKAmXMgdW5leHBlY3RlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZnVsbHkuIFRpbWUgdG8gZGl2ZSBiYWNrIGludG8gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBhbmQgY29uZmlybSBteSBtZW1vcnkuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O0tWTV9QUENfR0VUX0NPTVBBVF9DQVBTJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9MjM2Mz1pbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMjQ3Mi1cdH1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjI0NzM6XHRjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yNDc0LVx0XHRzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTg8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTgyNDEKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiAxMzkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqQW5hbHl6aW5nIHRoZSBLVk0gQ29tcGF0aWJpbGl0eSBDaGVjayoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBjb2RlIGFuZCBJIHNlZSB0aGF0IHRoaXMgY2hlY2sgaXNuJiMzOTt0IHR1Y2tlZCBhd2F5IGluc2lkZSBhbiBgI2lmZGVmYCBibG9jaywgd2hpY2ggaXMgYSBjb21tb24gcGF0dGVybi4gSW5zdGVhZCwgaXQgc2VlbXMgdG8gcmVseSBvbiB0aGUgYGt2bS0mZ3Q7YXJjaC5rdm1fb3BzLSZndDtnZXRfY29tcGF0X2NhcHNgIGZ1bmN0aW9uLiBJZiB0aGF0IGZ1bmN0aW9uIHBvaW50ZXIgaGFwcGVucyB0byBiZSBOVUxMLCB0aGUgY29kZSByZXR1cm5zIGAtRU5PVFRZYC4gUmlnaHQsIHRoYXQmIzM5O3Mgc3RyYWlnaHRmb3J3YXJkIGVub3VnaC4KCk5vdywgd2hlcmUgaXMgYGdldF9jb21wYXRfY2Fwc2AgYWN0dWFsbHkgZGVmaW5lZCBhbmQgc2V0PyBBY2NvcmRpbmcgdG8gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgaXQmIzM5O3Mgb25seSBzZXQgaW4gYGt2bV9vcHNfaHZgIHdpdGhpbiBgYm9vazNzX2h2LmNgLiBUbyBhY3R1YWxseSBleGVyY2lzZSB0aGlzIHBhcnRpY3VsYXIgY29kZSBwYXRoIGFuZCB0ZXN0IGl0LCB0aGF0IG1lYW5zIEkgKm11c3QqIGhhdmUgYEtWTV9CT09LM1NfNjRfSFZgIGVuYWJsZWQuIEl0JiMzOTtzIGEga2V5IHJlcXVpcmVtZW50LgoKU28sIEkgdGhpbmsgdGhlIG5leHQgbG9naWNhbCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgaW4gYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGZ1bmN0aW9uIHdvcmtzIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGlzIGNoZWNrLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjI2LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMmIzM0OywKICAmIzM0O0ZpcnN0TGluZSYjMzQ7OiA2NTMzLAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDUwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OzY1MzM6XHRzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcbjY1MzQ6XHR7XG42NTM1Olx0XHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuNjUzNjpcdFx0dW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMgPSAwO1xuNjUzNzpcdFx0Y29uc3QgX19iZTMyICpwcm9wID0gTlVMTDtcbjY1Mzg6XHRcdGxvbmcgcmMgPSAtRUlOVkFMO1xuNjUzOTpcdFx0dTMyIGNwdV92ZXJzaW9uO1xuNjU0MDpcdFxuNjU0MTpcdFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuNjU0MjpcdFx0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuNjU0MzpcdFx0XHRcdFdBUk5fT05fT05DRSghbmVzdGVkX2NhcGFiaWxpdGllcyk7XG42NTQ0Olx0XHRcdFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcbjY1NDU6XHRcdFx0XHRyYyA9IDA7XG42NTQ2Olx0XHRcdH0gZWxzZSB7XG42NTQ3Olx0XHRcdFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcJiMzNDtjcHVcJiMzNDspIHtcbjY1NDg6XHRcdFx0XHRcdHByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsIFwmIzM0O2NwdS12ZXJzaW9uXCYjMzQ7LCBOVUxMKTtcbjY1NDk6XHRcdFx0XHRcdGlmIChwcm9wKSB7XG42NTUwOlx0XHRcdFx0XHRcdGNwdV92ZXJzaW9uID0gYmUzMl90b19jcHVwKHByb3ApO1xuNjU1MTpcdFx0XHRcdFx0XHRvZl9ub2RlX3B1dChucCk7XG42NTUyOlx0XHRcdFx0XHRcdGJyZWFrO1xuNjU1MzpcdFx0XHRcdFx0fVxuNjU1NDpcdFx0XHRcdH1cbjY1NTU6XHRcdFx0XHRpZiAoIXByb3ApXG42NTU2Olx0XHRcdFx0XHRyZXR1cm4gLUVJTlZBTDtcbjY1NTc6XHRcdFx0XHRyYyA9IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjcHVfdmVyc2lvbixcbjY1NTg6XHRcdFx0XHRcdFx0XHRcdCAgICBcdTAwMjZjYXBhYmlsaXRpZXMpO1xuNjU1OTpcdFx0XHR9XG42NTYwOlx0XHR9XG42NTYxOlx0XG42NTYyOlx0XHRpZiAocmMgXHUwMDNjIDApXG42NTYzOlx0XHRcdHJldHVybiByYztcbjY1NjQ6XHRcbjY1NjU6XHRcdGhvc3RfY2Fwcy1cdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFx1MDAyNiBLVk1fUFBDX0NPTVBBVF9CSVRNQVNLO1xuNjU2NjpcdFxuNjU2NzpcdFx0cmV0dXJuIHJjO1xuNjU2ODpcdH1cbjY1Njk6XHRcbjY1NzA6XHRzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcbjY1NzE6XHRcdC5nZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVnc19odixcbjY1NzI6XHRcdC5zZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19odixcbjY1NzM6XHRcdC5nZXRfb25lX3JlZyA9IGt2bXBwY19nZXRfb25lX3JlZ19odixcbjY1NzQ6XHRcdC5zZXRfb25lX3JlZyA9IGt2bXBwY19zZXRfb25lX3JlZ19odixcbjY1NzU6XHRcdC52Y3B1X2xvYWQgICA9IGt2bXBwY19jb3JlX3ZjcHVfbG9hZF9odixcbjY1NzY6XHRcdC52Y3B1X3B1dCAgICA9IGt2bXBwY19jb3JlX3ZjcHVfcHV0X2h2LFxuNjU3NzpcdFx0LmluamVjdF9pbnRlcnJ1cHQgPSBrdm1wcGNfaW5qZWN0X2ludGVycnVwdF9odixcbjY1Nzg6XHRcdC5zZXRfbXNyICAgICA9IGt2bXBwY19zZXRfbXNyX2h2LFxuNjU3OTpcdFx0LnZjcHVfcnVuICAgID0ga3ZtcHBjX3ZjcHVfcnVuX2h2LFxuNjU4MDpcdFx0LnZjcHVfY3JlYXRlID0ga3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGVfaHYsXG42NTgxOlx0XHQudmNwdV9mcmVlICAgPSBrdm1wcGNfY29yZV92Y3B1X2ZyZWVfaHYsXG42NTgyOlx0XHQuY2hlY2tfcmVxdWVzdHMgPSBrdm1wcGNfY29yZV9jaGVja19yZXF1ZXN0c19odixcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMTk1NDEKCQkJCQkJCW91dHB1dDogMzYKCQkJCQkJCXRob3VnaHRzOiA3OAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+T2theSwgbGV0IG1lIGJyZWFrIHRoaXMgZG93bi4KCioqRGl2aW5nIGludG8gdGhlIGt2bS1odiBjb2RlLi4uKioKCkFscmlnaHQsIEkmIzM5O20gdHJhY2luZyB0aHJvdWdoIHRoaXMgc2VjdGlvbiwgYW5kIHRoZSBmaXJzdCB0aGluZyB0aGF0IGp1bXBzIG91dCBpcyB0aGlzIGNoZWNrIGZvciBga3ZtaHZfb25fcHNlcmllcygpYC4gSG1tLCBpbnRlcmVzdGluZy4gSWYgdGhhdCBmdW5jdGlvbiAqaXNuJiMzOTt0KiB0cnVlLCB0aGVuIHdlIGltbWVkaWF0ZWx5IHJldHVybiBgLUVJTlZBTGAuIFNvLCBjbGVhcmx5LCB0aGlzIGNvZGUgcGF0aCBpcyBkZXNpZ25lZCB0byBiYWlsIG91dCB1bmxlc3Mgc29tZXRoaW5nIHNwZWNpZmljIGlzIGluIHBsYWNlLiBJdCBzZWVtcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5ICpyZXF1aXJlcyogYSBwb3NpdGl2ZSBzaWduYWwgZnJvbSBga3ZtaHZfb25fcHNlcmllcygpYC4KCkJ1dCB3aGF0IHRoZSBoZWNrICppcyogYGt2bWh2X29uX3BzZXJpZXMoKWA/IFRoZSBlbnRpcmUgZmxvdyBzZWVtcyBwcmVkaWNhdGVkIG9uIGl0LCBzbyBub3cgSSBuZWVkIHRvIGZpZ3VyZSBvdXQgd2hhdCB0aGF0IGZ1bmN0aW9uIGRvZXMuIEl04oCZcyB0aGUgZ2F0ZWtlZXBlciwgaXQgc2VlbXMuIE15IG5leHQgc3RlcCBpcyB0byB1bmRlcnN0YW5kIHdoYXQgdGhhdCBib29sZWFuIGNoZWNrIGFjdHVhbGx5IHJlcHJlc2VudHMgYW5kIHdoYXQgc2NlbmFyaW8gYWxsb3dzIGl0IHRvIGJlIHRydWUgc28gdGhhdCBJIGNhbiBmaWd1cmUgb3V0IHRoZSBjb250ZXh0IG9mIHRoaXMgZnVuY3Rpb24uIEkgbmVlZCB0byB1bmRlcnN0YW5kIHdoYXQgc3BlY2lmaWMgaGFyZHdhcmUgb3IgY29uZmlndXJhdGlvbiB0cmlnZ2VycyBpdC4gVGhpcyBpcyBpbXBvcnRhbnQgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBiZWhhdmlvci4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtaHZfb25fcHNlcmllcyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTM1PXVuc2lnbmVkIGxvbmcgX19rdm1odl9jb3B5X3RvZnJvbV9ndWVzdF9yYWRpeChpbnQgbHBpZCwgaW50IHBpZCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00Ni1cdC8qIENhbiYjMzk7dCBhY2Nlc3MgcXVhZHJhbnRzIDEgb3IgMiBpbiBub24tSFYgbW9kZSwgY2FsbCB0aGUgSFYgdG8gZG8gaXQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjQ3Olx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTQ4LVx0XHRyZXR1cm4gcGxwYXJfaGNhbGxfbm9yZXRzKEhfQ09QWV9UT0ZST01fR1VFU1QsIGxwaWQsIHBpZCwgZWFkZHIsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM9MzE1PXZvaWQga3ZtcHBjX3JhZGl4X3RsYmllX3BhZ2Uoc3RydWN0IGt2bSAqa3ZtLCB1bnNpZ25lZCBsb25nIGFkZHIsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzI5LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM6MzMwOlx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTMzMS1cdFx0cmFkaXhfX2ZsdXNoX3RsYl9scGlkX3BhZ2UobHBpZCwgYWRkciwgcHNpemUpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTM1Mz1zdGF0aWMgdm9pZCBrdm1wcGNfcmFkaXhfZmx1c2hfcHdjKHN0cnVjdCBrdm0gKmt2bSwgdTY0IGxwaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzU2LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM6MzU3Olx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTM1OC1cdFx0cmFkaXhfX2ZsdXNoX3B3Y19scGlkKGxwaWQpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9MTgyPXN0YXRpYyBib29sIGt2bXBwY19pcGlfdGhyZWFkKGludCBjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODYtXHQvKiBJZiB3ZSYjMzk7cmUgYSBuZXN0ZWQgaHlwZXJ2aXNvciwgZmFsbCBiYWNrIHRvIG9yZGluYXJ5IElQSXMgZm9yIG5vdyAqL1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzoxODc6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODgtXHRcdHJldHVybiBmYWxzZTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQxND1zdGF0aWMgaW50IGt2bXBwY19zZXRfYXJjaF9jb21wYXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgYXJjaF9jb21wYXQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NjAtXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjQ2MTpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkgXHUwMDI2XHUwMDI2IGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDYyLVx0XHQvKlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NDQxMz1zdGF0aWMgaW50IGt2bWh2X3A5X2d1ZXN0X2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NDMyLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NDMzOlx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NDM0LVx0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjEoKSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ4Njc9aW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDk0Ni1cdFx0XHQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDk0NzpcdFx0XHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSBcdTAwMjZcdTAwMjYgKF9fa3ZtcHBjX2dldF9tc3JfaHYodmNwdSkgXHUwMDI2IE1TUl9FRSkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ5NDgtXHRcdFx0XHRrdm1wcGNfaW5qZWN0X2ludGVycnVwdF9odih2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NTIyOD1zdGF0aWMgaW50IGt2bV92bV9pb2N0bF9nZXRfc21tdV9pbmZvX2h2KHN0cnVjdCBrdm0gKmt2bSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTEtXHQvKiBJZiBydW5uaW5nIGFzIGEgbmVzdGVkIGh5cGVydmlzb3IsIHdlIGRvbiYjMzk7dCBzdXBwb3J0IEhQVCBndWVzdHMgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTI1MjpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTMtXHRcdGluZm8tXHUwMDNlZmxhZ3MgfD0gS1ZNX1BQQ19OT19IQVNIO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjE0NT1zdGF0aWMgaW50IGt2bV9hcmNoX3ZtX2lvY3RsX2h2KHN0cnVjdCBmaWxlICpmaWxwLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjE1Ny1cdFx0LyogSWYgd2UmIzM5O3JlIGEgbmVzdGVkIGh5cGVydmlzb3IsIHdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgcmFkaXggKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjE1ODpcdFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02MTU5LVx0XHRcdHIgPSAtRU9QTk9UU1VQUDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTYyNTc9c3RhdGljIGludCBrdm1odl9jb25maWd1cmVfbW11KHN0cnVjdCBrdm0gKmt2bSwgc3RydWN0IGt2bV9wcGNfbW11djNfY2ZnICpjZmcpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02Mjg0LVx0LyogSWYgd2UmIzM5O3JlIGEgbmVzdGVkIGh5cGVydmlzb3IsIHdlIGN1cnJlbnRseSBvbmx5IHN1cHBvcnQgcmFkaXggKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjI4NTpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkgXHUwMDI2XHUwMDI2ICFyYWRpeClcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4Ni1cdFx0cmV0dXJuIC1FSU5WQUw7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTMzPXN0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0MC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjU0MTpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0Mi1cdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY2NTE9c3RhdGljIGludCBrdm1wcGNfYm9vazNzX2luaXRfaHYodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2ODItI2lmZGVmIENPTkZJR19TTVBcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjY4MzpcdGlmICgheGljc19vbl94aXZlKCkgXHUwMDI2XHUwMDI2ICFrdm1odl9vbl9wc2VyaWVzKCkgXHUwMDI2XHUwMDI2XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2ODQtXHQgICAgIWxvY2FsX3BhY2EtXHUwMDNla3ZtX2hzdGF0ZS54aWNzX3BoeXMpIHtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY3MjQtXHQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjcyNTpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY3MjYtXHRcdHByX2luZm8oXCYjMzQ7S1ZNLUhWOiBFbmFibGluZyBJUlEgYnlwYXNzXFxuXCYjMzQ7KTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYz00Mzk9bG9uZyBrdm1odl9uZXN0ZWRfaW5pdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ0NC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jOjQ0NTpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNDQ2LVx0XHRyZXR1cm4gMDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYz01MDA9dm9pZCBrdm1odl9uZXN0ZWRfZXhpdCh2b2lkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwMi1cdC8qXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDM6XHQgKiBOLkIuIHRoZSBrdm1odl9vbl9wc2VyaWVzKCkgdGVzdCBpcyB0aGVyZSBiZWNhdXNlIGl0IGVuYWJsZXNcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwNC1cdCAqIHRoZSBjb21waWxlciB0byByZW1vdmUgdGhlIGNhbGwgdG8gcGxwYXJfaGNhbGxfbm9yZXRzKClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDYtXHQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jOjUwNzpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkgXHUwMDI2XHUwMDI2IHBzZXJpZXNfcGFydGl0aW9uX3RiKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDgtXHRcdHBscGFyX2hjYWxsX25vcmV0cyhIX1NFVF9QQVJUSVRJT05fVEFCTEUsIDApO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUxND12b2lkIGt2bWh2X2ZsdXNoX2xwaWQodTY0IGxwaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTE3LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTE4Olx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUxOS1cdFx0cmFkaXhfX2ZsdXNoX2FsbF9scGlkKGxwaWQpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUzNj12b2lkIGt2bWh2X3NldF9wdGJsX2VudHJ5KHU2NCBscGlkLCB1NjQgZHcwLCB1NjQgZHcxKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTM3LXtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jOjUzODpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MzktXHRcdG1tdV9wYXJ0aXRpb25fdGFibGVfc2V0X2VudHJ5KGxwaWQsIGR3MCwgZHcxLCB0cnVlKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmM9MzU9dm9pZCBzd2l0Y2hfcG11X3RvX2d1ZXN0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmMtNzQtXHQvKiBBZnRlciBzYXZpbmcgUE1VLCBiZWZvcmUgbG9hZGluZyBndWVzdCBQTVUsIGZsaXAgcG1jcmVnc19pbl91c2UgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYzo3NTpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYy03Ni1cdFx0YmFycmllcigpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYz0xMTg9dm9pZCBzd2l0Y2hfcG11X3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYy0xODYtI2lmZGVmIENPTkZJR19QUENfUFNFUklFU1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jOjE4NzpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYy0xODgtXHRcdGJhcnJpZXIoKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz01MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy02OTAtXHRcdGlmIChodl9lbmFibGVkKSB7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo2OTE6XHRcdFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjkyLVx0XHRcdFx0aWYgKHBzZXJpZXNfcmVsb2Nfb25fZXhjZXB0aW9uKCkpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzAyLVx0XHRyID0gMDtcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwMzpcdFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSlcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwNC1cdFx0XHRyID0gMTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmM9NDU0PXN0YXRpYyB2b2lkIHRlc3RfZ3NfaG9zdHdpZGVfY291bnRlcnMoc3RydWN0IGt1bml0ICp0ZXN0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIuYy00NjMtXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmM6NDY0Olx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmMtNDY1LVx0XHRrdW5pdF9za2lwKHRlc3QsIFwmIzM0O1RoaXMgdGVzdCBuZWVkIGEga212LWh2IGd1ZXN0XCYjMzQ7KTtcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yOS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjMyODIKCQkJCQkJCW91dHB1dDogMzMKCQkJCQkJCXRob3VnaHRzOiAyOTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTmVzdGVkIEtWTSBvbiBwc2VyaWVzOiBBIEZ1enppbmcgUGVyc3BlY3RpdmUqKgoKT2theSwgc28gSSYjMzk7bSB0aGlua2luZyBhYm91dCB0aGlzIGBrdm1odl9vbl9wc2VyaWVzKClgIGZ1bmN0aW9uLiBJdCYjMzk7cyBzdXBwb3NlZCB0byB0ZWxsIG1lIGlmIEtWTSBpcyBydW5uaW5nIG5lc3RlZCBvbiBhIHBzZXJpZXMgbWFjaGluZSwgcmlnaHQ/IEFuZCBpZiBpdCAqaXNuJiMzOTt0KiwgdGhlbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgaXMgZ29pbmcgdG8gcmV0dXJuIGAtRUlOVkFMYC4gVGhhdCBpbW1lZGlhdGVseSBzcGFya2VkIGFuIGlkZWEg4oCTIGNvdWxkIHRoaXMgYmUgZnV6emVkPyBDb3VsZCBJIHBvdGVudGlhbGx5IHRyaWdnZXIgc29tZSBpbnRlcmVzdGluZyBiZWhhdmlvciBvciB1bmNvdmVyIGEgYnVnIGJ5IG1hbmlwdWxhdGluZyB0aGlzIGNvbmRpdGlvbj8KClRoZSBmaXJzdCB0aGluZyBJIGhhZCB0byBjb25maXJtIHdhcyB3aGV0aGVyIHN5emthbGxlciAqY291bGQqIGV2ZW4gcnVuIG9uIGEgcHNlcmllcyBtYWNoaW5lLiBMdWNraWx5LCB5ZXMhIEkga25vdyB0aGF0IHlvdSBjYW4gdXNlIFFFTVUgd2l0aCB0aGUgYHBzZXJpZXNgIG1hY2hpbmUgdHlwZS4gU28sIHNvbWV0aGluZyBsaWtlIGBxZW11LXN5c3RlbS1wcGM2NCAtTSBwc2VyaWVzYCBpcyB0b3RhbGx5IHZhbGlkLgoKTm93IGl0JiMzOTtzIHN0YXJ0aW5nIHRvIGNvbWUgdG9nZXRoZXIuIElmIHN5emthbGxlciBpcyBydW5uaW5nICppbnNpZGUqIGEgYHBzZXJpZXNgIFFFTVUgVk0sIHRoZW4gYGt2bWh2X29uX3BzZXJpZXMoKWAgKnNob3VsZCogcmV0dXJuIHRydWUuIFdhaXQsIGxldCBtZSB0aGluayB0aGF0IHRocm91Z2jigKYgYGt2bWh2X29uX3BzZXJpZXMoKWAgbWVhbnMgdGhlIGhvc3QgaXRzZWxmIGlzIHJ1bm5pbmcgYXMgYSBndWVzdCBvbiBwc2VyaWVzLiBZZXMsIHN5emthbGxlciAqaXMqIHJ1bm5pbmcgaW5zaWRlIGEgYHBzZXJpZXNgIFZNLCB3aGljaCBtZWFucyB0aGUga2VybmVsIGl0JiMzOTtzIGZ1enppbmcgaXMgYWxzbyBydW5uaW5nIGFzIGEgZ3Vlc3Qgb24gYHBzZXJpZXNgLiBTbywgYGt2bWh2X29uX3BzZXJpZXMoKWAgKndpbGwqIGJlIHRydWUgaW4gdGhhdCBzY2VuYXJpby4gVGhhdCBtZWFucyBLVk0gaW5zaWRlIHRoYXQgZ3Vlc3QgaXMgY29uc2lkZXJlZCAmIzM0O25lc3RlZCBLVk0mIzM0Oy4gVGhlcmVmb3JlLCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHNob3VsZCBiZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIFRoaXMgaXMgZ3JlYXQsIGFzIGl0IG1lYW5zIEkgY2FuIHRyeSB0byBmaW5kIHNvbWUgbmV3IGZ1enppbmcgc3VyZmFjZS4KCk5vdywgbGV0JiMzOTtzIHNlZSB3aGVyZSB0aGF0IGBrdm1odl9vbl9wc2VyaWVzKClgIGlzIGRlZmluZWQgYW5kIHdoZXJlIGl0JiMzOTtzIGJlaW5nIHVzZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMwLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtrdm1odl9vbl9wc2VyaWVzJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oPTYwND1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2h2X21vZGVfYWN0aXZlKHZvaWQpXHRcdHsgcmV0dXJuIGZhbHNlOyB9XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaC02MDgtI2lmZGVmIENPTkZJR19QUENfUFNFUklFU1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaDo2MDk6c3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZClcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjEwLXtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oLTYxMy0jZWxzZVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaDo2MTQ6c3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZClcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjE1LXtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNT11bnNpZ25lZCBsb25nIF9fa3ZtaHZfY29weV90b2Zyb21fZ3Vlc3RfcmFkaXgoaW50IGxwaWQsIGludCBwaWQsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtNDYtXHQvKiBDYW4mIzM5O3QgYWNjZXNzIHF1YWRyYW50cyAxIG9yIDIgaW4gbm9uLUhWIG1vZGUsIGNhbGwgdGhlIEhWIHRvIGRvIGl0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYzo0NzpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00OC1cdFx0cmV0dXJuIHBscGFyX2hjYWxsX25vcmV0cyhIX0NPUFlfVE9GUk9NX0dVRVNULCBscGlkLCBwaWQsIGVhZGRyLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTMxNT12b2lkIGt2bXBwY19yYWRpeF90bGJpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTMyOS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjMzMDpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy0zMzEtXHRcdHJhZGl4X19mbHVzaF90bGJfbHBpZF9wYWdlKGxwaWQsIGFkZHIsIHBzaXplKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNTM9c3RhdGljIHZvaWQga3ZtcHBjX3JhZGl4X2ZsdXNoX3B3YyhzdHJ1Y3Qga3ZtICprdm0sIHU2NCBscGlkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTM1Ni1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjM1NzpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy0zNTgtXHRcdHJhZGl4X19mbHVzaF9wd2NfbHBpZChscGlkKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTE4Mj1zdGF0aWMgYm9vbCBrdm1wcGNfaXBpX3RocmVhZChpbnQgY3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMTg2LVx0LyogSWYgd2UmIzM5O3JlIGEgbmVzdGVkIGh5cGVydmlzb3IsIGZhbGwgYmFjayB0byBvcmRpbmFyeSBJUElzIGZvciBub3cgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTg3Olx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMTg4LVx0XHRyZXR1cm4gZmFsc2U7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00MTQ9c3RhdGljIGludCBrdm1wcGNfc2V0X2FyY2hfY29tcGF0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGFyY2hfY29tcGF0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDYwLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NjE6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpIFx1MDAyNlx1MDAyNiBrdm1odl9pc19uZXN0ZWR2MigpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ2Mi1cdFx0Lypcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ0MTM9c3RhdGljIGludCBrdm1odl9wOV9ndWVzdF9lbnRyeShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDQzMi1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDQzMzpcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDQzNC1cdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYxKCkpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00ODY3PWludCBrdm1odl9ydW5fc2luZ2xlX3ZjcHUoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1NjQgdGltZV9saW1pdCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ5NDYtXHRcdFx0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjQ5NDc6XHRcdFx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkgXHUwMDI2XHUwMDI2IChfX2t2bXBwY19nZXRfbXNyX2h2KHZjcHUpIFx1MDAyNiBNU1JfRUUpKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTQ4LVx0XHRcdFx0a3ZtcHBjX2luamVjdF9pbnRlcnJ1cHRfaHYodmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUyMjg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X3NtbXVfaW5mb19odihzdHJ1Y3Qga3ZtICprdm0sXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01MjUxLVx0LyogSWYgcnVubmluZyBhcyBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBkb24mIzM5O3Qgc3VwcG9ydCBIUFQgZ3Vlc3RzICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjUyNTI6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01MjUzLVx0XHRpbmZvLVx1MDAzZWZsYWdzIHw9IEtWTV9QUENfTk9fSEFTSDtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTYxNDU9c3RhdGljIGludCBrdm1fYXJjaF92bV9pb2N0bF9odihzdHJ1Y3QgZmlsZSAqZmlscCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYxNTctXHRcdC8qIElmIHdlJiMzOTtyZSBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHJhZGl4ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjYxNTg6XHRcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjE1OS1cdFx0XHRyID0gLUVPUE5PVFNVUFA7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02MjU3PXN0YXRpYyBpbnQga3ZtaHZfY29uZmlndXJlX21tdShzdHJ1Y3Qga3ZtICprdm0sIHN0cnVjdCBrdm1fcHBjX21tdXYzX2NmZyAqY2ZnKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4NC1cdC8qIElmIHdlJiMzOTtyZSBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHJhZGl4ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjYyODU6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpIFx1MDAyNlx1MDAyNiAhcmFkaXgpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYyODYtXHRcdHJldHVybiAtRUlOVkFMO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjUzMz1zdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcylcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NDAtXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1NDE6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NDItXHRcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NjUxPXN0YXRpYyBpbnQga3ZtcHBjX2Jvb2szc19pbml0X2h2KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NjgyLSNpZmRlZiBDT05GSUdfU01QXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY2ODM6XHRpZiAoIXhpY3Nfb25feGl2ZSgpIFx1MDAyNlx1MDAyNiAha3ZtaHZfb25fcHNlcmllcygpIFx1MDAyNlx1MDAyNlxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02Njg0LVx0ICAgICFsb2NhbF9wYWNhLVx1MDAzZWt2bV9oc3RhdGUueGljc19waHlzKSB7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NzI0LVx0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY3MjU6XHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NzI2LVx0XHRwcl9pbmZvKFwmIzM0O0tWTS1IVjogRW5hYmxpbmcgSVJRIGJ5cGFzc1xcblwmIzM0Oyk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM9NDM5PWxvbmcga3ZtaHZfbmVzdGVkX2luaXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy00NDQtXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo0NDU6XHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ0Ni1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM9NTAwPXZvaWQga3ZtaHZfbmVzdGVkX2V4aXQodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDItXHQvKlxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTAzOlx0ICogTi5CLiB0aGUga3ZtaHZfb25fcHNlcmllcygpIHRlc3QgaXMgdGhlcmUgYmVjYXVzZSBpdCBlbmFibGVzXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDQtXHQgKiB0aGUgY29tcGlsZXIgdG8gcmVtb3ZlIHRoZSBjYWxsIHRvIHBscGFyX2hjYWxsX25vcmV0cygpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTA2LVx0ICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDc6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpIFx1MDAyNlx1MDAyNiBwc2VyaWVzX3BhcnRpdGlvbl90Yikge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTA4LVx0XHRwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfUEFSVElUSU9OX1RBQkxFLCAwKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYz01MTQ9dm9pZCBrdm1odl9mbHVzaF9scGlkKHU2NCBscGlkKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUxNy1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jOjUxODpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MTktXHRcdHJhZGl4X19mbHVzaF9hbGxfbHBpZChscGlkKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYz01MzY9dm9pZCBrdm1odl9zZXRfcHRibF9lbnRyeSh1NjQgbHBpZCwgdTY0IGR3MCwgdTY0IGR3MSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUzNy17XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1Mzg6XHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTM5LVx0XHRtbXVfcGFydGl0aW9uX3RhYmxlX3NldF9lbnRyeShscGlkLCBkdzAsIGR3MSwgdHJ1ZSk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jPTM1PXZvaWQgc3dpdGNoX3BtdV90b19ndWVzdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTc0LVx0LyogQWZ0ZXIgc2F2aW5nIFBNVSwgYmVmb3JlIGxvYWRpbmcgZ3Vlc3QgUE1VLCBmbGlwIHBtY3JlZ3NfaW5fdXNlICovXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmM6NzU6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmMtNzYtXHRcdGJhcnJpZXIoKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmM9MTE4PXZvaWQgc3dpdGNoX3BtdV90b19ob3N0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmMtMTg2LSNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVNcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYzoxODc6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9wOV9wZXJmLmMtMTg4LVx0XHRiYXJyaWVyKCk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM9NTAyPWludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjkwLVx0XHRpZiAoaHZfZW5hYmxlZCkge1xuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6NjkxOlx0XHRcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY5Mi1cdFx0XHRcdGlmIChwc2VyaWVzX3JlbG9jX29uX2V4Y2VwdGlvbigpKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwMi1cdFx0ciA9IDA7XG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3MDM6XHRcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03MDQtXHRcdFx0ciA9IDE7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS90ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5jPTQ1ND1zdGF0aWMgdm9pZCB0ZXN0X2dzX2hvc3R3aWRlX2NvdW50ZXJzKHN0cnVjdCBrdW5pdCAqdGVzdClcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmMtNDYzLVxuYXJjaC9wb3dlcnBjL2t2bS90ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5jOjQ2NDpcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKVxuYXJjaC9wb3dlcnBjL2t2bS90ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5jLTQ2NS1cdFx0a3VuaXRfc2tpcCh0ZXN0LCBcJiMzNDtUaGlzIHRlc3QgbmVlZCBhIGttdi1odiBndWVzdFwmIzM0Oyk7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzEvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI3NjUwCgkJCQkJCQlvdXRwdXQ6IDM3CgkJCQkJCQl0aG91Z2h0czogMTc2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgS1ZNIENvbmZpZ3VyYXRpb24gZm9yIFBvd2VyUEMgU3lzdGVtcyoqCgpPa2F5LCBzbyBJJiMzOTttIGxvb2tpbmcgYXQgdGhpcyBga3ZtaHZfb25fcHNlcmllcygpYCBmdW5jdGlvbiBhbmQgaXRzIGRlZmluaXRpb24gaXMgdGhyb3dpbmcgYSBiaXQgb2YgYSByZWQgZmxhZy4gSXQgc2VlbXMgdG8gZGVwZW5kIG9uIGBDT05GSUdfUFBDX1BTRVJJRVNgLiBUaGlzIG1lYW5zIHRoYXQgaWYgYENPTkZJR19QUENfUFNFUklFU2AgaXNuJiMzOTt0IGVuYWJsZWQsIHRoZW4gdGhlIGZ1bmN0aW9uIHdpbGwgYWx3YXlzIHJldHVybiBgZmFsc2VgLiBJIG5lZWQgdG8gZW5zdXJlIHRoZSBzeXN0ZW0gaXMgY29ycmVjdGx5IGNvbmZpZ3VyZWQgdG8gYWNjb3VudCBmb3IgdGhhdC4gVGhlcmVmb3JlLCBJIG5lZWQgdG8gYWRkIGBQUENfUFNFUklFU2AgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGVuc3VyZSB0aGlzIHNwZWNpZmljIGZ1bmN0aW9uYWxpdHkgaXMgYWRkcmVzc2VkLgoKTm93LCB3YWl0IGEgbWludXRlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gV2FzbiYjMzk7dCBgS1ZNX0JPT0szU182NF9IVmAgZGVwZW5kZW50IG9uIGBQUENfUE9XRVJOVmA/IExldCBtZSBqdXN0IHF1aWNrbHkgcmVmZXIgYmFjayB0byBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYCB0byByZWZyZXNoIG15IG1lbW9yeSBhbmQgbWFrZSBzdXJlIEkgaGF2ZW4mIzM5O3QgbWlzc2VkIGFueXRoaW5nIGNydWNpYWwgaW4gdGhlIGRlcGVuZGVuY3kgY2hhaW4uIEkgbmVlZCB0byBtYWtlIHN1cmUgSSYjMzk7bSBub3Qgb3Zlcmxvb2tpbmcgYW55IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb25zLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMyLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPnJlYWQtZmlsZTwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RmlsZSYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZyYjMzQ7LAogICYjMzQ7Rmlyc3RMaW5lJiMzNDs6IDc5LAogICYjMzQ7TGluZUNvdW50JiMzNDs6IDIwCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtDb250ZW50cyYjMzQ7OiAmIzM0OyAgNzk6XHRjb25maWcgS1ZNX0JPT0szU182NF9IVlxuICA4MDpcdFx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4gIDgxOlx0XHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXHUwMDI2XHUwMDI2IFBQQ19QT1dFUk5WXG4gIDgyOlx0XHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxuICA4MzpcdFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXG4gIDg0Olx0XHRzZWxlY3QgQ01BXG4gIDg1Olx0XHRoZWxwXG4gIDg2Olx0XHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBndWVzdCBrZXJuZWxzIGluXG4gIDg3Olx0XHQgIHZpcnR1YWwgbWFjaGluZXMgb24gUE9XRVI3IGFuZCBuZXdlciBwcm9jZXNzb3JzIHRoYXQgaGF2ZVxuICA4ODpcdFx0ICBoeXBlcnZpc29yIG1vZGUgYXZhaWxhYmxlIHRvIHRoZSBob3N0LlxuICA4OTpcdFxuICA5MDpcdFx0ICBJZiB5b3Ugc2F5IFkgaGVyZSwgS1ZNIHdpbGwgdXNlIHRoZSBoYXJkd2FyZSB2aXJ0dWFsaXphdGlvblxuICA5MTpcdFx0ICBmYWNpbGl0aWVzIG9mIFBPV0VSNyAoYW5kIGxhdGVyKSBwcm9jZXNzb3JzLCBtZWFuaW5nIHRoYXRcbiAgOTI6XHRcdCAgZ3Vlc3Qgb3BlcmF0aW5nIHN5c3RlbXMgd2lsbCBydW4gYXQgZnVsbCBoYXJkd2FyZSBzcGVlZFxuICA5MzpcdFx0ICB1c2luZyBzdXBlcnZpc29yIGFuZCB1c2VyIG1vZGVzLiAgSG93ZXZlciwgdGhpcyBhbHNvIG1lYW5zXG4gIDk0Olx0XHQgIHRoYXQgS1ZNIGlzIG5vdCB1c2FibGUgdW5kZXIgUG93ZXJWTSAocEh5cCksIGlzIG9ubHkgdXNhYmxlXG4gIDk1Olx0XHQgIG9uIFBPV0VSNyBvciBsYXRlciBwcm9jZXNzb3JzLCBhbmQgY2Fubm90IGVtdWxhdGUgYVxuICA5NjpcdFx0ICBkaWZmZXJlbnQgcHJvY2Vzc29yIGZyb20gdGhlIGhvc3QgcHJvY2Vzc29yLlxuICA5NzpcdFxuICA5ODpcdFx0ICBJZiB1bnN1cmUsIHNheSBOLlxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjMzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAyODQyNAoJCQkJCQkJb3V0cHV0OiAzMgoJCQkJCQkJdGhvdWdodHM6IDY5CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKk5hdmlnYXRpbmcgdGhlIFBvd2VyUEMgS2NvbmZpZyBMYW5kc2NhcGUqKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgYEtWTV9CT09LM1NfNjRfSFZgIGNvbmZpZyBvcHRpb24sIGFuZCBpdCYjMzk7cyBwb3BwaW5nIHVwIGEgZGVwZW5kZW5jeSBvbiBgUFBDX1BPV0VSTlZgLiBSaWdodCwgdGhhdCBtYWtlcyBzZW5zZS4gUG93ZXJOViBpcyB0aGUgaHlwZXJ2aXNvciwgc28gYSBCb29rM1MgNjQtYml0IEtWTSBmb3IgUG93ZXJOViB3b3VsZCBuYXR1cmFsbHkgYmUgZGVwZW5kZW50IG9uIGl0cyBwcmVzZW5jZS4KCkJ1dCwgYSBsaXR0bGUgYWxhcm0gYmVsbCBpcyBnb2luZyBvZmYgaW4gbXkgaGVhZC4gSWYgd2UmIzM5O3JlIGVuYWJsaW5nIGBQUENfUE9XRVJOVmAsIGRvZXMgdGhhdCBjYXVzZSBhbnkgY29uZmxpY3RzIHdpdGggYFBQQ19QU0VSSUVTYD8gSGlzdG9yaWNhbGx5LCB0aGVyZSBoYXZlIGJlZW4gaW50ZXJlc3RpbmcgY29tcGF0aWJpbGl0eSBpc3N1ZXMgaW4gdGhlIFBvd2VyUEMgYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHZpcnR1YWxpemF0aW9uIGFuZCBkaWZmZXJlbnQgcGxhdGZvcm0gdHlwZXMuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgd2UmIzM5O3JlIG5vdCBpbmFkdmVydGVudGx5IGNyZWF0aW5nIGEgcHJvYmxlbS4gQmVzdCBwcmFjdGljZSBpcyB0byBjaGVjayB0aGUgcmVsZXZhbnQgS2NvbmZpZyBmaWxlIGltbWVkaWF0ZWx5LiBTbywgbGV0JiMzOTtzIGRpdmUgaW50byBgYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9LY29uZmlnYCBhbmQgc2VlIHdoYXQgdGhlIHJlbGF0aW9uc2hpcHMgYXJlIGRlZmluZWQgdGhlcmUuIExldCYjMzk7cyBzZWUgaWYgdGhlcmUgYXJlIGFueSBleHBsaWNpdCBjb25mbGljdHMgb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGxhaWQgb3V0LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjM0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgUFBDX1BPV0VSTlYmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTEtIyBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWc6Mjpjb25maWcgUFBDX1BPV0VSTlZcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTMtXHRkZXBlbmRzIG9uIFBQQzY0IFx1MDAyNlx1MDAyNiBQUENfQk9PSzNTXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDI4ODQzCgkJCQkJCQlvdXRwdXQ6IDMxCgkJCQkJCQl0aG91Z2h0czogMTgKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPk9rYXksIGhlcmUmIzM5O3MgbXkgdGFrZSBvbiB0aG9zZSB0aG91Z2h0cywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gYXMgaWYgdGhleSB3ZXJlIG15IG93bjoKCioqRGl2aW5nIGludG8gdGhlIFBvd2VyUEMvcFNlcmllcyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpBbHJpZ2h0LCB0aW1lIHRvIGdldCBteSBoYW5kcyBkaXJ0eS4gTGV0JiMzOTtzIHNlZSB3aGF0JiMzOTtzIHdoYXQgaW4gdGhlIGBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0JiMzOTtzIGdvaW5nIG9uIHdpdGggdGhlIHBsYXRmb3JtLXNwZWNpZmljIGNvbmZpZ3VyYXRpb25zIGZvciBwU2VyaWVzIHN5c3RlbXMuIEkgbmVlZCB0byB1bmRlcnN0YW5kIGhvdyB0aGUgYXJjaGl0ZWN0dXJlIGhhbmRsZXMgaXRzIHVuaXF1ZSBoYXJkd2FyZSBjaGFyYWN0ZXJpc3RpY3MuIFdoYXQgZmVhdHVyZXMgYXJlIHN1cHBvcnRlZCwgYW5kIGhvdyBhcmUgdGhleSBjb25kaXRpb25hbGx5IGVuYWJsZWQ/IEkgd2FudCB0byBwaW5wb2ludCB0aGUga2V5IG9wdGlvbnMgYW5kIGRlcGVuZGVuY2llcyB0aGF0IGRlZmluZSBhIG1pbmltYWwsIG9yIGEgZmVhdHVyZS1yaWNoLCBrZXJuZWwgY29uZmlndXJhdGlvbiBmb3IgdGhpcyBhcmNoaXRlY3R1cmUuIERpZ2dpbmcgaW50byB0aGUgS2NvbmZpZyBmaWxlIHNob3VsZCBnaXZlIG1lIHRoYXQgb3ZlcnZpZXcgYW5kIHRoZSBkZXRhaWxlZCBpbnNpZ2h0cyBJIG5lZWQuIEkmIzM5O20gaG9waW5nIHRvIHVuY292ZXIgYW55IG5ldyBvciBub3Rld29ydGh5IGNoYW5nZXMgcmVsYXRlZCB0byBwb3dlciBtYW5hZ2VtZW50LCBoYXJkd2FyZSBkcml2ZXJzLCBvciBmaXJtd2FyZSBpbnRlZ3JhdGlvbiwgYW5kIHJlbGF0ZSB0aGVzZSB0byBteSBjdXJyZW50IHByb2plY3QuIExldCYjMzk7cyBnZXQgdG8gaXQuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU5PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0O2NvbmZpZyBQUENfUFNFUklFUyYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZzoyOmNvbmZpZyBQUENfUFNFUklFU1xuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMy1cdGRlcGVuZHMgb24gUFBDNjQgXHUwMDI2XHUwMDI2IFBQQ19CT09LM1Ncbi0tXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZz05Mj1jb25maWcgTFBBUkNGR1xuLS1cbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTk4LVxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWc6OTk6Y29uZmlnIFBQQ19QU0VSSUVTX0RFQlVHXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0xMDAtXHRkZXBlbmRzIG9uIFBQQ19QU0VSSUVTIFx1MDAyNlx1MDAyNiBQUENfRUFSTFlfREVCVUdcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zNy8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMjkyOTMKCQkJCQkJCW91dHB1dDogNDQKCQkJCQkJCXRob3VnaHRzOiA0NDkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqS2VybmVsIENvbmZpZ3VyYXRpb24gQ29uc2lkZXJhdGlvbnMgZm9yIFBvd2VyUEMgRW52aXJvbm1lbnRzKioKCk9rYXksIHNvIEkmIzM5O20gdGhpbmtpbmcgYWJvdXQgUG93ZXJQQyBrZXJuZWwgY29uZmlndXJhdGlvbnMgYW5kIHdoZXRoZXIgd2UgY2FuIGVuYWJsZSBib3RoIGBQUENfUE9XRVJOVmAgYW5kIGBQUENfUFNFUklFU2Agc2ltdWx0YW5lb3VzbHkuIFRoZSBxdWljayBhbnN3ZXIgaXMgeWVzLCBpbiBtb2Rlcm4ga2VybmVscywgaXQmIzM5O3MgcG9zc2libGUgdG8gYnVpbGQgYSBzaW5nbGUga2VybmVsIGltYWdlIHRoYXQgY2FuIGJvb3Qgb24gYm90aCBiYXJlLW1ldGFsIFBvd2VyTlYgYW5kIHZpcnR1YWxpemVkIHBTZXJpZXMgc3lzdGVtcy4gVGhlcmVmb3JlLCBzZXR0aW5nIGJvdGggYFBQQ19QT1dFUk5WYCBhbmQgYFBQQ19QU0VSSUVTYCBzZWVtcyBwZXJmZWN0bHkgdmFsaWQuCgpIb3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgZGVwZW5kZW5jaWVzLiBJIHJlY2FsbCB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBkZXBlbmRzIG9uIGBQUENfUE9XRVJOVmAsIGFuZCBga3ZtaHZfb25fcHNlcmllcygpYCByZXF1aXJlcyBgUFBDX1BTRVJJRVNgLiBUaGVyZWZvcmUsIGVuYWJsaW5nIGJvdGggd291bGQgYmUgcmVxdWlyZWQsIHNvIHRoYXQgd2UgY2FuIGVuc3VyZSBib3RoIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBhdmFpbGFibGUgYW5kIGBrdm1odl9vbl9wc2VyaWVzKClgIGNhbiBldmFsdWF0ZSB0byB0cnVlLgoKQnV0IEkmIzM5O20gYSBiaXQgY29uY2VybmVkIGFib3V0IGhvdyBga3ZtaHZfb25fcHNlcmllcygpYCBhY3R1YWxseSBiZWhhdmVzLiBMZXQgbWUgZG91YmxlLWNoZWNrIHRoZSBsb2dpYy4gSXQmIzM5O3MgY29uZGl0aW9uYWxseSBjb21waWxlZDoKCmBgYGMKI2lmZGVmIENPTkZJR19QUENfUFNFUklFUwpzdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfb25fcHNlcmllcyh2b2lkKQp7CglyZXR1cm4gIWNwdV9oYXNfZmVhdHVyZShDUFVfRlRSX0hWTU9ERSk7Cn0KI2Vsc2UKc3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZCkKewoJcmV0dXJuIGZhbHNlOwp9CiNlbmRpZgpgYGAKCklmIGBQUENfUFNFUklFU2AgaXMgZW5hYmxlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9IVk1PREUpYC4gTm93LCBpZiB3ZSBib290IHRoaXMgb24gUUVNVSBhcyBhIHBTZXJpZXMgZ3Vlc3QsIGBDUFVfRlRSX0hWTU9ERWAgKmlzbiYjMzk7dCogc2V0LCBzbyBga3ZtaHZfb25fcHNlcmllcygpYCB3b3VsZCByZXR1cm4gYHRydWVgLiBJbiB0aGlzIHNjZW5hcmlvLCBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2Agd2lsbCBwcm9jZWVkLCBhbmQgcmV0dXJuIDAuCgpIb3dldmVyLCBpZiB3ZSBib290IG9uIFBvd2VyTlYgKGJhcmUgbWV0YWwpLCBgQ1BVX0ZUUl9IVk1PREVgICppcyogc2V0LCBzbyBga3ZtaHZfb25fcHNlcmllcygpYCB3b3VsZCByZXR1cm4gYGZhbHNlYC4gQWgsIHRoaXMgaXMgd2hlcmUgaXQgZ2V0cyBhIGxpdHRsZSBoYXp5Li4uIGEgcmV0dXJuIG9mIGZhbHNlIG1lYW5zIHRoYXQgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHdpbGwgcmV0dXJuIGAtRUlOVkFMYC4gSXMgdGhhdCB0aGUgZXhwZWN0ZWQgYmVoYXZpb3I/IEkgbmVlZCB0byBnbyBiYWNrIGFuZCByZXZpc2l0IHRoYXQgcGF0Y2guIFNvbWV0aGluZyBkb2VzbiYjMzk7dCBmZWVsIHF1aXRlIHJpZ2h0IHdpdGggdGhhdCBwYXJ0IG9mIHRoZSBsb2dpYy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zOC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5yZWFkLWZpbGU8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0ZpbGUmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jJiMzNDssCiAgJiMzNDtGaXJzdExpbmUmIzM0OzogNjUzMywKICAmIzM0O0xpbmVDb3VudCYjMzQ7OiA0MAp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7Q29udGVudHMmIzM0OzogJiMzNDs2NTMzOlx0c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXG42NTM0Olx0e1xuNjUzNTpcdFx0c3RydWN0IGRldmljZV9ub2RlICpucDtcbjY1MzY6XHRcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcbjY1Mzc6XHRcdGNvbnN0IF9fYmUzMiAqcHJvcCA9IE5VTEw7XG42NTM4Olx0XHRsb25nIHJjID0gLUVJTlZBTDtcbjY1Mzk6XHRcdHUzMiBjcHVfdmVyc2lvbjtcbjY1NDA6XHRcbjY1NDE6XHRcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbjY1NDI6XHRcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbjY1NDM6XHRcdFx0XHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xuNjU0NDpcdFx0XHRcdGNhcGFiaWxpdGllcyA9IG5lc3RlZF9jYXBhYmlsaXRpZXM7XG42NTQ1Olx0XHRcdFx0cmMgPSAwO1xuNjU0NjpcdFx0XHR9IGVsc2Uge1xuNjU0NzpcdFx0XHRcdGZvcl9lYWNoX25vZGVfYnlfdHlwZShucCwgXCYjMzQ7Y3B1XCYjMzQ7KSB7XG42NTQ4Olx0XHRcdFx0XHRwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBcJiMzNDtjcHUtdmVyc2lvblwmIzM0OywgTlVMTCk7XG42NTQ5Olx0XHRcdFx0XHRpZiAocHJvcCkge1xuNjU1MDpcdFx0XHRcdFx0XHRjcHVfdmVyc2lvbiA9IGJlMzJfdG9fY3B1cChwcm9wKTtcbjY1NTE6XHRcdFx0XHRcdFx0b2Zfbm9kZV9wdXQobnApO1xuNjU1MjpcdFx0XHRcdFx0XHRicmVhaztcbjY1NTM6XHRcdFx0XHRcdH1cbjY1NTQ6XHRcdFx0XHR9XG42NTU1Olx0XHRcdFx0aWYgKCFwcm9wKVxuNjU1NjpcdFx0XHRcdFx0cmV0dXJuIC1FSU5WQUw7XG42NTU3Olx0XHRcdFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXG42NTU4Olx0XHRcdFx0XHRcdFx0XHQgICAgXHUwMDI2Y2FwYWJpbGl0aWVzKTtcbjY1NTk6XHRcdFx0fVxuNjU2MDpcdFx0fVxuNjU2MTpcdFxuNjU2MjpcdFx0aWYgKHJjIFx1MDAzYyAwKVxuNjU2MzpcdFx0XHRyZXR1cm4gcmM7XG42NTY0Olx0XG42NTY1Olx0XHRob3N0X2NhcHMtXHUwMDNlY29tcGF0X2NhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcyBcdTAwMjYgS1ZNX1BQQ19DT01QQVRfQklUTUFTSztcbjY1NjY6XHRcbjY1Njc6XHRcdHJldHVybiByYztcbjY1Njg6XHR9XG42NTY5Olx0XG42NTcwOlx0c3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XG42NTcxOlx0XHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXG42NTcyOlx0XHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MzkvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDMwOTMzCgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNDE2CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgTmVzdGVkIEtWTSBDUFUgQ29tcGF0aWJpbGl0eSBJb2N0bCoqCgpPa2F5LCBsZXQmIzM5O3MgYnJlYWsgdGhpcyBkb3duLiBJZiBga3ZtaHZfb25fcHNlcmllcygpYCByZXR1cm5zIGZhbHNlLCB0aGUgcmV0dXJuIGNvZGUgKGByY2ApIGlzIGAtRUlOVkFMYCwgYW5kIHRoZSBmdW5jdGlvbiBpbW1lZGlhdGVseSByZXR1cm5zIGAtRUlOVkFMYC4gSW5pdGlhbGx5LCBpdCBzZWVtZWQgbGlrZSB0aGlzIG1pZ2h0IGxpbWl0IHN1cHBvcnQgdG8gcHNlcmllcyBzeXN0ZW1zLiBUaGUgY29tbWl0IG1lc3NhZ2UgcHJvdmlkZXMgYSBjcnVjaWFsIGNsdWU6ICYjMzQ7VGhpcyBpb2N0bCBwcm92aWRlcyB1c2Vyc3BhY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQ1BVIGNvbXBhdGliaWxpdHkgbW9kZXMgc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGhvc3QgcHJvY2Vzc29yIGZvciBib290aW5nIHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0cyBvbiBLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuJiMzNDsKClRoZSBtZW50aW9uIG9mICYjMzQ7S1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpJiMzNDsgdHJpZ2dlcmVkIGEgcmVkIGZsYWcuIElmIGl0JiMzOTtzIFBvd2VyTlYsIGBrdm1odl9vbl9wc2VyaWVzKClgICpzaG91bGQqIGJlIGZhbHNlISBBbmQsIGlmIGBrdm1odl9vbl9wc2VyaWVzKClgIGlzIGluZGVlZCBmYWxzZSwgdGhlIGByY2AgaXMgYC1FSU5WQUxgLCBjYXVzaW5nIHRoZSBmdW5jdGlvbiB0byByZXR1cm4gYC1FSU5WQUxgLiBJIGZlbHQgYSBuZWVkIHRvIHJldmlzaXQgbXkgYXNzdW1wdGlvbnMuCgpPa2F5LCBsZXQgbWUgcmVyZWFkIHRoZSBjb21taXQgbWVzc2FnZTogJiMzNDsuLi5mb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb24gS1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLiYjMzQ7IEFoLCBub3cgSSBzZWUuICYjMzQ7S1ZNIG9uIFBvd2VyTlYmIzM0OyBtZWFucyB0aGUgKkwxKiBndWVzdCBpcyBydW5uaW5nIG9uIFBvd2VyTlYuIFNvLCB0aGUgYmFyZSBtZXRhbCBob3N0IChMMCkgaXMgUG93ZXJOViwgYW5kIHRoZSBndWVzdCBvbiB0b3AgKEwxKSBpcyBhIHBzZXJpZXMgZ3Vlc3QuIFRoZSBuZXN0ZWQgZ3Vlc3QgKEwyKSBydW5zIHdpdGhpbiB0aGF0IHBzZXJpZXMgZ3Vlc3QgKEwxKS4gVGhlIGlvY3RsIGlzIHRoZXJlZm9yZSBjYWxsZWQgZnJvbSBRRU1VLCB3aGljaCBpcyBydW5uaW5nICppbnNpZGUqIHRoZSBMMSBwc2VyaWVzIGd1ZXN0LgoKVGhlcmVmb3JlLCBiZWNhdXNlIHdlIGFyZSBpbiBhbiBMMSBwc2VyaWVzIGd1ZXN0LCBga3ZtaHZfb25fcHNlcmllcygpYCAqbXVzdCogYmUgdHJ1ZS4gU28sIHRoaXMgZnVuY3Rpb25hbGl0eSAqaXMqIG9ubHkgc3VwcG9ydGVkIHdoZW4gcnVubmluZyBhcyBhIHBzZXJpZXMgZ3Vlc3QuIEFuZCBzaW5jZSBzeXprYWxsZXIgcnVucyBpbiBhIHBzZXJpZXMgZ3Vlc3QgKHZpYSBRRU1VIHdpdGggYC1NIHBzZXJpZXNgKSwgaXQgYWxsIG1ha2VzIHNlbnNlLiBUaGUgY29kZSBwYXRoIHNob3VsZCBiZSBjb3JyZWN0IGFuZCwgYGt2bWh2X29uX3BzZXJpZXMoKWAgd2lsbCBldmFsdWF0ZSB0byB0cnVlLiBOb3csIGxldCYjMzk7cyBtb3ZlIG9uIHRvIGBrdm1odl9pc19uZXN0ZWR2MigpYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7a3ZtaHZfaXNfbmVzdGVkdjImIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMvJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg9MzIwPXZvaWQga3ZtcHBjX2dpdmV1cF9mYWMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1bG9uZyBmYWMpO1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzI0LVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaDozMjU6ZXh0ZXJuIHN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIF9fa3ZtaHZfaXNfbmVzdGVkdjI7XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMyNi1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg6MzI3OnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9pc19uZXN0ZWR2Mih2b2lkKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zMjgte1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaDozMjk6XHRyZXR1cm4gc3RhdGljX2JyYW5jaF91bmxpa2VseShcdTAwMjZfX2t2bWh2X2lzX25lc3RlZHYyKTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzMwLX1cbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oPTMzMj1zdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfaXNfbmVzdGVkdjEodm9pZClcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzMzLXtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg6MzM0Olx0cmV0dXJuICFzdGF0aWNfYnJhbmNoX2xpa2VseShcdTAwMjZfX2t2bWh2X2lzX25lc3RlZHYyKTtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzM1LX1cbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMzOC1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg6MzM5OnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9pc19uZXN0ZWR2Mih2b2lkKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zNDAte1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg9MzU2PXN0YXRpYyBpbmxpbmUgaW50IGt2bWh2X25lc3RlZHYyX3JlbG9hZF9wdHJlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzU4LXtcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg6MzU5Olx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM2MC1cdFx0cmV0dXJuIF9fa3ZtaHZfbmVzdGVkdjJfcmVsb2FkX3B0cmVncyh2Y3B1LCByZWdzKTtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oPTM2Mz1zdGF0aWMgaW5saW5lIGludCBrdm1odl9uZXN0ZWR2Ml9tYXJrX2RpcnR5X3B0cmVncyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zNjUte1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaDozNjY6XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzY3LVx0XHRyZXR1cm4gX19rdm1odl9uZXN0ZWR2Ml9tYXJrX2RpcnR5X3B0cmVncyh2Y3B1LCByZWdzKTtcbi0tXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oPTM3MT1zdGF0aWMgaW5saW5lIGludCBrdm1odl9uZXN0ZWR2Ml9tYXJrX2RpcnR5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTE2IGlkZW4pXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM3Mi17XG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjM3MzpcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zNzQtXHRcdHJldHVybiBfX2t2bWh2X25lc3RlZHYyX21hcmtfZGlydHkodmNwdSwgaWRlbik7XG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaD0zNzg9c3RhdGljIGlubGluZSBpbnQga3ZtaHZfbmVzdGVkdjJfY2FjaGVkX3JlbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBpZGVuKVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zNzkte1xuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaDozODA6XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzgxLVx0XHRyZXR1cm4gX19rdm1odl9uZXN0ZWR2Ml9jYWNoZWRfcmVsb2FkKHZjcHUsIGlkZW4pO1xuLS1cbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmg9NjE0PXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9vbl9wc2VyaWVzKHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaC02MjItXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oOjYyMzpzdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfaXNfbmVzdGVkdjIodm9pZClcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjI0LXtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jPTI5Nj1zdGF0aWMgaW50IGt2bXBwY19ib29rM3NfaXJxcHJpb19kZWxpdmVyKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jLTMwNC1cdGNhc2UgQk9PSzNTX0lSUVBSSU9fREVDUkVNRU5URVI6XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jOjMwNTpcdFx0ZGVsaXZlciA9ICFrdm1odl9pc19uZXN0ZWR2MigpIFx1MDAyNlx1MDAyNiAoa3ZtcHBjX2dldF9tc3IodmNwdSkgXHUwMDI2IE1TUl9FRSkgXHUwMDI2XHUwMDI2ICFjcml0O1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYy0zMDYtXHRcdHZlYyA9IEJPT0szU19JTlRFUlJVUFRfREVDUkVNRU5URVI7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYy0zMDgtXHRjYXNlIEJPT0szU19JUlFQUklPX0VYVEVSTkFMOlxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYzozMDk6XHRcdGRlbGl2ZXIgPSAha3ZtaHZfaXNfbmVzdGVkdjIoKSBcdTAwMjZcdTAwMjYgKGt2bXBwY19nZXRfbXNyKHZjcHUpIFx1MDAyNiBNU1JfRUUpIFx1MDAyNlx1MDAyNiAhY3JpdDtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmMtMzEwLVx0XHR2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTM1PXVuc2lnbmVkIGxvbmcgX19rdm1odl9jb3B5X3RvZnJvbV9ndWVzdF9yYWRpeChpbnQgbHBpZCwgaW50IHBpZCxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00Mi1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjQzOlx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00NC1cdFx0cmV0dXJuIEhfVU5TVVBQT1JURUQ7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00MTQ9c3RhdGljIGludCBrdm1wcGNfc2V0X2FyY2hfY29tcGF0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGFyY2hfY29tcGF0KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNDYwLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NjE6XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpIFx1MDAyNlx1MDAyNiBrdm1odl9pc19uZXN0ZWR2MigpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ2Mi1cdFx0Lypcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTcyOD1zdGF0aWMgdm9pZCBrdm1wcGNfdXBkYXRlX3ZwYXMoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNzQxLVx0XHRpZiAob2xkX3ZwYS5waW5uZWRfYWRkcikge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo3NDI6XHRcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTc0My1cdFx0XHRcdGt2bWh2X25lc3RlZHYyX3NldF92cGEodmNwdSwgfjB1bGwpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNzQ4LVx0XHRcdGluaXRfdnBhKHZjcHUsIHZjcHUtXHUwMDNlYXJjaC52cGEucGlubmVkX2FkZHIpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo3NDk6XHRcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTc1MC1cdFx0XHRcdGt2bWh2X25lc3RlZHYyX3NldF92cGEodmNwdSwgX19wYSh2Y3B1LVx1MDAzZWFyY2gudnBhLnBpbm5lZF9hZGRyKSk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz0xNjI5PXN0YXRpYyBpbnQga3ZtcHBjX2hhbmRsZV9leGl0X2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTE2NDQtXHQgKi9cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTY0NTpcdGlmICgha3ZtaHZfaXNfbmVzdGVkdjIoKSBcdTAwMjZcdTAwMjYgKF9fa3ZtcHBjX2dldF9tc3JfaHYodmNwdSkgXHUwMDI2IE1TUl9IVikpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMTY0Ni1cdFx0cHJpbnRrKEtFUk5fRU1FUkcgXCYjMzQ7S1ZNIHRyYXAgaW4gSFYgbW9kZSFcXG5cJiMzNDspO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMTczNS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTczNjpcdFx0aWYgKCFrdm1odl9pc19uZXN0ZWR2MigpIFx1MDAyNlx1MDAyNiB1bmxpa2VseShfX2t2bXBwY19nZXRfbXNyX2h2KHZjcHUpIFx1MDAyNiBNU1JfUFIpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTE3MzctXHRcdFx0Lypcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTI5NjA9c3RhdGljIGludCBrdm1wcGNfY29yZV92Y3B1X2NyZWF0ZV9odihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0yOTgzLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzoyOTg0Olx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMjk4NS1cdFx0ZXJyID0ga3ZtaHZfbmVzdGVkdjJfdmNwdV9jcmVhdGUodmNwdSwgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm5lc3RlZHYyX2lvKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTMxMzk9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9mcmVlX2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTMxNDUtXHRzcGluX3VubG9jayhcdTAwMjZ2Y3B1LVx1MDAzZWFyY2gudnBhX3VwZGF0ZV9sb2NrKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MzE0NjpcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0zMTQ3LVx0XHRrdm1odl9uZXN0ZWR2Ml92Y3B1X2ZyZWUodmNwdSwgXHUwMDI2dmNwdS1cdTAwM2VhcmNoLm5lc3RlZHYyX2lvKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUwODQ9c3RhdGljIGludCBrdm1wcGNfdmNwdV9ydW5faHYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTE2OC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTE2OTpcdFx0XHRpZiAoIWt2bWh2X2lzX25lc3RlZHYyKCkgXHUwMDI2XHUwMDI2IFdBUk5fT05fT05DRShfX2t2bXBwY19nZXRfbXNyX2h2KHZjcHUpIFx1MDAyNiBNU1JfUFIpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUxNzAtXHRcdFx0XHQvKlxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NTQxMj12b2lkIGt2bXBwY191cGRhdGVfbHBjcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbHBjciwgdW5zaWduZWQgbG9uZyBtYXNrKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTQzNC1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTQzNTpcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU0MzYtXHRcdHN0cnVjdCBrdm1fdmNwdSAqdmNwdTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTU2OTc9c3RhdGljIGludCBrdm1wcGNfY29yZV9pbml0X3ZtX2h2KHN0cnVjdCBrdm0gKmt2bSlcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU3MDctXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjU3MDg6XHRpZiAoIWt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTcwOS1cdFx0bHBpZCA9IGt2bXBwY19hbGxvY19scGlkKCk7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01NzE4LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo1NzE5Olx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTcyMC1cdFx0bG9uZyByYztcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU4MTMtXHRcdGlmIChyZXQpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTgxNDpcdFx0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTgxNS1cdFx0XHRcdHBscGFyX2d1ZXN0X2RlbGV0ZSgwLCBrdm0tXHUwMDNlYXJjaC5scGlkKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTU4ODc9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfZGVzdHJveV92bV9odihzdHJ1Y3Qga3ZtICprdm0pXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01OTA2LVx0XHRcdHV2X3N2bV90ZXJtaW5hdGUoa3ZtLVx1MDAzZWFyY2gubHBpZCk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjU5MDc6XHRcdGlmICgha3ZtaHZfaXNfbmVzdGVkdjIoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTkwOC1cdFx0XHRrdm1odl9zZXRfcHRibF9lbnRyeShrdm0tXHUwMDNlYXJjaC5scGlkLCAwLCAwKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU5MTAtXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjU5MTE6XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01OTEyLVx0XHRrdm1odl9mbHVzaF9scGlkKGt2bS1cdTAwM2VhcmNoLmxwaWQpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjMyMD1zdGF0aWMgaW50IGt2bWh2X2VuYWJsZV9uZXN0ZWQoc3RydWN0IGt2bSAqa3ZtKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjMyNy1cdFx0cmV0dXJuIC1FTk9ERVY7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjYzMjg6XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjMyOS1cdFx0cmV0dXJuIC1FTk9ERVY7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTMzPXN0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0MS1cdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjU0MjpcdFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0My1cdFx0XHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xuLS1cbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTQzOT1sb25nIGt2bWh2X25lc3RlZF9pbml0KHZvaWQpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNDY4LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NDY5Olx0XHRzdGF0aWNfYnJhbmNoX2VuYWJsZShcdTAwMjZfX2t2bWh2X2lzX25lc3RlZHYyKTtcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ3MC1cdFx0cmV0dXJuIDA7XG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM9NTM2PXZvaWQga3ZtaHZfc2V0X3B0YmxfZW50cnkodTY0IGxwaWQsIHU2NCBkdzAsIHU2NCBkdzEpXG4tLVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTQ5LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTUwOlx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01NTEtXHRcdGt2bWh2X25lc3RlZHYyX3NldF9wdGJsX2VudHJ5KGxwaWQsIGR3MCwgZHcxKTtcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWR2Mi5jLTI5LVxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkdjIuYzozMDpzdHJ1Y3Qgc3RhdGljX2tleV9mYWxzZSBfX2t2bWh2X2lzX25lc3RlZHYyIF9fcmVhZF9tb3N0bHk7XG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWR2Mi5jOjMxOkVYUE9SVF9TWU1CT0xfR1BMKF9fa3ZtaHZfaXNfbmVzdGVkdjIpO1xuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkdjIuYy0zMi1cbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmM9Mzk4PXN0YXRpYyBpbnQgX19pbml0IGt2bXBwY19yZWdpc3Rlcl9wbXUodm9pZClcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmMtNDAyLVx0Lyogb25seSBzdXBwb3J0IGV2ZW50cyBmb3IgbmVzdGVkdjIgcmlnaHQgbm93ICovXG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmM6NDAzOlx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcbmFyY2gvcG93ZXJwYy9wZXJmL2t2bS1odi1wbXUuYy00MDQtXHRcdHJjID0ga3ZtcHBjX2luaXRfaG9zdHdpZGUoKTtcbi0tXG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmM9NDIwPXN0YXRpYyB2b2lkIF9fZXhpdCBrdm1wcGNfdW5yZWdpc3Rlcl9wbXUodm9pZClcbmFyY2gvcG93ZXJwYy9wZXJmL2t2bS1odi1wbXUuYy00MjEte1xuYXJjaC9wb3dlcnBjL3BlcmYva3ZtLWh2LXBtdS5jOjQyMjpcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmMtNDIzLVx0XHRrdm1wcGNfY2xlYW51cF9ob3N0d2lkZSgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQxLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzNjUyNAoJCQkJCQkJb3V0cHV0OiAxOTQKCQkJCQkJCXRob3VnaHRzOiAxMjE1CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFBvd2VyUEMgS1ZNIENvbXBhdGliaWxpdHkgQ2FwYWJpbGl0aWVzKioKCk9rYXksIGxldCYjMzk7cyBicmVhayB0aGlzIGRvd24uIEZyb20gYSBmdW5jdGlvbmFsaXR5IHBlcnNwZWN0aXZlLCB0aGlzIHBhdGNoIGxvb2tzIHNvbGlkOyBga3ZtaHZfaXNfbmVzdGVkdjIoKWAgZ2V0cyBlbmFibGVkIGluIGBrdm1odl9uZXN0ZWRfaW5pdCgpYCBpZiB0aGUgaG9zdCBzdXBwb3J0cyBuZXN0ZWR2Mi4gV2UmIzM5O3JlIHVzaW5nIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB3aXRoIGBuZXN0ZWRfY2FwYWJpbGl0aWVzYCBpbiB0aGUgbmVzdGVkdjIgY2FzZS4gSWYgaXQmIzM5O3MgbmVzdGVkdjEgb3IgcHNlcmllcywgd2UgYXJlIHJlYWRpbmcgYGNwdS12ZXJzaW9uYCBmcm9tIHRoZSBkZXZpY2UgdHJlZS4gQm90aCBwYXRocyBhcmUgd29ya2luZy4gVGhpcyBpcyBzb21ldGhpbmcgdGhhdCBuZWVkcyBmdXp6ZWQuCgpUaGUga2V5IGNvbmZpZ3VyYXRpb25zIHRvIGVuYWJsZSBhcmUgZ29pbmcgdG8gYmU6IGBLVk1fQk9PSzNTXzY0X0hWYCwgYFBQQ19QT1dFUk5WYCwgYW5kIGBQUENfUFNFUklFU2AuIEhvbGQgb24sIGBLVk1fQk9PSzNTXzY0X0hWYCByZXF1aXJlcyBgS1ZNX0JPT0szU182NGAgYW5kIGBQUENfUE9XRVJOVmAuIExldCYjMzk7cyBrZWVwIHRoYXQgaW4gbWluZC4KCldlJiMzOTtyZSBkZWFsaW5nIHdpdGggdGhlIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIEl0IHNlZW1zIGxpa2UgdGhlIGNvcmUgbG9naWMgcmVzaWRlcyBpbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgYW5kLCBpbXBvcnRhbnRseSwgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2Agd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jYC4gU28gdGhvc2UgYXJlIG91ciBwcmltYXJ5IGZvY3VzIHN5bWJvbHMgZm9yIGZ1enppbmcuCgpOb3csIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBoYW5kbGVzIHRoYXQgaW9jdGwuIFNob3VsZCB3ZSBpbmNsdWRlIGl0PyBObywgYmVjYXVzZSBpdCYjMzk7cyBhIGdlbmVyaWMgaG90LXBhdGggZm9yIFZNIGlvY3Rscywgbm90IHNwZWNpZmljIHRvIHRoaXMgcGF0Y2guIFRoaXMgaW9jdGwgbG9naWMgaXMgaW5saW5lIGluIHRoZSBgc3dpdGNoYCBzdGF0ZW1lbnQgb2YgYGt2bV9hcmNoX3ZtX2lvY3RsYCBzbywgd2UgY2FuJiMzOTt0IHJlYWxseSBmb2N1cyBpdC4KCkxldCYjMzk7cyBkb3VibGUtY2hlY2sgdGhlIGBFbmFibGVDb25maWdzYCBhZ2Fpbi4gYEtWTV9CT09LM1NfNjRfSFZgLCBgUFBDX1BPV0VSTlZgLCBhbmQgYFBQQ19QU0VSSUVTYC4gV2Ugc2hvdWxkIGFkZCBgS1ZNX0JPT0szU182NGAgdG9vIGJlY2F1c2UgaXQgaXMgbmVlZGVkIGJ5IGBLVk1fQk9PSzNTXzY0X0hWYC4gU3l6a2FsbGVyIG1heSBvciBtYXkgbm90IGVuYWJsZSBwbGF0Zm9ybSBjb25maWdzIGxpa2UgYFBQQ19QT1dFUk5WYCBhbmQgYFBQQ19QU0VSSUVTYCBieSBkZWZhdWx0LCBidXQgbGlzdGluZyB0aGVtIGlzIHRoZSByaWdodCBhcHByb2FjaC4KClNvLCB0aGUgcmVhc29uaW5nIGlzIHRoaXM6IHRoZSBwYXRjaCBpbnRyb2R1Y2VzIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AsIHdoaWNoIGNvcGllcyBkYXRhIHRvL2Zyb20gdXNlcnNwYWNlIGFuZCBjYWxscyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIFRoaXMgYWRkcyBuZXcsIGV4ZWN1dGFibGUgY29kZSB0aGF0IHdlIGNhbiBoaXQgd2hlbiBydW5uaW5nIGEgcHNlcmllcyBtYWNoaW5lIHdpdGggUUVNVSwgc28gd2Ugc2hvdWxkIGZ1enogaXQuCgpKdXN0IHRvIGJlIHN1cmUsIGBrdm1wcGNfaGFzaF92M19wb3NzaWJsZWAgaXNuJiMzOTt0IG1vZGlmaWVkLiBga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbmAgaXMgY2hhbmdlZCB0byByZXR1cm4gMSBmb3IgYEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTYCwgYnV0IHRoYXQmIzM5O3MgYSBnZW5lcmljIGNoZWNrIHNvIHdlJiMzOTtsbCBza2lwIGl0LgoKU28sIG91ciBrZXkgYEZvY3VzU3ltYm9sc2AgYXJlOiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgYW5kIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgLgoKQW5kLCBmb3IgYEVuYWJsZUNvbmZpZ3NgLCB3ZSB3YW50OiBgS1ZNX0JPT0szU182NF9IVmAsIGBQUENfUE9XRVJOVmAsIGBQUENfUFNFUklFU2AsIGFuZCBgS1ZNX0JPT0szU182NGAuIFNwZWNpZmljYWxseSwgYEtWTV9CT09LM1NfNjRfSFZgIGRlcGVuZHMgb24gYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgLiBXZSBuZWVkIGBQUENfUFNFUklFU2Agc28gdGhhdCBga3ZtaHZfb25fcHNlcmllcygpYCBjYW4gYmUgdHJ1ZS4gVGhhdCBjb21iaW5hdGlvbiBpcyBjb3JyZWN0LgoKTGV0JiMzOTtzIGNhbGwgYHNldC1yZXN1bHRzYC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Mi8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMDk6NTk8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5FcnJvcjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X0hWLCBQUENfUE9XRVJOViwgUFBDX1BTRVJJRVM8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IFsKICAgICYjMzQ7S1ZNX0JPT0szU182NF9IViYjMzQ7LAogICAgJiMzNDtQUENfUE9XRVJOViYjMzQ7LAogICAgJiMzNDtQUENfUFNFUklFUyYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OywKICAgICYjMzQ7a3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7ZXJyb3ImIzM0OzogJiMzNDt0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX0JPT0szU182NF9IViwgUFBDX1BPV0VSTlYsIFBQQ19QU0VSSUVTJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQzLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiAzODgxOAoJCQkJCQkJb3V0cHV0OiA0MAoJCQkJCQkJdGhvdWdodHM6IDI3CgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5IZXJlJiMzOTtzIG15IGF0dGVtcHQgYXQgc3VtbWFyaXppbmcgdGhlIHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZToKCioqQ29uZmlndXJhdGlvbiBEaWxlbW1hKioKCk9rYXksIGhvbGQgb24gYSBtaW51dGUuIFNvbWV0aGluZyYjMzk7cyBub3QgcmlnaHQuIFRoZSBjb25maWd1cmF0aW9uIG9wdGlvbnMgSSB3YXMgZXhwZWN0aW5nLi4uIHRoZXkmIzM5O3JlIG5vdCBwcmVzZW50PyBUaGF0JiMzOTtzIHVuZXhwZWN0ZWQuIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBvdmVyc2lnaHQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gdGhlIFBvd2VyUEMgS1ZNIGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBsZXQmIzM5O3MgcmV2aXNpdCBgYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGF0IEkmIzM5O20gbm90IG92ZXJsb29raW5nIGEgY29uZGl0aW9uYWwgaW5jbHVzaW9uIG9yIGEgZGVwZW5kZW5jeSB0aGF0IEkmIzM5O3ZlIG1pc3NlZC4gQSBkZWVwZXIgZGl2ZSBpcyByZXF1aXJlZCB0byBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIG1pc3NpbmcgY29uZmlnLiBJdCBpcyBiZXN0IHRvIG5vdCB0YWtlIGFueXRoaW5nIGZvciBncmFudGVkLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQ0LzI8L3RkPgoJCQk8dGQ+MjAyNi8wNy8wMSAwOTo1OTwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtjb25maWcgS1ZNX0JPT0szU182NF9IViYjMzQ7LAogICYjMzQ7UGF0aFByZWZpeCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mj1jb25maWcgS1ZNX0JPT0szU182NFxuLS1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTgwLVx0dHJpc3RhdGUgXCYjMzQ7S1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XCYjMzQ7XG4mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+NDUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA3LzAxIDA5OjU5PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDM5MTQ1CgkJCQkJCQlvdXRwdXQ6IDM0CgkJCQkJCQl0aG91Z2h0czogNzEKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgS2NvbmZpZyBJc3N1ZSoqCgpPa2F5LCBob2xkIG9uIGEgc2Vjb25kLiBJIGRpc3RpbmN0bHkgcmVtZW1iZXIgc2VlaW5nIGBLVk1fQk9PSzNTXzY0X0hWYCBkZWZpbmVkIHNvbWV3aGVyZS4gU28sIHdoeSBkaWQgdGhlIHByZXZpb3VzIG91dHB1dCBjbGFpbSBpdCB3YXNuJiMzOTt0IHJlY29nbml6ZWQ/IFRoaXMgaXMgZnJ1c3RyYXRpbmcsIGl0JiMzOTtzIHVzdWFsbHkgc29tZXRoaW5nIHN0cmFpZ2h0Zm9yd2FyZC4uLiBMZXQmIzM5O3Mgc2VlLCBwZXJoYXBzIGl0JiMzOTtzIG5vdCBkaXJlY3RseSBpbmNsdWRlZCBpbiB0aGUgdG9wLWxldmVsIGBLY29uZmlnYCBmaWxlLiBPciwgbWF5YmUgSSYjMzk7bSBtaXNyZW1lbWJlcmluZyB0aGUgKmV4YWN0KiBuYW1lIGFuZCB0aGVyZSYjMzk7cyBhIHNsaWdodCB2YXJpYXRpb24gSSYjMzk7bSBtaXNzaW5nLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgc291cmNlLiBJJiMzOTtsbCBuZWVkIHRvIGRpZyBkZWVwZXIgZm9yIGEgZGVmaW5pdGl2ZSBhbnN3ZXI7IGxldCYjMzk7cyBpbnZlc3RpZ2F0ZSB0aGUgYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnYCBmaWxlLiBIb3BlZnVsbHksIGl0JiMzOTtzIGRlZmluZWQgdGhlcmUgYW5kIHRoaXMgd2lsbCByZXNvbHZlIHRoZSBpc3N1ZS4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ni8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIFBQQ19QT1dFUk5WJiMzNDssCiAgJiMzNDtQYXRoUHJlZml4JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy8mIzM0Owp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7T3V0cHV0JiMzNDs6ICYjMzQ7YXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZzoyOmNvbmZpZyBQUENfUE9XRVJOVlxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMy1cdGRlcGVuZHMgb24gUFBDNjQgXHUwMDI2XHUwMDI2IFBQQ19CT09LM1NcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40Ny8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk1MDUKCQkJCQkJCW91dHB1dDogNDAKCQkJCQkJCXRob3VnaHRzOiAxMDcKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqRGVidWdnaW5nIGEgYHNldC1yZXN1bHRzYCBGYWlsdXJlKioKCk9rYXksIHNvIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQgZmFpbGVkLiBUaGF0JiMzOTtzIG5vdCBpZGVhbC4gSXQgc2VlbXMgbGlrZSB0aGUgY29yZSBpc3N1ZSBpcyB0aGF0IHNvbWV0aGluZyAqZG9lcyogZXhpc3QsIGJ1dCB0aGUgdG9vbCBkb2VzbiYjMzk7dCBzZWUgaXQuIFRoaXMgbWFrZXMgbWUgdGhpbmsgaXQgY291bGQgYmUgYW4gYXJjaGl0ZWN0dXJlLXNwZWNpZmljIGNvbmZpZ3VyYXRpb24gcHJvYmxlbS4gUGVyaGFwcyB0aGUgdG9vbCBkZWZhdWx0cyB0byBhbiB4ODYgY29uZmlndXJhdGlvbiwgYW5kIGl0JiMzOTtzIG5vdCBmaW5kaW5nIHRoZSBQb3dlclBDIGNvbmZpZ3MgSSBuZWVkPwoKQnV0IHRoZW4gdGhlIGVycm9yIG1lc3NhZ2UgdGhyb3dzIGEgd3JlbmNoIGludG8gdGhhdCB0aGVvcnksIGNsYWltaW5nIHRoZSBjb25maWd1cmF0aW9ucyAmIzM0O2RvIG5vdCBleGlzdCBpbiB0aGUga2VybmVsIHRyZWUmIzM0Oy4gT2theSwgc28gdGhhdCBtZWFucyBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIG15IGFzc3VtcHRpb25zIGFuZCB0aGUga2VybmVsIGNvbmZpZ3VyYXRpb24uIEkgc2hvdWxkIHByb2JhYmx5IGNsYXJpZnkgd2hldGhlciBJIG5lZWQgdG8gdXNlIGBLVk1gIG9yIHNvbWV0aGluZyBlbHNlIGVudGlyZWx5LiBMZXQmIzM5O3MgbWFrZSBzdXJlIGBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFYCBpcyBhY3R1YWxseSBkZWZpbmVkLCB0aGF0JiMzOTtzIGEgZ29vZCBwbGFjZSB0byBzdGFydC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5ncmVwcGVyPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFeHByZXNzaW9uJiMzNDs6ICYjMzQ7Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEUmIzM0OywKICAmIzM0O1BhdGhQcmVmaXgmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtLyYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtPdXRwdXQmIzM0OzogJiMzNDthcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Mzg9Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcbi0tXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDEtXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cdGJvb2xcbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40OS8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTA6MDA8L3RkPgoJCQk8dGQ+bGxtPC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+VG9rZW5zOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+CgkJCQkJCQlpbnB1dDogMzk5MzUKCQkJCQkJCW91dHB1dDogMTY2CgkJCQkJCQl0aG91Z2h0czogMTEzCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKlRyb3VibGVzaG9vdGluZyBLZXJuZWwgQ29uZmlndXJhdGlvbioqCgpPa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyB0b29sIGlzIGZhaWxpbmcgdG8gZmluZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IG1pZ2h0IGJlIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBtYWtlIGxpc3RuZXdjb25maWdgIG9yIGFub3RoZXIgc2NyaXB0IHRoYXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGxpa2UgYEFSQ0g9eDg2YC4gSWYgdGhhdCYjMzk7cyB0aGUgY2FzZSwgdGhlbiBpdCYjMzk7cyBubyB3b25kZXIgSSYjMzk7bSBub3Qgc2VlaW5nIFBvd2VyUEMgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgdG9vbCBpcyBhcmNoaXRlY3R1cmUtYWdub3N0aWMgb3IgdGhhdCBJJiMzOTttIHByb3ZpZGluZyBpdCB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHQuCgpQZXJoYXBzIHRoZSBzaW1wbGVzdCBzb2x1dGlvbiBpcyB0byBqdXN0IG9taXQgYW55IGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWdzIGlmIHRoZSB0b29sIGluaGVyZW50bHkgcmVqZWN0cyB0aGVtLiBNYXliZSBhIG1vcmUgZWxlZ2FudCBzb2x1dGlvbiBpcyB0byBwcm92aWRlIG9ubHkgdGhlIGJhcmUgbWluaW11bSwgc3VjaCBhcyBgS1ZNYCB3aGljaCBob3BlZnVsbHkgaXMgYXJjaC1hZ25vc3RpYy4KCldhaXQgYSBzZWNvbmTigKYgdGhlIGVycm9yIG1lc3NhZ2UgYWN0dWFsbHkgc2F5cyAmIzM0O3RoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlLiYjMzQ7IFRoYXQmIzM5O3MgYSBkaWZmZXJlbnQgcHJvYmxlbSBhbHRvZ2V0aGVyISBJIG5lZWQgdG8gdHJ5IHN1cHBseWluZyBpdCB3aXRoIGBLVk1gIGFuZCBzZWUgaWYgdGhhdCByZXNvbHZlcyB0aGUgaXNzdWUgZGlyZWN0bHkuIExldCYjMzk7cyBzZWUgaWYgdGhhdCB3b3Jrcy4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD41MC8yPC90ZD4KCQkJPHRkPjIwMjYvMDcvMDEgMTA6MDA8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OywKICAgICYjMzQ7a3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbCiAgICAmIzM0O0tWTSYjMzQ7CiAgXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbCiAgICAmIzM0O2t2bXBwY19nZXRfY29tcGF0X2NhcHMmIzM0OywKICAgICYjMzQ7a3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzJiMzNDsKICBdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogdHJ1ZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPC90Ym9keT4KCTwvdGFibGU+CgoJPGRpdiBpZD0ibGxtX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5MTE0gQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBUb2tlbnM8L3RoPgoJCQkJCTx0aD5BdmcgVG9rZW5zPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9ImxsbV9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9InRvb2xfc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPlRvb2wgQ2FsbHMgU3VtbWFyeTo8L2NhcHRpb24+CgkJCTx0aGVhZD4KCQkJCTx0cj4KCQkJCQk8dGg+VG90YWwgQ2FsbHM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0idG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHkiPjwvdGJvZHk+CgkJPC90YWJsZT4KCTwvZGl2PgoKCTxkaXYgaWQ9ImR1cmF0aW9uX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCTxkaXYgaWQ9InRva2VuX2NoYXJ0X2RpdiIgc3R5bGU9IndpZHRoOiAxMDAlOyBtYXJnaW46IDIwcHggMDsgYm9yZGVyOiAxcHg7Ij48L2Rpdj4KCgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL3d3dy5nb29nbGUuY29tL2pzYXBpIj48L3NjcmlwdD4KCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KCQlnb29nbGUubG9hZCgidmlzdWFsaXphdGlvbiIsICIxIiwge3BhY2thZ2VzOlsiY29yZWNoYXJ0Il19KTsKCQlnb29nbGUuc2V0T25Mb2FkQ2FsbGJhY2soZHJhd0NoYXJ0cyk7CgoJCWZ1bmN0aW9uIGRyYXdDaGFydHMoKSB7CgkJCWNvbnN0IHJhd0RhdGEgPSBbeyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODowMS45NDY1NjUzN1oiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjEzMzQyNjk4ODAyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXG4gICAgXCJLVk1cIlxuICBdLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXG4gICAgXCJrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzXCIsXG4gICAgXCJrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNcIlxuICBdLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbmV3IEtWTSBpb2N0bCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGZvciBQb3dlclBDIHRvIHJldHJpZXZlIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllcy4gVGhlIGlvY3RsIGltcGxlbWVudGF0aW9uIGludm9sdmVzIGNvcHlpbmcgZGF0YSBmcm9tL3RvIHVzZXJzcGFjZSwgY2hlY2tpbmcgc2l6ZXMsIGFuZCBjYWxsaW5nIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB0byBxdWVyeSB0aGUgY2FwYWJpbGl0aWVzLiBUaGlzIGlzIGEgZnVuY3Rpb25hbCBjaGFuZ2UgdGhhdCBhZGRzIG5ldyByZWFjaGFibGUga2VybmVsIGxvZ2ljLCB3aGljaCBjYW4gYmUgZXhlY3V0ZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgUUVNVSAocHNlcmllcyBtYWNoaW5lKS4gVGhlcmVmb3JlLCBpdCBzaG91bGQgYmUgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiB0cnVlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODowMS45NDY1NzAyOFoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDcyMjI5MDg0LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYWFmOWMxODk3ZTg2OWM5NzljMjVmYTM4N2JjM2JiYTNjNWM2MjYzZFxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgV2VkIEp1bCAxIDA5OjU4OjAwIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxcbmluZGV4IGE1ZjllZTkyZjQzZThkLi40MzgxMGM0NTEzMTdmYiAxMDA2NDRcXG4tLS0gYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG4rKysgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcXG5AQCAtNjU2Niw2ICs2NTY2LDg1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcXG4gICBTZXRzIHRoZSBzdG9yYWdlIGtleSBmb3IgdGhlIGd1ZXN0IGFkZHJlc3MgYGBndWVzdF9hZGRyYGAgdG8gdGhlIGtleVxcbiAgIHNwZWNpZmllZCBpbiBgYGtleWBgLCByZXR1cm5pbmcgdGhlIHByZXZpb3VzIHZhbHVlIGluIGBga2V5YGAuXFxuIFxcbis0LjE0NSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1xcbistLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLVxcbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcXG4rOkFyY2hpdGVjdHVyZXM6IHBvd2VycGNcXG4rOlR5cGU6IHZtIGlvY3RsXFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAob3V0KVxcbis6UmV0dXJuczogMCBvbiBzdWNjZXNzLCBuZWdhdGl2ZSB2YWx1ZSBvbiBmYWlsdXJlXFxuK1xcbitFcnJvcnMgaW5jbHVkZTpcXG4rXFxuKyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XFxuKyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcXG4rICAgICAgICAgICB3cml0dGVuIHRvIHVzZXJzcGFjZVxcbisgIEVJTlZBTCAgIGlmIHRoZSBgYHNpemVgYCBmaWVsZCBpcyBzbWFsbGVyIHRoYW5cXG4rICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcXG4rICAgICAgICAgICBpcyBub24temVybywgb3IgaWYgdGhlIGJhY2tlbmQgZmFpbHMgdG8gcmV0cmlldmUgb3IgbWFwXFxuKyAgICAgICAgICAgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzXFxuKyAgRTJCSUcgICAgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplXFxuKyAgICAgICAgICAgKG5ldyB1c2Vyc3BhY2Ugb24gb2xkIGtlcm5lbCk7IHRoZSBrZXJuZWwgd3JpdGVzIGJhY2sgaXRzXFxuKyAgICAgICAgICAgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIHNvIHVzZXJzcGFjZSBjYW5cXG4rICAgICAgICAgICByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemVcXG4rICBFTk9UVFkgICBpZiB0aGUgYmFja2VuZCBkb2VzIG5vdCBpbXBsZW1lbnQgdGhlIGBgZ2V0X2NvbXBhdF9jYXBzYGBcXG4rICAgICAgICAgICBvcGVyYXRpb24gKGUuZy4sIG9uIG5vbi1wc2VyaWVzIHBsYXRmb3JtcyBvciB3aGVuIHRoZVxcbisgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKVxcbisgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxcbitcXG4rSUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmVcXG4rd2hlcmUgYW4gTnRoIGdlbmVyYXRpb24gcHJvY2Vzc29yIGNhbiBvcGVyYXRlIGluIG1vZGVzIGNvbnNpc3RlbnQgd2l0aCBlYXJsaWVyXFxuK2dlbmVyYXRpb25zIHN1Y2ggYXMgKE4tMSkgYW5kIChOLTIpLlxcbitcXG4rVGhpcyBpb2N0bCBwcm92aWRlcyB1c2Vyc3BhY2Ugd2l0aCBpbmZvcm1hdGlvbiBhYm91dCB0aGUgQ1BVIGNvbXBhdGliaWxpdHkgbW9kZXNcXG4rc3VwcG9ydGVkIGJ5IHRoZSBjdXJyZW50IGhvc3QgcHJvY2Vzc29yIGZvciBib290aW5nIHRoZSBuZXN0ZWQgS1ZNIGd1ZXN0cyBvblxcbitLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuXFxuK1xcbis6OlxcbitcXG4rICBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XFxuK1xcdF9fdTY0XFx0c2l6ZTtcXHRcXHRcXHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXFxuK1xcdF9fdTY0XFx0ZmxhZ3M7XFx0XFx0XFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UsIG11c3QgYmUgMCAqL1xcbitcXHRfX3U2NFxcdGNvbXBhdF9jYXBhYmlsaXRpZXM7XFx0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xcbisgIH07XFxuK1xcbitCZWZvcmUgY2FsbGluZyB0aGlzIGlvY3RsLCB1c2Vyc3BhY2UgbXVzdCBzZXQgdGhlIGBgc2l6ZWBgIGZpZWxkIHRvXFxuK2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXFxuK1RoZSBrZXJuZWwgcmVqZWN0cyBub24temVybyBgYGZsYWdzYGAgd2l0aCBgYC1FSU5WQUxgYCB0byBwcmV2ZW50XFxuK3VuaW5pdGlhbGl6ZWQgc3RhY2sgdmFsdWVzIGZyb20gYmVpbmcgc2lsZW50bHkgYWNjZXB0ZWQsIGtlZXBpbmcgdGhlXFxuK2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXFxuK1xcbitUaGUgaW9jdGwgdXNlcyBgYGNvcHlfc3RydWN0X2Zyb21fdXNlcigpYGAgYW5kIGBgY29weV9zdHJ1Y3RfdG9fdXNlcigpYGBcXG4rdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmc6IGlmIHVzZXJzcGFjZSBwYXNzZXMgYSBzdHJ1Y3Qgc21hbGxlclxcbit0aGFuIHRoZSBjdXJyZW50IGtlcm5lbCB2ZXJzaW9uIChgYHNpemUgXFx1MDAzZT0gS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjBgYCksXFxuK3RoZSBrZXJuZWwgemVyby1wYWRzIHVua25vd24gdHJhaWxpbmcgZmllbGRzLiBJZiB1c2Vyc3BhY2UgcGFzc2VzIGEgbGFyZ2VyXFxuK3N0cnVjdCAoYGBzaXplIFxcdTAwM2Ugc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgKSwgdGhlIGtlcm5lbCB3cml0ZXNcXG4rYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIGFuZCByZXR1cm5zIGBgLUUyQklHYGAsXFxuK2FsbG93aW5nIHVzZXJzcGFjZSB0byBkaXNjb3ZlciB0aGUga2VybmVsJ3Mgc3RydWN0IHNpemUgYW5kIHJldHJ5LlxcbitgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAgKDI0KSBpcyBhIGZyb3plbiBjb25zdGFudCBtYXJraW5nIHRoZVxcbitzaXplIG9mIHRoZSBpbml0aWFsIHN0cnVjdCB2ZXJzaW9uLlxcbitcXG4rVGhlIGBgY29tcGF0X2NhcGFiaWxpdGllc2BgIGJpdCBmaWVsZCBkZXNjcmliZXMgdGhlIHByb2Nlc3NvciBjb21wYXRpYmlsaXR5XFxuK21vZGVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdC4gVGhlIGZvbGxvd2luZyBiaXRzIGluZGljYXRlIHN1cHBvcnQgZm9yIHNwZWNpZmljXFxuK3Byb2Nlc3NvciBtb2RlcyAodXNpbmcgSUJNJ3MgTVNCLTAgY29udmVudGlvbiB3aGVyZSBiaXQgMCBpcyB0aGUgbW9zdFxcbitzaWduaWZpY2FudCBiaXQpOlxcbitcXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgKGJpdCAxKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXI5IHByb2Nlc3NvciBtb2RlXFxuKy0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgIChiaXQgMikgLS0gS1ZNIGd1ZXN0cyBjYW4gcnVuIGluIFBvd2VyMTAgcHJvY2Vzc29yIG1vZGVcXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxcbitcXG4rLi4gbm90ZTo6XFxuK1xcbisgICBUaGUgYml0IG51bWJlcmluZyBhYm92ZSB1c2VzIElCTSdzIE1TQi0wIGNvbnZlbnRpb24gKGJpdCAwIGlzIHRoZSBtb3N0XFxuKyAgIHNpZ25pZmljYW50IGJpdCkuIEluIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIHRoZXNlIGFyZSBkZWZpbmVkIGFzOlxcbitcXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlgYCAgPSBgYCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYyKWBgXFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMGBgID0gYGAoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MSlgYFxcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTFgYCA9IGBgKDFVTEwgXFx1MDAzY1xcdTAwM2MgNjApYGBcXG4rXFxuKyAgIFVzZXJzcGFjZSBzaG91bGQgdXNlIHRoZSBkZWZpbmVkIGNvbnN0YW50cyBmcm9tIGBgXFx1MDAzY2xpbnV4L2t2bS5oXFx1MDAzZWBgIHJhdGhlclxcbisgICB0aGFuIGhhcmRjb2RpbmcgYml0IHBvc2l0aW9ucy5cXG4rXFxuIC4uIF9rdm1fcnVuOlxcbiBcXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXFxuaW5kZXggMDk1M2YyZGFhNDY2MGYuLjE2OWVhNmE3ZmJhZDQ0IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcXG4rKysgYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oXFxuQEAgLTMxOSw2ICszMTksNyBAQCBzdHJ1Y3Qga3ZtcHBjX29wcyB7XFxuIFxcdGJvb2wgKCpoYXNoX3YzX3Bvc3NpYmxlKSh2b2lkKTtcXG4gXFx0aW50ICgqY3JlYXRlX3ZtX2RlYnVnZnMpKHN0cnVjdCBrdm0gKmt2bSk7XFxuIFxcdGludCAoKmNyZWF0ZV92Y3B1X2RlYnVnZnMpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGRlbnRyeSAqZGVidWdmc19kZW50cnkpO1xcbitcXHRpbnQgKCpnZXRfY29tcGF0X2NhcHMpKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpO1xcbiB9O1xcbiBcXG4gZXh0ZXJuIHN0cnVjdCBrdm1wcGNfb3BzICprdm1wcGNfaHZfb3BzO1xcbmRpZmYgLS1naXQgYS9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuaW5kZXggMDc3YzU0MzdmNTIxOWIuLjkxM2E2NGI5MDFhM2Q3IDEwMDY0NFxcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXFxuKysrIGIvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcXG5AQCAtNDM3LDYgKzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7XFxuIFxcdF9fdTY0XFx0YmVoYXZpb3VyX21hc2s7XFx0XFx0LyogdmFsaWQgYml0cyBpbiBiZWhhdmlvdXIgKi9cXG4gfTtcXG4gXFxuKy8qIEZvciBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUyAqL1xcbitzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XFxuK1xcdF9fdTY0XFx0c2l6ZTtcXHRcXHRcXHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXFxuK1xcdF9fdTY0XFx0ZmxhZ3M7XFx0XFx0XFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cXG4rXFx0X191NjRcXHRjb21wYXRfY2FwYWJpbGl0aWVzO1xcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cXG4rfTtcXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMFxcdDI0IC8qIHNpemVvZiBmaXJzdCBwdWJsaXNoZWQgc3RydWN0ICovXFxuK1xcbisvKlxcbisgKiBDYXBhYmlsaXR5IGJpdHMgZm9yIGNvbXBhdF9jYXBhYmlsaXRpZXMgZmllbGQgaW4ga3ZtX3BwY19jb21wYXRfY2Fwcy5cXG4rICogVGhlc2UgYml0cyBpbmRpY2F0ZSB3aGljaCBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eSBtb2RlcyBhcmUgc3VwcG9ydGVkLlxcbisgKi9cXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVI5XFx0KDFVTEwgXFx1MDAzY1xcdTAwM2MgNjIpXFxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBcXHQoMVVMTCBcXHUwMDNjXFx1MDAzYyA2MSlcXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMVxcdCgxVUxMIFxcdTAwM2NcXHUwMDNjIDYwKVxcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0JJVE1BU0tcXHRcXHQoS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOSB8IFxcXFxcXG4rXFx0XFx0XFx0XFx0XFx0IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwIHwgXFxcXFxcbitcXHRcXHRcXHRcXHRcXHQgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTEpXFxuIC8qXFxuICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay5cXG4gICogVGhlc2UgYXJlIGlkZW50aWNhbCB0byB0aGUgdmFsdWVzIHVzZWQgYnkgSF9HRVRfQ1BVX0NIQVJBQ1RFUklTVElDUy5cXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG5pbmRleCA2MWRiZWVhMzE3ZjNiNy4uNzBkY2QzNzBmZDlhYzcgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY1xcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcXG5AQCAtNjUxMCw2ICs2NTEwLDYzIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXFxuIFxcdHJldHVybiB0cnVlO1xcbiB9XFxuIFxcbitzdGF0aWMgaW50IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjb25zdCBfX2JlMzIgY3B1X3ZlcnNpb24sXFxuK1xcdFxcdFxcdFxcdCAgICAgIHVuc2lnbmVkIGxvbmcgKmNhcGFiaWxpdGllcylcXG4re1xcbitcXHRzd2l0Y2ggKGNwdV92ZXJzaW9uKSB7XFxuK1xcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxcbitcXHRcXHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExO1xcbitcXHRcXHRmYWxsdGhyb3VnaDtcXG4rXFx0Y2FzZSBQVlJfQVJDSF8zMTpcXG4rXFx0XFx0KmNhcGFiaWxpdGllcyB8PSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMDtcXG4rXFx0XFx0ZmFsbHRocm91Z2g7XFxuK1xcdGNhc2UgUFZSX0FSQ0hfMzAwOlxcbitcXHRcXHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjk7XFxuK1xcdFxcdGJyZWFrO1xcbitcXHRkZWZhdWx0OlxcbitcXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4rXFx0fVxcbitcXG4rXFx0cmV0dXJuIDA7XFxuK31cXG4rXFxuK3N0YXRpYyBpbnQga3ZtcHBjX2dldF9jb21wYXRfY2FwcyhzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAqaG9zdF9jYXBzKVxcbit7XFxuK1xcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuK1xcdHVuc2lnbmVkIGxvbmcgY2FwYWJpbGl0aWVzID0gMDtcXG4rXFx0Y29uc3QgX19iZTMyICpwcm9wID0gTlVMTDtcXG4rXFx0bG9uZyByYyA9IC1FSU5WQUw7XFxuK1xcdHUzMiBjcHVfdmVyc2lvbjtcXG4rXFxuK1xcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG4rXFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcXG4rXFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTtcXG4rXFx0XFx0XFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcXG4rXFx0XFx0XFx0cmMgPSAwO1xcbitcXHRcXHR9IGVsc2Uge1xcbitcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFxcXCJjcHVcXFwiKSB7XFxuK1xcdFxcdFxcdFxcdHByb3AgPSBvZl9nZXRfcHJvcGVydHkobnAsIFxcXCJjcHUtdmVyc2lvblxcXCIsIE5VTEwpO1xcbitcXHRcXHRcXHRcXHRpZiAocHJvcCkge1xcbitcXHRcXHRcXHRcXHRcXHRjcHVfdmVyc2lvbiA9IGJlMzJfdG9fY3B1cChwcm9wKTtcXG4rXFx0XFx0XFx0XFx0XFx0b2Zfbm9kZV9wdXQobnApO1xcbitcXHRcXHRcXHRcXHRcXHRicmVhaztcXG4rXFx0XFx0XFx0XFx0fVxcbitcXHRcXHRcXHR9XFxuK1xcdFxcdFxcdGlmICghcHJvcClcXG4rXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuK1xcdFxcdFxcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxcbitcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNhcGFiaWxpdGllcyk7XFxuK1xcdFxcdH1cXG4rXFx0fVxcbitcXG4rXFx0aWYgKHJjIFxcdTAwM2MgMClcXG4rXFx0XFx0cmV0dXJuIHJjO1xcbitcXG4rXFx0aG9zdF9jYXBzLVxcdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFxcdTAwMjYgS1ZNX1BQQ19DT01QQVRfQklUTUFTSztcXG4rXFxuK1xcdHJldHVybiByYztcXG4rfVxcbitcXG4gc3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XFxuIFxcdC5nZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVnc19odixcXG4gXFx0LnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LFxcbkBAIC02NTUyLDYgKzY2MDksNyBAQCBzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcXG4gXFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcXG4gXFx0LmNyZWF0ZV92Y3B1X2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdmNwdV9kZWJ1Z2ZzX2h2LFxcbiBcXHQuY3JlYXRlX3ZtX2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdm1fZGVidWdmc19odixcXG4rXFx0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXFxuIH07XFxuIFxcbiBzdGF0aWMgaW50IGt2bV9pbml0X3N1YmNvcmVfYml0bWFwKHZvaWQpXFxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jIGIvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcXG5pbmRleCAwMDMwMjM5OWZjMzdiNC4uOGQ2NjMyYzY0Y2E1ZjkgMTAwNjQ0XFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xcbkBAIC02OTcsNiArNjk3LDEzIEBAIGludCBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uKHN0cnVjdCBrdm0gKmt2bSwgbG9uZyBleHQpXFxuIFxcdFxcdFxcdH1cXG4gXFx0XFx0fVxcbiBcXHRcXHRicmVhaztcXG4rI2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXFxuK1xcdGNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6XFxuK1xcdFxcdHIgPSAwO1xcbitcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxcbitcXHRcXHRcXHRyID0gMTtcXG4rXFx0XFx0YnJlYWs7XFxuKyNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqL1xcbiBcXHRkZWZhdWx0OlxcbiBcXHRcXHRyID0gMDtcXG4gXFx0XFx0YnJlYWs7XFxuQEAgLTI0NjMsNiArMjQ3MCw3MCBAQCBpbnQga3ZtX2FyY2hfdm1faW9jdGwoc3RydWN0IGZpbGUgKmZpbHAsIHVuc2lnbmVkIGludCBpb2N0bCwgdW5zaWduZWQgbG9uZyBhcmcpXFxuIFxcdFxcdHIgPSBrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlc3ZtX29mZihrdm0pO1xcbiBcXHRcXHRicmVhaztcXG4gXFx0fVxcbitcXHRjYXNlIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTOiB7XFxuK1xcdFxcdHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIGhvc3RfY2FwcyA9IHt9O1xcbitcXHRcXHR1NjQgdXNpemU7XFxuK1xcbitcXHRcXHQvKlxcbitcXHRcXHQgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci5cXG4rXFx0XFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0ciA9IC1FRkFVTFQ7XFxuK1xcdFxcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIEVuZm9yY2UgYSBtaW5pbXVtOiByZWplY3QgYnVmZmVycyBzbWFsbGVyIHRoYW4gdGhlIGluaXRpYWxcXG4rXFx0XFx0ICogc3RydWN0IHZlcnNpb24gKFZFUjApLiBUaGlzIGFsbG93cyBvbGQgdXNlcnNwYWNlIGNvbXBpbGVkXFxuK1xcdFxcdCAqIGFnYWluc3QgdGhlIG9yaWdpbmFsIHN0cnVjdCB0byBzdGlsbCB3b3JrIG9uIGEgbmV3ZXIga2VybmVsXFxuK1xcdFxcdCAqIHRoYXQgaGFzIGdyb3duIHRoZSBzdHJ1Y3Qgd2l0aCBhcHBlbmRlZCBmaWVsZHMuXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyID0gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKHVzaXplIFxcdTAwM2MgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjApXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0LypcXG4rXFx0XFx0ICogTmV3IHVzZXJzcGFjZSB3aXRoIGEgbGFyZ2VyIHN0cnVjdCBjYWxsZWQgYW4gb2xkZXIga2VybmVsLlxcbitcXHRcXHQgKiBXcml0ZSBiYWNrIGtzaXplIGluIGhvc3RfY2Fwcy5zaXplIHNvIHVzZXJzcGFjZSBrbm93cyB3aGljaFxcbitcXHRcXHQgKiBvbGRlciBzdHJ1Y3QgdG8gcmV0cnkgd2l0aCwgdGhlbiBmYWlsIHdpdGggLUUyQklHLlxcbitcXHRcXHQgKi9cXG4rXFx0XFx0aWYgKHVzaXplIFxcdTAwM2Ugc2l6ZW9mKGhvc3RfY2FwcykpIHtcXG4rXFx0XFx0XFx0aG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTtcXG4rXFx0XFx0XFx0ciA9IC1FRkFVTFQ7XFxuK1xcdFxcdFxcdGlmIChwdXRfdXNlcihob3N0X2NhcHMuc2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxcbitcXHRcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFx0XFx0XFx0ciA9IC1FMkJJRztcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcdFxcdH1cXG4rXFxuK1xcdFxcdC8qXFxuK1xcdFxcdCAqIGNvcHlfc3RydWN0X2Zyb21fdXNlcigpIGhhbmRsZXMgZm9yd2FyZC9iYWNrd2FyZCBjb21wYXQ6XFxuK1xcdFxcdCAqICAgdXNpemUgPT0ga3NpemU6IHZlcmJhdGltIGNvcHlcXG4rXFx0XFx0ICogICB1c2l6ZSBcXHUwMDNjICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpXFxuK1xcdFxcdCAqL1xcbitcXHRcXHRyID0gY29weV9zdHJ1Y3RfZnJvbV91c2VyKFxcdTAwMjZob3N0X2NhcHMsIHNpemVvZihob3N0X2NhcHMpLFxcbitcXHRcXHRcXHRcXHRcXHQgIGFyZ3AsIHVzaXplKTtcXG4rXFx0XFx0aWYgKHIpXFxuK1xcdFxcdFxcdGdvdG8gb3V0O1xcbitcXG4rXFx0XFx0LyogUmVzZXJ2ZWQgZmllbGRzIG11c3QgYmUgemVybyAqL1xcbitcXHRcXHRyID0gLUVJTlZBTDtcXG4rXFx0XFx0aWYgKGhvc3RfY2Fwcy5mbGFncylcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRyID0gLUVOT1RUWTtcXG4rXFx0XFx0aWYgKCFrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlZ2V0X2NvbXBhdF9jYXBzKVxcbitcXHRcXHRcXHRnb3RvIG91dDtcXG4rXFxuK1xcdFxcdHIgPSBrdm0tXFx1MDAzZWFyY2gua3ZtX29wcy1cXHUwMDNlZ2V0X2NvbXBhdF9jYXBzKFxcdTAwMjZob3N0X2NhcHMpO1xcbitcXHRcXHRpZiAocilcXG4rXFx0XFx0XFx0Z290byBvdXQ7XFxuK1xcbitcXHRcXHRob3N0X2NhcHMuc2l6ZSA9IHNpemVvZihob3N0X2NhcHMpO1xcbitcXHRcXHRyID0gY29weV9zdHJ1Y3RfdG9fdXNlcihhcmdwLCB1c2l6ZSwgXFx1MDAyNmhvc3RfY2FwcyxcXG4rXFx0XFx0XFx0XFx0XFx0c2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpO1xcbitcXHRcXHRicmVhaztcXG4rXFx0fVxcbiBcXHRkZWZhdWx0OiB7XFxuIFxcdFxcdHN0cnVjdCBrdm0gKmt2bSA9IGZpbHAtXFx1MDAzZXByaXZhdGVfZGF0YTtcXG4gXFx0XFx0ciA9IGt2bS1cXHUwMDNlYXJjaC5rdm1fb3BzLVxcdTAwM2VhcmNoX3ZtX2lvY3RsKGZpbHAsIGlvY3RsLCBhcmcpO1xcbmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmggYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcXG5pbmRleCA0MTkwMTEwOTdmYThlMi4uMWNmOWE5NTk2NjllOGQgMTAwNjQ0XFxuLS0tIGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXFxuKysrIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXFxuQEAgLTk5Nyw2ICs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9LRVlPUCAyNDdcXG4gI2RlZmluZSBLVk1fQ0FQX1MzOTBfVlNJRV9FU0FNT0RFIDI0OFxcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcXG4rI2RlZmluZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAyNTBcXG4gXFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XFxuIFxcdF9fdTMyIGlycWNoaXA7XFxuQEAgLTEzNTAsNiArMTM1MSw5IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XFxuICNkZWZpbmUgS1ZNX0dFVF9ERVZJQ0VfQVRUUlxcdCAgX0lPVyhLVk1JTywgIDB4ZTIsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXFxuICNkZWZpbmUgS1ZNX0hBU19ERVZJQ0VfQVRUUlxcdCAgX0lPVyhLVk1JTywgIDB4ZTMsIHN0cnVjdCBrdm1fZGV2aWNlX2F0dHIpXFxuIFxcbisvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqL1xcbisjZGVmaW5lIEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXFx0X0lPKEtWTUlPLCAgMHhlNClcXG4rXFxuIC8qXFxuICAqIGlvY3RscyBmb3IgdmNwdSBmZHNcXG4gICovXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjAyLjQxOTM1MzMyNFoiLCJTZXEiOjIsIk5lc3RpbmciOjEsIlR5cGUiOiJhZ2VudCIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MTMyOTU0MTkwMTA2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bXBwY19nZXRfY29tcGF0X2NhcHNcIixcbiAgICBcImt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYWFmOWMxODk3ZTg2OWM5NzljMjVmYTM4N2JjM2JiYTNjNWM2MjYzZFxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBXZWQgSnVsIDEgMDk6NTg6MDAgMjAyNiArMDAwMFxuXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XG5cbmRpZmYgLS1naXQgYS9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3QgYi9Eb2N1bWVudGF0aW9uL3ZpcnQva3ZtL2FwaS5yc3RcbmluZGV4IGE1ZjllZTkyZjQzZThkLi40MzgxMGM0NTEzMTdmYiAxMDA2NDRcbi0tLSBhL0RvY3VtZW50YXRpb24vdmlydC9rdm0vYXBpLnJzdFxuKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0L2t2bS9hcGkucnN0XG5AQCAtNjU2Niw2ICs2NTY2LDg1IEBAIEtWTV9TMzkwX0tFWU9QX1NTS0VcbiAgIFNldHMgdGhlIHN0b3JhZ2Uga2V5IGZvciB0aGUgZ3Vlc3QgYWRkcmVzcyBgYGd1ZXN0X2FkZHJgYCB0byB0aGUga2V5XG4gICBzcGVjaWZpZWQgaW4gYGBrZXlgYCwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZSBpbiBgYGtleWBgLlxuIFxuKzQuMTQ1IEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTXG4rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS1cbis6Q2FwYWJpbGl0eTogS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNcbis6QXJjaGl0ZWN0dXJlczogcG93ZXJwY1xuKzpUeXBlOiB2bSBpb2N0bFxuKzpQYXJhbWV0ZXJzOiBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyAob3V0KVxuKzpSZXR1cm5zOiAwIG9uIHN1Y2Nlc3MsIG5lZ2F0aXZlIHZhbHVlIG9uIGZhaWx1cmVcbitcbitFcnJvcnMgaW5jbHVkZTpcbitcbisgID09PT09PT09ID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxuKyAgRUZBVUxUICAgaWYgYGBzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2Fwc2BgIGNhbm5vdCBiZSByZWFkIGZyb20gb3JcbisgICAgICAgICAgIHdyaXR0ZW4gdG8gdXNlcnNwYWNlXG4rICBFSU5WQUwgICBpZiB0aGUgYGBzaXplYGAgZmllbGQgaXMgc21hbGxlciB0aGFuXG4rICAgICAgICAgICBgYEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGAsIGlmIHRoZSBgYGZsYWdzYGAgZmllbGRcbisgICAgICAgICAgIGlzIG5vbi16ZXJvLCBvciBpZiB0aGUgYmFja2VuZCBmYWlscyB0byByZXRyaWV2ZSBvciBtYXBcbisgICAgICAgICAgIENQVSBjb21wYXRpYmlsaXR5IGNhcGFiaWxpdGllc1xuKyAgRTJCSUcgICAgaWYgYGBzaXplYGAgaXMgbGFyZ2VyIHRoYW4gdGhlIGtlcm5lbCdzIHN0cnVjdCBzaXplXG4rICAgICAgICAgICAobmV3IHVzZXJzcGFjZSBvbiBvbGQga2VybmVsKTsgdGhlIGtlcm5lbCB3cml0ZXMgYmFjayBpdHNcbisgICAgICAgICAgIG93biBzdHJ1Y3Qgc2l6ZSBpbnRvIHRoZSBgYHNpemVgYCBmaWVsZCBzbyB1c2Vyc3BhY2UgY2FuXG4rICAgICAgICAgICByZXRyeSB3aXRoIHRoZSBjb3JyZWN0IHNpemVcbisgIEVOT1RUWSAgIGlmIHRoZSBiYWNrZW5kIGRvZXMgbm90IGltcGxlbWVudCB0aGUgYGBnZXRfY29tcGF0X2NhcHNgYFxuKyAgICAgICAgICAgb3BlcmF0aW9uIChlLmcuLCBvbiBub24tcHNlcmllcyBwbGF0Zm9ybXMgb3Igd2hlbiB0aGVcbisgICAgICAgICAgIHJlcXVpcmVkIEtWTSBvcGVyYXRpb25zIGFyZSBub3QgYXZhaWxhYmxlKVxuKyAgPT09PT09PT0gPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09XG4rXG4rSUJNIFBPV0VSIHN5c3RlbSBzZXJ2ZXItYmFzZWQgcHJvY2Vzc29ycyBwcm92aWRlIGEgY29tcGF0aWJpbGl0eSBtb2RlIGZlYXR1cmVcbit3aGVyZSBhbiBOdGggZ2VuZXJhdGlvbiBwcm9jZXNzb3IgY2FuIG9wZXJhdGUgaW4gbW9kZXMgY29uc2lzdGVudCB3aXRoIGVhcmxpZXJcbitnZW5lcmF0aW9ucyBzdWNoIGFzIChOLTEpIGFuZCAoTi0yKS5cbitcbitUaGlzIGlvY3RsIHByb3ZpZGVzIHVzZXJzcGFjZSB3aXRoIGluZm9ybWF0aW9uIGFib3V0IHRoZSBDUFUgY29tcGF0aWJpbGl0eSBtb2Rlc1xuK3N1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb25cbitLVk0gb24gUG93ZXJOViAobmVzdGVkIEFQSSB2MSkgYW5kIEtWTSBvbiBQb3dlclZNIChuZXN0ZWQgQVBJIHYyKSBwbGF0Zm9ybXMuXG4rXG4rOjpcbitcbisgIHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzIHtcbitcdF9fdTY0XHRzaXplO1x0XHRcdC8qIFNpemUgb2YgdGhpcyBzdHJ1Y3R1cmUgKi9cbitcdF9fdTY0XHRmbGFncztcdFx0XHQvKiBSZXNlcnZlZCBmb3IgZnV0dXJlIHVzZSwgbXVzdCBiZSAwICovXG4rXHRfX3U2NFx0Y29tcGF0X2NhcGFiaWxpdGllcztcdC8qIENhcGFiaWxpdGllcyBzdXBwb3J0ZWQgYnkgdGhlIGhvc3QgKi9cbisgIH07XG4rXG4rQmVmb3JlIGNhbGxpbmcgdGhpcyBpb2N0bCwgdXNlcnNwYWNlIG11c3Qgc2V0IHRoZSBgYHNpemVgYCBmaWVsZCB0b1xuK2Bgc2l6ZW9mKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzKWBgIGFuZCB6ZXJvIHRoZSBgYGZsYWdzYGAgZmllbGQuXG4rVGhlIGtlcm5lbCByZWplY3RzIG5vbi16ZXJvIGBgZmxhZ3NgYCB3aXRoIGBgLUVJTlZBTGBgIHRvIHByZXZlbnRcbit1bmluaXRpYWxpemVkIHN0YWNrIHZhbHVlcyBmcm9tIGJlaW5nIHNpbGVudGx5IGFjY2VwdGVkLCBrZWVwaW5nIHRoZVxuK2ZpZWxkIGF2YWlsYWJsZSBmb3IgZnV0dXJlIHVzZSB3aXRob3V0IEFCSSBhbWJpZ3VpdHkuXG4rXG4rVGhlIGlvY3RsIHVzZXMgYGBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKWBgIGFuZCBgYGNvcHlfc3RydWN0X3RvX3VzZXIoKWBgXG4rdG8gc3VwcG9ydCBleHRlbnNpYmxlIHZlcnNpb25pbmc6IGlmIHVzZXJzcGFjZSBwYXNzZXMgYSBzdHJ1Y3Qgc21hbGxlclxuK3RoYW4gdGhlIGN1cnJlbnQga2VybmVsIHZlcnNpb24gKGBgc2l6ZSBcdTAwM2U9IEtWTV9QUENfQ09NUEFUX0NBUFNfU0laRV9WRVIwYGApLFxuK3RoZSBrZXJuZWwgemVyby1wYWRzIHVua25vd24gdHJhaWxpbmcgZmllbGRzLiBJZiB1c2Vyc3BhY2UgcGFzc2VzIGEgbGFyZ2VyXG4rc3RydWN0IChgYHNpemUgXHUwMDNlIHNpemVvZihzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcylgYCksIHRoZSBrZXJuZWwgd3JpdGVzXG4rYmFjayBpdHMgb3duIHN0cnVjdCBzaXplIGludG8gdGhlIGBgc2l6ZWBgIGZpZWxkIGFuZCByZXR1cm5zIGBgLUUyQklHYGAsXG4rYWxsb3dpbmcgdXNlcnNwYWNlIHRvIGRpc2NvdmVyIHRoZSBrZXJuZWwncyBzdHJ1Y3Qgc2l6ZSBhbmQgcmV0cnkuXG4rYGBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMGBgICgyNCkgaXMgYSBmcm96ZW4gY29uc3RhbnQgbWFya2luZyB0aGVcbitzaXplIG9mIHRoZSBpbml0aWFsIHN0cnVjdCB2ZXJzaW9uLlxuK1xuK1RoZSBgYGNvbXBhdF9jYXBhYmlsaXRpZXNgYCBiaXQgZmllbGQgZGVzY3JpYmVzIHRoZSBwcm9jZXNzb3IgY29tcGF0aWJpbGl0eVxuK21vZGVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdC4gVGhlIGZvbGxvd2luZyBiaXRzIGluZGljYXRlIHN1cHBvcnQgZm9yIHNwZWNpZmljXG4rcHJvY2Vzc29yIG1vZGVzICh1c2luZyBJQk0ncyBNU0ItMCBjb252ZW50aW9uIHdoZXJlIGJpdCAwIGlzIHRoZSBtb3N0XG4rc2lnbmlmaWNhbnQgYml0KTpcbitcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICAoYml0IDEpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjkgcHJvY2Vzc29yIG1vZGVcbistIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTBgYCAoYml0IDIpIC0tIEtWTSBndWVzdHMgY2FuIHJ1biBpbiBQb3dlcjEwIHByb2Nlc3NvciBtb2RlXG4rLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExYGAgKGJpdCAzKSAtLSBLVk0gZ3Vlc3RzIGNhbiBydW4gaW4gUG93ZXIxMSBwcm9jZXNzb3IgbW9kZVxuK1xuKy4uIG5vdGU6OlxuK1xuKyAgIFRoZSBiaXQgbnVtYmVyaW5nIGFib3ZlIHVzZXMgSUJNJ3MgTVNCLTAgY29udmVudGlvbiAoYml0IDAgaXMgdGhlIG1vc3RcbisgICBzaWduaWZpY2FudCBiaXQpLiBJbiB0aGUgYWN0dWFsIGltcGxlbWVudGF0aW9uLCB0aGVzZSBhcmUgZGVmaW5lZCBhczpcbitcbisgICAtIGBgS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOWBgICA9IGBgKDFVTEwgXHUwMDNjXHUwMDNjIDYyKWBgXG4rICAgLSBgYEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwYGAgPSBgYCgxVUxMIFx1MDAzY1x1MDAzYyA2MSlgYFxuKyAgIC0gYGBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMWBgID0gYGAoMVVMTCBcdTAwM2NcdTAwM2MgNjApYGBcbitcbisgICBVc2Vyc3BhY2Ugc2hvdWxkIHVzZSB0aGUgZGVmaW5lZCBjb25zdGFudHMgZnJvbSBgYFx1MDAzY2xpbnV4L2t2bS5oXHUwMDNlYGAgcmF0aGVyXG4rICAgdGhhbiBoYXJkY29kaW5nIGJpdCBwb3NpdGlvbnMuXG4rXG4gLi4gX2t2bV9ydW46XG4gXG4gNS4gVGhlIGt2bV9ydW4gc3RydWN0dXJlXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaCBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbmluZGV4IDA5NTNmMmRhYTQ2NjBmLi4xNjllYTZhN2ZiYWQ0NCAxMDA2NDRcbi0tLSBhL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmhcbkBAIC0zMTksNiArMzE5LDcgQEAgc3RydWN0IGt2bXBwY19vcHMge1xuIFx0Ym9vbCAoKmhhc2hfdjNfcG9zc2libGUpKHZvaWQpO1xuIFx0aW50ICgqY3JlYXRlX3ZtX2RlYnVnZnMpKHN0cnVjdCBrdm0gKmt2bSk7XG4gXHRpbnQgKCpjcmVhdGVfdmNwdV9kZWJ1Z2ZzKShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHN0cnVjdCBkZW50cnkgKmRlYnVnZnNfZGVudHJ5KTtcbitcdGludCAoKmdldF9jb21wYXRfY2Fwcykoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcyk7XG4gfTtcbiBcbiBleHRlcm4gc3RydWN0IGt2bXBwY19vcHMgKmt2bXBwY19odl9vcHM7XG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS91YXBpL2FzbS9rdm0uaFxuaW5kZXggMDc3YzU0MzdmNTIxOWIuLjkxM2E2NGI5MDFhM2Q3IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2luY2x1ZGUvdWFwaS9hc20va3ZtLmhcbisrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL3VhcGkvYXNtL2t2bS5oXG5AQCAtNDM3LDYgKzQzNywyNCBAQCBzdHJ1Y3Qga3ZtX3BwY19jcHVfY2hhciB7XG4gXHRfX3U2NFx0YmVoYXZpb3VyX21hc2s7XHRcdC8qIHZhbGlkIGJpdHMgaW4gYmVoYXZpb3VyICovXG4gfTtcbiBcbisvKiBGb3IgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgKi9cbitzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyB7XG4rXHRfX3U2NFx0c2l6ZTtcdFx0XHQvKiBTaXplIG9mIHRoaXMgc3RydWN0dXJlICovXG4rXHRfX3U2NFx0ZmxhZ3M7XHRcdFx0LyogUmVzZXJ2ZWQgZm9yIGZ1dHVyZSB1c2UgKi9cbitcdF9fdTY0XHRjb21wYXRfY2FwYWJpbGl0aWVzO1x0LyogQ2FwYWJpbGl0aWVzIHN1cHBvcnRlZCBieSB0aGUgaG9zdCAqL1xuK307XG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBTX1NJWkVfVkVSMFx0MjQgLyogc2l6ZW9mIGZpcnN0IHB1Ymxpc2hlZCBzdHJ1Y3QgKi9cbitcbisvKlxuKyAqIENhcGFiaWxpdHkgYml0cyBmb3IgY29tcGF0X2NhcGFiaWxpdGllcyBmaWVsZCBpbiBrdm1fcHBjX2NvbXBhdF9jYXBzLlxuKyAqIFRoZXNlIGJpdHMgaW5kaWNhdGUgd2hpY2ggcHJvY2Vzc29yIGNvbXBhdGliaWxpdHkgbW9kZXMgYXJlIHN1cHBvcnRlZC5cbisgKi9cbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjlcdCgxVUxMIFx1MDAzY1x1MDAzYyA2MilcbisjZGVmaW5lIEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjEwXHQoMVVMTCBcdTAwM2NcdTAwM2MgNjEpXG4rI2RlZmluZSBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMVx0KDFVTEwgXHUwMDNjXHUwMDNjIDYwKVxuKyNkZWZpbmUgS1ZNX1BQQ19DT01QQVRfQklUTUFTS1x0XHQoS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOSB8IFxcXG4rXHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMCB8IFxcXG4rXHRcdFx0XHRcdCBLVk1fUFBDX0NPTVBBVF9DQVBfUE9XRVIxMSlcbiAvKlxuICAqIFZhbHVlcyBmb3IgY2hhcmFjdGVyIGFuZCBjaGFyYWN0ZXJfbWFzay5cbiAgKiBUaGVzZSBhcmUgaWRlbnRpY2FsIHRvIHRoZSB2YWx1ZXMgdXNlZCBieSBIX0dFVF9DUFVfQ0hBUkFDVEVSSVNUSUNTLlxuZGlmZiAtLWdpdCBhL2FyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5pbmRleCA2MWRiZWVhMzE3ZjNiNy4uNzBkY2QzNzBmZDlhYzcgMTAwNjQ0XG4tLS0gYS9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG4rKysgYi9hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXG5AQCAtNjUxMCw2ICs2NTEwLDYzIEBAIHN0YXRpYyBib29sIGt2bXBwY19oYXNoX3YzX3Bvc3NpYmxlKHZvaWQpXG4gXHRyZXR1cm4gdHJ1ZTtcbiB9XG4gXG4rc3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY29uc3QgX19iZTMyIGNwdV92ZXJzaW9uLFxuK1x0XHRcdFx0ICAgICAgdW5zaWduZWQgbG9uZyAqY2FwYWJpbGl0aWVzKVxuK3tcbitcdHN3aXRjaCAoY3B1X3ZlcnNpb24pIHtcbitcdGNhc2UgUFZSX0FSQ0hfMzFfUDExOlxuK1x0XHQqY2FwYWJpbGl0aWVzIHw9IEtWTV9QUENfQ09NUEFUX0NBUF9QT1dFUjExO1xuK1x0XHRmYWxsdGhyb3VnaDtcbitcdGNhc2UgUFZSX0FSQ0hfMzE6XG4rXHRcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSMTA7XG4rXHRcdGZhbGx0aHJvdWdoO1xuK1x0Y2FzZSBQVlJfQVJDSF8zMDA6XG4rXHRcdCpjYXBhYmlsaXRpZXMgfD0gS1ZNX1BQQ19DT01QQVRfQ0FQX1BPV0VSOTtcbitcdFx0YnJlYWs7XG4rXHRkZWZhdWx0OlxuK1x0XHRyZXR1cm4gLUVJTlZBTDtcbitcdH1cbitcbitcdHJldHVybiAwO1xuK31cbitcbitzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2Fwcylcbit7XG4rXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xuK1x0dW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMgPSAwO1xuK1x0Y29uc3QgX19iZTMyICpwcm9wID0gTlVMTDtcbitcdGxvbmcgcmMgPSAtRUlOVkFMO1xuK1x0dTMyIGNwdV92ZXJzaW9uO1xuK1xuK1x0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xuK1x0XHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xuK1x0XHRcdFdBUk5fT05fT05DRSghbmVzdGVkX2NhcGFiaWxpdGllcyk7XG4rXHRcdFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcbitcdFx0XHRyYyA9IDA7XG4rXHRcdH0gZWxzZSB7XG4rXHRcdFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcImNwdVwiKSB7XG4rXHRcdFx0XHRwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBcImNwdS12ZXJzaW9uXCIsIE5VTEwpO1xuK1x0XHRcdFx0aWYgKHByb3ApIHtcbitcdFx0XHRcdFx0Y3B1X3ZlcnNpb24gPSBiZTMyX3RvX2NwdXAocHJvcCk7XG4rXHRcdFx0XHRcdG9mX25vZGVfcHV0KG5wKTtcbitcdFx0XHRcdFx0YnJlYWs7XG4rXHRcdFx0XHR9XG4rXHRcdFx0fVxuK1x0XHRcdGlmICghcHJvcClcbitcdFx0XHRcdHJldHVybiAtRUlOVkFMO1xuK1x0XHRcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxuK1x0XHRcdFx0XHRcdFx0ICAgIFx1MDAyNmNhcGFiaWxpdGllcyk7XG4rXHRcdH1cbitcdH1cbitcbitcdGlmIChyYyBcdTAwM2MgMClcbitcdFx0cmV0dXJuIHJjO1xuK1xuK1x0aG9zdF9jYXBzLVx1MDAzZWNvbXBhdF9jYXBhYmlsaXRpZXMgPSBjYXBhYmlsaXRpZXMgXHUwMDI2IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7XG4rXG4rXHRyZXR1cm4gcmM7XG4rfVxuK1xuIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0LmdldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3NyZWdzX2h2LFxuIFx0LnNldF9zcmVncyA9IGt2bV9hcmNoX3ZjcHVfaW9jdGxfc2V0X3NyZWdzX2h2LFxuQEAgLTY1NTIsNiArNjYwOSw3IEBAIHN0YXRpYyBzdHJ1Y3Qga3ZtcHBjX29wcyBrdm1fb3BzX2h2ID0ge1xuIFx0Lmhhc2hfdjNfcG9zc2libGUgPSBrdm1wcGNfaGFzaF92M19wb3NzaWJsZSxcbiBcdC5jcmVhdGVfdmNwdV9kZWJ1Z2ZzID0ga3ZtcHBjX2FyY2hfY3JlYXRlX3ZjcHVfZGVidWdmc19odixcbiBcdC5jcmVhdGVfdm1fZGVidWdmcyA9IGt2bXBwY19hcmNoX2NyZWF0ZV92bV9kZWJ1Z2ZzX2h2LFxuK1x0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXG4gfTtcbiBcbiBzdGF0aWMgaW50IGt2bV9pbml0X3N1YmNvcmVfYml0bWFwKHZvaWQpXG5kaWZmIC0tZ2l0IGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMgYi9hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY1xuaW5kZXggMDAzMDIzOTlmYzM3YjQuLjhkNjYzMmM2NGNhNWY5IDEwMDY0NFxuLS0tIGEvYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNcbisrKyBiL2FyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jXG5AQCAtNjk3LDYgKzY5NywxMyBAQCBpbnQga3ZtX3ZtX2lvY3RsX2NoZWNrX2V4dGVuc2lvbihzdHJ1Y3Qga3ZtICprdm0sIGxvbmcgZXh0KVxuIFx0XHRcdH1cbiBcdFx0fVxuIFx0XHRicmVhaztcbisjaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcbitcdGNhc2UgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFM6XG4rXHRcdHIgPSAwO1xuK1x0XHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxuK1x0XHRcdHIgPSAxO1xuK1x0XHRicmVhaztcbisjZW5kaWYgLyogQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUgKi9cbiBcdGRlZmF1bHQ6XG4gXHRcdHIgPSAwO1xuIFx0XHRicmVhaztcbkBAIC0yNDYzLDYgKzI0NzAsNzAgQEAgaW50IGt2bV9hcmNoX3ZtX2lvY3RsKHN0cnVjdCBmaWxlICpmaWxwLCB1bnNpZ25lZCBpbnQgaW9jdGwsIHVuc2lnbmVkIGxvbmcgYXJnKVxuIFx0XHRyID0ga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2Vzdm1fb2ZmKGt2bSk7XG4gXHRcdGJyZWFrO1xuIFx0fVxuK1x0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xuK1x0XHRzdHJ1Y3Qga3ZtX3BwY19jb21wYXRfY2FwcyBob3N0X2NhcHMgPSB7fTtcbitcdFx0dTY0IHVzaXplO1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBSZWFkIHRoZSBzaXplIGZpZWxkIGZpcnN0IHRvIGRyaXZlIGNvcHlfc3RydWN0X2Zyb21fdXNlci5cbitcdFx0ICogc2l6ZSBtdXN0IGJlIHRoZSBmaXJzdCBmaWVsZCBvZiB0aGUgc3RydWN0LlxuK1x0XHQgKi9cbitcdFx0ciA9IC1FRkFVTFQ7XG4rXHRcdGlmIChnZXRfdXNlcih1c2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuK1x0XHRcdGdvdG8gb3V0O1xuK1xuK1x0XHQvKlxuK1x0XHQgKiBFbmZvcmNlIGEgbWluaW11bTogcmVqZWN0IGJ1ZmZlcnMgc21hbGxlciB0aGFuIHRoZSBpbml0aWFsXG4rXHRcdCAqIHN0cnVjdCB2ZXJzaW9uIChWRVIwKS4gVGhpcyBhbGxvd3Mgb2xkIHVzZXJzcGFjZSBjb21waWxlZFxuK1x0XHQgKiBhZ2FpbnN0IHRoZSBvcmlnaW5hbCBzdHJ1Y3QgdG8gc3RpbGwgd29yayBvbiBhIG5ld2VyIGtlcm5lbFxuK1x0XHQgKiB0aGF0IGhhcyBncm93biB0aGUgc3RydWN0IHdpdGggYXBwZW5kZWQgZmllbGRzLlxuK1x0XHQgKi9cbitcdFx0ciA9IC1FSU5WQUw7XG4rXHRcdGlmICh1c2l6ZSBcdTAwM2MgS1ZNX1BQQ19DT01QQVRfQ0FQU19TSVpFX1ZFUjApXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdC8qXG4rXHRcdCAqIE5ldyB1c2Vyc3BhY2Ugd2l0aCBhIGxhcmdlciBzdHJ1Y3QgY2FsbGVkIGFuIG9sZGVyIGtlcm5lbC5cbitcdFx0ICogV3JpdGUgYmFjayBrc2l6ZSBpbiBob3N0X2NhcHMuc2l6ZSBzbyB1c2Vyc3BhY2Uga25vd3Mgd2hpY2hcbitcdFx0ICogb2xkZXIgc3RydWN0IHRvIHJldHJ5IHdpdGgsIHRoZW4gZmFpbCB3aXRoIC1FMkJJRy5cbitcdFx0ICovXG4rXHRcdGlmICh1c2l6ZSBcdTAwM2Ugc2l6ZW9mKGhvc3RfY2FwcykpIHtcbitcdFx0XHRob3N0X2NhcHMuc2l6ZSA9IHNpemVvZihob3N0X2NhcHMpO1xuK1x0XHRcdHIgPSAtRUZBVUxUO1xuK1x0XHRcdGlmIChwdXRfdXNlcihob3N0X2NhcHMuc2l6ZSwgKF9fdTY0IF9fdXNlciAqKWFyZ3ApKVxuK1x0XHRcdFx0Z290byBvdXQ7XG4rXHRcdFx0ciA9IC1FMkJJRztcbitcdFx0XHRnb3RvIG91dDtcbitcdFx0fVxuK1xuK1x0XHQvKlxuK1x0XHQgKiBjb3B5X3N0cnVjdF9mcm9tX3VzZXIoKSBoYW5kbGVzIGZvcndhcmQvYmFja3dhcmQgY29tcGF0OlxuK1x0XHQgKiAgIHVzaXplID09IGtzaXplOiB2ZXJiYXRpbSBjb3B5XG4rXHRcdCAqICAgdXNpemUgXHUwMDNjICBrc2l6ZTogemVyby1wYWQgdHJhaWxpbmcgKG9sZCB1c2Vyc3BhY2UsIG5ldyBrZXJuZWwpXG4rXHRcdCAqL1xuK1x0XHRyID0gY29weV9zdHJ1Y3RfZnJvbV91c2VyKFx1MDAyNmhvc3RfY2Fwcywgc2l6ZW9mKGhvc3RfY2FwcyksXG4rXHRcdFx0XHRcdCAgYXJncCwgdXNpemUpO1xuK1x0XHRpZiAocilcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0LyogUmVzZXJ2ZWQgZmllbGRzIG11c3QgYmUgemVybyAqL1xuK1x0XHRyID0gLUVJTlZBTDtcbitcdFx0aWYgKGhvc3RfY2Fwcy5mbGFncylcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0ciA9IC1FTk9UVFk7XG4rXHRcdGlmICgha3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHMpXG4rXHRcdFx0Z290byBvdXQ7XG4rXG4rXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpO1xuK1x0XHRpZiAocilcbitcdFx0XHRnb3RvIG91dDtcbitcbitcdFx0aG9zdF9jYXBzLnNpemUgPSBzaXplb2YoaG9zdF9jYXBzKTtcbitcdFx0ciA9IGNvcHlfc3RydWN0X3RvX3VzZXIoYXJncCwgdXNpemUsIFx1MDAyNmhvc3RfY2FwcyxcbitcdFx0XHRcdFx0c2l6ZW9mKGhvc3RfY2FwcyksIE5VTEwpO1xuK1x0XHRicmVhaztcbitcdH1cbiBcdGRlZmF1bHQ6IHtcbiBcdFx0c3RydWN0IGt2bSAqa3ZtID0gZmlscC1cdTAwM2Vwcml2YXRlX2RhdGE7XG4gXHRcdHIgPSBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWFyY2hfdm1faW9jdGwoZmlscCwgaW9jdGwsIGFyZyk7XG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oIGIvaW5jbHVkZS91YXBpL2xpbnV4L2t2bS5oXG5pbmRleCA0MTkwMTEwOTdmYThlMi4uMWNmOWE5NTk2NjllOGQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtLmhcbisrKyBiL2luY2x1ZGUvdWFwaS9saW51eC9rdm0uaFxuQEAgLTk5Nyw2ICs5OTcsNyBAQCBzdHJ1Y3Qga3ZtX2VuYWJsZV9jYXAge1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX0tFWU9QIDI0N1xuICNkZWZpbmUgS1ZNX0NBUF9TMzkwX1ZTSUVfRVNBTU9ERSAyNDhcbiAjZGVmaW5lIEtWTV9DQVBfUzM5MF9IUEFHRV8yRyAyNDlcbisjZGVmaW5lIEtWTV9DQVBfUFBDX0NPTVBBVF9DQVBTIDI1MFxuIFxuIHN0cnVjdCBrdm1faXJxX3JvdXRpbmdfaXJxY2hpcCB7XG4gXHRfX3UzMiBpcnFjaGlwO1xuQEAgLTEzNTAsNiArMTM1MSw5IEBAIHN0cnVjdCBrdm1fczM5MF9rZXlvcCB7XG4gI2RlZmluZSBLVk1fR0VUX0RFVklDRV9BVFRSXHQgIF9JT1coS1ZNSU8sICAweGUyLCBzdHJ1Y3Qga3ZtX2RldmljZV9hdHRyKVxuICNkZWZpbmUgS1ZNX0hBU19ERVZJQ0VfQVRUUlx0ICBfSU9XKEtWTUlPLCAgMHhlMywgc3RydWN0IGt2bV9kZXZpY2VfYXR0cilcbiBcbisvKiBBdmFpbGFibGUgd2l0aCBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUyAqL1xuKyNkZWZpbmUgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNcdF9JTyhLVk1JTywgIDB4ZTQpXG4rXG4gLypcbiAgKiBpb2N0bHMgZm9yIHZjcHUgZmRzXG4gICovXG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODowMi40MTkzNTUxNTRaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3NDczOTE0NzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmV3IFBvd2VyUEMgS1ZNIENvbXBhdGliaWxpdHkgQ2FwYWJpbGl0aWVzIElvY3RsKipcblxuT2theSwgc28gd2UndmUgZ290IGEgbmV3IHBhdGNoIGludHJvZHVjaW5nIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMuIEl0IGxvb2tzIGxpa2UgdGhlIGlvY3RsJ3MgaGFuZGxpbmcgaXMgbmVhdGx5IHR1Y2tlZCBhd2F5IGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2Agd2l0aGluIHRoZSBga3ZtX2FyY2hfdm1faW9jdGxgIGZ1bmN0aW9uLiBGcm9tIHRoZXJlLCBpdCBkaXZlcyBpbnRvIGBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2FwcyhcdTAwMjZob3N0X2NhcHMpYC4gQW5kIHRoZSBhY3R1YWwgaW1wbGVtZW50YXRpb24sIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCwgcmVzaWRlcyBpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFNlZW1zIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2g7IGEgbmV3IGlvY3RsLCBuaWNlbHkgaW1wbGVtZW50ZWQuXG5cbk15IGluaXRpYWwgdGhvdWdodCBpcywgbmF0dXJhbGx5LCBcIklzIGl0IGZ1bmN0aW9uYWw/XCIgR2l2ZW4gaXQncyBhIG5ldyBpb2N0bCwgaXQgc2hvdWxkIGJlIHJlYWNoYWJsZSBpZiBzb21lb25lIGlzIHVzaW5nIEtWTSBvbiBQb3dlclBDLCBhc3N1bWluZyB0aGUgY29kZSBwYXRoIGlzIGNvcnJlY3RseSB3aXJlZCB1cC4gQnV0IHRoYXQgbGVhZHMgdG8gdGhlIG5leHQgcXVlc3Rpb246IHdoYXQgYWJvdXQgdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBDb3VsZCB3ZSByZWFjaCBpdCB0aHJvdWdoIFFFTVU/IFllcywgS1ZNIGlzIGFic29sdXRlbHkgZnV6emFibGUgaW4gUUVNVS4gU3l6a2FsbGVyIGlzIGEgZmFudGFzdGljIHRvb2wgZm9yIHRoYXQuIEJ1dCBkb2VzIFN5emthbGxlciAqc3BlY2lmaWNhbGx5KiBzdXBwb3J0IEtWTSBmdXp6aW5nIG9uIFBvd2VyUEM/IEkga25vdyBpdCdzIHdpZGVseSB1c2VkIG9uIHg4NiwgYnV0IFBvd2VyUEMgc3VwcG9ydC4uLiB0aGF0J3MgdGhlIGtleS5cblxuSSBuZWVkIHRvIGNvbmZpcm0gaWYgdGhlcmUgYXJlIGFueSBzcGVjaWZpYyBjb25maWd1cmF0aW9ucyB3ZSBuZWVkIHRvIGJlIGF3YXJlIG9mLiBUaGUgcGF0Y2ggdG91Y2hlcyBgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNgIGFuZCBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AsIGFuZCB0aGUgaW9jdGwgaXMsIG9mIGNvdXJzZSwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYC4gSSByZW1lbWJlciBzZWVpbmcgdGhhdCBgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGlzIGNoZWNrZWQgaW4gYGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb25gLiBPa2F5LCBsZXQncyBkaXZlIGludG8gYGFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZ2AgdG8gc2VlIHdoYXQgb3RoZXIgY29uZmlncyBtaWdodCBiZSByZWxldmFudCBhbmQgbWFrZSBzdXJlIHdlIGhhdmUgYWxsIHRoZSBwaWVjZXMgaW4gcGxhY2UgZm9yIHByb3BlciBmdXp6aW5nLiBHb3R0YSBtYWtlIHN1cmUgd2UgY292ZXIgYWxsIG91ciBiYXNlcy5cblxuXG4iLCJJbnB1dFRva2VucyI6NjA2MiwiT3V0cHV0VG9rZW5zIjozOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM0MiwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjA5Ljg5MzI3MjI0NloiLCJTZXEiOjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1MjQ1NTE3NSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0zOD1jb25maWcgS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTQxLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo0Mjpjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00My1cXHRib29sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NjI9Y29uZmlnIEtWTV9CT09LM1NfNjRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy02Ni1cXHRzZWxlY3QgS1ZNXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnOjY3OlxcdHNlbGVjdCBLVk1fQk9PSzNTX1BSX1BPU1NJQkxFIGlmICFLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTY4LVxcdHNlbGVjdCBQUENfNjRTX0hBU0hfTU1VXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Nzk9Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MS1cXHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXFx1MDAyNlxcdTAwMjYgUFBDX1BPV0VSTlZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6ODI6XFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODMtXFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTI5PWNvbmZpZyBLVk1fQk9PSzNTX0hWX1A5X1RJTUlOR1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMS1cXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxMzI6XFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTEzMy1cXHRoZWxwXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9MTQyPWNvbmZpZyBLVk1fQk9PSzNTX0hWX1A4X1RJTUlOR1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE0NC1cXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9FWElUX1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNDU6XFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFIFxcdTAwMjZcXHUwMDI2IERFQlVHX0ZTIFxcdTAwMjZcXHUwMDI2ICFLVk1fQk9PSzNTX0hWX1A5X1RJTUlOR1xcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0xNDYtXFx0aGVscFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnPTE1Nz1jb25maWcgS1ZNX0JPT0szU19IVl9ORVNURURfUE1VX1dPUktBUk9VTkRcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMTU4LVxcdGJvb2wgXFxcIk5lc3RlZCBMMCBob3N0IHdvcmthcm91bmQgZm9yIEwxIEtWTSBob3N0IFBNVSBoYW5kbGluZyBidWdcXFwiIGlmIEVYUEVSVFxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoxNTk6XFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTE2MC1cXHRkZWZhdWx0ICFFWFBFUlRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz0yNTE9Y29uZmlnIEtWTV9YSVZFXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctMjUzLVxcdGRlZmF1bHQgeVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzoyNTQ6XFx0ZGVwZW5kcyBvbiBLVk1fWElDUyBcXHUwMDI2XFx1MDAyNiBQUENfWElWRV9OQVRJVkUgXFx1MDAyNlxcdTAwMjYgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy0yNTUtXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlPTc4PWt2bS1ib29rM3NfNjQtYnVpbHRpbi10bS1vYmpzLSQoQ09ORklHX1BQQ19UUkFOU0FDVElPTkFMX01FTSkgKz0gXFxcXFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS04MC1cXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlOjgxOmlmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZS04Mi1rdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIpICs9IFxcXFxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM9MzY9a3ZtcHBjX2hjYWxsOlxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM6Mzc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUy0zOC1cXHRsYnpcXHRyMTAsSFNUQVRFX0lOX0dVRVNUKHIxMylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM9Njc9a3ZtcHBjX2ludGVycnVwdDpcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TOjY4OiNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtNjktXFx0c3RkXFx0cjEwLEhTVEFURV9TQ1JBVENIMChyMTMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TPTkyPUVORF9GVFJfU0VDVElPTl9JRlNFVChDUFVfRlRSX0hBU19QUFIpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTExNC0uTG5vX3NraXA6XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUzoxMTU6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUy0xMTYtI2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX1BSX1BPU1NJQkxFXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTE1My1cXHRiZXFcXHQxZlxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM6MTU0OiNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTU1LVxcdC8qIEhTUlIgaW50ZXJydXB0cyBnZXQgMiBhZGRlZCB0byBpbnRlcnJ1cHQgbnVtYmVyICovXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9lbnRyeS5TLTE2Ni1cXHRSRklfVE9fS0VSTkVMXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUzoxNjc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfZW50cnkuUy0xNjgtMjpcXHRtZnNwclxcdHI5LFNQUk5fSFNSUjBcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTc2LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlM6MTc3OiNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X2VudHJ5LlMtMTc4LVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfZXhwb3J0cy5jLTEyLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2V4cG9ydHMuYzoxMzojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19leHBvcnRzLmMtMTQtRVhQT1JUX1NZTUJPTF9HUEwoa3ZtcHBjX2h2X2VudHJ5X3RyYW1wb2xpbmUpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfeGljcy5jPTE0MDA9c3RhdGljIGludCBrdm1wcGNfeGljc19jcmVhdGUoc3RydWN0IGt2bV9kZXZpY2UgKmRldiwgdTMyIHR5cGUpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmMtMTQxOS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmM6MTQyMDojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmMtMTQyMS1cXHRpZiAoY3B1X2hhc19mZWF0dXJlKENQVV9GVFJfQVJDSF8yMDYpIFxcdTAwMjZcXHUwMDI2XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc194aWNzLmMtMTQyNi1cXHR9XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfeGljcy5jOjE0Mjc6I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfeGljcy5jLTE0MjgtXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz01MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTU4Ni0jZW5kaWYgLyogQ09ORklHX1BQQ19CT09LM1NfNjQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo1ODc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNTg4LVxcdGNhc2UgS1ZNX0NBUF9QUENfU01UOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjU4LSNlbmRpZlxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjY1OTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy02NjAtXFx0Y2FzZSBLVk1fQ0FQX1BQQ19GV05NSTpcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY2OS0jZW5kaWZcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo2NzA6I2lmIGRlZmluZWQoQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEUpXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjcxLVxcdGNhc2UgS1ZNX0NBUF9QUENfU0VDVVJFX0dVRVNUOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjk5LVxcdFxcdGJyZWFrO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwMDojaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy03MDEtXFx0Y2FzZSBLVk1fQ0FQX1BQQ19DT01QQVRfQ0FQUzpcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwNS1cXHRcXHRicmVhaztcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzo3MDY6I2VuZGlmIC8qIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFICovXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzA3LVxcdGRlZmF1bHQ6XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz0xMTM0PXN0YXRpYyB2b2lkIGt2bXBwY19jb21wbGV0ZV9tbWlvX2xvYWQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMTIzMC0jZW5kaWZcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoxMjMxOiNpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTEyMzItXFx0Y2FzZSBLVk1fTU1JT19SRUdfTkVTVEVEX0dQUjpcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTE4ODY9c3RhdGljIGludCBrdm1fdmNwdV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTE5ODYtI2VuZGlmIC8qIENPTkZJR19LVk1fWElWRSAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjE5ODc6I2lmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMTk4OC1cXHRjYXNlIEtWTV9DQVBfUFBDX0ZXTk1JOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtMTk5NC1cXHRcXHRicmVhaztcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYzoxOTk1OiNlbmRpZiAvKiBDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTE5OTYtXFx0ZGVmYXVsdDpcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jPTIxNjk9aW50IGt2bV92bV9pb2N0bF9lbmFibGVfY2FwKHN0cnVjdCBrdm0gKmt2bSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTIyMTItI2VuZGlmXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmM6MjIxMzojaWYgZGVmaW5lZChDT05GSUdfS1ZNX0JPT0szU19IVl9QT1NTSUJMRSlcXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYy0yMjE0LVxcdGNhc2UgS1ZNX0NBUF9QUENfU0VDVVJFX0dVRVNUOlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS90bS5TPTMxPV9HTE9CQUwoX19rdm1wcGNfc2F2ZV90bSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vdG0uUy03NC0zOlxcbmFyY2gvcG93ZXJwYy9rdm0vdG0uUzo3NTojaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL3RtLlMtNzYtQkVHSU5fRlRSX1NFQ1RJT05cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6MDkuOTQ1NzQzOTcxWiIsIlNlcSI6NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjkwNjExNzU2NywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFMgb24gUG93ZXJQQyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzIHRvIHRyYWNlIHRoZSBwYXRoIG9mIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AuIEkgc2VlIHRoYXQgYENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFYCBpcyB0aGUga2V5IGhlcmUsIGFuZCBpdCdzIHNlbGVjdGVkIGJ5IGBDT05GSUdfS1ZNX0JPT0szU182NF9IVmAsIHdoaWNoIGluIHR1cm4gaGluZ2VzIG9uIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gVGhhdCBtYWtlcyBzZW5zZTsgaXQncyB0aGUgUG93ZXJOViBoeXBlcnZpc29yLXNwZWNpZmljIGNhcGFiaWxpdHkgY2hlY2suIEkgc2hvdWxkIHZlcmlmeSB0aGUgY2FsbCBjaGFpbi5cblxuVGhlIGlvY3RsIGl0c2VsZiwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCwgaXMgaW1wbGVtZW50ZWQgYnkgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLCByZXNpZGluZyBpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIE5vdywgdGhlIGNydWNpYWwgcXVlc3Rpb24gaXMgd2hldGhlciB0aGlzIGZ1bmN0aW9uIGlzIGFjdHVhbGx5ICpyZWFjaGFibGUqLiBJIHRyYWNlIHRoZSBpb2N0bCBoYW5kbGluZyB0aHJvdWdoIGBrdm1fYXJjaF92bV9pb2N0bGAgd2l0aGluIGBhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuY2AuIEl0IGxvb2tzIGxpa2UgaXQgZGVsZWdhdGVzIHRvIGBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2Fwc2AsIGFuZCBJIGNhbiBzZWUgaW4gYGJvb2szc19odi5jYCB0aGF0IGBrdm1fb3BzX2h2YCBzZXRzIGAuZ2V0X2NvbXBhdF9jYXBzID0ga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuIEdvb2QsIHNvIHRoZSBwYXRoIGlzIGNsZWFyLiBJdCAqaXMqIHJlYWNoYWJsZS5cblxuTm93LCBhIGNyaXRpY2FsIHBvaW50OiBjYW4gdGhpcyBiZSBleGVyY2lzZWQgaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzPyBJdCdzIGVhc3kgdG8gZm9yZ2V0IHRoYXQgbm90IGV2ZXJ5dGhpbmcgaXMgdGVzdGFibGUuIEJ1dCBLVk0gb24gUG93ZXJQQyAqY2FuKiBiZSBydW4gaW4gUUVNVSwgc3BlY2lmaWNhbGx5IGBxZW11LXN5c3RlbS1wcGM2NGAuIFRoYXQncyBhIGh1Z2Ugd2luLiBBbmQgaWYgU3l6a2FsbGVyIHN1cHBvcnRzIGBxZW11LXN5c3RlbS1wcGM2NGAsIHRoZW4gdGhhdCBvcGVucyB0aGUgZG9vciBmb3IgZnV6emluZy5cblxuTGV0J3MgbmFpbCBkb3duIHRoZSBjb25maWd1cmF0aW9uIHJlcXVpcmVtZW50cyBzbyB3ZSBjYW4gYnVpbGQgYSBwcm9wZXIgdGVzdCBjYXNlLiBJIG5lZWQgYENPTkZJR19LVk1gLCBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgLCBhbmQgYENPTkZJR19QUENfUE9XRVJOVmAuIEkgc2hvdWxkIGNvbmZpcm0gdGhlIGRlcGVuZGVuY3kgc3RydWN0dXJlIGluIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIHRvIGJlIGFic29sdXRlbHkgY2VydGFpbiBJIGhhdmVuJ3QgbWlzc2VkIGFueXRoaW5nLCBidXQgSSdtIGZlZWxpbmcgY29uZmlkZW50IGFib3V0IHRoaXMuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjk5NDksIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjozNzQsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6MTYuODUxODY0NTU4WiIsIlNlcSI6NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjg3NDUwMTkxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mj1jb25maWcgS1ZNX0JPT0szU182NFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODoxNi45MzkzMjUxNDlaIiwiU2VxIjo3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjozMzI0MTYyMTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgaW50ZXJwcmV0YXRpb24gb2YgdGhhdCB0aG91Z2h0IHByb2Nlc3MsIGFzc3VtaW5nIEknbSBhbiBleHBlcnQgaW4gS1ZNIG9uIFBvd2VyUEM6XG5cbioqQW5hbHl6aW5nIHRoZSBLVk0gQm9vazNTIEh5cGVydmlzb3IgQ29uZmlndXJhdGlvbioqXG5cblJpZ2h0LCBzbyBgS1ZNX0JPT0szU182NF9IVmAgaXMgdGhlIGtleSBjb25maWd1cmF0aW9uIGhlcmUsIHRoYXQncyB0aGUgZm91bmRhdGlvbiB3ZSdyZSBkZWFsaW5nIHdpdGguIE5vdywgbGV0J3MgZGl2ZSBpbnRvIHRoZSBndXRzIG9mIGhvdyB0aGlzIGh5cGVydmlzb3Igd29ya3MsIHNwZWNpZmljYWxseSBpbiB0aGUgY29udGV4dCBvZiBjb21wYXRpYmlsaXR5LiBNeSBpbW1lZGlhdGUgdGhvdWdodCBpcyB0byBjaGVjayB0aGUgZnVuY3Rpb24gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHdpdGhpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFRoaXMgaXMgd2hlcmUgSSdkIGV4cGVjdCB0byBmaW5kIHRoZSBjb2RlIHRoYXQgZGVmaW5lcyB3aGF0IGNhcGFiaWxpdGllcyBhcmUgZXhwb3NlZCB0byBndWVzdHMuIFVuZGVyc3RhbmRpbmcgaG93IGNvbXBhdGliaWxpdHkgaXMgaGFuZGxlZCBhdCB0aGlzIGxldmVsIGlzIGNydWNpYWwgZm9yIGVuc3VyaW5nIGd1ZXN0IE9TZXMgYW5kIGFwcGxpY2F0aW9ucyBmdW5jdGlvbiBhcyBleHBlY3RlZC4gSSBuZWVkIHRvIHNlZSBob3cgaXQgaGFuZGxlcyBmZWF0dXJlIG5lZ290aWF0aW9uLiBUaGlzIGZ1bmN0aW9uIHByb2JhYmx5IGNvbnRhaW5zIHRoZSBsb2dpYyBmb3IgcmVwb3J0aW5nIHRoZSBzdXBwb3J0ZWQgaW5zdHJ1Y3Rpb24gc2V0LCByZWdpc3RlciBhdmFpbGFiaWxpdHksIGFuZCBvdGhlciBoeXBlcnZpc29yIGZlYXR1cmVzLCBidXQgSSBuZWVkIHRvIGNvbmZpcm0gdGhpcy4gVGltZSB0byBnZXQgbXkgaGFuZHMgZGlydHkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTg4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NTYsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6MjAuMjYzNDg5MTE2WiIsIlNlcSI6OCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjY4MDQ2OTMzLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bXBwY19nZXRfY29tcGF0X2NhcHNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NTEzPXN0YXRpYyBpbnQga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNvbnN0IF9fYmUzMiBjcHVfdmVyc2lvbixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUzMi1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1MzM6c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NTM0LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjU3MD1zdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjYxMS1cXHQuY3JlYXRlX3ZtX2RlYnVnZnMgPSBrdm1wcGNfYXJjaF9jcmVhdGVfdm1fZGVidWdmc19odixcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY2MTI6XFx0LmdldF9jb21wYXRfY2FwcyA9IGt2bXBwY19nZXRfY29tcGF0X2NhcHMsXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02NjEzLX07XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjIwLjMzMTU0MjQ0OVoiLCJTZXEiOjksIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjQwODI5NDkwNzIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqQW5hbHl6aW5nIEtWTS9QUEMgQ29tcGF0aWJpbGl0eSBDYXBhYmlsaXRpZXMqKlxuXG5Pa2F5LCBzbyBJJ3ZlIHRyYWNlZCB0aGUgZXhlY3V0aW9uIHBhdGggYW5kIEknbSBjb25maWRlbnQgdGhhdCB0aGUgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGZ1bmN0aW9uIGlzIGRlZmluaXRlbHkgYmVpbmcgY2FsbGVkLCB3aGljaCBpcyBhIGtleSBzdGFydGluZyBwb2ludC4gVGhpcyBtZWFucyB0aGUgY29ycmVzcG9uZGluZyBpb2N0bCBpcyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLCB1bmRlcnN0b29kLiBOb3csIEknbSB0aGlua2luZyBhYm91dCB0aGUgY29uZmlndXJhdGlvbnMgdGhhdCBuZWVkIHRvIGJlIGVuYWJsZWQuIFNwZWNpZmljYWxseSwgSSdtIGZvY3VzaW5nIG9uIGBLVk1fQk9PSzNTXzY0X0hWYCwgYXMgdGhhdCdzIGRpcmVjdGx5IHJlbGV2YW50IHRvIHRoZSBjb21wYXRpYmlsaXR5IGNoZWNrcy5cblxuQWgsIHJpZ2h0LCBidXQgSSBoYXZlIHRvIHJlbWVtYmVyIHRoZSBkZXBlbmRlbmNpZXMuIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBjb25kaXRpb25hbDsgaXQgcmVsaWVzIG9uIGJvdGggYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgIGJlaW5nIHNldC4gU28sIHRoZSBjb3JyZWN0IGFjdGlvbiBoZXJlIGlzIHRvIGFkZCBgS1ZNX0JPT0szU182NF9IVmAgdG8gYEVuYWJsZUNvbmZpZ3NgIHRvIGFjdGl2YXRlIHRoaXMgcGFydGljdWxhciBzZXQgb2YgZmVhdHVyZXMuXG5cbk5vdywgbGV0J3Mgc3dpdGNoIGdlYXJzIGEgYml0IGFuZCBjaGVjayBga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzYC4gVGhhdCdzIHdoZXJlIHRoZSBhY3R1YWwgbWFwcGluZyBsb2dpYyBpcyBkb25lLCBzbyBJIG5lZWQgdG8gdW5kZXJzdGFuZCB0aGF0IHBpZWNlIG5leHQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjExNjA4LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTM2LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjI0LjQxNDQ5MzU3MVoiLCJTZXEiOjEwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjIzNjY1Njg4LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY0OTA9c3RhdGljIGJvb2wga3ZtcHBjX2hhc2hfdjNfcG9zc2libGUodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUxMi1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1MTM6c3RhdGljIGludCBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY29uc3QgX19iZTMyIGNwdV92ZXJzaW9uLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjUxNC1cXHRcXHRcXHRcXHQgICAgICB1bnNpZ25lZCBsb25nICpjYXBhYmlsaXRpZXMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MzM9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NTYtXFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2NTU3OlxcdFxcdFxcdHJjID0ga3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzKGNwdV92ZXJzaW9uLFxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU1OC1cXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNhcGFiaWxpdGllcyk7XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjI0LjYzODE2MzEyOVoiLCJTZXEiOjExLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTgxMjcyNDI2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFuYWx5c2lzIG9mIHRoZSBLVk0gUG93ZXJQQyBJb2N0bCBQYXRjaCoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggYW5kIGltbWVkaWF0ZWx5LCB0aGUgY29yZSBvZiBpdCBzZWVtcyB0byBpbnZvbHZlIGZ1bmN0aW9ucyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgYW5kIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgIGZvciB0aGUgYEZvY3VzU3ltYm9sc2AuIExldCdzIGp1c3QgbWFrZSBzdXJlIHRoZXJlIGFyZW4ndCBhbnkgb3RoZXIga2V5IGZ1bmN0aW9ucyBpbnZvbHZlZC4gQWgsIHJpZ2h0LiBJdCBsb29rcyBsaWtlIHRoZSBpb2N0bCBoYW5kbGluZyBpcyBkZWxlZ2F0ZWQgdG8gYGt2bV9hcmNoX3ZtX2lvY3RsYCBpbiBgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNgLiBIb3dldmVyLCBga3ZtX2FyY2hfdm1faW9jdGxgIGlzIHByZXR0eSBnZW5lcmljLCBpdCBsb29rcyBsaWtlLCBzbyBJIHNob3VsZCByZWFsbHkga2VlcCBteSBmb2N1cyBvbiBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AuXG5cbkhvbGQgb24uIFRoZSBpb2N0bCBpdHNlbGYgaXMgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYC4gR290IGl0LiBTbywgdGhpcyBwYXRjaCBpcyBpbnRyb2R1Y2luZyBhIG5ldyBpb2N0bCB0byB0aGUgS1ZNIGludGVyZmFjZSBvbiBQb3dlclBDLiBUaGF04oCZcyBhIGZ1bmN0aW9uYWwgY2hhbmdlLCBkZWZpbml0ZWx5IHNvbWV0aGluZyB3ZSdkIHdhbnQgdG8gZnV6eiB0aG9yb3VnaGx5LiBOb3csIEkgc2hvdWxkIG1ha2Ugc3VyZSBJIHVuZGVyc3RhbmQgd2hpY2ggY29uZmlnIGVuYWJsZXMgdGhpcy5cblxuUmlnaHQsIHRoZSBgRW5hYmxlQ29uZmlnc2AgYXJlIGltcG9ydGFudC4gSSByZW1lbWJlciBgS1ZNX0JPT0szU182NF9IVmAgZW5hYmxlcyBgYm9vazNzX2h2LmNgLiBJcyB0aGVyZSBhbnl0aGluZyBlbHNlIHRvIGNvbnNpZGVyPyBMZXQncyB0YWtlIGEgcXVpY2sgbG9vayBhdCB0aGUgYGFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGVgIGFuZCBzZWUgaWYgYW55dGhpbmcgZWxzZSBpcyByZWxldmFudC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTIzMzgsIk91dHB1dFRva2VucyI6MzUsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoyMzAsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6MjkuODE5NDM3NTk1WiIsIlNlcSI6MTIsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTAwNzM2NDkyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImJvb2szc19odi5vXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjI9a3ZtLWh2LXkgKz0gXFxcXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU6NjM6XFx0Ym9vazNzX2h2Lm8gXFxcXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjQtXFx0Ym9vazNzX2h2X2ludGVycnVwdHMubyBcXFxcXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjMwLjkyMDE4MjYzN1oiLCJTZXEiOjEzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzg0MDI4Nzc5LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJPa2F5LCBoZXJlJ3MgbXkgc3VtbWFyeSwgdGFraW5nIHRoZSBwZXJzcGVjdGl2ZSBvZiBzb21lb25lIGtub3dsZWRnZWFibGUgaW4gYSB0ZWNobmljYWwgZmllbGQ6XG5cbioqSW52ZXN0aWdhdGluZyBga3ZtLWh2LXlgJ3MgUHVycG9zZSoqXG5cbkFscmlnaHQsIGJlZm9yZSBJIGRpdmUgaW50byBhbnl0aGluZyBkZWVwZXIsIHRoZSBmaXJzdCB0aGluZyBJIG5lZWQgdG8gZG8gaXMgZmlndXJlIG91dCBleGFjdGx5IHdoYXQgYGt2bS1odi15YCAqaXMqLiBJIGNhbid0IHByb2NlZWQgZWZmZWN0aXZlbHkgdW50aWwgSSBrbm93IHdoYXQgaXQncyBhc3NpZ25lZCB0by4gSXMgaXQgYSBtb2R1bGUsIGEgdmlydHVhbCBtYWNoaW5lIElELCBhIGh5cGVydmlzb3Igc2V0dGluZywgYSBkZXZpY2U/IFdpdGhvdXQga25vd2luZyBpdHMgZnVuZGFtZW50YWwgcm9sZSB3aXRoaW4gdGhlIHN5c3RlbSwgYW55IGZ1cnRoZXIgYW5hbHlzaXMgaXMganVzdCBndWVzc3dvcmsuIFRpbWUgdG8gZ28gbG9va2luZyBmb3IgaXRzIGRlZmluaXRpb24uIEkgbmVlZCB0byB0cmFjZSB0aGlzIHZhcmlhYmxlJ3MgYXNzaWdubWVudCBhbmQgdW5kZXJzdGFuZCBpdHMgY29udGV4dC5cblxuXG4iLCJJbnB1dFRva2VucyI6MTI5OTYsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxNywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODozMy43MDQyMTM2NzZaIiwiU2VxIjoxNCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk3NjYxMjIxLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bS1odi15XCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU9NjA9ZW5kaWZcXG5hcmNoL3Bvd2VycGMva3ZtL01ha2VmaWxlLTYxLVxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGU6NjI6a3ZtLWh2LXkgKz0gXFxcXFxcbmFyY2gvcG93ZXJwYy9rdm0vTWFrZWZpbGUtNjMtXFx0Ym9vazNzX2h2Lm8gXFxcXFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODozMy44MDE4ODAwMjdaIiwiU2VxIjoxNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6Mjk4NjE2MTg5OSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgbGV0J3MgZGl2ZSBpbnRvIHRoaXMgTWFrZWZpbGUuIEkgbmVlZCB0byBnZXQgYSBjb21wcmVoZW5zaXZlIHVuZGVyc3RhbmRpbmcgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBjaGFuZ2VzLCBzbyBhIGxpbmUtYnktbGluZSByZXZpZXcgaXMgYWJzb2x1dGVseSBuZWNlc3NhcnkuIEknbGwgbmVlZCB0byBsb29rIGF0IGV2ZXJ5IHRhcmdldCwgZXZlcnkgZGVwZW5kZW5jeSwgZXZlcnkgY29tbWFuZCwgZXZlcnkgdmFyaWFibGUsIGFuZCBldmVyeSBpbmNsdWRlLiBUaGlzIGlzbid0IGp1c3QgYWJvdXQgc3BvdHRpbmcgb2J2aW91cyBlcnJvcnMsIGJ1dCBhYm91dCBncmFzcGluZyB0aGUgb3ZlcmFsbCBmbG93IGFuZCBpbnRlbmRlZCBiZWhhdmlvci4gSSB3YW50IHRvIGJ1aWxkIGEgbWVudGFsIG1hcCBvZiBob3cgdGhlc2UgY29tcG9uZW50cyBhcmUgaW50ZXJjb25uZWN0ZWQsIHNvIEkgY2FuIHByZWRpY3QgdGhlIGltcGFjdHMgb2YgYW55IG1vZGlmaWNhdGlvbnMuIFRoaXMgaXMgYWJvdXQgZW5zdXJpbmcgSSBkb27igJl0IGludHJvZHVjZSBhbnkgcmVncmVzc2lvbnMgb3IgdW5pbnRlbmRlZCBjb25zZXF1ZW5jZXMgZG93biB0aGUgbGluZS4gQSBob2xpc3RpYyB2aWV3IGlzIGtleS5cblxuXG4iLCJJbnB1dFRva2VucyI6MTMyNzQsIk91dHB1dFRva2VucyI6MzYsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo4LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjM2Ljc4ODA0Mzk0NloiLCJTZXEiOjE2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDI3MDAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxLFxuICBcIkxpbmVDb3VudFwiOiAxMDBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiICAgMTpcXHQjIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuICAgMjpcXHQjXFxuICAgMzpcXHQjIE1ha2VmaWxlIGZvciBLZXJuZWwtYmFzZWQgVmlydHVhbCBNYWNoaW5lIG1vZHVsZVxcbiAgIDQ6XFx0I1xcbiAgIDU6XFx0XFxuICAgNjpcXHRjY2ZsYWdzLXkgOj0gLUl2aXJ0L2t2bSAtSWFyY2gvcG93ZXJwYy9rdm1cXG4gICA3OlxcdFxcbiAgIDg6XFx0aW5jbHVkZSAkKHNyY3RyZWUpL3ZpcnQva3ZtL01ha2VmaWxlLmt2bVxcbiAgIDk6XFx0XFxuICAxMDpcXHRjb21tb24tb2Jqcy15ICs9IHBvd2VycGMubyBlbXVsYXRlX2xvYWRzdG9yZS5vXFxuICAxMTpcXHRvYmotJChDT05GSUdfS1ZNX0VYSVRfVElNSU5HKSArPSB0aW1pbmcub1xcbiAgMTI6XFx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfSEFORExFUikgKz0gYm9vazNzX2V4cG9ydHMub1xcbiAgMTM6XFx0XFxuICAxNDpcXHRBRkxBR1NfYm9va2VfaW50ZXJydXB0cy5vIDo9IC1JJChvYmp0cmVlKS8kKG9iailcXG4gIDE1OlxcdFxcbiAgMTY6XFx0a3ZtLWU1MDAtb2JqcyA6PSBcXFxcXFxuICAxNzpcXHRcXHQkKGNvbW1vbi1vYmpzLXkpIFxcXFxcXG4gIDE4OlxcdFxcdGVtdWxhdGUubyBcXFxcXFxuICAxOTpcXHRcXHRib29rZS5vIFxcXFxcXG4gIDIwOlxcdFxcdGJvb2tlX2VtdWxhdGUubyBcXFxcXFxuICAyMTpcXHRcXHRib29rZV9pbnRlcnJ1cHRzLm8gXFxcXFxcbiAgMjI6XFx0XFx0ZTUwMC5vIFxcXFxcXG4gIDIzOlxcdFxcdGU1MDBfbW11Lm8gXFxcXFxcbiAgMjQ6XFx0XFx0ZTUwMF9tbXVfaG9zdC5vIFxcXFxcXG4gIDI1OlxcdFxcdGU1MDBfZW11bGF0ZS5vXFxuICAyNjpcXHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fRTUwMFYyKSA6PSAkKGt2bS1lNTAwLW9ianMpXFxuICAyNzpcXHRcXG4gIDI4OlxcdGt2bS1lNTAwbWMtb2JqcyA6PSBcXFxcXFxuICAyOTpcXHRcXHQkKGNvbW1vbi1vYmpzLXkpIFxcXFxcXG4gIDMwOlxcdFxcdGVtdWxhdGUubyBcXFxcXFxuICAzMTpcXHRcXHRib29rZS5vIFxcXFxcXG4gIDMyOlxcdFxcdGJvb2tlX2VtdWxhdGUubyBcXFxcXFxuICAzMzpcXHRcXHRib29rZWh2X2ludGVycnVwdHMubyBcXFxcXFxuICAzNDpcXHRcXHRlNTAwbWMubyBcXFxcXFxuICAzNTpcXHRcXHRlNTAwX21tdS5vIFxcXFxcXG4gIDM2OlxcdFxcdGU1MDBfbW11X2hvc3QubyBcXFxcXFxuICAzNzpcXHRcXHRlNTAwX2VtdWxhdGUub1xcbiAgMzg6XFx0a3ZtLW9ianMtJChDT05GSUdfS1ZNX0U1MDBNQykgOj0gJChrdm0tZTUwMG1jLW9ianMpXFxuICAzOTpcXHRcXG4gIDQwOlxcdGt2bS1wci15IDo9IFxcXFxcXG4gIDQxOlxcdFxcdGZwdS5vIFxcXFxcXG4gIDQyOlxcdFxcdGVtdWxhdGUubyBcXFxcXFxuICA0MzpcXHRcXHRib29rM3NfcGFpcmVkX3NpbmdsZXMubyBcXFxcXFxuICA0NDpcXHRcXHRib29rM3NfcHIubyBcXFxcXFxuICA0NTpcXHRcXHRib29rM3NfcHJfcGFwci5vIFxcXFxcXG4gIDQ2OlxcdFxcdGJvb2szc19lbXVsYXRlLm8gXFxcXFxcbiAgNDc6XFx0XFx0Ym9vazNzX2ludGVycnVwdHMubyBcXFxcXFxuICA0ODpcXHRcXHRib29rM3NfbW11X2hwdGUubyBcXFxcXFxuICA0OTpcXHRcXHRib29rM3NfNjRfbW11X2hvc3QubyBcXFxcXFxuICA1MDpcXHRcXHRib29rM3NfNjRfbW11Lm8gXFxcXFxcbiAgNTE6XFx0XFx0Ym9vazNzXzMyX21tdS5vXFxuICA1MjpcXHRcXG4gIDUzOlxcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfSEFORExFUikgKz0gXFxcXFxcbiAgNTQ6XFx0XFx0Ym9vazNzXzY0X2VudHJ5Lm8gXFxcXFxcbiAgNTU6XFx0XFx0dG0ub1xcbiAgNTY6XFx0XFxuICA1NzpcXHRpZmRlZiBDT05GSUdfS1ZNX0JPT0szU19QUl9QT1NTSUJMRVxcbiAgNTg6XFx0a3ZtLWJvb2szc182NC1idWlsdGluLW9ianMtJChDT05GSUdfS1ZNX0JPT0szU182NF9IQU5ETEVSKSArPSBcXFxcXFxuICA1OTpcXHRcXHRib29rM3Nfcm1oYW5kbGVycy5vXFxuICA2MDpcXHRlbmRpZlxcbiAgNjE6XFx0XFxuICA2MjpcXHRrdm0taHYteSArPSBcXFxcXFxuICA2MzpcXHRcXHRib29rM3NfaHYubyBcXFxcXFxuICA2NDpcXHRcXHRib29rM3NfaHZfaW50ZXJydXB0cy5vIFxcXFxcXG4gIDY1OlxcdFxcdGJvb2szc182NF9tbXVfaHYubyBcXFxcXFxuICA2NjpcXHRcXHRib29rM3NfNjRfbW11X3JhZGl4Lm8gXFxcXFxcbiAgNjc6XFx0XFx0Ym9vazNzX2h2X25lc3RlZC5vXFxuICA2ODpcXHRcXG4gIDY5OlxcdGt2bS1odi0kKENPTkZJR19QUENfVVYpICs9IFxcXFxcXG4gIDcwOlxcdFxcdGJvb2szc19odl91dm1lbS5vXFxuICA3MTpcXHRcXG4gIDcyOlxcdGt2bS1odi0kKENPTkZJR19QUENfVFJBTlNBQ1RJT05BTF9NRU0pICs9IFxcXFxcXG4gIDczOlxcdFxcdGJvb2szc19odl90bS5vXFxuICA3NDpcXHRcXG4gIDc1OlxcdGt2bS1ib29rM3NfNjQtYnVpbHRpbi14aWNzLW9ianMtJChDT05GSUdfS1ZNX1hJQ1MpIDo9IFxcXFxcXG4gIDc2OlxcdFxcdGJvb2szc19odl9ybV94aWNzLm9cXG4gIDc3OlxcdFxcbiAgNzg6XFx0a3ZtLWJvb2szc182NC1idWlsdGluLXRtLW9ianMtJChDT05GSUdfUFBDX1RSQU5TQUNUSU9OQUxfTUVNKSArPSBcXFxcXFxuICA3OTpcXHRcXHRib29rM3NfaHZfdG1fYnVpbHRpbi5vXFxuICA4MDpcXHRcXG4gIDgxOlxcdGlmZGVmIENPTkZJR19LVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuICA4MjpcXHRrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy0kKENPTkZJR19LVk1fQk9PSzNTXzY0X0hBTkRMRVIpICs9IFxcXFxcXG4gIDgzOlxcdFxcdGJvb2szc19odl9obWkubyBcXFxcXFxuICA4NDpcXHRcXHRib29rM3NfaHZfcDlfZW50cnkubyBcXFxcXFxuICA4NTpcXHRcXHRib29rM3NfaHZfcm1oYW5kbGVycy5vIFxcXFxcXG4gIDg2OlxcdFxcdGJvb2szc19odl9ybV9tbXUubyBcXFxcXFxuICA4NzpcXHRcXHRib29rM3NfaHZfcmFzLm8gXFxcXFxcbiAgODg6XFx0XFx0Ym9vazNzX2h2X2J1aWx0aW4ubyBcXFxcXFxuICA4OTpcXHRcXHRib29rM3NfaHZfcDlfcGVyZi5vIFxcXFxcXG4gIDkwOlxcdFxcdGJvb2szc19odl9uZXN0ZWR2Mi5vIFxcXFxcXG4gIDkxOlxcdFxcdGd1ZXN0LXN0YXRlLWJ1ZmZlci5vIFxcXFxcXG4gIDkyOlxcdFxcdCQoa3ZtLWJvb2szc182NC1idWlsdGluLXRtLW9ianMteSkgXFxcXFxcbiAgOTM6XFx0XFx0JChrdm0tYm9vazNzXzY0LWJ1aWx0aW4teGljcy1vYmpzLXkpXFxuICA5NDpcXHRcXG4gIDk1OlxcdG9iai0kKENPTkZJR19HVUVTVF9TVEFURV9CVUZGRVJfVEVTVCkgKz0gdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIub1xcbiAgOTY6XFx0ZW5kaWZcXG4gIDk3OlxcdFxcbiAgOTg6XFx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX0tWTV9YSUNTKSArPSBcXFxcXFxuICA5OTpcXHRcXHRib29rM3NfeGljcy5vXFxuIDEwMDpcXHRcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6MzYuNzg4MTQ4MTA2WiIsIlNlcSI6MTcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMwOTc3MDgyODgsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGhlcmUncyBteSBpbnRlcnByZXRhdGlvbiBvZiB0aGF0IHRob3VnaHQgcHJvY2VzcywgdGFpbG9yZWQgZm9yIGFuIGV4cGVydCBhdWRpZW5jZSwgYW5kIHdyaXR0ZW4gaW4gdGhlIGZpcnN0IHBlcnNvbjpcblxuKipEaXZpbmcgRGVlcGVyIGludG8gdGhlIE1ha2VmaWxlKipcblxuQWxyaWdodCwgc28gdGhlIGluaXRpYWwgZ2xhbmNlIGF0IHRoaXMgTWFrZWZpbGUgaGFzIGdpdmVuIG1lIGEgYmFzaWMgdW5kZXJzdGFuZGluZywgYnV0IEknbSBub3QgZ29pbmcgdG8ganVtcCB0byBjb25jbHVzaW9ucyBqdXN0IHlldC4gSSBuZWVkIHRvIGdldCBhIGNvbXBsZXRlIHBpY3R1cmUgYmVmb3JlIEkgc3RhcnQgbWFraW5nIGFueSBqdWRnZW1lbnRzIG9yIHBsYW5uaW5nIG1vZGlmaWNhdGlvbnMuIE15IG5leHQgc3RlcCwgYXMgYWx3YXlzLCBpcyB0byBtZXRob2RpY2FsbHkgd29yayB0aHJvdWdoIHRoZSByZXN0IG9mIHRoZSBmaWxlLiBJIHdhbnQgdG8gc2VlIGhvdyB0aGUgb3RoZXIgcnVsZXMgYXJlIHN0cnVjdHVyZWQsIHdoYXQgZGVwZW5kZW5jaWVzIGV4aXN0LCBhbmQgaG93IGV2ZXJ5dGhpbmcgaXMgb3JjaGVzdHJhdGVkLiBBcmUgdGhlcmUgYW55IGNsZXZlciB0cmlja3Mgb3Igb3B0aW1pemF0aW9ucyBpbiBwbGF5PyBBcmUgdGhlcmUgYW55IG9idmlvdXMgYXJlYXMgZm9yIHJlZmFjdG9yaW5nIG9yIHBvdGVudGlhbCBib3R0bGVuZWNrcz8gSXQncyBlc3NlbnRpYWwgdG8gdW5kZXJzdGFuZCB0aGUgb3ZlcmFsbCBmbG93IGFuZCBpbnRlbmRlZCBiZWhhdmlvciBiZWZvcmUgSSBjYW4gYWNjdXJhdGVseSBhc3Nlc3MgaXRzIHF1YWxpdHkgb3IgbWFrZSBhbnkgaW1wcm92ZW1lbnRzLiBJJ20gbG9va2luZyBmb3IgYSBjb21wbGV0ZSB1bmRlcnN0YW5kaW5nIG9mIGhvdyBpdCBhbGwgd29ya3MgdG9nZXRoZXIsIHRvcCB0byBib3R0b20uXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE1MDY3LCJPdXRwdXRUb2tlbnMiOjM4LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTAsIlRvb2xDYWxscyI6WyJyZWFkLWZpbGUiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODozOS44ODU4NTg2MDRaIiwiU2VxIjoxOCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6OTk4NTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9NYWtlZmlsZVwiLFxuICBcIkZpcnN0TGluZVwiOiAxMDEsXG4gIFwiTGluZUNvdW50XCI6IDEwMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgMTAxOlxcdGt2bS1ib29rM3NfNjQtb2Jqcy0kKENPTkZJR19LVk1fWElWRSkgKz0gYm9vazNzX3hpdmUubyBib29rM3NfeGl2ZV9uYXRpdmUub1xcbiAxMDI6XFx0a3ZtLWJvb2szc182NC1vYmpzLSQoQ09ORklHX1NQQVBSX1RDRV9JT01NVSkgKz0gYm9vazNzXzY0X3Zpby5vXFxuIDEwMzpcXHRcXG4gMTA0OlxcdGt2bS1ib29rM3NfNjQtbW9kdWxlLW9ianMgOj0gXFxcXFxcbiAxMDU6XFx0XFx0JChjb21tb24tb2Jqcy15KSBcXFxcXFxuIDEwNjpcXHRcXHRib29rM3MubyBcXFxcXFxuIDEwNzpcXHRcXHRib29rM3NfcnRhcy5vIFxcXFxcXG4gMTA4OlxcdFxcdCQoa3ZtLWJvb2szc182NC1vYmpzLXkpXFxuIDEwOTpcXHRcXG4gMTEwOlxcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpIDo9ICQoa3ZtLWJvb2szc182NC1tb2R1bGUtb2JqcylcXG4gMTExOlxcdFxcbiAxMTI6XFx0a3ZtLWJvb2szc18zMi1vYmpzIDo9IFxcXFxcXG4gMTEzOlxcdFxcdCQoY29tbW9uLW9ianMteSkgXFxcXFxcbiAxMTQ6XFx0XFx0ZW11bGF0ZS5vIFxcXFxcXG4gMTE1OlxcdFxcdGZwdS5vIFxcXFxcXG4gMTE2OlxcdFxcdGJvb2szc19wYWlyZWRfc2luZ2xlcy5vIFxcXFxcXG4gMTE3OlxcdFxcdGJvb2szcy5vIFxcXFxcXG4gMTE4OlxcdFxcdGJvb2szc19wci5vIFxcXFxcXG4gMTE5OlxcdFxcdGJvb2szc19lbXVsYXRlLm8gXFxcXFxcbiAxMjA6XFx0XFx0Ym9vazNzX2ludGVycnVwdHMubyBcXFxcXFxuIDEyMTpcXHRcXHRib29rM3NfbW11X2hwdGUubyBcXFxcXFxuIDEyMjpcXHRcXHRib29rM3NfMzJfbW11X2hvc3QubyBcXFxcXFxuIDEyMzpcXHRcXHRib29rM3NfMzJfbW11Lm9cXG4gMTI0OlxcdGt2bS1vYmpzLSQoQ09ORklHX0tWTV9CT09LM1NfMzIpIDo9ICQoa3ZtLWJvb2szc18zMi1vYmpzKVxcbiAxMjU6XFx0XFxuIDEyNjpcXHRrdm0tb2Jqcy0kKENPTkZJR19LVk1fTVBJQykgKz0gbXBpYy5vXFxuIDEyNzpcXHRcXG4gMTI4OlxcdGt2bS15ICs9ICQoa3ZtLW9ianMtbSkgJChrdm0tb2Jqcy15KVxcbiAxMjk6XFx0XFxuIDEzMDpcXHRvYmotJChDT05GSUdfS1ZNX0U1MDBWMikgKz0ga3ZtLm9cXG4gMTMxOlxcdG9iai0kKENPTkZJR19LVk1fRTUwME1DKSArPSBrdm0ub1xcbiAxMzI6XFx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjQpICs9IGt2bS5vXFxuIDEzMzpcXHRvYmotJChDT05GSUdfS1ZNX0JPT0szU18zMikgKz0ga3ZtLm9cXG4gMTM0OlxcdFxcbiAxMzU6XFx0b2JqLSQoQ09ORklHX0tWTV9CT09LM1NfNjRfUFIpICs9IGt2bS1wci5vXFxuIDEzNjpcXHRvYmotJChDT05GSUdfS1ZNX0JPT0szU182NF9IVikgKz0ga3ZtLWh2Lm9cXG4gMTM3OlxcdFxcbiAxMzg6XFx0b2JqLXkgKz0gJChrdm0tYm9vazNzXzY0LWJ1aWx0aW4tb2Jqcy15KVxcbiAxMzk6XFx0XFxuIDE0MDpcXHQjIEtWTSBkb2VzIGEgbG90IGluIHJlYWwtbW9kZSwgYW5kIDY0LWJpdCBCb29rM1MgS0FTQU4gZG9lc24ndCBzdXBwb3J0IHRoYXRcXG4gMTQxOlxcdGlmZGVmIENPTkZJR19QUENfQk9PSzNTXzY0XFxuIDE0MjpcXHRLQVNBTl9TQU5JVElaRSA6PSBuXFxuIDE0MzpcXHRlbmRpZlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODozOS44ODU5NjEzMDRaIiwiU2VxIjoxOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6OTY5MjI5NzU4NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipLVk0gSHlwZXJ2aXNvciBDb25maWd1cmF0aW9uIERlZXAgRGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0cmFja2luZyBkb3duIHRoZSBkZXBlbmRlbmNpZXMgZm9yIHRoaXMgS1ZNIGh5cGVydmlzb3Igb24gUG93ZXJQQy4gTGV0J3Mgc2VlLi4uIGBrdm0taHYub2AgaXMgdGhlIGtleSBoZXJlLCBhbmQgdGhhdCBnZXRzIGJ1aWx0IHdoZW4gYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCBpcyBlbmFibGVkLiBSaWdodCwgYW5kIGBrdm0taHYteWAgZGlyZWN0bHkgaW5jbHVkZXMgYGJvb2szc19odi5vYC4gVGhhdCBjb25maXJtcyBpdCDigJMgYENPTkZJR19LVk1fQk9PSzNTXzY0X0hWYCBpcyBkZWZpbml0ZWx5IHRoZSBzcGVjaWZpYyBjb25maWcgSSdtIGFmdGVyLiBOb3csIGhvbGQgb24sIEkgbmVlZCB0byBiZSBwcmVjaXNlIGhlcmUuIGBib29rM3NfaHYub2AgaXMgKmNvbXBpbGVkIGludG8qIGBrdm0taHYub2AsIHdoaWNoIGlzIGEgbW9kdWxlIG9yIGJ1aWx0LWluLCBzbyBpdCdzIHN0YXRpY2FsbHkgbGlua2VkLlxuXG5BaCwgdGhlIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgaW9jdGwuIEkgcmVjYWxsIHRoYXQncyBoYW5kbGVkIHdpdGhpbiBgcG93ZXJwYy5jYCwgd2hpY2gsIGFzIEkgZXhwZWN0LCBpcyBwYXJ0IG9mIGBrdm0ub2AuIE5vdywgYGt2bS5vYCBpcyBidWlsdCB3aGVuIHRoZSBtb3JlIGdlbmVyYWwgYENPTkZJR19LVk1fQk9PSzNTXzY0YCBpcyBlbmFibGVkLiBCaW5nbyEgYHBvd2VycGMuY2AgdWx0aW1hdGVseSBjYWxscyBga3ZtLVx1MDAzZWFyY2gua3ZtX29wcy1cdTAwM2VnZXRfY29tcGF0X2NhcHNgLCBhbmQgSSBjYW4gc2VlIHRoYXQgYGt2bV9vcHNfaHZgIGlzIHRoZSBzZXQgb2Ygb3BlcmF0aW9ucyB0aGF0J3MgcmVnaXN0ZXJlZCB3aGVuIGBrdm0taHYub2AgaXMgbG9hZGVkLiBUaGVyZWZvcmUsIEknbSBjb25maWRlbnQgdGhhdCBgQ09ORklHX0tWTV9CT09LM1NfNjRfSFZgIGlzIGFic29sdXRlbHkgcmVxdWlyZWQuXG5cbkFscmlnaHQsIGxldCdzIGp1c3QgbWFrZSBzdXJlIEkgaGF2ZW4ndCBtaXNzZWQgYW55dGhpbmcgZWxzZSBjcml0aWNhbC4gT2J2aW91c2x5LCBgQ09ORklHX0tWTWAgaXRzZWxmIGlzIGZ1bmRhbWVudGFsIOKAkyBubyBLVk0gd2l0aG91dCBLVk0hIExldCdzIHNlZS4uLiBhbmQsIHllcywgYENPTkZJR19QUENfUE9XRVJOVmAgaXMgYWxzbyBhIGRlcGVuZGVuY3kgZm9yIGBLVk1fQk9PSzNTXzY0X0hWYCB0byBldmVuIGJlIHNlbGVjdGVkLiBKdXN0IHRvIGJlIGNvbXBsZXRlbHkgdGhvcm91Z2gsIEknbGwgdGFrZSBhbm90aGVyIGxvb2sgYXQgdGhlIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIGZpbGUgdG8gZG91YmxlLWNoZWNrLiBJIGJlbGlldmUgdGhhdCBzaG91bGQgY292ZXIgaXQhXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE2MTU5LCJPdXRwdXRUb2tlbnMiOjQwLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MzExLCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6NDkuNTc4MjYxMDhaIiwiU2VxIjoyMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjI3NTAxNjM2MywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0JPT0szU182NF9IVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9NjI9Y29uZmlnIEtWTV9CT09LM1NfNjRcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy03OC1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6Nzk6Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctODAtXFx0dHJpc3RhdGUgXFxcIktWTSBmb3IgUE9XRVI3IGFuZCBsYXRlciB1c2luZyBoeXBlcnZpc29yIG1vZGUgaW4gaG9zdFxcXCJcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6NDkuODUzMjgyMzYzWiIsIlNlcSI6MjEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMyNzI1ODYwNDEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IkhlcmUncyBteSB0aG91Z2h0IHByb2Nlc3MsIHN1bW1hcml6ZWQgYXMgeW91IHJlcXVlc3RlZDpcblxuKipBc3Nlc3NpbmcgdGhlIExhbmRzY2FwZTogS1ZNX0JPT0szU182NF9IViBEZXBlbmRlbmNpZXMqKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZ2V0IGEgaGFuZGxlIG9uIGBLVk1fQk9PSzNTXzY0X0hWYC4gTXkgaW1tZWRpYXRlIHRob3VnaHQgaXMgdG8gc3RhcnQgd2l0aCB0aGUgZ3JvdW5kd29yazogbGV0J3MgZGl2ZSBpbnRvIGl0cyBkZXBlbmRlbmNpZXMuIFVuZGVyc3RhbmRpbmcgd2hhdCB0aGlzIHRoaW5nICpyZWxpZXMqIG9uIGlzIHRoZSBhYnNvbHV0ZSBrZXkgdG8gdW5kZXJzdGFuZGluZyBob3cgaXQgZnVuY3Rpb25zIGFuZCwgY3J1Y2lhbGx5LCBob3cgYW55IGNoYW5nZXMgbWlnaHQgcmlwcGxlIHRocm91Z2ggdGhlIHN5c3RlbS4gSSBuZWVkIHRvIGtub3cgdGhlIGRvbWlub2VzIGJlZm9yZSBJIHN0YXJ0IGZpZGRsaW5nIHdpdGggb25lLiBJcyBpdCBqdXN0IGEgc2luZ2xlIGxpYnJhcnksIG9yIGFyZSB3ZSBsb29raW5nIGF0IGEgc3ByYXdsaW5nIHdlYiBvZiBuZXN0ZWQgZGVwZW5kZW5jaWVzPyBLbm93aW5nIHRoZSBicmVhZHRoIG9mIHRoYXQgZGVwZW5kZW5jeSB0cmVlIGlzIGdvaW5nIHRvIGluZm9ybSBteSBlbnRpcmUgYXBwcm9hY2ggZnJvbSBoZXJlIG9uIG91dC4gSSB3YW50IHRvIGJ1aWxkIGEgY2xlYXIgbWVudGFsIG1vZGVsIG9mIGl0cyBwbGFjZSBpbiB0aGUgc3lzdGVtLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxNzA4NCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjIwLCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjUzLjEyNTg3MDg4NFoiLCJTZXEiOjIyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJyZWFkLWZpbGUiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo2MTM1MCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdcIixcbiAgXCJGaXJzdExpbmVcIjogNzksXG4gIFwiTGluZUNvdW50XCI6IDIwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIiAgNzk6XFx0Y29uZmlnIEtWTV9CT09LM1NfNjRfSFZcXG4gIDgwOlxcdFxcdHRyaXN0YXRlIFxcXCJLVk0gZm9yIFBPV0VSNyBhbmQgbGF0ZXIgdXNpbmcgaHlwZXJ2aXNvciBtb2RlIGluIGhvc3RcXFwiXFxuICA4MTpcXHRcXHRkZXBlbmRzIG9uIEtWTV9CT09LM1NfNjQgXFx1MDAyNlxcdTAwMjYgUFBDX1BPV0VSTlZcXG4gIDgyOlxcdFxcdHNlbGVjdCBLVk1fQk9PSzNTX0hWX1BPU1NJQkxFXFxuICA4MzpcXHRcXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QTVVcXG4gIDg0OlxcdFxcdHNlbGVjdCBDTUFcXG4gIDg1OlxcdFxcdGhlbHBcXG4gIDg2OlxcdFxcdCAgU3VwcG9ydCBydW5uaW5nIHVubW9kaWZpZWQgYm9vazNzXzY0IGd1ZXN0IGtlcm5lbHMgaW5cXG4gIDg3OlxcdFxcdCAgdmlydHVhbCBtYWNoaW5lcyBvbiBQT1dFUjcgYW5kIG5ld2VyIHByb2Nlc3NvcnMgdGhhdCBoYXZlXFxuICA4ODpcXHRcXHQgIGh5cGVydmlzb3IgbW9kZSBhdmFpbGFibGUgdG8gdGhlIGhvc3QuXFxuICA4OTpcXHRcXG4gIDkwOlxcdFxcdCAgSWYgeW91IHNheSBZIGhlcmUsIEtWTSB3aWxsIHVzZSB0aGUgaGFyZHdhcmUgdmlydHVhbGl6YXRpb25cXG4gIDkxOlxcdFxcdCAgZmFjaWxpdGllcyBvZiBQT1dFUjcgKGFuZCBsYXRlcikgcHJvY2Vzc29ycywgbWVhbmluZyB0aGF0XFxuICA5MjpcXHRcXHQgIGd1ZXN0IG9wZXJhdGluZyBzeXN0ZW1zIHdpbGwgcnVuIGF0IGZ1bGwgaGFyZHdhcmUgc3BlZWRcXG4gIDkzOlxcdFxcdCAgdXNpbmcgc3VwZXJ2aXNvciBhbmQgdXNlciBtb2Rlcy4gIEhvd2V2ZXIsIHRoaXMgYWxzbyBtZWFuc1xcbiAgOTQ6XFx0XFx0ICB0aGF0IEtWTSBpcyBub3QgdXNhYmxlIHVuZGVyIFBvd2VyVk0gKHBIeXApLCBpcyBvbmx5IHVzYWJsZVxcbiAgOTU6XFx0XFx0ICBvbiBQT1dFUjcgb3IgbGF0ZXIgcHJvY2Vzc29ycywgYW5kIGNhbm5vdCBlbXVsYXRlIGFcXG4gIDk2OlxcdFxcdCAgZGlmZmVyZW50IHByb2Nlc3NvciBmcm9tIHRoZSBob3N0IHByb2Nlc3Nvci5cXG4gIDk3OlxcdFxcbiAgOTg6XFx0XFx0ICBJZiB1bnN1cmUsIHNheSBOLlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1ODo1My4xMjU5MzM1MjRaIiwiU2VxIjoyMywiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDE1NjI3Njk5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgS1ZNIGFuZCBQb3dlclBDIERlcGVuZGVuY2llcyoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gTXkgaW5pdGlhbCBvYnNlcnZhdGlvbiBpcyB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBpcyByZWxpYW50IG9uIGJvdGggYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgLiBHaXZlbiB0aGlzIHJlbGF0aW9uc2hpcCwgSSBuZWVkIHRvIGVuc3VyZSBib3RoIGBLVk1fQk9PSzNTXzY0X0hWYCBhbmQgYFBQQ19QT1dFUk5WYCBhcmUgcHJvcGVybHkgY29uZmlndXJlZC4gSSdsbCBtYWtlIGEgbm90ZSB0byBsaXN0IHRoZW0gaW4gYEVuYWJsZUNvbmZpZ3NgLlxuXG5Ib2xkIG9uLi4uIHNvbWV0aGluZyBmZWVscyBvZmYuIEknbSByZWNhbGxpbmcgdGhhdCBga3ZtX2FyY2hfdm1faW9jdGxgIHdpdGhpbiBgYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmNgIGlzIHJlc3BvbnNpYmxlIGZvciBoYW5kbGluZyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLiBUaGUgaW50ZXJlc3RpbmcgcGFydCBpcyB0aGF0IHRoaXMgZnVuY3Rpb24gaXNuJ3Qgd3JhcHBlZCB3aXRoaW4gYW55IGAjaWZkZWYgQ09ORklHX0tWTV9CT09LM1NfSFZfUE9TU0lCTEVgIGNvbmRpdGlvbmFsIGJsb2Nrcy4gVGhhdOKAmXMgdW5leHBlY3RlZC4gSSBuZWVkIHRvIHZlcmlmeSB0aGF0IGFuZCB1bmRlcnN0YW5kIHRoZSBpbXBsaWNhdGlvbnMgZnVsbHkuIFRpbWUgdG8gZGl2ZSBiYWNrIGludG8gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBhbmQgY29uZmlybSBteSBtZW1vcnkuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjE3NjUwLCJPdXRwdXRUb2tlbnMiOjQxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTU4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTg6NTcuMjgyMjEzMTE5WiIsIlNlcSI6MjQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo3OTExMTk2MiwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz0yMzYzPWludCBrdm1fYXJjaF92bV9pb2N0bChzdHJ1Y3QgZmlsZSAqZmlscCwgdW5zaWduZWQgaW50IGlvY3RsLCB1bnNpZ25lZCBsb25nIGFyZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI0NzItXFx0fVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjI0NzM6XFx0Y2FzZSBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQUzoge1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTI0NzQtXFx0XFx0c3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgaG9zdF9jYXBzID0ge307XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU4OjU3LjM2MTMyOTQ5MVoiLCJTZXEiOjI1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1MTE1ODM0NTEyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgS1ZNIENvbXBhdGliaWxpdHkgQ2hlY2sqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGNvZGUgYW5kIEkgc2VlIHRoYXQgdGhpcyBjaGVjayBpc24ndCB0dWNrZWQgYXdheSBpbnNpZGUgYW4gYCNpZmRlZmAgYmxvY2ssIHdoaWNoIGlzIGEgY29tbW9uIHBhdHRlcm4uIEluc3RlYWQsIGl0IHNlZW1zIHRvIHJlbHkgb24gdGhlIGBrdm0tXHUwMDNlYXJjaC5rdm1fb3BzLVx1MDAzZWdldF9jb21wYXRfY2Fwc2AgZnVuY3Rpb24uIElmIHRoYXQgZnVuY3Rpb24gcG9pbnRlciBoYXBwZW5zIHRvIGJlIE5VTEwsIHRoZSBjb2RlIHJldHVybnMgYC1FTk9UVFlgLiBSaWdodCwgdGhhdCdzIHN0cmFpZ2h0Zm9yd2FyZCBlbm91Z2guXG5cbk5vdywgd2hlcmUgaXMgYGdldF9jb21wYXRfY2Fwc2AgYWN0dWFsbHkgZGVmaW5lZCBhbmQgc2V0PyBBY2NvcmRpbmcgdG8gbXkgdW5kZXJzdGFuZGluZyBvZiB0aGUgY29kZSwgaXQncyBvbmx5IHNldCBpbiBga3ZtX29wc19odmAgd2l0aGluIGBib29rM3NfaHYuY2AuIFRvIGFjdHVhbGx5IGV4ZXJjaXNlIHRoaXMgcGFydGljdWxhciBjb2RlIHBhdGggYW5kIHRlc3QgaXQsIHRoYXQgbWVhbnMgSSAqbXVzdCogaGF2ZSBgS1ZNX0JPT0szU182NF9IVmAgZW5hYmxlZC4gSXQncyBhIGtleSByZXF1aXJlbWVudC5cblxuU28sIEkgdGhpbmsgdGhlIG5leHQgbG9naWNhbCBzdGVwIHdvdWxkIGJlIHRvIHJldmlldyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgaW4gYGFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNgLiBJIG5lZWQgdG8gdW5kZXJzdGFuZCBob3cgKnRoYXQqIGZ1bmN0aW9uIHdvcmtzIHRvIGdldCBhIGZ1bGwgcGljdHVyZSBvZiB0aGlzIGNoZWNrLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxODI0MSwiT3V0cHV0VG9rZW5zIjo0NCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEzOSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OTowMi40NzcxNjYwMTNaIiwiU2VxIjoyNiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjQzNDMwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRmlsZVwiOiBcImFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmNcIixcbiAgXCJGaXJzdExpbmVcIjogNjUzMyxcbiAgXCJMaW5lQ291bnRcIjogNTBcbn0iLCJSZXN1bHRzIjoie1xuICBcIkNvbnRlbnRzXCI6IFwiNjUzMzpcXHRzdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcXG42NTM0OlxcdHtcXG42NTM1OlxcdFxcdHN0cnVjdCBkZXZpY2Vfbm9kZSAqbnA7XFxuNjUzNjpcXHRcXHR1bnNpZ25lZCBsb25nIGNhcGFiaWxpdGllcyA9IDA7XFxuNjUzNzpcXHRcXHRjb25zdCBfX2JlMzIgKnByb3AgPSBOVUxMO1xcbjY1Mzg6XFx0XFx0bG9uZyByYyA9IC1FSU5WQUw7XFxuNjUzOTpcXHRcXHR1MzIgY3B1X3ZlcnNpb247XFxuNjU0MDpcXHRcXG42NTQxOlxcdFxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG42NTQyOlxcdFxcdFxcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKSB7XFxuNjU0MzpcXHRcXHRcXHRcXHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xcbjY1NDQ6XFx0XFx0XFx0XFx0Y2FwYWJpbGl0aWVzID0gbmVzdGVkX2NhcGFiaWxpdGllcztcXG42NTQ1OlxcdFxcdFxcdFxcdHJjID0gMDtcXG42NTQ2OlxcdFxcdFxcdH0gZWxzZSB7XFxuNjU0NzpcXHRcXHRcXHRcXHRmb3JfZWFjaF9ub2RlX2J5X3R5cGUobnAsIFxcXCJjcHVcXFwiKSB7XFxuNjU0ODpcXHRcXHRcXHRcXHRcXHRwcm9wID0gb2ZfZ2V0X3Byb3BlcnR5KG5wLCBcXFwiY3B1LXZlcnNpb25cXFwiLCBOVUxMKTtcXG42NTQ5OlxcdFxcdFxcdFxcdFxcdGlmIChwcm9wKSB7XFxuNjU1MDpcXHRcXHRcXHRcXHRcXHRcXHRjcHVfdmVyc2lvbiA9IGJlMzJfdG9fY3B1cChwcm9wKTtcXG42NTUxOlxcdFxcdFxcdFxcdFxcdFxcdG9mX25vZGVfcHV0KG5wKTtcXG42NTUyOlxcdFxcdFxcdFxcdFxcdFxcdGJyZWFrO1xcbjY1NTM6XFx0XFx0XFx0XFx0XFx0fVxcbjY1NTQ6XFx0XFx0XFx0XFx0fVxcbjY1NTU6XFx0XFx0XFx0XFx0aWYgKCFwcm9wKVxcbjY1NTY6XFx0XFx0XFx0XFx0XFx0cmV0dXJuIC1FSU5WQUw7XFxuNjU1NzpcXHRcXHRcXHRcXHRyYyA9IGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllcyhjcHVfdmVyc2lvbixcXG42NTU4OlxcdFxcdFxcdFxcdFxcdFxcdFxcdFxcdCAgICBcXHUwMDI2Y2FwYWJpbGl0aWVzKTtcXG42NTU5OlxcdFxcdFxcdH1cXG42NTYwOlxcdFxcdH1cXG42NTYxOlxcdFxcbjY1NjI6XFx0XFx0aWYgKHJjIFxcdTAwM2MgMClcXG42NTYzOlxcdFxcdFxcdHJldHVybiByYztcXG42NTY0OlxcdFxcbjY1NjU6XFx0XFx0aG9zdF9jYXBzLVxcdTAwM2Vjb21wYXRfY2FwYWJpbGl0aWVzID0gY2FwYWJpbGl0aWVzIFxcdTAwMjYgS1ZNX1BQQ19DT01QQVRfQklUTUFTSztcXG42NTY2OlxcdFxcbjY1Njc6XFx0XFx0cmV0dXJuIHJjO1xcbjY1Njg6XFx0fVxcbjY1Njk6XFx0XFxuNjU3MDpcXHRzdGF0aWMgc3RydWN0IGt2bXBwY19vcHMga3ZtX29wc19odiA9IHtcXG42NTcxOlxcdFxcdC5nZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVnc19odixcXG42NTcyOlxcdFxcdC5zZXRfc3JlZ3MgPSBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVnc19odixcXG42NTczOlxcdFxcdC5nZXRfb25lX3JlZyA9IGt2bXBwY19nZXRfb25lX3JlZ19odixcXG42NTc0OlxcdFxcdC5zZXRfb25lX3JlZyA9IGt2bXBwY19zZXRfb25lX3JlZ19odixcXG42NTc1OlxcdFxcdC52Y3B1X2xvYWQgICA9IGt2bXBwY19jb3JlX3ZjcHVfbG9hZF9odixcXG42NTc2OlxcdFxcdC52Y3B1X3B1dCAgICA9IGt2bXBwY19jb3JlX3ZjcHVfcHV0X2h2LFxcbjY1Nzc6XFx0XFx0LmluamVjdF9pbnRlcnJ1cHQgPSBrdm1wcGNfaW5qZWN0X2ludGVycnVwdF9odixcXG42NTc4OlxcdFxcdC5zZXRfbXNyICAgICA9IGt2bXBwY19zZXRfbXNyX2h2LFxcbjY1Nzk6XFx0XFx0LnZjcHVfcnVuICAgID0ga3ZtcHBjX3ZjcHVfcnVuX2h2LFxcbjY1ODA6XFx0XFx0LnZjcHVfY3JlYXRlID0ga3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGVfaHYsXFxuNjU4MTpcXHRcXHQudmNwdV9mcmVlICAgPSBrdm1wcGNfY29yZV92Y3B1X2ZyZWVfaHYsXFxuNjU4MjpcXHRcXHQuY2hlY2tfcmVxdWVzdHMgPSBrdm1wcGNfY29yZV9jaGVja19yZXF1ZXN0c19odixcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MDIuNDc3NDEwNzMzWiIsIlNlcSI6MjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjM5Nzk4Mjk4MjIsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6Ik9rYXksIGxldCBtZSBicmVhayB0aGlzIGRvd24uXG5cbioqRGl2aW5nIGludG8gdGhlIGt2bS1odiBjb2RlLi4uKipcblxuQWxyaWdodCwgSSdtIHRyYWNpbmcgdGhyb3VnaCB0aGlzIHNlY3Rpb24sIGFuZCB0aGUgZmlyc3QgdGhpbmcgdGhhdCBqdW1wcyBvdXQgaXMgdGhpcyBjaGVjayBmb3IgYGt2bWh2X29uX3BzZXJpZXMoKWAuIEhtbSwgaW50ZXJlc3RpbmcuIElmIHRoYXQgZnVuY3Rpb24gKmlzbid0KiB0cnVlLCB0aGVuIHdlIGltbWVkaWF0ZWx5IHJldHVybiBgLUVJTlZBTGAuIFNvLCBjbGVhcmx5LCB0aGlzIGNvZGUgcGF0aCBpcyBkZXNpZ25lZCB0byBiYWlsIG91dCB1bmxlc3Mgc29tZXRoaW5nIHNwZWNpZmljIGlzIGluIHBsYWNlLiBJdCBzZWVtcyB0aGUgY29yZSBmdW5jdGlvbmFsaXR5ICpyZXF1aXJlcyogYSBwb3NpdGl2ZSBzaWduYWwgZnJvbSBga3ZtaHZfb25fcHNlcmllcygpYC5cblxuQnV0IHdoYXQgdGhlIGhlY2sgKmlzKiBga3ZtaHZfb25fcHNlcmllcygpYD8gVGhlIGVudGlyZSBmbG93IHNlZW1zIHByZWRpY2F0ZWQgb24gaXQsIHNvIG5vdyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aGF0IHRoYXQgZnVuY3Rpb24gZG9lcy4gSXTigJlzIHRoZSBnYXRla2VlcGVyLCBpdCBzZWVtcy4gTXkgbmV4dCBzdGVwIGlzIHRvIHVuZGVyc3RhbmQgd2hhdCB0aGF0IGJvb2xlYW4gY2hlY2sgYWN0dWFsbHkgcmVwcmVzZW50cyBhbmQgd2hhdCBzY2VuYXJpbyBhbGxvd3MgaXQgdG8gYmUgdHJ1ZSBzbyB0aGF0IEkgY2FuIGZpZ3VyZSBvdXQgdGhlIGNvbnRleHQgb2YgdGhpcyBmdW5jdGlvbi4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgd2hhdCBzcGVjaWZpYyBoYXJkd2FyZSBvciBjb25maWd1cmF0aW9uIHRyaWdnZXJzIGl0LiBUaGlzIGlzIGltcG9ydGFudCB0byB1bmRlcnN0YW5kIHRoZSBvdmVyYWxsIGJlaGF2aW9yLlxuXG5cbiIsIklucHV0VG9rZW5zIjoxOTU0MSwiT3V0cHV0VG9rZW5zIjozNiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjc4LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MDYuNDU3MjQyNjc1WiIsIlNlcSI6MjgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoyMjc2MjczMTgsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwia3ZtaHZfb25fcHNlcmllc1wiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNT11bnNpZ25lZCBsb25nIF9fa3ZtaHZfY29weV90b2Zyb21fZ3Vlc3RfcmFkaXgoaW50IGxwaWQsIGludCBwaWQsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00Ni1cXHQvKiBDYW4ndCBhY2Nlc3MgcXVhZHJhbnRzIDEgb3IgMiBpbiBub24tSFYgbW9kZSwgY2FsbCB0aGUgSFYgdG8gZG8gaXQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYzo0NzpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTQ4LVxcdFxcdHJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9DT1BZX1RPRlJPTV9HVUVTVCwgbHBpZCwgcGlkLCBlYWRkcixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTMxNT12b2lkIGt2bXBwY19yYWRpeF90bGJpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzI5LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjMzMDpcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTMzMS1cXHRcXHRyYWRpeF9fZmx1c2hfdGxiX2xwaWRfcGFnZShscGlkLCBhZGRyLCBwc2l6ZSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNTM9c3RhdGljIHZvaWQga3ZtcHBjX3JhZGl4X2ZsdXNoX3B3YyhzdHJ1Y3Qga3ZtICprdm0sIHU2NCBscGlkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzU2LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjM1NzpcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTM1OC1cXHRcXHRyYWRpeF9fZmx1c2hfcHdjX2xwaWQobHBpZCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTE4Mj1zdGF0aWMgYm9vbCBrdm1wcGNfaXBpX3RocmVhZChpbnQgY3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODYtXFx0LyogSWYgd2UncmUgYSBuZXN0ZWQgaHlwZXJ2aXNvciwgZmFsbCBiYWNrIHRvIG9yZGluYXJ5IElQSXMgZm9yIG5vdyAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTg3OlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00MTQ9c3RhdGljIGludCBrdm1wcGNfc2V0X2FyY2hfY29tcGF0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGFyY2hfY29tcGF0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NjAtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NjE6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiBrdm1odl9pc19uZXN0ZWR2MigpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NjItXFx0XFx0LypcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NDQxMz1zdGF0aWMgaW50IGt2bWh2X3A5X2d1ZXN0X2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ0MzItXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NDMzOlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ0MzQtXFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYxKCkpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ4Njc9aW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTQ2LVxcdFxcdFxcdCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDk0NzpcXHRcXHRcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiAoX19rdm1wcGNfZ2V0X21zcl9odih2Y3B1KSBcXHUwMDI2IE1TUl9FRSkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTQ4LVxcdFxcdFxcdFxcdGt2bXBwY19pbmplY3RfaW50ZXJydXB0X2h2KHZjcHUsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUyMjg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X3NtbXVfaW5mb19odihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTEtXFx0LyogSWYgcnVubmluZyBhcyBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBkb24ndCBzdXBwb3J0IEhQVCBndWVzdHMgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjUyNTI6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTMtXFx0XFx0aW5mby1cXHUwMDNlZmxhZ3MgfD0gS1ZNX1BQQ19OT19IQVNIO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02MTQ1PXN0YXRpYyBpbnQga3ZtX2FyY2hfdm1faW9jdGxfaHYoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYxNTctXFx0XFx0LyogSWYgd2UncmUgYSBuZXN0ZWQgaHlwZXJ2aXNvciwgd2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCByYWRpeCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjE1ODpcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02MTU5LVxcdFxcdFxcdHIgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjI1Nz1zdGF0aWMgaW50IGt2bWh2X2NvbmZpZ3VyZV9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3BwY19tbXV2M19jZmcgKmNmZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4NC1cXHQvKiBJZiB3ZSdyZSBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHJhZGl4ICovXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2Mjg1OlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkgXFx1MDAyNlxcdTAwMjYgIXJhZGl4KVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4Ni1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjUzMz1zdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0MC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1NDE6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0Mi1cXHRcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NjUxPXN0YXRpYyBpbnQga3ZtcHBjX2Jvb2szc19pbml0X2h2KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2ODItI2lmZGVmIENPTkZJR19TTVBcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY2ODM6XFx0aWYgKCF4aWNzX29uX3hpdmUoKSBcXHUwMDI2XFx1MDAyNiAha3ZtaHZfb25fcHNlcmllcygpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02Njg0LVxcdCAgICAhbG9jYWxfcGFjYS1cXHUwMDNla3ZtX2hzdGF0ZS54aWNzX3BoeXMpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjcyNC1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY3MjU6XFx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY3MjYtXFx0XFx0cHJfaW5mbyhcXFwiS1ZNLUhWOiBFbmFibGluZyBJUlEgYnlwYXNzXFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTQzOT1sb25nIGt2bWh2X25lc3RlZF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy00NDQtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NDQ1OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ0Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUwMD12b2lkIGt2bWh2X25lc3RlZF9leGl0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDItXFx0LypcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDM6XFx0ICogTi5CLiB0aGUga3ZtaHZfb25fcHNlcmllcygpIHRlc3QgaXMgdGhlcmUgYmVjYXVzZSBpdCBlbmFibGVzXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTA0LVxcdCAqIHRoZSBjb21waWxlciB0byByZW1vdmUgdGhlIGNhbGwgdG8gcGxwYXJfaGNhbGxfbm9yZXRzKClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwNi1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDc6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiBwc2VyaWVzX3BhcnRpdGlvbl90Yikge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwOC1cXHRcXHRwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfUEFSVElUSU9OX1RBQkxFLCAwKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUxND12b2lkIGt2bWh2X2ZsdXNoX2xwaWQodTY0IGxwaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MTctXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTE4OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTE5LVxcdFxcdHJhZGl4X19mbHVzaF9hbGxfbHBpZChscGlkKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUzNj12b2lkIGt2bWh2X3NldF9wdGJsX2VudHJ5KHU2NCBscGlkLCB1NjQgZHcwLCB1NjQgZHcxKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUzNy17XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTM4OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTM5LVxcdFxcdG1tdV9wYXJ0aXRpb25fdGFibGVfc2V0X2VudHJ5KGxwaWQsIGR3MCwgZHcxLCB0cnVlKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYz0zNT12b2lkIHN3aXRjaF9wbXVfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTc0LVxcdC8qIEFmdGVyIHNhdmluZyBQTVUsIGJlZm9yZSBsb2FkaW5nIGd1ZXN0IFBNVSwgZmxpcCBwbWNyZWdzX2luX3VzZSAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYzo3NTpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTc2LVxcdFxcdGJhcnJpZXIoKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYz0xMTg9dm9pZCBzd2l0Y2hfcG11X3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTE4Ni0jaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jOjE4NzpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTE4OC1cXHRcXHRiYXJyaWVyKCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz01MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY5MC1cXHRcXHRpZiAoaHZfZW5hYmxlZCkge1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjY5MTpcXHRcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjkyLVxcdFxcdFxcdFxcdGlmIChwc2VyaWVzX3JlbG9jX29uX2V4Y2VwdGlvbigpKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzAyLVxcdFxcdHIgPSAwO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwMzpcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwNC1cXHRcXHRcXHRyID0gMTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIuYz00NTQ9c3RhdGljIHZvaWQgdGVzdF9nc19ob3N0d2lkZV9jb3VudGVycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmMtNDYzLVxcbmFyY2gvcG93ZXJwYy9rdm0vdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIuYzo0NjQ6XFx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS90ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5jLTQ2NS1cXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJUaGlzIHRlc3QgbmVlZCBhIGttdi1odiBndWVzdFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OTowNi42ODQ4NzQ3MTNaIiwiU2VxIjoyOSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NjA3NjYxODE1OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipOZXN0ZWQgS1ZNIG9uIHBzZXJpZXM6IEEgRnV6emluZyBQZXJzcGVjdGl2ZSoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCB0aGlzIGBrdm1odl9vbl9wc2VyaWVzKClgIGZ1bmN0aW9uLiBJdCdzIHN1cHBvc2VkIHRvIHRlbGwgbWUgaWYgS1ZNIGlzIHJ1bm5pbmcgbmVzdGVkIG9uIGEgcHNlcmllcyBtYWNoaW5lLCByaWdodD8gQW5kIGlmIGl0ICppc24ndCosIHRoZW4gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGlzIGdvaW5nIHRvIHJldHVybiBgLUVJTlZBTGAuIFRoYXQgaW1tZWRpYXRlbHkgc3BhcmtlZCBhbiBpZGVhIOKAkyBjb3VsZCB0aGlzIGJlIGZ1enplZD8gQ291bGQgSSBwb3RlbnRpYWxseSB0cmlnZ2VyIHNvbWUgaW50ZXJlc3RpbmcgYmVoYXZpb3Igb3IgdW5jb3ZlciBhIGJ1ZyBieSBtYW5pcHVsYXRpbmcgdGhpcyBjb25kaXRpb24/XG5cblRoZSBmaXJzdCB0aGluZyBJIGhhZCB0byBjb25maXJtIHdhcyB3aGV0aGVyIHN5emthbGxlciAqY291bGQqIGV2ZW4gcnVuIG9uIGEgcHNlcmllcyBtYWNoaW5lLiBMdWNraWx5LCB5ZXMhIEkga25vdyB0aGF0IHlvdSBjYW4gdXNlIFFFTVUgd2l0aCB0aGUgYHBzZXJpZXNgIG1hY2hpbmUgdHlwZS4gU28sIHNvbWV0aGluZyBsaWtlIGBxZW11LXN5c3RlbS1wcGM2NCAtTSBwc2VyaWVzYCBpcyB0b3RhbGx5IHZhbGlkLlxuXG5Ob3cgaXQncyBzdGFydGluZyB0byBjb21lIHRvZ2V0aGVyLiBJZiBzeXprYWxsZXIgaXMgcnVubmluZyAqaW5zaWRlKiBhIGBwc2VyaWVzYCBRRU1VIFZNLCB0aGVuIGBrdm1odl9vbl9wc2VyaWVzKClgICpzaG91bGQqIHJldHVybiB0cnVlLiBXYWl0LCBsZXQgbWUgdGhpbmsgdGhhdCB0aHJvdWdo4oCmIGBrdm1odl9vbl9wc2VyaWVzKClgIG1lYW5zIHRoZSBob3N0IGl0c2VsZiBpcyBydW5uaW5nIGFzIGEgZ3Vlc3Qgb24gcHNlcmllcy4gWWVzLCBzeXprYWxsZXIgKmlzKiBydW5uaW5nIGluc2lkZSBhIGBwc2VyaWVzYCBWTSwgd2hpY2ggbWVhbnMgdGhlIGtlcm5lbCBpdCdzIGZ1enppbmcgaXMgYWxzbyBydW5uaW5nIGFzIGEgZ3Vlc3Qgb24gYHBzZXJpZXNgLiBTbywgYGt2bWh2X29uX3BzZXJpZXMoKWAgKndpbGwqIGJlIHRydWUgaW4gdGhhdCBzY2VuYXJpby4gVGhhdCBtZWFucyBLVk0gaW5zaWRlIHRoYXQgZ3Vlc3QgaXMgY29uc2lkZXJlZCBcIm5lc3RlZCBLVk1cIi4gVGhlcmVmb3JlLCBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIHNob3VsZCBiZSBmdWxseSByZWFjaGFibGUgYW5kIGZ1bmN0aW9uYWwuIFRoaXMgaXMgZ3JlYXQsIGFzIGl0IG1lYW5zIEkgY2FuIHRyeSB0byBmaW5kIHNvbWUgbmV3IGZ1enppbmcgc3VyZmFjZS5cblxuTm93LCBsZXQncyBzZWUgd2hlcmUgdGhhdCBga3ZtaHZfb25fcHNlcmllcygpYCBpcyBkZWZpbmVkIGFuZCB3aGVyZSBpdCdzIGJlaW5nIHVzZWQuIFRpbWUgdG8gZGl2ZSBpbnRvIHRoZSBzb3VyY2UgY29kZS4uLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyMzI4MiwiT3V0cHV0VG9rZW5zIjozMywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI5OCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OToxMi43NjE0OTUzOTFaIiwiU2VxIjozMCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc4NTM3OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bWh2X29uX3BzZXJpZXNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oPTYwND1zdGF0aWMgaW5saW5lIGJvb2wga3ZtX2h2X21vZGVfYWN0aXZlKHZvaWQpXFx0XFx0eyByZXR1cm4gZmFsc2U7IH1cXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjA4LSNpZmRlZiBDT05GSUdfUFBDX1BTRVJJRVNcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oOjYwOTpzdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfb25fcHNlcmllcyh2b2lkKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjEwLXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjEzLSNlbHNlXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaDo2MTQ6c3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZClcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX3BwYy5oLTYxNS17XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNT11bnNpZ25lZCBsb25nIF9fa3ZtaHZfY29weV90b2Zyb21fZ3Vlc3RfcmFkaXgoaW50IGxwaWQsIGludCBwaWQsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYy00Ni1cXHQvKiBDYW4ndCBhY2Nlc3MgcXVhZHJhbnRzIDEgb3IgMiBpbiBub24tSFYgbW9kZSwgY2FsbCB0aGUgSFYgdG8gZG8gaXQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYzo0NzpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTQ4LVxcdFxcdHJldHVybiBwbHBhcl9oY2FsbF9ub3JldHMoSF9DT1BZX1RPRlJPTV9HVUVTVCwgbHBpZCwgcGlkLCBlYWRkcixcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jPTMxNT12b2lkIGt2bXBwY19yYWRpeF90bGJpZV9wYWdlKHN0cnVjdCBrdm0gKmt2bSwgdW5zaWduZWQgbG9uZyBhZGRyLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzI5LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjMzMDpcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTMzMS1cXHRcXHRyYWRpeF9fZmx1c2hfdGxiX2xwaWRfcGFnZShscGlkLCBhZGRyLCBwc2l6ZSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc182NF9tbXVfcmFkaXguYz0zNTM9c3RhdGljIHZvaWQga3ZtcHBjX3JhZGl4X2ZsdXNoX3B3YyhzdHJ1Y3Qga3ZtICprdm0sIHU2NCBscGlkKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtMzU2LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jOjM1NzpcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzXzY0X21tdV9yYWRpeC5jLTM1OC1cXHRcXHRyYWRpeF9fZmx1c2hfcHdjX2xwaWQobHBpZCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTE4Mj1zdGF0aWMgYm9vbCBrdm1wcGNfaXBpX3RocmVhZChpbnQgY3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODYtXFx0LyogSWYgd2UncmUgYSBuZXN0ZWQgaHlwZXJ2aXNvciwgZmFsbCBiYWNrIHRvIG9yZGluYXJ5IElQSXMgZm9yIG5vdyAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTg3OlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xODgtXFx0XFx0cmV0dXJuIGZhbHNlO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz00MTQ9c3RhdGljIGludCBrdm1wcGNfc2V0X2FyY2hfY29tcGF0KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTMyIGFyY2hfY29tcGF0KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NjAtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NjE6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiBrdm1odl9pc19uZXN0ZWR2MigpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00NjItXFx0XFx0LypcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NDQxMz1zdGF0aWMgaW50IGt2bWh2X3A5X2d1ZXN0X2VudHJ5KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdTY0IHRpbWVfbGltaXQsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ0MzItXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo0NDMzOlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ0MzQtXFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYxKCkpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQ4Njc9aW50IGt2bWh2X3J1bl9zaW5nbGVfdmNwdShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHU2NCB0aW1lX2xpbWl0LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTQ2LVxcdFxcdFxcdCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NDk0NzpcXHRcXHRcXHRpZiAoIWt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiAoX19rdm1wcGNfZ2V0X21zcl9odih2Y3B1KSBcXHUwMDI2IE1TUl9FRSkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy00OTQ4LVxcdFxcdFxcdFxcdGt2bXBwY19pbmplY3RfaW50ZXJydXB0X2h2KHZjcHUsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTUyMjg9c3RhdGljIGludCBrdm1fdm1faW9jdGxfZ2V0X3NtbXVfaW5mb19odihzdHJ1Y3Qga3ZtICprdm0sXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTEtXFx0LyogSWYgcnVubmluZyBhcyBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBkb24ndCBzdXBwb3J0IEhQVCBndWVzdHMgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjUyNTI6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUyNTMtXFx0XFx0aW5mby1cXHUwMDNlZmxhZ3MgfD0gS1ZNX1BQQ19OT19IQVNIO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02MTQ1PXN0YXRpYyBpbnQga3ZtX2FyY2hfdm1faW9jdGxfaHYoc3RydWN0IGZpbGUgKmZpbHAsXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYxNTctXFx0XFx0LyogSWYgd2UncmUgYSBuZXN0ZWQgaHlwZXJ2aXNvciwgd2UgY3VycmVudGx5IG9ubHkgc3VwcG9ydCByYWRpeCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjE1ODpcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02MTU5LVxcdFxcdFxcdHIgPSAtRU9QTk9UU1VQUDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjI1Nz1zdGF0aWMgaW50IGt2bWh2X2NvbmZpZ3VyZV9tbXUoc3RydWN0IGt2bSAqa3ZtLCBzdHJ1Y3Qga3ZtX3BwY19tbXV2M19jZmcgKmNmZylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4NC1cXHQvKiBJZiB3ZSdyZSBhIG5lc3RlZCBoeXBlcnZpc29yLCB3ZSBjdXJyZW50bHkgb25seSBzdXBwb3J0IHJhZGl4ICovXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo2Mjg1OlxcdGlmIChrdm1odl9vbl9wc2VyaWVzKCkgXFx1MDAyNlxcdTAwMjYgIXJhZGl4KVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjI4Ni1cXHRcXHRyZXR1cm4gLUVJTlZBTDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjUzMz1zdGF0aWMgaW50IGt2bXBwY19nZXRfY29tcGF0X2NhcHMoc3RydWN0IGt2bV9wcGNfY29tcGF0X2NhcHMgKmhvc3RfY2FwcylcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0MC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY1NDE6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0Mi1cXHRcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz02NjUxPXN0YXRpYyBpbnQga3ZtcHBjX2Jvb2szc19pbml0X2h2KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY2ODItI2lmZGVmIENPTkZJR19TTVBcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY2ODM6XFx0aWYgKCF4aWNzX29uX3hpdmUoKSBcXHUwMDI2XFx1MDAyNiAha3ZtaHZfb25fcHNlcmllcygpIFxcdTAwMjZcXHUwMDI2XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02Njg0LVxcdCAgICAhbG9jYWxfcGFjYS1cXHUwMDNla3ZtX2hzdGF0ZS54aWNzX3BoeXMpIHtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjcyNC1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjY3MjU6XFx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY3MjYtXFx0XFx0cHJfaW5mbyhcXFwiS1ZNLUhWOiBFbmFibGluZyBJUlEgYnlwYXNzXFxcXG5cXFwiKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTQzOT1sb25nIGt2bWh2X25lc3RlZF9pbml0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy00NDQtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NDQ1OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ0Ni1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUwMD12b2lkIGt2bWh2X25lc3RlZF9leGl0KHZvaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MDItXFx0LypcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDM6XFx0ICogTi5CLiB0aGUga3ZtaHZfb25fcHNlcmllcygpIHRlc3QgaXMgdGhlcmUgYmVjYXVzZSBpdCBlbmFibGVzXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTA0LVxcdCAqIHRoZSBjb21waWxlciB0byByZW1vdmUgdGhlIGNhbGwgdG8gcGxwYXJfaGNhbGxfbm9yZXRzKClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwNi1cXHQgKi9cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo1MDc6XFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSBcXHUwMDI2XFx1MDAyNiBwc2VyaWVzX3BhcnRpdGlvbl90Yikge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUwOC1cXHRcXHRwbHBhcl9oY2FsbF9ub3JldHMoSF9TRVRfUEFSVElUSU9OX1RBQkxFLCAwKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUxND12b2lkIGt2bWh2X2ZsdXNoX2xwaWQodTY0IGxwaWQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01MTctXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTE4OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTE5LVxcdFxcdHJhZGl4X19mbHVzaF9hbGxfbHBpZChscGlkKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUzNj12b2lkIGt2bWh2X3NldF9wdGJsX2VudHJ5KHU2NCBscGlkLCB1NjQgZHcwLCB1NjQgZHcxKVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTUzNy17XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM6NTM4OlxcdGlmICgha3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTM5LVxcdFxcdG1tdV9wYXJ0aXRpb25fdGFibGVfc2V0X2VudHJ5KGxwaWQsIGR3MCwgZHcxLCB0cnVlKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYz0zNT12b2lkIHN3aXRjaF9wbXVfdG9fZ3Vlc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTc0LVxcdC8qIEFmdGVyIHNhdmluZyBQTVUsIGJlZm9yZSBsb2FkaW5nIGd1ZXN0IFBNVSwgZmxpcCBwbWNyZWdzX2luX3VzZSAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYzo3NTpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTc2LVxcdFxcdGJhcnJpZXIoKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X3A5X3BlcmYuYz0xMTg9dm9pZCBzd2l0Y2hfcG11X3RvX2hvc3Qoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTE4Ni0jaWZkZWYgQ09ORklHX1BQQ19QU0VSSUVTXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jOjE4NzpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfcDlfcGVyZi5jLTE4OC1cXHRcXHRiYXJyaWVyKCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Bvd2VycGMuYz01MDI9aW50IGt2bV92bV9pb2N0bF9jaGVja19leHRlbnNpb24oc3RydWN0IGt2bSAqa3ZtLCBsb25nIGV4dClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTY5MC1cXHRcXHRpZiAoaHZfZW5hYmxlZCkge1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjY5MTpcXHRcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNjkyLVxcdFxcdFxcdFxcdGlmIChwc2VyaWVzX3JlbG9jX29uX2V4Y2VwdGlvbigpKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9wb3dlcnBjLmMtNzAyLVxcdFxcdHIgPSAwO1xcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jOjcwMzpcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKVxcbmFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jLTcwNC1cXHRcXHRcXHRyID0gMTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIuYz00NTQ9c3RhdGljIHZvaWQgdGVzdF9nc19ob3N0d2lkZV9jb3VudGVycyhzdHJ1Y3Qga3VuaXQgKnRlc3QpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL3Rlc3QtZ3Vlc3Qtc3RhdGUtYnVmZmVyLmMtNDYzLVxcbmFyY2gvcG93ZXJwYy9rdm0vdGVzdC1ndWVzdC1zdGF0ZS1idWZmZXIuYzo0NjQ6XFx0aWYgKCFrdm1odl9vbl9wc2VyaWVzKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS90ZXN0LWd1ZXN0LXN0YXRlLWJ1ZmZlci5jLTQ2NS1cXHRcXHRrdW5pdF9za2lwKHRlc3QsIFxcXCJUaGlzIHRlc3QgbmVlZCBhIGttdi1odiBndWVzdFxcXCIpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OToxMi44NDAwMzgyMjNaIiwiU2VxIjozMSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NDI1MDY1ODY3NiwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipBbmFseXppbmcgdGhlIEtWTSBDb25maWd1cmF0aW9uIGZvciBQb3dlclBDIFN5c3RlbXMqKlxuXG5Pa2F5LCBzbyBJJ20gbG9va2luZyBhdCB0aGlzIGBrdm1odl9vbl9wc2VyaWVzKClgIGZ1bmN0aW9uIGFuZCBpdHMgZGVmaW5pdGlvbiBpcyB0aHJvd2luZyBhIGJpdCBvZiBhIHJlZCBmbGFnLiBJdCBzZWVtcyB0byBkZXBlbmQgb24gYENPTkZJR19QUENfUFNFUklFU2AuIFRoaXMgbWVhbnMgdGhhdCBpZiBgQ09ORklHX1BQQ19QU0VSSUVTYCBpc24ndCBlbmFibGVkLCB0aGVuIHRoZSBmdW5jdGlvbiB3aWxsIGFsd2F5cyByZXR1cm4gYGZhbHNlYC4gSSBuZWVkIHRvIGVuc3VyZSB0aGUgc3lzdGVtIGlzIGNvcnJlY3RseSBjb25maWd1cmVkIHRvIGFjY291bnQgZm9yIHRoYXQuIFRoZXJlZm9yZSwgSSBuZWVkIHRvIGFkZCBgUFBDX1BTRVJJRVNgIHRvIGBFbmFibGVDb25maWdzYCB0byBlbnN1cmUgdGhpcyBzcGVjaWZpYyBmdW5jdGlvbmFsaXR5IGlzIGFkZHJlc3NlZC5cblxuTm93LCB3YWl0IGEgbWludXRlLCBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHNvbWV0aGluZy4gV2Fzbid0IGBLVk1fQk9PSzNTXzY0X0hWYCBkZXBlbmRlbnQgb24gYFBQQ19QT1dFUk5WYD8gTGV0IG1lIGp1c3QgcXVpY2tseSByZWZlciBiYWNrIHRvIGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgIHRvIHJlZnJlc2ggbXkgbWVtb3J5IGFuZCBtYWtlIHN1cmUgSSBoYXZlbid0IG1pc3NlZCBhbnl0aGluZyBjcnVjaWFsIGluIHRoZSBkZXBlbmRlbmN5IGNoYWluLiBJIG5lZWQgdG8gbWFrZSBzdXJlIEknbSBub3Qgb3Zlcmxvb2tpbmcgYW55IGludGVyYWN0aW9ucyBiZXR3ZWVuIHRoZXNlIGNvbmZpZ3VyYXRpb25zLlxuXG5cbiIsIklucHV0VG9rZW5zIjoyNzY1MCwiT3V0cHV0VG9rZW5zIjozNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjE3NiwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OToxNy4wOTA2OTg0NDlaIiwiU2VxIjozMiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoicmVhZC1maWxlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NzcwMTAsIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJGaWxlXCI6IFwiYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDc5LFxuICBcIkxpbmVDb3VudFwiOiAyMFxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiQ29udGVudHNcIjogXCIgIDc5OlxcdGNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXFxuICA4MDpcXHRcXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcbiAgODE6XFx0XFx0ZGVwZW5kcyBvbiBLVk1fQk9PSzNTXzY0IFxcdTAwMjZcXHUwMDI2IFBQQ19QT1dFUk5WXFxuICA4MjpcXHRcXHRzZWxlY3QgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVxcbiAgODM6XFx0XFx0c2VsZWN0IEtWTV9CT09LM1NfSFZfUE1VXFxuICA4NDpcXHRcXHRzZWxlY3QgQ01BXFxuICA4NTpcXHRcXHRoZWxwXFxuICA4NjpcXHRcXHQgIFN1cHBvcnQgcnVubmluZyB1bm1vZGlmaWVkIGJvb2szc182NCBndWVzdCBrZXJuZWxzIGluXFxuICA4NzpcXHRcXHQgIHZpcnR1YWwgbWFjaGluZXMgb24gUE9XRVI3IGFuZCBuZXdlciBwcm9jZXNzb3JzIHRoYXQgaGF2ZVxcbiAgODg6XFx0XFx0ICBoeXBlcnZpc29yIG1vZGUgYXZhaWxhYmxlIHRvIHRoZSBob3N0LlxcbiAgODk6XFx0XFxuICA5MDpcXHRcXHQgIElmIHlvdSBzYXkgWSBoZXJlLCBLVk0gd2lsbCB1c2UgdGhlIGhhcmR3YXJlIHZpcnR1YWxpemF0aW9uXFxuICA5MTpcXHRcXHQgIGZhY2lsaXRpZXMgb2YgUE9XRVI3IChhbmQgbGF0ZXIpIHByb2Nlc3NvcnMsIG1lYW5pbmcgdGhhdFxcbiAgOTI6XFx0XFx0ICBndWVzdCBvcGVyYXRpbmcgc3lzdGVtcyB3aWxsIHJ1biBhdCBmdWxsIGhhcmR3YXJlIHNwZWVkXFxuICA5MzpcXHRcXHQgIHVzaW5nIHN1cGVydmlzb3IgYW5kIHVzZXIgbW9kZXMuICBIb3dldmVyLCB0aGlzIGFsc28gbWVhbnNcXG4gIDk0OlxcdFxcdCAgdGhhdCBLVk0gaXMgbm90IHVzYWJsZSB1bmRlciBQb3dlclZNIChwSHlwKSwgaXMgb25seSB1c2FibGVcXG4gIDk1OlxcdFxcdCAgb24gUE9XRVI3IG9yIGxhdGVyIHByb2Nlc3NvcnMsIGFuZCBjYW5ub3QgZW11bGF0ZSBhXFxuICA5NjpcXHRcXHQgIGRpZmZlcmVudCBwcm9jZXNzb3IgZnJvbSB0aGUgaG9zdCBwcm9jZXNzb3IuXFxuICA5NzpcXHRcXG4gIDk4OlxcdFxcdCAgSWYgdW5zdXJlLCBzYXkgTi5cXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MTcuMDkwNzc2NzQ5WiIsIlNlcSI6MzMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjMzMTk5MDA5MTcsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoibnVsbCIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IioqTmF2aWdhdGluZyB0aGUgUG93ZXJQQyBLY29uZmlnIExhbmRzY2FwZSoqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgYEtWTV9CT09LM1NfNjRfSFZgIGNvbmZpZyBvcHRpb24sIGFuZCBpdCdzIHBvcHBpbmcgdXAgYSBkZXBlbmRlbmN5IG9uIGBQUENfUE9XRVJOVmAuIFJpZ2h0LCB0aGF0IG1ha2VzIHNlbnNlLiBQb3dlck5WIGlzIHRoZSBoeXBlcnZpc29yLCBzbyBhIEJvb2szUyA2NC1iaXQgS1ZNIGZvciBQb3dlck5WIHdvdWxkIG5hdHVyYWxseSBiZSBkZXBlbmRlbnQgb24gaXRzIHByZXNlbmNlLlxuXG5CdXQsIGEgbGl0dGxlIGFsYXJtIGJlbGwgaXMgZ29pbmcgb2ZmIGluIG15IGhlYWQuIElmIHdlJ3JlIGVuYWJsaW5nIGBQUENfUE9XRVJOVmAsIGRvZXMgdGhhdCBjYXVzZSBhbnkgY29uZmxpY3RzIHdpdGggYFBQQ19QU0VSSUVTYD8gSGlzdG9yaWNhbGx5LCB0aGVyZSBoYXZlIGJlZW4gaW50ZXJlc3RpbmcgY29tcGF0aWJpbGl0eSBpc3N1ZXMgaW4gdGhlIFBvd2VyUEMgYXJjaGl0ZWN0dXJlLCBlc3BlY2lhbGx5IHdoZW4gZGVhbGluZyB3aXRoIHZpcnR1YWxpemF0aW9uIGFuZCBkaWZmZXJlbnQgcGxhdGZvcm0gdHlwZXMuIEkgbmVlZCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUgd2UncmUgbm90IGluYWR2ZXJ0ZW50bHkgY3JlYXRpbmcgYSBwcm9ibGVtLiBCZXN0IHByYWN0aWNlIGlzIHRvIGNoZWNrIHRoZSByZWxldmFudCBLY29uZmlnIGZpbGUgaW1tZWRpYXRlbHkuIFNvLCBsZXQncyBkaXZlIGludG8gYGFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvS2NvbmZpZ2AgYW5kIHNlZSB3aGF0IHRoZSByZWxhdGlvbnNoaXBzIGFyZSBkZWZpbmVkIHRoZXJlLiBMZXQncyBzZWUgaWYgdGhlcmUgYXJlIGFueSBleHBsaWNpdCBjb25mbGljdHMgb3IgY29uZGl0aW9uYWwgZGVwZW5kZW5jaWVzIGxhaWQgb3V0LlxuXG5cbiIsIklucHV0VG9rZW5zIjoyODQyNCwiT3V0cHV0VG9rZW5zIjozMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjY5LCJUb29sQ2FsbHMiOlsicmVhZC1maWxlIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MjAuNDEwNjgwNTA1WiIsIlNlcSI6MzQsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMDk4NjMyMDksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFeHByZXNzaW9uXCI6IFwiY29uZmlnIFBQQ19QT1dFUk5WXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWctMS0jIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wb3dlcm52L0tjb25maWc6Mjpjb25maWcgUFBDX1BPV0VSTlZcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZy0zLVxcdGRlcGVuZHMgb24gUFBDNjQgXFx1MDAyNlxcdTAwMjYgUFBDX0JPT0szU1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OToyMC41MjA1NDc5NDVaIiwiU2VxIjozNSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzQ1NDQ0NDA5MywiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiT2theSwgaGVyZSdzIG15IHRha2Ugb24gdGhvc2UgdGhvdWdodHMsIHRhaWxvcmVkIGZvciBhbiBleHBlcnQgYXVkaWVuY2UsIGFuZCB3cml0dGVuIGFzIGlmIHRoZXkgd2VyZSBteSBvd246XG5cbioqRGl2aW5nIGludG8gdGhlIFBvd2VyUEMvcFNlcmllcyBLZXJuZWwgQ29uZmlndXJhdGlvbioqXG5cbkFscmlnaHQsIHRpbWUgdG8gZ2V0IG15IGhhbmRzIGRpcnR5LiBMZXQncyBzZWUgd2hhdCdzIHdoYXQgaW4gdGhlIGBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZ2AgZmlsZS4gU3BlY2lmaWNhbGx5LCBJIG5lZWQgdG8gZ2V0IGEgY2xlYXIgcGljdHVyZSBvZiB3aGF0J3MgZ29pbmcgb24gd2l0aCB0aGUgcGxhdGZvcm0tc3BlY2lmaWMgY29uZmlndXJhdGlvbnMgZm9yIHBTZXJpZXMgc3lzdGVtcy4gSSBuZWVkIHRvIHVuZGVyc3RhbmQgaG93IHRoZSBhcmNoaXRlY3R1cmUgaGFuZGxlcyBpdHMgdW5pcXVlIGhhcmR3YXJlIGNoYXJhY3RlcmlzdGljcy4gV2hhdCBmZWF0dXJlcyBhcmUgc3VwcG9ydGVkLCBhbmQgaG93IGFyZSB0aGV5IGNvbmRpdGlvbmFsbHkgZW5hYmxlZD8gSSB3YW50IHRvIHBpbnBvaW50IHRoZSBrZXkgb3B0aW9ucyBhbmQgZGVwZW5kZW5jaWVzIHRoYXQgZGVmaW5lIGEgbWluaW1hbCwgb3IgYSBmZWF0dXJlLXJpY2gsIGtlcm5lbCBjb25maWd1cmF0aW9uIGZvciB0aGlzIGFyY2hpdGVjdHVyZS4gRGlnZ2luZyBpbnRvIHRoZSBLY29uZmlnIGZpbGUgc2hvdWxkIGdpdmUgbWUgdGhhdCBvdmVydmlldyBhbmQgdGhlIGRldGFpbGVkIGluc2lnaHRzIEkgbmVlZC4gSSdtIGhvcGluZyB0byB1bmNvdmVyIGFueSBuZXcgb3Igbm90ZXdvcnRoeSBjaGFuZ2VzIHJlbGF0ZWQgdG8gcG93ZXIgbWFuYWdlbWVudCwgaGFyZHdhcmUgZHJpdmVycywgb3IgZmlybXdhcmUgaW50ZWdyYXRpb24sIGFuZCByZWxhdGUgdGhlc2UgdG8gbXkgY3VycmVudCBwcm9qZWN0LiBMZXQncyBnZXQgdG8gaXQuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjI4ODQzLCJPdXRwdXRUb2tlbnMiOjMxLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MTgsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MjMuOTc0OTk0MTI4WiIsIlNlcSI6MzYsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo5NTY1MjM5MSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgUFBDX1BTRVJJRVNcIixcbiAgXCJQYXRoUHJlZml4XCI6IFwiYXJjaC9wb3dlcnBjL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZzoyOmNvbmZpZyBQUENfUFNFUklFU1xcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcHNlcmllcy9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBQUEM2NCBcXHUwMDI2XFx1MDAyNiBQUENfQk9PSzNTXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3BzZXJpZXMvS2NvbmZpZz05Mj1jb25maWcgTFBBUkNGR1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctOTgtXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWc6OTk6Y29uZmlnIFBQQ19QU0VSSUVTX0RFQlVHXFxuYXJjaC9wb3dlcnBjL3BsYXRmb3Jtcy9wc2VyaWVzL0tjb25maWctMTAwLVxcdGRlcGVuZHMgb24gUFBDX1BTRVJJRVMgXFx1MDAyNlxcdTAwMjYgUFBDX0VBUkxZX0RFQlVHXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU5OjI0LjA3MDY1MjEyOVoiLCJTZXEiOjM3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo4MDg3Nzg3NDQyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKktlcm5lbCBDb25maWd1cmF0aW9uIENvbnNpZGVyYXRpb25zIGZvciBQb3dlclBDIEVudmlyb25tZW50cyoqXG5cbk9rYXksIHNvIEknbSB0aGlua2luZyBhYm91dCBQb3dlclBDIGtlcm5lbCBjb25maWd1cmF0aW9ucyBhbmQgd2hldGhlciB3ZSBjYW4gZW5hYmxlIGJvdGggYFBQQ19QT1dFUk5WYCBhbmQgYFBQQ19QU0VSSUVTYCBzaW11bHRhbmVvdXNseS4gVGhlIHF1aWNrIGFuc3dlciBpcyB5ZXMsIGluIG1vZGVybiBrZXJuZWxzLCBpdCdzIHBvc3NpYmxlIHRvIGJ1aWxkIGEgc2luZ2xlIGtlcm5lbCBpbWFnZSB0aGF0IGNhbiBib290IG9uIGJvdGggYmFyZS1tZXRhbCBQb3dlck5WIGFuZCB2aXJ0dWFsaXplZCBwU2VyaWVzIHN5c3RlbXMuIFRoZXJlZm9yZSwgc2V0dGluZyBib3RoIGBQUENfUE9XRVJOVmAgYW5kIGBQUENfUFNFUklFU2Agc2VlbXMgcGVyZmVjdGx5IHZhbGlkLlxuXG5Ib3dldmVyLCBJIG5lZWQgdG8gY29uc2lkZXIgZGVwZW5kZW5jaWVzLiBJIHJlY2FsbCB0aGF0IGBLVk1fQk9PSzNTXzY0X0hWYCBkZXBlbmRzIG9uIGBQUENfUE9XRVJOVmAsIGFuZCBga3ZtaHZfb25fcHNlcmllcygpYCByZXF1aXJlcyBgUFBDX1BTRVJJRVNgLiBUaGVyZWZvcmUsIGVuYWJsaW5nIGJvdGggd291bGQgYmUgcmVxdWlyZWQsIHNvIHRoYXQgd2UgY2FuIGVuc3VyZSBib3RoIGBLVk1fQk9PSzNTXzY0X0hWYCBpcyBhdmFpbGFibGUgYW5kIGBrdm1odl9vbl9wc2VyaWVzKClgIGNhbiBldmFsdWF0ZSB0byB0cnVlLlxuXG5CdXQgSSdtIGEgYml0IGNvbmNlcm5lZCBhYm91dCBob3cgYGt2bWh2X29uX3BzZXJpZXMoKWAgYWN0dWFsbHkgYmVoYXZlcy4gTGV0IG1lIGRvdWJsZS1jaGVjayB0aGUgbG9naWMuIEl0J3MgY29uZGl0aW9uYWxseSBjb21waWxlZDpcblxuYGBgY1xuI2lmZGVmIENPTkZJR19QUENfUFNFUklFU1xuc3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZClcbntcblx0cmV0dXJuICFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9IVk1PREUpO1xufVxuI2Vsc2VcbnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9vbl9wc2VyaWVzKHZvaWQpXG57XG5cdHJldHVybiBmYWxzZTtcbn1cbiNlbmRpZlxuYGBgXG5cbklmIGBQUENfUFNFUklFU2AgaXMgZW5hYmxlZCwgdGhlIGZ1bmN0aW9uIHJldHVybnMgYCFjcHVfaGFzX2ZlYXR1cmUoQ1BVX0ZUUl9IVk1PREUpYC4gTm93LCBpZiB3ZSBib290IHRoaXMgb24gUUVNVSBhcyBhIHBTZXJpZXMgZ3Vlc3QsIGBDUFVfRlRSX0hWTU9ERWAgKmlzbid0KiBzZXQsIHNvIGBrdm1odl9vbl9wc2VyaWVzKClgIHdvdWxkIHJldHVybiBgdHJ1ZWAuIEluIHRoaXMgc2NlbmFyaW8sIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB3aWxsIHByb2NlZWQsIGFuZCByZXR1cm4gMC5cblxuSG93ZXZlciwgaWYgd2UgYm9vdCBvbiBQb3dlck5WIChiYXJlIG1ldGFsKSwgYENQVV9GVFJfSFZNT0RFYCAqaXMqIHNldCwgc28gYGt2bWh2X29uX3BzZXJpZXMoKWAgd291bGQgcmV0dXJuIGBmYWxzZWAuIEFoLCB0aGlzIGlzIHdoZXJlIGl0IGdldHMgYSBsaXR0bGUgaGF6eS4uLiBhIHJldHVybiBvZiBmYWxzZSBtZWFucyB0aGF0IGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB3aWxsIHJldHVybiBgLUVJTlZBTGAuIElzIHRoYXQgdGhlIGV4cGVjdGVkIGJlaGF2aW9yPyBJIG5lZWQgdG8gZ28gYmFjayBhbmQgcmV2aXNpdCB0aGF0IHBhdGNoLiBTb21ldGhpbmcgZG9lc24ndCBmZWVsIHF1aXRlIHJpZ2h0IHdpdGggdGhhdCBwYXJ0IG9mIHRoZSBsb2dpYy5cblxuXG4iLCJJbnB1dFRva2VucyI6MjkyOTMsIk91dHB1dFRva2VucyI6NDQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo0NDksIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6MzIuMTU4NDQxNDExWiIsIlNlcSI6MzgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6InJlYWQtZmlsZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjIwOTUxMCwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkZpbGVcIjogXCJhcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jXCIsXG4gIFwiRmlyc3RMaW5lXCI6IDY1MzMsXG4gIFwiTGluZUNvdW50XCI6IDQwXG59IiwiUmVzdWx0cyI6IntcbiAgXCJDb250ZW50c1wiOiBcIjY1MzM6XFx0c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuNjUzNDpcXHR7XFxuNjUzNTpcXHRcXHRzdHJ1Y3QgZGV2aWNlX25vZGUgKm5wO1xcbjY1MzY6XFx0XFx0dW5zaWduZWQgbG9uZyBjYXBhYmlsaXRpZXMgPSAwO1xcbjY1Mzc6XFx0XFx0Y29uc3QgX19iZTMyICpwcm9wID0gTlVMTDtcXG42NTM4OlxcdFxcdGxvbmcgcmMgPSAtRUlOVkFMO1xcbjY1Mzk6XFx0XFx0dTMyIGNwdV92ZXJzaW9uO1xcbjY1NDA6XFx0XFxuNjU0MTpcXHRcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpKSB7XFxuNjU0MjpcXHRcXHRcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbjY1NDM6XFx0XFx0XFx0XFx0V0FSTl9PTl9PTkNFKCFuZXN0ZWRfY2FwYWJpbGl0aWVzKTtcXG42NTQ0OlxcdFxcdFxcdFxcdGNhcGFiaWxpdGllcyA9IG5lc3RlZF9jYXBhYmlsaXRpZXM7XFxuNjU0NTpcXHRcXHRcXHRcXHRyYyA9IDA7XFxuNjU0NjpcXHRcXHRcXHR9IGVsc2Uge1xcbjY1NDc6XFx0XFx0XFx0XFx0Zm9yX2VhY2hfbm9kZV9ieV90eXBlKG5wLCBcXFwiY3B1XFxcIikge1xcbjY1NDg6XFx0XFx0XFx0XFx0XFx0cHJvcCA9IG9mX2dldF9wcm9wZXJ0eShucCwgXFxcImNwdS12ZXJzaW9uXFxcIiwgTlVMTCk7XFxuNjU0OTpcXHRcXHRcXHRcXHRcXHRpZiAocHJvcCkge1xcbjY1NTA6XFx0XFx0XFx0XFx0XFx0XFx0Y3B1X3ZlcnNpb24gPSBiZTMyX3RvX2NwdXAocHJvcCk7XFxuNjU1MTpcXHRcXHRcXHRcXHRcXHRcXHRvZl9ub2RlX3B1dChucCk7XFxuNjU1MjpcXHRcXHRcXHRcXHRcXHRcXHRicmVhaztcXG42NTUzOlxcdFxcdFxcdFxcdFxcdH1cXG42NTU0OlxcdFxcdFxcdFxcdH1cXG42NTU1OlxcdFxcdFxcdFxcdGlmICghcHJvcClcXG42NTU2OlxcdFxcdFxcdFxcdFxcdHJldHVybiAtRUlOVkFMO1xcbjY1NTc6XFx0XFx0XFx0XFx0cmMgPSBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXMoY3B1X3ZlcnNpb24sXFxuNjU1ODpcXHRcXHRcXHRcXHRcXHRcXHRcXHRcXHQgICAgXFx1MDAyNmNhcGFiaWxpdGllcyk7XFxuNjU1OTpcXHRcXHRcXHR9XFxuNjU2MDpcXHRcXHR9XFxuNjU2MTpcXHRcXG42NTYyOlxcdFxcdGlmIChyYyBcXHUwMDNjIDApXFxuNjU2MzpcXHRcXHRcXHRyZXR1cm4gcmM7XFxuNjU2NDpcXHRcXG42NTY1OlxcdFxcdGhvc3RfY2Fwcy1cXHUwMDNlY29tcGF0X2NhcGFiaWxpdGllcyA9IGNhcGFiaWxpdGllcyBcXHUwMDI2IEtWTV9QUENfQ09NUEFUX0JJVE1BU0s7XFxuNjU2NjpcXHRcXG42NTY3OlxcdFxcdHJldHVybiByYztcXG42NTY4OlxcdH1cXG42NTY5OlxcdFxcbjY1NzA6XFx0c3RhdGljIHN0cnVjdCBrdm1wcGNfb3BzIGt2bV9vcHNfaHYgPSB7XFxuNjU3MTpcXHRcXHQuZ2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3NfaHYsXFxuNjU3MjpcXHRcXHQuc2V0X3NyZWdzID0ga3ZtX2FyY2hfdmNwdV9pb2N0bF9zZXRfc3JlZ3NfaHYsXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU5OjMyLjE1ODY1MjEyMVoiLCJTZXEiOjM5LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo3OTcxNzAxODQzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgTmVzdGVkIEtWTSBDUFUgQ29tcGF0aWJpbGl0eSBJb2N0bCoqXG5cbk9rYXksIGxldCdzIGJyZWFrIHRoaXMgZG93bi4gSWYgYGt2bWh2X29uX3BzZXJpZXMoKWAgcmV0dXJucyBmYWxzZSwgdGhlIHJldHVybiBjb2RlIChgcmNgKSBpcyBgLUVJTlZBTGAsIGFuZCB0aGUgZnVuY3Rpb24gaW1tZWRpYXRlbHkgcmV0dXJucyBgLUVJTlZBTGAuIEluaXRpYWxseSwgaXQgc2VlbWVkIGxpa2UgdGhpcyBtaWdodCBsaW1pdCBzdXBwb3J0IHRvIHBzZXJpZXMgc3lzdGVtcy4gVGhlIGNvbW1pdCBtZXNzYWdlIHByb3ZpZGVzIGEgY3J1Y2lhbCBjbHVlOiBcIlRoaXMgaW9jdGwgcHJvdmlkZXMgdXNlcnNwYWNlIHdpdGggaW5mb3JtYXRpb24gYWJvdXQgdGhlIENQVSBjb21wYXRpYmlsaXR5IG1vZGVzIHN1cHBvcnRlZCBieSB0aGUgY3VycmVudCBob3N0IHByb2Nlc3NvciBmb3IgYm9vdGluZyB0aGUgbmVzdGVkIEtWTSBndWVzdHMgb24gS1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpIGFuZCBLVk0gb24gUG93ZXJWTSAobmVzdGVkIEFQSSB2MikgcGxhdGZvcm1zLlwiXG5cblRoZSBtZW50aW9uIG9mIFwiS1ZNIG9uIFBvd2VyTlYgKG5lc3RlZCBBUEkgdjEpXCIgdHJpZ2dlcmVkIGEgcmVkIGZsYWcuIElmIGl0J3MgUG93ZXJOViwgYGt2bWh2X29uX3BzZXJpZXMoKWAgKnNob3VsZCogYmUgZmFsc2UhIEFuZCwgaWYgYGt2bWh2X29uX3BzZXJpZXMoKWAgaXMgaW5kZWVkIGZhbHNlLCB0aGUgYHJjYCBpcyBgLUVJTlZBTGAsIGNhdXNpbmcgdGhlIGZ1bmN0aW9uIHRvIHJldHVybiBgLUVJTlZBTGAuIEkgZmVsdCBhIG5lZWQgdG8gcmV2aXNpdCBteSBhc3N1bXB0aW9ucy5cblxuT2theSwgbGV0IG1lIHJlcmVhZCB0aGUgY29tbWl0IG1lc3NhZ2U6IFwiLi4uZm9yIGJvb3RpbmcgdGhlIG5lc3RlZCBLVk0gZ3Vlc3RzIG9uIEtWTSBvbiBQb3dlck5WIChuZXN0ZWQgQVBJIHYxKSBhbmQgS1ZNIG9uIFBvd2VyVk0gKG5lc3RlZCBBUEkgdjIpIHBsYXRmb3Jtcy5cIiBBaCwgbm93IEkgc2VlLiBcIktWTSBvbiBQb3dlck5WXCIgbWVhbnMgdGhlICpMMSogZ3Vlc3QgaXMgcnVubmluZyBvbiBQb3dlck5WLiBTbywgdGhlIGJhcmUgbWV0YWwgaG9zdCAoTDApIGlzIFBvd2VyTlYsIGFuZCB0aGUgZ3Vlc3Qgb24gdG9wIChMMSkgaXMgYSBwc2VyaWVzIGd1ZXN0LiBUaGUgbmVzdGVkIGd1ZXN0IChMMikgcnVucyB3aXRoaW4gdGhhdCBwc2VyaWVzIGd1ZXN0IChMMSkuIFRoZSBpb2N0bCBpcyB0aGVyZWZvcmUgY2FsbGVkIGZyb20gUUVNVSwgd2hpY2ggaXMgcnVubmluZyAqaW5zaWRlKiB0aGUgTDEgcHNlcmllcyBndWVzdC5cblxuVGhlcmVmb3JlLCBiZWNhdXNlIHdlIGFyZSBpbiBhbiBMMSBwc2VyaWVzIGd1ZXN0LCBga3ZtaHZfb25fcHNlcmllcygpYCAqbXVzdCogYmUgdHJ1ZS4gU28sIHRoaXMgZnVuY3Rpb25hbGl0eSAqaXMqIG9ubHkgc3VwcG9ydGVkIHdoZW4gcnVubmluZyBhcyBhIHBzZXJpZXMgZ3Vlc3QuIEFuZCBzaW5jZSBzeXprYWxsZXIgcnVucyBpbiBhIHBzZXJpZXMgZ3Vlc3QgKHZpYSBRRU1VIHdpdGggYC1NIHBzZXJpZXNgKSwgaXQgYWxsIG1ha2VzIHNlbnNlLiBUaGUgY29kZSBwYXRoIHNob3VsZCBiZSBjb3JyZWN0IGFuZCwgYGt2bWh2X29uX3BzZXJpZXMoKWAgd2lsbCBldmFsdWF0ZSB0byB0cnVlLiBOb3csIGxldCdzIG1vdmUgb24gdG8gYGt2bWh2X2lzX25lc3RlZHYyKClgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozMDkzMywiT3V0cHV0VG9rZW5zIjozNCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjQxNiwiVG9vbENhbGxzIjpbInJlYWQtZmlsZSJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU5OjQwLjEzMDM1NjA1NFoiLCJTZXEiOjQwLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM4MjQ5ODk3LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImt2bWh2X2lzX25lc3RlZHYyXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9cIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwiYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaD0zMjA9dm9pZCBrdm1wcGNfZ2l2ZXVwX2ZhYyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHVsb25nIGZhYyk7XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMyNC1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjMyNTpleHRlcm4gc3RydWN0IHN0YXRpY19rZXlfZmFsc2UgX19rdm1odl9pc19uZXN0ZWR2MjtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMyNi1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjMyNzpzdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfaXNfbmVzdGVkdjIodm9pZClcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMyOC17XFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaDozMjk6XFx0cmV0dXJuIHN0YXRpY19icmFuY2hfdW5saWtlbHkoXFx1MDAyNl9fa3ZtaHZfaXNfbmVzdGVkdjIpO1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzMwLX1cXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg9MzMyPXN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9pc19uZXN0ZWR2MSh2b2lkKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzMzLXtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjMzNDpcXHRyZXR1cm4gIXN0YXRpY19icmFuY2hfbGlrZWx5KFxcdTAwMjZfX2t2bWh2X2lzX25lc3RlZHYyKTtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMzNS19XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTMzOC1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjMzOTpzdGF0aWMgaW5saW5lIGJvb2wga3ZtaHZfaXNfbmVzdGVkdjIodm9pZClcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM0MC17XFxuLS1cXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oPTM1Nj1zdGF0aWMgaW5saW5lIGludCBrdm1odl9uZXN0ZWR2Ml9yZWxvYWRfcHRyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSxcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzU4LXtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjM1OTpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM2MC1cXHRcXHRyZXR1cm4gX19rdm1odl9uZXN0ZWR2Ml9yZWxvYWRfcHRyZWdzKHZjcHUsIHJlZ3MpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaD0zNjM9c3RhdGljIGlubGluZSBpbnQga3ZtaHZfbmVzdGVkdjJfbWFya19kaXJ0eV9wdHJlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaC0zNjUte1xcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmg6MzY2OlxcdGlmIChrdm1odl9pc19uZXN0ZWR2MigpKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzY3LVxcdFxcdHJldHVybiBfX2t2bWh2X25lc3RlZHYyX21hcmtfZGlydHlfcHRyZWdzKHZjcHUsIHJlZ3MpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaD0zNzE9c3RhdGljIGlubGluZSBpbnQga3ZtaHZfbmVzdGVkdjJfbWFya19kaXJ0eShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBpZGVuKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzcyLXtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjM3MzpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM3NC1cXHRcXHRyZXR1cm4gX19rdm1odl9uZXN0ZWR2Ml9tYXJrX2RpcnR5KHZjcHUsIGlkZW4pO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9ib29rM3MuaD0zNzg9c3RhdGljIGlubGluZSBpbnQga3ZtaHZfbmVzdGVkdjJfY2FjaGVkX3JlbG9hZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUxNiBpZGVuKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fYm9vazNzLmgtMzc5LXtcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oOjM4MDpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20va3ZtX2Jvb2szcy5oLTM4MS1cXHRcXHRyZXR1cm4gX19rdm1odl9uZXN0ZWR2Ml9jYWNoZWRfcmVsb2FkKHZjcHUsIGlkZW4pO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2luY2x1ZGUvYXNtL2t2bV9wcGMuaD02MTQ9c3RhdGljIGlubGluZSBib29sIGt2bWh2X29uX3BzZXJpZXModm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjIyLVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmg6NjIzOnN0YXRpYyBpbmxpbmUgYm9vbCBrdm1odl9pc19uZXN0ZWR2Mih2b2lkKVxcbmFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9rdm1fcHBjLmgtNjI0LXtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzLmM9Mjk2PXN0YXRpYyBpbnQga3ZtcHBjX2Jvb2szc19pcnFwcmlvX2RlbGl2ZXIoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYy0zMDQtXFx0Y2FzZSBCT09LM1NfSVJRUFJJT19ERUNSRU1FTlRFUjpcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jOjMwNTpcXHRcXHRkZWxpdmVyID0gIWt2bWh2X2lzX25lc3RlZHYyKCkgXFx1MDAyNlxcdTAwMjYgKGt2bXBwY19nZXRfbXNyKHZjcHUpIFxcdTAwMjYgTVNSX0VFKSBcXHUwMDI2XFx1MDAyNiAhY3JpdDtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jLTMwNi1cXHRcXHR2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0RFQ1JFTUVOVEVSO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3MuYy0zMDgtXFx0Y2FzZSBCT09LM1NfSVJRUFJJT19FWFRFUk5BTDpcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jOjMwOTpcXHRcXHRkZWxpdmVyID0gIWt2bWh2X2lzX25lc3RlZHYyKCkgXFx1MDAyNlxcdTAwMjYgKGt2bXBwY19nZXRfbXNyKHZjcHUpIFxcdTAwMjYgTVNSX0VFKSBcXHUwMDI2XFx1MDAyNiAhY3JpdDtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szcy5jLTMxMC1cXHRcXHR2ZWMgPSBCT09LM1NfSU5URVJSVVBUX0VYVEVSTkFMO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM9MzU9dW5zaWduZWQgbG9uZyBfX2t2bWh2X2NvcHlfdG9mcm9tX2d1ZXN0X3JhZGl4KGludCBscGlkLCBpbnQgcGlkLFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtNDItXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmM6NDM6XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfNjRfbW11X3JhZGl4LmMtNDQtXFx0XFx0cmV0dXJuIEhfVU5TVVBQT1JURUQ7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTQxND1zdGF0aWMgaW50IGt2bXBwY19zZXRfYXJjaF9jb21wYXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCB1MzIgYXJjaF9jb21wYXQpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ2MC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjQ2MTpcXHRpZiAoa3ZtaHZfb25fcHNlcmllcygpIFxcdTAwMjZcXHUwMDI2IGt2bWh2X2lzX25lc3RlZHYyKCkpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTQ2Mi1cXHRcXHQvKlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz03Mjg9c3RhdGljIHZvaWQga3ZtcHBjX3VwZGF0ZV92cGFzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNzQxLVxcdFxcdGlmIChvbGRfdnBhLnBpbm5lZF9hZGRyKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo3NDI6XFx0XFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy03NDMtXFx0XFx0XFx0XFx0a3ZtaHZfbmVzdGVkdjJfc2V0X3ZwYSh2Y3B1LCB+MHVsbCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTc0OC1cXHRcXHRcXHRpbml0X3ZwYSh2Y3B1LCB2Y3B1LVxcdTAwM2VhcmNoLnZwYS5waW5uZWRfYWRkcik7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo3NDk6XFx0XFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy03NTAtXFx0XFx0XFx0XFx0a3ZtaHZfbmVzdGVkdjJfc2V0X3ZwYSh2Y3B1LCBfX3BhKHZjcHUtXFx1MDAzZWFyY2gudnBhLnBpbm5lZF9hZGRyKSk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTE2Mjk9c3RhdGljIGludCBrdm1wcGNfaGFuZGxlX2V4aXRfaHYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xNjQ0LVxcdCAqL1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MTY0NTpcXHRpZiAoIWt2bWh2X2lzX25lc3RlZHYyKCkgXFx1MDAyNlxcdTAwMjYgKF9fa3ZtcHBjX2dldF9tc3JfaHYodmNwdSkgXFx1MDAyNiBNU1JfSFYpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0xNjQ2LVxcdFxcdHByaW50ayhLRVJOX0VNRVJHIFxcXCJLVk0gdHJhcCBpbiBIViBtb2RlIVxcXFxuXFxcIik7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTE3MzUtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzoxNzM2OlxcdFxcdGlmICgha3ZtaHZfaXNfbmVzdGVkdjIoKSBcXHUwMDI2XFx1MDAyNiB1bmxpa2VseShfX2t2bXBwY19nZXRfbXNyX2h2KHZjcHUpIFxcdTAwMjYgTVNSX1BSKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMTczNy1cXHRcXHRcXHQvKlxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYz0yOTYwPXN0YXRpYyBpbnQga3ZtcHBjX2NvcmVfdmNwdV9jcmVhdGVfaHYoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy0yOTgzLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6Mjk4NDpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMjk4NS1cXHRcXHRlcnIgPSBrdm1odl9uZXN0ZWR2Ml92Y3B1X2NyZWF0ZSh2Y3B1LCBcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC5uZXN0ZWR2Ml9pbyk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTMxMzk9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfdmNwdV9mcmVlX2h2KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtMzE0NS1cXHRzcGluX3VubG9jayhcXHUwMDI2dmNwdS1cXHUwMDNlYXJjaC52cGFfdXBkYXRlX2xvY2spO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6MzE0NjpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTMxNDctXFx0XFx0a3ZtaHZfbmVzdGVkdjJfdmNwdV9mcmVlKHZjcHUsIFxcdTAwMjZ2Y3B1LVxcdTAwM2VhcmNoLm5lc3RlZHYyX2lvKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NTA4ND1zdGF0aWMgaW50IGt2bXBwY192Y3B1X3J1bl9odihzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUxNjgtXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo1MTY5OlxcdFxcdFxcdGlmICgha3ZtaHZfaXNfbmVzdGVkdjIoKSBcXHUwMDI2XFx1MDAyNiBXQVJOX09OX09OQ0UoX19rdm1wcGNfZ2V0X21zcl9odih2Y3B1KSBcXHUwMDI2IE1TUl9QUikpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTUxNzAtXFx0XFx0XFx0XFx0LypcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NTQxMj12b2lkIGt2bXBwY191cGRhdGVfbHBjcihzdHJ1Y3Qga3ZtICprdm0sIHVuc2lnbmVkIGxvbmcgbHBjciwgdW5zaWduZWQgbG9uZyBtYXNrKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01NDM0LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTQzNTpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTQzNi1cXHRcXHRzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHU7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTU2OTc9c3RhdGljIGludCBrdm1wcGNfY29yZV9pbml0X3ZtX2h2KHN0cnVjdCBrdm0gKmt2bSlcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTcwNy1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjU3MDg6XFx0aWYgKCFrdm1odl9pc19uZXN0ZWR2MigpKSB7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01NzA5LVxcdFxcdGxwaWQgPSBrdm1wcGNfYWxsb2NfbHBpZCgpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01NzE4LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTcxOTpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTcyMC1cXHRcXHRsb25nIHJjO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01ODEzLVxcdFxcdGlmIChyZXQpIHtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jOjU4MTQ6XFx0XFx0XFx0aWYgKGt2bWh2X2lzX25lc3RlZHYyKCkpXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01ODE1LVxcdFxcdFxcdFxcdHBscGFyX2d1ZXN0X2RlbGV0ZSgwLCBrdm0tXFx1MDAzZWFyY2gubHBpZCk7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTU4ODc9c3RhdGljIHZvaWQga3ZtcHBjX2NvcmVfZGVzdHJveV92bV9odihzdHJ1Y3Qga3ZtICprdm0pXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU5MDYtXFx0XFx0XFx0dXZfc3ZtX3Rlcm1pbmF0ZShrdm0tXFx1MDAzZWFyY2gubHBpZCk7XFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYzo1OTA3OlxcdFxcdGlmICgha3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTU5MDgtXFx0XFx0XFx0a3ZtaHZfc2V0X3B0YmxfZW50cnkoa3ZtLVxcdTAwM2VhcmNoLmxwaWQsIDAsIDApO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy01OTEwLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NTkxMTpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNTkxMi1cXHRcXHRrdm1odl9mbHVzaF9scGlkKGt2bS1cXHUwMDNlYXJjaC5scGlkKTtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM9NjMyMD1zdGF0aWMgaW50IGt2bWh2X2VuYWJsZV9uZXN0ZWQoc3RydWN0IGt2bSAqa3ZtKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuYy02MzI3LVxcdFxcdHJldHVybiAtRU5PREVWO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjMyODpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTYzMjktXFx0XFx0cmV0dXJuIC1FTk9ERVY7XFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jPTY1MzM9c3RhdGljIGludCBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzKHN0cnVjdCBrdm1fcHBjX2NvbXBhdF9jYXBzICpob3N0X2NhcHMpXFxuLS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odi5jLTY1NDEtXFx0aWYgKGt2bWh2X29uX3BzZXJpZXMoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmM6NjU0MjpcXHRcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2LmMtNjU0My1cXHRcXHRcXHRXQVJOX09OX09OQ0UoIW5lc3RlZF9jYXBhYmlsaXRpZXMpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmM9NDM5PWxvbmcga3ZtaHZfbmVzdGVkX2luaXQodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ2OC1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYzo0Njk6XFx0XFx0c3RhdGljX2JyYW5jaF9lbmFibGUoXFx1MDAyNl9fa3ZtaHZfaXNfbmVzdGVkdjIpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jLTQ3MC1cXHRcXHRyZXR1cm4gMDtcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jPTUzNj12b2lkIGt2bWh2X3NldF9wdGJsX2VudHJ5KHU2NCBscGlkLCB1NjQgZHcwLCB1NjQgZHcxKVxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkLmMtNTQ5LVxcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZC5jOjU1MDpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSlcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWQuYy01NTEtXFx0XFx0a3ZtaHZfbmVzdGVkdjJfc2V0X3B0YmxfZW50cnkobHBpZCwgZHcwLCBkdzEpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHZfbmVzdGVkdjIuYy0yOS1cXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWR2Mi5jOjMwOnN0cnVjdCBzdGF0aWNfa2V5X2ZhbHNlIF9fa3ZtaHZfaXNfbmVzdGVkdjIgX19yZWFkX21vc3RseTtcXG5hcmNoL3Bvd2VycGMva3ZtL2Jvb2szc19odl9uZXN0ZWR2Mi5jOjMxOkVYUE9SVF9TWU1CT0xfR1BMKF9fa3ZtaHZfaXNfbmVzdGVkdjIpO1xcbmFyY2gvcG93ZXJwYy9rdm0vYm9vazNzX2h2X25lc3RlZHYyLmMtMzItXFxuLS1cXG5hcmNoL3Bvd2VycGMvcGVyZi9rdm0taHYtcG11LmM9Mzk4PXN0YXRpYyBpbnQgX19pbml0IGt2bXBwY19yZWdpc3Rlcl9wbXUodm9pZClcXG4tLVxcbmFyY2gvcG93ZXJwYy9wZXJmL2t2bS1odi1wbXUuYy00MDItXFx0Lyogb25seSBzdXBwb3J0IGV2ZW50cyBmb3IgbmVzdGVkdjIgcmlnaHQgbm93ICovXFxuYXJjaC9wb3dlcnBjL3BlcmYva3ZtLWh2LXBtdS5jOjQwMzpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9wZXJmL2t2bS1odi1wbXUuYy00MDQtXFx0XFx0cmMgPSBrdm1wcGNfaW5pdF9ob3N0d2lkZSgpO1xcbi0tXFxuYXJjaC9wb3dlcnBjL3BlcmYva3ZtLWh2LXBtdS5jPTQyMD1zdGF0aWMgdm9pZCBfX2V4aXQga3ZtcHBjX3VucmVnaXN0ZXJfcG11KHZvaWQpXFxuYXJjaC9wb3dlcnBjL3BlcmYva3ZtLWh2LXBtdS5jLTQyMS17XFxuYXJjaC9wb3dlcnBjL3BlcmYva3ZtLWh2LXBtdS5jOjQyMjpcXHRpZiAoa3ZtaHZfaXNfbmVzdGVkdjIoKSkge1xcbmFyY2gvcG93ZXJwYy9wZXJmL2t2bS1odi1wbXUuYy00MjMtXFx0XFx0a3ZtcHBjX2NsZWFudXBfaG9zdHdpZGUoKTtcXG5cIlxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMDk6NTk6NDAuMzY4NjEyOTAxWiIsIlNlcSI6NDEsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE1MTM2OTQ5ODA1LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgU3RyYXRlZ3kgZm9yIFBvd2VyUEMgS1ZNIENvbXBhdGliaWxpdHkgQ2FwYWJpbGl0aWVzKipcblxuT2theSwgbGV0J3MgYnJlYWsgdGhpcyBkb3duLiBGcm9tIGEgZnVuY3Rpb25hbGl0eSBwZXJzcGVjdGl2ZSwgdGhpcyBwYXRjaCBsb29rcyBzb2xpZDsgYGt2bWh2X2lzX25lc3RlZHYyKClgIGdldHMgZW5hYmxlZCBpbiBga3ZtaHZfbmVzdGVkX2luaXQoKWAgaWYgdGhlIGhvc3Qgc3VwcG9ydHMgbmVzdGVkdjIuIFdlJ3JlIHVzaW5nIGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCB3aXRoIGBuZXN0ZWRfY2FwYWJpbGl0aWVzYCBpbiB0aGUgbmVzdGVkdjIgY2FzZS4gSWYgaXQncyBuZXN0ZWR2MSBvciBwc2VyaWVzLCB3ZSBhcmUgcmVhZGluZyBgY3B1LXZlcnNpb25gIGZyb20gdGhlIGRldmljZSB0cmVlLiBCb3RoIHBhdGhzIGFyZSB3b3JraW5nLiBUaGlzIGlzIHNvbWV0aGluZyB0aGF0IG5lZWRzIGZ1enplZC5cblxuVGhlIGtleSBjb25maWd1cmF0aW9ucyB0byBlbmFibGUgYXJlIGdvaW5nIHRvIGJlOiBgS1ZNX0JPT0szU182NF9IVmAsIGBQUENfUE9XRVJOVmAsIGFuZCBgUFBDX1BTRVJJRVNgLiBIb2xkIG9uLCBgS1ZNX0JPT0szU182NF9IVmAgcmVxdWlyZXMgYEtWTV9CT09LM1NfNjRgIGFuZCBgUFBDX1BPV0VSTlZgLiBMZXQncyBrZWVwIHRoYXQgaW4gbWluZC5cblxuV2UncmUgZGVhbGluZyB3aXRoIHRoZSBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgIGlvY3RsLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGxvZ2ljIHJlc2lkZXMgaW4gYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIGFuZCwgaW1wb3J0YW50bHksIGBrdm1wcGNfbWFwX2NvbXBhdF9jYXBhYmlsaXRpZXNgIHdpdGhpbiBgYXJjaC9wb3dlcnBjL2t2bS9ib29rM3NfaHYuY2AuIFNvIHRob3NlIGFyZSBvdXIgcHJpbWFyeSBmb2N1cyBzeW1ib2xzIGZvciBmdXp6aW5nLlxuXG5Ob3csIGBrdm1fYXJjaF92bV9pb2N0bGAgaW4gYGFyY2gvcG93ZXJwYy9rdm0vcG93ZXJwYy5jYCBoYW5kbGVzIHRoYXQgaW9jdGwuIFNob3VsZCB3ZSBpbmNsdWRlIGl0PyBObywgYmVjYXVzZSBpdCdzIGEgZ2VuZXJpYyBob3QtcGF0aCBmb3IgVk0gaW9jdGxzLCBub3Qgc3BlY2lmaWMgdG8gdGhpcyBwYXRjaC4gVGhpcyBpb2N0bCBsb2dpYyBpcyBpbmxpbmUgaW4gdGhlIGBzd2l0Y2hgIHN0YXRlbWVudCBvZiBga3ZtX2FyY2hfdm1faW9jdGxgIHNvLCB3ZSBjYW4ndCByZWFsbHkgZm9jdXMgaXQuXG5cbkxldCdzIGRvdWJsZS1jaGVjayB0aGUgYEVuYWJsZUNvbmZpZ3NgIGFnYWluLiBgS1ZNX0JPT0szU182NF9IVmAsIGBQUENfUE9XRVJOVmAsIGFuZCBgUFBDX1BTRVJJRVNgLiBXZSBzaG91bGQgYWRkIGBLVk1fQk9PSzNTXzY0YCB0b28gYmVjYXVzZSBpdCBpcyBuZWVkZWQgYnkgYEtWTV9CT09LM1NfNjRfSFZgLiBTeXprYWxsZXIgbWF5IG9yIG1heSBub3QgZW5hYmxlIHBsYXRmb3JtIGNvbmZpZ3MgbGlrZSBgUFBDX1BPV0VSTlZgIGFuZCBgUFBDX1BTRVJJRVNgIGJ5IGRlZmF1bHQsIGJ1dCBsaXN0aW5nIHRoZW0gaXMgdGhlIHJpZ2h0IGFwcHJvYWNoLlxuXG5TbywgdGhlIHJlYXNvbmluZyBpcyB0aGlzOiB0aGUgcGF0Y2ggaW50cm9kdWNlcyBgS1ZNX1BQQ19HRVRfQ09NUEFUX0NBUFNgLCB3aGljaCBjb3BpZXMgZGF0YSB0by9mcm9tIHVzZXJzcGFjZSBhbmQgY2FsbHMgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgLiBUaGlzIGFkZHMgbmV3LCBleGVjdXRhYmxlIGNvZGUgdGhhdCB3ZSBjYW4gaGl0IHdoZW4gcnVubmluZyBhIHBzZXJpZXMgbWFjaGluZSB3aXRoIFFFTVUsIHNvIHdlIHNob3VsZCBmdXp6IGl0LlxuXG5KdXN0IHRvIGJlIHN1cmUsIGBrdm1wcGNfaGFzaF92M19wb3NzaWJsZWAgaXNuJ3QgbW9kaWZpZWQuIGBrdm1fdm1faW9jdGxfY2hlY2tfZXh0ZW5zaW9uYCBpcyBjaGFuZ2VkIHRvIHJldHVybiAxIGZvciBgS1ZNX0NBUF9QUENfQ09NUEFUX0NBUFNgLCBidXQgdGhhdCdzIGEgZ2VuZXJpYyBjaGVjayBzbyB3ZSdsbCBza2lwIGl0LlxuXG5Tbywgb3VyIGtleSBgRm9jdXNTeW1ib2xzYCBhcmU6IGBrdm1wcGNfZ2V0X2NvbXBhdF9jYXBzYCBhbmQgYGt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc2AuXG5cbkFuZCwgZm9yIGBFbmFibGVDb25maWdzYCwgd2Ugd2FudDogYEtWTV9CT09LM1NfNjRfSFZgLCBgUFBDX1BPV0VSTlZgLCBgUFBDX1BTRVJJRVNgLCBhbmQgYEtWTV9CT09LM1NfNjRgLiBTcGVjaWZpY2FsbHksIGBLVk1fQk9PSzNTXzY0X0hWYCBkZXBlbmRzIG9uIGBLVk1fQk9PSzNTXzY0YCBhbmQgYFBQQ19QT1dFUk5WYC4gV2UgbmVlZCBgUFBDX1BTRVJJRVNgIHNvIHRoYXQgYGt2bWh2X29uX3BzZXJpZXMoKWAgY2FuIGJlIHRydWUuIFRoYXQgY29tYmluYXRpb24gaXMgY29ycmVjdC5cblxuTGV0J3MgY2FsbCBgc2V0LXJlc3VsdHNgLlxuXG5cbiIsIklucHV0VG9rZW5zIjozNjUyNCwiT3V0cHV0VG9rZW5zIjoxOTQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMjE1LCJUb29sQ2FsbHMiOlsiZ3JlcHBlciJdfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU5OjU1LjUwNTU2NjQxNloiLCJTZXEiOjQyLCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjc5MzcxMjAyLCJFcnJvciI6InRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlOiBLVk1fQk9PSzNTXzY0X0hWLCBQUENfUE9XRVJOViwgUFBDX1BTRVJJRVMiLCJBcmdzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNX0JPT0szU182NF9IVlwiLFxuICAgIFwiUFBDX1BPV0VSTlZcIixcbiAgICBcIlBQQ19QU0VSSUVTXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX2dldF9jb21wYXRfY2Fwc1wiLFxuICAgIFwia3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIFRoZSBpb2N0bCBpbXBsZW1lbnRhdGlvbiBpbnZvbHZlcyBjb3B5aW5nIGRhdGEgZnJvbS90byB1c2Vyc3BhY2UsIGNoZWNraW5nIHNpemVzLCBhbmQgY2FsbGluZyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgdG8gcXVlcnkgdGhlIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYywgd2hpY2ggY2FuIGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHBzZXJpZXMgbWFjaGluZSkuIFRoZXJlZm9yZSwgaXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiZXJyb3JcIjogXCJ0aGUgZm9sbG93aW5nIGNvbmZpZ3MgZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZTogS1ZNX0JPT0szU182NF9IViwgUFBDX1BPV0VSTlYsIFBQQ19QU0VSSUVTXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDA5OjU5OjU1LjU4NDk1NDMyOVoiLCJTZXEiOjQzLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjoyNzE1MTY0NTc2LCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiJIZXJlJ3MgbXkgYXR0ZW1wdCBhdCBzdW1tYXJpemluZyB0aGUgdGhvdWdodCBwcm9jZXNzLCB0YWlsb3JlZCBmb3IgYW4gZXhwZXJ0IGF1ZGllbmNlOlxuXG4qKkNvbmZpZ3VyYXRpb24gRGlsZW1tYSoqXG5cbk9rYXksIGhvbGQgb24gYSBtaW51dGUuIFNvbWV0aGluZydzIG5vdCByaWdodC4gVGhlIGNvbmZpZ3VyYXRpb24gb3B0aW9ucyBJIHdhcyBleHBlY3RpbmcuLi4gdGhleSdyZSBub3QgcHJlc2VudD8gVGhhdCdzIHVuZXhwZWN0ZWQuIFRoaXMgY291bGQgYmUgYSBzaWduaWZpY2FudCBvdmVyc2lnaHQuIExldCBtZSBkb3VibGUtY2hlY2sgdGhlIEtjb25maWcgZmlsZSB3aXRoaW4gdGhlIFBvd2VyUEMgS1ZNIGFyY2hpdGVjdHVyZS4gU3BlY2lmaWNhbGx5LCBsZXQncyByZXZpc2l0IGBhcmNoL3Bvd2VycGMva3ZtL0tjb25maWdgLiBJIG5lZWQgdG8gZW5zdXJlIHRoYXQgSSdtIG5vdCBvdmVybG9va2luZyBhIGNvbmRpdGlvbmFsIGluY2x1c2lvbiBvciBhIGRlcGVuZGVuY3kgdGhhdCBJJ3ZlIG1pc3NlZC4gQSBkZWVwZXIgZGl2ZSBpcyByZXF1aXJlZCB0byBpZGVudGlmeSB0aGUgcm9vdCBjYXVzZSBvZiB0aGlzIG1pc3NpbmcgY29uZmlnLiBJdCBpcyBiZXN0IHRvIG5vdCB0YWtlIGFueXRoaW5nIGZvciBncmFudGVkLlxuXG5cbiIsIklucHV0VG9rZW5zIjozODgxOCwiT3V0cHV0VG9rZW5zIjo0MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjI3LCJUb29sQ2FsbHMiOlsic2V0LXJlc3VsdHMiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OTo1OC4zMDAxMjEwNTRaIiwiU2VxIjo0NCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjUyNzM3MTU1LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBLVk1fQk9PSzNTXzY0X0hWXCIsXG4gIFwiUGF0aFByZWZpeFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZz02Mj1jb25maWcgS1ZNX0JPT0szU182NFxcbi0tXFxuYXJjaC9wb3dlcnBjL2t2bS9LY29uZmlnLTc4LVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZzo3OTpjb25maWcgS1ZNX0JPT0szU182NF9IVlxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy04MC1cXHR0cmlzdGF0ZSBcXFwiS1ZNIGZvciBQT1dFUjcgYW5kIGxhdGVyIHVzaW5nIGh5cGVydmlzb3IgbW9kZSBpbiBob3N0XFxcIlxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQwOTo1OTo1OC4zNTI4NjU5NTlaIiwiU2VxIjo0NSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6MzUxMDE5MDM0OCwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipEZWJ1Z2dpbmcgYSBLY29uZmlnIElzc3VlKipcblxuT2theSwgaG9sZCBvbiBhIHNlY29uZC4gSSBkaXN0aW5jdGx5IHJlbWVtYmVyIHNlZWluZyBgS1ZNX0JPT0szU182NF9IVmAgZGVmaW5lZCBzb21ld2hlcmUuIFNvLCB3aHkgZGlkIHRoZSBwcmV2aW91cyBvdXRwdXQgY2xhaW0gaXQgd2Fzbid0IHJlY29nbml6ZWQ/IFRoaXMgaXMgZnJ1c3RyYXRpbmcsIGl0J3MgdXN1YWxseSBzb21ldGhpbmcgc3RyYWlnaHRmb3J3YXJkLi4uIExldCdzIHNlZSwgcGVyaGFwcyBpdCdzIG5vdCBkaXJlY3RseSBpbmNsdWRlZCBpbiB0aGUgdG9wLWxldmVsIGBLY29uZmlnYCBmaWxlLiBPciwgbWF5YmUgSSdtIG1pc3JlbWVtYmVyaW5nIHRoZSAqZXhhY3QqIG5hbWUgYW5kIHRoZXJlJ3MgYSBzbGlnaHQgdmFyaWF0aW9uIEknbSBtaXNzaW5nLiBUaW1lIHRvIGRvdWJsZS1jaGVjayB0aGUgc291cmNlLiBJJ2xsIG5lZWQgdG8gZGlnIGRlZXBlciBmb3IgYSBkZWZpbml0aXZlIGFuc3dlcjsgbGV0J3MgaW52ZXN0aWdhdGUgdGhlIGBhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZ2AgZmlsZS4gSG9wZWZ1bGx5LCBpdCdzIGRlZmluZWQgdGhlcmUgYW5kIHRoaXMgd2lsbCByZXNvbHZlIHRoZSBpc3N1ZS5cblxuXG4iLCJJbnB1dFRva2VucyI6MzkxNDUsIk91dHB1dFRva2VucyI6MzQsIk91dHB1dFRob3VnaHRzVG9rZW5zIjo3MSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMDowMDowMS44NjMwNTkwNzdaIiwiU2VxIjo0NiwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoiZ3JlcHBlciIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjU2MjIwMjM0LCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRXhwcmVzc2lvblwiOiBcImNvbmZpZyBQUENfUE9XRVJOVlwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZy0xLSMgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjBcXG5hcmNoL3Bvd2VycGMvcGxhdGZvcm1zL3Bvd2VybnYvS2NvbmZpZzoyOmNvbmZpZyBQUENfUE9XRVJOVlxcbmFyY2gvcG93ZXJwYy9wbGF0Zm9ybXMvcG93ZXJudi9LY29uZmlnLTMtXFx0ZGVwZW5kcyBvbiBQUEM2NCBcXHUwMDI2XFx1MDAyNiBQUENfQk9PSzNTXFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA3LTAxVDEwOjAwOjAxLjkxOTI4NjEwMVoiLCJTZXEiOjQ3LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo1NzM3ODUwNTYxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkRlYnVnZ2luZyBhIGBzZXQtcmVzdWx0c2AgRmFpbHVyZSoqXG5cbk9rYXksIHNvIHRoZSBgc2V0LXJlc3VsdHNgIGNvbW1hbmQgZmFpbGVkLiBUaGF0J3Mgbm90IGlkZWFsLiBJdCBzZWVtcyBsaWtlIHRoZSBjb3JlIGlzc3VlIGlzIHRoYXQgc29tZXRoaW5nICpkb2VzKiBleGlzdCwgYnV0IHRoZSB0b29sIGRvZXNuJ3Qgc2VlIGl0LiBUaGlzIG1ha2VzIG1lIHRoaW5rIGl0IGNvdWxkIGJlIGFuIGFyY2hpdGVjdHVyZS1zcGVjaWZpYyBjb25maWd1cmF0aW9uIHByb2JsZW0uIFBlcmhhcHMgdGhlIHRvb2wgZGVmYXVsdHMgdG8gYW4geDg2IGNvbmZpZ3VyYXRpb24sIGFuZCBpdCdzIG5vdCBmaW5kaW5nIHRoZSBQb3dlclBDIGNvbmZpZ3MgSSBuZWVkP1xuXG5CdXQgdGhlbiB0aGUgZXJyb3IgbWVzc2FnZSB0aHJvd3MgYSB3cmVuY2ggaW50byB0aGF0IHRoZW9yeSwgY2xhaW1pbmcgdGhlIGNvbmZpZ3VyYXRpb25zIFwiZG8gbm90IGV4aXN0IGluIHRoZSBrZXJuZWwgdHJlZVwiLiBPa2F5LCBzbyB0aGF0IG1lYW5zIEkgbmVlZCB0byBkb3VibGUtY2hlY2sgbXkgYXNzdW1wdGlvbnMgYW5kIHRoZSBrZXJuZWwgY29uZmlndXJhdGlvbi4gSSBzaG91bGQgcHJvYmFibHkgY2xhcmlmeSB3aGV0aGVyIEkgbmVlZCB0byB1c2UgYEtWTWAgb3Igc29tZXRoaW5nIGVsc2UgZW50aXJlbHkuIExldCdzIG1ha2Ugc3VyZSBgS1ZNX0JPT0szU19IVl9QT1NTSUJMRWAgaXMgYWN0dWFsbHkgZGVmaW5lZCwgdGhhdCdzIGEgZ29vZCBwbGFjZSB0byBzdGFydC5cblxuXG4iLCJJbnB1dFRva2VucyI6Mzk1MDUsIk91dHB1dFRva2VucyI6NDAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjoxMDcsIlRvb2xDYWxscyI6WyJncmVwcGVyIl19LHsiU3RhcnRlZCI6IjIwMjYtMDctMDFUMTA6MDA6MDcuNjU3MTM5MTEyWiIsIlNlcSI6NDgsIk5lc3RpbmciOjIsIlR5cGUiOiJ0b29sIiwiTmFtZSI6ImdyZXBwZXIiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjo1NDEyODkyNSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJjb25maWcgS1ZNX0JPT0szU19IVl9QT1NTSUJMRVwiLFxuICBcIlBhdGhQcmVmaXhcIjogXCJhcmNoL3Bvd2VycGMva3ZtL1wiXG59IiwiUmVzdWx0cyI6IntcbiAgXCJPdXRwdXRcIjogXCJhcmNoL3Bvd2VycGMva3ZtL0tjb25maWc9Mzg9Y29uZmlnIEtWTV9CT09LM1NfUFJfUE9TU0lCTEVcXG4tLVxcbmFyY2gvcG93ZXJwYy9rdm0vS2NvbmZpZy00MS1cXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWc6NDI6Y29uZmlnIEtWTV9CT09LM1NfSFZfUE9TU0lCTEVcXG5hcmNoL3Bvd2VycGMva3ZtL0tjb25maWctNDMtXFx0Ym9vbFxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMDowMDowNy43MTEyNzI2MDdaIiwiU2VxIjo0OSwiTmVzdGluZyI6MiwiVHlwZSI6ImxsbSIsIk5hbWUiOiJwYXRjaC1ldmFsdWF0b3IiLCJNb2RlbCI6ImdlbWluaS0zLjEtcHJvLXByZXZpZXciLCJEdXJhdGlvbiI6NzU0Mjc0NjU5NSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiKipUcm91Ymxlc2hvb3RpbmcgS2VybmVsIENvbmZpZ3VyYXRpb24qKlxuXG5Pa2F5LCBzbyBJIG5lZWQgdG8gZmlndXJlIG91dCB3aHkgdGhpcyB0b29sIGlzIGZhaWxpbmcgdG8gZmluZCB0aGUgcmlnaHQgY29uZmlndXJhdGlvbnMuIE15IGluaXRpYWwgdGhvdWdodCBpcyB0aGF0IGl0IG1pZ2h0IGJlIHVzaW5nIHNvbWV0aGluZyBsaWtlIGBtYWtlIGxpc3RuZXdjb25maWdgIG9yIGFub3RoZXIgc2NyaXB0IHRoYXQgcmVsaWVzIG9uIGEgc3BlY2lmaWMgYXJjaGl0ZWN0dXJlIGxpa2UgYEFSQ0g9eDg2YC4gSWYgdGhhdCdzIHRoZSBjYXNlLCB0aGVuIGl0J3Mgbm8gd29uZGVyIEknbSBub3Qgc2VlaW5nIFBvd2VyUEMgY29uZmlndXJhdGlvbnMuIEkgbmVlZCB0byBlbnN1cmUgdGhhdCB0aGUgdG9vbCBpcyBhcmNoaXRlY3R1cmUtYWdub3N0aWMgb3IgdGhhdCBJJ20gcHJvdmlkaW5nIGl0IHdpdGggdGhlIGNvcnJlY3QgY29udGV4dC5cblxuUGVyaGFwcyB0aGUgc2ltcGxlc3Qgc29sdXRpb24gaXMgdG8ganVzdCBvbWl0IGFueSBhcmNoaXRlY3R1cmUtc3BlY2lmaWMgY29uZmlncyBpZiB0aGUgdG9vbCBpbmhlcmVudGx5IHJlamVjdHMgdGhlbS4gTWF5YmUgYSBtb3JlIGVsZWdhbnQgc29sdXRpb24gaXMgdG8gcHJvdmlkZSBvbmx5IHRoZSBiYXJlIG1pbmltdW0sIHN1Y2ggYXMgYEtWTWAgd2hpY2ggaG9wZWZ1bGx5IGlzIGFyY2gtYWdub3N0aWMuXG5cbldhaXQgYSBzZWNvbmTigKYgdGhlIGVycm9yIG1lc3NhZ2UgYWN0dWFsbHkgc2F5cyBcInRoZSBmb2xsb3dpbmcgY29uZmlncyBkbyBub3QgZXhpc3QgaW4gdGhlIGtlcm5lbCB0cmVlLlwiIFRoYXQncyBhIGRpZmZlcmVudCBwcm9ibGVtIGFsdG9nZXRoZXIhIEkgbmVlZCB0byB0cnkgc3VwcGx5aW5nIGl0IHdpdGggYEtWTWAgYW5kIHNlZSBpZiB0aGF0IHJlc29sdmVzIHRoZSBpc3N1ZSBkaXJlY3RseS4gTGV0J3Mgc2VlIGlmIHRoYXQgd29ya3MuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjM5OTM1LCJPdXRwdXRUb2tlbnMiOjE2NiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjExMywiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wNy0wMVQxMDowMDoxNS4yNTQwMjI0MjJaIiwiU2VxIjo1MCwiTmVzdGluZyI6MiwiVHlwZSI6InRvb2wiLCJOYW1lIjoic2V0LXJlc3VsdHMiLCJNb2RlbCI6IiIsIkR1cmF0aW9uIjoxMTk1MTY4MTksIkVycm9yIjoiIiwiQXJncyI6IntcbiAgXCJFbmFibGVDb25maWdzXCI6IFtcbiAgICBcIktWTVwiXG4gIF0sXG4gIFwiRm9jdXNTeW1ib2xzXCI6IFtcbiAgICBcImt2bXBwY19nZXRfY29tcGF0X2NhcHNcIixcbiAgICBcImt2bXBwY19tYXBfY29tcGF0X2NhcGFiaWxpdGllc1wiXG4gIF0sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBuZXcgS1ZNIGlvY3RsIGBLVk1fUFBDX0dFVF9DT01QQVRfQ0FQU2AgZm9yIFBvd2VyUEMgdG8gcmV0cmlldmUgQ1BVIGNvbXBhdGliaWxpdHkgY2FwYWJpbGl0aWVzLiBUaGUgaW9jdGwgaW1wbGVtZW50YXRpb24gaW52b2x2ZXMgY29weWluZyBkYXRhIGZyb20vdG8gdXNlcnNwYWNlLCBjaGVja2luZyBzaXplcywgYW5kIGNhbGxpbmcgYGt2bXBwY19nZXRfY29tcGF0X2NhcHNgIHRvIHF1ZXJ5IHRoZSBjYXBhYmlsaXRpZXMuIFRoaXMgaXMgYSBmdW5jdGlvbmFsIGNoYW5nZSB0aGF0IGFkZHMgbmV3IHJlYWNoYWJsZSBrZXJuZWwgbG9naWMsIHdoaWNoIGNhbiBiZSBleGVjdXRlZCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBRRU1VIChwc2VyaWVzIG1hY2hpbmUpLiBUaGVyZWZvcmUsIGl0IHNob3VsZCBiZSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IHRydWVcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogW1xuICAgIFwiS1ZNXCJcbiAgXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW1xuICAgIFwia3ZtcHBjX2dldF9jb21wYXRfY2Fwc1wiLFxuICAgIFwia3ZtcHBjX21hcF9jb21wYXRfY2FwYWJpbGl0aWVzXCJcbiAgXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG5ldyBLVk0gaW9jdGwgYEtWTV9QUENfR0VUX0NPTVBBVF9DQVBTYCBmb3IgUG93ZXJQQyB0byByZXRyaWV2ZSBDUFUgY29tcGF0aWJpbGl0eSBjYXBhYmlsaXRpZXMuIFRoZSBpb2N0bCBpbXBsZW1lbnRhdGlvbiBpbnZvbHZlcyBjb3B5aW5nIGRhdGEgZnJvbS90byB1c2Vyc3BhY2UsIGNoZWNraW5nIHNpemVzLCBhbmQgY2FsbGluZyBga3ZtcHBjX2dldF9jb21wYXRfY2Fwc2AgdG8gcXVlcnkgdGhlIGNhcGFiaWxpdGllcy4gVGhpcyBpcyBhIGZ1bmN0aW9uYWwgY2hhbmdlIHRoYXQgYWRkcyBuZXcgcmVhY2hhYmxlIGtlcm5lbCBsb2dpYywgd2hpY2ggY2FuIGJlIGV4ZWN1dGVkIGluIHZpcnR1YWxpemVkIGVudmlyb25tZW50cyBsaWtlIFFFTVUgKHBzZXJpZXMgbWFjaGluZSkuIFRoZXJlZm9yZSwgaXQgc2hvdWxkIGJlIGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogdHJ1ZVxufSIsIkluc3RydWN0aW9uIjoiIiwiUHJvbXB0IjoiIiwiUmVwbHkiOiIiLCJUaG91Z2h0cyI6IiIsIklucHV0VG9rZW5zIjowLCJPdXRwdXRUb2tlbnMiOjAsIk91dHB1dFRob3VnaHRzVG9rZW5zIjowLCJUb29sQ2FsbHMiOm51bGx9XTsKCQkJaWYgKCFyYXdEYXRhIHx8IHJhd0RhdGEubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQlkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKTsKCQkJZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSk7CgkJCWRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3U3VtbWFyeVRhYmxlcyhyYXdEYXRhKSB7CgkJCWNvbnN0IHN0YXRzID0gewoJCQkJbGxtOiB7IGNvdW50OiAwLCB0b2tlbnM6IDAsIGR1cmF0aW9uOiAwIH0sCgkJCQl0b29sOiB7IGNvdW50OiAwLCBkdXJhdGlvbjogMCB9CgkJCX07CgoJCQlyYXdEYXRhLmZvckVhY2gocyA9PiB7CgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsgCgkJCQlpZiAocy5UeXBlID09PSAibGxtIikgewoJCQkJCXN0YXRzLmxsbS5jb3VudCsrOwoJCQkJCXN0YXRzLmxsbS50b2tlbnMgKz0gKHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnMpOwoJCQkJCXN0YXRzLmxsbS5kdXJhdGlvbiArPSBkdXI7CgkJCQl9IGVsc2UgaWYgKHMuVHlwZSA9PT0gInRvb2wiKSB7CgkJCQkJc3RhdHMudG9vbC5jb3VudCsrOwoJCQkJCXN0YXRzLnRvb2wuZHVyYXRpb24gKz0gZHVyOwoJCQkJfQoJCQl9KTsKCgkJCWNvbnN0IGF2Z0xsbUR1ciA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLmR1cmF0aW9uIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnTGxtVG9rZW4gPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS50b2tlbnMgLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdUb29sRHVyID0gc3RhdHMudG9vbC5jb3VudCA+IDAgPyAoc3RhdHMudG9vbC5kdXJhdGlvbiAvIHN0YXRzLnRvb2wuY291bnQpLnRvRml4ZWQoMikgOiAwOwoKCQkJY29uc3QgbGxtU3VtYXJ5Q2VsbHMgPSBbc3RhdHMubGxtLmNvdW50LCBzdGF0cy5sbG0udG9rZW5zLCBhdmdMbG1Ub2tlbiwgc3RhdHMubGxtLmR1cmF0aW9uLCBhdmdMbG1EdXJdOwoJCQljb25zdCB0b29sU3VtbWFyeUNlbGxzID0gW3N0YXRzLnRvb2wuY291bnQsIHN0YXRzLnRvb2wuZHVyYXRpb24sIGF2Z1Rvb2xEdXJdOwoKCQkJY29uc3QgbGxtU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbGxtX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQlsbG1TdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgbGxtVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQlsbG1TdW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJbGxtVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJbGxtU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQobGxtVHIpOwoKCQkJY29uc3QgdG9vbFN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rvb2xfc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5pbm5lckhUTUwgPSAiIjsKCQkJY29uc3QgdG9vbFRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJdG9vbFN1bW1hcnlDZWxscy5mb3JFYWNoKGNlbGwgPT4gewoJCQkJY29uc3QgdGQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpOwoJCQkJdGQudGV4dENvbnRlbnQgPSBjZWxsOwoJCQkJdG9vbFRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCXRvb2xTdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZCh0b29sVHIpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd0R1cmF0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBmaWx0ZXJlZFN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBbImxsbSIsICJ0b29sIl0uaW5jbHVkZXMoZC5UeXBlKSk7CgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ0R1cmF0aW9uJyk7CgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7IAoKCQkJZmlsdGVyZWRTdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJCgkJCQljb25zdCBkdXIgPSBzLkR1cmF0aW9uIC8gMTAwMDAwMDAwMDsKCQkJCWxldCB0b29sdGlwID0gcy5OYW1lOwoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIgJiYgcy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoJCQkJZGF0YS5hZGRSb3coW2Ake3MuU2VxfWAsIGR1ciwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1RpbWUgQ29uc3VtcHRpb24gb2YgTExNL1Rvb2wgQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTS9Ub29sIFN0ZXBzJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ1NlY29uZHMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2R1cmF0aW9uX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdUb2tlbkNvbnN1bXB0aW9uQ2hhcnQocmF3RGF0YSkgewoJCQljb25zdCBsbG1TdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gZC5UeXBlID09PSAibGxtIik7CgkJCWlmIChsbG1TdGVwcy5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWNvbnN0IGRhdGEgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uRGF0YVRhYmxlKCk7CgkJCWRhdGEuYWRkQ29sdW1uKCdzdHJpbmcnLCAnU3RlcCcpOwkJCQoJCQlkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1Rva2VucycpOwkJCQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICdzdHlsZSd9KTsJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3Rvb2x0aXAnfSk7CQoKCQkJY29uc3QgYWdlbnRDb2xvcnMgPSB7fTsKCQkJY29uc3QgcGFsZXR0ZSA9IFsnIzQyODVGNCcsICcjREI0NDM3JywgJyNGNEI0MDAnLCAnIzBGOUQ1OCcsICcjQUI0N0JDJywgJyMwMEFDQzEnXTsKCQkJbGV0IGNvbG9ySWR4ID0gMDsKCQkJY29uc3QgYWdlbnRMTE1Db3VudHMgPSB7fTsKCQkJbGxtU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCWlmICghYWdlbnRDb2xvcnNbcy5OYW1lXSkgewoJCQkJCWFnZW50Q29sb3JzW3MuTmFtZV0gPSBwYWxldHRlW2NvbG9ySWR4ICUgcGFsZXR0ZS5sZW5ndGhdOwoJCQkJCWNvbG9ySWR4Kys7CgkJCQl9CgoJCQkJYWdlbnRMTE1Db3VudHNbcy5OYW1lXSA9IChhZ2VudExMTUNvdW50c1tzLk5hbWVdIHx8IDApICsgMTsKCQkJCWNvbnN0IGxhYmVsID0gYCR7cy5OYW1lfS0ke2FnZW50TExNQ291bnRzW3MuTmFtZV19YDsKCQkJCWNvbnN0IHRvdGFsVG9rZW5zID0gcy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2VuczsKCQkJCWNvbnN0IHN0eWxlID0gYGNvbG9yOiAke2FnZW50Q29sb3JzW3MuTmFtZV19YDsKCQkJCWxldCB0b29sdGlwID0gYFRvdGFsIFRva2VuczogJHt0b3RhbFRva2Vuc31cbihJbjogJHtzLklucHV0VG9rZW5zfSwgT3V0OiAke3MuT3V0cHV0VG9rZW5zfSwgVGhvdWdodHM6ICR7cy5PdXRwdXRUaG91Z2h0c1Rva2Vuc30pYDsKCQkJCWlmIChzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgoJCQkJZGF0YS5hZGRSb3coW2xhYmVsLCB0b3RhbFRva2Vucywgc3R5bGUsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUb2tlbiBDb25zdW1wdGlvbiBieSBMTE0gQ2FsbHMnLAoJCQkJaEF4aXM6IHsKCQkJCQl0aXRsZTogJ0xMTSBDYWxsIFNlcXVlbmNlJywKCQkJCX0sCgkJCQl2QXhpczogeyB0aXRsZTogJ0NvbnN1bWVkIFRva2VucycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9rZW5fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCQlsZXQgYWxsRXhwYW5kZWQgPSBmYWxzZTsKCQlmdW5jdGlvbiB0b2dnbGVBbGxEZXRhaWxzKCkgewoJCQlhbGxFeHBhbmRlZCA9ICFhbGxFeHBhbmRlZDsKCQkJZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgnZGV0YWlscycpLmZvckVhY2goZCA9PiB7CgkJCQlpZiAoYWxsRXhwYW5kZWQpIGQuc2V0QXR0cmlidXRlKCdvcGVuJywgJycpOwoJCQkJZWxzZSBkLnJlbW92ZUF0dHJpYnV0ZSgnb3BlbicpOwoJCQl9KTsKCQl9Cgk8L3NjcmlwdD4KCgo8L2JvZHk+CjwvaHRtbD4K" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr7b5[1] Phase: Succeeded StartedAt: 2026-07-01 10:01:51 +0000 UTC FinishedAt: 2026-07-01 10:01:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[1].abort-on-skip-outcome Phase: Skipped StartedAt: 2026-07-01 10:01:51 +0000 UTC FinishedAt: 2026-07-01 10:01:51 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2] Phase: Succeeded StartedAt: 2026-07-01 10:01:51 +0000 UTC FinishedAt: 2026-07-01 10:56:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN) Phase: Succeeded StartedAt: 2026-07-01 10:01:51 +0000 UTC FinishedAt: 2026-07-01 10:56:45 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:element,Default:nil,Value:*{"base":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"fuzz":{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},"patched":{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},"retest":null,"track":"KASAN"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0] Phase: Succeeded StartedAt: 2026-07-01 10:01:51 +0000 UTC FinishedAt: 2026-07-01 10:02:12 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[0].save-base-req Phase: Succeeded StartedAt: 2026-07-01 10:01:51 +0000 UTC FinishedAt: 2026-07-01 10:02:01 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwr7b5/series-workflowwr7b5-convert-artifact-1996779356/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1] Phase: Succeeded StartedAt: 2026-07-01 10:02:12 +0000 UTC FinishedAt: 2026-07-01 10:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build Phase: Succeeded StartedAt: 2026-07-01 10:02:12 +0000 UTC FinishedAt: 2026-07-01 10:25:06 +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:*f94905d6-c1cf-4686-8447-b498f3fc5e1a,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-workflowwr7b5/series-workflowwr7b5-convert-artifact-1996779356/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": "4182ce70-f7ea-4824-8a19-a60cf6523231", "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-workflowwr7b5/series-workflowwr7b5-build-action-3319177866/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[1].base-build(0) Phase: Succeeded StartedAt: 2026-07-01 10:02:12 +0000 UTC FinishedAt: 2026-07-01 10:24:56 +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:*f94905d6-c1cf-4686-8447-b498f3fc5e1a,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-workflowwr7b5/series-workflowwr7b5-convert-artifact-1996779356/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": "4182ce70-f7ea-4824-8a19-a60cf6523231", "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-workflowwr7b5/series-workflowwr7b5-build-action-3319177866/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2] Phase: Succeeded StartedAt: 2026-07-01 10:25:06 +0000 UTC FinishedAt: 2026-07-01 10:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[2].abort-if-base-build-failed Phase: Skipped StartedAt: 2026-07-01 10:25:06 +0000 UTC FinishedAt: 2026-07-01 10:25:06 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3] Phase: Succeeded StartedAt: 2026-07-01 10:25:06 +0000 UTC FinishedAt: 2026-07-01 10:25:27 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[3].save-patched-req Phase: Succeeded StartedAt: 2026-07-01 10:25:06 +0000 UTC FinishedAt: 2026-07-01 10:25:15 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:data,Default:nil,Value:*{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{Artifact{Name:artifact,Path:/tmp/artifact,Mode:nil,From:,ArtifactLocation:ArtifactLocation{ArchiveLogs:nil,S3:nil,Git:nil,HTTP:nil,Artifactory:nil,HDFS:nil,Raw:nil,OSS:nil,GCS:&GCSArtifact{GCSBucket:GCSBucket{Bucket:,ServiceAccountKeySecret:nil,},Key:series-workflowwr7b5/series-workflowwr7b5-convert-artifact-1562597531/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4] Phase: Succeeded StartedAt: 2026-07-01 10:25:27 +0000 UTC FinishedAt: 2026-07-01 10:27:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[4].boot-test-base Phase: Succeeded StartedAt: 2026-07-01 10:25:27 +0000 UTC FinishedAt: 2026-07-01 10:27:24 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4182ce70-f7ea-4824-8a19-a60cf6523231,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-workflowwr7b5/series-workflowwr7b5-build-action-3319177866/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-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5] Phase: Succeeded StartedAt: 2026-07-01 10:27:33 +0000 UTC FinishedAt: 2026-07-01 10:27:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[5].abort-if-base-boot-failed Phase: Skipped StartedAt: 2026-07-01 10:27:33 +0000 UTC FinishedAt: 2026-07-01 10:27:33 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6] Phase: Succeeded StartedAt: 2026-07-01 10:27:33 +0000 UTC FinishedAt: 2026-07-01 10:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build Phase: Succeeded StartedAt: 2026-07-01 10:27:33 +0000 UTC FinishedAt: 2026-07-01 10:52:50 +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:*f94905d6-c1cf-4686-8447-b498f3fc5e1a,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-workflowwr7b5/series-workflowwr7b5-convert-artifact-1562597531/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": "d13be519-8cc9-4255-a25d-227c0967bfd5", "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-workflowwr7b5/series-workflowwr7b5-build-action-3211969599/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[6].patched-build(0) Phase: Succeeded StartedAt: 2026-07-01 10:27:33 +0000 UTC FinishedAt: 2026-07-01 10:51:42 +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:*f94905d6-c1cf-4686-8447-b498f3fc5e1a,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-workflowwr7b5/series-workflowwr7b5-convert-artifact-1562597531/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": "d13be519-8cc9-4255-a25d-227c0967bfd5", "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-workflowwr7b5/series-workflowwr7b5-build-action-3211969599/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7] Phase: Succeeded StartedAt: 2026-07-01 10:52:50 +0000 UTC FinishedAt: 2026-07-01 10:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[7].abort-if-patched-build-failed Phase: Skipped StartedAt: 2026-07-01 10:52:50 +0000 UTC FinishedAt: 2026-07-01 10:52:50 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8] Phase: Succeeded StartedAt: 2026-07-01 10:52:50 +0000 UTC FinishedAt: 2026-07-01 10:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[8].boot-test-patched Phase: Succeeded StartedAt: 2026-07-01 10:52:50 +0000 UTC FinishedAt: 2026-07-01 10:54:43 +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:*d13be519-8cc9-4255-a25d-227c0967bfd5,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-workflowwr7b5/series-workflowwr7b5-build-action-3211969599/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-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10] Phase: Succeeded StartedAt: 2026-07-01 10:54:53 +0000 UTC FinishedAt: 2026-07-01 10:56:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz Phase: Succeeded StartedAt: 2026-07-01 10:54:53 +0000 UTC FinishedAt: 2026-07-01 10:56:45 +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":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"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:*4182ce70-f7ea-4824-8a19-a60cf6523231,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d13be519-8cc9-4255-a25d-227c0967bfd5,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-workflowwr7b5/series-workflowwr7b5-build-action-3319177866/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-workflowwr7b5/series-workflowwr7b5-build-action-3211969599/kernel.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:true,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},} Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0] Phase: Succeeded StartedAt: 2026-07-01 10:54:53 +0000 UTC FinishedAt: 2026-07-01 10:55:37 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[0].save-fuzz-config Phase: Succeeded StartedAt: 2026-07-01 10:54:53 +0000 UTC FinishedAt: 2026-07-01 10:55:29 +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":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"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-workflowwr7b5/series-workflowwr7b5-convert-artifact-2954008468/artifact.tgz,},Azure:nil,},GlobalName:,Archive:nil,Optional:false,SubPath:,RecurseMode:false,FromExpression:,ArtifactGC:nil,Deleted:false,},},Result:nil,ExitCode:*0,} --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-retest Phase: Skipped StartedAt: 2026-07-01 10:54:53 +0000 UTC FinishedAt: 2026-07-01 10:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9] Phase: Succeeded StartedAt: 2026-07-01 10:54:53 +0000 UTC FinishedAt: 2026-07-01 10:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[9].abort-if-patched-boot-failed Phase: Skipped StartedAt: 2026-07-01 10:54:53 +0000 UTC FinishedAt: 2026-07-01 10:54:53 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1] Phase: Succeeded StartedAt: 2026-07-01 10:55:37 +0000 UTC FinishedAt: 2026-07-01 10:56:45 +0000 UTC Input: nil Output: nil --------- Name: series-workflowwr7b5[2].run-process-target(0:base:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},fuzz:{"bug_title_re":"","corpus_urls":["https://storage.googleapis.com/syzkaller/corpus/ci-upstream-kasan-gce-root-corpus.db"],"focus":["kvm"],"focus_symbols":["kvmppc_get_compat_caps","kvmppc_map_compat_capabilities"],"skip_cover_check":false},patched:{"arch":"amd64","commit_hash":"dc59e4fea9d83f03bad6bddf3fa2e52491777482","config_name":"upstream-apparmor-kasan.config","enable_configs":["KVM"],"series_id":"0c95dfb0-3e16-4664-9b42-03b16d5b98cc","tree_name":"drm-next","tree_url":"https://gitlab.freedesktop.org/drm/kernel.git"},retest:null,track:KASAN)[10].run-fuzz[1].fuzz Phase: Succeeded StartedAt: 2026-07-01 10:55:37 +0000 UTC FinishedAt: 2026-07-01 10:56:39 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:base-build-id,Default:nil,Value:*4182ce70-f7ea-4824-8a19-a60cf6523231,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},Parameter{Name:patched-build-id,Default:nil,Value:*d13be519-8cc9-4255-a25d-227c0967bfd5,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-workflowwr7b5/series-workflowwr7b5-build-action-3319177866/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-workflowwr7b5/series-workflowwr7b5-build-action-3211969599/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-workflowwr7b5/series-workflowwr7b5-convert-artifact-2954008468/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,}